实现网费奖励下发和回调接口
This commit is contained in:
@ -678,6 +678,7 @@ func (s *sTask) GetTaskList(ctx context.Context, in *model.GetTaskListV2In) (out
|
||||
}
|
||||
|
||||
if int(v.UserTimes) >= v.TargetTimes {
|
||||
completedTime := gtime.Now()
|
||||
// 判断当前用户完成情况,已完成根据任务、用户,任务类型检查是否存在用户任务记录
|
||||
orm := dao.UserTasks.Ctx(ctx).Where(do.UserTasks{UserId: in.UserId, TaskId: v.TaskID})
|
||||
if v.GameTaskConfig.TimeType == 1 {
|
||||
@ -740,12 +741,17 @@ func (s *sTask) GetTaskList(ctx context.Context, in *model.GetTaskListV2In) (out
|
||||
// 拼装门店奖励数据
|
||||
if len(result.TaskList[i].Rewards) > 0 {
|
||||
for _, reward := range result.TaskList[i].Rewards {
|
||||
var quantity uint64
|
||||
quantity, err = CalculateNetfeeRewardQuantity(ctx, in.UserId, in.StoreId, &reward, completedTime)
|
||||
if err != nil {
|
||||
quantity = reward.GrantQuantity
|
||||
}
|
||||
in := do.UserTaskRewards{
|
||||
RewardId: reward.Id,
|
||||
UserTaskId: id,
|
||||
RewardName: reward.Name,
|
||||
Status: consts.RewardPendingStatus,
|
||||
IssueQuantity: reward.GrantQuantity,
|
||||
IssueQuantity: quantity,
|
||||
Source: 2,
|
||||
RewardTypeId: reward.RewardTypeId,
|
||||
}
|
||||
@ -935,3 +941,95 @@ func (s *sTask) SyncTaskFromGamelife(ctx context.Context) (out *model.SyncTaskOu
|
||||
wg.Wait()
|
||||
return
|
||||
}
|
||||
func CalculateNetfeeRewardQuantity(ctx context.Context, userId int64, storeId int64, reward *model.SimpleReward, completedTime *gtime.Time) (uint64, error) {
|
||||
const rewardTypeCode = consts.NetfeeCode
|
||||
|
||||
// 判断是否是门店网费奖励
|
||||
exist, err := dao.RewardTypes.Ctx(ctx).
|
||||
WherePri(reward.RewardTypeId).
|
||||
Where(do.RewardTypes{Code: rewardTypeCode}).
|
||||
Exist()
|
||||
if err != nil {
|
||||
return 0, ecode.Fail.Sub("获取奖励类型失败")
|
||||
}
|
||||
if !exist {
|
||||
// 不是网费奖励,返回当前奖励默认值
|
||||
return reward.GrantQuantity, nil
|
||||
}
|
||||
|
||||
// 获取当前小时 & 星期几(0=周日)
|
||||
hour := completedTime.Hour()
|
||||
weekday := int(completedTime.Weekday())
|
||||
|
||||
// 获取上机记录
|
||||
areaLevel, err := dao.StoreClientSessions.Ctx(ctx).
|
||||
Where(do.StoreClientSessions{UserId: userId}).
|
||||
WhereLTE(dao.StoreClientSessions.Columns().StartTime, completedTime).
|
||||
Where("end_time IS NULL OR end_time >= ?", completedTime).
|
||||
Fields("area_name,level_id").
|
||||
OrderDesc(dao.StoreClientSessions.Columns().StartTime).
|
||||
One()
|
||||
if err != nil {
|
||||
return 0, ecode.Fail.Sub("获取用户上机记录失败")
|
||||
}
|
||||
|
||||
// 获取会员等级ID(内部ID)
|
||||
levelId, err := dao.StoreMemberLevels.Ctx(ctx).
|
||||
Where(do.StoreMemberLevels{LevelId: areaLevel["level_id"].Int64()}).
|
||||
Fields("id").
|
||||
Value()
|
||||
if err != nil {
|
||||
return 0, ecode.Fail.Sub("获取会员等级失败")
|
||||
}
|
||||
if levelId.IsEmpty() {
|
||||
return reward.GrantQuantity, nil
|
||||
}
|
||||
|
||||
// 获取区域ID
|
||||
areaId, err := dao.StoreAreas.Ctx(ctx).
|
||||
Where(do.StoreAreas{AreaName: areaLevel["area_name"].String()}).
|
||||
Fields("id").
|
||||
Value()
|
||||
if err != nil {
|
||||
return 0, ecode.Fail.Sub("获取区域失败")
|
||||
}
|
||||
if areaId.IsEmpty() {
|
||||
return reward.GrantQuantity, nil
|
||||
}
|
||||
|
||||
// 获取门店该区域、等级、奖励配置
|
||||
priceDataStr, err := dao.StoreNetfeeAreaLevel.Ctx(ctx).
|
||||
Where(do.StoreNetfeeAreaLevel{
|
||||
StoreId: storeId,
|
||||
AreaId: areaId.Int(),
|
||||
MemberLevelId: levelId.Int(),
|
||||
RewardId: reward.Id,
|
||||
}).
|
||||
Fields(dao.StoreNetfeeAreaLevel.Columns().PriceData).
|
||||
Value()
|
||||
if err != nil {
|
||||
return 0, ecode.Fail.Sub("获取网费奖励价格配置失败")
|
||||
}
|
||||
|
||||
// 若配置为空,返回默认值
|
||||
if priceDataStr.IsEmpty() {
|
||||
return reward.GrantQuantity, nil
|
||||
}
|
||||
|
||||
// 解析 priceData
|
||||
var priceData [][]int
|
||||
if err := json.Unmarshal([]byte(priceDataStr.String()), &priceData); err != nil {
|
||||
return 0, ecode.Fail.Sub("网费价格配置解析失败")
|
||||
}
|
||||
|
||||
// 防止越界
|
||||
if weekday >= len(priceData) || hour >= len(priceData[weekday]) {
|
||||
return 0, ecode.Fail.Sub("网费奖励价格配置不完整")
|
||||
}
|
||||
|
||||
grant := uint64(priceData[weekday][hour])
|
||||
|
||||
glog.Infof(ctx, "网费奖励金额为 %d(来源于门店配置)", grant)
|
||||
|
||||
return grant, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user