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.
3511 lines
95 KiB
Go
3511 lines
95 KiB
Go
package campaign
|
|
|
|
import (
|
|
"joybuywork/internal/app"
|
|
"joybuywork/internal/consts"
|
|
"joybuywork/internal/plugins/hashid"
|
|
"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/repository/withdefault"
|
|
"joybuywork/internal/service/cmm"
|
|
"joybuywork/internal/service/provider"
|
|
"joybuywork/internal/service/provider/malls"
|
|
"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"
|
|
"strings"
|
|
"time"
|
|
|
|
dlinkpb "gits.branchcn.com/backend/deeplink/proto/go_proto/dlink"
|
|
linkpb "gits.branchcn.com/backend/shortlink/proto/go_proto/link"
|
|
)
|
|
|
|
type Store struct {
|
|
logic.Logic
|
|
Req *pb.StoreReq
|
|
Res *pb.StoreRes
|
|
|
|
project *model.Project
|
|
temp *model.FissionTemp
|
|
group *model.FissionTempGroup
|
|
|
|
appMark, webMark string
|
|
otherReward []*model.FissionCampaignReward
|
|
otherRelateIds []int64
|
|
otherRelateMap map[int64]struct{}
|
|
|
|
helpInstall, helpRegister, helpOpen, helpClick bool
|
|
|
|
langSourceMap map[string]int64
|
|
|
|
rewardAdd map[int64]*pb.StoreReq_OpenAdd
|
|
rewardTask map[int64]*pb.StoreReq_RewardTask
|
|
}
|
|
|
|
func (s *Store) Run() error {
|
|
return logic.Run(s)
|
|
}
|
|
|
|
func (s *Store) Exec() (err error) {
|
|
err = s.depend()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
cpn, err := s.create()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createConfig(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createDefault(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createFission(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createEvent(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createReward(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createRewardAdd(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createRewardTask(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createPush(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createChild(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.copyLangs(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.createLink(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.syncEvent(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.saveDelayLinkData(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建活动
|
|
func (s *Store) create() (cpn *model.FissionCampaign, err error) {
|
|
cpn = withdefault.FissionCampaign(&model.FissionCampaign{
|
|
FissionID: s.temp.FissionID,
|
|
ProjectID: s.project.ID,
|
|
CreatorID: s.Req.GetUserId(),
|
|
TemplateID: s.temp.ID,
|
|
Title: s.Req.GetTitle(),
|
|
StartTime: timez.GMT(s.Req.GetStartTime(), s.Req.GetTOffset()),
|
|
EndTime: timez.GMT(s.Req.GetEndTime(), s.Req.GetTOffset()),
|
|
CoverURL: s.Req.GetCoverUrl(),
|
|
TOffset: s.Req.GetTOffset(),
|
|
TStart: s.Req.GetStartTime(),
|
|
TEnd: s.Req.GetEndTime(),
|
|
Target: utils.Ternary[int8](
|
|
verify.InArray(s.temp.FissionID, consts.IdDice, consts.IdCash, consts.IdGrow),
|
|
int8(s.Req.GetTargetOption().GetTarget()),
|
|
int8(s.Req.GetTarget().GetTarget()),
|
|
),
|
|
ReportType: mtype.FissionCampaignReportTypeNew,
|
|
})
|
|
|
|
cpn.SetLangTypes([]int8{s.temp.LangType})
|
|
|
|
if s.Req.GetCoverUrl() == "" {
|
|
cpn.CoverURL = s.group.CoverURL
|
|
}
|
|
|
|
// 已经开始了活动
|
|
if cpn.StartTime <= time.Now().Unix() {
|
|
cpn.Status = utils.Ternary[int8](s.Req.GetConfig().GetHasWhite() == mtype.Yes, mtype.FissionCampaignStatusPubPre, mtype.FissionCampaignStatusPub)
|
|
if cpn.FissionID == consts.IdDice {
|
|
s.AddAfterRun(func() (err error) {
|
|
producer.NewCampaignNotice(s.Ctx).CampaignDiceMap(types.CampaignDiceMap{CampaignId: cpn.ID})
|
|
return
|
|
})
|
|
}
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaign
|
|
|
|
if err = m.WithContext(s.Ctx).Create(cpn); err != nil {
|
|
return nil, s.BE().MysqlError(err)
|
|
}
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
s.Res.Id = cpn.ID
|
|
s.Res.HashId = cpn.HashID
|
|
return
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
// 创建配置
|
|
func (s *Store) createConfig(cpn *model.FissionCampaign) (err error) {
|
|
// 一般配置
|
|
var reqConf = s.Req.GetConfig()
|
|
var target = s.Req.GetTarget()
|
|
|
|
conf := withdefault.FissionCampaignConfig(&model.FissionCampaignConfig{
|
|
CampaignID: cpn.ID,
|
|
RuleTextColor: reqConf.GetRuleTextColor(),
|
|
RuleBgColor: reqConf.GetRuleBgColor(),
|
|
ShareText: reqConf.GetShareText(),
|
|
ShareImg: reqConf.GetShareImg(),
|
|
HasRank: int8(reqConf.HasRank),
|
|
RankBackgroundColor: reqConf.GetRankBackgroundColor(),
|
|
RankTextColor: reqConf.GetRankTextColor(),
|
|
DownloadPageImage: reqConf.GetDownloadPageImage(),
|
|
IsDefaultDownload: int8(reqConf.GetIsDefaultDownload()),
|
|
WechatPageImage: reqConf.GetWechatPageImage(),
|
|
IsDefaultWechat: int8(reqConf.GetIsDefaultWechat()),
|
|
ImageMain: reqConf.GetImageMain(),
|
|
IsDefaultMain: int8(reqConf.GetIsDefaultMain()),
|
|
ImagePreview: reqConf.GetImagePreview(),
|
|
LinkBtnTextColor: reqConf.GetLinkBtnTextColor(),
|
|
LinkBtnBgColor: reqConf.GetLinkBtnBgColor(),
|
|
LinkTextColor: reqConf.GetLinkTextColor(),
|
|
ShowShare: int8(reqConf.GetShowShare()),
|
|
Share: "",
|
|
CampaignData: "",
|
|
PageTitle: reqConf.GetPageTitle(),
|
|
DmShow: int8(reqConf.GetDmShow()),
|
|
HasWeb: utils.Ternary[int8](len(s.Req.GetRewardsWeb()) > 0, mtype.Yes, mtype.No),
|
|
WebBgImg: reqConf.GetWebBgImg(),
|
|
HasWarmUp: int8(reqConf.GetHasWarmUp()),
|
|
WarmUpImg: reqConf.GetWarmUpImg(),
|
|
WarmUpEnd: reqConf.GetWarmUpEnd(),
|
|
Target: int8(target.GetTarget()),
|
|
Option: int8(target.GetOption()),
|
|
AppEvent: int8(target.GetAppEvent()),
|
|
BothType: int8(target.GetBothType()),
|
|
IconType: int8(reqConf.GetIconType()),
|
|
IconBgColor: reqConf.GetIconBgColor(),
|
|
DlType: int8(reqConf.GetDlType()),
|
|
DlBannerType: int8(reqConf.GetDlBannerType()),
|
|
DlBannerImg: reqConf.GetDlBannerImg(),
|
|
DlBannerAppLogo: reqConf.GetDlBannerAppLogo(),
|
|
DlBannerAppName: reqConf.GetDlBannerAppName(),
|
|
DlBannerAppBtn: reqConf.GetDlBannerAppBtn(),
|
|
DlBannerPosition: int8(reqConf.GetDlBannerPosition()),
|
|
TopicColor: reqConf.GetTopicColor(),
|
|
WindowCover: int8(reqConf.GetWindowCover()),
|
|
RewardGroup: 0,
|
|
SupportRewardMark: "",
|
|
DefaultRewardMark: "",
|
|
PlayRule: reqConf.GetPlayRule(),
|
|
IconOpen: "",
|
|
HasLongImg: utils.Ternary[int8](len(s.Req.GetLongImgs()) > 0, mtype.Yes, mtype.No),
|
|
HasWhite: int8(reqConf.GetHasWhite()),
|
|
WhiteList: reqConf.GetWhiteList(),
|
|
PcBg: reqConf.GetPcBg(),
|
|
AdsType: mtype.FissionCampaignConfigAdsTypeClose,
|
|
LinkTempID: reqConf.GetLinkTempId(),
|
|
RuleTimeOpen: int8(reqConf.GetRuleTimeOpen()),
|
|
OutsideTask: int8(reqConf.GetOutsideTask()),
|
|
OpenShare: utils.Ternary[int8](verify.InArray[int64](cpn.FissionID,
|
|
consts.IdSignIn, consts.IdQa, consts.IdQaAudio, consts.IdQaVideo, consts.IdPrizeQuiz, consts.IdPrizeAnswer), int8(reqConf.GetOpenShare()), 1),
|
|
ShowToUse: int8(reqConf.GetShowToUse()),
|
|
PointsUse: int8(s.Req.GetPointsUse().GetOpen()),
|
|
OpenChat: int8(s.Req.GetChat().GetOpen()),
|
|
RuleType: int8(reqConf.GetRuleType()),
|
|
RuleOutside: int8(reqConf.GetRuleOutside()),
|
|
DeviceOnce: int8(reqConf.GetDeviceOnce()),
|
|
})
|
|
|
|
ads, err := cache.NewProjectAd(s.Ctx).FindByProjectId(cpn.ProjectID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if ads != nil && ads.OpenAd == mtype.Yes {
|
|
conf.AdsType = int8(reqConf.GetAdsType())
|
|
}
|
|
|
|
// 设置奖品的配置
|
|
s._setRewardConfig(conf)
|
|
|
|
// 设置长图
|
|
err = s._setLongImg(conf)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// 设置样式
|
|
err = s._createStyle(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s._createPointsUse(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s._createChat(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if reqConf.GetShare() != nil {
|
|
conf.SetShare(reqConf.GetShare())
|
|
}
|
|
|
|
if reqConf.GetIconOpen() != nil {
|
|
conf.SetIconOpen(reqConf.GetIconOpen())
|
|
}
|
|
|
|
var kvs []*mtype.KV
|
|
for _, v := range s.Req.GetCampaignData() {
|
|
kvs = append(kvs, &mtype.KV{
|
|
Key: v.Key,
|
|
Value: v.Value,
|
|
})
|
|
}
|
|
|
|
conf.SetCampaignData(kvs)
|
|
|
|
//新活动配置
|
|
if consts.NewEventCpn(cpn.FissionID) {
|
|
conf.Target = int8(s.Req.GetTargetOption().GetTarget())
|
|
conf.AppEvent = int8(s.Req.GetTargetOption().GetFixed().GetAppEvent())
|
|
conf.BothType = int8(s.Req.GetTargetOption().GetCustom().GetBothType())
|
|
conf.Option = mtype.FissionCampaignConfigTargetOptionApp
|
|
if s.Req.GetTargetOption().GetCustom().GetOpen() == mtype.Yes {
|
|
conf.Option = utils.Ternary[int8](
|
|
!verify.InArray[int64](cpn.FissionID, consts.IdWinTogether, consts.IdReferral),
|
|
mtype.FissionCampaignConfigTargetOptionTask, mtype.FissionCampaignConfigTargetOptionFriend)
|
|
}
|
|
|
|
// 创建参与票获取规则
|
|
err = s._createTicket(cpn)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignConfig
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
//新活动配置完毕,不走下面老活动目标的逻辑
|
|
if consts.NewEventCpn(cpn.FissionID) {
|
|
return
|
|
}
|
|
|
|
// 创建目标条件
|
|
var targetCond = make([]*model.FissionCampaignCond, 0, len(target.GetCond()))
|
|
for _, cond := range target.GetCond() {
|
|
targetCond = append(targetCond, withdefault.FissionCampaignCond(&model.FissionCampaignCond{
|
|
CampaignID: cpn.ID,
|
|
ProjectID: cpn.ProjectID,
|
|
Event: cond.GetEvent(),
|
|
EventKey: cond.GetEventKey(),
|
|
EventVal: cond.GetEventVal(),
|
|
Desc: cond.GetDesc(),
|
|
IfCond: int8(cond.GetIfCond()),
|
|
TriggetType: int8(utils.NewGlobalTrigger(cpn.FissionID, cond.GetTriggerType())),
|
|
}))
|
|
}
|
|
|
|
if len(targetCond) > 0 {
|
|
condM := s.GetDao().FissionCampaignCond
|
|
|
|
err = condM.WithContext(s.Ctx).Create(targetCond...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createTicket(cpn *model.FissionCampaign) (err error) {
|
|
var target = s.Req.GetTargetOption()
|
|
|
|
var ticket []*model.FissionCampaignTicket
|
|
var tasks []*model.FissionCampaignTask
|
|
|
|
var fixed = target.GetFixed()
|
|
if fixed.GetOpen() == mtype.Yes {
|
|
ticket = append(ticket, withdefault.FissionCampaignTicket(&model.FissionCampaignTicket{
|
|
CampaignID: cpn.ID,
|
|
Mark: mtype.FissionCampaignTicketFixed,
|
|
Open: mtype.Yes,
|
|
AppEvent: int8(fixed.GetAppEvent()),
|
|
}))
|
|
|
|
one := withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: cpn.ID,
|
|
TaskType: 0,
|
|
TaskMark: "",
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
Num: utils.Ternary[int32](verify.InArray[int64](cpn.FissionID, consts.IdReferral, consts.IdWinTogether), 1, fixed.GetTargetNum()),
|
|
Chance: fixed.GetChance(),
|
|
ChanceLimit: fixed.GetChanceLimit(),
|
|
TaskLimit: 0,
|
|
Percent: fixed.GetPercent(),
|
|
})
|
|
|
|
switch fixed.GetAppEvent() {
|
|
case mtype.FissionCampaignTicketAppEventInstall:
|
|
one.TaskType = mtype.FissionCampaignTaskTypeInstall
|
|
one.TaskMark = mtype.FissionCampaignTaskMarkInstall
|
|
case mtype.FissionCampaignTicketAppEventRegister:
|
|
one.TaskType = mtype.FissionCampaignTaskTypeRegister
|
|
one.TaskMark = mtype.FissionCampaignTaskMarkRegister
|
|
}
|
|
|
|
tasks = append(tasks, one)
|
|
}
|
|
|
|
// 创建目标条件
|
|
var targetCond = make([]*model.FissionCampaignCond, 0, len(target.GetCustom().GetCond()))
|
|
var custom = target.GetCustom()
|
|
if custom.GetOpen() == mtype.Yes {
|
|
ticket = append(ticket, withdefault.FissionCampaignTicket(&model.FissionCampaignTicket{
|
|
CampaignID: cpn.ID,
|
|
Mark: mtype.FissionCampaignTicketCustom,
|
|
Open: mtype.Yes,
|
|
BothType: int8(custom.GetBothType()),
|
|
PreEvent: int8(custom.GetPreEvent()),
|
|
}))
|
|
|
|
for _, cond := range custom.GetCond() {
|
|
targetCond = append(targetCond, withdefault.FissionCampaignCond(&model.FissionCampaignCond{
|
|
CampaignID: cpn.ID,
|
|
ProjectID: cpn.ProjectID,
|
|
Event: cond.GetEvent(),
|
|
EventKey: cond.GetEventKey(),
|
|
EventVal: cond.GetEventVal(),
|
|
Desc: cond.GetDesc(),
|
|
IfCond: int8(cond.GetIfCond()),
|
|
Num: 0,
|
|
UserNum: 0,
|
|
Total: 0,
|
|
TriggetType: int8(cond.GetTriggerType()),
|
|
DelUse: 0,
|
|
EventType: int8(cond.GetEventType()),
|
|
ViewType: int8(cond.GetViewType()),
|
|
WatchSec: cond.GetWatchSec(),
|
|
OpenJump: int8(cond.GetOpenJump()),
|
|
WebURL: cond.GetWebUrl(),
|
|
ExtraParam: cond.GetExtraParam(),
|
|
PcParam: cond.GetPcParam(),
|
|
GoShow: int8(cond.GetGoShow()),
|
|
AdsStrategyID: cond.GetAdsStrategyId(),
|
|
IsSuper: int8(cond.GetIsSuper()),
|
|
Sort: cond.GetSort(),
|
|
OpenPush: int8(cond.GetOpenPush()),
|
|
GoText: cond.GetGoText(),
|
|
ClickEffectOpen: int8(cond.GetClickEffectOpen()),
|
|
ClickEffect: cond.GetClickEffect(),
|
|
ClickEffectUnit: cond.GetClickEffectUnit(),
|
|
PullInvite: int8(cond.GetPullInvite()),
|
|
}))
|
|
}
|
|
|
|
switch custom.GetBothType() {
|
|
case mtype.FissionCampaignTicketBothTypeAll:
|
|
var rewardId int64
|
|
var propMark = custom.GetBothAll().GetPropMark()
|
|
switch propMark {
|
|
case mtype.FissionCampaignTaskPropMarkReward:
|
|
rewardId = hashid.IdBigint()
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
ID: rewardId,
|
|
CampaignID: cpn.ID,
|
|
Stock: custom.GetBothAll().GetReward().GetStock(),
|
|
RewardType: mtype.FissionCampaignRewardTypeTask,
|
|
RewardNum: 1,
|
|
RewardID: custom.GetBothAll().GetReward().GetRewardId(),
|
|
PropMark: mtype.FissionCampaignRewardPropMarkReward,
|
|
})
|
|
case mtype.FissionCampaignTaskPropMarkPoint:
|
|
rewardId = hashid.IdBigint()
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
ID: rewardId,
|
|
CampaignID: cpn.ID,
|
|
RewardType: mtype.FissionCampaignRewardTypeTask,
|
|
RewardNum: custom.GetBothAll().GetChance(),
|
|
PropMark: mtype.FissionCampaignRewardPropMarkPoint,
|
|
ExpiredDay: custom.GetBothAll().GetExpiredDay(),
|
|
})
|
|
}
|
|
|
|
ll, _ := jsonm.ToSliceString(custom.GetBothAll().GetLevelIds())
|
|
lm, _ := jsonm.ToSliceString(custom.GetBothAll().GetLangMarks())
|
|
tasks = append(tasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: cpn.ID,
|
|
TaskType: mtype.FissionCampaignTaskTypeCondAll,
|
|
TaskMark: mtype.FissionCampaignTaskMarkCondAll,
|
|
PropMark: propMark,
|
|
Num: 1,
|
|
Chance: custom.GetBothAll().GetChance(),
|
|
ChanceLimit: 0,
|
|
TaskLimit: custom.GetBothAll().GetTaskLimit(),
|
|
DayLimit: custom.GetBothAll().GetDayLimit(),
|
|
LevelLimit: ll,
|
|
LangMarks: lm,
|
|
WeekLimit: custom.GetBothAll().GetWeekLimit(),
|
|
WeekNum: int8(custom.GetBothAll().GetWeekNum()),
|
|
RewardID: rewardId,
|
|
}))
|
|
case mtype.FissionCampaignTicketBothTypeOne:
|
|
for i, cond := range custom.GetCond() {
|
|
var rewardId int64
|
|
var propMark = cond.GetPropMark()
|
|
|
|
switch propMark {
|
|
case mtype.FissionCampaignTaskPropMarkReward:
|
|
rewardId = hashid.IdBigint()
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
ID: rewardId,
|
|
CampaignID: cpn.ID,
|
|
Stock: cond.GetReward().GetStock(),
|
|
RewardType: mtype.FissionCampaignRewardTypeTask,
|
|
RewardNum: 1,
|
|
RewardID: cond.GetReward().GetRewardId(),
|
|
PropMark: mtype.FissionCampaignRewardPropMarkReward,
|
|
})
|
|
case mtype.FissionCampaignTaskPropMarkPoint:
|
|
rewardId = hashid.IdBigint()
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
ID: rewardId,
|
|
CampaignID: cpn.ID,
|
|
RewardType: mtype.FissionCampaignRewardTypeTask,
|
|
RewardNum: cond.GetChance(),
|
|
PropMark: mtype.FissionCampaignRewardPropMarkPoint,
|
|
ExpiredDay: cond.GetExpiredDay(),
|
|
})
|
|
}
|
|
|
|
ll, _ := jsonm.ToSliceString(cond.GetLevelIds())
|
|
lm, _ := jsonm.ToSliceString(cond.GetLangMarks())
|
|
tasks = append(tasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: cpn.ID,
|
|
TaskType: mtype.FissionCampaignTaskTypeCondOne,
|
|
PropMark: propMark,
|
|
TaskMark: utils.FissionCampaignTaskMarkCondOneVal(targetCond[i].ID),
|
|
Num: 1,
|
|
Chance: cond.GetChance(),
|
|
ChanceLimit: 0,
|
|
TaskLimit: cond.GetTaskLimit(),
|
|
DayLimit: cond.GetDayLimit(),
|
|
LevelLimit: ll,
|
|
LangMarks: lm,
|
|
WeekLimit: cond.GetWeekLimit(),
|
|
WeekNum: int8(cond.GetWeekNum()),
|
|
HasPre: int8(cond.GetHasPre()),
|
|
PreCond: cond.GetPreCond(),
|
|
ExpiredMin: cond.GetExpiredMin(),
|
|
RewardID: rewardId,
|
|
AwardMode: int8(cond.GetAwardMode()),
|
|
}))
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(ticket) > 0 {
|
|
ticketM := s.GetDao().FissionCampaignTicket
|
|
err = ticketM.WithContext(s.Ctx).Create(ticket...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
}
|
|
|
|
if len(targetCond) > 0 {
|
|
condM := s.GetDao().FissionCampaignCond
|
|
err = condM.WithContext(s.Ctx).Create(targetCond...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
}
|
|
|
|
if len(tasks) > 0 {
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
err = taskM.WithContext(s.Ctx).Create(tasks...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 奖品配置
|
|
func (s *Store) _setRewardConfig(conf *model.FissionCampaignConfig) {
|
|
conf.RewardGroup = int8(s.Req.GetRewards().GetRewardGroup())
|
|
|
|
switch conf.RewardGroup {
|
|
case mtype.FissionRewardGroupLang:
|
|
var lang = finder.Lang{
|
|
Default: mtype.FissionLangTypeToMark[s.temp.LangType],
|
|
Support: make([]string, 0, len(s.Req.GetRewards().GetLangs())),
|
|
}
|
|
|
|
for _, v := range s.Req.GetRewards().GetLangs() {
|
|
lang.Support = append(lang.Support, v.GetLangMark())
|
|
}
|
|
|
|
conf.DefaultRewardMark, conf.SupportRewardMark = lang.DST()
|
|
case mtype.FissionRewardGroupUserLevel:
|
|
var level = finder.Level{
|
|
Default: s.Req.GetRewards().GetUserLevel().GetDefaultLevelId(),
|
|
Support: make([]int64, 0, len(s.Req.GetRewards().GetUserLevel().GetLevelList())),
|
|
}
|
|
|
|
for _, v := range s.Req.GetRewards().GetUserLevel().GetLevelList() {
|
|
level.Support = append(level.Support, v.GetLevelId())
|
|
}
|
|
|
|
conf.DefaultRewardMark, conf.SupportRewardMark = level.DST()
|
|
|
|
case mtype.FissionRewardGroupLangAndUserLevel:
|
|
var langLevel = finder.LangLevel{
|
|
Default: make([]finder.DefaultLangLevel, 0, len(s.Req.GetRewards().GetLangUserLevel())),
|
|
Support: make([]finder.SupportLangLevel, 0, len(s.Req.GetRewards().GetLangUserLevel())),
|
|
}
|
|
|
|
for _, v := range s.Req.GetRewards().GetLangUserLevel() {
|
|
langLevel.Default = append(langLevel.Default, finder.DefaultLangLevel{
|
|
Lang: v.GetLangMark(),
|
|
Level: v.GetDefaultLevelId(),
|
|
})
|
|
|
|
one := finder.SupportLangLevel{
|
|
Lang: v.GetLangMark(),
|
|
Level: make([]int64, 0, len(v.GetLevelList())),
|
|
}
|
|
for _, level := range v.GetLevelList() {
|
|
one.Level = append(one.Level, level.GetLevelId())
|
|
}
|
|
|
|
langLevel.Support = append(langLevel.Support, one)
|
|
}
|
|
conf.DefaultRewardMark, conf.SupportRewardMark = langLevel.DST()
|
|
case mtype.FissionRewardGroupCountry:
|
|
var country = finder.Country{
|
|
Default: s.Req.GetRewards().GetCountry().GetDefaultCountryMark(),
|
|
Support: make([]string, 0, len(s.Req.GetRewards().GetCountry().GetCountryList())),
|
|
}
|
|
|
|
for _, v := range s.Req.GetRewards().GetCountry().GetCountryList() {
|
|
country.Support = append(country.Support, v.GetCountryMark())
|
|
}
|
|
|
|
conf.DefaultRewardMark, conf.SupportRewardMark = country.DST()
|
|
default:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 创建默认数据
|
|
func (s *Store) createDefault(cpn *model.FissionCampaign) (err error) {
|
|
m := s.GetDao().FissionCampaignChannel
|
|
|
|
// 默认站内渠道
|
|
var mark = utils.GetRandEnStr(consts.ChannelMarkLen)
|
|
var chs = []*model.FissionCampaignChannel{
|
|
withdefault.FissionCampaignChannel(&model.FissionCampaignChannel{
|
|
CampaignID: cpn.ID,
|
|
IsDefault: mtype.Yes,
|
|
Mark: mark,
|
|
Title: consts.ChannelDefaultName,
|
|
CType: mtype.FissionCampaignChannelTypeApp,
|
|
}),
|
|
}
|
|
|
|
s.appMark = mark
|
|
|
|
// 创建默认站外渠道
|
|
if s.project.Scene == mtype.ProjectSceneApp {
|
|
var webMark string
|
|
var idx int
|
|
for {
|
|
webMark = utils.GetRandEnStr(consts.ChannelMarkLen)
|
|
if strings.ToLower(webMark) != strings.ToLower(mark) {
|
|
break
|
|
}
|
|
|
|
if idx > 99 {
|
|
return workerr.BusyError
|
|
}
|
|
|
|
idx++
|
|
}
|
|
|
|
s.webMark = webMark
|
|
|
|
chs = append(chs, withdefault.FissionCampaignChannel(&model.FissionCampaignChannel{
|
|
CampaignID: cpn.ID,
|
|
IsDefault: mtype.Yes,
|
|
Mark: webMark,
|
|
Title: consts.ChannelWebDefaultName,
|
|
CType: mtype.FissionCampaignChannelTypeWeb,
|
|
}))
|
|
}
|
|
|
|
err = m.WithContext(s.Ctx).Create(chs...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
// 渠道短链
|
|
for _, v := range chs {
|
|
if v.CType == mtype.FissionCampaignChannelTypeWeb {
|
|
var link = blink.NewCampaignLink(s.project.Domain, cpn.HashID, v.Mark).CampaignWebLink()
|
|
res, e := app.NewShortLinkNameLink().CreateShortLink(s.Ctx, &linkpb.CreateShortLinkReq{
|
|
LongLink: link,
|
|
Domain: s.project.Domain,
|
|
})
|
|
if e == nil {
|
|
m.WithContext(s.Ctx).Where(m.ID.Eq(v.ID)).UpdateSimple(m.ShortLink.Value(res.GetShortLink()))
|
|
}
|
|
}
|
|
}
|
|
|
|
archiveEnd := utils.CampaignArchiveEnd(cpn.EndTime)
|
|
|
|
// 统计任务
|
|
var atMarks = []string{mtype.FissionArchiveTaskMarkCampaignHour, mtype.FissionArchiveTaskMarkCampaignDay}
|
|
if s.Req.GetTargetOption().GetCustom().GetOpen() == mtype.Yes ||
|
|
verify.InArray(s.Req.GetTarget().GetOption(), mtype.FissionCampaignConfigTargetOptionUse, mtype.FissionCampaignConfigTargetOptionFriend,
|
|
mtype.FissionCampaignConfigTargetOptionSelf, mtype.FissionCampaignConfigTargetOptionTask) {
|
|
atMarks = append(atMarks, mtype.FissionArchiveTaskMarkCondDay, mtype.FissionArchiveTaskMarkCondHour)
|
|
}
|
|
|
|
var archiveTasks = make([]*model.FissionArchiveTask, 0, len(atMarks))
|
|
for _, v := range atMarks {
|
|
archiveTasks = append(archiveTasks, withdefault.FissionArchiveTask(&model.FissionArchiveTask{
|
|
CampaignID: cpn.ID,
|
|
EndTime: archiveEnd.Unix(),
|
|
Mark: v,
|
|
}))
|
|
}
|
|
|
|
atm := s.GetDao().FissionArchiveTask
|
|
err = atm.WithContext(s.Ctx).Create(archiveTasks...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
err = cmm.NewCMM(s.Ctx, s.GetDao()).AnalyzeCampaign(cpn.ProjectID, cpn.ID, cpn.StartTime, cpn.EndTime, 0)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建访问链接
|
|
func (s *Store) createLink(cpn *model.FissionCampaign) (err error) {
|
|
res, err := app.NewDeepLinkLink().CreateCampaignLinkOne(s.Ctx, &dlinkpb.CreateCampaignLinkOneReq{
|
|
ProjectId: s.project.ID,
|
|
CampaignId: cpn.ID,
|
|
CreatedTime: cpn.CreatedAt,
|
|
TemplateKey: s.Req.GetConfig().GetLinkTempId(),
|
|
})
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
codeInfo, err := app.NewDeepLinkLink().CreateCampaignLinkCode(s.Ctx, &dlinkpb.CreateCampaignLinkCodeReq{
|
|
ProjectId: cpn.ProjectID,
|
|
LinkId: res.GetId(),
|
|
Channel: s.webMark,
|
|
RedirectUrl: blink.NewCampaignLink(s.project.Domain, cpn.HashID, s.appMark, blink.SetCwMark(s.webMark)).CampaignCodeLink(),
|
|
})
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignChannel
|
|
_, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.Mark.Eq(s.webMark)).UpdateSimple(m.Code.Value(codeInfo.GetCode()))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建玩法特有数据
|
|
func (s *Store) createFission(cpn *model.FissionCampaign) (err error) {
|
|
switch cpn.FissionID {
|
|
case consts.IdPrizeWheel: //大转盘
|
|
return s._createPrizeWheel(cpn)
|
|
case consts.IdSlotMachine: //老虎机
|
|
return s._createSlotMachine(cpn)
|
|
case consts.IdLuckyGrid: //九宫格
|
|
return s._createLuckyGrid(cpn)
|
|
case consts.IdBlindBox: //盲盒
|
|
return s._createBlindBox(cpn)
|
|
case consts.IdReferral: //老带新
|
|
return s._createReferral(cpn)
|
|
case consts.IdPrizeAnswer, consts.IdQa, consts.IdQaAudio, consts.IdQaVideo: //趣味问答
|
|
return s._createPrizeAnswer(cpn)
|
|
case consts.IdPrizeQuiz: //有奖竞猜
|
|
return s._createPrizeQuiz(cpn)
|
|
case consts.IdWinTogether: //一起赢奖励
|
|
return s._createWinTogether(cpn)
|
|
case consts.IdSignIn: //签到
|
|
return s._createSignIn(cpn)
|
|
case consts.IdDice: //大富翁
|
|
return s._createDice(cpn)
|
|
case consts.IdGrow: //农场¬
|
|
return s._createGrow(cpn)
|
|
case consts.IdBallot: //抽签
|
|
return s._createBallot(cpn)
|
|
case consts.IdChop: //砍一刀
|
|
return s._createChop(cpn)
|
|
case consts.IdCash: //现金抽奖
|
|
return s._createCash(cpn)
|
|
case consts.IdFlip: //翻牌活动
|
|
return s._createFlip(cpn)
|
|
case consts.IdKeep: //激励养成
|
|
return s._createKeep(cpn)
|
|
case consts.IdGold: //金币任务
|
|
return s._createGold(cpn)
|
|
case consts.IdCoin: //金币池
|
|
return s._createCoin(cpn)
|
|
case consts.IdVs:
|
|
return s._createVs(cpn)
|
|
case consts.IdUno:
|
|
return s._createUno(cpn)
|
|
case consts.IdGashapon: //扭蛋机
|
|
return s._createGashapon(cpn)
|
|
default:
|
|
|
|
}
|
|
return
|
|
}
|
|
|
|
// 创建大转盘
|
|
func (s *Store) _createPrizeWheel(cpn *model.FissionCampaign) (err error) {
|
|
|
|
wheel := s.Req.GetPrizeWheel()
|
|
|
|
if wheel == nil {
|
|
return s.BE().VerifyError("please set prize_wheel")
|
|
}
|
|
|
|
prizeWheel := withdefault.FissionCampaignWheel(&model.FissionCampaignWheel{
|
|
CampaignID: cpn.ID,
|
|
TargetNum: wheel.GetTargetNum(),
|
|
InitChance: wheel.GetInitChance(),
|
|
Chance: wheel.GetChance(),
|
|
DayChance: wheel.GetDayChance(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignWheel
|
|
|
|
if err = m.WithContext(s.Ctx).Create(prizeWheel); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建老虎机
|
|
func (s *Store) _createSlotMachine(cpn *model.FissionCampaign) (err error) {
|
|
slot := s.Req.GetSlot()
|
|
|
|
if slot == nil {
|
|
return s.BE().VerifyError("please set slot")
|
|
}
|
|
|
|
fcs := withdefault.FissionCampaignSlot(&model.FissionCampaignSlot{
|
|
CampaignID: cpn.ID,
|
|
TargetNum: slot.GetTargetNum(),
|
|
InitChance: slot.GetInitChance(),
|
|
Chance: slot.GetChance(),
|
|
DayChance: slot.GetDayChance(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignSlot
|
|
|
|
if err = m.WithContext(s.Ctx).Create(fcs); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建九宫格
|
|
func (s *Store) _createLuckyGrid(cpn *model.FissionCampaign) (err error) {
|
|
grid := s.Req.GetGrid()
|
|
|
|
if grid == nil {
|
|
return s.BE().VerifyError("please set grid")
|
|
}
|
|
|
|
fcg := withdefault.FissionCampaignGrid(&model.FissionCampaignGrid{
|
|
CampaignID: cpn.ID,
|
|
TargetNum: grid.GetTargetNum(),
|
|
InitChance: grid.GetInitChance(),
|
|
Chance: grid.GetChance(),
|
|
DayChance: grid.GetDayChance(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignGrid
|
|
|
|
if err = m.WithContext(s.Ctx).Create(fcg); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建盲盒
|
|
func (s *Store) _createBlindBox(cpn *model.FissionCampaign) (err error) {
|
|
blind := s.Req.GetBlind()
|
|
|
|
if blind == nil {
|
|
return s.BE().VerifyError("please set blind")
|
|
}
|
|
|
|
fcb := withdefault.FissionCampaignBlind(&model.FissionCampaignBlind{
|
|
CampaignID: cpn.ID,
|
|
TargetNum: blind.GetTargetNum(),
|
|
InitChance: blind.GetInitChance(),
|
|
Chance: blind.GetChance(),
|
|
DayChance: blind.GetDayChance(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignBlind
|
|
|
|
if err = m.WithContext(s.Ctx).Create(fcb); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建趣味问答
|
|
func (s *Store) _createPrizeAnswer(cpn *model.FissionCampaign) (err error) {
|
|
qac := s.Req.GetQuestionAnswer()
|
|
|
|
if qac == nil {
|
|
return s.BE().VerifyError("please set question_answer")
|
|
}
|
|
|
|
qa := withdefault.FissionCampaignQa(&model.FissionCampaignQa{
|
|
CampaignID: cpn.ID,
|
|
TargetNum: qac.GetTargetNum(),
|
|
InitChance: qac.GetInitChance(),
|
|
Chance: qac.GetChance(),
|
|
QuestionAskTime: qac.GetQuestionAskTime(),
|
|
QaNum: qac.GetQaNum(),
|
|
DayChance: qac.GetDayChance(),
|
|
OpenGuide: int8(qac.GetOpenGuide()),
|
|
})
|
|
|
|
if qac.GetGroupHashId() != "" {
|
|
var group *model.LibraryQaGroup
|
|
groupM := s.GetDao().LibraryQaGroup
|
|
group, err = groupM.WithContext(s.Ctx).Where(groupM.HashID.Eq(qac.GetGroupHashId()), groupM.DelTime.Eq(0)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if group == nil {
|
|
return s.BE().VerifyError("qa group params error")
|
|
}
|
|
qa.QaGroupID = group.ID
|
|
}
|
|
|
|
if qac.GetGuideGroupHashId() != "" {
|
|
var group *model.LibraryQaGroup
|
|
groupM := s.GetDao().LibraryQaGroup
|
|
group, err = groupM.WithContext(s.Ctx).Where(groupM.HashID.Eq(qac.GetGuideGroupHashId()), groupM.DelTime.Eq(0)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if group == nil {
|
|
return s.BE().VerifyError("qa group params error")
|
|
}
|
|
qa.GuideGroupID = group.ID
|
|
}
|
|
|
|
//创建数据
|
|
m := s.GetDao().FissionCampaignQa
|
|
if err = m.WithContext(s.Ctx).Create(qa); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
//设置问题
|
|
var qs = make([]*model.FissionCampaignQaQuestion, 0, len(qac.GetQuestions()))
|
|
var ops = make([]*model.FissionCampaignQaOption, 0)
|
|
for i, v := range qac.GetQuestions() {
|
|
qsOne := withdefault.FissionCampaignQaQuestion(&model.FissionCampaignQaQuestion{
|
|
CampaignID: cpn.ID,
|
|
QaID: qa.ID,
|
|
Title: v.GetTitle(),
|
|
Score: v.GetScore(),
|
|
Sort: int32(i),
|
|
})
|
|
|
|
for _, v1 := range v.GetOptions() {
|
|
ops = append(ops, withdefault.FissionCampaignQaOption(&model.FissionCampaignQaOption{
|
|
QuestionID: qsOne.ID,
|
|
Title: v1.GetTitle(),
|
|
IsRight: int8(v1.GetIsRight()),
|
|
}))
|
|
}
|
|
|
|
qs = append(qs, qsOne)
|
|
}
|
|
|
|
if len(qs) > 0 {
|
|
cqqM := s.GetDao().FissionCampaignQaQuestion
|
|
if err = cqqM.WithContext(s.Ctx).Create(qs...); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
}
|
|
|
|
if len(ops) > 0 {
|
|
cqoM := s.GetDao().FissionCampaignQaOption
|
|
if err = cqoM.WithContext(s.Ctx).Create(ops...); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建赛事竞猜
|
|
func (s *Store) _createPrizeQuiz(cpn *model.FissionCampaign) (err error) {
|
|
quiz := s.Req.GetQuiz()
|
|
|
|
if quiz == nil {
|
|
return s.BE().VerifyError("please set quiz")
|
|
}
|
|
|
|
fcq := withdefault.FissionCampaignQuiz(&model.FissionCampaignQuiz{
|
|
CampaignID: cpn.ID,
|
|
TargetNum: quiz.GetTargetNum(),
|
|
InitChance: quiz.GetInitChance(),
|
|
Chance: quiz.GetChance(),
|
|
RewardRule: int8(quiz.GetRewardRule()),
|
|
OpenPrize: timez.GMT(quiz.GetOpenPrize(), s.Req.GetTOffset()),
|
|
OpenType: mtype.FissionCampaignQuizOpenTypeWait,
|
|
Title: quiz.GetTitle(),
|
|
TOpen: quiz.GetOpenPrize(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignQuiz
|
|
|
|
if err = m.WithContext(s.Ctx).Create(fcq); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
var options = make([]*model.FissionCampaignQuizOption, 0, len(quiz.GetOptions()))
|
|
for _, v := range quiz.GetOptions() {
|
|
options = append(options, withdefault.FissionCampaignQuizOption(&model.FissionCampaignQuizOption{
|
|
CampaignID: cpn.ID,
|
|
Title: v.GetTitle(),
|
|
ImgURL: v.GetImgUrl(),
|
|
IsRight: int8(v.GetIsRight()),
|
|
}))
|
|
}
|
|
|
|
optionM := s.GetDao().FissionCampaignQuizOption
|
|
|
|
if err = optionM.WithContext(s.Ctx).Create(options...); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建老带新
|
|
func (s *Store) _createReferral(cpn *model.FissionCampaign) (err error) {
|
|
rfl := s.Req.GetReferral()
|
|
|
|
if rfl == nil {
|
|
return s.BE().VerifyError("please set referral")
|
|
}
|
|
|
|
referral := withdefault.FissionCampaignReferral(&model.FissionCampaignReferral{
|
|
CampaignID: cpn.ID,
|
|
RewardLimit: rfl.GetRewardLimit(),
|
|
RewardRule: int8(rfl.GetRewardRule()),
|
|
InviteLimit: rfl.GetInviteLimit(),
|
|
StepLoop: int8(rfl.GetStepLoop()),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignReferral
|
|
|
|
if err = m.WithContext(s.Ctx).Create(referral); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建一起赢你奖励
|
|
func (s *Store) _createWinTogether(cpn *model.FissionCampaign) (err error) {
|
|
win := s.Req.GetWin()
|
|
|
|
if win == nil {
|
|
return s.BE().VerifyError("please set win")
|
|
}
|
|
|
|
fcw := withdefault.FissionCampaignWin(&model.FissionCampaignWin{
|
|
CampaignID: cpn.ID,
|
|
RewardLimit: win.GetRewardLimit(),
|
|
RewardRule: int8(win.GetRewardRule()),
|
|
InviteLimit: win.GetInviteLimit(),
|
|
NewcomerCond: int8(win.GetNewcomerCond()),
|
|
StepLoop: int8(win.GetStepLoop()),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignWin
|
|
|
|
if err = m.WithContext(s.Ctx).Create(fcw); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 同步事件推送
|
|
func (s *Store) syncEvent(cpn *model.FissionCampaign) (err error) {
|
|
err = cmm.NewCMM(s.Ctx, s.GetDao()).SaveEventCampaignTrigger(cpn.ProjectID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建签到玩法配置
|
|
func (s *Store) _createSignIn(cpn *model.FissionCampaign) (err error) {
|
|
sign := s.Req.GetSign()
|
|
|
|
if sign == nil {
|
|
return s.BE().VerifyError("please set sign")
|
|
}
|
|
|
|
fcs := withdefault.FissionCampaignSign(&model.FissionCampaignSign{
|
|
CampaignID: cpn.ID,
|
|
SignType: int8(sign.GetSignType()),
|
|
IsContinue: int8(sign.GetIsContinue()),
|
|
HasCard: int8(sign.GetHasCard()),
|
|
InviteNum: sign.GetInviteNum(),
|
|
IsLoop: int8(sign.GetIsLoop()),
|
|
SignCycle: sign.GetSignCycle(),
|
|
RecycleType: int8(sign.GetRecycleType()),
|
|
Color: sign.GetColor(),
|
|
})
|
|
|
|
if sign.GetSignType() == mtype.FissionCampaignSignTypeStep {
|
|
fcs.IsContinue = mtype.Yes
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignSign
|
|
if err = m.WithContext(s.Ctx).Create(fcs); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if fcs.HasCard == mtype.No {
|
|
return
|
|
}
|
|
|
|
task := withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: cpn.ID,
|
|
TaskType: mtype.FissionCampaignTaskTypeInstall,
|
|
TaskMark: mtype.FissionCampaignTaskMarkInstall,
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
Num: fcs.InviteNum,
|
|
Chance: 1,
|
|
})
|
|
|
|
err = s.GetDao().FissionCampaignTask.WithContext(s.Ctx).Create(task)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createDice(cpn *model.FissionCampaign) (err error) {
|
|
dice := s.Req.GetDice()
|
|
|
|
if dice == nil {
|
|
return s.BE().VerifyError("please set dice")
|
|
}
|
|
|
|
fcd := withdefault.FissionCampaignDice(&model.FissionCampaignDice{
|
|
CampaignID: cpn.ID,
|
|
InitChance: dice.GetInitChance(),
|
|
DayChance: dice.GetDayChance(),
|
|
FixDice: int8(dice.GetFixDice()),
|
|
FixDiceTarget: dice.GetFixDiceTarget(),
|
|
FixDiceLimit: dice.GetFixDiceLimit(),
|
|
FixDiceCond: int8(dice.GetFixDiceCond()),
|
|
CustomDice: dice.GetCustomDice(),
|
|
OpenMapPoint: int8(dice.GetOpenMapPoint()),
|
|
MapPoint: "",
|
|
AwardType: int8(dice.GetAwardType()),
|
|
Odds: dice.GetOdds(),
|
|
OpenInvite: int8(dice.GetOpenInvite()),
|
|
RollAgain: int8(dice.GetRollAgain()),
|
|
PlayImg: dice.GetPlayImg(),
|
|
CloudImg: dice.GetCloudImg(),
|
|
})
|
|
|
|
fcd.SetMapPoint(&mtype.MapPoint{
|
|
Blank: dice.GetMapPoint().GetBlank(),
|
|
Again: dice.GetMapPoint().GetAgain(),
|
|
Normal: dice.GetMapPoint().GetNormal(),
|
|
Supper: dice.GetMapPoint().GetSupper(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignDice
|
|
|
|
if err = m.WithContext(s.Ctx).Create(fcd); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if fcd.FixDice != mtype.Yes {
|
|
return
|
|
}
|
|
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
|
|
err = taskM.WithContext(s.Ctx).Create(withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: cpn.ID,
|
|
TaskType: utils.Ternary[int8](fcd.FixDiceCond == mtype.FissionCampaignDiceFixDiceCondInstall, mtype.FissionCampaignTaskTypeInstall, mtype.FissionCampaignTaskTypeRegister),
|
|
TaskMark: utils.Ternary[string](fcd.FixDiceCond == mtype.FissionCampaignDiceFixDiceCondInstall, mtype.FissionCampaignTaskMarkInstall, mtype.FissionCampaignTaskMarkRegister),
|
|
PropMark: mtype.FissionCampaignTaskPropMarkFixedRoll,
|
|
Num: dice.GetFixDiceTarget(),
|
|
Chance: 1,
|
|
ChanceLimit: dice.GetFixDiceLimit(),
|
|
TaskLimit: 0,
|
|
}))
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createGrow(cpn *model.FissionCampaign) (err error) {
|
|
grow := s.Req.GetGrow()
|
|
|
|
if grow == nil {
|
|
return s.BE().VerifyError("please set grow")
|
|
}
|
|
|
|
conf := withdefault.FissionCampaignGrow(&model.FissionCampaignGrow{
|
|
CampaignID: cpn.ID,
|
|
AutoHour: grow.GetAutoHour(),
|
|
AutoNum: grow.GetAutoNum(),
|
|
GrowNum: grow.GetGrowNum(),
|
|
TargetNum: grow.GetTargetNum(),
|
|
Revive: int8(grow.GetRevive()),
|
|
ReviveNum: grow.GetReviveNum(),
|
|
DieHour: grow.GetDieHour(),
|
|
InitNum: grow.GetInitNum(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignGrow
|
|
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
var steps = make([]*model.FissionCampaignGrowStep, 0, len(grow.GetSteps()))
|
|
for i, step := range grow.GetSteps() {
|
|
steps = append(steps, withdefault.FissionCampaignGrowStep(&model.FissionCampaignGrowStep{
|
|
CampaignID: cpn.ID,
|
|
Step: int32(i + 1),
|
|
Num: step.Num,
|
|
}))
|
|
}
|
|
|
|
stepM := s.GetDao().FissionCampaignGrowStep
|
|
if err = stepM.WithContext(s.Ctx).Create(steps...); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
//复活任务
|
|
err = s._createGrowReviveTask(cpn)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createGrowReviveTask(cpn *model.FissionCampaign) (err error) {
|
|
grow := s.Req.GetGrow()
|
|
|
|
if grow.GetRevive() == mtype.Yes {
|
|
task := withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: cpn.ID,
|
|
TaskType: mtype.FissionCampaignTaskTypeInstall,
|
|
TaskMark: mtype.FissionCampaignTaskMarkInstall,
|
|
PropMark: mtype.FissionCampaignTaskPropMarkRevive,
|
|
Num: grow.GetReviveNum(),
|
|
Chance: 1,
|
|
})
|
|
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
err = taskM.WithContext(s.Ctx).Create(task)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
}
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createBallot(cpn *model.FissionCampaign) (err error) {
|
|
ballot := s.Req.GetBallot()
|
|
|
|
if ballot == nil {
|
|
return s.BE().VerifyError("please set ballot")
|
|
}
|
|
|
|
conf := withdefault.FissionCampaignBallot(&model.FissionCampaignBallot{
|
|
CampaignID: cpn.ID,
|
|
InitChance: ballot.GetInitChance(),
|
|
DayChance: ballot.GetDayChance(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignBallot
|
|
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createChop(cpn *model.FissionCampaign) (err error) {
|
|
chop := s.Req.GetChop()
|
|
|
|
if chop == nil {
|
|
return s.BE().VerifyError("please set chop")
|
|
}
|
|
|
|
conf := withdefault.FissionCampaignChop(&model.FissionCampaignChop{
|
|
CampaignID: cpn.ID,
|
|
ShowBar: int8(chop.GetShowBar()),
|
|
HelpRule: mtype.FissionCampaignChopHelpRuleUniqUser,
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignChop
|
|
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 设置延迟深度链接数据
|
|
func (s *Store) saveDelayLinkData(cpn *model.FissionCampaign) (err error) {
|
|
var data = &dlinkpb.SaveCampaignDataListReq{
|
|
ProjectId: cpn.ProjectID,
|
|
CampaignId: cpn.ID,
|
|
Data: make([]*dlinkpb.SaveCampaignDataListReq_Data, 0, len(s.Req.GetDelayLinkData())),
|
|
}
|
|
|
|
for _, v := range s.Req.GetDelayLinkData() {
|
|
data.Data = append(data.Data, &dlinkpb.SaveCampaignDataListReq_Data{
|
|
Key: v.GetKey(),
|
|
Val: v.GetValue(),
|
|
})
|
|
}
|
|
|
|
_, err = app.NewDeepLinkLink().SaveCampaignDataList(s.Ctx, data)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建奖品
|
|
func (s *Store) createReward(cpn *model.FissionCampaign) (err error) {
|
|
var addRules []*model.FissionCampaignRewardRule
|
|
var addTasks []*model.FissionCampaignTask
|
|
var add = s.otherReward
|
|
var relateIds = s.otherRelateIds
|
|
var relateMap = s.otherRelateMap
|
|
var appendFn = func(rt int8, list []*pb.StoreReq_Reward, t consts.CampaignUserType) {
|
|
for i, one := range list {
|
|
var step int32
|
|
|
|
// 如果是老带新和一起奖励,额外奖或者是阶梯奖励规则,都要设置阶梯
|
|
if (verify.InArray(cpn.FissionID, consts.IdWinTogether, consts.IdReferral) &&
|
|
(rt == mtype.FissionCampaignRewardTypeExtra ||
|
|
(rt == mtype.FissionCampaignRewardTypeApp &&
|
|
(s.Req.GetReferral().GetRewardRule() == mtype.FissionReferralRewardRuleStep ||
|
|
s.Req.GetWin().GetRewardRule() == mtype.FissionReferralRewardRuleStep)))) ||
|
|
cpn.FissionID == consts.IdSignIn {
|
|
step = int32(i) + 1
|
|
}
|
|
|
|
var id = hashid.IdBigint()
|
|
|
|
rewardOne := &model.FissionCampaignReward{
|
|
ID: id,
|
|
CampaignID: cpn.ID,
|
|
Stock: one.GetStock(),
|
|
Sort: int32(i),
|
|
RewardType: rt,
|
|
Step: step,
|
|
InviteNum: one.GetInviteNum(),
|
|
RewardNum: one.GetRewardNum(),
|
|
IsThank: int8(one.GetIsThank()),
|
|
Score: one.GetScore(),
|
|
SignDay: one.GetSignDay(),
|
|
CollectNum: one.GetCollectNum(),
|
|
IsSuper: int8(one.GetIsSuper()),
|
|
RewardID: one.GetRewardId(),
|
|
LangMark: t.LangMark,
|
|
LevelID: t.LevelId,
|
|
Odds: one.GetOdds(),
|
|
CountryMark: t.CountryMark,
|
|
JumpURL: one.GetJumpUrl(),
|
|
HasRule: utils.Ternary[int8](one.GetCampaignLimit() > 0, mtype.Yes, mtype.No),
|
|
InitPercent: one.GetInitPercent(),
|
|
PropMark: mtype.FissionCampaignRewardPropMarkReward,
|
|
OpenAdd: int8(one.GetOpenAdd().GetOpen()),
|
|
OpenTask: int8(one.GetRewardTask().GetOpen()),
|
|
}
|
|
|
|
s.rewardAdd[id] = one.GetOpenAdd()
|
|
s.rewardTask[id] = one.GetRewardTask()
|
|
|
|
if cpn.FissionID == consts.IdDice && rt == mtype.FissionCampaignRewardTypeApp {
|
|
rewardOne.SetCollectRule(mtype.CollectRule{
|
|
Open: one.GetCollectRule().GetOpen(),
|
|
InitCollect: one.GetCollectRule().GetInitCollect(),
|
|
SignDay: one.GetCollectRule().GetSignDay(),
|
|
AddCollect: one.GetCollectRule().GetAddCollect(),
|
|
ResetType: one.GetCollectRule().GetResetType(),
|
|
})
|
|
}
|
|
|
|
add = append(add, rewardOne)
|
|
|
|
addTasks = append(addTasks, s._appendRewardHelp(cpn.ID, id, one)...)
|
|
|
|
if one.GetCampaignLimit() > 0 {
|
|
addRules = append(addRules, withdefault.FissionCampaignRewardRule(&model.FissionCampaignRewardRule{
|
|
CampaignID: cpn.ID,
|
|
RewardID: id,
|
|
CampaignLimit: one.GetCampaignLimit(),
|
|
}))
|
|
}
|
|
|
|
if _, ok := relateMap[one.GetRewardId()]; !ok && one.GetRewardId() > 0 {
|
|
relateMap[one.GetRewardId()] = struct{}{}
|
|
relateIds = append(relateIds, one.GetRewardId())
|
|
}
|
|
}
|
|
}
|
|
|
|
var lvRelateMap = make(map[int64]struct{})
|
|
var lvRelate []*model.FissionUserLevelRelated
|
|
var lvRelateFn = func(lvId int64) {
|
|
if _, ok := lvRelateMap[lvId]; !ok {
|
|
lvRelateMap[lvId] = struct{}{}
|
|
lvRelate = append(lvRelate, withdefault.FissionUserLevelRelated(&model.FissionUserLevelRelated{
|
|
LevelID: lvId,
|
|
RelateID: cpn.ID,
|
|
RelateTable: s.Dao().FissionCampaign.TableName(),
|
|
CancelTime: 0,
|
|
}))
|
|
}
|
|
}
|
|
|
|
appendFn(mtype.FissionCampaignRewardTypeWeb, s.Req.GetRewardsWeb(), consts.CampaignUserType{})
|
|
appendFn(mtype.FissionCampaignRewardTypeNewcomer, s.Req.GetRewardsNewcomer(), consts.CampaignUserType{})
|
|
appendFn(mtype.FissionCampaignRewardTypeExtra, s.Req.GetRewardsExtra(), consts.CampaignUserType{})
|
|
|
|
switch s.Req.GetRewards().GetRewardGroup() {
|
|
case mtype.FissionRewardGroupNormal:
|
|
appendFn(mtype.FissionCampaignRewardTypeApp, s.Req.GetRewards().GetNormal(), consts.CampaignUserType{})
|
|
case mtype.FissionRewardGroupLang:
|
|
for _, lang := range s.Req.GetRewards().GetLangs() {
|
|
appendFn(mtype.FissionCampaignRewardTypeApp, lang.GetRewards(), consts.CampaignUserType{LangMark: lang.GetLangMark()})
|
|
}
|
|
case mtype.FissionRewardGroupUserLevel:
|
|
for _, level := range s.Req.GetRewards().GetUserLevel().GetLevelList() {
|
|
appendFn(mtype.FissionCampaignRewardTypeApp, level.GetRewards(), consts.CampaignUserType{LevelId: level.GetLevelId()})
|
|
lvRelateFn(level.GetLevelId())
|
|
}
|
|
case mtype.FissionRewardGroupLangAndUserLevel:
|
|
for _, lang := range s.Req.GetRewards().GetLangUserLevel() {
|
|
for _, level := range lang.GetLevelList() {
|
|
appendFn(mtype.FissionCampaignRewardTypeApp, level.GetRewards(), consts.CampaignUserType{LangMark: lang.GetLangMark(), LevelId: level.GetLevelId()})
|
|
lvRelateFn(level.GetLevelId())
|
|
}
|
|
}
|
|
case mtype.FissionRewardGroupCountry:
|
|
for _, country := range s.Req.GetRewards().GetCountry().GetCountryList() {
|
|
appendFn(mtype.FissionCampaignRewardTypeApp, country.GetRewards(), consts.CampaignUserType{CountryMark: country.GetCountryMark()})
|
|
}
|
|
}
|
|
|
|
if len(add) == 0 {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignReward
|
|
if err = m.WithContext(s.Ctx).Create(add...); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var relates []*model.RewardRelated
|
|
for _, v := range relateIds {
|
|
relates = append(relates, withdefault.RewardRelated(&model.RewardRelated{
|
|
RewardID: v,
|
|
RelateID: cpn.ID,
|
|
RelateTable: s.GetDao().FissionCampaign.TableName(),
|
|
}))
|
|
}
|
|
|
|
relateM := s.GetDao().RewardRelated
|
|
if err = relateM.WithContext(s.Ctx).Create(relates...); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(addTasks) > 0 {
|
|
helpM := s.GetDao().FissionCampaignTask
|
|
if err = helpM.WithContext(s.Ctx).Create(addTasks...); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
if len(lvRelate) > 0 {
|
|
lvRelateM := s.GetDao().FissionUserLevelRelated
|
|
if err = lvRelateM.WithContext(s.Ctx).Create(lvRelate...); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
if len(addRules) > 0 {
|
|
ruleM := s.GetDao().FissionCampaignRewardRule
|
|
err = ruleM.WithContext(s.Ctx).Create(addRules...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
return s._createHelpTicket(cpn)
|
|
}
|
|
|
|
func (s *Store) depend() (err error) {
|
|
project, err := finder.Project(s.Ctx, s.Req.GetProjectId())
|
|
if err != nil {
|
|
return s.BE().CacheError(err)
|
|
}
|
|
|
|
if project == nil || project.IsDel == mtype.Yes {
|
|
return workerr.NotFound("project not found")
|
|
}
|
|
|
|
tempM := s.GetDao().FissionTemp
|
|
|
|
temp, err := tempM.WithContext(s.Ctx).Where(tempM.HashID.Eq(s.Req.GetTemplateId())).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if temp == nil || temp.IsDel == mtype.Yes {
|
|
return workerr.NotFound("The template has been removed. Please use the new template.")
|
|
}
|
|
|
|
group, err := cache.NewFissionTempGroup(s.Ctx).FindById(temp.GroupID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if group.IsPrivate == mtype.Yes && !provider.NewCompanyMade(s.Ctx, project.CompanyID).OkTemp(group.Mark) {
|
|
return workerr.NotFound("group not open")
|
|
}
|
|
|
|
s.project = project
|
|
s.temp = temp
|
|
s.group = group
|
|
s.otherRelateMap = make(map[int64]struct{})
|
|
s.rewardAdd = make(map[int64]*pb.StoreReq_OpenAdd)
|
|
s.rewardTask = make(map[int64]*pb.StoreReq_RewardTask)
|
|
|
|
switch temp.FissionID {
|
|
case consts.IdKeep:
|
|
invite := s.Req.GetKeepDog()
|
|
s.Req.TargetOption.Fixed = &pb.StoreReq_Fixed{
|
|
Open: invite.GetOpenInvite(),
|
|
AppEvent: invite.GetInvite().GetInviteType(),
|
|
TargetNum: 1,
|
|
Chance: invite.GetInvite().GetInviteGet(),
|
|
Percent: 0,
|
|
}
|
|
case consts.IdPrizeQuiz:
|
|
s.Req.TargetOption.Fixed = &pb.StoreReq_Fixed{
|
|
Open: 1,
|
|
AppEvent: 1,
|
|
TargetNum: s.Req.GetQuiz().GetTargetNum(),
|
|
Chance: s.Req.GetQuiz().GetChance(),
|
|
Percent: 0,
|
|
}
|
|
}
|
|
|
|
if !verify.InArray[int64](temp.FissionID, consts.IdReferral, consts.IdWinTogether) {
|
|
if s.Req.TargetOption != nil && s.Req.TargetOption.Custom != nil {
|
|
s.Req.TargetOption.Custom.PreEvent = 0
|
|
}
|
|
}
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
s.OL().User(s.Req.GetUserId(), s.Req.GetIp()).CampaignSave(s.Res.GetId(), s.Req)
|
|
return
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createCash(cpn *model.FissionCampaign) (err error) {
|
|
cash := s.Req.GetCash()
|
|
|
|
if cash == nil {
|
|
return s.BE().VerifyError("please set cash")
|
|
}
|
|
|
|
conf := withdefault.FissionCampaignCash(&model.FissionCampaignCash{
|
|
CampaignID: cpn.ID,
|
|
ExpiredDay: cash.GetExpiredDay(),
|
|
Price: cash.GetPrice(),
|
|
PriceNum: cash.GetPriceNum(),
|
|
Currency: int8(cash.GetCurrency()),
|
|
LoopNum: cash.GetLoopNum(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignCash
|
|
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _setLongImg(conf *model.FissionCampaignConfig) (err error) {
|
|
if len(s.Req.GetLongImgs()) == 0 {
|
|
return
|
|
}
|
|
|
|
s.langSourceMap = make(map[string]int64, len(s.Req.GetLongImgs()))
|
|
var zone []*model.FissionCampaignLongImgZone
|
|
var add = make([]*model.FissionCampaignLongImg, 0, len(s.Req.GetLongImgs()))
|
|
for _, v := range s.Req.GetLongImgs() {
|
|
one := withdefault.FissionCampaignLongImg(&model.FissionCampaignLongImg{
|
|
CampaignID: conf.CampaignID,
|
|
ClickType: int8(v.GetClickType()),
|
|
ImgURL: v.GetImgUrl(),
|
|
WebURL: v.GetWebUrl(),
|
|
AppParam: v.GetAppParam(),
|
|
PcParam: v.GetPcParam(),
|
|
TargetType: int8(v.GetTargetType()),
|
|
TargetID: v.GetTargetId(),
|
|
})
|
|
|
|
s.langSourceMap[v.GetImgUrl()] = one.ID
|
|
|
|
if v.GetClickType() == mtype.FissionCampaignLongImgClickTypeZone {
|
|
for _, hotZone := range v.GetHotZone() {
|
|
zone = append(zone, withdefault.FissionCampaignLongImgZone(&model.FissionCampaignLongImgZone{
|
|
CampaignID: conf.CampaignID,
|
|
ImgID: one.ID,
|
|
WebURL: hotZone.GetWebUrl(),
|
|
AppParam: hotZone.GetAppParam(),
|
|
PcParam: hotZone.GetPcParam(),
|
|
ClickX: hotZone.GetClickX(),
|
|
ClickY: hotZone.GetClickY(),
|
|
ClickH: hotZone.GetClickH(),
|
|
ClickW: hotZone.GetClickW(),
|
|
TargetType: int8(hotZone.GetTargetType()),
|
|
TargetID: hotZone.GetTargetId(),
|
|
}))
|
|
}
|
|
}
|
|
|
|
add = append(add, one)
|
|
}
|
|
|
|
err = s.GetDao().FissionCampaignLongImg.WithContext(s.Ctx).Create(add...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(zone) == 0 {
|
|
return
|
|
}
|
|
|
|
err = s.GetDao().FissionCampaignLongImgZone.WithContext(s.Ctx).Create(zone...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _appendRewardHelp(campaignId, id int64, one *pb.StoreReq_Reward) (addTasks []*model.FissionCampaignTask) {
|
|
taskMark := utils.FissionCampaignTaskMarkRewardOneVal(id)
|
|
|
|
if one.Help == mtype.Yes {
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: campaignId,
|
|
TaskType: mtype.FissionCampaignTaskTypeInstall,
|
|
TaskMark: taskMark,
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
Num: 1,
|
|
Percent: one.HelpPercent,
|
|
}))
|
|
|
|
s.helpInstall = true
|
|
}
|
|
if one.Open == mtype.Yes {
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: campaignId,
|
|
TaskType: mtype.FissionCampaignTaskTypeOpen,
|
|
TaskMark: taskMark,
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
Num: 1,
|
|
Percent: one.OpenPercent,
|
|
PercentLimit: one.OpenPercentLimit,
|
|
}))
|
|
|
|
s.helpOpen = true
|
|
}
|
|
if one.Click == mtype.Yes {
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: campaignId,
|
|
TaskType: mtype.FissionCampaignTaskTypeClick,
|
|
TaskMark: taskMark,
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
Num: 1,
|
|
Percent: one.ClickPercent,
|
|
PercentLimit: one.ClickPercentLimit,
|
|
}))
|
|
|
|
s.helpClick = true
|
|
}
|
|
if one.Register == mtype.Yes {
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: campaignId,
|
|
TaskType: mtype.FissionCampaignTaskTypeRegister,
|
|
TaskMark: taskMark,
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
Num: 1,
|
|
Percent: one.RegisterPercent,
|
|
}))
|
|
|
|
s.helpRegister = true
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createFlip(cpn *model.FissionCampaign) (err error) {
|
|
flip := s.Req.GetFlip()
|
|
|
|
if flip == nil {
|
|
return s.BE().VerifyError("please set flip")
|
|
}
|
|
|
|
conf := withdefault.FissionCampaignFlip(&model.FissionCampaignFlip{
|
|
CampaignID: cpn.ID,
|
|
InitChance: flip.GetInitChance(),
|
|
CardImg: flip.GetCardImg(),
|
|
DayChance: flip.GetDayChance(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignFlip
|
|
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 助力规则
|
|
func (s *Store) _createHelpTicket(cpn *model.FissionCampaign) (err error) {
|
|
var helpEvent []string
|
|
|
|
if s.helpInstall {
|
|
helpEvent = append(helpEvent, mtype.FissionCampaignTicketHelpEventInstall)
|
|
}
|
|
|
|
if s.helpRegister {
|
|
helpEvent = append(helpEvent, mtype.FissionCampaignTicketHelpEventRegister)
|
|
}
|
|
|
|
if s.helpOpen {
|
|
helpEvent = append(helpEvent, mtype.FissionCampaignTicketHelpEventOpen)
|
|
}
|
|
|
|
if s.helpClick {
|
|
helpEvent = append(helpEvent, mtype.FissionCampaignTicketHelpEventClick)
|
|
}
|
|
|
|
if len(helpEvent) == 0 {
|
|
return
|
|
}
|
|
|
|
err = s.GetDao().FissionCampaignTicket.WithContext(s.Ctx).Create(withdefault.FissionCampaignTicket(&model.FissionCampaignTicket{
|
|
CampaignID: cpn.ID,
|
|
Mark: mtype.FissionCampaignTicketRewardHelp,
|
|
Open: mtype.Yes,
|
|
HelpEvent: strings.Join(helpEvent, ","),
|
|
}))
|
|
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (s *Store) copyLangs(cpn *model.FissionCampaign) (err error) {
|
|
if s.Req.GetCopyCampaignId() == "" {
|
|
return
|
|
}
|
|
|
|
source, err := finder.Campaign(s.Ctx, s.Req.GetCopyCampaignId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
langMarks := source.GetLangMarks()
|
|
if len(langMarks) <= 1 {
|
|
return
|
|
}
|
|
|
|
copyConds, err := s._copyCond(source.ID, cpn.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
copyQt, err := s._copyQuit(cpn, source.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
copyQa, err := s._copyQuestion(cpn, source.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
copyTalkText, err := s._copyTalkText(cpn, source.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignLang
|
|
langs, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(source.ID), m.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var imgMap = make(map[string][]*model.FissionCampaignLongImg)
|
|
var zoneMap = make(map[string][]*model.FissionCampaignLongImgZone)
|
|
var langMap = make(map[string]*model.FissionCampaignLang)
|
|
for _, lang := range langs {
|
|
langMap[lang.LangMark] = lang
|
|
imgs, zones, err1 := s._copyImg(cpn.ID, source.ID, lang.ID)
|
|
if err1 != nil {
|
|
err = err1
|
|
return
|
|
}
|
|
imgMap[lang.LangMark] = imgs
|
|
zoneMap[lang.LangMark] = zones
|
|
|
|
}
|
|
|
|
var addImgs []*model.FissionCampaignLongImg
|
|
var addZones []*model.FissionCampaignLongImgZone
|
|
var add []*model.FissionCampaignLang
|
|
for _, lang := range langMarks {
|
|
|
|
old, ok := langMap[lang]
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
langCond := old.GetConds()
|
|
var condMap = make(map[int64]*mtype.LangCond)
|
|
for _, cond := range langCond {
|
|
condMap[cond.CondId] = cond
|
|
}
|
|
|
|
var conds []*mtype.LangCond
|
|
var quit *mtype.LangQuit
|
|
var questions []*mtype.LangQuestions
|
|
var talks []*mtype.KeepTalk
|
|
for _, cpc := range copyConds {
|
|
|
|
one := cpc.cond
|
|
|
|
if oldCond, ok1 := condMap[cpc.copyId]; ok1 {
|
|
|
|
if one.Desc == "" {
|
|
one.Desc = oldCond.Desc
|
|
}
|
|
|
|
if one.WebURL == "" {
|
|
one.WebURL = oldCond.WebURL
|
|
}
|
|
|
|
if one.ExtraParam == "" {
|
|
one.ExtraParam = oldCond.ExtraParam
|
|
}
|
|
|
|
if one.PcParam == "" {
|
|
one.PcParam = oldCond.PcParam
|
|
}
|
|
|
|
if one.GoText == "" {
|
|
one.GoText = oldCond.GoText
|
|
}
|
|
}
|
|
|
|
conds = append(conds, &one)
|
|
}
|
|
|
|
switch cpn.FissionID {
|
|
case consts.IdPrizeQuiz:
|
|
langQuit := old.GetQuit()
|
|
quit = &mtype.LangQuit{
|
|
Title: copyQt.title,
|
|
Options: make([]*mtype.LangOption, 0, len(copyQt.options)),
|
|
}
|
|
|
|
if quit.Title == "" {
|
|
quit.Title = langQuit.Title
|
|
}
|
|
|
|
var titleMap = make(map[int64]*mtype.LangOption)
|
|
for _, option := range langQuit.Options {
|
|
titleMap[option.OptionId] = option
|
|
}
|
|
|
|
for _, cpo := range copyQt.options {
|
|
one := cpo.option
|
|
if oqo, ok1 := titleMap[cpo.copyId]; ok1 {
|
|
if one.Title == "" {
|
|
one.Title = oqo.Title
|
|
}
|
|
|
|
if one.ImgUrl == "" {
|
|
one.ImgUrl = oqo.ImgUrl
|
|
}
|
|
}
|
|
|
|
quit.Options = append(quit.Options, one)
|
|
}
|
|
case consts.IdPrizeAnswer:
|
|
langQuestions := old.GetQuestions()
|
|
var qMap = make(map[int64]*mtype.LangQuestions)
|
|
var qoMap = make(map[int64]*mtype.LangOption)
|
|
for _, question := range langQuestions {
|
|
qMap[question.QaId] = question
|
|
for _, option := range question.Options {
|
|
qoMap[option.OptionId] = option
|
|
}
|
|
}
|
|
|
|
for _, qa := range copyQa {
|
|
one := qa.qa
|
|
if oqa, ok1 := qMap[qa.copyId]; ok1 {
|
|
if one.Title == "" {
|
|
one.Title = oqa.Title
|
|
}
|
|
|
|
for _, option := range qa.options {
|
|
if oqo, ok2 := qoMap[option.copyId]; ok2 {
|
|
if option.option.Title == "" {
|
|
option.option.Title = oqo.Title
|
|
}
|
|
}
|
|
one.Options = append(one.Options, option.option)
|
|
}
|
|
}
|
|
|
|
questions = append(questions, one)
|
|
}
|
|
|
|
case consts.IdKeep:
|
|
talkText := old.GetKeepTalk()
|
|
var oldTalkTextMap = make(map[int32]string, len(talkText))
|
|
for _, talk := range talkText {
|
|
oldTalkTextMap[talk.TextType] = talk.Content
|
|
}
|
|
|
|
for _, v := range copyTalkText {
|
|
var text = v.content
|
|
if content, ok1 := oldTalkTextMap[v.textType]; ok1 && text == "" {
|
|
text = content
|
|
}
|
|
|
|
talks = append(talks, &mtype.KeepTalk{
|
|
TextType: v.textType,
|
|
Content: text,
|
|
})
|
|
}
|
|
}
|
|
|
|
condsStr, _ := jsonm.ToSliceString(conds)
|
|
quitStr, _ := jsonm.ToObjString(quit)
|
|
questionsStr, _ := jsonm.ToSliceString(questions)
|
|
talksStr, _ := jsonm.ToSliceString(talks)
|
|
|
|
one := withdefault.FissionCampaignLang(&model.FissionCampaignLang{
|
|
CampaignID: cpn.ID,
|
|
LangMark: lang,
|
|
PageTitle: old.PageTitle,
|
|
ImageMain: old.ImageMain,
|
|
DownloadPageImage: old.DownloadPageImage,
|
|
WechatPageImage: old.WechatPageImage,
|
|
ContentImg: old.ContentImg,
|
|
WebBgImg: old.DlBgImg,
|
|
WarmUpImg: old.WarmUpImg,
|
|
DlBgImg: old.DlBgImg,
|
|
DlBannerImg: old.DlBannerImg,
|
|
DlBannerAppLogo: old.DlBannerAppLogo,
|
|
DlBannerAppName: old.DlBannerAppName,
|
|
DlBannerAppBtn: old.DlBannerAppBtn,
|
|
ShareText: old.ShareText,
|
|
ShareImg: old.ShareImg,
|
|
Rule: old.Rule,
|
|
RuleImg: "",
|
|
Conds: condsStr,
|
|
Quit: quitStr,
|
|
Questions: questionsStr,
|
|
QaGroup: old.QaGroup,
|
|
LongImg: old.LongImg,
|
|
Cash: old.Cash,
|
|
Gold: "",
|
|
TOffset: old.TOffset,
|
|
TalkText: talksStr,
|
|
Coin: "",
|
|
TopicColor: "",
|
|
PcBg: "",
|
|
Vs: "[]",
|
|
Uno: utils.Ternary[string](old.Uno != "", old.Uno, "{}"),
|
|
})
|
|
|
|
for _, img := range imgMap[lang] {
|
|
img.LangID = one.ID
|
|
addImgs = append(addImgs, img)
|
|
}
|
|
|
|
addZones = append(addZones, zoneMap[lang]...)
|
|
add = append(add, one)
|
|
|
|
}
|
|
|
|
if len(add) == 0 {
|
|
return
|
|
}
|
|
|
|
err = m.WithContext(s.Ctx).Create(add...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
cpnM := s.GetDao().FissionCampaign
|
|
_, err = cpnM.WithContext(s.Ctx).Where(cpnM.ID.Eq(cpn.ID)).UpdateSimple(cpnM.LangTypes.Value(source.LangTypes))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(addImgs) > 0 {
|
|
err = s.GetDao().FissionCampaignLongImg.WithContext(s.Ctx).Create(addImgs...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
if len(addZones) > 0 {
|
|
err = s.GetDao().FissionCampaignLongImgZone.WithContext(s.Ctx).Create(addZones...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
type copyCond struct {
|
|
copyId int64
|
|
cond mtype.LangCond
|
|
}
|
|
|
|
func (s *Store) _copyCond(oldCpnId, cpnId int64) (conds []copyCond, err error) {
|
|
condM := s.GetDao().FissionCampaignCond
|
|
oldCond, err := condM.WithContext(s.Ctx).Where(condM.CampaignID.Eq(oldCpnId), condM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var titleMap = make(map[string][]*model.FissionCampaignCond)
|
|
for _, cond := range oldCond {
|
|
titleMap[cond.Desc] = append(titleMap[cond.Desc], cond)
|
|
}
|
|
|
|
newCond, err := condM.WithContext(s.Ctx).Where(condM.CampaignID.Eq(cpnId), condM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var titleIdx = make(map[string]int)
|
|
for _, cond := range newCond {
|
|
one := copyCond{
|
|
copyId: 0,
|
|
cond: mtype.LangCond{
|
|
CondId: cond.ID,
|
|
Desc: cond.Desc,
|
|
WebURL: cond.WebURL,
|
|
ExtraParam: cond.ExtraParam,
|
|
PcParam: cond.PcParam,
|
|
GoText: cond.GoText,
|
|
},
|
|
}
|
|
|
|
if olds, ok := titleMap[cond.Desc]; ok {
|
|
if len(olds) > titleIdx[cond.Desc] {
|
|
old := olds[titleIdx[cond.Desc]]
|
|
|
|
one.copyId = old.ID
|
|
if cond.Desc == old.Desc {
|
|
one.cond.Desc = ""
|
|
}
|
|
|
|
if cond.WebURL == old.WebURL {
|
|
one.cond.WebURL = ""
|
|
}
|
|
|
|
if cond.ExtraParam == old.ExtraParam {
|
|
one.cond.ExtraParam = ""
|
|
}
|
|
|
|
if cond.PcParam == old.PcParam {
|
|
one.cond.PcParam = ""
|
|
}
|
|
|
|
if cond.GoText == old.GoText {
|
|
one.cond.GoText = ""
|
|
}
|
|
|
|
titleIdx[cond.Desc]++
|
|
}
|
|
}
|
|
|
|
conds = append(conds, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
type copyQuit struct {
|
|
title string
|
|
options []*copyOption //选项集合
|
|
}
|
|
|
|
type copyOption struct {
|
|
copyId int64
|
|
option *mtype.LangOption
|
|
}
|
|
|
|
func (s *Store) _copyQuit(cpn *model.FissionCampaign, oldCpnId int64) (quit *copyQuit, err error) {
|
|
if cpn.FissionID != consts.IdPrizeQuiz {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignQuiz
|
|
conf, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(oldCpnId)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
quit = ©Quit{
|
|
title: s.Req.GetQuiz().GetTitle(),
|
|
options: nil,
|
|
}
|
|
|
|
if conf.Title == s.Req.GetQuiz().GetTitle() {
|
|
quit.title = ""
|
|
}
|
|
|
|
optionM := s.GetDao().FissionCampaignQuizOption
|
|
oldOption, err := optionM.WithContext(s.Ctx).Where(optionM.CampaignID.Eq(oldCpnId), optionM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var titleMap = make(map[string][]*model.FissionCampaignQuizOption)
|
|
for _, option := range oldOption {
|
|
titleMap[option.Title] = append(titleMap[option.Title], option)
|
|
}
|
|
|
|
options, err := optionM.WithContext(s.Ctx).Where(optionM.CampaignID.Eq(cpn.ID), optionM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var titleIdx = make(map[string]int)
|
|
for _, option := range options {
|
|
one := ©Option{
|
|
copyId: 0,
|
|
option: &mtype.LangOption{
|
|
OptionId: option.ID,
|
|
Title: option.Title,
|
|
ImgUrl: option.ImgURL,
|
|
},
|
|
}
|
|
|
|
if cpo, ok := titleMap[option.Title]; ok {
|
|
if len(cpo) > titleIdx[option.Title] {
|
|
old := cpo[titleIdx[option.Title]]
|
|
|
|
one.copyId = old.ID
|
|
|
|
if option.Title == old.Title {
|
|
one.option.Title = ""
|
|
}
|
|
|
|
if option.ImgURL == old.ImgURL {
|
|
one.option.ImgUrl = ""
|
|
}
|
|
|
|
titleIdx[option.Title]++
|
|
}
|
|
|
|
}
|
|
|
|
quit.options = append(quit.options, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
type copyQuestion struct {
|
|
copyId int64
|
|
qa *mtype.LangQuestions
|
|
options []*copyOption //选项集合
|
|
}
|
|
|
|
func (s *Store) _copyQuestion(cpn *model.FissionCampaign, oldCpnId int64) (questions []*copyQuestion, err error) {
|
|
if cpn.FissionID != consts.IdPrizeAnswer {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignQaQuestion
|
|
oldQuestion, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(oldCpnId), m.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var titleMap = make(map[string][]*model.FissionCampaignQaQuestion)
|
|
var oldIds []int64
|
|
for _, old := range oldQuestion {
|
|
oldIds = append(oldIds, old.ID)
|
|
titleMap[old.Title] = append(titleMap[old.Title], old)
|
|
}
|
|
|
|
optionM := s.GetDao().FissionCampaignQaOption
|
|
oldOption, err := optionM.WithContext(s.Ctx).Where(optionM.QuestionID.In(oldIds...), optionM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var oldOptionMap = make(map[int64][]*model.FissionCampaignQaOption)
|
|
for _, option := range oldOption {
|
|
oldOptionMap[option.QuestionID] = append(oldOptionMap[option.QuestionID], option)
|
|
}
|
|
|
|
question, 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 ids []int64
|
|
for _, v := range question {
|
|
ids = append(ids, v.ID)
|
|
}
|
|
|
|
options, err := optionM.WithContext(s.Ctx).Where(optionM.QuestionID.In(ids...), optionM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var optionMap = make(map[int64][]*model.FissionCampaignQaOption)
|
|
for _, option := range options {
|
|
optionMap[option.QuestionID] = append(optionMap[option.QuestionID], option)
|
|
}
|
|
|
|
var titleIdx = make(map[string]int)
|
|
questions = make([]*copyQuestion, 0, len(question))
|
|
for _, qa := range question {
|
|
one := ©Question{
|
|
copyId: 0,
|
|
qa: &mtype.LangQuestions{},
|
|
options: make([]*copyOption, 0, len(optionMap[qa.ID])),
|
|
}
|
|
|
|
for _, option := range optionMap[qa.ID] {
|
|
one.options = append(one.options, ©Option{
|
|
copyId: 0,
|
|
option: &mtype.LangOption{
|
|
OptionId: option.ID,
|
|
Title: option.Title,
|
|
},
|
|
})
|
|
}
|
|
|
|
if cpq, ok := titleMap[qa.Title]; ok {
|
|
if len(cpq) > titleIdx[qa.Title] {
|
|
old := cpq[titleIdx[qa.Title]]
|
|
|
|
one.copyId = old.ID
|
|
if qa.Title == old.Title {
|
|
one.qa.Title = ""
|
|
}
|
|
|
|
ops := oldOptionMap[old.ID]
|
|
var opsTitleMap = make(map[string][]*model.FissionCampaignQaOption)
|
|
for _, op := range ops {
|
|
opsTitleMap[op.Title] = append(opsTitleMap[op.Title], op)
|
|
}
|
|
|
|
var opsTitleIdx = make(map[string]int)
|
|
for i, v := range one.options {
|
|
if cpo, ok1 := opsTitleMap[v.option.Title]; ok1 {
|
|
|
|
if len(cpo) > opsTitleIdx[v.option.Title] {
|
|
odo := cpo[opsTitleIdx[v.option.Title]]
|
|
|
|
one.options[i].copyId = odo.ID
|
|
|
|
if v.option.Title == odo.Title {
|
|
one.options[i].option.Title = ""
|
|
}
|
|
}
|
|
|
|
opsTitleIdx[v.option.Title]++
|
|
}
|
|
}
|
|
|
|
titleIdx[qa.Title]++
|
|
}
|
|
}
|
|
|
|
questions = append(questions, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createKeep(cpn *model.FissionCampaign) (err error) {
|
|
keep := s.Req.GetKeepDog()
|
|
|
|
if keep == nil {
|
|
return s.BE().VerifyError("please set keep")
|
|
}
|
|
|
|
invite, _ := jsonm.MarshalToString(keep.GetInvite())
|
|
talkText, _ := jsonm.MarshalToString(keep.GetTalkText())
|
|
|
|
conf := withdefault.FissionCampaignKeep(&model.FissionCampaignKeep{
|
|
CampaignID: cpn.ID,
|
|
Collect: keep.GetCollect(),
|
|
CollectSecond: keep.GetCollectSecond(),
|
|
OpenInvite: int8(keep.GetOpenInvite()),
|
|
Invite: invite,
|
|
InitGet: keep.GetInitGet(),
|
|
SecGet: keep.GetSecGet(),
|
|
FeedNum: keep.GetFeedNum(),
|
|
FeedCycle: keep.GetFeedCycle(),
|
|
TalkText: talkText,
|
|
MaxFeed: keep.GetMaxFeed(),
|
|
FeedGet: keep.GetFeedGet(),
|
|
FeedGetNum: keep.GetFeedGetNum(),
|
|
SecGetDayLimit: keep.GetSecGetDayLimit(),
|
|
MachineType: int8(keep.GetMachineType()),
|
|
OfflineMin: keep.GetOfflineMin(),
|
|
OfflineGet: keep.GetOfflineGet(),
|
|
OfflineLimit: keep.GetOfflineLimit(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignKeep
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
var steps []*model.FissionCampaignKeepStep
|
|
for _, v := range keep.GetSteps() {
|
|
step := withdefault.FissionCampaignKeepStep(&model.FissionCampaignKeepStep{
|
|
CampaignID: cpn.ID,
|
|
Step: v.GetStep(),
|
|
Percent: v.GetPercent(),
|
|
RewardType: int8(v.GetRewardType()),
|
|
RewardID: 0,
|
|
RewardNum: v.GetRewardNum(),
|
|
})
|
|
|
|
if v.GetRewardType() == mtype.FissionCampaignKeepStepRewardTypeReward {
|
|
|
|
rewardId := hashid.IdBigint()
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
ID: rewardId,
|
|
CampaignID: cpn.ID,
|
|
Stock: v.GetReward().GetStock(),
|
|
RewardType: mtype.FissionCampaignRewardTypeGrowStep,
|
|
Step: v.GetStep(),
|
|
RewardNum: 1,
|
|
RewardID: v.GetReward().GetRewardId(),
|
|
PropMark: mtype.FissionCampaignRewardPropMarkReward,
|
|
})
|
|
|
|
step.RewardID = rewardId
|
|
}
|
|
|
|
steps = append(steps, step)
|
|
}
|
|
|
|
err = s.GetDao().FissionCampaignKeepStep.WithContext(s.Ctx).Create(steps...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
type copyTalk struct {
|
|
textType int32
|
|
content string
|
|
}
|
|
|
|
func (s *Store) _copyTalkText(cpn *model.FissionCampaign, oldCpnId int64) (talks []*copyTalk, err error) {
|
|
if cpn.FissionID != consts.IdKeep {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignKeep
|
|
conf, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(oldCpnId)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
|
|
return
|
|
}
|
|
|
|
oldTalks := conf.GetKeepTalk()
|
|
var oldMap = make(map[int32]string, len(oldTalks))
|
|
for _, oldTalk := range oldTalks {
|
|
oldMap[oldTalk.TextType] = oldTalk.Content
|
|
}
|
|
|
|
for _, talk := range s.Req.GetKeepDog().GetTalkText() {
|
|
var text string
|
|
content, ok := oldMap[talk.GetTextType()]
|
|
if !ok || content != talk.Content {
|
|
text = talk.Content
|
|
}
|
|
|
|
talks = append(talks, ©Talk{
|
|
textType: talk.GetTextType(),
|
|
content: text,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) createPush(cpn *model.FissionCampaign) (err error) {
|
|
var add []*model.FissionCampaignPush
|
|
if s.Req.GetPush().GetTaskReset().GetOpen() == mtype.Yes {
|
|
cond, _ := jsonm.ToSliceString(s.Req.GetPush().GetTaskReset().GetPushCond())
|
|
add = append(add, &model.FissionCampaignPush{
|
|
CampaignID: cpn.ID,
|
|
Mark: mtype.FissionCampaignPushMarkTaskReset,
|
|
Cond: cond,
|
|
Open: mtype.Yes,
|
|
})
|
|
}
|
|
|
|
if s.Req.GetPush().GetActive().GetOpen() == mtype.Yes {
|
|
cond, _ := jsonm.ToSliceString(s.Req.GetPush().GetActive().GetPushCond())
|
|
add = append(add, withdefault.FissionCampaignPush(&model.FissionCampaignPush{
|
|
CampaignID: cpn.ID,
|
|
Mark: mtype.FissionCampaignPushMarkActive,
|
|
Cond: cond,
|
|
Open: mtype.Yes,
|
|
}))
|
|
}
|
|
|
|
if s.Req.GetPush().GetOffline().GetOpen() == mtype.Yes {
|
|
cond, _ := jsonm.ToSliceString(s.Req.GetPush().GetOffline().GetPushCond())
|
|
add = append(add, &model.FissionCampaignPush{
|
|
CampaignID: cpn.ID,
|
|
Mark: mtype.FissionCampaignPushMarkOffline,
|
|
Cond: cond,
|
|
Open: mtype.Yes,
|
|
})
|
|
}
|
|
|
|
if s.Req.GetPush().GetVisit().GetOpen() == mtype.Yes {
|
|
add = append(add, &model.FissionCampaignPush{
|
|
CampaignID: cpn.ID,
|
|
Mark: mtype.FissionCampaignPushMarkVisit,
|
|
Cond: "{}",
|
|
Open: mtype.Yes,
|
|
})
|
|
}
|
|
|
|
if len(add) > 0 {
|
|
err = s.GetDao().FissionCampaignPush.WithContext(s.Ctx).Create(add...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 其他形式的奖品追加
|
|
func (s *Store) _otherAppendReward(reward *model.FissionCampaignReward) {
|
|
if _, ok := s.otherRelateMap[reward.RewardID]; !ok && reward.RewardID > 0 {
|
|
s.otherRelateMap[reward.RewardID] = struct{}{}
|
|
s.otherRelateIds = append(s.otherRelateIds, reward.RewardID)
|
|
}
|
|
|
|
s.otherReward = append(s.otherReward, withdefault.FissionCampaignReward(reward))
|
|
}
|
|
|
|
func (s *Store) createChild(cpn *model.FissionCampaign) (err error) {
|
|
if len(s.Req.GetChild()) == 0 {
|
|
return
|
|
}
|
|
|
|
var hashIds []string
|
|
for _, child := range s.Req.GetChild() {
|
|
if child.GetHashId() == "" {
|
|
continue
|
|
}
|
|
hashIds = append(hashIds, child.GetHashId())
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaign
|
|
list, err := m.WithContext(s.Ctx).Where(m.HashID.In(hashIds...), m.Target.Eq(mtype.FissionCampaignConfigTargetChild), m.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
cm := cmm.NewCMM(s.Ctx, s.GetDao())
|
|
var add []*model.FissionCampaignChild
|
|
for _, v := range list {
|
|
if v.Pid > 0 {
|
|
continue
|
|
}
|
|
|
|
add = append(add, withdefault.FissionCampaignChild(&model.FissionCampaignChild{
|
|
CampaignID: cpn.ID,
|
|
ChildID: v.ID,
|
|
Type: v.ChildType,
|
|
}))
|
|
|
|
var status = v.Status
|
|
|
|
var start, end int64
|
|
if v.TStart > 0 {
|
|
start = timez.GMT(v.TStart, cpn.TOffset)
|
|
if start >= time.Now().Unix() {
|
|
status = mtype.FissionCampaignStatusPub
|
|
}
|
|
}
|
|
|
|
if v.TEnd > 0 {
|
|
end = timez.GMT(v.TEnd, cpn.TOffset)
|
|
if end <= time.Now().Unix() {
|
|
status = mtype.FissionCampaignStatusCancel
|
|
}
|
|
}
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(v.ID)).UpdateSimple(
|
|
m.StartTime.Value(start),
|
|
m.EndTime.Value(end),
|
|
m.Pid.Value(cpn.ID),
|
|
m.Status.Value(status),
|
|
m.TOffset.Value(cpn.TOffset),
|
|
)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
err = cm.AnalyzeCampaign(v.ProjectID, v.ID, start, end, 0)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
}
|
|
|
|
err = s.GetDao().FissionCampaignChild.WithContext(s.Ctx).Create(add...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 创建活动样式配置
|
|
func (s *Store) _createStyle(cpn *model.FissionCampaign) (err error) {
|
|
// 一般配置
|
|
var reqConf = s.Req.GetConfig()
|
|
|
|
style := withdefault.FissionCampaignStyle(&model.FissionCampaignStyle{
|
|
CampaignID: cpn.ID,
|
|
RuleTextColor: reqConf.GetRuleTextColor(),
|
|
RuleBgColor: reqConf.GetRuleBgColor(),
|
|
ShareText: reqConf.GetShareText(),
|
|
ShareImg: reqConf.GetShareImg(),
|
|
RankBackgroundColor: reqConf.GetRankBackgroundColor(),
|
|
RankTextColor: reqConf.GetRankTextColor(),
|
|
LinkBtnTextColor: reqConf.GetLinkBtnTextColor(),
|
|
LinkBtnBgColor: reqConf.GetLinkBtnBgColor(),
|
|
LinkTextColor: reqConf.GetLinkTextColor(),
|
|
PageTitle: reqConf.GetPageTitle(),
|
|
IconType: int8(reqConf.GetIconType()),
|
|
IconBgColor: reqConf.GetIconBgColor(),
|
|
MainImg: reqConf.GetImageMain(),
|
|
WechatImg: reqConf.GetWechatPageImage(),
|
|
DownloadImg: reqConf.GetDownloadPageImage(),
|
|
WebImg: reqConf.GetWebBgImg(),
|
|
Share: "",
|
|
WarmUpImg: reqConf.GetWarmUpImg(),
|
|
WarmUpEnd: reqConf.GetWarmUpEnd(),
|
|
DlBannerImg: reqConf.GetDlBannerImg(),
|
|
DlBannerAppLogo: reqConf.GetDlBannerAppLogo(),
|
|
DlBannerAppName: reqConf.GetDlBannerAppName(),
|
|
DlBannerAppBtn: reqConf.GetDlBannerAppBtn(),
|
|
DlBannerPosition: int8(reqConf.GetDlBannerPosition()),
|
|
TopicColor: reqConf.GetTopicColor(),
|
|
IconOpen: "",
|
|
PcBg: reqConf.GetPcBg(),
|
|
CustomStyle: "",
|
|
PlayRule: reqConf.GetPlayRule(),
|
|
RuleImg: reqConf.GetRuleImg(),
|
|
BgImg: reqConf.GetImagePreview(),
|
|
IconTextColor: reqConf.GetIconTextColor(),
|
|
})
|
|
|
|
if reqConf.GetShare() != nil {
|
|
style.SetShare(reqConf.GetShare())
|
|
}
|
|
|
|
if reqConf.GetIconOpen() != nil {
|
|
style.SetIconOpen(reqConf.GetIconOpen())
|
|
}
|
|
|
|
switch cpn.FissionID {
|
|
case consts.IdPrizeWheel:
|
|
custom := s.Req.GetWheelStyle()
|
|
style.SetWheelStyle(mtype.WheelStyle{
|
|
TopicMark: custom.GetTopicMark(),
|
|
MainImg: custom.GetMainImg(),
|
|
BgColor: custom.GetBgColor(),
|
|
Bottom1: custom.GetBottom1(),
|
|
Bottom2: custom.GetBottom2(),
|
|
Bottom3: custom.GetBottom3(),
|
|
Pointer: custom.GetPointer(),
|
|
PlayBtn: custom.GetPlayBtn(),
|
|
BorderImg: custom.GetBorderImg(),
|
|
ButtonColor: custom.GetButtonColor(),
|
|
WheelTextColor: custom.GetWheelTextColor(),
|
|
})
|
|
case consts.IdLuckyGrid:
|
|
custom := s.Req.GetGridStyle()
|
|
style.SetGridStyle(mtype.GridStyle{
|
|
TopicMark: custom.GetTopicMark(),
|
|
MainImg: custom.GetMainImg(),
|
|
BgColor: custom.GetBgColor(),
|
|
ButtonColor: custom.GetButtonColor(),
|
|
PlayImg: custom.GetPlayImg(),
|
|
DisablePlayImg: custom.GetDisablePlayImg(),
|
|
MachineImg: custom.GetMachineImg(),
|
|
GridImg: custom.GetGridImg(),
|
|
ActivateImg: custom.GetActivateImg(),
|
|
})
|
|
case consts.IdFlip:
|
|
custom := s.Req.GetFlipStyle()
|
|
style.SetFlipStyle(mtype.FlipStyle{
|
|
TopicMark: custom.GetTopicMark(),
|
|
MainImg: custom.GetMainImg(),
|
|
BgColor: custom.GetBgColor(),
|
|
ButtonColor: custom.GetButtonColor(),
|
|
PlayImg: custom.GetPlayImg(),
|
|
CardImg: custom.GetCardImg(),
|
|
})
|
|
case consts.IdGashapon:
|
|
custom := s.Req.GetGashaponStyle()
|
|
|
|
style.SetGashaponStyle(mtype.GashaponStyle{
|
|
TopicMark: custom.GetTopicMark(),
|
|
MainImg: custom.GetMainImg(),
|
|
BgColor: custom.GetBgColor(),
|
|
MachineImg: custom.GetMachineImg(),
|
|
PlayImg: custom.GetPlayImg(),
|
|
EggType: custom.GetEggType(),
|
|
EggImgs: custom.GetEggImgs(),
|
|
})
|
|
}
|
|
|
|
err = s.GetDao().FissionCampaignStyle.WithContext(s.Ctx).Create(style)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createGold(cpn *model.FissionCampaign) (err error) {
|
|
gold := s.Req.GetGold()
|
|
|
|
if gold == nil {
|
|
return s.BE().VerifyError("please set gold")
|
|
}
|
|
|
|
conf := withdefault.FissionCampaignGold(&model.FissionCampaignGold{
|
|
CampaignID: cpn.ID,
|
|
GoldNum: gold.GetGoldNum(),
|
|
ExpiredDay: gold.GetExpiredDay(),
|
|
Price: gold.GetPrice(),
|
|
PriceNum: gold.GetPriceNum(),
|
|
Currency: int8(gold.GetCurrency()),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignGold
|
|
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createCoin(cpn *model.FissionCampaign) (err error) {
|
|
coin := s.Req.GetCoin()
|
|
|
|
if coin == nil {
|
|
return s.BE().VerifyError("please set coin")
|
|
}
|
|
|
|
lackBtn, _ := jsonm.ToSliceString(coin.GetLackBtn())
|
|
conf := withdefault.FissionCampaignCoin(&model.FissionCampaignCoin{
|
|
CampaignID: cpn.ID,
|
|
CoinImg: coin.GetCoinImg(),
|
|
OpenDays: coin.GetOpenDays(),
|
|
OpenLimit: coin.GetOpenLimit(),
|
|
InitCoin: coin.GetInitCoin(),
|
|
InitUse: coin.GetInitUse(),
|
|
UseCoin: coin.GetUseCoin(),
|
|
UseLimit: coin.GetUseLimit(),
|
|
URLID: coin.GetUrlId(),
|
|
LackBtn: lackBtn,
|
|
CustomBtnText: coin.GetCustomBtnText(),
|
|
CustomWebURL: coin.GetCustomWebUrl(),
|
|
CustomExtraParam: coin.GetCustomExtraParam(),
|
|
CustomPcParam: coin.GetCustomPcParam(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignCoin
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
_, dayStart, _ := timez.GMTStartAndEndTs(cpn.TOffset, cpn.StartTime)
|
|
_, nowStart, _ := timez.GMTStartAndEndTs(cpn.TOffset)
|
|
if dayStart < nowStart {
|
|
dayStart = nowStart
|
|
}
|
|
|
|
openTime := dayStart + int64(coin.OpenDays*consts.DaySec)
|
|
rewardTime := openTime + consts.DaySec
|
|
|
|
scene := withdefault.FissionCoinScene(&model.FissionCoinScene{
|
|
CampaignID: cpn.ID,
|
|
OpenTime: openTime,
|
|
InitCoin: coin.GetInitCoin(),
|
|
InitUse: coin.GetInitUse(),
|
|
RewardTime: rewardTime,
|
|
})
|
|
|
|
if err = s.GetDao().FissionCoinScene.WithContext(s.Ctx).Create(scene); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if !verify.InArray[int32](mtype.FissionCampaignCoinLackBtnCustom, coin.GetLackBtn()...) {
|
|
return
|
|
}
|
|
|
|
customBtn := withdefault.FissionCustomBtn(&model.FissionCustomBtn{
|
|
CampaignID: cpn.ID,
|
|
BtnText: coin.GetCustomBtnText(),
|
|
})
|
|
|
|
if err = s.GetDao().FissionCustomBtn.WithContext(s.Ctx).Create(customBtn); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _copyImg(cpnId, copyId, langId int64) (imgs []*model.FissionCampaignLongImg, zones []*model.FissionCampaignLongImgZone, err error) {
|
|
|
|
if len(s.Req.GetLongImgs()) == 0 {
|
|
return
|
|
}
|
|
|
|
newImgs := s.Req.GetLongImgs()
|
|
|
|
m := s.GetDao().FissionCampaignLongImg
|
|
oldImgs, err := m.WithContext(s.Ctx).
|
|
Where(
|
|
m.CampaignID.Eq(copyId),
|
|
m.LangID.Eq(0),
|
|
m.IsDel.Eq(mtype.No),
|
|
).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var oldMap = make(map[string]*model.FissionCampaignLongImg, len(oldImgs))
|
|
for _, v := range oldImgs {
|
|
oldMap[v.ImgURL] = v
|
|
}
|
|
|
|
langImgs, err := m.WithContext(s.Ctx).
|
|
Where(
|
|
m.CampaignID.Eq(copyId),
|
|
m.LangID.Eq(langId),
|
|
m.IsDel.Eq(mtype.No),
|
|
).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var langMap = make(map[int64]*model.FissionCampaignLongImg, len(langImgs))
|
|
for _, v := range langImgs {
|
|
|
|
if v.LangSourceID > 0 {
|
|
langMap[v.LangSourceID] = v
|
|
|
|
continue
|
|
}
|
|
|
|
one := withdefault.FissionCampaignLongImg(&model.FissionCampaignLongImg{
|
|
CampaignID: cpnId,
|
|
LangID: 0,
|
|
ClickType: v.ClickType,
|
|
ImgURL: v.ImgURL,
|
|
WebURL: v.WebURL,
|
|
AppParam: v.AppParam,
|
|
PcParam: v.PcParam,
|
|
TargetType: v.TargetType,
|
|
TargetID: v.TargetID,
|
|
})
|
|
|
|
if v.ClickType == mtype.FissionCampaignLongImgClickTypeZone {
|
|
zoneM := s.GetDao().FissionCampaignLongImgZone
|
|
|
|
var oldZones []*model.FissionCampaignLongImgZone
|
|
oldZones, err = zoneM.WithContext(s.Ctx).Where(zoneM.CampaignID.Eq(copyId), zoneM.ImgID.Eq(v.ID), zoneM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
for _, hotZone := range oldZones {
|
|
zones = append(zones, withdefault.FissionCampaignLongImgZone(&model.FissionCampaignLongImgZone{
|
|
CampaignID: cpnId,
|
|
ImgID: one.ID,
|
|
WebURL: hotZone.WebURL,
|
|
AppParam: hotZone.AppParam,
|
|
PcParam: hotZone.PcParam,
|
|
ClickX: hotZone.ClickX,
|
|
ClickY: hotZone.ClickY,
|
|
ClickH: hotZone.ClickH,
|
|
ClickW: hotZone.ClickW,
|
|
TargetType: hotZone.TargetType,
|
|
TargetID: hotZone.TargetID,
|
|
}))
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
for _, v := range newImgs {
|
|
|
|
copyImg, ok := oldMap[v.GetImgUrl()]
|
|
if !ok {
|
|
one := withdefault.FissionCampaignLongImg(&model.FissionCampaignLongImg{
|
|
CampaignID: cpnId,
|
|
LangID: 0,
|
|
LangSourceID: s.langSourceMap[v.GetImgUrl()],
|
|
ClickType: int8(v.GetClickType()),
|
|
ImgURL: v.GetImgUrl(),
|
|
WebURL: v.GetWebUrl(),
|
|
AppParam: v.GetAppParam(),
|
|
PcParam: v.GetPcParam(),
|
|
TargetType: int8(v.GetTargetType()),
|
|
TargetID: v.GetTargetId(),
|
|
})
|
|
|
|
if v.GetClickType() == mtype.FissionCampaignLongImgClickTypeZone {
|
|
for _, hotZone := range v.GetHotZone() {
|
|
zones = append(zones, withdefault.FissionCampaignLongImgZone(&model.FissionCampaignLongImgZone{
|
|
CampaignID: cpnId,
|
|
ImgID: one.ID,
|
|
WebURL: hotZone.GetWebUrl(),
|
|
AppParam: hotZone.GetAppParam(),
|
|
PcParam: hotZone.GetPcParam(),
|
|
ClickX: hotZone.GetClickX(),
|
|
ClickY: hotZone.GetClickY(),
|
|
ClickH: hotZone.GetClickH(),
|
|
ClickW: hotZone.GetClickW(),
|
|
TargetType: int8(hotZone.GetTargetType()),
|
|
TargetID: hotZone.GetTargetId(),
|
|
}))
|
|
}
|
|
}
|
|
|
|
imgs = append(imgs, one)
|
|
|
|
continue
|
|
}
|
|
|
|
old, ok := langMap[copyImg.ID]
|
|
if !ok {
|
|
one := withdefault.FissionCampaignLongImg(&model.FissionCampaignLongImg{
|
|
CampaignID: cpnId,
|
|
LangID: 0,
|
|
LangSourceID: s.langSourceMap[v.GetImgUrl()],
|
|
ClickType: int8(v.GetClickType()),
|
|
ImgURL: v.GetImgUrl(),
|
|
WebURL: v.GetWebUrl(),
|
|
AppParam: v.GetAppParam(),
|
|
PcParam: v.GetPcParam(),
|
|
TargetType: int8(v.GetTargetType()),
|
|
TargetID: v.GetTargetId(),
|
|
})
|
|
|
|
if v.GetClickType() == mtype.FissionCampaignLongImgClickTypeZone {
|
|
for _, hotZone := range v.GetHotZone() {
|
|
zones = append(zones, withdefault.FissionCampaignLongImgZone(&model.FissionCampaignLongImgZone{
|
|
CampaignID: cpnId,
|
|
ImgID: one.ID,
|
|
WebURL: hotZone.GetWebUrl(),
|
|
AppParam: hotZone.GetAppParam(),
|
|
PcParam: hotZone.GetPcParam(),
|
|
ClickX: hotZone.GetClickX(),
|
|
ClickY: hotZone.GetClickY(),
|
|
ClickH: hotZone.GetClickH(),
|
|
ClickW: hotZone.GetClickW(),
|
|
TargetType: int8(hotZone.GetTargetType()),
|
|
TargetID: hotZone.GetTargetId(),
|
|
}))
|
|
}
|
|
}
|
|
|
|
imgs = append(imgs, one)
|
|
|
|
continue
|
|
}
|
|
|
|
var targetType = old.TargetType
|
|
var targetId = old.TargetID
|
|
|
|
if old.TargetID != v.GetTargetId() {
|
|
targetType = int8(v.GetTargetType())
|
|
targetId = v.GetTargetId()
|
|
}
|
|
|
|
one := withdefault.FissionCampaignLongImg(&model.FissionCampaignLongImg{
|
|
CampaignID: cpnId,
|
|
LangID: 0,
|
|
LangSourceID: s.langSourceMap[v.GetImgUrl()],
|
|
ClickType: int8(v.GetClickType()),
|
|
ImgURL: old.ImgURL,
|
|
WebURL: old.WebURL,
|
|
AppParam: old.AppParam,
|
|
PcParam: old.PcParam,
|
|
TargetType: targetType,
|
|
TargetID: targetId,
|
|
})
|
|
|
|
if v.GetClickType() == mtype.FissionCampaignLongImgClickTypeZone {
|
|
|
|
switch old.ClickType {
|
|
case mtype.FissionCampaignLongImgClickTypeZone:
|
|
zoneM := s.GetDao().FissionCampaignLongImgZone
|
|
|
|
var oldZones []*model.FissionCampaignLongImgZone
|
|
oldZones, err = zoneM.WithContext(s.Ctx).Where(zoneM.CampaignID.Eq(copyId), zoneM.ImgID.Eq(old.ID), zoneM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
for _, hotZone := range oldZones {
|
|
zones = append(zones, withdefault.FissionCampaignLongImgZone(&model.FissionCampaignLongImgZone{
|
|
CampaignID: cpnId,
|
|
ImgID: one.ID,
|
|
WebURL: hotZone.WebURL,
|
|
AppParam: hotZone.AppParam,
|
|
PcParam: hotZone.PcParam,
|
|
ClickX: hotZone.ClickX,
|
|
ClickY: hotZone.ClickY,
|
|
ClickH: hotZone.ClickH,
|
|
ClickW: hotZone.ClickW,
|
|
TargetType: hotZone.TargetType,
|
|
TargetID: hotZone.TargetID,
|
|
}))
|
|
}
|
|
|
|
case mtype.FissionCampaignLongImgClickTypeAll:
|
|
for _, hotZone := range v.GetHotZone() {
|
|
zones = append(zones, withdefault.FissionCampaignLongImgZone(&model.FissionCampaignLongImgZone{
|
|
CampaignID: cpnId,
|
|
ImgID: one.ID,
|
|
WebURL: hotZone.GetWebUrl(),
|
|
AppParam: hotZone.GetAppParam(),
|
|
PcParam: hotZone.GetPcParam(),
|
|
ClickX: hotZone.GetClickX(),
|
|
ClickY: hotZone.GetClickY(),
|
|
ClickH: hotZone.GetClickH(),
|
|
ClickW: hotZone.GetClickW(),
|
|
TargetType: int8(hotZone.GetTargetType()),
|
|
TargetID: hotZone.GetTargetId(),
|
|
}))
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createPointsUse(cpn *model.FissionCampaign) (err error) {
|
|
req := s.Req.GetPointsUse()
|
|
if req.GetOpen() != mtype.Yes {
|
|
return
|
|
}
|
|
|
|
pointUse := withdefault.FissionCampaignPointsUse(&model.FissionCampaignPointsUse{
|
|
CampaignID: cpn.ID,
|
|
Icon: req.GetIcon(),
|
|
URLID: req.GetUrlId(),
|
|
UseNum: req.GetUseNum(),
|
|
DayLimit: req.GetDayLimit(),
|
|
TotalLimit: req.GetTotalLimit(),
|
|
})
|
|
|
|
err = s.GetDao().FissionCampaignPointsUse.WithContext(s.Ctx).Create(pointUse)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createChat(cpn *model.FissionCampaign) (err error) {
|
|
req := s.Req.GetChat()
|
|
if req.GetOpen() != mtype.Yes {
|
|
return
|
|
}
|
|
|
|
chat := withdefault.FissionCampaignChat(&model.FissionCampaignChat{
|
|
CampaignID: cpn.ID,
|
|
HeaderImg: req.GetHeaderImg(),
|
|
ChatBg: req.GetChatBg(),
|
|
DayLimit: req.GetDayLimit(),
|
|
})
|
|
|
|
err = s.GetDao().FissionCampaignChat.WithContext(s.Ctx).Create(chat)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createVs(cpn *model.FissionCampaign) (err error) {
|
|
vs := s.Req.GetVs()
|
|
|
|
conf := withdefault.FissionCampaignVs(&model.FissionCampaignV{
|
|
CampaignID: cpn.ID,
|
|
InitChance: vs.GetInitChance(),
|
|
EachLimitNum: vs.GetEachLimitNum(),
|
|
OpenPoint: int8(vs.GetOpenPoint()),
|
|
PointsNum: vs.GetPointsNum(),
|
|
MallOpen: int8(vs.GetMallOpen()),
|
|
MallID: vs.GetMallId(),
|
|
VsTz: vs.GetVsTz(),
|
|
ClaimType: int8(vs.GetClaimType()),
|
|
IconMall: vs.GetIconMall(),
|
|
IconReward: vs.GetIconReward(),
|
|
IconSchedule: vs.GetIconSchedule(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignV
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var emptyId int64 = -1
|
|
var schedules []*model.FissionCampaignVsSchedule
|
|
var teams []*model.FissionCampaignVsTeam
|
|
for i, v := range vs.GetSchedules() {
|
|
for _, pk := range v.GetPkTeams() {
|
|
|
|
var vsTeamIds []int64
|
|
for _, team := range pk.GetTeams() {
|
|
|
|
if team.GetName() == "" && team.GetLogoImg() == "" {
|
|
vsTeamIds = append(vsTeamIds, emptyId)
|
|
emptyId--
|
|
continue
|
|
}
|
|
|
|
one := withdefault.FissionCampaignVsTeam(&model.FissionCampaignVsTeam{
|
|
CampaignID: cpn.ID,
|
|
Name: team.GetName(),
|
|
LogoImg: team.GetLogoImg(),
|
|
})
|
|
|
|
vsTeamIds = append(vsTeamIds, one.ID)
|
|
teams = append(teams, one)
|
|
}
|
|
|
|
var rewardNum int32 = 1
|
|
if pk.GetPropMark() == mtype.FissionCampaignRewardPropMarkPoint {
|
|
rewardNum = pk.GetPropNum()
|
|
}
|
|
|
|
rewardId := hashid.IdBigint()
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
ID: rewardId,
|
|
CampaignID: cpn.ID,
|
|
Stock: -1,
|
|
RewardType: mtype.FissionCampaignRewardTypeApp,
|
|
RewardNum: rewardNum,
|
|
RewardID: pk.GetRewardId(),
|
|
PropMark: pk.GetPropMark(),
|
|
ExpiredDay: pk.GetExpiredDay(),
|
|
})
|
|
|
|
voteStart, _ := timez.YmdHiParse(pk.GetVoteStart(), vs.GetVsTz())
|
|
voteEnd, _ := timez.YmdHiParse(pk.GetVoteEnd(), vs.GetVsTz())
|
|
vsAt, _ := timez.YmdHiParse(pk.GetVsDate(), vs.GetVsTz())
|
|
|
|
schedules = append(schedules, withdefault.FissionCampaignVsSchedule(&model.FissionCampaignVsSchedule{
|
|
CampaignID: cpn.ID,
|
|
VsIdx: int32(i),
|
|
RewardID: rewardId,
|
|
VsTeamIds: "",
|
|
VoteStart: voteStart.Unix(),
|
|
VoteEnd: voteEnd.Unix(),
|
|
VsAt: vsAt.Unix(),
|
|
VsImg: pk.GetVsImg(),
|
|
Desc: pk.GetDesc(),
|
|
OpenOdds: int8(pk.GetOpenOdds()),
|
|
OddsLeft: pk.GetOddsLeft(),
|
|
OddsRight: pk.GetOddsRight(),
|
|
OddsDraw: pk.GetOddsDraw(),
|
|
}, vsTeamIds, pk.GetOtherVote()))
|
|
}
|
|
}
|
|
|
|
if err = s.GetDao().FissionCampaignVsSchedule.WithContext(s.Ctx).Create(schedules...); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if err = s.GetDao().FissionCampaignVsTeam.WithContext(s.Ctx).Create(teams...); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if vs.GetMallOpen() == mtype.No {
|
|
return
|
|
}
|
|
|
|
relate, err := malls.NewRelate(s.Ctx, cpn.ID, s.GetDao().FissionCampaign.TableName(), logic.WithDao(s.GetDao()))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return relate.Related(mtype.RedeemMallRelateSourceCampaign, vs.GetMallId())
|
|
}
|
|
|
|
func (s *Store) _createUno(cpn *model.FissionCampaign) (err error) {
|
|
uno := s.Req.GetUno()
|
|
|
|
conf := withdefault.FissionCampaignUno(&model.FissionCampaignUno{
|
|
CampaignID: cpn.ID,
|
|
InitChance: uno.GetInitChance(),
|
|
}, uno.GetPropMarks())
|
|
|
|
m := s.GetDao().FissionCampaignUno
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var groups []*model.FissionCampaignUnoGroup
|
|
var cards []*model.FissionCampaignUnoCard
|
|
|
|
var fn = func(mark string, unoG *pb.StoreReq_UnoGroup) {
|
|
|
|
rewardId := hashid.IdBigint()
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
ID: rewardId,
|
|
CampaignID: cpn.ID,
|
|
RewardType: mtype.FissionCampaignRewardTypeApp,
|
|
RewardID: unoG.GetReward().GetRewardId(),
|
|
Stock: unoG.GetReward().GetStock(),
|
|
})
|
|
|
|
group := withdefault.FissionCampaignUnoGroup(&model.FissionCampaignUnoGroup{
|
|
CampaignID: cpn.ID,
|
|
Mark: mark,
|
|
Odds: unoG.GetOdds(),
|
|
RewardID: rewardId,
|
|
OpenRule: int8(unoG.GetOpenRule()),
|
|
LimitRule: "",
|
|
CustomCard: int8(unoG.GetCustomCard()),
|
|
}, mtype.UnoLimitRule{
|
|
InitNum: unoG.GetLimitRule().GetInitNum(),
|
|
SignDay: unoG.GetLimitRule().GetSignDay(),
|
|
AddNum: unoG.GetLimitRule().GetAddNum(),
|
|
ResetType: unoG.GetLimitRule().GetResetType(),
|
|
})
|
|
|
|
groups = append(groups, group)
|
|
|
|
if unoG.GetCustomCard() == mtype.No {
|
|
return
|
|
}
|
|
|
|
for i, card := range unoG.GetCards() {
|
|
cards = append(cards, withdefault.FissionCampaignUnoCard(&model.FissionCampaignUnoCard{
|
|
CampaignID: cpn.ID,
|
|
Mark: mark,
|
|
CardNo: int32(i) + 1,
|
|
Title: card.GetTitle(),
|
|
ImgURL: card.GetImgUrl(),
|
|
WebURL: card.GetWebUrl(),
|
|
AppParam: card.GetAppParam(),
|
|
PcParam: card.GetPcParam(),
|
|
}))
|
|
}
|
|
}
|
|
|
|
fn(mtype.FissionCampaignUnoGroupRed, uno.GetRed())
|
|
fn(mtype.FissionCampaignUnoGroupYellow, uno.GetYellow())
|
|
fn(mtype.FissionCampaignUnoGroupBlue, uno.GetBlue())
|
|
fn(mtype.FissionCampaignUnoGroupGreen, uno.GetGreen())
|
|
|
|
if len(groups) > 0 {
|
|
if err = s.GetDao().FissionCampaignUnoGroup.WithContext(s.Ctx).Create(groups...); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
if len(cards) > 0 {
|
|
if err = s.GetDao().FissionCampaignUnoCard.WithContext(s.Ctx).Create(cards...); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) createEvent(cpn *model.FissionCampaign) (err error) {
|
|
events := s.Req.GetEvent()
|
|
|
|
var add []*model.FissionCampaignEvent
|
|
|
|
if event := events.GetFirstVisit(); event.GetOpen() == mtype.Yes {
|
|
var rewards = make([]*mtype.EventReward, 0, len(event.GetRewards()))
|
|
for _, reward := range event.GetRewards() {
|
|
switch reward.GetPropMark() {
|
|
case mtype.FissionCampaignRewardPropMarkReward:
|
|
rewardId := hashid.IdBigint()
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
ID: rewardId,
|
|
CampaignID: cpn.ID,
|
|
Stock: reward.GetReward().GetStock(),
|
|
RewardType: mtype.FissionCampaignRewardTypeCampaignEvent,
|
|
RewardNum: 1,
|
|
RewardID: reward.GetReward().GetRewardId(),
|
|
PropMark: mtype.FissionCampaignRewardPropMarkReward,
|
|
})
|
|
|
|
rewards = append(rewards, &mtype.EventReward{
|
|
Id: hashid.IdBigint(),
|
|
PropMark: reward.GetPropMark(),
|
|
RewardId: rewardId,
|
|
})
|
|
case mtype.FissionCampaignRewardPropMarkPoint:
|
|
rewardId := hashid.IdBigint()
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
ID: rewardId,
|
|
CampaignID: cpn.ID,
|
|
Stock: -1,
|
|
RewardType: mtype.FissionCampaignRewardTypeCampaignEvent,
|
|
RewardNum: reward.GetChance(),
|
|
PropMark: mtype.FissionCampaignRewardPropMarkPoint,
|
|
ExpiredDay: reward.GetExpiredDay(),
|
|
})
|
|
rewards = append(rewards, &mtype.EventReward{
|
|
Id: hashid.IdBigint(),
|
|
PropMark: reward.GetPropMark(),
|
|
RewardId: rewardId,
|
|
Chance: reward.GetChance(),
|
|
})
|
|
case mtype.FissionCampaignRewardPropMarkChance:
|
|
rewards = append(rewards, &mtype.EventReward{
|
|
Id: hashid.IdBigint(),
|
|
PropMark: reward.GetPropMark(),
|
|
Chance: reward.GetChance(),
|
|
})
|
|
}
|
|
}
|
|
|
|
add = append(add, withdefault.FissionCampaignEvent(&model.FissionCampaignEvent{
|
|
CampaignID: cpn.ID,
|
|
Mark: mtype.FissionCampaignEventMarkFirstVisit,
|
|
Open: mtype.Yes,
|
|
}, rewards))
|
|
}
|
|
|
|
if len(add) > 0 {
|
|
err = s.GetDao().FissionCampaignEvent.WithContext(s.Ctx).Create(add...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) _createGashapon(cpn *model.FissionCampaign) (err error) {
|
|
gashapon := s.Req.GetGashapon()
|
|
|
|
if gashapon == nil {
|
|
return s.BE().VerifyError("please set gashapon")
|
|
}
|
|
|
|
conf := withdefault.FissionCampaignGashapon(&model.FissionCampaignGashapon{
|
|
CampaignID: cpn.ID,
|
|
InitChance: gashapon.GetInitChance(),
|
|
DayChance: gashapon.GetDayChance(),
|
|
})
|
|
|
|
m := s.GetDao().FissionCampaignGashapon
|
|
|
|
if err = m.WithContext(s.Ctx).Create(conf); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) createRewardAdd(cpn *model.FissionCampaign) (err error) {
|
|
var list = make([]*model.FissionCampaignRewardAdd, 0, len(s.rewardAdd))
|
|
for id, add := range s.rewardAdd {
|
|
|
|
if add.GetOpen() == mtype.No {
|
|
continue
|
|
}
|
|
|
|
list = append(list, withdefault.FissionCampaignRewardAdd(&model.FissionCampaignRewardAdd{
|
|
CampaignID: cpn.ID,
|
|
RewardID: id,
|
|
Start: timez.GMT(add.GetStart(), cpn.TOffset),
|
|
End: timez.GMT(add.End, cpn.TOffset),
|
|
DayNum: add.GetDayNum(),
|
|
DayAdd: add.GetDayAdd(),
|
|
}))
|
|
|
|
}
|
|
|
|
if len(list) == 0 {
|
|
return
|
|
}
|
|
|
|
err = s.GetDao().FissionCampaignRewardAdd.WithContext(s.Ctx).Create(list...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Store) createRewardTask(cpn *model.FissionCampaign) (err error) {
|
|
var conds = make([]*model.FissionCampaignCond, 0, len(s.rewardTask))
|
|
var tasks = make([]*model.FissionCampaignTask, 0, len(s.rewardTask))
|
|
for id, add := range s.rewardTask {
|
|
|
|
if add.GetOpen() == mtype.No {
|
|
continue
|
|
}
|
|
|
|
one := withdefault.FissionCampaignCond(&model.FissionCampaignCond{
|
|
CampaignID: cpn.ID,
|
|
ProjectID: cpn.ProjectID,
|
|
Event: add.GetEvent(),
|
|
EventKey: add.GetEventKey(),
|
|
EventVal: add.GetEventVal(),
|
|
IfCond: int8(add.GetIfCond()),
|
|
TriggetType: int8(add.GetTriggerType()),
|
|
EventType: int8(add.GetEventType()),
|
|
OpenPush: int8(add.GetOpenPush()),
|
|
RewardID: id,
|
|
})
|
|
|
|
conds = append(conds, one)
|
|
|
|
tasks = append(tasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
CampaignID: cpn.ID,
|
|
TaskType: mtype.FissionCampaignTaskTypeCondOne,
|
|
TaskMark: utils.FissionCampaignTaskMarkCondOneVal(one.ID),
|
|
PropMark: mtype.FissionCampaignTaskPropMarkUnlockReward,
|
|
Num: 1,
|
|
Chance: 1,
|
|
RewardID: id,
|
|
}))
|
|
}
|
|
|
|
if len(conds) == 0 {
|
|
return
|
|
}
|
|
|
|
err = s.GetDao().FissionCampaignCond.WithContext(s.Ctx).Create(conds...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
err = s.GetDao().FissionCampaignTask.WithContext(s.Ctx).Create(tasks...)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|