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 }