You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

937 lines
20 KiB
Go

package campaignstat
import (
"joybuywork/internal/config"
"joybuywork/internal/consts"
"joybuywork/internal/repository/finder"
"joybuywork/internal/repository/model"
"joybuywork/internal/repository/mtype"
"joybuywork/internal/service/provider"
"joybuywork/internal/utils"
"joybuywork/internal/utils/logic"
"joybuywork/internal/utils/timez"
pb "joybuywork/proto/go_proto/w_campaign_stat"
"joybuywork/proto/go_proto/workerr"
"fmt"
"strings"
)
type DemTitle struct {
logic.Logic
Req *pb.DemTitleReq
Res *pb.DemTitleRes
rewardMap map[int64]provider.RewardAutoLang
}
func (s *DemTitle) Run() error {
return logic.Run(s)
}
func (s *DemTitle) Exec() (err error) {
cpn, err := s.campaign()
if err != nil {
return
}
err = s.cond(cpn)
if err != nil {
return
}
s.media()
err = s.channel()
if err != nil {
return
}
err = s.rewards()
if err != nil {
return
}
err = s.userLv()
if err != nil {
return
}
err = s.qa()
if err != nil {
return
}
err = s.qaOption()
if err != nil {
return
}
err = s.qaGroup()
if err != nil {
return
}
err = s.scenes(cpn)
if err != nil {
return
}
err = s.customBtn()
if err != nil {
return
}
err = s.task(cpn)
if err != nil {
return
}
err = s.parent(cpn)
if err != nil {
return
}
err = s.img()
if err != nil {
return
}
err = s.zone()
if err != nil {
return
}
err = s.cpns()
if err != nil {
return
}
err = s.schedules()
if err != nil {
return
}
err = s.mall()
if err != nil {
return
}
err = s.mallItem()
if err != nil {
return
}
err = s.unoCards()
if err != nil {
return
}
return
}
// 活动数据
func (s *DemTitle) campaign() (cpn *model.FissionCampaign, err error) {
cpn, err = finder.Campaign(s.Ctx, s.Req.GetCampaignId(), s.Req.GetCampaignHashId())
if err != nil {
err = s.BE().CacheError(err)
return
}
if cpn == nil || cpn.IsDel == mtype.Yes {
err = workerr.NotFound("campaign not found")
return
}
s.Res.CampaignId = cpn.ID
s.Res.TOffect = cpn.TOffset
s.rewardMap = make(map[int64]provider.RewardAutoLang)
return
}
func (s *DemTitle) cond(cpn *model.FissionCampaign) (err error) {
if len(s.Req.GetCondIds()) == 0 {
return
}
condM := s.GetDao().FissionCampaignCond
conds, err := condM.WithContext(s.Ctx).Where(condM.ID.In(s.Req.GetCondIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
var rewardIds []int64
for _, v := range conds {
rewardIds = append(rewardIds, v.RewardID)
}
unlockRewardMap, err := s._getRewardMap(cpn.ProjectID, rewardIds)
if err != nil {
return
}
s.Res.Conds = make([]*pb.DemTitleRes_Title, 0, len(conds))
for _, cond := range conds {
var title = cond.Desc
if cond.RewardID > 0 {
title = fmt.Sprintf("解锁奖品%s", unlockRewardMap[cond.RewardID].RewardTitle)
}
s.Res.Conds = append(s.Res.Conds, &pb.DemTitleRes_Title{
Id: cond.ID,
Title: title,
})
}
return
}
func (s *DemTitle) media() {
if len(s.Req.GetMediaIds()) == 0 {
return
}
s.Res.Media = make([]*pb.DemTitleRes_Title, 0, len(s.Req.GetMediaIds()))
for _, mediaId := range s.Req.GetMediaIds() {
if mediaId == -1 {
s.Res.Media = append(s.Res.Media, &pb.DemTitleRes_Title{
Id: mediaId,
Title: "Copy Link",
SecondId: 0,
})
continue
}
title, ok := consts.ShareTitleMap[mediaId]
if !ok {
continue
}
s.Res.Media = append(s.Res.Media, &pb.DemTitleRes_Title{
Id: mediaId,
Title: title,
SecondId: 0,
})
}
}
func (s *DemTitle) channel() (err error) {
if len(s.Req.GetChannelIds()) == 0 {
return
}
m := s.GetDao().FissionCampaignChannel
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetChannelIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.Channel = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.Channel = append(s.Res.Channel, &pb.DemTitleRes_Title{
Id: v.ID,
Title: v.Title,
SecondId: int64(v.CType),
})
}
return
}
func (s *DemTitle) rewards() (err error) {
if len(s.Req.GetRewardIds()) == 0 {
return
}
m := s.GetDao().FissionCampaignReward
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetRewardIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
var titleMap = make(map[int64]string)
var ids []int64
for _, v := range list {
if _, ok := titleMap[v.RewardID]; !ok {
titleMap[v.RewardID] = ""
ids = append(ids, v.RewardID)
}
}
rewardM := s.GetDao().Reward
rewards, err := rewardM.WithContext(s.Ctx).Where(rewardM.ID.In(ids...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
for _, v := range rewards {
titleMap[v.ID] = v.RewardTitle
}
for _, v := range list {
one := &pb.DemTitleRes_Title{
Id: v.ID,
Title: titleMap[v.RewardID],
SecondId: v.RewardID,
}
if v.PropMark == mtype.FissionCampaignRewardPropMarkPoint {
one.Title = fmt.Sprintf("系统积分 * %d", v.RewardNum)
} else if v.PropMark == mtype.FissionCampaignRewardPropMarkChance {
one.Title = fmt.Sprintf("活动机会 * %d", v.RewardNum)
} else if v.RewardID < 0 {
one.Title = "谢谢参与"
}
s.Res.Rewards = append(s.Res.Rewards, one)
}
return
}
func (s *DemTitle) userLv() (err error) {
if len(s.Req.GetLevelIds()) == 0 {
return
}
m := s.GetDao().FissionUserLevel
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetLevelIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.UserLv = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.UserLv = append(s.Res.UserLv, &pb.DemTitleRes_Title{
Id: v.ID,
Title: v.Title,
})
}
return
}
func (s *DemTitle) qa() (err error) {
if len(s.Req.GetQaIds()) == 0 {
return
}
m := s.GetDao().LibraryQa
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetQaIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.Qa = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.Qa = append(s.Res.Qa, &pb.DemTitleRes_Title{
Id: v.ID,
Title: v.Title,
})
}
return
}
func (s *DemTitle) qaOption() (err error) {
if len(s.Req.GetQaOptionIds()) == 0 {
return
}
m := s.GetDao().LibraryQaOption
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetQaOptionIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.QaOption = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.QaOption = append(s.Res.QaOption, &pb.DemTitleRes_Title{
Id: v.ID,
Title: v.Title,
})
}
return
}
func (s *DemTitle) qaGroup() (err error) {
if len(s.Req.GetQaGroupIds()) == 0 {
return
}
m := s.GetDao().LibraryQaGroup
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetQaGroupIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.QaGroup = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.QaGroup = append(s.Res.QaGroup, &pb.DemTitleRes_Title{
Id: v.ID,
Title: v.Title,
})
}
return
}
func (s *DemTitle) scenes(cpn *model.FissionCampaign) (err error) {
if len(s.Req.GetSceneIds()) == 0 {
return
}
switch cpn.FissionID {
case consts.IdCoin:
m := s.GetDao().FissionCoinScene
var scenes []*model.FissionCoinScene
scenes, err = m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetSceneIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
gmt := utils.Ternary[string](cpn.TOffset < 0, fmt.Sprint(cpn.TOffset), fmt.Sprintf("+%d", cpn.TOffset))
s.Res.Scenes = make([]*pb.DemTitleRes_Title, 0, len(scenes))
for _, v := range scenes {
day, _, _ := timez.GMTStartAndEndTs(cpn.TOffset, v.OpenTime)
s.Res.Scenes = append(s.Res.Scenes, &pb.DemTitleRes_Title{
Id: v.ID,
Title: fmt.Sprintf("%s(GMT%s)", day, gmt),
})
}
}
return
}
func (s *DemTitle) customBtn() (err error) {
if len(s.Req.GetCustomBtnIds()) == 0 {
return
}
m := s.GetDao().FissionCustomBtn
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetCustomBtnIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.QaGroup = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.QaGroup = append(s.Res.QaGroup, &pb.DemTitleRes_Title{
Id: v.ID,
Title: v.BtnText,
})
}
return
}
func (s *DemTitle) task(cpn *model.FissionCampaign) (err error) {
if len(s.Req.GetTaskIds()) == 0 {
return
}
taskM := s.GetDao().FissionCampaignTask
tasks, err := taskM.WithContext(s.Ctx).Where(taskM.ID.In(s.Req.GetTaskIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.Tasks = make([]*pb.DemTitleRes_Title, 0, len(tasks))
var unlockRewardIds []int64
var campaignMap = make(map[int64][]int64)
var condIds []int64
for _, task := range tasks {
if task.PropMark == mtype.FissionCampaignTaskPropMarkUnlockReward {
unlockRewardIds = append(unlockRewardIds, task.RewardID)
}
switch task.TaskType {
case mtype.FissionCampaignTaskTypeCondOne:
condIds = append(condIds, utils.FissionCampaignTaskMarkCondOneCondId(task.TaskMark))
case mtype.FissionCampaignTaskTypeCondAll:
campaignMap[task.CampaignID] = append(campaignMap[task.CampaignID], task.ID)
default:
continue
}
}
var condMap = make(map[int64]string, len(condIds))
if len(condIds) > 0 {
var conds []*model.FissionCampaignCond
m := s.GetDao().FissionCampaignCond
conds, err = m.WithContext(s.Ctx).Where(m.ID.In(condIds...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
for _, v := range conds {
condMap[v.ID] = v.Desc
}
}
var cpnMap = make(map[int64]string)
if len(campaignMap) > 0 {
m := s.GetDao().FissionCampaignCond
for cpnId, taskIds := range campaignMap {
var conds []*model.FissionCampaignCond
conds, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpnId)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
var desc string
for _, cond := range conds {
desc += cond.Desc + ", "
}
for _, v := range taskIds {
cpnMap[v] = strings.TrimRight(desc, ", ")
}
}
}
unlockRewardMap, err := s._getRewardMap(cpn.ProjectID, unlockRewardIds)
if err != nil {
return
}
for _, task := range tasks {
one := &pb.DemTitleRes_Title{
Id: task.ID,
}
switch task.TaskType {
case mtype.FissionCampaignTaskTypeCondOne:
one.Title = condMap[utils.FissionCampaignTaskMarkCondOneCondId(task.TaskMark)]
case mtype.FissionCampaignTaskTypeInstall:
one.Title = fmt.Sprintf("获得%d个安装事件助力", task.Num)
case mtype.FissionCampaignTaskTypeRegister:
one.Title = fmt.Sprintf("获得%d个注册事件助力", task.Num)
case mtype.FissionCampaignTaskTypeCondAll:
one.Title = cpnMap[task.ID]
case mtype.FissionCampaignTaskTypeOpen:
one.Title = fmt.Sprintf("获得%d个打开事件助力", task.Num)
case mtype.FissionCampaignTaskTypeClick:
one.Title = fmt.Sprintf("获得%d个点击邀请链接助力", task.Num)
}
if task.PropMark == mtype.FissionCampaignTaskPropMarkUnlockReward {
one.Title = fmt.Sprintf("解锁奖品%s", unlockRewardMap[task.RewardID].RewardTitle)
}
s.Res.Tasks = append(s.Res.Tasks, one)
}
return
}
func (s *DemTitle) parent(cpn *model.FissionCampaign) (err error) {
if len(s.Req.GetParentIds()) == 0 {
return
}
m := s.GetDao().FissionUser.SubTable(cpn.ID)
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetParentIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.Parents = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.Parents = append(s.Res.Parents, &pb.DemTitleRes_Title{
Id: v.ID,
Title: v.SubUserID,
})
}
return
}
func (s *DemTitle) img() (err error) {
if len(s.Req.GetImgIds()) == 0 {
return
}
m := s.GetDao().FissionCampaignLongImg
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetImgIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
var cpnIds []int64
for _, v := range list {
if v.TargetType == mtype.FissionCampaignLongImgTargetTypeCampaign {
cpnIds = append(cpnIds, v.TargetID)
}
}
var cpnMap = make(map[int64]string)
if len(cpnIds) > 0 {
cpnM := s.GetDao().FissionCampaign
cpnList, err1 := cpnM.WithContext(s.Ctx).Where(cpnM.ID.In(cpnIds...)).Find()
if err1 != nil {
err = s.BE().MysqlError(err1)
return
}
for _, v := range cpnList {
cpnMap[v.ID] = v.Title
}
}
s.Res.Imgs = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
if v.ClickType == mtype.FissionCampaignLongImgClickTypeZone {
continue
}
var title string
switch v.TargetType {
case mtype.FissionCampaignLongImgTargetTypeCustom:
title = "跳转指定地址"
if v.AppParam != "" {
title += fmt.Sprintf(";APP端参数: %s", v.AppParam)
}
if v.WebURL != "" {
title += fmt.Sprintf(";H5跳转url: %s", v.WebURL)
}
if v.PcParam != "" {
title += fmt.Sprintf(";PC端参数: %s", v.PcParam)
}
case mtype.FissionCampaignLongImgTargetTypeCampaign:
title = fmt.Sprintf("跳转到活动'%s'", cpnMap[v.CampaignID])
}
s.Res.Imgs = append(s.Res.Imgs, &pb.DemTitleRes_Title{
Id: v.ID,
Title: title,
})
}
return
}
func (s *DemTitle) zone() (err error) {
if len(s.Req.GetZoneIds()) == 0 {
return
}
m := s.GetDao().FissionCampaignLongImgZone
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetZoneIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
var cpnIds []int64
for _, v := range list {
if v.TargetType == mtype.FissionCampaignLongImgTargetTypeCampaign {
cpnIds = append(cpnIds, v.TargetID)
}
}
var cpnMap = make(map[int64]string)
if len(cpnIds) > 0 {
cpnM := s.GetDao().FissionCampaign
cpnList, err1 := cpnM.WithContext(s.Ctx).Where(cpnM.ID.In(cpnIds...)).Find()
if err1 != nil {
err = s.BE().MysqlError(err1)
return
}
for _, v := range cpnList {
cpnMap[v.ID] = v.Title
}
}
s.Res.Zones = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
var title string
switch v.TargetType {
case mtype.FissionCampaignLongImgTargetTypeCustom:
title = "跳转指定地址"
if v.AppParam != "" {
title += fmt.Sprintf(";APP端参数: %s", v.AppParam)
}
if v.WebURL != "" {
title += fmt.Sprintf(";H5跳转url: %s", v.WebURL)
}
if v.PcParam != "" {
title += fmt.Sprintf(";PC端参数: %s", v.PcParam)
}
case mtype.FissionCampaignLongImgTargetTypeCampaign:
title = fmt.Sprintf("跳转到活动'%s'", cpnMap[v.CampaignID])
}
s.Res.Zones = append(s.Res.Zones, &pb.DemTitleRes_Title{
Id: v.ID,
Title: title,
})
}
return
}
func (s *DemTitle) cpns() (err error) {
if len(s.Req.GetCpnIds()) == 0 {
return
}
m := s.GetDao().FissionCampaign
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetCpnIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.Cpns = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.Cpns = append(s.Res.Cpns, &pb.DemTitleRes_Title{
Id: v.ID,
Title: v.Title,
})
}
return
}
func (s *DemTitle) schedules() (err error) {
if len(s.Req.GetScheduleIds()) == 0 {
return
}
m := s.GetDao().FissionCampaignVsSchedule
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetScheduleIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
var teamIds []int64
var teamMap = make(map[int64]*model.FissionCampaignVsTeam)
for _, v := range list {
for _, t := range v.GetVsTeamIds() {
if _, ok := teamMap[t]; !ok && t > 0 {
teamIds = append(teamIds, t)
}
}
}
teamM := s.GetDao().FissionCampaignVsTeam
teamList, err := teamM.WithContext(s.Ctx).Where(teamM.ID.In(teamIds...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
for _, v := range teamList {
teamMap[v.ID] = v
}
s.Res.Schedules = make([]*pb.DemTitleRes_Schedule, 0, len(list))
for _, v := range list {
var teams = make([]*pb.DemTitleRes_Team, 2)
var t1 = "A队"
var t2 = "B队"
for i, t := range v.GetVsTeamIds() {
switch i {
case 0:
if _, ok := teamMap[t]; ok {
t1 = teamMap[t].Name
if t1 == "" {
t1 = fmt.Sprintf("[%s%s]", config.Config.Upload.Host, teamMap[t].LogoImg)
}
}
teams[0] = &pb.DemTitleRes_Team{
Id: t,
Title: t1,
}
case 1:
if _, ok := teamMap[t]; ok {
t2 = teamMap[t].Name
if t2 == "" {
t2 = fmt.Sprintf("[%s%s]", config.Config.Upload.Host, teamMap[t].LogoImg)
}
}
teams[1] = &pb.DemTitleRes_Team{
Id: t,
Title: t2,
}
}
}
s.Res.Schedules = append(s.Res.Schedules, &pb.DemTitleRes_Schedule{
Id: v.ID,
Title: fmt.Sprintf("%s vs %s", t1, t2),
Teams: teams,
})
}
return
}
func (s *DemTitle) mall() (err error) {
if len(s.Req.GetMallIds()) == 0 {
return
}
m := s.GetDao().RedeemMall
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetMallIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.Malls = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.Malls = append(s.Res.Malls, &pb.DemTitleRes_Title{
Id: v.ID,
Title: v.Title,
})
}
return
}
func (s *DemTitle) mallItem() (err error) {
if len(s.Req.GetMallItemIds()) == 0 {
return
}
m := s.GetDao().RedeemMallItem
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetMallItemIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
var rewardIds []int64
var rewardMap = make(map[int64]string)
for _, v := range list {
if _, ok := rewardMap[v.ID]; !ok {
rewardIds = append(rewardIds, v.RewardID)
rewardMap[v.RewardID] = ""
}
}
rewardM := s.GetDao().Reward
rewardList, err := rewardM.WithContext(s.Ctx).Where(rewardM.ID.In(rewardIds...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
for _, v := range rewardList {
rewardMap[v.ID] = v.RewardTitle
}
s.Res.MallItems = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
s.Res.MallItems = append(s.Res.MallItems, &pb.DemTitleRes_Title{
Id: v.ID,
Title: rewardMap[v.RewardID],
})
}
return
}
func (s *DemTitle) unoCards() (err error) {
if len(s.Req.GetUnoCardIds()) == 0 {
return
}
m := s.GetDao().FissionCampaignUnoCard
list, err := m.WithContext(s.Ctx).Where(m.ID.In(s.Req.GetUnoCardIds()...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
s.Res.UnoCards = make([]*pb.DemTitleRes_Title, 0, len(list))
for _, v := range list {
var title = fmt.Sprintf("图片[%s%s]", config.Config.Upload.Host, v.ImgURL)
if v.AppParam != "" {
title += fmt.Sprintf(";APP端参数: %s", v.AppParam)
}
if v.WebURL != "" {
title += fmt.Sprintf(";H5跳转url: %s", v.WebURL)
}
if v.PcParam != "" {
title += fmt.Sprintf(";PC端参数: %s", v.PcParam)
}
s.Res.UnoCards = append(s.Res.UnoCards, &pb.DemTitleRes_Title{
Id: v.ID,
Title: title,
})
}
return
}
func (s *DemTitle) _getRewardMap(projectId int64, rewardIds []int64) (data map[int64]provider.RewardAutoLang, err error) {
var newIds []int64
for _, id := range rewardIds {
if _, ok := s.rewardMap[id]; !ok {
newIds = append(newIds, id)
}
}
if len(newIds) == 0 {
return s.rewardMap, nil
}
m := s.GetDao().FissionCampaignReward
var rewards []*model.FissionCampaignReward
rewards, err = m.WithContext(s.Ctx).Where(m.ID.In(newIds...)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
var bids []int64
var brMap = make(map[int64]string)
for _, v := range rewards {
if _, ok := brMap[v.RewardID]; !ok {
bids = append(bids, v.RewardID)
brMap[v.RewardID] = ""
}
}
prewards, err := provider.NewRewards(s.Ctx, projectId, bids...)
if err != nil {
return
}
for _, v := range rewards {
s.rewardMap[v.ID], _ = prewards.InfoAutoLang(v.RewardID)
}
return s.rewardMap, nil
}