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.
2011 lines
47 KiB
Go
2011 lines
47 KiB
Go
package service
|
|
|
|
import (
|
|
"joybuywork/internal/app"
|
|
"joybuywork/internal/config"
|
|
"joybuywork/internal/consts"
|
|
"joybuywork/internal/consts/ckey"
|
|
"joybuywork/internal/plugins/jsonm"
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/dbcheck"
|
|
"joybuywork/internal/repository/finder"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/service/cmm"
|
|
containers "joybuywork/internal/service/containers/campaign"
|
|
"joybuywork/internal/service/provider"
|
|
"joybuywork/internal/service/provider/fissionaction"
|
|
"joybuywork/internal/service/provider/operatelog"
|
|
"joybuywork/internal/service/queue/producer"
|
|
"joybuywork/internal/service/queue/types"
|
|
"joybuywork/internal/utils"
|
|
"joybuywork/internal/utils/blink"
|
|
"joybuywork/internal/utils/logic"
|
|
"joybuywork/internal/utils/timez"
|
|
"joybuywork/internal/utils/verify"
|
|
pb "joybuywork/proto/go_proto/w_campaign"
|
|
"joybuywork/proto/go_proto/workerr"
|
|
"time"
|
|
|
|
"gorm.io/gen"
|
|
"gorm.io/gen/field"
|
|
)
|
|
|
|
type WCampaign struct {
|
|
Service
|
|
}
|
|
|
|
// List 活动列表
|
|
func (s *WCampaign) List(req *pb.ListReq, res *pb.ListRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ListRes{}
|
|
|
|
container := new(containers.List)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// Status 修改状态
|
|
func (s *WCampaign) Status(req *pb.StatusReq, res *pb.StatusRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
cpn, err := finder.Campaign(s.ctx, req.GetId(), req.GetHashId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
if cpn == nil || cpn.IsDel == mtype.Yes {
|
|
return workerr.NotFound("campaign not found")
|
|
}
|
|
|
|
*res = pb.StatusRes{}
|
|
|
|
//活动已经下线了,直接返回成功,什么都不干
|
|
if cpn.Status == mtype.FissionCampaignStatusCancel {
|
|
return
|
|
}
|
|
|
|
// 想下线,但是没发布
|
|
if req.Status == mtype.FissionCampaignStatusCancel && !cpn.IsPub() {
|
|
return workerr.CWaitCancelError
|
|
}
|
|
|
|
// 想上线,但是不是预发布状态
|
|
if verify.InArray[int32](req.Status, mtype.FissionCampaignStatusPub, mtype.FissionCampaignStatusPubPre) && cpn.Status != mtype.FissionCampaignStatusPubPre {
|
|
return workerr.CPubWaitError
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaign
|
|
var up = []field.AssignExpr{
|
|
m.Status.Value(int8(req.GetStatus())),
|
|
}
|
|
|
|
if req.PreRunTime > 0 {
|
|
up = append(up, m.PreToRun.Value(timez.GMT(req.PreRunTime, cpn.TOffset)))
|
|
}
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(cpn.ID)).UpdateSimple(up...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
err = cache.NewCampaign(s.ctx).Clear(cpn)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
switch req.Status {
|
|
case mtype.FissionCampaignStatusPub:
|
|
var conf *model.FissionCampaignConfig
|
|
conf, err = cache.NewCampaignConfig(s.ctx).FindByCampaignId(cpn.ID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
confM := s.GetDao().FissionCampaignConfig
|
|
_, err = confM.WithContext(s.ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(confM.HasWhite.Value(mtype.No))
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
_ = cache.NewCampaignConfig(s.ctx).Clear(conf)
|
|
|
|
producer.NewDeepworkNotify(s.ctx).CampaignStart(types.DnCampaignStart{
|
|
CampaignId: cpn.ID,
|
|
CampaignHashId: cpn.HashID,
|
|
Timestamp: time.Now().Unix(),
|
|
})
|
|
|
|
case mtype.FissionCampaignStatusCancel:
|
|
err = cmm.NewCMM(s.ctx, s.GetDao()).CampaignCancelTask(cpn, true)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
producer.NewDeepworkNotify(s.ctx).CampaignEnd(types.DnCampaignEnd{
|
|
CampaignId: cpn.ID,
|
|
CampaignHashId: cpn.HashID,
|
|
Timestamp: time.Now().Unix(),
|
|
})
|
|
default:
|
|
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Destroy 删除活动
|
|
func (s *WCampaign) Destroy(req *pb.DestroyReq, res *pb.DestroyRes) (err error) {
|
|
defer s.checkErr()
|
|
cpn, err := finder.Campaign(s.ctx, req.GetId(), req.GetHashId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
*res = pb.DestroyRes{}
|
|
|
|
if cpn == nil || cpn.IsDel == mtype.Yes {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaign
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(cpn.ID)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
err = cache.NewCampaign(s.ctx).Clear(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// 待发布的活动的一些数据要停止处理
|
|
if cpn.Status == mtype.FissionCampaignStatusWait {
|
|
err = cmm.NewCMM(s.ctx, s.GetDao()).CampaignCancelTask(cpn, true)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
producer.NewOplatformOther(s.ctx).OpoCampaignDelete(types.OpoCampaignDelete{
|
|
ProjectId: cpn.ProjectID,
|
|
CampaignHashId: cpn.HashID,
|
|
}, producer.SetHeaderLang(cpn.GetLangMarks()[0]))
|
|
|
|
return
|
|
}
|
|
|
|
// Store 创建活动
|
|
func (s *WCampaign) Store(req *pb.StoreReq, res *pb.StoreRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.StoreRes{}
|
|
|
|
container := new(containers.Store)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran(), logic.WithOl())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
err = container.Run()
|
|
|
|
return
|
|
}
|
|
|
|
// Share 社媒选项
|
|
func (s *WCampaign) Share(req *pb.ShareReq, res *pb.ShareRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
loc, overSea := consts.ShareLocList, consts.ShareOverSeaList
|
|
|
|
*res = pb.ShareRes{
|
|
Loc: make([]*pb.ShareRes_One, 0, len(loc)),
|
|
OverSea: make([]*pb.ShareRes_One, 0, len(overSea)),
|
|
}
|
|
|
|
for _, v := range loc {
|
|
if v.Close {
|
|
continue
|
|
}
|
|
res.Loc = append(res.Loc, &pb.ShareRes_One{
|
|
Id: v.Id,
|
|
Title: v.Title,
|
|
Logo: v.Logo,
|
|
Scheme: v.Scheme,
|
|
IosScheme: v.IosScheme,
|
|
})
|
|
}
|
|
|
|
for _, v := range overSea {
|
|
if v.Close {
|
|
continue
|
|
}
|
|
res.OverSea = append(res.OverSea, &pb.ShareRes_One{
|
|
Id: v.Id,
|
|
Title: v.Title,
|
|
Logo: v.Logo,
|
|
Scheme: v.Scheme,
|
|
IosScheme: v.IosScheme,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Show 活动详情
|
|
func (s *WCampaign) Show(req *pb.ShowReq, res *pb.ShowRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ShowRes{}
|
|
|
|
container := new(containers.Show)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
err = container.Run()
|
|
|
|
return
|
|
}
|
|
|
|
// ChannelList 渠道列表
|
|
func (s *WCampaign) ChannelList(req *pb.ChannelListReq, res *pb.ChannelListRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
cpn, err := finder.Campaign(s.ctx, req.GetCampaignId(), req.GetCampaignHashId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
if cpn == nil || cpn.IsDel == mtype.Yes {
|
|
return workerr.NotFound("not found campaign")
|
|
}
|
|
|
|
project, err := finder.Project(s.ctx, cpn.ProjectID)
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
if project == nil || project.IsDel == mtype.Yes {
|
|
return workerr.NotFound("not found project")
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignChannel
|
|
list, err := m.WithContext(s.ctx).Where(m.CampaignID.Eq(cpn.ID), m.IsDel.Eq(mtype.No)).Order(m.ID).Find()
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
var cll, cwl int
|
|
for _, v := range list {
|
|
switch v.CType {
|
|
case mtype.FissionCampaignChannelTypeApp:
|
|
cll++
|
|
case mtype.FissionCampaignChannelTypeWeb:
|
|
cwl++
|
|
}
|
|
}
|
|
|
|
*res = pb.ChannelListRes{
|
|
List: make([]*pb.ChannelListRes_One, 0, cll),
|
|
WebList: make([]*pb.ChannelListRes_One, 0, cwl),
|
|
}
|
|
|
|
for _, v := range list {
|
|
switch v.CType {
|
|
case mtype.FissionCampaignChannelTypeApp:
|
|
var url string
|
|
switch cpn.Target {
|
|
case mtype.FissionCampaignConfigTargetAdsGame:
|
|
url = blink.NewAdsLink(project.Domain, cpn.HashID, v.Mark).CampaignShareLink()
|
|
default:
|
|
url = blink.NewCampaignLink(project.Domain, cpn.HashID, v.Mark).CampaignShareLink()
|
|
}
|
|
|
|
res.List = append(res.List, &pb.ChannelListRes_One{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
IsDefault: int32(v.IsDefault),
|
|
Url: url,
|
|
})
|
|
case mtype.FissionCampaignChannelTypeWeb:
|
|
url := v.ShortLink
|
|
if url == "" {
|
|
url = blink.NewCampaignLink(project.Domain, cpn.HashID, v.Mark).CampaignWebLink()
|
|
}
|
|
res.WebList = append(res.WebList, &pb.ChannelListRes_One{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
IsDefault: int32(v.IsDefault),
|
|
Url: url,
|
|
Code: v.Code,
|
|
})
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// ChannelCreate 渠道创建
|
|
func (s *WCampaign) ChannelCreate(req *pb.ChannelCreateReq, res *pb.ChannelCreateRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
*res = pb.ChannelCreateRes{}
|
|
|
|
container := new(containers.ChannelCreate)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// ChannelUpdate 渠道更新
|
|
func (s *WCampaign) ChannelUpdate(req *pb.ChannelUpdateReq, res *pb.ChannelUpdateRes) (err error) {
|
|
defer s.checkErr()
|
|
m := s.GetDao().FissionCampaignChannel
|
|
cl, err := m.WithContext(s.ctx).Where(m.ID.Eq(req.GetId())).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if cl == nil || cl.IsDel == mtype.Yes {
|
|
return workerr.NotFound("not found channel")
|
|
}
|
|
|
|
if cl.IsDefault == mtype.Yes {
|
|
return workerr.CChanelNotSetError
|
|
}
|
|
|
|
*res = pb.ChannelUpdateRes{}
|
|
|
|
if cl.Title == req.GetTitle() {
|
|
return
|
|
}
|
|
|
|
var title []string
|
|
err = m.WithContext(s.ctx).Where(m.CampaignID.Eq(cl.CampaignID), m.ID.Neq(cl.ID), m.CType.Eq(cl.CType), m.IsDel.Eq(mtype.No)).Pluck(m.Title, &title)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
for _, v := range title {
|
|
if v == req.GetTitle() {
|
|
return workerr.CChanelExistError
|
|
}
|
|
}
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(cl.ID)).UpdateSimple(m.Title.Value(req.GetTitle()))
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
cpn, _ := cache.NewCampaign(s.ctx).FindById(cl.CampaignID)
|
|
cpnM := s.GetDao().FissionCampaign
|
|
cpnM.WithContext(s.ctx).Where(cpnM.ID.Eq(cl.CampaignID)).UpdateSimple(cpnM.UpdatedAt.Value(time.Now().Unix()))
|
|
cache.NewCampaign(s.ctx).Clear(cpn)
|
|
|
|
_ = cache.NewCampaignChannel(s.ctx).Clear(cl)
|
|
|
|
return
|
|
}
|
|
|
|
// ChannelDestroy 渠道删除
|
|
func (s *WCampaign) ChannelDestroy(req *pb.ChannelDestroyReq, res *pb.ChannelDestroyRes) (err error) {
|
|
defer s.checkErr()
|
|
m := s.GetDao().FissionCampaignChannel
|
|
cl, err := m.WithContext(s.ctx).Where(m.ID.Eq(req.GetId())).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if cl == nil || cl.IsDel == mtype.Yes {
|
|
return
|
|
}
|
|
|
|
if cl.IsDefault == mtype.Yes {
|
|
return workerr.CChanelNotSetError
|
|
}
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(cl.ID)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
cpn, _ := cache.NewCampaign(s.ctx).FindById(cl.CampaignID)
|
|
cpnM := s.GetDao().FissionCampaign
|
|
cpnM.WithContext(s.ctx).Where(cpnM.ID.Eq(cl.CampaignID)).UpdateSimple(cpnM.UpdatedAt.Value(time.Now().Unix()))
|
|
cache.NewCampaign(s.ctx).Clear(cpn)
|
|
|
|
_ = cache.NewCampaignChannel(s.ctx).Clear(cl)
|
|
|
|
*res = pb.ChannelDestroyRes{}
|
|
return
|
|
}
|
|
|
|
// Update 更新活动
|
|
func (s *WCampaign) Update(req *pb.UpdateReq, res *pb.UpdateRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.UpdateRes{}
|
|
|
|
container := new(containers.Update)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran(), logic.WithOl())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
err = container.Run()
|
|
|
|
return
|
|
}
|
|
|
|
// KvData 获取活动键值对
|
|
func (s *WCampaign) KvData(req *pb.KvDataReq, res *pb.KvDataRes) (err error) {
|
|
defer s.checkErr()
|
|
conf, err := cache.NewCampaignConfig(s.ctx).FindByCampaignId(req.GetId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
if conf == nil {
|
|
return workerr.NotFound("not found campaign")
|
|
}
|
|
|
|
kv := conf.GetCampaignData()
|
|
|
|
*res = pb.KvDataRes{
|
|
Kv: make([]*pb.KvDataRes_KV, 0, len(kv)),
|
|
}
|
|
|
|
for _, v := range kv {
|
|
res.Kv = append(res.Kv, &pb.KvDataRes_KV{
|
|
Key: v.Key,
|
|
Value: v.Value,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Cert 认证活动信息
|
|
func (s *WCampaign) Cert(req *pb.CertReq, res *pb.CertRes) (err error) {
|
|
defer s.checkErr()
|
|
cpn, err := finder.Campaign(s.ctx, req.GetId(), req.GetHashId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
project, err := finder.Project(s.ctx, req.GetProjectId(), req.GetProjectHashId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
if cpn == nil || cpn.IsDel == mtype.Yes || project == nil || project.IsDel == mtype.Yes || cpn.ProjectID != project.ID {
|
|
return
|
|
}
|
|
|
|
*res = pb.CertRes{
|
|
Cert: true,
|
|
Id: cpn.ID,
|
|
HashId: cpn.HashID,
|
|
ProjectId: project.ID,
|
|
ProjectHashId: project.HashID,
|
|
Title: cpn.Title,
|
|
}
|
|
return
|
|
}
|
|
|
|
// Barrage 活动弹幕
|
|
func (s *WCampaign) Barrage(req *pb.BarrageReq, res *pb.BarrageRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.BarrageRes{}
|
|
container := new(containers.Barrage)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// Option 投票选项
|
|
func (s *WCampaign) Option(req *pb.OptionReq, res *pb.OptionRes) (err error) {
|
|
defer s.checkErr()
|
|
cpn, err := finder.Campaign(s.ctx, req.GetId(), req.GetHashId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
if cpn == nil {
|
|
return workerr.NotFound("not found cpn")
|
|
}
|
|
|
|
fcqM := s.GetDao().FissionCampaignQuiz
|
|
fcq, err := fcqM.WithContext(s.ctx).Where(fcqM.CampaignID.Eq(cpn.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if fcq == nil {
|
|
return workerr.NotFound("not found fcq")
|
|
}
|
|
|
|
optionM := s.GetDao().FissionCampaignQuizOption
|
|
options, err := optionM.WithContext(s.ctx).Where(optionM.CampaignID.Eq(cpn.ID), optionM.IsDel.Eq(mtype.No)).Order(optionM.VoteNum.Desc(), optionM.ID).Find()
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
*res = pb.OptionRes{}
|
|
|
|
var rightId int64
|
|
for _, v := range options {
|
|
res.Options = append(res.Options, &pb.OptionRes_Option{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
ImgUrl: v.ImgURL,
|
|
IsRight: int32(v.IsRight),
|
|
VoteNum: v.VoteNum,
|
|
})
|
|
if v.IsRight == mtype.Yes {
|
|
rightId = v.ID
|
|
}
|
|
}
|
|
|
|
if fcq.OpenType != mtype.FissionCampaignQuizOpenTypeWait {
|
|
res.RightId = rightId
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// RelateDdl 活动关联动态下载页
|
|
func (s *WCampaign) RelateDdl(req *pb.RelateDdlReq, res *pb.RelateDdlRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
*res = pb.RelateDdlRes{}
|
|
|
|
project, err := finder.Project(s.ctx, req.GetProjectHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if project == nil || project.IsDel == mtype.Yes {
|
|
err = workerr.NotFound("not found project")
|
|
return
|
|
}
|
|
|
|
cpn, err := finder.Campaign(s.ctx, req.GetHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn == nil {
|
|
err = workerr.NotFound("not found campaign")
|
|
return
|
|
}
|
|
|
|
conf, err := cmm.NewCMM(s.ctx, s.dao).GetFissionConfig(project.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionConfig
|
|
|
|
// 关闭动态下载页
|
|
if req.GetClose() {
|
|
if conf.DynamicCampaign == cpn.ID {
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(m.DynamicCampaign.Value(0))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 等值不用修改
|
|
if conf.DynamicCampaign == cpn.ID {
|
|
return
|
|
}
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(m.DynamicCampaign.Value(cpn.ID))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// DdlCampaign 关联动态下载页的活动
|
|
func (s *WCampaign) DdlCampaign(req *pb.DdlCampaignReq, res *pb.DdlCampaignRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := finder.Project(s.ctx, req.GetProjectHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if project == nil || project.IsDel == mtype.Yes {
|
|
err = workerr.NotFound("not found project")
|
|
return
|
|
}
|
|
|
|
conf, err := cmm.NewCMM(s.ctx, s.dao).GetFissionConfig(project.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if conf.DynamicCampaign == 0 {
|
|
return
|
|
}
|
|
|
|
cpn, err := finder.Campaign(s.ctx, conf.DynamicCampaign)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn == nil {
|
|
err = workerr.NotFound("not found campaign")
|
|
return
|
|
}
|
|
|
|
*res = pb.DdlCampaignRes{
|
|
HashId: cpn.HashID,
|
|
Title: cpn.Title,
|
|
Status: int32(cpn.Status),
|
|
}
|
|
return
|
|
}
|
|
|
|
// Langs 活动多语言配置信息
|
|
func (s *WCampaign) Langs(req *pb.LangsReq, res *pb.LangsRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.LangsRes{}
|
|
|
|
container := new(containers.Langs)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// Lang 活动语言信息
|
|
func (s *WCampaign) Lang(req *pb.LangReq, res *pb.LangRes) (err error) {
|
|
defer s.checkErr()
|
|
cpn, err := finder.Campaign(s.ctx, req.GetCampaignId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn == nil {
|
|
err = workerr.NotFound("not found campaign")
|
|
return
|
|
}
|
|
|
|
project, err := s.ProjectErrNil(cpn.ProjectID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
conf, err := cache.NewCampaignConfig(s.ctx).FindByCampaignId(cpn.ID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
var langMark = utils.NotExistGetFirst(req.GetLangMark(), cpn.GetLangMarks())
|
|
lang, err := cache.NewCampaignLang(s.ctx).FindByCampaignId(cpn.ID, langMark)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if lang == nil {
|
|
return
|
|
}
|
|
|
|
*res = pb.LangRes{
|
|
HashId: lang.HashID,
|
|
PageTitle: lang.PageTitle,
|
|
ImageMain: lang.ImageMain,
|
|
DownloadPageImage: lang.DownloadPageImage,
|
|
WechatPageImage: lang.WechatPageImage,
|
|
ContentImg: lang.ContentImg,
|
|
WebBgImg: lang.WebBgImg,
|
|
WarmUpImg: lang.WarmUpImg,
|
|
DlBgImg: lang.DlBgImg,
|
|
DlBannerImg: lang.DlBannerImg,
|
|
DlBannerAppLogo: lang.DlBannerAppLogo,
|
|
DlBannerAppName: lang.DlBannerAppName,
|
|
DlBannerAppBtn: lang.DlBannerAppBtn,
|
|
ShareText: lang.ShareText,
|
|
ShareImg: lang.ShareImg,
|
|
Rule: lang.Rule,
|
|
Conds: nil,
|
|
Quit: nil,
|
|
Questions: nil,
|
|
LongImgs: nil,
|
|
Cash: nil,
|
|
TOffset: lang.TOffset,
|
|
QaGroup: nil,
|
|
TalkText: nil,
|
|
Gold: nil,
|
|
Coin: nil,
|
|
TopicColor: lang.TopicColor,
|
|
PcBg: lang.PcBg,
|
|
RuleImg: lang.RuleImg,
|
|
}
|
|
|
|
for _, cond := range lang.GetConds() {
|
|
res.Conds = append(res.Conds, &pb.LangRes_Cond{
|
|
CondId: cond.CondId,
|
|
Desc: cond.Desc,
|
|
WebUrl: cond.WebURL,
|
|
ExtraParam: cond.ExtraParam,
|
|
PcParam: cond.PcParam,
|
|
GoText: cond.GoText,
|
|
})
|
|
}
|
|
|
|
if quit := lang.GetQuit(); quit != nil {
|
|
res.Quit = &pb.LangRes_Quit{
|
|
Title: quit.Title,
|
|
Options: make([]*pb.LangRes_Option, 0, len(quit.Options)),
|
|
}
|
|
|
|
for _, option := range quit.Options {
|
|
res.Quit.Options = append(res.Quit.Options, &pb.LangRes_Option{
|
|
OptionId: option.OptionId,
|
|
Title: option.Title,
|
|
ImgUrl: option.ImgUrl,
|
|
})
|
|
}
|
|
}
|
|
|
|
for _, question := range lang.GetQuestions() {
|
|
q := &pb.LangRes_Question{
|
|
QaId: question.QaId,
|
|
Title: question.Title,
|
|
Options: make([]*pb.LangRes_Option, 0, len(question.Options)),
|
|
}
|
|
|
|
for _, option := range question.Options {
|
|
q.Options = append(q.Options, &pb.LangRes_Option{
|
|
OptionId: option.OptionId,
|
|
Title: option.Title,
|
|
ImgUrl: option.ImgUrl,
|
|
})
|
|
}
|
|
|
|
res.Questions = append(res.Questions, q)
|
|
}
|
|
|
|
var targetChannelMap = make(map[int64]*model.FissionCampaignChannel)
|
|
var targetCpnMap = make(map[int64]*model.FissionCampaign)
|
|
if conf.HasLongImg == mtype.Yes {
|
|
imgM := s.GetDao().FissionCampaignLongImg
|
|
var imgs []*model.FissionCampaignLongImg
|
|
imgs, err = imgM.WithContext(s.ctx).Where(imgM.CampaignID.Eq(lang.CampaignID), imgM.LangID.Eq(lang.ID), imgM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
var cpnIds []int64
|
|
var zoneIds []int64
|
|
for _, img := range imgs {
|
|
if img.ClickType == mtype.FissionCampaignLongImgClickTypeAll {
|
|
if img.TargetType == mtype.FissionCampaignLongImgTargetTypeCampaign {
|
|
cpnIds = append(cpnIds, img.TargetID)
|
|
}
|
|
continue
|
|
}
|
|
zoneIds = append(zoneIds, img.ID)
|
|
}
|
|
|
|
var zoneMap = make(map[int64][]*model.FissionCampaignLongImgZone, len(zoneIds))
|
|
if len(zoneIds) > 0 {
|
|
zoneM := s.GetDao().FissionCampaignLongImgZone
|
|
var zones []*model.FissionCampaignLongImgZone
|
|
zones, err = zoneM.WithContext(s.ctx).Where(zoneM.ImgID.In(zoneIds...), zoneM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
for _, zone := range zones {
|
|
zoneMap[zone.ImgID] = append(zoneMap[zone.ImgID], zone)
|
|
if zone.TargetType == mtype.FissionCampaignLongImgTargetTypeCampaign {
|
|
cpnIds = append(cpnIds, zone.TargetID)
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(cpnIds) > 0 {
|
|
cpnM := s.GetDao().FissionCampaign
|
|
var cpns []*model.FissionCampaign
|
|
cpns, err = cpnM.WithContext(s.ctx).Where(cpnM.ID.In(cpnIds...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
for _, v := range cpns {
|
|
targetCpnMap[v.ID] = v
|
|
}
|
|
|
|
channelM := s.GetDao().FissionCampaignChannel
|
|
var channels []*model.FissionCampaignChannel
|
|
channels, err = channelM.WithContext(s.ctx).Where(channelM.CampaignID.In(cpnIds...), channelM.IsDefault.Eq(mtype.Yes), channelM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
for _, channel := range channels {
|
|
targetChannelMap[channel.CampaignID] = channel
|
|
}
|
|
|
|
}
|
|
|
|
for _, v := range imgs {
|
|
var one = &pb.LangRes_LongImg{
|
|
ImgUrl: v.ImgURL,
|
|
WebUrl: v.WebURL,
|
|
AppParam: v.AppParam,
|
|
Id: v.ID,
|
|
ClickType: int32(v.ClickType),
|
|
HotZone: make([]*pb.LangRes_HotZone, 0, len(zoneMap[v.ID])),
|
|
TargetType: int32(v.TargetType),
|
|
TargetId: v.TargetID,
|
|
TargetUrl: "",
|
|
PcParam: v.PcParam,
|
|
}
|
|
if v.TargetType == mtype.FissionCampaignLongImgTargetTypeCampaign {
|
|
one.TargetUrl = blink.NewCampaignLink(project.Domain, targetCpnMap[v.TargetID].HashID, targetChannelMap[v.TargetID].Mark).CampaignShareLink()
|
|
}
|
|
|
|
for _, zone := range zoneMap[v.ID] {
|
|
two := &pb.LangRes_HotZone{
|
|
Id: zone.ID,
|
|
WebUrl: zone.WebURL,
|
|
AppParam: zone.AppParam,
|
|
ClickX: zone.ClickX,
|
|
ClickY: zone.ClickY,
|
|
ClickW: zone.ClickW,
|
|
ClickH: zone.ClickH,
|
|
TargetType: int32(zone.TargetType),
|
|
TargetId: zone.TargetID,
|
|
TargetUrl: "",
|
|
PcParam: zone.PcParam,
|
|
}
|
|
|
|
if zone.TargetType == mtype.FissionCampaignLongImgTargetTypeCampaign {
|
|
two.TargetUrl = blink.NewCampaignLink(project.Domain, targetCpnMap[zone.TargetID].HashID, targetChannelMap[zone.TargetID].Mark).CampaignShareLink()
|
|
}
|
|
|
|
one.HotZone = append(one.HotZone, two)
|
|
}
|
|
|
|
res.LongImgs = append(res.LongImgs, one)
|
|
}
|
|
}
|
|
|
|
if cash := lang.GetCash(); cash != nil {
|
|
res.Cash = &pb.LangRes_Cash{
|
|
Price: cash.Price,
|
|
Currency: cash.Currency,
|
|
}
|
|
}
|
|
|
|
if gold := lang.GetGold(); gold != nil {
|
|
res.Gold = &pb.LangRes_Gold{
|
|
Price: gold.Price,
|
|
Currency: gold.Currency,
|
|
}
|
|
}
|
|
|
|
if coin := lang.GetLangCoin(); coin != nil {
|
|
res.Coin = &pb.LangRes_Coin{
|
|
CustomBtnText: coin.CustomBtnText,
|
|
CustomWebUrl: coin.CustomWebUrl,
|
|
CustomExtraParam: coin.CustomExtraParam,
|
|
CustomPcParam: coin.CustomPcParam,
|
|
}
|
|
}
|
|
|
|
if qaGroup := lang.GetQaGroup(); qaGroup != nil {
|
|
var title string
|
|
qaGroupM := s.GetDao().LibraryQaGroup
|
|
group, _ := qaGroupM.WithContext(s.ctx).Where(qaGroupM.HashID.Eq(qaGroup.QaGroupId)).Take()
|
|
if group != nil {
|
|
title = group.Title
|
|
}
|
|
|
|
res.QaGroup = &pb.LangRes_QaGroup{
|
|
QaGroupId: qaGroup.QaGroupId,
|
|
QaNum: qaGroup.QaNum,
|
|
Title: title,
|
|
GuideGroupId: qaGroup.GuideGroupId,
|
|
}
|
|
}
|
|
|
|
if langVs := lang.GetVs(); langVs != nil {
|
|
var langScheduleMap = make(map[int64]*pb.LangRes_PkTeam, len(langVs))
|
|
|
|
for _, schedule := range langVs {
|
|
for _, pkTeam := range schedule.PkTeams {
|
|
var teams = make([]*pb.LangRes_Team, 0, len(pkTeam.Teams))
|
|
for _, team := range pkTeam.Teams {
|
|
teams = append(teams, &pb.LangRes_Team{
|
|
Id: team.Id,
|
|
Name: team.Name,
|
|
LogoImg: team.LogoImg,
|
|
})
|
|
}
|
|
|
|
langScheduleMap[pkTeam.Id] = &pb.LangRes_PkTeam{
|
|
Id: pkTeam.Id,
|
|
Teams: teams,
|
|
VsImg: pkTeam.VsImg,
|
|
Desc: pkTeam.Desc,
|
|
}
|
|
}
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignVsTeam
|
|
vsTeam, err1 := m.WithContext(s.ctx).Where(m.CampaignID.Eq(cpn.ID)).Find()
|
|
if err1 != nil {
|
|
err1 = s.BE().MysqlError(err1)
|
|
return
|
|
}
|
|
|
|
var vsTeamMap = make(map[int64]*pb.LangRes_Team, len(vsTeam))
|
|
for _, v := range vsTeam {
|
|
vsTeamMap[v.ID] = &pb.LangRes_Team{
|
|
Id: v.ID,
|
|
Name: v.Name,
|
|
LogoImg: v.LogoImg,
|
|
}
|
|
}
|
|
|
|
scheduleM := s.GetDao().FissionCampaignVsSchedule
|
|
var list []*model.FissionCampaignVsSchedule
|
|
list, err = scheduleM.WithContext(s.ctx).Where(scheduleM.CampaignID.Eq(cpn.ID)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var vsSchedule = make(map[int32][]*model.FissionCampaignVsSchedule)
|
|
for _, v := range list {
|
|
vsSchedule[v.VsIdx] = append(vsSchedule[v.VsIdx], v)
|
|
}
|
|
|
|
res.Schedules = make([]*pb.LangRes_Schedule, len(vsSchedule))
|
|
for idx, schedules := range vsSchedule {
|
|
one := &pb.LangRes_Schedule{
|
|
Id: idx,
|
|
PkTeams: make([]*pb.LangRes_PkTeam, 0, len(schedules)),
|
|
}
|
|
|
|
for _, schedule := range schedules {
|
|
two := &pb.LangRes_PkTeam{
|
|
Id: schedule.ID,
|
|
Desc: schedule.Desc,
|
|
VsImg: schedule.VsImg,
|
|
}
|
|
|
|
for _, teamId := range schedule.GetVsTeamIds() {
|
|
if teamId > 0 {
|
|
two.Teams = append(two.Teams, vsTeamMap[teamId])
|
|
} else {
|
|
two.Teams = append(two.Teams, &pb.LangRes_Team{
|
|
Id: teamId,
|
|
})
|
|
}
|
|
}
|
|
|
|
if scd, ok := langScheduleMap[schedule.ID]; ok {
|
|
two.Desc = scd.Desc
|
|
two.VsImg = scd.VsImg
|
|
for i, team := range scd.Teams {
|
|
if team.Id > 0 {
|
|
two.Teams[i] = team
|
|
}
|
|
}
|
|
}
|
|
|
|
one.PkTeams = append(one.PkTeams, two)
|
|
}
|
|
|
|
res.Schedules[idx] = one
|
|
}
|
|
}
|
|
|
|
_ = jsonm.StrUnmarshal(lang.TalkText, &res.TalkText)
|
|
_ = jsonm.StrUnmarshal(lang.Uno, &res.Uno)
|
|
|
|
return
|
|
}
|
|
|
|
// SaveLang 保存活动多语言配置信息
|
|
func (s *WCampaign) SaveLang(req *pb.SaveLangReq, res *pb.SaveLangRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.SaveLangRes{}
|
|
|
|
container := new(containers.SaveLang)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran(), logic.WithOnce(ckey.FissionCampaignLangSaveOnce(req.GetCampaignHashId(), req.GetLangMark())))
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// DestroyLang 删除活动语言配置信息
|
|
func (s *WCampaign) DestroyLang(req *pb.DestroyLangReq, res *pb.DestroyLangRes) (err error) {
|
|
defer s.checkErr()
|
|
m := s.GetDao().FissionCampaignLang
|
|
lang, err := m.WithContext(s.ctx).Where(m.HashID.Eq(req.GetHashId()), m.IsDel.Eq(mtype.No)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if lang == nil || lang.IsDel == mtype.Yes {
|
|
return
|
|
}
|
|
|
|
cpn, err := finder.Campaign(s.ctx, lang.CampaignID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn == nil {
|
|
err = workerr.NotFound("not found cpn")
|
|
return
|
|
}
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(lang.ID)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
lt := mtype.MarkToLangType[lang.LangMark]
|
|
|
|
var nlt []int8
|
|
for _, v := range cpn.GetLangTypes() {
|
|
if v == lt {
|
|
continue
|
|
}
|
|
nlt = append(nlt, v)
|
|
}
|
|
|
|
nltStr, _ := jsonm.MarshalToString(nlt)
|
|
|
|
cpnM := s.GetDao().FissionCampaign
|
|
_, err = cpnM.WithContext(s.ctx).Where(cpnM.ID.Eq(cpn.ID)).UpdateSimple(cpnM.LangTypes.Value(nltStr))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
_ = cache.NewCampaignLang(s.ctx).Clear(lang)
|
|
_ = cache.NewCampaign(s.ctx).Clear(cpn)
|
|
|
|
*res = pb.DestroyLangRes{}
|
|
return
|
|
}
|
|
|
|
// LangSelect 活动语言选择
|
|
func (s *WCampaign) LangSelect(req *pb.LangSelectReq, res *pb.LangSelectRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
cpn, err := finder.Campaign(s.ctx, req.GetCampaignHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn == nil {
|
|
err = workerr.NotFound("not found cpn")
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignLang
|
|
langs, 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 langMap = make(map[string]bool)
|
|
for _, lang := range langs {
|
|
langMap[lang.LangMark] = true
|
|
}
|
|
|
|
*res = pb.LangSelectRes{
|
|
List: make([]*pb.LangSelectRes_One, len(mtype.MarkToLangType)),
|
|
}
|
|
|
|
for k, v := range mtype.MarkToLangType {
|
|
res.List[int(v)-1] = &pb.LangSelectRes_One{
|
|
LangType: int32(v),
|
|
LangMark: k,
|
|
Selected: langMap[k],
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// CampaignInfo 活动信息
|
|
func (s *WCampaign) CampaignInfo(req *pb.CampaignInfoReq, res *pb.CampaignInfoRes) (err error) {
|
|
defer s.checkErr()
|
|
cpn, err := finder.Campaign(s.ctx, req.GetCampaignHashId(), req.GetCampaignId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn == nil || cpn.IsDel == mtype.Yes {
|
|
err = workerr.NotFound("not found campaign")
|
|
return
|
|
}
|
|
|
|
project, err := s.ProjectErrNil(cpn.ProjectID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// 默认渠道
|
|
cl, err := cmm.NewCMM(s.ctx, s.GetDao()).UserBindChannel(cpn.ID, "")
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var clMark string
|
|
if cl != nil {
|
|
clMark = cl.Mark
|
|
}
|
|
|
|
linkObj := blink.NewCampaignLink(project.Domain, cpn.HashID, clMark)
|
|
|
|
var pageTitle, shareImg, pcBg string
|
|
|
|
switch cpn.Target {
|
|
case mtype.FissionCampaignConfigTargetApp, mtype.FissionCampaignConfigTargetUp, mtype.FissionCampaignConfigTargetRetain:
|
|
langMark := utils.NotExistGetFirst(req.GetLang(), cpn.GetLangMarks())
|
|
if langMark == cpn.GetLangMarks()[0] {
|
|
var style *model.FissionCampaignStyle
|
|
style, err = cache.NewCampaignStyle(s.ctx).FindByCampaignId(cpn.ID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
pageTitle = style.PageTitle
|
|
shareImg = style.ShareImg
|
|
pcBg = style.PcBg
|
|
|
|
} else {
|
|
var lang *model.FissionCampaignLang
|
|
lang, err = cache.NewCampaignLang(s.ctx).FindByCampaignId(cpn.ID, langMark)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
pageTitle = lang.PageTitle
|
|
shareImg = lang.ShareImg
|
|
pcBg = lang.PcBg
|
|
}
|
|
default:
|
|
var conf *model.FissionCampaignConfig
|
|
conf, err = cache.NewCampaignConfig(s.ctx).FindByCampaignId(cpn.ID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
pageTitle = conf.PageTitle
|
|
shareImg = conf.ShareImg
|
|
pcBg = conf.PcBg
|
|
}
|
|
|
|
*res = pb.CampaignInfoRes{
|
|
Id: cpn.ID,
|
|
HashId: cpn.HashID,
|
|
Title: cpn.Title,
|
|
PageTitle: pageTitle,
|
|
FissionMark: consts.FissionIdMap[cpn.FissionID],
|
|
FissionTitle: consts.FissionTitle[consts.LangZhCn][consts.FissionIdMap[cpn.FissionID]],
|
|
StartTime: cpn.TStart,
|
|
EndTime: cpn.TEnd,
|
|
Status: int32(cpn.Status),
|
|
TOffset: cpn.TOffset,
|
|
LangTypes: cpn.GetLangMarks(),
|
|
ShareImg: shareImg,
|
|
Link: linkObj.CampaignShareLink(),
|
|
ImgHost: config.Config.Upload.Host,
|
|
PcBg: pcBg,
|
|
Target: int32(cpn.Target),
|
|
StartAt: cpn.StartTime,
|
|
EndAt: cpn.EndTime,
|
|
ProjectId: cpn.ProjectID,
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// ShowReward 显示的奖品数据
|
|
func (s *WCampaign) ShowReward(req *pb.ShowRewardReq, res *pb.ShowRewardRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
*res = pb.ShowRewardRes{}
|
|
|
|
container := new(containers.ShowReward)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// AdsStore 创建Ads活动
|
|
func (s *WCampaign) AdsStore(req *pb.AdsStoreReq, res *pb.AdsStoreRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.AdsStoreRes{}
|
|
|
|
container := new(containers.AdsStore)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// AdsUpdate 更新Ads活动
|
|
func (s *WCampaign) AdsUpdate(req *pb.AdsUpdateReq, res *pb.AdsUpdateRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.AdsUpdateRes{}
|
|
container := new(containers.AdsUpdate)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// AdsShow Ads活动详情
|
|
func (s *WCampaign) AdsShow(req *pb.AdsShowReq, res *pb.AdsShowRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.AdsShowRes{}
|
|
container := new(containers.AdsShow)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// CampaignSelect 活动选择列表
|
|
func (s *WCampaign) CampaignSelect(req *pb.CampaignSelectReq, res *pb.CampaignSelectRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := finder.Project(s.ctx, req.GetProjectId(), req.GetProjectHashId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
if project == nil || project.IsDel == mtype.Yes {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaign
|
|
var cond = []gen.Condition{
|
|
m.IsDel.Eq(mtype.No),
|
|
m.ProjectID.Eq(project.ID),
|
|
}
|
|
|
|
if len(req.GetTargets()) > 0 {
|
|
var targets = make([]int8, 0, len(req.GetTargets()))
|
|
for _, v := range req.GetTargets() {
|
|
targets = append(targets, int8(v))
|
|
}
|
|
cond = append(cond, m.Target.In(targets...))
|
|
}
|
|
|
|
if len(req.GetStatus()) > 0 {
|
|
var status = make([]int8, 0, len(req.GetStatus()))
|
|
for _, v := range req.GetStatus() {
|
|
status = append(status, int8(v))
|
|
}
|
|
cond = append(cond, m.Status.In(status...))
|
|
}
|
|
|
|
if req.GetTempHashId() != "" {
|
|
var temp *model.FissionTemp
|
|
tempM := s.GetDao().FissionTemp
|
|
temp, err = tempM.WithContext(s.ctx).Where(tempM.HashID.Eq(req.GetTempHashId())).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if temp == nil {
|
|
cond = append(cond, m.FissionID.Eq(0))
|
|
} else {
|
|
cond = append(cond, m.FissionID.Eq(temp.FissionID))
|
|
}
|
|
|
|
}
|
|
|
|
if req.GetChildType() > 0 {
|
|
cond = append(cond, m.ChildType.Eq(int8(req.GetChildType())))
|
|
}
|
|
|
|
if req.GetChild() {
|
|
cond = append(cond, m.Target.Eq(mtype.FissionCampaignConfigTargetChild))
|
|
if req.GetChildWith() != "" {
|
|
var cpn *model.FissionCampaign
|
|
cpn, err = finder.Campaign(s.ctx, req.GetChildWith())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn != nil {
|
|
cond = append(cond, m.WithContext(s.ctx).Where(m.Pid.Eq(cpn.ID)).Or(m.Pid.Eq(0)))
|
|
} else {
|
|
cond = append(cond, m.Pid.Eq(-1))
|
|
}
|
|
|
|
} else {
|
|
cond = append(cond, m.Pid.Eq(0))
|
|
}
|
|
}
|
|
|
|
list, err := m.WithContext(s.ctx).Where(cond...).Order(m.ID.Desc()).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.CampaignSelectRes{
|
|
List: make([]*pb.CampaignSelectRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
res.List = append(res.List, &pb.CampaignSelectRes_One{
|
|
Id: v.ID,
|
|
HashId: v.HashID,
|
|
Title: v.Title,
|
|
Status: int32(v.Status),
|
|
ChildType: int32(v.ChildType),
|
|
})
|
|
}
|
|
return
|
|
}
|
|
|
|
// RewardDetail 奖品详情
|
|
func (s *WCampaign) RewardDetail(req *pb.RewardDetailReq, res *pb.RewardDetailRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.RewardDetailRes{}
|
|
container := new(containers.RewardDetail)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// UpdateStock 修改奖品库存
|
|
func (s *WCampaign) UpdateStock(req *pb.UpdateStockReq, res *pb.UpdateStockRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
m := s.GetDao().FissionCampaignReward
|
|
reward, err := m.WithContext(s.ctx).Where(m.ID.Eq(req.GetId())).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if reward == nil {
|
|
err = workerr.NotFound("reward not found")
|
|
return
|
|
}
|
|
|
|
cpn, err := cache.NewCampaign(s.ctx).FindById(reward.CampaignID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if !cpn.IsPub() {
|
|
err = workerr.VerifyError("campaign not run")
|
|
return
|
|
}
|
|
|
|
if reward.Stock == req.GetStock() {
|
|
return
|
|
}
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(reward.ID)).UpdateSimple(m.Stock.Value(req.GetStock()))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
_ = app.Redis.Del(s.ctx, ckey.FissionCampaignRewardPool(reward.ID))
|
|
operatelog.NewOperateLog(s.ctx).User(req.GetUserId(), req.GetIp()).UpdateRunningStock(reward.ID, reward.Stock, req.GetStock())
|
|
|
|
*res = pb.UpdateStockRes{}
|
|
return
|
|
}
|
|
|
|
// CampaignTz 活动时区数据
|
|
func (s *WCampaign) CampaignTz(req *pb.CampaignTzReq, res *pb.CampaignTzRes) (err error) {
|
|
defer s.checkErr()
|
|
cpn, err := cache.NewCampaign(s.ctx).FindById(req.GetId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn == nil {
|
|
err = workerr.NotFound("cpn not found")
|
|
return
|
|
}
|
|
|
|
if cpn.ChildType != 0 {
|
|
|
|
if cpn.Pid == 0 {
|
|
return
|
|
}
|
|
|
|
cpn, err = cache.NewCampaign(s.ctx).FindById(cpn.Pid)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
}
|
|
|
|
*res = pb.CampaignTzRes{
|
|
List: []*pb.CampaignTzRes_One{
|
|
{
|
|
Mark: cpn.GetLangMarks()[0],
|
|
TOffset: cpn.TOffset,
|
|
},
|
|
},
|
|
}
|
|
|
|
if len(cpn.GetLangTypes()) == 1 {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignLang
|
|
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
|
|
}
|
|
|
|
for _, v := range list {
|
|
res.List = append(res.List, &pb.CampaignTzRes_One{
|
|
Mark: v.LangMark,
|
|
TOffset: v.TOffset,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// CampaignRewardType 活动奖品类型
|
|
func (s *WCampaign) CampaignRewardType(req *pb.CampaignRewardTypeReq, res *pb.CampaignRewardTypeRes) (err error) {
|
|
defer s.checkErr()
|
|
m := s.GetDao().FissionCampaignReward
|
|
list, err := m.WithContext(s.ctx).Where(m.CampaignID.Eq(req.GetId())).Find()
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
*res = pb.CampaignRewardTypeRes{
|
|
List: make([]*pb.CampaignRewardTypeRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
res.List = append(res.List, &pb.CampaignRewardTypeRes_One{
|
|
Id: v.ID,
|
|
RewardType: int32(v.RewardType),
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// ChildList 子活动列表
|
|
func (s *WCampaign) ChildList(req *pb.ChildListReq, res *pb.ChildListRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := finder.Project(s.ctx, req.GetProjectId(), req.GetProjectHashId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
if project == nil || project.IsDel == mtype.Yes {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaign
|
|
var cond = []gen.Condition{
|
|
m.IsDel.Eq(mtype.No),
|
|
m.ProjectID.Eq(project.ID),
|
|
m.Target.Eq(mtype.FissionCampaignConfigTargetChild),
|
|
}
|
|
|
|
if req.GetTitle() != "" {
|
|
cond = append(cond, m.Title.Like(utils.DbAllLike(req.GetTitle())))
|
|
}
|
|
|
|
if len(req.GetPids()) > 0 {
|
|
cond = append(cond, m.Pid.In(req.GetPids()...))
|
|
}
|
|
|
|
if len(req.GetStatus()) != 0 {
|
|
var status = make([]int8, 0, len(req.GetStatus()))
|
|
for _, v := range req.GetStatus() {
|
|
status = append(status, int8(v))
|
|
}
|
|
cond = append(cond, m.Status.In(status...))
|
|
}
|
|
|
|
if len(req.GetChildType()) != 0 {
|
|
var status = make([]int8, 0, len(req.GetChildType()))
|
|
for _, v := range req.GetChildType() {
|
|
status = append(status, int8(v))
|
|
}
|
|
cond = append(cond, m.ChildType.In(status...))
|
|
}
|
|
|
|
if len(req.GetFissionId()) != 0 {
|
|
cond = append(cond, m.FissionID.In(req.GetFissionId()...))
|
|
}
|
|
|
|
if len(req.GetCampaignId()) != 0 {
|
|
cond = append(cond, m.Pid.In(req.GetCampaignId()...))
|
|
}
|
|
|
|
if req.GetStart() > 0 {
|
|
cond = append(cond, m.TStart.Gte(req.GetStart()))
|
|
}
|
|
|
|
if req.GetEnd() > 0 {
|
|
cond = append(cond, m.TEnd.Lte(req.GetEnd()))
|
|
}
|
|
|
|
offset, limit := utils.PpDbLo(req.GetPage(), req.GetPerPage())
|
|
list, total, err := m.WithContext(s.ctx).Where(cond...).Order(m.ID.Desc()).FindByPage(offset, limit)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.ChildListRes{
|
|
List: make([]*pb.ChildListRes_One, 0, len(list)),
|
|
Total: total,
|
|
}
|
|
|
|
var cpnIds []int64
|
|
var cpnMap = make(map[int64]string)
|
|
for _, v := range list {
|
|
if _, ok := cpnMap[v.Pid]; !ok && v.Pid > 0 {
|
|
cpnIds = append(cpnIds, v.Pid)
|
|
cpnMap[v.Pid] = ""
|
|
}
|
|
}
|
|
|
|
if len(cpnIds) > 0 {
|
|
var cpns []*model.FissionCampaign
|
|
cpns, err = m.WithContext(s.ctx).Where(m.ID.In(cpnIds...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
for _, cpn := range cpns {
|
|
cpnMap[cpn.ID] = cpn.Title
|
|
}
|
|
}
|
|
|
|
for _, v := range list {
|
|
one := &pb.ChildListRes_One{
|
|
Id: v.ID,
|
|
HashId: v.HashID,
|
|
Title: v.Title,
|
|
FissionId: v.FissionID,
|
|
FissionMark: consts.FissionIdMap[v.FissionID],
|
|
StartTime: v.TStart,
|
|
EndTime: v.TEnd,
|
|
Status: int32(v.Status),
|
|
ChildType: int32(v.ChildType),
|
|
BindCampaign: "",
|
|
HasReport: 0,
|
|
}
|
|
|
|
if pTitle, ok := cpnMap[v.Pid]; ok {
|
|
one.BindCampaign = pTitle
|
|
one.HasReport = 1
|
|
}
|
|
|
|
res.List = append(res.List, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// ChildStore 子活动列表
|
|
func (s *WCampaign) ChildStore(req *pb.ChildStoreReq, res *pb.ChildStoreRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ChildStoreRes{}
|
|
|
|
container := new(containers.ChildStore)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran(), logic.WithOl())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// ChildUpdate 更新子活动
|
|
func (s *WCampaign) ChildUpdate(req *pb.ChildUpdateReq, res *pb.ChildUpdateRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ChildUpdateRes{}
|
|
|
|
container := new(containers.ChildUpdate)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran(), logic.WithOl())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// ChildShow 子活动活动
|
|
func (s *WCampaign) ChildShow(req *pb.ChildShowReq, res *pb.ChildShowRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ChildShowRes{}
|
|
|
|
container := new(containers.ChildShow)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// TaskCenterJump 子活动列表
|
|
func (s *WCampaign) TaskCenterJump(req *pb.TaskCenterJumpReq, res *pb.TaskCenterJumpRes) (err error) {
|
|
defer s.checkErr()
|
|
m := s.GetDao().FissionCampaign
|
|
list, err := m.WithContext(s.ctx).Where(m.ID.In(req.GetCpnIds()...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(list) == 0 {
|
|
return
|
|
}
|
|
|
|
projectId := list[0].ProjectID
|
|
|
|
project, err := cache.NewProject(s.ctx).FindById(projectId)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
channelM := s.GetDao().FissionCampaignChannel
|
|
channels, err := channelM.WithContext(s.ctx).Where(
|
|
channelM.CampaignID.In(req.GetCpnIds()...),
|
|
channelM.CType.Eq(mtype.FissionCampaignChannelTypeApp),
|
|
channelM.IsDefault.Eq(mtype.Yes),
|
|
channelM.IsDel.Eq(mtype.No),
|
|
).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var channelMark = make(map[int64]string, len(channels))
|
|
for _, v := range channels {
|
|
channelMark[v.CampaignID] = v.Mark
|
|
}
|
|
|
|
*res = pb.TaskCenterJumpRes{
|
|
List: make([]*pb.TaskCenterJumpRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
res.List = append(res.List, &pb.TaskCenterJumpRes_One{
|
|
Id: v.ID,
|
|
JumpUrl: blink.NewCampaignLink(
|
|
project.Domain,
|
|
v.HashID,
|
|
channelMark[v.ID],
|
|
blink.SetTaskCenter(req.GetCenterHashId(), req.GetModuleId()),
|
|
).CampaignShareLink(),
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// CondList 活动任务数据
|
|
func (s *WCampaign) CondList(req *pb.CondListReq, res *pb.CondListRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
m := s.GetDao().FissionCampaignCond
|
|
|
|
list, err := m.WithContext(s.ctx).Where(m.ID.In(req.GetIds()...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.CondListRes{
|
|
List: make([]*pb.CondListRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
res.List = append(res.List, &pb.CondListRes_One{
|
|
Id: v.ID,
|
|
Desc: v.Desc,
|
|
Event: v.Event,
|
|
Conds: []*pb.CondListRes_Cond{
|
|
{
|
|
EventKey: v.EventKey,
|
|
EventVal: v.EventVal,
|
|
IfCond: int32(v.IfCond),
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Campaigns 获取活动数据
|
|
func (s *WCampaign) Campaigns(req *pb.CampaignsReq, res *pb.CampaignsRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
m := s.GetDao().FissionCampaign
|
|
list, err := m.WithContext(s.ctx).Where(m.ID.In(req.GetCampaignIds()...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.CampaignsRes{
|
|
List: make([]*pb.CampaignsRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
res.List = append(res.List, &pb.CampaignsRes_One{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// SetLvApi 设置动态用户等级动态api
|
|
func (s *WCampaign) SetLvApi(req *pb.SetLvApiReq, res *pb.SetLvApiRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
project, err := finder.Project(s.ctx, req.GetProjectHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if project == nil || project.IsDel == mtype.Yes {
|
|
err = workerr.NotFound("not found project")
|
|
return
|
|
}
|
|
|
|
conf, err := provider.NewFissionConfig(s.ctx, project)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = conf.SetLvUrl(req.GetUrlId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
*res = pb.SetLvApiRes{}
|
|
return
|
|
}
|
|
|
|
// GetLvApi 获取动态用户等级动态api
|
|
func (s *WCampaign) GetLvApi(req *pb.GetLvApiReq, res *pb.GetLvApiRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := finder.Project(s.ctx, req.GetProjectHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if project == nil || project.IsDel == mtype.Yes {
|
|
err = workerr.NotFound("not found project")
|
|
return
|
|
}
|
|
|
|
conf, err := provider.NewFissionConfig(s.ctx, project)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
url, err := conf.GetLvUrl()
|
|
if err != nil || url == nil {
|
|
return
|
|
}
|
|
|
|
*res = pb.GetLvApiRes{
|
|
UrlId: url.ID,
|
|
Title: url.Title,
|
|
}
|
|
return
|
|
}
|
|
|
|
// VsSettlement 赛事竞猜结算
|
|
func (s *WCampaign) VsSettlement(req *pb.VsSettlementReq, res *pb.VsSettlementRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
*res = pb.VsSettlementRes{}
|
|
container := new(containers.VsSettlement)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// VsSettlementInfo 赛事竞猜结算
|
|
func (s *WCampaign) VsSettlementInfo(req *pb.VsSettlementInfoReq, res *pb.VsSettlementInfoRes) (err error) {
|
|
defer s.checkErr()
|
|
m := s.GetDao().FissionCampaignVsSchedule
|
|
schedule, err := m.WithContext(s.ctx).Where(m.ID.Eq(req.GetScheduleId())).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if schedule == nil {
|
|
err = workerr.NotFound("not found schedule")
|
|
return
|
|
}
|
|
|
|
slt := schedule.GetSettlement()
|
|
|
|
var scoreMap = make(map[int64]string, len(slt.Scores))
|
|
for _, v := range slt.Scores {
|
|
scoreMap[v.TeamId] = v.Score
|
|
}
|
|
|
|
var vsTeamIds = schedule.GetVsTeamIds()
|
|
teamM := s.GetDao().FissionCampaignVsTeam
|
|
teams, err := teamM.WithContext(s.ctx).Where(teamM.ID.In(vsTeamIds...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var teamMap = make(map[int64]*pb.VsSettlementInfoRes_Team, len(teams))
|
|
for _, v := range teams {
|
|
teamMap[v.ID] = &pb.VsSettlementInfoRes_Team{
|
|
Id: v.ID,
|
|
Name: v.Name,
|
|
LogoImg: v.LogoImg,
|
|
Score: scoreMap[v.ID],
|
|
}
|
|
}
|
|
|
|
*res = pb.VsSettlementInfoRes{
|
|
WinType: slt.WinType,
|
|
WinTeamId: slt.WinTeamId,
|
|
Teams: make([]*pb.VsSettlementInfoRes_Team, 0, len(vsTeamIds)),
|
|
}
|
|
|
|
for _, id := range vsTeamIds {
|
|
if _, ok := teamMap[id]; ok {
|
|
res.Teams = append(res.Teams, teamMap[id])
|
|
} else {
|
|
res.Teams = append(res.Teams, &pb.VsSettlementInfoRes_Team{
|
|
Id: id,
|
|
Score: scoreMap[id],
|
|
})
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// ActionList 行为列表
|
|
func (s *WCampaign) ActionList(req *pb.ActionListReq, res *pb.ActionListRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
cpn, err := cache.NewCampaign(s.ctx).FindById(req.GetCampaignId())
|
|
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
|
|
}
|
|
|
|
temp, err := cache.NewFissionTemp(s.ctx).FindById(cpn.TemplateID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
group, err := cache.NewFissionTempGroup(s.ctx).FindById(temp.GroupID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
pfa := fissionaction.NewActionList(s.ctx, cpn, conf, group)
|
|
|
|
*res = pb.ActionListRes{
|
|
ActionTypes: pfa.GetFissionAction(),
|
|
}
|
|
|
|
return
|
|
}
|