diff --git a/api/reward/v1/reward.go b/api/reward/v1/reward.go index 6432d17..efc48eb 100644 --- a/api/reward/v1/reward.go +++ b/api/reward/v1/reward.go @@ -225,9 +225,15 @@ type GetLiftReq struct { } type GetLiftRes struct { - List interface{} `json:"list" dc:"物品列表"` + List interface{} `json:"list" dc:"物品列表"` + //Result int64 `json:"result" dc:"1-奖励发放成功,2-奖励兑换失败(礼包发放背包环节成功,需要重新引导领奖)3-针对只需要发背包,然后引导用户到人生应用背包领奖的奖励类型,发奖成功了,4-water错误(一般是orderid),不做兑换操作"` + //Water Water `json:"water" dc:"礼包列表"` +} + +type GetLiftNewRes struct { + //List interface{} `json:"list" dc:"物品列表"` Result int64 `json:"result" dc:"1-奖励发放成功,2-奖励兑换失败(礼包发放背包环节成功,需要重新引导领奖)3-针对只需要发背包,然后引导用户到人生应用背包领奖的奖励类型,发奖成功了,4-water错误(一般是orderid),不做兑换操作"` - Water Water `json:"water" dc:"礼包列表"` + Water interface{} `json:"water" dc:"礼包列表"` } type GetGoodsListReq struct { diff --git a/internal/controller/reward/reward_v1_get_lift.go b/internal/controller/reward/reward_v1_get_lift.go index 2c0fa37..29c8abd 100644 --- a/internal/controller/reward/reward_v1_get_lift.go +++ b/internal/controller/reward/reward_v1_get_lift.go @@ -29,7 +29,6 @@ func (c *ControllerV1) GetLift(ctx context.Context, req *v1.GetLiftReq) (res *v1 return nil, err } return &v1.GetLiftRes{ - List: out.List, - Result: int64(out.Result), + List: out.List, }, nil } diff --git a/internal/dao/internal/reward_callback.go b/internal/dao/internal/reward_callback.go index 249829d..d148d1c 100644 --- a/internal/dao/internal/reward_callback.go +++ b/internal/dao/internal/reward_callback.go @@ -31,6 +31,7 @@ type RewardCallbackColumns struct { Num string // 奖励个数,默认 1,比如经验值 10 CustomInfo string // 透传字段 (json串) AppId string // 业务 id(标识业务方,由游戏人生提供) + InnerOrderId string // 系统内部订单ID } // rewardCallbackColumns holds the columns for the table reward_callback. @@ -45,6 +46,7 @@ var rewardCallbackColumns = RewardCallbackColumns{ Num: "num", CustomInfo: "custom_info", AppId: "app_id", + InnerOrderId: "inner_order_id", } // NewRewardCallbackDao creates and returns a new DAO object for table data access. diff --git a/internal/logic/reward/reward.go b/internal/logic/reward/reward.go index 7cf8e84..0788530 100644 --- a/internal/logic/reward/reward.go +++ b/internal/logic/reward/reward.go @@ -5,7 +5,9 @@ import ( "encoding/json" "fmt" "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/os/glog" "github.com/gogf/gf/v2/os/gtime" + "github.com/gogf/gf/v2/util/guid" "server/internal/consts" "server/internal/dao" "server/internal/model" @@ -369,11 +371,14 @@ func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *mode } + 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 { @@ -385,6 +390,7 @@ func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *mode } // 存储数据库记录 + 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) @@ -407,7 +413,7 @@ func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *mode // 根据 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 != nil { @@ -441,6 +447,7 @@ func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *mode } } 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{ @@ -453,8 +460,14 @@ func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *mode } } 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 @@ -463,7 +476,9 @@ func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *mode return } - return nil, err + return &model.GetRewardOut{ + List: data.List, + }, err } // GetGoodsList 调用外部获取物品列表 @@ -824,6 +839,7 @@ func (s *sReward) CallBack(ctx context.Context, in *model.RewardCallbackIn) (out Num: in.Num, CustomInfo: in.CustomInfo, AppId: in.AppId, + InnerOrderId: fmt.Sprintf("reward%s", guid.S()), }) if err != nil { diff --git a/internal/logic/rewardType/rewardType.go b/internal/logic/rewardType/rewardType.go index 9268a97..7a27e1d 100644 --- a/internal/logic/rewardType/rewardType.go +++ b/internal/logic/rewardType/rewardType.go @@ -32,7 +32,8 @@ func (s *sRewardType) Create(ctx context.Context, in *model.RewardTypeCreateIn) } data := do.RewardTypes{ - Name: in.Name, + Name: in.Name, + Source: in.Source, } id, err := dao.RewardTypes.Ctx(ctx).OmitEmptyData().Data(data).InsertAndGetId() diff --git a/internal/model/do/reward_callback.go b/internal/model/do/reward_callback.go index 4ce0b71..63de8b5 100644 --- a/internal/model/do/reward_callback.go +++ b/internal/model/do/reward_callback.go @@ -21,4 +21,5 @@ type RewardCallback struct { Num interface{} // 奖励个数,默认 1,比如经验值 10 CustomInfo interface{} // 透传字段 (json串) AppId interface{} // 业务 id(标识业务方,由游戏人生提供) + InnerOrderId interface{} // 系统内部订单ID } diff --git a/internal/model/entity/reward_callback.go b/internal/model/entity/reward_callback.go index f810842..1be35fd 100644 --- a/internal/model/entity/reward_callback.go +++ b/internal/model/entity/reward_callback.go @@ -16,4 +16,5 @@ type RewardCallback struct { Num int `json:"num" orm:"num" description:"奖励个数,默认 1,比如经验值 10"` // 奖励个数,默认 1,比如经验值 10 CustomInfo string `json:"customInfo" orm:"custom_info" description:"透传字段 (json串)"` // 透传字段 (json串) AppId string `json:"appId" orm:"app_id" description:"业务 id(标识业务方,由游戏人生提供)"` // 业务 id(标识业务方,由游戏人生提供) + InnerOrderId string `json:"innerOrderId" orm:"inner_order_id" description:"系统内部订单ID"` // 系统内部订单ID } diff --git a/internal/model/reward.go b/internal/model/reward.go index 7f73058..2a5c524 100644 --- a/internal/model/reward.go +++ b/internal/model/reward.go @@ -182,9 +182,12 @@ type GetRewardIn struct { UserId int } type GetRewardOut struct { - List interface{} `json:"list"` + List []GetRewardNewOut `json:"list"` +} + +type GetRewardNewOut struct { Result int64 `json:"result"` - Water Water `json:"water"` + Water interface{} `json:"water"` } type Water struct { diff --git a/internal/service/reward.go b/internal/service/reward.go index cb1900d..0adc112 100644 --- a/internal/service/reward.go +++ b/internal/service/reward.go @@ -30,6 +30,164 @@ type ( GetGoodsDetails(ctx context.Context, in *model.GetGoodsDetailsIn) (out *model.QueryUserGoodsDetailResponse, err error) OperateTaskReward(ctx context.Context, in *model.OperateTaskRewardIn) (out *model.OperateTaskRewardOut, err error) // CallBack 奖励回调 + // + // func (s *sReward) CallBack(ctx context.Context, in *model.RewardCallbackIn) (out *model.RewardCallbackOut, err error) { + // var reward *model.Reward + // var res model.RewardCallbackOut + // res.OrderId = in.OrderId + // res.AppId = in.AppId + // + // // 查询奖励 + // err = dao.Rewards.Ctx(ctx).Where(do.Rewards{PrizeId: in.PrizeId}).Scan(&reward) + // if err != nil { + // res.Errcode = -1 + // res.Errmsg = "查询奖励异常" + // res.Datas = nil + // return &res, ecode.Fail.Sub("查询奖励异常") + // } + // + // if reward == nil { + // res.Errcode = -1 + // res.Errmsg = "查询奖励为空" + // res.Datas = nil + // return &res, ecode.Params.Sub("查询奖励为空") + // } + // + // // 判断是否过期 + // if reward.ExpireType == 1 { + // //时间段过期 + // if reward.ValidTo.Before(gtime.Now()) { + // res.Errcode = consts.BatchOutDate + // res.Errmsg = consts.BatchOutDateMSG + // } + // } + // + // // 日 + // now := time.Now() + // // 当天开始时间 + // start := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) + // // 当天结束时间 + // end := time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 0, now.Location()) + // // 查先询用户当日已领取 + // //dailyGetNum, err := dao.Rewards.Ctx(ctx). + // // LeftJoin(dao.UserTaskRewards.Table(), fmt.Sprintf("%s.id=%s.reward_id", dao.Rewards.Table(), dao.UserTaskRewards.Table())). + // // Where(dao.Rewards.Columns().PrizeId, in.PrizeId). + // // WhereBetween(dao.UserTaskRewards.Columns().UpdatedAt, start, end). + // // Where(dao.UserTaskRewards.Columns().Status, 3).WhereOr(dao.UserTaskRewards.Columns().Status, 6).Count() + // // + // //// dailyGetNum, err := dao.Rewards.Ctx(ctx). + // //// Where(dao.Rewards.Columns().PrizeId, in.PrizeId).InnerJoin(dao.UserTaskRewards.Table(), fmt.Sprintf("%s.id=%s.reward_id", dao.Rewards.Table(), + // //// dao.UserTaskRewards.Table())).InnerJoin(dao.RewardWaters.Table(), fmt.Sprintf("%s.external_order_id = %s.order_id", dao.UserTaskRewards.Table(), dao.RewardWaters.Table())). + // //// Where(dao.RewardWaters.Columns().Recvuid, in.Uid).Where(dao.UserTaskRewards.Columns().Status, 3).WhereOr(dao.UserTaskRewards.Columns().Status, 6). + // //// WhereBetween(dao.UserTaskRewards.Columns().UpdatedAt, start, end).Fields(fmt.Sprintf("%s.*,%s.*", dao.Rewards.Table(), dao.UserTaskRewards.Table())).Count() + // // + // //if err != nil { + // // res.Errcode = -1 + // // res.Errmsg = "查询用户当日领取数量失败" + // // res.Datas = nil + // // return &res, ecode.Fail.Sub("查询用户当日领取数量失败") + // //} + // // + // //// 判断是否达到用户日限制 + // //if int(reward.UserDailyLimit) <= dailyGetNum { + // // res.Errcode = consts.UserDayLimit + // // res.Errmsg = consts.UserDayLimitMSG + // //} + // // + // //// 查先询用户总共已领取 + // //dailyTotalNum, err := dao.Rewards.Ctx(ctx).Where(dao.Rewards.Columns().PrizeId, in.PrizeId).InnerJoin(dao.UserTaskRewards.Table(), fmt.Sprintf("%s.id=%s.reward_id", dao.Rewards.Table(), + // // dao.UserTaskRewards.Table())).InnerJoin(dao.RewardWaters.Table(), fmt.Sprintf("%s.external_order_id = %s.order_id", dao.UserTaskRewards.Table(), dao.RewardWaters.Table())). + // // Where(dao.RewardWaters.Columns().Recvuid, in.Uid).Where(dao.UserTaskRewards.Columns().Status, 3).WhereOr(dao.UserTaskRewards.Columns().Status, 6). + // // Fields(fmt.Sprintf("%s.*,%s.*", dao.Rewards.Table(), dao.UserTaskRewards.Table())).Count() + // // + // //if err != nil { + // // res.Errcode = -1 + // // res.Errmsg = "查询用户当日总共领取数量失败" + // // res.Datas = nil + // // return &res, ecode.Fail.Sub("查询用户当日总共领取数量失败") + // //} + // //// 判断是否达到用户总限制 + // //if int(reward.UserTotalLimit) <= dailyTotalNum { + // // res.Errcode = consts.UserTotalLimit + // // res.Errmsg = consts.UserTotalLimitMSG + // //} + // // + // //// 查先询该批次当日已领取 + // //batchDailyGetNum, err := dao.Rewards.Ctx(ctx).Where(dao.Rewards.Columns().PrizeId, in.PrizeId).InnerJoin(dao.UserTaskRewards.Table(), fmt.Sprintf("%s.id = %s.reward_id", + // // dao.Rewards.Table(), dao.UserTaskRewards.Table())).Where(dao.UserTaskRewards.Columns().Status, 3).WhereOr(dao.UserTaskRewards.Columns().Status, 6). + // // WhereBetween(dao.UserTaskRewards.Columns().UpdatedAt, start, end).Fields(fmt.Sprintf("%s.*,%s.*", dao.Rewards.Table(), dao.UserTaskRewards.Table())).Count() + // //if err != nil { + // // res.Errcode = -1 + // // res.Errmsg = "查询该批次当日总共领取数量失败" + // // res.Datas = nil + // // return &res, ecode.Fail.Sub("查询该批次当日总共领取数量失败") + // //} + // //// 判断是否达到该批次日限制 + // //if int(reward.DailyTotalLimit) <= batchDailyGetNum { + // // res.Errcode = consts.BatchDayLimit + // // res.Errmsg = consts.BatchDayLimitMSG + // //} + // // + // //// 查先询该批次总共已领取 + // //batchTotalGetNum, err := dao.Rewards.Ctx(ctx).Where(dao.Rewards.Columns().PrizeId, in.PrizeId).InnerJoin(dao.UserTaskRewards.Table(), fmt.Sprintf("%s.id = %s.reward_id", + // // dao.Rewards.Table(), dao.UserTaskRewards.Table())).Where(dao.UserTaskRewards.Columns().Status, 3).WhereOr(dao.UserTaskRewards.Columns().Status, 6). + // // Fields(fmt.Sprintf("%s.*,%s.*", dao.Rewards.Table(), dao.UserTaskRewards.Table())).Count() + // // + // //if err != nil { + // // res.Errcode = -1 + // // res.Errmsg = "查询该批次总共领取数量失败" + // // res.Datas = nil + // // return &res, ecode.Fail.Sub("查询该批次总共领取数量失败") + // //} + // //// 判断是否达到该批次总共限制 + // //if int(reward.TotalLimit) <= batchTotalGetNum { + // // res.Errcode = consts.BatchTotalLimit + // // res.Errmsg = consts.BatchTotalLimitMSG + // //} + // + // _, err = dao.RewardCallback.Ctx(ctx).OmitEmptyData().Insert(do.RewardCallback{ + // OrderId: in.OrderId, + // PrizeId: in.PrizeId, + // PrizeType: in.PrizeType, + // PrizeSubType: in.PrizeSubType, + // Uid: in.Uid, + // Num: in.Num, + // CustomInfo: in.CustomInfo, + // AppId: in.AppId, + // }) + // + // if err != nil { + // res.Errcode = -1 + // res.Errmsg = "存储奖励回调数据异常" + // res.Datas = nil + // return &res, ecode.Fail.Sub("存储奖励回调数据异常") + // } + // + // // 回调成功,组装响应参数 + // 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("获取用户奖励记录异常") + // } + // + // if userTaskReward == nil { + // res.Errcode = -1 + // res.Errmsg = "用户奖励记录为空" + // res.Datas = nil + // return &res, ecode.Fail.Sub("用户奖励记录为空") + // } + // + // callbackData := make([]model.CallbackData, 0) + // for _, v := range userTaskReward { + // callbackData = append(callbackData, model.CallbackData{ + // PrizeCode: v.InnerOrderId, + // }) + // } + // + // res.Datas = callbackData + // + // return &res, err + // } CallBack(ctx context.Context, in *model.RewardCallbackIn) (out *model.RewardCallbackOut, err error) GetUserClaimList(ctx context.Context, in *model.GetUserClaimListIn) (out *model.GetUserClaimListOut, err error) }