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.
197 lines
4.2 KiB
Go
197 lines
4.2 KiB
Go
package campaign
|
|
|
|
import (
|
|
"joybuywork/internal/app"
|
|
"joybuywork/internal/consts"
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/dbcheck"
|
|
"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"
|
|
"joybuywork/proto/go_proto/workerr"
|
|
|
|
dlinkpb "gits.branchcn.com/backend/deeplink/proto/go_proto/dlink"
|
|
)
|
|
|
|
type AdsShow struct {
|
|
logic.Logic
|
|
Req *pb.AdsShowReq
|
|
Res *pb.AdsShowRes
|
|
|
|
project *model.Project
|
|
temp *model.FissionTemp
|
|
}
|
|
|
|
func (s *AdsShow) Run() error {
|
|
return logic.Run(s)
|
|
}
|
|
|
|
func (s *AdsShow) Exec() (err error) {
|
|
cpn, err := s.setCampaign()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.setDelayLinkData(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.serReward(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.fission(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 设置活动数据
|
|
func (s *AdsShow) setCampaign() (cpn *model.FissionCampaign, err error) {
|
|
cpn, err = finder.Campaign(s.Ctx, s.Req.GetHashId())
|
|
if err != nil {
|
|
return nil, s.BE().CacheError(err)
|
|
}
|
|
|
|
if cpn == nil || cpn.IsDel == mtype.Yes {
|
|
err = workerr.NotFound("campaign not found")
|
|
return
|
|
}
|
|
|
|
cc := cache.NewCampaignConfig(s.Ctx)
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
s.Res.Id = cpn.ID
|
|
s.Res.HashId = cpn.HashID
|
|
s.Res.Title = cpn.Title
|
|
s.Res.TempId = cpn.TemplateID
|
|
s.Res.ProjectId = cpn.ProjectID
|
|
s.Res.FissionMark = consts.FissionIdMap[cpn.FissionID]
|
|
s.Res.Status = int32(cpn.Status)
|
|
s.Res.PageTitle = conf.PageTitle
|
|
s.Res.BgImg = conf.ImageMain
|
|
s.Res.TOffset = cpn.TOffset
|
|
s.Res.TStart = cpn.TStart
|
|
s.Res.TEnd = cpn.TEnd
|
|
s.Res.CoverUrl = cpn.CoverURL
|
|
s.Res.Target = int32(cpn.Target)
|
|
s.Res.Countdown = conf.Countdown
|
|
s.Res.FissionId = cpn.FissionID
|
|
|
|
return
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
// 设置延迟深度链接数据
|
|
func (s *AdsShow) setDelayLinkData(cpn *model.FissionCampaign) (err error) {
|
|
res, err := app.NewDeepLinkLink().GetCampaignDataList(s.Ctx, &dlinkpb.GetCampaignDataListReq{
|
|
ProjectId: cpn.ProjectID,
|
|
CampaignId: cpn.ID,
|
|
})
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
s.Res.DelayLinkData = make([]*pb.AdsShowRes_KV, 0, len(res.GetList()))
|
|
for _, v := range res.GetList() {
|
|
s.Res.DelayLinkData = append(s.Res.DelayLinkData, &pb.AdsShowRes_KV{
|
|
Key: v.GetKey(),
|
|
Value: v.GetVal(),
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *AdsShow) serReward(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)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var bIds []int64
|
|
for _, v := range list {
|
|
bIds = append(bIds, v.RewardID)
|
|
}
|
|
|
|
prewards, err := provider.NewRewards(s.Ctx, cpn.ProjectID, bIds...)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
langMark := cpn.GetLangMarks()[0]
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
s.Res.Rewards = make([]*pb.AdsShowRes_Reward, 0, len(list))
|
|
for _, v := range list {
|
|
info, _ := prewards.InfoAutoLang(v.RewardID, langMark)
|
|
|
|
one := &pb.AdsShowRes_Reward{
|
|
Id: v.ID,
|
|
RewardId: v.RewardID,
|
|
Odds: v.Odds,
|
|
Title: info.Title,
|
|
ImgUrl: info.ImgUrl,
|
|
KvData: make([]*pb.AdsShowRes_KV, 0, len(info.KvData)),
|
|
ReceiveType: info.ReceiveType,
|
|
Contact: info.Contact,
|
|
Url: info.Url,
|
|
}
|
|
|
|
for _, kv := range info.KvData {
|
|
one.KvData = append(one.KvData, &pb.AdsShowRes_KV{
|
|
Key: kv.Key,
|
|
Value: kv.Value,
|
|
})
|
|
}
|
|
|
|
s.Res.Rewards = append(s.Res.Rewards, one)
|
|
|
|
}
|
|
|
|
return
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
func (s *AdsShow) fission(cpn *model.FissionCampaign) (err error) {
|
|
switch cpn.FissionID {
|
|
case consts.IdAdsFlip:
|
|
return s._flip(cpn)
|
|
default:
|
|
return
|
|
}
|
|
}
|
|
|
|
func (s *AdsShow) _flip(cpn *model.FissionCampaign) (err error) {
|
|
m := s.GetDao().FissionCampaignFlip
|
|
conf, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.IsDel.Eq(mtype.No)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if conf != nil {
|
|
s.Res.Flip = &pb.AdsShowRes_Flip{CardImg: conf.CardImg}
|
|
}
|
|
|
|
return
|
|
}
|