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.
290 lines
7.0 KiB
Go
290 lines
7.0 KiB
Go
package campaignstat
|
|
|
|
import (
|
|
"joybuywork/internal/consts"
|
|
"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_stat"
|
|
"joybuywork/proto/go_proto/workerr"
|
|
)
|
|
|
|
type StatEvent struct {
|
|
logic.Logic
|
|
Req *pb.StatEventReq
|
|
Res *pb.StatEventRes
|
|
}
|
|
|
|
func (s *StatEvent) Run() error {
|
|
return logic.Run(s)
|
|
}
|
|
|
|
func (s *StatEvent) Exec() (err error) {
|
|
cpn, err := s.campaign()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if cpn.Target == mtype.FissionCampaignConfigTargetChild {
|
|
return s.childEvent(cpn)
|
|
}
|
|
|
|
return s.event(cpn)
|
|
}
|
|
|
|
// 活动数据
|
|
func (s *StatEvent) campaign() (cpn *model.FissionCampaign, err error) {
|
|
cpn, err = finder.Campaign(s.Ctx, s.Req.GetCampaignHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn == nil {
|
|
err = workerr.NotFound("not found cpn")
|
|
return
|
|
}
|
|
|
|
s.Res.CampaignId = cpn.ID
|
|
s.Res.TOffect = provider.NewCampaignTZ(s.Ctx, cpn, s.Req.GetLangMark()).GetTz()
|
|
|
|
return
|
|
}
|
|
|
|
func (s *StatEvent) event(cpn *model.FissionCampaign) (err error) {
|
|
|
|
switch cpn.FissionID {
|
|
case consts.IdGrow, consts.IdKeep:
|
|
return s._grow(cpn)
|
|
case consts.IdQa, consts.IdQaVideo, consts.IdQaAudio, consts.IdPrizeAnswer:
|
|
return s._qa(cpn)
|
|
case consts.IdWinTogether:
|
|
return s._win(cpn)
|
|
case consts.IdCoin:
|
|
return s._coin(cpn)
|
|
case consts.IdSignIn:
|
|
return s._sign(cpn)
|
|
case consts.IdBallot:
|
|
return s._ballot(cpn)
|
|
default:
|
|
return s._normal(cpn)
|
|
}
|
|
}
|
|
|
|
func (s *StatEvent) _normal(cpn *model.FissionCampaign) (err error) {
|
|
var eventIds = []int32{
|
|
mtype.FissionActionTypeView,
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignTicket
|
|
tickets, err := m.WithContext(s.Ctx).Where(
|
|
m.CampaignID.Eq(cpn.ID),
|
|
m.Mark.In(mtype.FissionCampaignTicketFixed, mtype.FissionCampaignTicketCustom, mtype.FissionCampaignTicketRewardHelp),
|
|
m.Open.Eq(mtype.Yes),
|
|
).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
// 保证一些顺序 顺序:固定事件->助力->自定义
|
|
var sortMap = make(map[string]*model.FissionCampaignTicket)
|
|
for _, ticket := range tickets {
|
|
sortMap[ticket.Mark] = ticket
|
|
}
|
|
|
|
var installEvent, registerEvent bool
|
|
|
|
// 固定
|
|
if ticket, ok := sortMap[mtype.FissionCampaignTicketFixed]; ok {
|
|
switch ticket.AppEvent {
|
|
case mtype.FissionCampaignTicketAppEventInstall:
|
|
eventIds = append(eventIds,
|
|
mtype.FissionActionTypeAppInstall,
|
|
mtype.FissionActionTypeWebFirstOpen,
|
|
mtype.FissionActionTypeClickDownload,
|
|
mtype.FissionActionTypeViewDownload,
|
|
)
|
|
installEvent = true
|
|
case mtype.FissionCampaignTicketAppEventRegister:
|
|
eventIds = append(eventIds, mtype.FissionActionTypeAppRegister)
|
|
registerEvent = true
|
|
}
|
|
}
|
|
|
|
// 助力
|
|
if ticket, ok := sortMap[mtype.FissionCampaignTicketRewardHelp]; ok {
|
|
for _, mark := range ticket.GetHelpEvent() {
|
|
|
|
s.Res.HelpEvent = append(s.Res.HelpEvent, mark)
|
|
|
|
if mark == mtype.FissionCampaignTicketHelpEventInstall && !installEvent {
|
|
eventIds = append(eventIds,
|
|
mtype.FissionActionTypeAppInstall,
|
|
mtype.FissionActionTypeWebFirstOpen,
|
|
mtype.FissionActionTypeClickDownload,
|
|
mtype.FissionActionTypeViewDownload,
|
|
)
|
|
installEvent = true
|
|
} else if mark == mtype.FissionCampaignTicketHelpEventRegister && !registerEvent {
|
|
eventIds = append(eventIds, mtype.FissionActionTypeAppRegister)
|
|
registerEvent = true
|
|
}
|
|
}
|
|
|
|
eventIds = append(eventIds, mtype.FissionActionTypeHelp)
|
|
}
|
|
|
|
// 自定义
|
|
if ticket, ok := sortMap[mtype.FissionCampaignTicketCustom]; ok {
|
|
|
|
switch ticket.PreEvent {
|
|
case mtype.FissionCampaignTicketPreEventRegister:
|
|
if !registerEvent {
|
|
eventIds = append(eventIds, mtype.FissionActionTypeAppRegister)
|
|
registerEvent = true
|
|
}
|
|
case mtype.FissionCampaignTicketPreEventInstall:
|
|
if !installEvent {
|
|
eventIds = append(eventIds,
|
|
mtype.FissionActionTypeAppInstall,
|
|
mtype.FissionActionTypeWebFirstOpen,
|
|
mtype.FissionActionTypeClickDownload,
|
|
mtype.FissionActionTypeViewDownload,
|
|
)
|
|
installEvent = true
|
|
}
|
|
}
|
|
|
|
eventIds = append(eventIds, mtype.FissionActionTypeFinishCond)
|
|
|
|
err = s._getTask(cpn.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
s.Res.EventIds = eventIds
|
|
return
|
|
}
|
|
|
|
func (s *StatEvent) _getTask(cpnId int64) (err error) {
|
|
condM := s.GetDao().FissionCampaignCond
|
|
var conds []*model.FissionCampaignCond
|
|
conds, err = condM.WithContext(s.Ctx).
|
|
Where(
|
|
condM.CampaignID.Eq(cpnId),
|
|
condM.RewardID.Eq(0),
|
|
condM.WithContext(s.Ctx).
|
|
Or(condM.IsDel.Eq(mtype.No)).
|
|
Or(condM.IsDel.Eq(mtype.Yes), condM.DelUse.Eq(mtype.Yes)),
|
|
).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
s.Res.Tasks = make([]*pb.StatEventRes_Task, 0, len(conds))
|
|
for _, cond := range conds {
|
|
s.Res.Tasks = append(s.Res.Tasks, &pb.StatEventRes_Task{
|
|
Id: cond.ID,
|
|
Title: cond.Desc,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *StatEvent) _grow(cpn *model.FissionCampaign) (err error) {
|
|
err = s._normal(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeGrow, mtype.FissionActionTypeGrowOk)
|
|
|
|
return
|
|
}
|
|
|
|
func (s *StatEvent) _qa(cpn *model.FissionCampaign) (err error) {
|
|
err = s._normal(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeSubmitQa)
|
|
|
|
return
|
|
}
|
|
|
|
func (s *StatEvent) _win(cpn *model.FissionCampaign) (err error) {
|
|
err = s._normal(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeNewcomer)
|
|
|
|
return
|
|
}
|
|
|
|
func (s *StatEvent) _coin(cpn *model.FissionCampaign) (err error) {
|
|
err = s._normal(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeUseCoin)
|
|
|
|
return
|
|
}
|
|
|
|
func (s *StatEvent) _sign(cpn *model.FissionCampaign) (err error) {
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeSign)
|
|
|
|
conf, err := cache.NewCampaignSign(s.Ctx).FindByCampaignId(cpn.ID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if conf == nil || conf.HasCard == mtype.No {
|
|
return
|
|
}
|
|
|
|
s.Res.EventIds = append(s.Res.EventIds,
|
|
mtype.FissionActionTypeAppInstall,
|
|
mtype.FissionActionTypeWebFirstOpen,
|
|
mtype.FissionActionTypeClickDownload,
|
|
mtype.FissionActionTypeViewDownload,
|
|
)
|
|
|
|
return
|
|
}
|
|
|
|
func (s *StatEvent) childEvent(cpn *model.FissionCampaign) (err error) {
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeChildShow)
|
|
|
|
switch cpn.ChildType {
|
|
case mtype.FissionCampaignChildTypeSign:
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeChildSign)
|
|
case mtype.FissionCampaignChildTypeInvite:
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeChildInvite)
|
|
case mtype.FissionCampaignChildTypeLucky, mtype.FissionCampaignChildTypeBlind:
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeChildLottery)
|
|
case mtype.FissionCampaignChildTypeTask:
|
|
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *StatEvent) _ballot(cpn *model.FissionCampaign) (err error) {
|
|
s.Res.EventIds = append(s.Res.EventIds, mtype.FissionActionTypeView)
|
|
|
|
return
|
|
}
|