调整回调,奖励领取

This commit is contained in:
chy
2025-07-03 13:40:53 +08:00
parent 6e562de6df
commit 4f9afe5df5
15 changed files with 722 additions and 287 deletions

View File

@ -349,14 +349,162 @@ func (s *sReward) List(ctx context.Context, in *model.RewardListIn) (out *model.
}
// GetLift 领取奖励
// func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *model.GetRewardOut, err error) {
//
// giftParam := model.GiftParam{}
// var needUrl bool
// // 判断奖励类型
// if in.Source == 1 {
// // 系统奖励处理
// if in.RewradTypeId == 16 {
// // 需要大区角色
// giftParam.AreaId = in.AreaId
// giftParam.Gid = in.GameId
// giftParam.RoleIdx = in.RoleIdx
// giftParam.TaskId = in.TaskId
// } else {
// // 不需要
// giftParam.TaskId = in.TaskId
// giftParam.Gid = in.GameId
//
// }
// if in.RewardId != 16 && in.RewardId != 37 {
// needUrl = true
// }
// } else {
// // 门店奖励处理
//
// }
//
// glog.Info(ctx, "调用 tencent开始")
// activity, err := gamelife.GetGamelifeClient(ctx).RequestActivity(ctx, &model.QQNetbarActivityIn{PopenId: in.PopenId, ServiceName: consts.GetGift, GiftParam: giftParam})
//
// if err != nil {
// return nil, err
// }
// glog.Info(ctx, "调用 tencent结束")
// fmt.Print(activity)
//
// result, ok := activity.(*model.GiftResponse)
// if !ok {
// return nil, ecode.Fail.Sub("数据类型转换失败")
// }
//
// if len(result.GiftItem) == 0 {
// return nil, ecode.Fail.Sub("奖励领取异常")
// }
//
// // 存储数据库记录
// var data model.GetRewardOut
// if err = dao.RewardWaters.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
// for _, item := range result.GiftItem {
// marshal, err := json.Marshal(item.Water)
// if err != nil {
// return ecode.Fail.Sub("序列化 json 数据出现异常")
// }
// _, err = dao.RewardWaters.Ctx(ctx).Insert(model.RewardWaters{
// OrderId: item.Water.OrderId,
// Status: int64(item.Result),
// Uid: item.Water.Uid,
// Water: string(marshal),
// TaskId: in.TaskId,
// GameId: int64(in.GameId),
// })
//
// if err != nil {
// return ecode.Fail.Sub("添加奖励领取记录异常")
// }
//
// // 根据 result判断
// data.Result = int64(item.Result)
// if item.Result == 1 {
// //// 奖励发放成功,修改状态,扣除数量
// glog.Infof(ctx, "奖励发放成功1修改状态扣除数量")
// // 查询当前奖励是否为最后一个, 如果是则更新任务状态为2 完成
// count, err := dao.UserTaskRewards.Ctx(ctx).Where(do.UserTaskRewards{UserTaskId: in.UserTaskId}).WhereIn(dao.UserTaskRewards.Columns().Status, []int{2, 3, 5}).Count()
// if err != nil {
// return ecode.Fail.Sub("查询用户任务奖励失败")
// }
//
// if count == 1 {
// // 修改任务记录状态2
// _, err = dao.UserTasks.Ctx(ctx).Where(do.UserTasks{Id: in.UserTaskId}).Data(do.UserTasks{
// Status: 2,
// }).Update()
//
// if err != nil {
// return ecode.Fail.Sub("修改用户任务状态失败")
// }
// }
//
// // 增加奖励已领取数量
// _, err = dao.Rewards.Ctx(ctx).Where(do.Rewards{Id: in.RewardId}).Increment(dao.Rewards.Columns().ReceivedNum, 1)
// if err != nil {
// return ecode.Fail.Sub("获取奖励领取记录异常")
// }
//
// // 修改用户任务奖励记录状态
// _, err = dao.UserTaskRewards.Ctx(ctx).Where(do.UserTaskRewards{UserTaskId: in.UserTaskId, RewardId: in.RewardId}).Data(do.UserTaskRewards{
// Status: consts.RewardSuccessStatus,
// }).Update()
//
// if err != nil {
// return ecode.Fail.Sub("修改用户任务奖励记录状态异常")
// }
// } else if item.Result == 2 || item.Result == 3 {
// // 发放背包成功,修改状态
// glog.Infof(ctx, "奖励发放成功2修改状态")
// _, err = dao.UserTaskRewards.Ctx(ctx).Data(do.UserTaskRewards{
// Status: consts.RewardExchangeStatus,
// }).Where(do.UserTaskRewards{
// Id: in.UserTaskId,
// RewardId: in.RewardId,
// }).Update()
//
// if err != nil {
// return ecode.Fail.Sub("修改用户任务奖励记录状态异常")
// }
// } else if item.Result == 4 {
// // 奖励领取失败,不做操作,直接返回
// glog.Infof(ctx, "领取奖励失败")
// return ecode.Fail.Sub("领取奖励失败")
// }
//
// //data.List = append(data.List, model.GetRewardNewOut{
// // Result: int64(item.Result),
// // Water: item.Water,
// //})
// }
//
// return
//
// }); err != nil {
// return
// }
//
// if needUrl {
// data.Url, err = gamelife.GetGamelifeClient(ctx).GetGamelifePackageUrl(ctx, in.PopenId, in.GameCode, in.GameId, in.BindType)
// if err != nil {
// return nil, ecode.Fail.Sub("获取绑定链接失败")
// }
// }
//
// //return &model.GetRewardOut{
// // List: data.List,
// //}, err
// return &data, err
// }
func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *model.GetRewardOut, err error) {
giftParam := model.GiftParam{}
out = &model.GetRewardOut{}
// 判断奖励类型
if in.Source == 1 {
// 系统奖励处理
var needUrl bool
giftParam := model.GiftParam{}
if in.RewradTypeId == 16 {
// 需要大区角色
if in.AreaId == 0 || in.RoleIdx == "" {
return nil, ecode.Params.Sub("获取角色信息失败")
}
giftParam.AreaId = in.AreaId
giftParam.Gid = in.GameId
giftParam.RoleIdx = in.RoleIdx
@ -366,119 +514,120 @@ func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *mode
giftParam.TaskId = in.TaskId
giftParam.Gid = in.GameId
}
} else {
// 门店奖励处理
}
if in.RewradTypeId != 37 && in.RewradTypeId != 16 {
needUrl = true
}
glog.Info(ctx, "调用 tencent开始")
activity, err := gamelife.GetGamelifeClient(ctx).RequestActivity(ctx, &model.QQNetbarActivityIn{PopenId: in.PopenId, ServiceName: consts.GetGift, GiftParam: giftParam})
glog.Info(ctx, "调用 tencent开始")
activity, err2 := gamelife.GetGamelifeClient(ctx).RequestActivity(ctx, &model.QQNetbarActivityIn{PopenId: in.PopenId, ServiceName: consts.GetGift, GiftParam: giftParam})
if err != nil {
return nil, err
}
glog.Info(ctx, "调用 tencent结束")
fmt.Print(activity)
if err2 != nil {
return nil, err2
}
glog.Info(ctx, "调用 tencent结束")
fmt.Print(activity)
result, ok := activity.(*model.GiftResponse)
if !ok {
return nil, ecode.Fail.Sub("数据类型转换失败")
}
result, ok := activity.(*model.GiftResponse)
if !ok {
return nil, ecode.Fail.Sub("数据类型转换失败")
}
if len(result.GiftItem) == 0 {
return nil, ecode.Fail.Sub("奖励领取异常")
}
if len(result.GiftItem) == 0 {
return nil, ecode.Fail.Sub("奖励领取异常")
}
// 存储数据库记录
var data model.GetRewardOut
if err = dao.RewardWaters.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
for _, item := range result.GiftItem {
marshal, err := json.Marshal(item.Water)
if err != nil {
return ecode.Fail.Sub("序列化 json 数据出现异常")
}
_, err = dao.RewardWaters.Ctx(ctx).Insert(model.RewardWaters{
OrderId: item.Water.OrderId,
Status: int64(item.Result),
Uid: item.Water.Uid,
Water: string(marshal),
TaskId: in.TaskId,
GameId: int64(in.GameId),
})
if err != nil {
return ecode.Fail.Sub("添加奖励领取记录异常")
}
// 根据 result判断
if item.Result == 1 {
//// 奖励发放成功,修改状态,扣除数量
glog.Infof(ctx, "奖励发放成功1修改状态扣除数量")
// 查询当前奖励是否为最后一个, 如果是则更新任务状态为2 完成
count, err := dao.UserTaskRewards.Ctx(ctx).Where(do.UserTaskRewards{UserTaskId: in.UserTaskId}).Where(do.UserTaskRewards{Status: 2}).Count()
// 存储数据库记录
if err = dao.RewardWaters.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
for _, item := range result.GiftItem {
marshal, err := json.Marshal(item.Water)
if err != nil {
return ecode.Fail.Sub("查询用户任务奖励失败")
return ecode.Fail.Sub("序列化 json 数据出现异常")
}
_, err = dao.RewardWaters.Ctx(ctx).Insert(model.RewardWaters{
OrderId: item.Water.OrderId,
Status: int64(item.Result),
Uid: item.Water.Uid,
Water: string(marshal),
TaskId: in.TaskId,
GameId: int64(in.GameId),
})
if err != nil {
return ecode.Fail.Sub("添加奖励领取记录异常")
}
if count <= 1 {
// 修改任务记录状态2
_, err = dao.UserTasks.Ctx(ctx).Where(do.UserTasks{Id: in.UserTaskId}).Data(do.UserTasks{
Status: 2,
// 根据 result判断
out.Result = int64(item.Result)
if item.Result == 1 {
//// 奖励发放成功,修改状态,扣除数量
glog.Infof(ctx, "奖励发放成功1修改状态扣除数量")
// 查询当前奖励是否为最后一个, 如果是则更新任务状态为2 完成
count, err := dao.UserTaskRewards.Ctx(ctx).Where(do.UserTaskRewards{UserTaskId: in.UserTaskId}).WhereIn(dao.UserTaskRewards.Columns().Status, []int{2, 3, 5}).Count()
if err != nil {
return ecode.Fail.Sub("查询用户任务奖励失败")
}
if count == 1 {
// 修改任务记录状态2
_, err = dao.UserTasks.Ctx(ctx).Where(do.UserTasks{Id: in.UserTaskId}).Data(do.UserTasks{
Status: 2,
}).Update()
if err != nil {
return ecode.Fail.Sub("修改用户任务状态失败")
}
}
if in.Source == 1 && in.RewradTypeId == 37 || in.Source == 2 {
// 增加奖励已领取数量
_, err = dao.Rewards.Ctx(ctx).Where(do.Rewards{Id: in.RewardId}).Increment(dao.Rewards.Columns().ReceivedNum, 1)
if err != nil {
return ecode.Fail.Sub("获取奖励领取记录异常")
}
}
// 修改用户任务奖励记录状态
_, err = dao.UserTaskRewards.Ctx(ctx).Where(do.UserTaskRewards{Id: in.Id}).Data(do.UserTaskRewards{
Status: consts.RewardSuccessStatus,
}).Update()
if err != nil {
return ecode.Fail.Sub("修改用户任务奖励记录状态异常")
}
} else if item.Result == 2 || item.Result == 3 {
// 发放背包成功,修改状态
glog.Infof(ctx, "奖励发放成功2修改状态")
_, err = dao.UserTaskRewards.Ctx(ctx).Data(do.UserTaskRewards{
Status: consts.RewardExchangeStatus,
}).Where(do.UserTaskRewards{
Id: in.Id,
}).Update()
if err != nil {
return ecode.Fail.Sub("修改用户任务状态失败")
return ecode.Fail.Sub("修改用户任务奖励记录状态异常")
}
needUrl = true
} else if item.Result == 4 {
// 奖励领取失败,不做操作,直接返回
glog.Infof(ctx, "领取奖励失败")
return ecode.Fail.Sub("领取奖励失败")
}
// 增加奖励已领取数量
_, err = dao.Rewards.Ctx(ctx).Where(do.Rewards{Id: in.RewardId}).Increment(dao.Rewards.Columns().ReceivedNum, 1)
if err != nil {
return ecode.Fail.Sub("获取奖励领取记录异常")
}
// 修改用户任务奖励记录状态
_, err = dao.UserTaskRewards.Ctx(ctx).Where(do.UserTaskRewards{UserTaskId: in.UserTaskId, RewardId: in.RewardId}).Data(do.UserTaskRewards{
Status: consts.RewardSuccessStatus,
}).Update()
if err != nil {
return ecode.Fail.Sub("修改用户任务奖励记录状态异常")
}
} else if item.Result == 2 || item.Result == 3 {
// 发放背包成功,修改状态
glog.Infof(ctx, "奖励发放成功2修改状态")
_, err = dao.UserTaskRewards.Ctx(ctx).Data(do.UserTaskRewards{
Status: consts.RewardExchangeStatus,
}).Where(do.UserTaskRewards{
Id: in.UserTaskId,
RewardId: in.RewardId,
}).Update()
if err != nil {
return ecode.Fail.Sub("修改用户任务奖励记录状态异常")
}
} else if item.Result == 4 {
// 奖励领取失败,不做操作,直接返回
glog.Infof(ctx, "领取奖励失败")
return ecode.Fail.Sub("领取奖励失败")
}
data.List = append(data.List, model.GetRewardNewOut{
Result: int64(item.Result),
Water: item.Water,
})
return
}); err != nil {
return
}
return
}); err != nil {
return
if needUrl {
out.Url, err = gamelife.GetGamelifeClient(ctx).GetGamelifePackageUrl(ctx, in.PopenId, in.GameCode, in.GameId, in.BindType)
if err != nil {
return nil, ecode.Fail.Sub("获取绑定链接失败")
}
}
} else {
// 门店奖励处理
}
return &model.GetRewardOut{
List: data.List,
}, err
return out, err
}
// GetGoodsList 调用外部获取物品列表
@ -850,12 +999,11 @@ func (s *sReward) CallBack(ctx context.Context, in *model.RewardCallbackIn) (out
}
//// 回调成功,组装响应参数
//var userTaskReward []*model.UserTaskRewards
//if err = dao.Rewards.Ctx(ctx).Where(dao.Rewards.Columns().PrizeId, in.PrizeId).InnerJoin(dao.UserTaskRewards.Table(), fmt.Sprintf("%s.%s = %s.%s",
// dao.Rewards.Table(), dao.Rewards.Columns().Id, dao.UserTaskRewards.Table(), dao.UserTaskRewards.Columns().RewardId)).Scan(&userTaskReward); err != nil {
// return nil, ecode.Fail.Sub("获取用户奖励记录异常")
//}
//
var rewardCallback []model.RewardCallback
if err = dao.RewardCallback.Ctx(ctx).Where(dao.RewardCallback.Columns().PrizeId, in.PrizeId).Scan(&rewardCallback); err != nil {
return nil, ecode.Fail.Sub("获取用户奖励记录异常")
}
//if userTaskReward == nil {
// res.Errcode = -1
// res.Errmsg = "用户奖励记录为空"
@ -864,11 +1012,11 @@ func (s *sReward) CallBack(ctx context.Context, in *model.RewardCallbackIn) (out
//}
callbackData := make([]model.CallbackData, 0)
//for _, v := range userTaskReward {
callbackData = append(callbackData, model.CallbackData{
PrizeCode: "rewardlsseew0rt70db0lhtazmicw50082uudq",
})
//}
for _, v := range rewardCallback {
callbackData = append(callbackData, model.CallbackData{
PrizeCode: v.InnerOrderId,
})
}
res.Datas = callbackData
@ -878,55 +1026,13 @@ func (s *sReward) CallBack(ctx context.Context, in *model.RewardCallbackIn) (out
func (s *sReward) GetUserClaimList(ctx context.Context, in *model.GetUserClaimListIn) (out *model.GetUserClaimListOut, err error) {
// Initialize result slice
rewards := make([]model.UserClaimReward, 0)
var totalCount int
var userTaskId int64
if in.UserTaskId == 0 {
value, err := dao.UserTasks.Ctx(ctx).
Where(do.UserTasks{UserId: in.UserId, TaskId: in.TaskId}).
Fields(dao.UserTasks.Columns().Id).Value()
if err != nil {
return nil, ecode.Fail.Sub("查询用户任务失败")
}
if value.IsEmpty() {
return nil, ecode.Fail.Sub("用户任务不存在")
}
userTaskId = value.Int64()
} else {
exist, err := dao.UserTasks.Ctx(ctx).WherePri(in.UserTaskId).Exist()
if err != nil || !exist {
return nil, ecode.Fail.Sub("用户任务不存在")
}
userTaskId = in.UserTaskId
rewards := make([]model.UserTaskRewards, 0)
var total int
if err = dao.UserTaskRewards.Ctx(ctx).Where(do.UserTaskRewards{UserTaskId: in.UserTaskId}).ScanAndCount(&rewards, &total, false); err != nil {
return nil, ecode.Fail.Sub("查询用户领取列表异常")
}
// Build base query for rewards
query := dao.UserTaskRewards.Ctx(ctx).
LeftJoin(dao.Rewards.Table(), fmt.Sprintf("%s.%s = %s.%s",
dao.Rewards.Table(),
dao.Rewards.Columns().Id,
dao.UserTaskRewards.Table(),
dao.UserTaskRewards.Columns().RewardId)).
Where(fmt.Sprintf("%s.%s = ?",
dao.UserTaskRewards.Table(),
dao.UserTaskRewards.Columns().UserTaskId),
userTaskId).
Where(dao.UserTaskRewards.Columns().DeletedAt, nil).
Where(dao.Rewards.Columns().DeletedAt, nil)
// Count rewards
if totalCount, err = query.Count(); err != nil {
return nil, ecode.Fail.Sub("任务奖励获取失败")
}
// Scan rewards
if err = query.Fields(fmt.Sprintf("user_task_rewards.reward_id,reward_id, user_task_rewards.status reward_status,user_task_rewards.reward_name reward_name, rewards.*")).WithAll().Scan(&rewards); err != nil {
return nil, ecode.Fail.Sub("任务奖励获取失败")
}
return &model.GetUserClaimListOut{
List: rewards,
Total: totalCount,
Total: total,
}, nil
}