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.
269 lines
8.2 KiB
Go
269 lines
8.2 KiB
Go
package fissionaction
|
|
|
|
import (
|
|
"context"
|
|
"joybuywork/internal/consts"
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/dao"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/utils"
|
|
"joybuywork/internal/utils/merr"
|
|
"joybuywork/internal/utils/verify"
|
|
)
|
|
|
|
// 这个是玩法共用的埋点事件,如果有其他玩法没有,调整一下
|
|
var commonAction = []int32{
|
|
mtype.FissionActionTypeView,
|
|
mtype.FissionActionTypeAppInstall, mtype.FissionActionTypeWebFirstOpen, mtype.FissionActionTypeAppRegister, mtype.FissionActionTypeAppOpen,
|
|
mtype.FissionActionTypeViewDownload, mtype.FissionActionTypeClickDownload,
|
|
}
|
|
|
|
// 排序在最后面的埋点
|
|
var weakAction = []int32{
|
|
mtype.FissionActionTypeReward, mtype.FissionActionTypeToUse,
|
|
mtype.FissionActionTypeClickRule, mtype.FissionActionTypeClickShareLink, mtype.FissionActionTypeViewWeb,
|
|
}
|
|
|
|
type ActionList struct {
|
|
ctx context.Context
|
|
be *merr.BusinessError
|
|
|
|
cpn *model.FissionCampaign
|
|
conf *model.FissionCampaignConfig
|
|
tempGroup *model.FissionTempGroup
|
|
}
|
|
|
|
func NewActionList(ctx context.Context, cpn *model.FissionCampaign, conf *model.FissionCampaignConfig, tempGroup *model.FissionTempGroup) *ActionList {
|
|
return &ActionList{
|
|
ctx: ctx,
|
|
be: merr.NewBE(ctx),
|
|
cpn: cpn,
|
|
conf: conf,
|
|
tempGroup: tempGroup,
|
|
}
|
|
}
|
|
|
|
// GetFissionAction 获取活动支持的埋点事件
|
|
func (s ActionList) GetFissionAction() (actions []int32) {
|
|
actions = append(actions, commonAction...)
|
|
|
|
if !s._notNeedClickShare() {
|
|
actions = append(actions, mtype.FissionActionTypeClickShare)
|
|
}
|
|
|
|
if !s._notNeedClickPlay() {
|
|
actions = append(actions, mtype.FissionActionTypeClickPlay)
|
|
}
|
|
|
|
if !s._notSupportCond() {
|
|
actions = append(actions, mtype.FissionActionTypeClickCond, mtype.FissionActionTypeFinishCond, mtype.FissionActionTypeClickMyTask)
|
|
}
|
|
|
|
if s._hasClickPlayWeb() {
|
|
actions = append(actions, mtype.FissionActionTypeClickPlayWeb)
|
|
}
|
|
|
|
if s.cpn.Target == mtype.FissionCampaignConfigTargetAdsGame {
|
|
actions = append(actions, mtype.FissionActionTypeWebToApp)
|
|
}
|
|
|
|
if s.conf.HasLongImg == mtype.Yes {
|
|
actions = append(actions, mtype.FissionActionTypeClickLongImg)
|
|
}
|
|
|
|
switch s.cpn.FissionID {
|
|
case consts.IdFlip:
|
|
actions = append(actions, mtype.FissionActionTypeClickMyReward, mtype.FissionActionTypeShowWindow, mtype.FissionActionTypeClickFlip)
|
|
case consts.IdPrizeWheel, consts.IdBlindBox, consts.IdSlotMachine, consts.IdLuckyGrid:
|
|
actions = append(actions, mtype.FissionActionTypeClickMyReward)
|
|
case consts.IdGrow, consts.IdKeep:
|
|
actions = append(actions, mtype.FissionActionTypeGrow, mtype.FissionActionTypeGrowOk)
|
|
case consts.IdQa, consts.IdQaAudio, consts.IdQaVideo:
|
|
actions = append(actions, mtype.FissionActionTypeAnswerQa, mtype.FissionActionTypeSubmitQa)
|
|
case consts.IdChop:
|
|
actions = append(actions, mtype.FissionActionTypeHelp)
|
|
|
|
if s._manyReward() {
|
|
actions = append(actions, mtype.FissionActionTypeSelectReward)
|
|
}
|
|
|
|
case consts.IdWinTogether:
|
|
actions = append(actions, mtype.FissionActionTypeNewcomer)
|
|
case consts.IdCoin:
|
|
actions = append(actions, mtype.FissionActionTypeUseCoin, mtype.FissionActionTypeGetCoin, mtype.FissionActionTypeClickCustomBtn)
|
|
case consts.IdSignIn:
|
|
actions = append(actions, mtype.FissionActionTypeSign)
|
|
if s._hasUseProp() {
|
|
actions = append(actions, mtype.FissionActionTypeUseProp)
|
|
}
|
|
case consts.IdVs:
|
|
actions = append(actions, mtype.FissionActionTypeVsVote)
|
|
default:
|
|
|
|
}
|
|
|
|
if s._hasManualTask() {
|
|
actions = append(actions, mtype.FissionActionTypeManualTask)
|
|
}
|
|
|
|
if s._unlockReward() {
|
|
actions = append(actions, mtype.FissionActionTypeUnlockReward)
|
|
}
|
|
|
|
actions = append(actions, weakAction...)
|
|
|
|
return
|
|
}
|
|
|
|
// GetFixDimension 获取活动固有维度
|
|
func (s ActionList) GetFixDimension() (dms []string) {
|
|
|
|
dms = []string{
|
|
DimensionDateKey,
|
|
DimensionPlatformKey,
|
|
DimensionLangKey,
|
|
DimensionChannelKey,
|
|
DimensionLevelMarkKey,
|
|
}
|
|
|
|
// 多语言时区
|
|
if len(s.cpn.GetLangTypes()) > 0 {
|
|
dms = append(dms, DimensionLangGmtKey)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// GetDimension 获取埋点事件专属维度
|
|
func (s ActionList) GetDimension(actionType int32) (dms []string) {
|
|
|
|
switch s.conf.RewardGroup {
|
|
case mtype.FissionRewardGroupCountry:
|
|
dms = append(dms, DimensionCountryKey)
|
|
}
|
|
|
|
switch actionType {
|
|
case mtype.FissionActionTypeClickDownload, mtype.FissionActionTypeViewDownload:
|
|
dms = append(dms, DimensionDownloadFromKey)
|
|
case mtype.FissionActionTypeClickShare:
|
|
dms = append(dms, DimensionMediaKey)
|
|
case mtype.FissionActionTypeClickCond:
|
|
dms = append(dms, DimensionCondKey)
|
|
|
|
if s._condHasForm() {
|
|
dms = append(dms, DimensionFromKey)
|
|
}
|
|
|
|
case mtype.FissionActionTypeFinishCond:
|
|
dms = append(dms, DimensionCondKey)
|
|
case mtype.FissionActionTypeToUse:
|
|
dms = append(dms, DimensionRewardKey, DimensionFromKey)
|
|
case mtype.FissionActionTypeReward:
|
|
dms = append(dms, DimensionRewardKey, DimensionRewardTypeKey)
|
|
case mtype.FissionActionTypeSelectReward:
|
|
dms = append(dms, DimensionRewardKey)
|
|
case mtype.FissionActionTypeClickPlay, mtype.FissionActionTypeShowWindow, mtype.FissionActionTypeHelp:
|
|
dms = append(dms, DimensionFromKey)
|
|
case mtype.FissionActionTypeClickLongImg:
|
|
dms = append(dms, DimensionImgUrlKey, DimensionZoneIdKey)
|
|
case mtype.FissionActionTypeGrow, mtype.FissionActionTypeGrowOk:
|
|
|
|
if s._growHasReward() {
|
|
dms = append(dms, DimensionRewardKey)
|
|
}
|
|
|
|
case mtype.FissionActionTypeAnswerQa:
|
|
dms = append(dms, DimensionQaIdKey, DimensionQaOptionIdKey)
|
|
case mtype.FissionActionTypeSubmitQa:
|
|
dms = append(dms, DimensionQaPointKey)
|
|
case mtype.FissionActionTypeClickFlip:
|
|
dms = append(dms, DimensionFromStatusKey)
|
|
case mtype.FissionActionTypeClickCustomBtn:
|
|
dms = append(dms, DimensionCustomBtnIdKey)
|
|
case mtype.FissionActionTypeManualTask:
|
|
dms = append(dms, DimensionTaskIdKey, DimensionRewardKey)
|
|
case mtype.FissionActionTypeClickShareLink:
|
|
dms = append(dms, DimensionParentIdKey)
|
|
case mtype.FissionActionTypeVsVote:
|
|
dms = append(dms, DimensionScheduleIdKey, DimensionWinTeamIdKey)
|
|
case mtype.FissionActionTypeUnlockReward:
|
|
dms = append(dms, DimensionRewardKey)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 任务埋点是否有来源维度
|
|
func (s ActionList) _condHasForm() bool {
|
|
return verify.InArray(s.cpn.FissionID, consts.IdFlip) ||
|
|
(s.cpn.FissionID == consts.IdLuckyGrid && s.tempGroup.Mark == "grid_palm")
|
|
}
|
|
|
|
func (s ActionList) _notSupportCond() bool {
|
|
if verify.InArray(s.cpn.FissionID, consts.IdChop, consts.IdCash) {
|
|
return true
|
|
}
|
|
|
|
ticket, _ := cache.NewCampaignTicket(s.ctx).FindByMark(s.cpn.ID, mtype.FissionCampaignTicketCustom)
|
|
|
|
return ticket == nil || ticket.Open == mtype.No
|
|
}
|
|
|
|
func (s ActionList) _unlockReward() bool {
|
|
m := dao.FissionCampaignReward
|
|
count, _ := m.WithContext(s.ctx).Where(m.CampaignID.Eq(s.cpn.ID), m.OpenTask.Eq(mtype.Yes), m.IsDel.Eq(mtype.No)).Count()
|
|
return count > 0
|
|
}
|
|
|
|
func (s ActionList) _hasManualTask() bool {
|
|
m := dao.FissionCampaignTask
|
|
count, _ := m.WithContext(s.ctx).Where(
|
|
m.CampaignID.Eq(s.cpn.ID),
|
|
m.AwardMode.Eq(mtype.FissionCampaignTaskAwardModeManual),
|
|
m.IsDel.Eq(mtype.No),
|
|
).Count()
|
|
|
|
return count > 0
|
|
}
|
|
|
|
func (s ActionList) _manyReward() bool {
|
|
m := dao.FissionCampaignReward
|
|
count, _ := m.WithContext(s.ctx).Where(m.CampaignID.Eq(s.cpn.ID), m.RewardType.Eq(mtype.FissionCampaignRewardTypeApp), m.IsDel.Eq(mtype.No)).Count()
|
|
return count > 1
|
|
}
|
|
|
|
func (s ActionList) _hasUseProp() bool {
|
|
switch s.cpn.FissionID {
|
|
case consts.IdSignIn:
|
|
conf, _ := cache.NewCampaignSign(s.ctx).FindByCampaignId(s.cpn.ID)
|
|
return conf.HasCard == mtype.Yes
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func (s ActionList) _growHasReward() bool {
|
|
return verify.InArray[int64](s.cpn.FissionID, consts.IdKeep)
|
|
}
|
|
|
|
func (s ActionList) _notNeedClickPlay() bool {
|
|
return verify.InArray[int64](s.cpn.FissionID,
|
|
consts.IdWinTogether,
|
|
consts.IdReferral,
|
|
consts.IdCash,
|
|
consts.IdKeep,
|
|
consts.IdSignIn,
|
|
consts.IdVs,
|
|
)
|
|
}
|
|
|
|
func (s ActionList) _notNeedClickShare() bool {
|
|
conf, _ := cache.NewCampaignConfig(s.ctx).FindByCampaignId(s.cpn.ID)
|
|
return utils.Ternary[bool](verify.InArray[int64](s.cpn.FissionID, consts.IdSignIn, consts.IdQa, consts.IdQaAudio, consts.IdQaVideo, consts.IdPrizeQuiz), conf.OpenShare == mtype.No, false)
|
|
}
|
|
|
|
func (s ActionList) _hasClickPlayWeb() bool {
|
|
return s.conf.HasWeb == mtype.Yes || s.cpn.Target == mtype.FissionCampaignConfigTargetAdsGame
|
|
}
|