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.
184 lines
4.0 KiB
Go
184 lines
4.0 KiB
Go
package campaign
|
|
|
|
import (
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/finder"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/service/provider"
|
|
"joybuywork/internal/utils/logic"
|
|
pb "joybuywork/proto/go_proto/w_campaign"
|
|
)
|
|
|
|
type ChildShow struct {
|
|
logic.Logic
|
|
Req *pb.ChildShowReq
|
|
Res *pb.ChildShowRes
|
|
|
|
ruleMap map[int64]*model.FissionCampaignRewardRule
|
|
}
|
|
|
|
func (s *ChildShow) Run() error {
|
|
return logic.Run(s)
|
|
}
|
|
|
|
func (s *ChildShow) Exec() (err error) {
|
|
cpn, err := s.setCampaign()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.setRewards(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *ChildShow) setCampaign() (cpn *model.FissionCampaign, err error) {
|
|
cpn, err = finder.Campaign(s.Ctx, s.Req.GetId(), s.Req.GetHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
conf, err := cache.NewCampaignConfig(s.Ctx).FindByCampaignId(cpn.ID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
s.Res.Title = cpn.Title
|
|
s.Res.ChildType = int32(cpn.ChildType)
|
|
s.Res.FissionId = cpn.FissionID
|
|
s.Res.TStart = cpn.TStart
|
|
s.Res.TEnd = cpn.TEnd
|
|
s.Res.PlayType = int32(conf.PlayType)
|
|
|
|
return
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
func (s *ChildShow) setRewards(cpn *model.FissionCampaign) (err error) {
|
|
m := s.GetDao().FissionCampaignReward
|
|
list, err := m.WithContext(s.Ctx).Where(
|
|
m.CampaignID.Eq(cpn.ID),
|
|
m.IsDel.Eq(mtype.No),
|
|
).Order(m.Sort).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(list) == 0 {
|
|
return
|
|
}
|
|
|
|
s.Res.Rewards = make([]*pb.ChildShowRes_Reward, 0, len(list))
|
|
|
|
var rewardIds []int64
|
|
for _, v := range list {
|
|
rewardIds = append(rewardIds, v.RewardID)
|
|
}
|
|
|
|
preward, err := provider.NewRewards(s.Ctx, cpn.ProjectID, rewardIds...)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var langMark string
|
|
if cpn.Pid > 0 {
|
|
var pcpn *model.FissionCampaign
|
|
pcpn, err = cache.NewCampaign(s.Ctx).FindById(cpn.Pid)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
langMark = mtype.FissionLangTypeToMark[pcpn.GetLangTypes()[0]]
|
|
}
|
|
|
|
for _, v := range list {
|
|
one := &pb.ChildShowRes_Reward{
|
|
Id: v.ID,
|
|
RewardId: v.RewardID,
|
|
Stock: v.Stock,
|
|
InviteNum: v.InviteNum,
|
|
RewardNum: v.RewardNum,
|
|
IsThank: int32(v.IsThank),
|
|
Score: v.Score,
|
|
SignDay: v.SignDay,
|
|
CollectNum: v.CollectNum,
|
|
IsSuper: int32(v.IsSuper),
|
|
KvData: nil,
|
|
Title: "",
|
|
ImgUrl: "",
|
|
ReceiveType: 0,
|
|
Contact: "",
|
|
Url: "",
|
|
Help: 0,
|
|
HelpPercent: 0,
|
|
Click: 0,
|
|
ClickPercent: 0,
|
|
ClickPercentLimit: 0,
|
|
Open: 0,
|
|
OpenPercent: 0,
|
|
OpenPercentLimit: 0,
|
|
LangMark: "",
|
|
Odds: v.Odds,
|
|
JumpUrl: v.JumpURL,
|
|
FormTitle: "",
|
|
CampaignLimit: 0,
|
|
Register: 0,
|
|
RegisterPercent: 0,
|
|
InitPercent: v.InitPercent,
|
|
PropMark: v.PropMark,
|
|
}
|
|
info, _ := preward.InfoAutoLang(v.RewardID, langMark)
|
|
|
|
one.ReceiveType = info.ReceiveType
|
|
one.Contact = info.Contact
|
|
one.Url = info.Url
|
|
one.FormTitle = info.FormTitle
|
|
|
|
for _, kv := range info.KvData {
|
|
one.KvData = append(one.KvData, &pb.ChildShowRes_KV{
|
|
Key: kv.Key,
|
|
Value: kv.Value,
|
|
})
|
|
}
|
|
|
|
one.Title, one.ImgUrl, one.LangMark = info.Title, info.ImgUrl, info.Mark
|
|
|
|
if rule, ok := s.ruleMap[v.ID]; ok {
|
|
one.CampaignLimit = rule.CampaignLimit
|
|
}
|
|
|
|
s.Res.Rewards = append(s.Res.Rewards, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *ChildShow) _ruleMap(cpn *model.FissionCampaign) (err error) {
|
|
ruleM := s.GetDao().FissionCampaignRewardRule
|
|
rules, err := ruleM.WithContext(s.Ctx).Where(ruleM.CampaignID.Eq(cpn.ID)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var ruleMap = make(map[int64]*model.FissionCampaignRewardRule, len(rules))
|
|
for _, v := range rules {
|
|
ruleMap[v.RewardID] = v
|
|
}
|
|
|
|
s.ruleMap = ruleMap
|
|
|
|
return
|
|
}
|