调整任务列表接口记录

This commit is contained in:
2025-07-08 17:53:28 +08:00
parent 2979a2f778
commit afa6b8bcd1
31 changed files with 269 additions and 632 deletions

View File

@ -12,6 +12,7 @@ import (
"server/internal/dao"
"server/internal/model"
"server/internal/model/do"
"server/internal/model/entity"
"server/internal/service"
"server/utility/ecode"
"server/utility/gamelife"
@ -389,7 +390,7 @@ func (s *sTask) GetTask(ctx context.Context, in *model.GetTaskIn) (out *model.Ge
if err = dao.UserTasks.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
// 创建任务记录
_, err = dao.UserTasks.Ctx(ctx).InsertAndGetId(do.UserTasks{
id, err := dao.UserTasks.Ctx(ctx).InsertAndGetId(do.UserTasks{
UserId: in.UserId,
TaskId: in.TaskId,
StoreId: storeId,
@ -404,25 +405,30 @@ func (s *sTask) GetTask(ctx context.Context, in *model.GetTaskIn) (out *model.Ge
return ecode.Fail.Sub("创建用户任务记录失败")
}
////查询该任务相关联的奖励, 创建对应奖励下发记录id
//array, err := dao.TaskRewards.Ctx(ctx).LeftJoin(dao.Rewards.Table(), "rewards.id = task_rewards.reward_id").Where(do.TaskRewards{TaskId: in.TaskId}).
// Fields(dao.TaskRewards.Columns().RewardId).Fields(dao.Rewards.Columns().Name).All()
//if err != nil {
// return ecode.Fail.Sub("获取任务关联奖励列表失败")
//}
//for _, v := range array {
// _, err = dao.UserTaskRewards.Ctx(ctx).Data(do.UserTaskRewards{
// UserTaskId: id,
// RewardId: v["reward_id"].Int64(),
// RewardName: v["name"].String(),
// Status: consts.RewardInitStatus,
// InnerOrderId: fmt.Sprintf("reward%s", guid.S()),
// IssueQuantity: 1,
// }).Insert()
// if err != nil {
// return ecode.Fail.Sub("创建用户任务奖励记录失败")
// }
//}
//查询该任务相关联的奖励, 创建对应奖励下发记录id
array, err := dao.TaskRewards.Ctx(ctx).LeftJoin(dao.Rewards.Table(), "rewards.id = task_rewards.reward_id").Where(do.TaskRewards{TaskId: in.TaskId}).
Fields(dao.TaskRewards.Columns().RewardId).All()
if err != nil {
return ecode.Fail.Sub("获取任务关联奖励列表失败")
}
for _, v := range array {
var reward entity.Rewards
if err := dao.Rewards.Ctx(ctx).WherePri(v["reward_id"].Int64()).Scan(&reward); err != nil {
return ecode.Fail.Sub("获取任务关联奖励列表失败")
}
_, err = dao.UserTaskRewards.Ctx(ctx).Data(do.UserTaskRewards{
UserTaskId: id,
RewardId: v["reward_id"].Int64(),
RewardName: reward.Name,
Status: consts.RewardInitStatus,
IssueQuantity: reward.GrantQuantity,
Source: reward.Source,
RewardTypeId: reward.RewardTypeId,
}).Insert()
if err != nil {
return ecode.Fail.Sub("创建用户任务奖励记录失败")
}
}
return
}); err != nil {
return nil, err
@ -465,208 +471,6 @@ func (s *sTask) GetUserTaskRecordsList(ctx context.Context, in *model.UserTaskRe
}, nil
}
// GetTaskList PC-WEB获取任务列表
//func (s *sTask) GetTaskList(ctx context.Context, in *model.GetTaskListV2In) (out *model.GetTaskListV2Out, err error) {
// var tasks []model.Task
// var pageIdx string
// var data []model.GameTask
// if in.IsBound == 0 {
// // 未绑定游戏查询自己数据库
// err := dao.Tasks.Ctx(ctx).Where(do.Tasks{GameId: in.Gid, NetbarAcconut: in.NetBarAccount}).WithAll().WithAll().Scan(&tasks)
// if err != nil {
// return nil, ecode.Fail.Sub("获取任务列表失败")
// }
//
// for i, v := range tasks {
// err := json.Unmarshal([]byte(v.Task), &tasks[i].GameTask)
// if err != nil {
// return nil, ecode.Fail.Sub("解析任务信息失败")
// }
// tasks[i].Task = ""
// for _, i3 := range tasks[i].TaskRewards {
// tasks[i].GameTask.Reward = append(tasks[i].GameTask.Reward, i3.Rewards)
// }
//
// for _, prize := range tasks[i].GameTask.PrizeList {
// for _, goods := range prize.GoodsList {
// if goods.GoodsType != 37 {
// tasks[i].GameTask.Reward = append(tasks[i].GameTask.Reward, model.SimpleReward{
// Source: 1,
// RewardTypeId: int64(goods.GoodsType),
// Name: goods.GoodsName,
// ImageUrl: goods.GoodsIcon,
// TotalLimit: uint64(v.GameTask.LimitNum),
// })
// }
// }
// }
//
// data = append(data, tasks[i].GameTask)
// }
//
// return &model.GetTaskListV2Out{
// Data: data,
// }, nil
// } else {
// // 已绑定
// // 调用外部接口
// activity, err := gamelife.GetGamelifeClient(ctx).RequestActivity(ctx, &model.QQNetbarActivityIn{ServiceName: consts.GetTaskList, PopenId: in.PopenId, BindType: in.BindType, TaskParam: model.TaskParam{Gid: in.Gid, NetBarAccount: in.NetBarAccount, Num: in.Num, Pageidx: in.Pageidx}})
// if err != nil {
// return nil, err
// }
// result, ok := activity.(*model.GameTaskResponse)
// if !ok {
// return nil, ecode.Fail.Sub("数据类型转换失败")
// }
//
// pageIdx = result.PageIdx
// // 剔除不需要的任务数据
// for i, task := range result.TaskList {
//
//
// // 组装门店奖励数据
// err := dao.TaskRewards.Ctx(ctx).
// LeftJoin(dao.Rewards.Table(),
// fmt.Sprintf("`%s`.`%s` = `%s`.`%s`",
// dao.Rewards.Table(), dao.Rewards.Columns().Id,
// dao.TaskRewards.Table(), dao.TaskRewards.Columns().RewardId)).
// LeftJoin(dao.RewardTypes.Table(),
// fmt.Sprintf("`%s`.`%s` = `%s`.`%s`",
// dao.RewardTypes.Table(), dao.RewardTypes.Columns().Id,
// dao.Rewards.Table(), dao.Rewards.Columns().RewardTypeId)).
// Fields(
// fmt.Sprintf("%s.*, `%s`.`%s` AS %s",
// dao.Rewards.Table(),
// dao.RewardTypes.Table(), dao.RewardTypes.Columns().Name,
// "reward_type_name",
// ),
// ).Where(dao.TaskRewards.Columns().TaskId, task.TaskID).Scan(&result.TaskList[i].Reward)
// if err != nil {
// return nil, err
// }
//
// // 尝试转换q 币结构体
// //for _, prize := range task.PrizeList {
// // for _, goods := range prize.GoodsList {
// // if goods.GoodsType != 37 {
// // task.Reward = append(task.Reward, model.SimpleReward{
// // Source: 1,
// // RewardTypeId: int64(goods.GoodsType),
// // Name: goods.GoodsName,
// // ImageUrl: goods.GoodsIcon,
// // TotalLimit: uint64(task.LimitNum),
// // })
// // }
// // }
// //}
//
// //任务状态=1或者2不做操作其他查询门店奖励是否全部领取
// if task.Status != 1 && task.Status != 2 {
// count, err := dao.UserTasks.Ctx(ctx).Where(dao.UserTasks.Columns().TaskId, task.TaskID).Where(dao.UserTasks.Columns().UserId, in.UserId).LeftJoin(dao.UserTaskRewards.Table(),
// fmt.Sprintf("%s.user_task_id = %s.id", dao.UserTaskRewards.Table(), dao.UserTasks.Table())).LeftJoin(dao.Rewards.Table(), fmt.Sprintf("%s.id = %s.reward_id",
// dao.Rewards.Table(), dao.UserTaskRewards.Table())).Where("rewards.source", 2).Where(dao.UserTaskRewards.Columns().Status, 2).Count()
// if err != nil {
// return nil, ecode.Fail.Sub("查询用户门店任务奖励失败")
// }
//
// if count > 0 {
// result.TaskList[i].Status = 2
// //tasks[i].Status = 2
// } else {
// result.TaskList[i].Status = 3
// //tasks[i].Status = 3
// }
// }
// //else {
// // data.Status = task.Status
// //}
// //tasks = append(tasks, data)
//
// // 根据用户完成次数和任务指标次数判任务是否完成,修改任务记录状态为 3
// if int(task.UserTimes) >= task.TargetTimes {
// if err = dao.UserTasks.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
// orm := dao.UserTasks.Ctx(ctx).Where(do.UserTasks{UserId: in.UserId, TaskId: task.TaskID})
// if task.GameTaskConfig.TimeType == 1 {
// // 每日任务
// start := gtime.Now().StartOfDay()
// end := gtime.Now().EndOfDay()
// orm = orm.WhereBetween(dao.UserTasks.Columns().CreatedAt, start, end)
// }
// value, err := orm.Fields(dao.UserTasks.Columns().Id).Value()
// if err != nil {
// return ecode.Fail.Sub("获取用户任务失败")
// }
// if value.IsEmpty() {
// glog.Info(ctx, "用户任务不存在")
// v, err := dao.Stores.Ctx(ctx).Fields(dao.Stores.Columns().Id).Where(do.Stores{NetbarAccount: in.NetBarAccount}).Value()
// if err != nil {
// return ecode.Fail.Sub("获取门店信息失败")
// }
// serialNumber, err := snowid.GetSnowClient().GenerateSerialNumber()
// if err != nil {
// return ecode.Fail.Sub("生成流水号异常")
// }
// id, err := dao.UserTasks.Ctx(ctx).InsertAndGetId(do.UserTasks{
// UserId: in.UserId,
// TaskId: task.TaskID,
// StoreId: v.Int64(),
// Status: 3,
// SerialNumber: serialNumber,
// TaskName: task.Title,
// GameId: in.Gid,
// TaskType: task.GameTaskConfig.TimeType,
// })
// if err != nil {
// return ecode.Fail.Sub("创建用户任务记录失败")
// }
//
// // 查询该任务相关联的奖励, 创建对应奖励下发记录id
// array, err := dao.TaskRewards.Ctx(ctx).LeftJoin(dao.Rewards.Table(), "rewards.id = task_rewards.reward_id").Where(do.TaskRewards{TaskId: task.TaskID}).Fields(dao.TaskRewards.Columns().RewardId).Fields(dao.Rewards.Columns().Name).All()
// if err != nil {
// return ecode.Fail.Sub("获取任务关联奖励列表失败")
// }
// for _, v := range array {
// _, err = dao.UserTaskRewards.Ctx(ctx).Data(do.UserTaskRewards{
// UserTaskId: id,
// RewardId: v["reward_id"].Int64(),
// RewardName: v["name"].String(),
// Status: consts.RewardPendingStatus,
// InnerOrderId: fmt.Sprintf("reward%s", guid.S()),
// }).Insert()
// if err != nil {
// return ecode.Fail.Sub("创建用户任务奖励记录失败")
// }
// }
// } else {
// glog.Info(ctx, "用户任务存在")
// _, err = dao.UserTasks.Ctx(ctx).WherePri(value.Int64()).Where(dao.UserTasks.Columns().Status).WhereNot(dao.UserTasks.Columns().Status, 2).Update(do.UserTasks{
// Status: 3,
// })
// if err != nil {
// return ecode.Fail.Sub("修改用户任务状态失败")
// }
// _, err = dao.UserTaskRewards.Ctx(ctx).Where(do.UserTaskRewards{UserTaskId: value.Int()}).Where(dao.UserTaskRewards.Columns().Status, 1).Update(do.UserTaskRewards{
// Status: 2,
// })
// if err != nil {
// return ecode.Fail.Sub("修改用户任务奖励状态失败")
// }
// }
// return nil
// }); err != nil {
// return nil, err
// }
//
// }
// }
// data = result.TaskList
// return &model.GetTaskListV2Out{
// Data: data,
// PageIdx: pageIdx,
// }, nil
// }
//}
func (s *sTask) GetTaskList(ctx context.Context, in *model.GetTaskListV2In) (out *model.GetTaskListV2Out, err error) {
out = &model.GetTaskListV2Out{}
if in.IsBound == 1 {
@ -693,19 +497,21 @@ func (s *sTask) GetTaskList(ctx context.Context, in *model.GetTaskListV2In) (out
end := gtime.Now().EndOfDay()
orm = orm.WhereBetween(dao.UserTasks.Columns().CreatedAt, start, end)
}
one, err := orm.Fields(dao.UserTasks.Columns().Id, dao.UserTasks.Columns().UserTimes).One()
one, err := orm.Fields(dao.UserTasks.Columns().Id, dao.UserTasks.Columns().Status, dao.UserTasks.Columns().UserTimes).One()
if err != nil {
return nil, ecode.Fail.Sub("获取用户任务失败")
}
if one.IsEmpty() || one["id"].IsEmpty() {
// 不存在用户任务记录,强制用户完成任务
result.TaskList[i].Status = 1
} else {
if v.Status == 2 {
if v.UserTimes-one["user_times"].Int64() >= v.TargetTimes {
completeTime := gtime.Now()
// 判断是否完成任务,修改奖励下发记录状态为 2
// 存在用户记录,自行判断用户是否完成任务
if v.UserTimes-one["user_times"].Int64() >= v.TargetTimes {
completeTime := gtime.Now()
userTaskStatus := one["status"].Int64()
if userTaskStatus == 1 {
if err := dao.UserTasks.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
if _, err := dao.UserTasks.Ctx(ctx).WherePri(one["id"].Int64()).Where(do.UserTasks{Status: 1}).Data(do.UserTasks{Status: 3, UserTimes: v.UserTimes}).Update(); err != nil {
if _, err := dao.UserTasks.Ctx(ctx).WherePri(one["id"].Int64()).Where(do.UserTasks{Status: 1}).Data(do.UserTasks{Status: 3}).Update(); err != nil {
return ecode.Fail.Sub("修改用户任务状态失败")
}
@ -727,7 +533,7 @@ func (s *sTask) GetTaskList(ctx context.Context, in *model.GetTaskListV2In) (out
return ecode.Fail.Sub("获取用户任务奖励失败")
}
if rewardTypeCode.String() == consts.NetfeeCode {
if quantity, err := CalculateNetfeeRewardQuantity(ctx, in.UserId, in.StoreId, record["reward_id"].Int64(), completeTime); err == nil && quantity != 0 {
if quantity, err := CalculateNetfeeRewardQuantity(ctx, in.UserId, in.NetBarAccount, record["reward_id"].Int64(), completeTime); err == nil && quantity > 0 {
updateData.IssueQuantity = quantity
}
}
@ -740,22 +546,16 @@ func (s *sTask) GetTaskList(ctx context.Context, in *model.GetTaskListV2In) (out
return nil, err
}
result.TaskList[i].Status = 2
} else {
result.TaskList[i].Status = 1
}
result.TaskList[i].UserTimes -= one["user_times"].Int64()
} else if v.Status == 3 {
// 查询该用户任务记录奖励都已发放
count, err := dao.UserTaskRewards.Ctx(ctx).Where(do.UserTaskRewards{UserTaskId: one["id"].Int64()}).Where(dao.UserTaskRewards.Columns().Status, []int{2, 3, 5}).Count()
if err != nil {
return nil, ecode.Fail.Sub("查询用户门店任务奖励失败")
}
if count > 0 {
} else if userTaskStatus == 3 {
result.TaskList[i].Status = 2
} else {
result.TaskList[i].Status = 3
}
} else {
result.TaskList[i].UserTimes -= one["user_times"].Int64()
result.TaskList[i].Status = 1
}
result.TaskList[i].UserTaskId = one["id"].Int64()
}
}
out.PageIdx = result.PageIdx
@ -783,27 +583,9 @@ func (s *sTask) GetTaskList(ctx context.Context, in *model.GetTaskListV2In) (out
}
}
// 遍历任务列表数据,进行处理
// 根据门店查询出当前门店追加的奖励
for i, v := range out.Data {
for _, prize := range v.PrizeList {
for _, goods := range prize.GoodsList {
if in.IsBound == 1 && goods.GoodsType == 37 {
continue
}
out.Data[i].Rewards = append(out.Data[i].Rewards, model.SimpleReward{
Source: 1,
RewardTypeId: int64(goods.GoodsType),
Name: goods.GoodsName,
ImageUrl: goods.GoodsIcon,
GrantQuantity: uint64(goods.Num),
TotalLimit: uint64(v.LimitNum),
})
}
}
}
return
}
func (s *sTask) SyncTaskFromGamelife(ctx context.Context) (out *model.SyncTaskOut, err error) {
stores, err := dao.Stores.Ctx(ctx).Fields(dao.Stores.Columns().Id, dao.Stores.Columns().NetbarAccount).All()
if err != nil {
@ -920,7 +702,7 @@ func (s *sTask) SyncTaskFromGamelife(ctx context.Context) (out *model.SyncTaskOu
wg.Wait()
return
}
func CalculateNetfeeRewardQuantity(ctx context.Context, userId int64, storeId, rewardId int64, completedTime *gtime.Time) (uint64, error) {
func CalculateNetfeeRewardQuantity(ctx context.Context, userId int64, netbarAccount string, rewardId int64, completedTime *gtime.Time) (uint64, error) {
// 获取当前小时 & 星期几0=周日)
hour := completedTime.Hour()
@ -961,7 +743,13 @@ func CalculateNetfeeRewardQuantity(ctx context.Context, userId int64, storeId, r
if areaId.IsEmpty() {
return 0, nil
}
storeId, err := dao.Stores.Ctx(ctx).Where(do.Stores{NetbarAccount: netbarAccount}).Fields("id").Value()
if err != nil {
return 0, ecode.Fail.Sub("获取门店失败")
}
if storeId.IsEmpty() {
return 0, nil
}
// 获取门店该区域、等级、奖励配置
priceDataStr, err := dao.StoreNetfeeAreaLevel.Ctx(ctx).
Where(do.StoreNetfeeAreaLevel{

View File

@ -369,7 +369,7 @@ func (s *sUser) Quan8Autologin(ctx context.Context, in *model.Quan8AutologinIn)
}
// Check if user exists by Quan8 UUID
exist, err := dao.Users.Ctx(ctx).Where(do.Users{Quan8Uuid: in.UUID}).Exist()
exist, err := dao.Users.Ctx(ctx).Where(do.Users{XyUserId: in.UUID}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查找用户失败")
}
@ -396,7 +396,7 @@ func (s *sUser) Quan8Autologin(ctx context.Context, in *model.Quan8AutologinIn)
}
user := &entity.Users{
Quan8Uuid: in.UUID,
XyUserId: in.UUID,
Username: username,
Nickname: username,
PasswordHash: password,
@ -414,7 +414,7 @@ func (s *sUser) Quan8Autologin(ctx context.Context, in *model.Quan8AutologinIn)
return nil, ecode.Fail.Sub("创建用户失败")
}
} else {
value, err := dao.Users.Ctx(ctx).Where(do.Users{Quan8Uuid: in.UUID}).Fields(dao.Users.Columns().Id).Value()
value, err := dao.Users.Ctx(ctx).Where(do.Users{XyUserId: in.UUID}).Fields(dao.Users.Columns().Id).Value()
if err != nil {
return nil, ecode.Fail.Sub("查找用户失败")
}
@ -442,7 +442,7 @@ func (s *sUser) GenerateSceneId(ctx context.Context, in *model.GenerateSceneIdIn
// Check if user exists by UUID if provided
if in.UUId != "" {
exist, err := dao.Users.Ctx(ctx).Where(do.Users{Quan8Uuid: in.UUId}).Exist()
exist, err := dao.Users.Ctx(ctx).Where(do.Users{XyUserId: in.UUId}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查找用户失败")
}