|
|
package campaign
|
|
|
|
|
|
import (
|
|
|
"joybuywork/internal/app"
|
|
|
"joybuywork/internal/consts"
|
|
|
"joybuywork/internal/consts/ckey"
|
|
|
"joybuywork/internal/plugins/hashid"
|
|
|
"joybuywork/internal/plugins/jsonm"
|
|
|
"joybuywork/internal/repository/cache"
|
|
|
"joybuywork/internal/repository/dao"
|
|
|
"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/malls"
|
|
|
"joybuywork/internal/service/provider/stocks"
|
|
|
"joybuywork/internal/service/queue/producer"
|
|
|
"joybuywork/internal/service/queue/types"
|
|
|
"joybuywork/internal/utils"
|
|
|
"joybuywork/internal/utils/logic"
|
|
|
"joybuywork/internal/utils/timez"
|
|
|
"joybuywork/internal/utils/verify"
|
|
|
pb "joybuywork/proto/go_proto/w_campaign"
|
|
|
"joybuywork/proto/go_proto/workerr"
|
|
|
"fmt"
|
|
|
"strings"
|
|
|
"time"
|
|
|
|
|
|
dlinkpb "gits.branchcn.com/backend/deeplink/proto/go_proto/dlink"
|
|
|
"gits.branchcn.com/backend/microcode/plugins/derivative/vercontrol"
|
|
|
"gorm.io/gen/field"
|
|
|
)
|
|
|
|
|
|
type Update struct {
|
|
|
logic.Logic
|
|
|
Req *pb.UpdateReq
|
|
|
Res *pb.UpdateRes
|
|
|
|
|
|
justUpdatePart bool // 只能更新部分数据数据
|
|
|
|
|
|
// 统计任务结束时间修改,统计任务的达标条件统计要删除,统计任务的达标条件统计要添加,修改了进行中活动的监听方式
|
|
|
taskEndChange, taskCondDel, taskCondAdd bool
|
|
|
|
|
|
helpInstall, helpRegister, helpOpen, helpClick bool
|
|
|
|
|
|
otherReward []*model.FissionCampaignReward
|
|
|
otherRelateIds []int64
|
|
|
otherRelateMap map[int64]struct{}
|
|
|
|
|
|
changeTemp bool
|
|
|
|
|
|
rewardAdd map[int64]*pb.UpdateReq_OpenAdd
|
|
|
rewardTask map[int64]*pb.UpdateReq_RewardTask
|
|
|
}
|
|
|
|
|
|
func (s *Update) Run() error {
|
|
|
return logic.Run(s)
|
|
|
}
|
|
|
|
|
|
func (s *Update) Exec() (err error) {
|
|
|
cpn, err := s.update()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.updateConfig(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.updateFission(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.updateEvent(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.updateReward(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.updateRewardAdd(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.updateRewardTask(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.updateTask(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.updatePush(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.updateChild(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.syncEvent(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.syncLinkTemp(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s.saveDelayLinkData(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新活动数据
|
|
|
func (s *Update) update() (cpn *model.FissionCampaign, err error) {
|
|
|
cpn, err = finder.Campaign(s.Ctx, s.Req.GetId(), s.Req.GetHashId())
|
|
|
if err != nil {
|
|
|
return nil, s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
if cpn == nil || cpn.IsDel == mtype.Yes {
|
|
|
return nil, workerr.NotFound("nof found campaign")
|
|
|
}
|
|
|
|
|
|
s.otherRelateMap = make(map[int64]struct{})
|
|
|
s.rewardAdd = make(map[int64]*pb.UpdateReq_OpenAdd)
|
|
|
s.rewardTask = make(map[int64]*pb.UpdateReq_RewardTask)
|
|
|
|
|
|
var endTime = timez.GMT(s.Req.GetEndTime(), s.Req.GetTOffset())
|
|
|
m := s.GetDao().FissionCampaign
|
|
|
var data = []field.AssignExpr{
|
|
|
m.Title.Value(s.Req.GetTitle()),
|
|
|
m.TEnd.Value(s.Req.GetEndTime()),
|
|
|
m.EndTime.Value(endTime),
|
|
|
}
|
|
|
|
|
|
// 待发布状态可以更新的数据
|
|
|
if cpn.Status == mtype.FissionCampaignStatusWait {
|
|
|
start := timez.GMT(s.Req.GetStartTime(), s.Req.GetTOffset())
|
|
|
|
|
|
data = append(data,
|
|
|
m.TOffset.Value(s.Req.GetTOffset()),
|
|
|
m.TStart.Value(s.Req.GetStartTime()),
|
|
|
m.StartTime.Value(start),
|
|
|
)
|
|
|
|
|
|
// 已经开始了活动
|
|
|
if start <= time.Now().Unix() {
|
|
|
status := utils.Ternary[int8](s.Req.GetConfig().GetHasWhite() == mtype.Yes, mtype.FissionCampaignStatusPubPre, mtype.FissionCampaignStatusPub)
|
|
|
data = append(data, m.Status.Value(status))
|
|
|
if cpn.FissionID == consts.IdDice {
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
producer.NewCampaignNotice(s.Ctx).CampaignDiceMap(types.CampaignDiceMap{CampaignId: cpn.ID})
|
|
|
return
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
} else if cpn.Status == mtype.FissionCampaignStatusPubPre {
|
|
|
// 正式发布
|
|
|
if s.Req.GetConfig().GetHasWhite() == mtype.No {
|
|
|
data = append(data, m.Status.Value(mtype.FissionCampaignStatusPub))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(cpn.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return nil, s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
if endTime != cpn.EndTime {
|
|
|
s.taskEndChange = true
|
|
|
}
|
|
|
|
|
|
s.justUpdatePart = cpn.Status != mtype.FissionCampaignStatusWait &&
|
|
|
!verify.InArray[int64](cpn.FissionID, consts.IdKeep, consts.IdCoin, consts.IdVs, consts.IdUno)
|
|
|
|
|
|
switch cpn.FissionID {
|
|
|
case consts.IdKeep:
|
|
|
invite := s.Req.GetKeepDog()
|
|
|
s.Req.TargetOption.Fixed = &pb.UpdateReq_Fixed{
|
|
|
Open: invite.GetOpenInvite(),
|
|
|
AppEvent: invite.GetInvite().GetInviteType(),
|
|
|
TargetNum: 1,
|
|
|
Chance: invite.GetInvite().GetInviteGet(),
|
|
|
Percent: 0,
|
|
|
}
|
|
|
case consts.IdPrizeAnswer:
|
|
|
s.Req.TargetOption.Fixed = &pb.UpdateReq_Fixed{
|
|
|
Open: 1,
|
|
|
AppEvent: 1,
|
|
|
TargetNum: s.Req.GetQuestionAnswer().GetTargetNum(),
|
|
|
Chance: s.Req.GetQuestionAnswer().GetChance(),
|
|
|
Percent: 0,
|
|
|
}
|
|
|
case consts.IdPrizeQuiz:
|
|
|
s.Req.TargetOption.Fixed = &pb.UpdateReq_Fixed{
|
|
|
Open: 1,
|
|
|
AppEvent: 1,
|
|
|
TargetNum: s.Req.GetQuiz().GetTargetNum(),
|
|
|
Chance: s.Req.GetQuiz().GetChance(),
|
|
|
Percent: 0,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if !verify.InArray[int64](cpn.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.Res.Id = cpn.ID
|
|
|
s.Res.HashId = cpn.HashID
|
|
|
|
|
|
_ = cache.NewCampaign(s.Ctx).Clear(cpn)
|
|
|
|
|
|
s.OL().User(s.Req.GetUserId(), s.Req.GetIp()).CampaignSave(cpn.ID, s.Req)
|
|
|
|
|
|
return
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 默认的封面图
|
|
|
func (s *Update) _defaultCoverUrl(tempId int64) (url string, err error) {
|
|
|
temp, err := cache.NewFissionTemp(s.Ctx).FindById(tempId)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if temp == nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
group, err := cache.NewFissionTempGroup(s.Ctx).FindById(temp.GroupID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return group.CoverURL, err
|
|
|
}
|
|
|
|
|
|
// 更新配置
|
|
|
func (s *Update) updateConfig(cpn *model.FissionCampaign) (err error) {
|
|
|
cc := cache.NewCampaignConfig(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
return s.BE().CacheError(err)
|
|
|
}
|
|
|
|
|
|
cf := s.Req.GetConfig()
|
|
|
m := s.GetDao().FissionCampaignConfig
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
m.RuleTextColor.Value(cf.GetRuleTextColor()),
|
|
|
m.RuleBgColor.Value(cf.GetRuleBgColor()),
|
|
|
m.ShareText.Value(cf.GetShareText()),
|
|
|
m.ShareImg.Value(cf.GetShareImg()),
|
|
|
m.HasRank.Value(int8(cf.GetHasRank())),
|
|
|
m.RankBackgroundColor.Value(cf.GetRankBackgroundColor()),
|
|
|
m.RankTextColor.Value(cf.GetRankTextColor()),
|
|
|
m.DownloadPageImage.Value(cf.GetDownloadPageImage()),
|
|
|
m.IsDefaultDownload.Value(int8(cf.GetIsDefaultDownload())),
|
|
|
m.WechatPageImage.Value(cf.GetWechatPageImage()),
|
|
|
m.IsDefaultWechat.Value(int8(cf.GetIsDefaultWechat())),
|
|
|
m.ImageMain.Value(cf.GetImageMain()),
|
|
|
m.IsDefaultMain.Value(int8(cf.GetIsDefaultMain())),
|
|
|
m.ImagePreview.Value(cf.GetImagePreview()),
|
|
|
m.LinkBtnTextColor.Value(cf.GetLinkBtnTextColor()),
|
|
|
m.LinkBtnBgColor.Value(cf.GetLinkBtnBgColor()),
|
|
|
m.LinkTextColor.Value(cf.GetLinkTextColor()),
|
|
|
m.ShowShare.Value(int8(cf.GetShowShare())),
|
|
|
m.PageTitle.Value(cf.GetPageTitle()),
|
|
|
m.DmShow.Value(int8(cf.GetDmShow())),
|
|
|
m.WebBgImg.Value(cf.GetWebBgImg()),
|
|
|
m.IconType.Value(int8(cf.GetIconType())),
|
|
|
m.IconBgColor.Value(cf.GetIconBgColor()),
|
|
|
m.DlType.Value(int8(cf.GetDlType())),
|
|
|
m.DlBannerType.Value(int8(cf.GetDlBannerType())),
|
|
|
m.DlBannerImg.Value(cf.GetDlBannerImg()),
|
|
|
m.DlBannerAppLogo.Value(cf.GetDlBannerAppLogo()),
|
|
|
m.DlBannerAppName.Value(cf.GetDlBannerAppName()),
|
|
|
m.DlBannerAppBtn.Value(cf.GetDlBannerAppBtn()),
|
|
|
m.DlBannerPosition.Value(int8(cf.GetDlBannerPosition())),
|
|
|
m.TopicColor.Value(cf.GetTopicColor()),
|
|
|
m.WindowCover.Value(int8(cf.GetWindowCover())),
|
|
|
m.PlayRule.Value(cf.GetPlayRule()),
|
|
|
m.HasLongImg.Value(utils.Ternary[int8](len(s.Req.GetLongImgs()) > 0, mtype.Yes, mtype.No)),
|
|
|
m.HasWhite.Value(int8(cf.GetHasWhite())),
|
|
|
m.WhiteList.Value(cf.GetWhiteList()),
|
|
|
m.PcBg.Value(cf.GetPcBg()),
|
|
|
m.LinkTempID.Value(cf.GetLinkTempId()),
|
|
|
m.RuleTimeOpen.Value(int8(cf.GetRuleTimeOpen())),
|
|
|
m.OutsideTask.Value(int8(cf.GetOutsideTask())),
|
|
|
m.OpenShare.Value(utils.Ternary[int8](verify.InArray[int64](cpn.FissionID,
|
|
|
consts.IdSignIn, consts.IdQa, consts.IdQaAudio, consts.IdQaVideo, consts.IdPrizeQuiz, consts.IdPrizeAnswer), int8(cf.GetOpenShare()), 1)),
|
|
|
m.ShowToUse.Value(int8(cf.GetShowToUse())),
|
|
|
m.PointsUse.Value(int8(s.Req.GetPointsUse().GetOpen())),
|
|
|
m.OpenChat.Value(int8(s.Req.GetChat().GetOpen())),
|
|
|
m.RuleType.Value(int8(cf.GetRuleType())),
|
|
|
m.RuleOutside.Value(int8(cf.GetRuleOutside())),
|
|
|
m.DeviceOnce.Value(int8(cf.GetDeviceOnce())),
|
|
|
}
|
|
|
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.changeTemp = conf.LinkTempID != cf.GetLinkTempId()
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cache.NewCampaignConfig(s.Ctx).Clear(conf)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
}()
|
|
|
|
|
|
// 更新长图
|
|
|
err = s._updateLongImg(conf)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新样式
|
|
|
err = s._updateStyle(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s._updatePointsUse(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s._updateChat(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 社媒分享
|
|
|
share, _ := jsonm.MarshalToString(cf.GetShare())
|
|
|
data = append(data, m.Share.Value(share))
|
|
|
|
|
|
// 开启的挂件
|
|
|
iconOpen, _ := jsonm.MarshalToString(cf.GetIconOpen())
|
|
|
data = append(data, m.IconOpen.Value(iconOpen))
|
|
|
|
|
|
// link_data
|
|
|
var kvData []*mtype.KV
|
|
|
for _, v := range s.Req.GetCampaignData() {
|
|
|
kvData = append(kvData, &mtype.KV{
|
|
|
Key: v.Key,
|
|
|
Value: v.Value,
|
|
|
})
|
|
|
}
|
|
|
|
|
|
kv, _ := jsonm.MarshalToString(kvData)
|
|
|
data = append(data, m.CampaignData.Value(kv))
|
|
|
|
|
|
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(cf.GetAdsType()) {
|
|
|
data = append(data, m.AdsType.Value(int8(cf.GetAdsType())))
|
|
|
s.OL().User(s.Req.GetUserId(), s.Req.GetIp()).UpdateCampaignAdsType(cpn.ID, conf.AdsType, int8(cf.GetAdsType()))
|
|
|
}
|
|
|
|
|
|
// 活动进行中的数据修改
|
|
|
if s.justUpdatePart {
|
|
|
|
|
|
// 更新任务名称
|
|
|
err = s._updateRunningCond(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
project, err := finder.Project(s.Ctx, cpn.ProjectID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
hasWeb := utils.Ternary(len(s.Req.GetRewardsWeb()) > 0 && project.Scene == mtype.ProjectSceneApp, int8(mtype.Yes), mtype.No)
|
|
|
data = append(data,
|
|
|
m.HasWeb.Value(hasWeb),
|
|
|
m.HasWarmUp.Value(int8(cf.GetHasWarmUp())),
|
|
|
m.WarmUpImg.Value(cf.GetWarmUpImg()),
|
|
|
m.WarmUpEnd.Value(cf.GetWarmUpEnd()),
|
|
|
)
|
|
|
|
|
|
// 重置短链接
|
|
|
if conf.HasWeb != hasWeb {
|
|
|
userM := s.GetDao().FissionUser
|
|
|
_, err = userM.WithContext(s.Ctx).Where(userM.CampaignID.Eq(cpn.ID)).UpdateSimple(userM.ShareLink.Value(""))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
userMS := s.GetDao().FissionUser.SubTable(cpn.ID)
|
|
|
_, err = userMS.WithContext(s.Ctx).Where(userMS.CampaignID.Eq(cpn.ID)).UpdateSimple(userMS.ShareLink.Value(""))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 设置奖品的配置
|
|
|
rewardData, err := s._setRewardConfig(cpn, conf.RewardGroup)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
data = append(data, rewardData...)
|
|
|
|
|
|
// 处理活动目标
|
|
|
if consts.NewEventCpn(cpn.FissionID) {
|
|
|
data = append(data,
|
|
|
m.Target.Value(int8(s.Req.GetTargetOption().GetTarget())),
|
|
|
m.AppEvent.Value(int8(s.Req.GetTargetOption().GetFixed().GetAppEvent())),
|
|
|
m.BothType.Value(int8(s.Req.GetTargetOption().GetCustom().GetBothType())),
|
|
|
)
|
|
|
if s.Req.GetTargetOption().GetCustom().GetOpen() == mtype.Yes {
|
|
|
|
|
|
option := utils.Ternary[int8](
|
|
|
!verify.InArray[int64](cpn.FissionID, consts.IdWinTogether, consts.IdReferral),
|
|
|
mtype.FissionCampaignConfigTargetOptionTask, mtype.FissionCampaignConfigTargetOptionFriend)
|
|
|
|
|
|
data = append(data, m.Option.Value(option))
|
|
|
} else {
|
|
|
data = append(data, m.Option.Value(mtype.FissionCampaignConfigTargetOptionApp))
|
|
|
}
|
|
|
|
|
|
err = s._updateTargetOption(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
data = append(data,
|
|
|
m.Target.Value(int8(s.Req.GetTarget().GetTarget())),
|
|
|
m.AppEvent.Value(int8(s.Req.GetTarget().GetAppEvent())),
|
|
|
m.BothType.Value(int8(s.Req.GetTarget().GetBothType())),
|
|
|
m.Option.Value(int8(s.Req.GetTarget().GetOption())),
|
|
|
)
|
|
|
|
|
|
err = s._updateTargetCond(cpn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 以前是事件触发的内容,现在变成了非事件触发,就要把统计任务删掉
|
|
|
if conf.Option != mtype.FissionCampaignConfigTargetOptionApp && s.Req.GetTarget().GetOption() == mtype.FissionCampaignConfigTargetOptionApp {
|
|
|
s.taskCondDel = true
|
|
|
}
|
|
|
|
|
|
if conf.Option == mtype.FissionCampaignConfigTargetOptionApp &&
|
|
|
verify.InArray(s.Req.GetTarget().GetOption(),
|
|
|
mtype.FissionCampaignConfigTargetOptionFriend,
|
|
|
mtype.FissionCampaignConfigTargetOptionUse,
|
|
|
mtype.FissionCampaignConfigTargetOptionSelf,
|
|
|
mtype.FissionCampaignConfigTargetOptionTask,
|
|
|
) {
|
|
|
s.taskCondAdd = true
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 奖品配置
|
|
|
func (s *Update) _setRewardConfig(cpn *model.FissionCampaign, oldRewardGroup int8) (data []field.AssignExpr, err error) {
|
|
|
|
|
|
// 切换奖品类型,就要把站内的奖全删了
|
|
|
if int32(oldRewardGroup) != s.Req.GetRewards().GetRewardGroup() {
|
|
|
m := s.GetDao().FissionCampaignReward
|
|
|
_, err = m.WithContext(s.Ctx).Where(
|
|
|
m.CampaignID.Eq(cpn.ID),
|
|
|
m.RewardType.Eq(mtype.FissionCampaignRewardTypeApp),
|
|
|
m.IsDel.Eq(mtype.No),
|
|
|
).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
m := s.GetDao().FissionCampaignConfig
|
|
|
data = append(data, m.RewardGroup.Value(int8(s.Req.GetRewards().GetRewardGroup())))
|
|
|
|
|
|
switch s.Req.GetRewards().GetRewardGroup() {
|
|
|
case mtype.FissionRewardGroupLang:
|
|
|
var lang = finder.Lang{
|
|
|
Default: mtype.FissionLangTypeToMark[cpn.GetLangTypes()[0]],
|
|
|
Support: make([]string, 0, len(s.Req.GetRewards().GetLangs())),
|
|
|
}
|
|
|
|
|
|
for _, v := range s.Req.GetRewards().GetLangs() {
|
|
|
lang.Support = append(lang.Support, v.GetLangMark())
|
|
|
}
|
|
|
|
|
|
dft, spt := lang.DST()
|
|
|
data = append(data, m.DefaultRewardMark.Value(dft), m.SupportRewardMark.Value(spt))
|
|
|
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())
|
|
|
}
|
|
|
|
|
|
dft, spt := level.DST()
|
|
|
data = append(data, m.DefaultRewardMark.Value(dft), m.SupportRewardMark.Value(spt))
|
|
|
|
|
|
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)
|
|
|
}
|
|
|
dft, spt := langLevel.DST()
|
|
|
data = append(data, m.DefaultRewardMark.Value(dft), m.SupportRewardMark.Value(spt))
|
|
|
|
|
|
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())
|
|
|
}
|
|
|
|
|
|
dft, spt := country.DST()
|
|
|
data = append(data, m.DefaultRewardMark.Value(dft), m.SupportRewardMark.Value(spt))
|
|
|
}
|
|
|
|
|
|
// 更新等级关系
|
|
|
err = s._updateLvRelated(cpn, oldRewardGroup)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) _updateLvRelated(cpn *model.FissionCampaign, oldRewardGroup int8) (err error) {
|
|
|
m := s.GetDao().FissionUserLevelRelated
|
|
|
if verify.InArray(oldRewardGroup, mtype.FissionRewardGroupUserLevel, mtype.FissionRewardGroupLangAndUserLevel) &&
|
|
|
!verify.InArray(s.Req.GetRewards().GetRewardGroup(), mtype.FissionRewardGroupUserLevel, mtype.FissionRewardGroupLangAndUserLevel) {
|
|
|
_, err = m.WithContext(s.Ctx).
|
|
|
Where(m.RelateID.Eq(cpn.ID), m.RelateTable.Eq(s.GetDao().FissionCampaign.TableName())).
|
|
|
UpdateSimple(m.CancelTime.Value(time.Now().Unix()))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
list, err := m.WithContext(s.Ctx).Where(m.RelateID.Eq(cpn.ID), m.RelateTable.Eq(s.GetDao().FissionCampaign.TableName())).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldMap = make(map[int64]*model.FissionUserLevelRelated, len(list))
|
|
|
for _, v := range list {
|
|
|
oldMap[v.LevelID] = v
|
|
|
}
|
|
|
|
|
|
var add []*model.FissionUserLevelRelated
|
|
|
var cancelIds, orIds []int64
|
|
|
|
|
|
var fn = func(list []*pb.UpdateReq_UserLevelOne) {
|
|
|
for _, v := range list {
|
|
|
old, ok := oldMap[v.GetLevelId()]
|
|
|
if !ok {
|
|
|
add = append(add, withdefault.FissionUserLevelRelated(&model.FissionUserLevelRelated{
|
|
|
LevelID: v.GetLevelId(),
|
|
|
RelateID: cpn.ID,
|
|
|
RelateTable: s.GetDao().FissionCampaign.TableName(),
|
|
|
CancelTime: 0,
|
|
|
}))
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
if old.CancelTime > 0 {
|
|
|
orIds = append(orIds, old.ID)
|
|
|
}
|
|
|
|
|
|
delete(oldMap, v.GetLevelId())
|
|
|
}
|
|
|
}
|
|
|
|
|
|
switch s.Req.GetRewards().GetRewardGroup() {
|
|
|
case mtype.FissionRewardGroupUserLevel:
|
|
|
fn(s.Req.GetRewards().GetUserLevel().GetLevelList())
|
|
|
case mtype.FissionRewardGroupLangAndUserLevel:
|
|
|
for _, v := range s.Req.GetRewards().GetLangUserLevel() {
|
|
|
fn(v.GetLevelList())
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for _, v := range oldMap {
|
|
|
cancelIds = append(cancelIds, v.ID)
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
err = m.WithContext(s.Ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(orIds) > 0 {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.In(orIds...)).UpdateSimple(m.CancelTime.Value(0))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(cancelIds) > 0 {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.In(cancelIds...)).UpdateSimple(m.CancelTime.Value(time.Now().Unix()))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新目标配置
|
|
|
func (s *Update) _updateTargetOption(cpn *model.FissionCampaign) (err error) {
|
|
|
m := s.GetDao().FissionCampaignTicket
|
|
|
tickets, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var ticketMap = make(map[string]*model.FissionCampaignTicket, len(tickets))
|
|
|
for _, ticket := range tickets {
|
|
|
ticketMap[ticket.Mark] = ticket
|
|
|
}
|
|
|
|
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
|
oldTasks, err := taskM.WithContext(s.Ctx).Where(taskM.CampaignID.Eq(cpn.ID), taskM.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var rewardIds []int64
|
|
|
var oldTaskMap = make(map[string]*model.FissionCampaignTask, len(oldTasks))
|
|
|
for _, oldTask := range oldTasks {
|
|
|
oldTaskMap[oldTask.TaskMark] = oldTask
|
|
|
if oldTask.RewardID > 0 {
|
|
|
rewardIds = append(rewardIds, oldTask.RewardID)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var rewardMap = make(map[int64]*model.FissionCampaignReward, len(rewardIds))
|
|
|
rewardM := s.GetDao().FissionCampaignReward
|
|
|
if len(rewardIds) > 0 {
|
|
|
var rewards []*model.FissionCampaignReward
|
|
|
rewards, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.In(rewardIds...)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, reward := range rewards {
|
|
|
rewardMap[reward.ID] = reward
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var addTicket []*model.FissionCampaignTicket
|
|
|
var tasks []*model.FissionCampaignTask
|
|
|
var addReward []*model.FissionCampaignReward
|
|
|
var delRewardIds []int64
|
|
|
fixedAddTicket, fixedAddTask, err := s._updateTargetOptionFixed(cpn, ticketMap[mtype.FissionCampaignTicketFixed], oldTaskMap)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
addTicket = append(addTicket, fixedAddTicket...)
|
|
|
tasks = append(tasks, fixedAddTask...)
|
|
|
|
|
|
customAddTicket, customAddTask, customAddReward, customDelRewardIds, err := s._updateTargetOptionCustom(cpn, ticketMap[mtype.FissionCampaignTicketCustom], oldTaskMap, rewardMap)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
addTicket = append(addTicket, customAddTicket...)
|
|
|
tasks = append(tasks, customAddTask...)
|
|
|
addReward = append(addReward, customAddReward...)
|
|
|
delRewardIds = append(delRewardIds, customDelRewardIds...)
|
|
|
|
|
|
if len(addTicket) > 0 {
|
|
|
err = m.WithContext(s.Ctx).Create(addTicket...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(tasks) > 0 {
|
|
|
err = taskM.WithContext(s.Ctx).Create(tasks...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(addReward) > 0 {
|
|
|
err = rewardM.WithContext(s.Ctx).Create(addReward...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delRewardIds) > 0 {
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.In(delRewardIds...)).UpdateSimple(rewardM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新邀请规则
|
|
|
func (s *Update) _updateTargetOptionFixed(cpn *model.FissionCampaign, fixedTicket *model.FissionCampaignTicket, oldTaskMap map[string]*model.FissionCampaignTask) (addTicket []*model.FissionCampaignTicket, tasks []*model.FissionCampaignTask, err error) {
|
|
|
|
|
|
var fixed = s.Req.GetTargetOption().GetFixed()
|
|
|
if fixedTicket == nil {
|
|
|
|
|
|
if fixed.GetOpen() == mtype.No {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
addTicket = append(addTicket, 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(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)
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if fixedTicket.Open == mtype.No && fixed.GetOpen() == mtype.No {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
|
m := s.GetDao().FissionCampaignTicket
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).
|
|
|
Where(m.ID.Eq(fixedTicket.ID)).
|
|
|
UpdateSimple(
|
|
|
m.Open.Value(int8(fixed.GetOpen())),
|
|
|
m.AppEvent.Value(int8(fixed.GetAppEvent())),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cache.NewCampaignTicket(s.Ctx).Clear(fixedTicket)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
var task *model.FissionCampaignTask
|
|
|
switch fixedTicket.AppEvent {
|
|
|
case mtype.FissionCampaignTicketAppEventInstall:
|
|
|
task = oldTaskMap[mtype.FissionCampaignTaskMarkInstall]
|
|
|
case mtype.FissionCampaignTicketAppEventRegister:
|
|
|
task = oldTaskMap[mtype.FissionCampaignTaskMarkRegister]
|
|
|
}
|
|
|
|
|
|
if task == nil {
|
|
|
|
|
|
one := withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
TaskType: 0,
|
|
|
TaskMark: "",
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Num: utils.Ternary[int32](verify.InArray(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)
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var appEvent = utils.STernary(fixed.GetAppEvent(), 0, int32(fixedTicket.AppEvent))
|
|
|
var taskType int8
|
|
|
var taskMark string
|
|
|
switch appEvent {
|
|
|
case mtype.FissionCampaignTicketAppEventInstall:
|
|
|
taskType = mtype.FissionCampaignTaskTypeInstall
|
|
|
taskMark = mtype.FissionCampaignTaskMarkInstall
|
|
|
case mtype.FissionCampaignTicketAppEventRegister:
|
|
|
taskType = mtype.FissionCampaignTaskTypeRegister
|
|
|
taskMark = mtype.FissionCampaignTaskMarkRegister
|
|
|
}
|
|
|
|
|
|
var isDel int8 = mtype.No
|
|
|
if fixed.GetOpen() == mtype.No {
|
|
|
isDel = mtype.Yes
|
|
|
}
|
|
|
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(
|
|
|
taskM.TaskType.Value(taskType),
|
|
|
taskM.TaskMark.Value(taskMark),
|
|
|
taskM.Chance.Value(fixed.GetChance()),
|
|
|
taskM.ChanceLimit.Value(fixed.GetChanceLimit()),
|
|
|
taskM.IsDel.Value(isDel),
|
|
|
taskM.Percent.Value(fixed.GetPercent()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) _updateTargetOptionCustom(cpn *model.FissionCampaign, customTicket *model.FissionCampaignTicket, oldTaskMap map[string]*model.FissionCampaignTask, rewardMap map[int64]*model.FissionCampaignReward) (addTicket []*model.FissionCampaignTicket, tasks []*model.FissionCampaignTask, addReward []*model.FissionCampaignReward, delRewardIds []int64, err error) {
|
|
|
|
|
|
condM := s.GetDao().FissionCampaignCond
|
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
|
rewardM := s.GetDao().FissionCampaignReward
|
|
|
var custom = s.Req.GetTargetOption().GetCustom()
|
|
|
var targetCond = make([]*model.FissionCampaignCond, 0, len(custom.GetCond()))
|
|
|
var delCond []int64
|
|
|
var delTaskIds []int64
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if len(delTaskIds) > 0 {
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(
|
|
|
taskM.ID.In(delTaskIds...),
|
|
|
).UpdateSimple(taskM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delCond) > 0 {
|
|
|
_, err = condM.WithContext(s.Ctx).Where(
|
|
|
condM.CampaignID.Eq(cpn.ID),
|
|
|
condM.ID.In(delCond...),
|
|
|
).UpdateSimple(condM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(targetCond) > 0 {
|
|
|
err = condM.WithContext(s.Ctx).Create(targetCond...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (customTicket == nil || customTicket.Open == mtype.No) && custom.GetOpen() == mtype.Yes {
|
|
|
s.taskCondAdd = true
|
|
|
} else if customTicket != nil && customTicket.Open == mtype.Yes && custom.GetOpen() == mtype.No {
|
|
|
s.taskCondDel = true
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
if customTicket == nil {
|
|
|
if custom.GetOpen() == mtype.No {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
addTicket = append(addTicket, &model.FissionCampaignTicket{
|
|
|
CampaignID: cpn.ID,
|
|
|
Mark: mtype.FissionCampaignTicketCustom,
|
|
|
Open: mtype.Yes,
|
|
|
BothType: int8(custom.GetBothType()),
|
|
|
})
|
|
|
|
|
|
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()),
|
|
|
TriggetType: int8(cond.GetTriggerType()),
|
|
|
EventType: int8(cond.GetEventType()),
|
|
|
ViewType: int8(cond.GetViewType()),
|
|
|
WatchSec: cond.GetWatchSec(),
|
|
|
OpenJump: int8(cond.GetOpenJump()),
|
|
|
WebURL: cond.GetWebUrl(),
|
|
|
ExtraParam: cond.GetExtraParam(),
|
|
|
GoShow: int8(cond.GetGoShow()),
|
|
|
AdsStrategyID: cond.GetAdsStrategyId(),
|
|
|
IsSuper: int8(cond.GetIsSuper()),
|
|
|
Sort: cond.GetSort(),
|
|
|
OpenPush: int8(cond.GetOpenPush()),
|
|
|
PcParam: cond.GetPcParam(),
|
|
|
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()),
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if customTicket.Open == mtype.No && custom.GetOpen() == mtype.No {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
list, err := condM.WithContext(s.Ctx).Where(condM.CampaignID.Eq(cpn.ID), condM.IsDel.Eq(mtype.No), condM.RewardID.Eq(0)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 旧条件
|
|
|
var oldCond = make(map[int64]*model.FissionCampaignCond, len(list))
|
|
|
for _, cond := range list {
|
|
|
oldCond[cond.ID] = cond
|
|
|
}
|
|
|
|
|
|
m := s.GetDao().FissionCampaignTicket
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).
|
|
|
Where(m.ID.Eq(customTicket.ID)).
|
|
|
UpdateSimple(
|
|
|
m.Open.Value(int8(custom.GetOpen())),
|
|
|
m.BothType.Value(int8(custom.GetBothType())),
|
|
|
m.PreEvent.Value(int8(custom.GetPreEvent())),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cache.NewCampaignTicket(s.Ctx).Clear(customTicket)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
if customTicket.Open == mtype.Yes && custom.GetOpen() == mtype.No {
|
|
|
for _, v := range list {
|
|
|
delCond = append(delCond, v.ID)
|
|
|
if customTicket.BothType == mtype.FissionCampaignTicketBothTypeOne {
|
|
|
if task, ok := oldTaskMap[utils.FissionCampaignTaskMarkCondOneVal(v.ID)]; ok {
|
|
|
delTaskIds = append(delTaskIds, task.ID)
|
|
|
|
|
|
if reward, ok1 := rewardMap[task.RewardID]; ok1 {
|
|
|
delRewardIds = append(delRewardIds, reward.ID)
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if customTicket.BothType == mtype.FissionCampaignTicketBothTypeAll {
|
|
|
if task, ok := oldTaskMap[mtype.FissionCampaignTaskMarkCondAll]; ok {
|
|
|
delTaskIds = append(delTaskIds, task.ID)
|
|
|
if reward, ok1 := rewardMap[task.RewardID]; ok1 {
|
|
|
delRewardIds = append(delRewardIds, reward.ID)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var condCache []*model.FissionCampaignCond
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cache.NewCampaignCond(s.Ctx).Clear(condCache...)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
for _, cond := range custom.GetCond() {
|
|
|
//用户ID限制
|
|
|
ll, _ := jsonm.ToSliceString(cond.GetLevelIds())
|
|
|
//语言限制
|
|
|
lm, _ := jsonm.ToSliceString(cond.GetLangMarks())
|
|
|
old, ok1 := oldCond[cond.GetId()]
|
|
|
if !ok1 { // 要创建条件数据和任务数据
|
|
|
condId := hashid.IdBigint()
|
|
|
targetCond = append(targetCond, &model.FissionCampaignCond{
|
|
|
ID: condId,
|
|
|
CampaignID: cpn.ID,
|
|
|
ProjectID: cpn.ProjectID,
|
|
|
Event: cond.GetEvent(),
|
|
|
EventKey: cond.GetEventKey(),
|
|
|
EventVal: cond.GetEventVal(),
|
|
|
Desc: cond.GetDesc(),
|
|
|
IfCond: int8(cond.GetIfCond()),
|
|
|
TriggetType: int8(cond.GetTriggerType()),
|
|
|
EventType: int8(cond.GetEventType()),
|
|
|
ViewType: int8(cond.GetViewType()),
|
|
|
WatchSec: cond.GetWatchSec(),
|
|
|
OpenJump: int8(cond.GetOpenJump()),
|
|
|
WebURL: cond.GetWebUrl(),
|
|
|
ExtraParam: cond.GetExtraParam(),
|
|
|
GoShow: int8(cond.GetGoShow()),
|
|
|
AdsStrategyID: cond.GetAdsStrategyId(),
|
|
|
IsSuper: int8(cond.GetIsSuper()),
|
|
|
Sort: cond.GetSort(),
|
|
|
OpenPush: int8(cond.GetOpenPush()),
|
|
|
PcParam: cond.GetPcParam(),
|
|
|
GoText: cond.GetGoText(),
|
|
|
ClickEffectOpen: int8(cond.GetClickEffectOpen()),
|
|
|
ClickEffect: cond.GetClickEffect(),
|
|
|
ClickEffectUnit: cond.GetClickEffectUnit(),
|
|
|
PullInvite: int8(cond.GetPullInvite()),
|
|
|
})
|
|
|
|
|
|
if custom.GetBothType() == mtype.FissionCampaignTicketBothTypeOne {
|
|
|
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(),
|
|
|
})
|
|
|
}
|
|
|
|
|
|
tasks = append(tasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeCondOne,
|
|
|
TaskMark: utils.FissionCampaignTaskMarkCondOneVal(condId),
|
|
|
PropMark: propMark,
|
|
|
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()),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var upCond = []field.AssignExpr{
|
|
|
condM.Event.Value(cond.GetEvent()),
|
|
|
condM.EventKey.Value(cond.GetEventKey()),
|
|
|
condM.EventVal.Value(cond.GetEventVal()),
|
|
|
condM.Desc.Value(cond.GetDesc()),
|
|
|
condM.IfCond.Value(int8(cond.GetIfCond())),
|
|
|
condM.TriggetType.Value(int8(cond.GetTriggerType())),
|
|
|
condM.EventType.Value(int8(cond.GetEventType())),
|
|
|
condM.ViewType.Value(int8(cond.GetViewType())),
|
|
|
condM.WatchSec.Value(cond.GetWatchSec()),
|
|
|
condM.OpenJump.Value(int8(cond.GetOpenJump())),
|
|
|
condM.WebURL.Value(cond.GetWebUrl()),
|
|
|
condM.ExtraParam.Value(cond.GetExtraParam()),
|
|
|
condM.GoShow.Value(int8(cond.GetGoShow())),
|
|
|
condM.AdsStrategyID.Value(cond.GetAdsStrategyId()),
|
|
|
condM.IsSuper.Value(int8(cond.GetIsSuper())),
|
|
|
condM.Sort.Value(cond.GetSort()),
|
|
|
condM.OpenPush.Value(int8(cond.GetOpenPush())),
|
|
|
condM.PcParam.Value(cond.GetPcParam()),
|
|
|
condM.GoText.Value(cond.GetGoText()),
|
|
|
condM.ClickEffectOpen.Value(int8(cond.GetClickEffectOpen())),
|
|
|
condM.ClickEffect.Value(cond.GetClickEffect()),
|
|
|
condM.ClickEffectUnit.Value(cond.GetClickEffectUnit()),
|
|
|
condM.PullInvite.Value(int8(cond.GetPullInvite())),
|
|
|
}
|
|
|
_, err = condM.WithContext(s.Ctx).Where(condM.ID.Eq(old.ID)).UpdateSimple(upCond...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
condCache = append(condCache, old)
|
|
|
|
|
|
switch customTicket.BothType {
|
|
|
case mtype.FissionCampaignTicketBothTypeOne:
|
|
|
|
|
|
switch custom.GetBothType() {
|
|
|
case mtype.FissionCampaignTicketBothTypeOne:
|
|
|
task, ok := oldTaskMap[utils.FissionCampaignTaskMarkCondOneVal(old.ID)]
|
|
|
if ok {
|
|
|
var rewardId int64
|
|
|
var propMark = cond.GetPropMark()
|
|
|
switch propMark {
|
|
|
case mtype.FissionCampaignTaskPropMarkReward:
|
|
|
|
|
|
reward := rewardMap[task.RewardID]
|
|
|
|
|
|
if reward == nil || reward.RewardID != cond.GetReward().GetRewardId() {
|
|
|
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,
|
|
|
})
|
|
|
if reward != nil {
|
|
|
delRewardIds = append(delRewardIds, reward.ID)
|
|
|
}
|
|
|
} else {
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.Eq(reward.ID)).UpdateSimple(rewardM.Stock.Value(cond.GetReward().GetStock()))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
rewardId = reward.ID
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
st, _ := stocks.NewCampaignReward(s.Ctx, reward.ID)
|
|
|
st.Clear()
|
|
|
return
|
|
|
})
|
|
|
}
|
|
|
|
|
|
case mtype.FissionCampaignTaskPropMarkPoint:
|
|
|
|
|
|
reward := rewardMap[task.RewardID]
|
|
|
|
|
|
if reward == nil {
|
|
|
rewardId = hashid.IdBigint()
|
|
|
s._otherAppendReward(&model.FissionCampaignReward{
|
|
|
ID: rewardId,
|
|
|
CampaignID: cpn.ID,
|
|
|
RewardType: mtype.FissionCampaignRewardTypeTask,
|
|
|
RewardNum: cond.GetChance(),
|
|
|
PropMark: mtype.FissionCampaignRewardPropMarkPoint,
|
|
|
ExpiredDay: cond.GetExpiredDay(),
|
|
|
})
|
|
|
} else {
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.Eq(reward.ID)).UpdateSimple(
|
|
|
rewardM.RewardNum.Value(cond.GetChance()),
|
|
|
rewardM.ExpiredDay.Value(cond.GetExpiredDay()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
rewardId = reward.ID
|
|
|
}
|
|
|
}
|
|
|
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(
|
|
|
taskM.PropMark.Value(propMark),
|
|
|
taskM.Chance.Value(cond.GetChance()),
|
|
|
taskM.TaskLimit.Value(cond.GetTaskLimit()),
|
|
|
taskM.DayLimit.Value(cond.GetDayLimit()),
|
|
|
taskM.LevelLimit.Value(ll),
|
|
|
taskM.LangMarks.Value(lm),
|
|
|
taskM.WeekLimit.Value(cond.GetWeekLimit()),
|
|
|
taskM.WeekNum.Value(int8(cond.GetWeekNum())),
|
|
|
taskM.HasPre.Value(int8(cond.GetHasPre())),
|
|
|
taskM.PreCond.Value(cond.GetPreCond()),
|
|
|
taskM.ExpiredMin.Value(cond.GetExpiredMin()),
|
|
|
taskM.RewardID.Value(rewardId),
|
|
|
taskM.AwardMode.Value(int8(cond.GetAwardMode())),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
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(),
|
|
|
})
|
|
|
}
|
|
|
|
|
|
tasks = append(tasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeCondOne,
|
|
|
TaskMark: utils.FissionCampaignTaskMarkCondOneVal(old.ID),
|
|
|
PropMark: propMark,
|
|
|
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()),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
case mtype.FissionCampaignTicketBothTypeAll:
|
|
|
task, ok := oldTaskMap[utils.FissionCampaignTaskMarkCondOneVal(old.ID)]
|
|
|
if ok {
|
|
|
delTaskIds = append(delTaskIds, task.ID)
|
|
|
if task.RewardID > 0 {
|
|
|
delRewardIds = append(delRewardIds, task.RewardID)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
case mtype.FissionCampaignTicketBothTypeAll:
|
|
|
switch custom.GetBothType() {
|
|
|
case mtype.FissionCampaignTicketBothTypeOne:
|
|
|
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(),
|
|
|
})
|
|
|
}
|
|
|
|
|
|
tasks = append(tasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeCondOne,
|
|
|
TaskMark: utils.FissionCampaignTaskMarkCondOneVal(old.ID),
|
|
|
PropMark: propMark,
|
|
|
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()),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
delete(oldCond, old.ID)
|
|
|
}
|
|
|
|
|
|
switch customTicket.BothType {
|
|
|
case mtype.FissionCampaignTicketBothTypeOne:
|
|
|
switch custom.GetBothType() {
|
|
|
case mtype.FissionCampaignTicketBothTypeOne: // 如果旧的数据已经不在新的数据里面,并且以前的数据还是任意条件,那旧要把任务都删了
|
|
|
for id := range oldCond {
|
|
|
delCond = append(delCond, id)
|
|
|
if task, ok := oldTaskMap[utils.FissionCampaignTaskMarkCondOneVal(id)]; ok {
|
|
|
delTaskIds = append(delTaskIds, task.ID)
|
|
|
if task.RewardID > 0 {
|
|
|
delRewardIds = append(delRewardIds, task.RewardID)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
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.FissionCampaignTicketBothTypeAll:
|
|
|
switch custom.GetBothType() {
|
|
|
case mtype.FissionCampaignTicketBothTypeOne: // 从所有任务完成切换到任意任务完成,要把所有任务完成产生的任务数据删掉
|
|
|
if task, ok := oldTaskMap[mtype.FissionCampaignTaskMarkCondAll]; ok {
|
|
|
delTaskIds = append(delTaskIds, task.ID)
|
|
|
if task.RewardID > 0 {
|
|
|
delRewardIds = append(delRewardIds, task.RewardID)
|
|
|
}
|
|
|
}
|
|
|
case mtype.FissionCampaignTicketBothTypeAll: // 所有任务完成 都没切换的时候,要更新任务数据
|
|
|
task, ok := oldTaskMap[mtype.FissionCampaignTaskMarkCondAll]
|
|
|
if ok {
|
|
|
var rewardId int64
|
|
|
var propMark = custom.GetBothAll().GetPropMark()
|
|
|
switch propMark {
|
|
|
case mtype.FissionCampaignTaskPropMarkReward:
|
|
|
|
|
|
reward := rewardMap[task.RewardID]
|
|
|
|
|
|
if reward == nil || reward.RewardID != custom.GetBothAll().GetReward().GetRewardId() {
|
|
|
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,
|
|
|
})
|
|
|
if reward != nil {
|
|
|
delRewardIds = append(delRewardIds, reward.ID)
|
|
|
}
|
|
|
} else {
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.Eq(reward.ID)).UpdateSimple(
|
|
|
rewardM.Stock.Value(custom.GetBothAll().GetReward().GetStock()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
rewardId = reward.ID
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
st, _ := stocks.NewCampaignReward(s.Ctx, reward.ID)
|
|
|
st.Clear()
|
|
|
return
|
|
|
})
|
|
|
}
|
|
|
case mtype.FissionCampaignTaskPropMarkPoint:
|
|
|
reward := rewardMap[task.RewardID]
|
|
|
|
|
|
if reward == nil {
|
|
|
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(),
|
|
|
})
|
|
|
} else {
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.Eq(reward.ID)).UpdateSimple(
|
|
|
rewardM.RewardNum.Value(custom.GetBothAll().GetChance()),
|
|
|
rewardM.ExpiredDay.Value(custom.GetBothAll().GetExpiredDay()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
rewardId = reward.ID
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ll, _ := jsonm.ToSliceString(custom.GetBothAll().GetLevelIds())
|
|
|
lm, _ := jsonm.ToSliceString(custom.GetBothAll().GetLangMarks())
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).
|
|
|
UpdateSimple(
|
|
|
taskM.PropMark.Value(propMark),
|
|
|
taskM.Chance.Value(custom.GetBothAll().GetChance()),
|
|
|
taskM.TaskLimit.Value(custom.GetBothAll().GetTaskLimit()),
|
|
|
taskM.DayLimit.Value(custom.GetBothAll().GetDayLimit()),
|
|
|
taskM.LevelLimit.Value(ll),
|
|
|
taskM.LangMarks.Value(lm),
|
|
|
taskM.WeekLimit.Value(custom.GetBothAll().GetWeekLimit()),
|
|
|
taskM.WeekNum.Value(int8(custom.GetBothAll().GetWeekNum())),
|
|
|
taskM.RewardID.Value(rewardId),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
} else {
|
|
|
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,
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新目标配置(即将弃用)
|
|
|
func (s *Update) _updateTargetCond(cpn *model.FissionCampaign) (err error) {
|
|
|
// 目标配置
|
|
|
condM := s.GetDao().FissionCampaignCond
|
|
|
list, err := condM.WithContext(s.Ctx).Where(condM.CampaignID.Eq(cpn.ID), condM.IsDel.Eq(mtype.No), condM.RewardID.Eq(0)).Find()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
// 旧条件
|
|
|
var oldCond = make(map[int64]*model.FissionCampaignCond, len(list))
|
|
|
for _, cond := range list {
|
|
|
oldCond[cond.ID] = cond
|
|
|
}
|
|
|
|
|
|
target := s.Req.GetTarget()
|
|
|
|
|
|
var condCache []*model.FissionCampaignCond
|
|
|
defer s.AddAfterRun(func() (err error) {
|
|
|
_ = cache.NewCampaignCond(s.Ctx).Clear(condCache...)
|
|
|
return
|
|
|
})
|
|
|
var addCond []*model.FissionCampaignCond
|
|
|
var newIdx int
|
|
|
var newCond = make(map[int]*pb.UpdateReq_Cond)
|
|
|
for _, cond := range target.GetCond() {
|
|
|
tt := int8(utils.NewGlobalTrigger(cpn.FissionID, cond.GetTriggerType()))
|
|
|
old, ok := oldCond[cond.GetId()]
|
|
|
if !ok {
|
|
|
addCond = append(addCond, &model.FissionCampaignCond{
|
|
|
ID: hashid.IdBigint(),
|
|
|
CampaignID: cpn.ID,
|
|
|
ProjectID: cpn.ProjectID,
|
|
|
Event: cond.GetEvent(),
|
|
|
EventKey: cond.GetEventKey(),
|
|
|
EventVal: cond.GetEventVal(),
|
|
|
Desc: cond.GetDesc(),
|
|
|
IfCond: int8(cond.GetIfCond()),
|
|
|
TriggetType: tt,
|
|
|
EventType: int8(cond.GetEventType()),
|
|
|
})
|
|
|
newCond[newIdx] = cond
|
|
|
newIdx++
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var upCond = []field.AssignExpr{
|
|
|
condM.Event.Value(cond.GetEvent()),
|
|
|
condM.EventKey.Value(cond.GetEventKey()),
|
|
|
condM.EventVal.Value(cond.GetEventVal()),
|
|
|
condM.Desc.Value(cond.GetDesc()),
|
|
|
condM.IfCond.Value(int8(cond.GetIfCond())),
|
|
|
condM.TriggetType.Value(tt),
|
|
|
condM.EventType.Value(int8(cond.GetEventType())),
|
|
|
}
|
|
|
_, err = condM.WithContext(s.Ctx).Where(condM.ID.Eq(old.ID)).UpdateSimple(upCond...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
delete(oldCond, cond.GetId())
|
|
|
condCache = append(condCache, old)
|
|
|
}
|
|
|
|
|
|
var del []int64
|
|
|
for id := range oldCond {
|
|
|
del = append(del, id)
|
|
|
}
|
|
|
|
|
|
if len(addCond) > 0 {
|
|
|
err = condM.WithContext(s.Ctx).Create(addCond...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(del) > 0 {
|
|
|
_, err = condM.WithContext(s.Ctx).Where(condM.ID.In(del...), condM.CampaignID.Eq(cpn.ID)).UpdateSimple(condM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) _updateRunningCond(cpn *model.FissionCampaign) (err error) {
|
|
|
|
|
|
m := s.GetDao().FissionCampaignCond
|
|
|
if !consts.NewEventCpn(cpn.FissionID) {
|
|
|
var condCache = make([]*model.FissionCampaignCond, 0, len(s.Req.GetTarget().GetCond()))
|
|
|
defer s.AddAfterRun(func() (err error) {
|
|
|
_ = cache.NewCampaignCond(s.Ctx).Clear(condCache...)
|
|
|
return
|
|
|
})
|
|
|
for _, cond := range s.Req.GetTarget().GetCond() {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(cond.GetId())).UpdateSimple(
|
|
|
m.Desc.Value(cond.GetDesc()),
|
|
|
m.ViewType.Value(int8(cond.GetViewType())),
|
|
|
m.GoText.Value(cond.GetGoText()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
condCache = append(condCache, &model.FissionCampaignCond{ID: cond.GetId()})
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
ticketM := s.GetDao().FissionCampaignTicket
|
|
|
ticket, err := ticketM.WithContext(s.Ctx).Where(
|
|
|
ticketM.CampaignID.Eq(cpn.ID),
|
|
|
ticketM.Open.Eq(mtype.Yes),
|
|
|
ticketM.Mark.Eq(mtype.FissionCampaignTicketCustom),
|
|
|
).Take()
|
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if ticket == nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var ids []int64
|
|
|
var reqCond = s.Req.GetTargetOption().GetCustom().GetCond()
|
|
|
for _, v := range reqCond {
|
|
|
ids = append(ids, v.GetId())
|
|
|
}
|
|
|
|
|
|
list, err := m.WithContext(s.Ctx).Where(m.ID.In(ids...)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldCondMap = make(map[int64]*model.FissionCampaignCond)
|
|
|
for _, cond := range list {
|
|
|
oldCondMap[cond.ID] = cond
|
|
|
}
|
|
|
|
|
|
var condCache = make([]*model.FissionCampaignCond, 0, len(list))
|
|
|
defer s.AddAfterRun(func() (err error) {
|
|
|
_ = cache.NewCampaignCond(s.Ctx).Clear(condCache...)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
|
|
|
|
var addCond []*model.FissionCampaignCond
|
|
|
defer func() {
|
|
|
if len(addCond) > 0 && err == nil {
|
|
|
err = m.WithContext(s.Ctx).Create(addCond...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if len(cpn.GetLangTypes()) > 1 {
|
|
|
s.Res.AddTask = true
|
|
|
}
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
var addTask []*model.FissionCampaignTask
|
|
|
defer func() {
|
|
|
if len(addTask) > 0 && err == nil {
|
|
|
err = taskM.WithContext(s.Ctx).Create(addTask...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
var taskMark = make(map[string]*pb.UpdateReq_Cond, len(reqCond))
|
|
|
for _, cond := range reqCond {
|
|
|
|
|
|
taskMark[utils.FissionCampaignTaskMarkCondOneVal(cond.GetId())] = cond
|
|
|
|
|
|
old, ok := oldCondMap[cond.GetId()]
|
|
|
if !ok {
|
|
|
aCond := 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(cond.GetTriggerType()),
|
|
|
EventType: int8(cond.GetEventType()),
|
|
|
ViewType: int8(cond.GetViewType()),
|
|
|
WatchSec: cond.GetWatchSec(),
|
|
|
OpenJump: int8(cond.GetOpenJump()),
|
|
|
WebURL: cond.GetWebUrl(),
|
|
|
ExtraParam: cond.GetExtraParam(),
|
|
|
GoShow: int8(cond.GetGoShow()),
|
|
|
AdsStrategyID: cond.GetAdsStrategyId(),
|
|
|
Sort: cond.GetSort(),
|
|
|
OpenPush: int8(cond.GetOpenPush()),
|
|
|
PcParam: cond.GetPcParam(),
|
|
|
GoText: cond.GetGoText(),
|
|
|
ClickEffectOpen: int8(cond.GetClickEffectOpen()),
|
|
|
ClickEffect: cond.GetClickEffect(),
|
|
|
ClickEffectUnit: cond.GetClickEffectUnit(),
|
|
|
PullInvite: int8(cond.GetPullInvite()),
|
|
|
})
|
|
|
|
|
|
if ticket.BothType == mtype.FissionCampaignTicketBothTypeOne {
|
|
|
//用户ID限制
|
|
|
ll, _ := jsonm.ToSliceString(cond.GetLevelIds())
|
|
|
//语言限制
|
|
|
lm, _ := jsonm.ToSliceString(cond.GetLangMarks())
|
|
|
|
|
|
addTask = append(addTask, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeCondOne,
|
|
|
TaskMark: utils.FissionCampaignTaskMarkCondOneVal(aCond.ID),
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Num: 1,
|
|
|
Chance: cond.GetChance(),
|
|
|
ChanceLimit: 0,
|
|
|
TaskLimit: cond.GetTaskLimit(),
|
|
|
DayLimit: cond.GetDayLimit(),
|
|
|
LevelLimit: ll,
|
|
|
LangMarks: lm,
|
|
|
WeekLimit: cond.GetWeekLimit(),
|
|
|
WeekNum: int8(cond.GetWeekNum()),
|
|
|
AwardMode: int8(cond.GetAwardMode()),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
addCond = append(addCond, aCond)
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var upData []field.AssignExpr
|
|
|
|
|
|
if old.Desc != cond.GetDesc() {
|
|
|
upData = append(upData, m.Desc.Value(cond.GetDesc()))
|
|
|
}
|
|
|
|
|
|
if old.EventVal != cond.GetEventVal() {
|
|
|
upData = append(upData, m.EventVal.Value(cond.GetEventVal()))
|
|
|
}
|
|
|
|
|
|
if old.OpenJump != int8(cond.GetOpenJump()) {
|
|
|
upData = append(upData, m.OpenJump.Value(int8(cond.GetOpenJump())))
|
|
|
}
|
|
|
|
|
|
if old.WebURL != cond.GetWebUrl() {
|
|
|
upData = append(upData, m.WebURL.Value(cond.GetWebUrl()))
|
|
|
}
|
|
|
|
|
|
if old.ExtraParam != cond.GetExtraParam() {
|
|
|
upData = append(upData, m.ExtraParam.Value(cond.GetExtraParam()))
|
|
|
}
|
|
|
|
|
|
if old.PcParam != cond.GetPcParam() {
|
|
|
upData = append(upData, m.PcParam.Value(cond.GetPcParam()))
|
|
|
}
|
|
|
|
|
|
if old.TriggetType != int8(cond.GetTriggerType()) {
|
|
|
upData = append(upData, m.TriggetType.Value(int8(cond.GetTriggerType())))
|
|
|
s.OL().User(s.Req.GetUserId(), s.Req.GetIp()).UpdateRunningTriggetType(old.ID, old.TriggetType, cond.GetTriggerType())
|
|
|
}
|
|
|
|
|
|
if old.ViewType != int8(cond.GetViewType()) {
|
|
|
upData = append(upData, m.ViewType.Value(int8(cond.GetViewType())))
|
|
|
}
|
|
|
|
|
|
if old.GoShow != int8(cond.GetGoShow()) {
|
|
|
upData = append(upData, m.GoShow.Value(int8(cond.GetGoShow())))
|
|
|
}
|
|
|
|
|
|
if old.GoText != cond.GetGoText() {
|
|
|
upData = append(upData, m.GoText.Value(cond.GetGoText()))
|
|
|
}
|
|
|
|
|
|
if old.AdsStrategyID != cond.GetAdsStrategyId() {
|
|
|
upData = append(upData, m.AdsStrategyID.Value(cond.GetAdsStrategyId()))
|
|
|
s.OL().User(s.Req.GetUserId(), s.Req.GetIp()).UpdateRunningAdsStrategy(old.ID, old.AdsStrategyID, cond.GetAdsStrategyId())
|
|
|
}
|
|
|
|
|
|
if old.WatchSec != cond.GetWatchSec() {
|
|
|
upData = append(upData, m.WatchSec.Value(cond.GetWatchSec()))
|
|
|
}
|
|
|
|
|
|
if old.Sort != cond.GetSort() {
|
|
|
upData = append(upData, m.Sort.Value(cond.GetSort()))
|
|
|
}
|
|
|
|
|
|
if old.OpenPush != int8(cond.GetOpenPush()) {
|
|
|
upData = append(upData, m.OpenPush.Value(int8(cond.GetOpenPush())))
|
|
|
}
|
|
|
|
|
|
if old.ClickEffectOpen != int8(cond.GetClickEffectOpen()) {
|
|
|
upData = append(upData, m.ClickEffectOpen.Value(int8(cond.GetClickEffectOpen())))
|
|
|
}
|
|
|
|
|
|
if old.ClickEffect != cond.GetClickEffect() {
|
|
|
upData = append(upData, m.ClickEffect.Value(cond.GetClickEffect()))
|
|
|
}
|
|
|
|
|
|
if old.ClickEffectUnit != cond.GetClickEffectUnit() {
|
|
|
upData = append(upData, m.ClickEffectUnit.Value(cond.GetClickEffectUnit()))
|
|
|
}
|
|
|
|
|
|
if old.PullInvite != int8(cond.GetPullInvite()) {
|
|
|
upData = append(upData, m.PullInvite.Value(int8(cond.GetPullInvite())))
|
|
|
}
|
|
|
|
|
|
if len(upData) > 0 {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(cond.GetId())).UpdateSimple(upData...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
condCache = append(condCache, old)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 更新限制
|
|
|
|
|
|
switch ticket.BothType {
|
|
|
case mtype.FissionCampaignTicketBothTypeAll:
|
|
|
var task *model.FissionCampaignTask
|
|
|
task, err = taskM.WithContext(s.Ctx).Where(
|
|
|
taskM.CampaignID.Eq(cpn.ID),
|
|
|
taskM.TaskMark.Eq(mtype.FissionCampaignTaskMarkCondAll),
|
|
|
taskM.IsDel.Eq(mtype.No)).Take()
|
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var operateLogKvs []string
|
|
|
var up []field.AssignExpr
|
|
|
ba := s.Req.GetTargetOption().GetCustom().GetBothAll()
|
|
|
dayLimit, taskLimit, levelLimit := ba.GetDayLimit(), ba.GetTaskLimit(), ba.GetLevelIds()
|
|
|
if task != nil {
|
|
|
if task.DayLimit != dayLimit {
|
|
|
up = append(up, taskM.DayLimit.Value(dayLimit))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"day",
|
|
|
fmt.Sprintf("%d->%d", task.DayLimit, dayLimit),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if task.TaskLimit != taskLimit {
|
|
|
up = append(up, taskM.TaskLimit.Value(taskLimit))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"task",
|
|
|
fmt.Sprintf("%d->%d", task.TaskLimit, taskLimit),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if !verify.SliceEq(task.GetLevelLimit(), levelLimit) {
|
|
|
ll, _ := jsonm.ToSliceString(levelLimit)
|
|
|
up = append(up, taskM.LevelLimit.Value(ll))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"level",
|
|
|
fmt.Sprintf("%s->%s", task.LevelLimit, ll),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if !verify.SliceEq(task.GetLangMarks(), ba.GetLangMarks()) {
|
|
|
lm, _ := jsonm.ToSliceString(ba.GetLangMarks())
|
|
|
up = append(up, taskM.LangMarks.Value(lm))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"lang",
|
|
|
fmt.Sprintf("%s->%s", task.LangMarks, lm),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if task.WeekLimit != ba.GetWeekLimit() || task.WeekNum != int8(ba.GetWeekNum()) {
|
|
|
up = append(up, taskM.WeekLimit.Value(ba.GetWeekLimit()), taskM.WeekNum.Value(int8(ba.GetWeekNum())))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"week",
|
|
|
fmt.Sprintf("%d_%d->%d_%d", task.WeekLimit, task.WeekNum, ba.GetWeekLimit(), ba.GetWeekNum()),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if len(up) > 0 {
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(up...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
s.OL().User(s.Req.GetUserId(), s.Req.GetIp()).TaskLimitRule(task.ID, operateLogKvs)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
case mtype.FissionCampaignTicketBothTypeOne:
|
|
|
var tasks []*model.FissionCampaignTask
|
|
|
tasks, err = taskM.WithContext(s.Ctx).Where(taskM.CampaignID.Eq(cpn.ID), taskM.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, task := range tasks {
|
|
|
cond, ok := taskMark[task.TaskMark]
|
|
|
if !ok {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var operateLogKvs []string
|
|
|
var up []field.AssignExpr
|
|
|
|
|
|
if task.AwardMode != int8(cond.GetAwardMode()) {
|
|
|
up = append(up, taskM.AwardMode.Value(int8(cond.GetAwardMode())))
|
|
|
}
|
|
|
|
|
|
if task.DayLimit != cond.GetDayLimit() {
|
|
|
up = append(up, taskM.DayLimit.Value(cond.GetDayLimit()))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"day",
|
|
|
fmt.Sprintf("%d->%d", task.DayLimit, cond.GetDayLimit()),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if task.TaskLimit != cond.GetTaskLimit() {
|
|
|
up = append(up, taskM.TaskLimit.Value(cond.GetTaskLimit()))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"task",
|
|
|
fmt.Sprintf("%d->%d", task.TaskLimit, cond.GetTaskLimit()),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if !verify.SliceEq(task.GetLevelLimit(), cond.GetLevelIds()) {
|
|
|
ll, _ := jsonm.ToSliceString(cond.GetLevelIds())
|
|
|
up = append(up, taskM.LevelLimit.Value(ll))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"level",
|
|
|
fmt.Sprintf("%s->%s", task.LevelLimit, ll),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if !verify.SliceEq(task.GetLangMarks(), cond.GetLangMarks()) {
|
|
|
lm, _ := jsonm.ToSliceString(cond.GetLangMarks())
|
|
|
up = append(up, taskM.LangMarks.Value(lm))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"lang",
|
|
|
fmt.Sprintf("%s->%s", task.LangMarks, lm),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if task.WeekLimit != cond.GetWeekLimit() || task.WeekNum != int8(cond.GetWeekNum()) {
|
|
|
up = append(up, taskM.WeekLimit.Value(cond.GetWeekLimit()), taskM.WeekNum.Value(int8(cond.GetWeekNum())))
|
|
|
operateLogKvs = append(operateLogKvs,
|
|
|
"week",
|
|
|
fmt.Sprintf("%d_%d->%d_%d", task.WeekLimit, task.WeekNum, cond.GetWeekLimit(), cond.GetWeekNum()),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if len(up) > 0 {
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(up...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
s.OL().User(s.Req.GetUserId(), s.Req.GetIp()).TaskLimitRule(task.ID, operateLogKvs)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 创建玩法特有数据
|
|
|
func (s *Update) updateFission(cpn *model.FissionCampaign) (err error) {
|
|
|
switch cpn.FissionID {
|
|
|
case consts.IdPrizeWheel: //大转盘
|
|
|
return s.updatePrizeWheel(cpn)
|
|
|
case consts.IdSlotMachine: //老虎机
|
|
|
return s.updateSlotMachine(cpn)
|
|
|
case consts.IdLuckyGrid: //九宫格
|
|
|
return s.updateLuckyGrid(cpn)
|
|
|
case consts.IdBlindBox: //盲盒
|
|
|
return s.updateBlindBox(cpn)
|
|
|
case consts.IdReferral: //老带新
|
|
|
return s.updateReferral(cpn)
|
|
|
case consts.IdWinTogether: //一起赢
|
|
|
return s.updateWinTogether(cpn)
|
|
|
case consts.IdPrizeAnswer, consts.IdQa, consts.IdQaAudio, consts.IdQaVideo: //趣味问答
|
|
|
return s.updatePrizeAnswer(cpn)
|
|
|
case consts.IdPrizeQuiz: //有奖竞猜
|
|
|
return s.updatePrizeQuiz(cpn)
|
|
|
case consts.IdSignIn: //签到
|
|
|
return s.updateSignIn(cpn)
|
|
|
case consts.IdDice: //大富翁
|
|
|
return s.updateDice(cpn)
|
|
|
case consts.IdGrow: //农场
|
|
|
return s.updateGrow(cpn)
|
|
|
case consts.IdBallot: //抽签
|
|
|
return s.updateBallot(cpn)
|
|
|
case consts.IdChop: //砍一刀
|
|
|
return s.updateChop(cpn)
|
|
|
case consts.IdCash: //现金抽奖
|
|
|
return s.updateCash(cpn)
|
|
|
case consts.IdFlip: //翻牌活动
|
|
|
return s.updateFlip(cpn)
|
|
|
case consts.IdKeep: //激励养成
|
|
|
return s.updateKeep(cpn)
|
|
|
case consts.IdGold: //金币任务
|
|
|
return s.updateGold(cpn)
|
|
|
case consts.IdCoin: //金币池
|
|
|
return s.updateCoin(cpn)
|
|
|
case consts.IdVs:
|
|
|
return s.updateVs(cpn)
|
|
|
case consts.IdUno:
|
|
|
return s.updateUno(cpn)
|
|
|
case consts.IdGashapon: //扭蛋机
|
|
|
return s.updateGashapon(cpn)
|
|
|
default:
|
|
|
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新赛事竞猜配置
|
|
|
func (s *Update) updatePrizeQuiz(cpn *model.FissionCampaign) (err error) {
|
|
|
quiz := s.Req.GetQuiz()
|
|
|
|
|
|
cc := cache.NewCampaignQuiz(s.Ctx)
|
|
|
fcq, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if fcq == nil {
|
|
|
return workerr.NotFound("not found fcq")
|
|
|
}
|
|
|
|
|
|
m := s.GetDao().FissionCampaignQuiz
|
|
|
var data = []field.AssignExpr{
|
|
|
m.OpenPrize.Value(timez.GMT(quiz.GetOpenPrize(), s.Req.GetTOffset())),
|
|
|
m.TOpen.Value(quiz.GetOpenPrize()),
|
|
|
}
|
|
|
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(fcq.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cc.Clear(fcq)
|
|
|
}()
|
|
|
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态只能改正确选项
|
|
|
//选项更新
|
|
|
optionM := s.GetDao().FissionCampaignQuizOption
|
|
|
for _, v := range quiz.GetOptions() {
|
|
|
_, err = optionM.WithContext(s.Ctx).Where(optionM.ID.Eq(v.GetId())).UpdateSimple(optionM.IsRight.Value(int8(v.GetIsRight())))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
data = append(data,
|
|
|
m.TargetNum.Value(quiz.GetTargetNum()),
|
|
|
m.InitChance.Value(quiz.GetInitChance()),
|
|
|
m.Chance.Value(quiz.GetChance()),
|
|
|
m.RewardRule.Value(int8(quiz.GetRewardRule())),
|
|
|
m.Title.Value(quiz.GetTitle()),
|
|
|
)
|
|
|
|
|
|
//更新了初始投票机会,要处理玩家数据,预防有一些人没开始就进入游戏了,要同步一下数据
|
|
|
if fcq.InitChance != quiz.GetInitChance() {
|
|
|
fqM := s.GetDao().FissionQuiz
|
|
|
_, err = fqM.WithContext(s.Ctx).Where(fqM.CampaignID.Eq(cpn.ID)).UpdateSimple(fqM.Chance.Value(quiz.GetInitChance()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var optAdd []*model.FissionCampaignQuizOption
|
|
|
var optDel []int64
|
|
|
var optNewIds = make(map[int64]*pb.UpdateReq_QuizOption)
|
|
|
for _, v := range quiz.GetOptions() {
|
|
|
|
|
|
if v.GetId() > 0 {
|
|
|
//修改数据
|
|
|
optNewIds[v.GetId()] = v
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
//没有ID就是新增数据
|
|
|
optAdd = append(optAdd, withdefault.FissionCampaignQuizOption(&model.FissionCampaignQuizOption{
|
|
|
CampaignID: cpn.ID,
|
|
|
Title: v.GetTitle(),
|
|
|
ImgURL: v.GetImgUrl(),
|
|
|
IsRight: int8(v.GetIsRight()),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
//选项更新
|
|
|
optionM := s.GetDao().FissionCampaignQuizOption
|
|
|
options, err := optionM.WithContext(s.Ctx).Where(optionM.CampaignID.Eq(cpn.ID), optionM.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
for _, v := range options {
|
|
|
option, ok := optNewIds[v.ID]
|
|
|
if !ok {
|
|
|
optDel = append(optDel, v.ID)
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var uData = []field.AssignExpr{
|
|
|
optionM.Title.Value(option.GetTitle()),
|
|
|
optionM.ImgURL.Value(option.GetImgUrl()),
|
|
|
optionM.IsRight.Value(int8(option.GetIsRight())),
|
|
|
}
|
|
|
|
|
|
_, err = optionM.WithContext(s.Ctx).Where(optionM.ID.Eq(v.ID)).UpdateSimple(uData...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if len(optAdd) > 0 {
|
|
|
err = optionM.WithContext(s.Ctx).Create(optAdd...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(optDel) > 0 {
|
|
|
_, err = optionM.WithContext(s.Ctx).Where(optionM.ID.In(optDel...)).UpdateSimple(optionM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新大转盘
|
|
|
func (s *Update) updatePrizeWheel(cpn *model.FissionCampaign) (err error) {
|
|
|
var wheel = s.Req.GetPrizeWheel()
|
|
|
|
|
|
cc := cache.NewCampaignWheel(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found wheel conf")
|
|
|
}
|
|
|
|
|
|
confM := s.GetDao().FissionCampaignWheel
|
|
|
var data = []field.AssignExpr{
|
|
|
confM.DayChance.Value(wheel.GetDayChance()),
|
|
|
}
|
|
|
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
_, err = confM.WithContext(s.Ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cc.Clear(conf)
|
|
|
}()
|
|
|
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态不能修改配置
|
|
|
return
|
|
|
}
|
|
|
|
|
|
data = append(data,
|
|
|
confM.TargetNum.Value(wheel.GetTargetNum()),
|
|
|
confM.InitChance.Value(wheel.GetInitChance()),
|
|
|
confM.Chance.Value(wheel.GetChance()),
|
|
|
)
|
|
|
|
|
|
//更新了初次抽奖机会,要处理玩家数据,预防有一些人没开始就进入游戏了,要同步一下数据
|
|
|
if conf.InitChance != wheel.GetInitChance() {
|
|
|
fpwM := s.GetDao().FissionPrizeWheel
|
|
|
_, err = fpwM.WithContext(s.Ctx).Where(fpwM.CampaignID.Eq(cpn.ID)).UpdateSimple(fpwM.Chance.Value(wheel.GetInitChance()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新老虎机
|
|
|
func (s *Update) updateSlotMachine(cpn *model.FissionCampaign) (err error) {
|
|
|
var slot = s.Req.GetSlot()
|
|
|
|
|
|
cc := cache.NewCampaignSlot(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found slot conf")
|
|
|
}
|
|
|
|
|
|
confM := s.GetDao().FissionCampaignSlot
|
|
|
var data = []field.AssignExpr{
|
|
|
confM.DayChance.Value(slot.GetDayChance()),
|
|
|
}
|
|
|
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
_, err = confM.WithContext(s.Ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cc.Clear(conf)
|
|
|
}()
|
|
|
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态不能修改配置
|
|
|
return
|
|
|
}
|
|
|
|
|
|
data = append(data,
|
|
|
confM.TargetNum.Value(slot.GetTargetNum()),
|
|
|
confM.InitChance.Value(slot.GetInitChance()),
|
|
|
confM.Chance.Value(slot.GetChance()),
|
|
|
)
|
|
|
|
|
|
//更新了初次抽奖机会,要处理玩家数据,预防有一些人没开始就进入游戏了,要同步一下数据
|
|
|
if conf.InitChance != slot.GetInitChance() {
|
|
|
fpwM := s.GetDao().FissionSlot
|
|
|
_, err = fpwM.WithContext(s.Ctx).Where(fpwM.CampaignID.Eq(cpn.ID)).UpdateSimple(fpwM.Chance.Value(slot.GetInitChance()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新九宫格
|
|
|
func (s *Update) updateLuckyGrid(cpn *model.FissionCampaign) (err error) {
|
|
|
var grid = s.Req.GetGrid()
|
|
|
|
|
|
cc := cache.NewCampaignGrid(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found grid conf")
|
|
|
}
|
|
|
|
|
|
confM := s.GetDao().FissionCampaignGrid
|
|
|
var data = []field.AssignExpr{
|
|
|
confM.DayChance.Value(grid.GetDayChance()),
|
|
|
}
|
|
|
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
_, err = confM.WithContext(s.Ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cc.Clear(conf)
|
|
|
}()
|
|
|
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态不能修改配置
|
|
|
return
|
|
|
}
|
|
|
|
|
|
data = append(data,
|
|
|
confM.TargetNum.Value(grid.GetTargetNum()),
|
|
|
confM.InitChance.Value(grid.GetInitChance()),
|
|
|
confM.Chance.Value(grid.GetChance()),
|
|
|
)
|
|
|
|
|
|
//更新了初次抽奖机会,要处理玩家数据,预防有一些人没开始就进入游戏了,要同步一下数据
|
|
|
if conf.InitChance != grid.GetInitChance() {
|
|
|
fpwM := s.GetDao().FissionGrid
|
|
|
_, err = fpwM.WithContext(s.Ctx).Where(fpwM.CampaignID.Eq(cpn.ID)).UpdateSimple(fpwM.Chance.Value(grid.GetInitChance()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新盲盒
|
|
|
func (s *Update) updateBlindBox(cpn *model.FissionCampaign) (err error) {
|
|
|
var blind = s.Req.GetBlind()
|
|
|
|
|
|
cc := cache.NewCampaignBlind(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found blind conf")
|
|
|
}
|
|
|
|
|
|
confM := s.GetDao().FissionCampaignBlind
|
|
|
var data = []field.AssignExpr{
|
|
|
confM.DayChance.Value(blind.GetDayChance()),
|
|
|
}
|
|
|
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
_, err = confM.WithContext(s.Ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cc.Clear(conf)
|
|
|
}()
|
|
|
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态不能修改配置
|
|
|
return
|
|
|
}
|
|
|
|
|
|
data = append(data,
|
|
|
confM.TargetNum.Value(blind.GetTargetNum()),
|
|
|
confM.InitChance.Value(blind.GetInitChance()),
|
|
|
confM.Chance.Value(blind.GetChance()),
|
|
|
)
|
|
|
|
|
|
//更新了初次抽奖机会,要处理玩家数据,预防有一些人没开始就进入游戏了,要同步一下数据
|
|
|
if conf.InitChance != blind.GetInitChance() {
|
|
|
fpwM := s.GetDao().FissionBlind
|
|
|
_, err = fpwM.WithContext(s.Ctx).Where(fpwM.CampaignID.Eq(cpn.ID)).UpdateSimple(fpwM.Chance.Value(blind.GetInitChance()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新趣味问答
|
|
|
func (s *Update) updatePrizeAnswer(cpn *model.FissionCampaign) (err error) {
|
|
|
|
|
|
qac := s.Req.GetQuestionAnswer()
|
|
|
|
|
|
cc := cache.NewCampaignQa(s.Ctx)
|
|
|
m := s.GetDao().FissionCampaignQa
|
|
|
qa, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
return s.BE().CacheError(err)
|
|
|
}
|
|
|
|
|
|
if qa == nil {
|
|
|
return workerr.NotFound("not found qa")
|
|
|
}
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
m.QuestionAskTime.Value(qac.GetQuestionAskTime()),
|
|
|
m.QaNum.Value(qac.GetQaNum()),
|
|
|
m.OpenGuide.Value(int8(qac.GetOpenGuide())),
|
|
|
}
|
|
|
|
|
|
if cpn.Status == mtype.FissionCampaignStatusWait { //不是待发布状态的直接返回
|
|
|
data = append(data,
|
|
|
m.TargetNum.Value(qac.GetTargetNum()),
|
|
|
m.Chance.Value(qac.GetChance()),
|
|
|
m.InitChance.Value(qac.GetInitChance()),
|
|
|
m.DayChance.Value(qac.GetDayChance()),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
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")
|
|
|
}
|
|
|
data = append(data, m.QaGroupID.Value(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 guide group params error")
|
|
|
}
|
|
|
data = append(data, m.GuideGroupID.Value(group.ID))
|
|
|
}
|
|
|
|
|
|
//配置数据更新
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(qa.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cc.Clear(qa)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
//更新了初次答题机会,要处理玩家数据,预防有一些人没开始就进入游戏了,要同步一下数据
|
|
|
if qa.InitChance != qac.GetInitChance() {
|
|
|
fqM := s.GetDao().FissionQa
|
|
|
_, err = fqM.WithContext(s.Ctx).Where(fqM.CampaignID.Eq(cpn.ID)).UpdateSimple(fqM.Chance.Value(qac.GetInitChance()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if cpn.FissionID != consts.IdPrizeAnswer {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
//问题数据更新
|
|
|
var addCqq []*model.FissionCampaignQaQuestion
|
|
|
var delCqq []int64
|
|
|
var newCqqIds = make(map[int64]*pb.UpdateReq_QaQuestion)
|
|
|
var sortCqq = make(map[int64]int32)
|
|
|
for i, v := range qac.GetQuestions() {
|
|
|
|
|
|
if v.GetId() > 0 {
|
|
|
sortCqq[v.GetId()] = int32(i)
|
|
|
//修改数据
|
|
|
newCqqIds[v.GetId()] = v
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
//没有ID就是新增数据
|
|
|
addCqq = append(addCqq, withdefault.FissionCampaignQaQuestion(&model.FissionCampaignQaQuestion{
|
|
|
CampaignID: cpn.ID,
|
|
|
QaID: qa.ID,
|
|
|
Title: v.GetTitle(),
|
|
|
Score: v.GetScore(),
|
|
|
Sort: int32(i),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
cqqM := s.GetDao().FissionCampaignQaQuestion
|
|
|
cqqL, err := cqqM.WithContext(s.Ctx).Where(cqqM.QaID.Eq(qa.ID), cqqM.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
for _, v := range cqqL {
|
|
|
cqq, ok := newCqqIds[v.ID]
|
|
|
if !ok {
|
|
|
delCqq = append(delCqq, v.ID)
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var uData = []field.AssignExpr{
|
|
|
cqqM.Title.Value(cqq.GetTitle()),
|
|
|
cqqM.Score.Value(cqq.GetScore()),
|
|
|
cqqM.Sort.Value(sortCqq[cqq.GetId()]),
|
|
|
}
|
|
|
|
|
|
_, err = cqqM.WithContext(s.Ctx).Where(cqqM.ID.Eq(v.ID), cqqM.QaID.Eq(qa.ID)).UpdateSimple(uData...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(addCqq) > 0 {
|
|
|
err = cqqM.WithContext(s.Ctx).Create(addCqq...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delCqq) > 0 {
|
|
|
_, err = cqqM.WithContext(s.Ctx).Where(cqqM.ID.In(delCqq...)).UpdateSimple(cqqM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//答案数据更新
|
|
|
var addCqo []*model.FissionCampaignQaOption
|
|
|
var delCqo []int64
|
|
|
var newCqoIds = make(map[int64]*pb.UpdateReq_QaOption)
|
|
|
var idx int
|
|
|
var qids []int64
|
|
|
for _, v1 := range qac.GetQuestions() {
|
|
|
//已有的题目
|
|
|
if v1.GetId() > 0 {
|
|
|
qids = append(qids, v1.GetId())
|
|
|
|
|
|
for _, v := range v1.GetOptions() {
|
|
|
if v.GetId() > 0 {
|
|
|
//修改数据
|
|
|
newCqoIds[v.GetId()] = v
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
//没有ID就是新增数据
|
|
|
addCqo = append(addCqo, withdefault.FissionCampaignQaOption(&model.FissionCampaignQaOption{
|
|
|
QuestionID: v1.GetId(),
|
|
|
Title: v.GetTitle(),
|
|
|
IsRight: int8(v.GetIsRight()),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
//新创建的题目
|
|
|
for _, v := range v1.GetOptions() {
|
|
|
//没有ID就是新增数据
|
|
|
addCqo = append(addCqo, withdefault.FissionCampaignQaOption(&model.FissionCampaignQaOption{
|
|
|
QuestionID: addCqq[idx].ID,
|
|
|
Title: v.GetTitle(),
|
|
|
IsRight: int8(v.GetIsRight()),
|
|
|
}))
|
|
|
}
|
|
|
//下一个新创建题目的下标
|
|
|
idx++
|
|
|
}
|
|
|
|
|
|
cqoM := s.GetDao().FissionCampaignQaOption
|
|
|
if len(qids) > 0 {
|
|
|
var cqoL []*model.FissionCampaignQaOption
|
|
|
cqoL, err = cqoM.WithContext(s.Ctx).Where(cqoM.QuestionID.In(qids...), cqoM.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
for _, v := range cqoL {
|
|
|
cqo, ok := newCqoIds[v.ID]
|
|
|
if !ok {
|
|
|
delCqo = append(delCqo, v.ID)
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var uData = []field.AssignExpr{
|
|
|
cqoM.Title.Value(cqo.GetTitle()),
|
|
|
cqoM.IsRight.Value(int8(cqo.GetIsRight())),
|
|
|
}
|
|
|
|
|
|
_, err = cqoM.WithContext(s.Ctx).Where(cqoM.ID.Eq(v.ID)).UpdateSimple(uData...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(addCqo) > 0 {
|
|
|
err = cqoM.WithContext(s.Ctx).Create(addCqo...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delCqo) > 0 {
|
|
|
_, err = cqoM.WithContext(s.Ctx).Where(cqoM.ID.In(delCqo...)).UpdateSimple(cqoM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新老带新
|
|
|
func (s *Update) updateReferral(cpn *model.FissionCampaign) (err error) {
|
|
|
|
|
|
cc := cache.NewCampaignReferral(s.Ctx)
|
|
|
crl, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
return s.BE().CacheError(err)
|
|
|
}
|
|
|
|
|
|
if crl == nil {
|
|
|
return workerr.NotFound("not found crl")
|
|
|
}
|
|
|
|
|
|
crlM := s.GetDao().FissionCampaignReferral
|
|
|
var ref = s.Req.GetReferral()
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
crlM.RewardLimit.Value(ref.GetRewardLimit()),
|
|
|
crlM.RewardRule.Value(int8(ref.GetRewardRule())),
|
|
|
crlM.InviteLimit.Value(ref.GetInviteLimit()),
|
|
|
crlM.StepLoop.Value(int8(ref.GetStepLoop())),
|
|
|
}
|
|
|
|
|
|
_, err = crlM.WithContext(s.Ctx).Where(crlM.ID.Eq(crl.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
if crl.RewardLimit < ref.GetRewardLimit() && cpn.Status != mtype.FissionCampaignStatusWait {
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
|
|
|
_ = app.NewVerControl(s.Ctx, ckey.FissionRewardLimitUpVer(cpn.ID), vercontrol.SetExpire(time.Hour)).Create(time.Now(), func() error {
|
|
|
producer.NewCampaignNotice(s.Ctx).RewardLimitUp(types.RewardLimitUp{CampaignId: cpn.ID})
|
|
|
return nil
|
|
|
})
|
|
|
|
|
|
return
|
|
|
})
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cc.Clear(crl)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新一起赢奖励
|
|
|
func (s *Update) updateWinTogether(cpn *model.FissionCampaign) (err error) {
|
|
|
|
|
|
cc := cache.NewCampaignWin(s.Ctx)
|
|
|
fcw, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
return s.BE().CacheError(err)
|
|
|
}
|
|
|
|
|
|
if fcw == nil {
|
|
|
return workerr.NotFound("not found fcw")
|
|
|
}
|
|
|
|
|
|
fcwM := s.GetDao().FissionCampaignWin
|
|
|
var win = s.Req.GetWin()
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
fcwM.RewardLimit.Value(win.GetRewardLimit()),
|
|
|
fcwM.RewardRule.Value(int8(win.GetRewardRule())),
|
|
|
fcwM.InviteLimit.Value(win.GetInviteLimit()),
|
|
|
fcwM.NewcomerCond.Value(int8(win.GetNewcomerCond())),
|
|
|
fcwM.StepLoop.Value(int8(win.GetStepLoop())),
|
|
|
}
|
|
|
|
|
|
_, err = fcwM.WithContext(s.Ctx).Where(fcwM.ID.Eq(fcw.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
if fcw.RewardLimit < win.GetRewardLimit() && cpn.Status != mtype.FissionCampaignStatusWait {
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
|
|
|
_ = app.NewVerControl(s.Ctx, ckey.FissionRewardLimitUpVer(cpn.ID), vercontrol.SetExpire(time.Hour)).Create(time.Now(), func() error {
|
|
|
producer.NewCampaignNotice(s.Ctx).RewardLimitUp(types.RewardLimitUp{CampaignId: cpn.ID})
|
|
|
return nil
|
|
|
})
|
|
|
|
|
|
return
|
|
|
})
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cc.Clear(fcw)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) syncEvent(cpn *model.FissionCampaign) (err error) {
|
|
|
err = cmm.NewCMM(s.Ctx, s.GetDao()).SaveEventCampaignTrigger(cpn.ProjectID)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新报表任务
|
|
|
func (s *Update) updateTask(cpn *model.FissionCampaign) (err error) {
|
|
|
m := s.GetDao().FissionArchiveTask
|
|
|
|
|
|
if s.taskCondAdd {
|
|
|
var endTime = utils.CampaignArchiveEnd(timez.GMT(s.Req.GetEndTime(), s.Req.GetTOffset())).Unix()
|
|
|
err = m.WithContext(s.Ctx).Create(withdefault.FissionArchiveTask(&model.FissionArchiveTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
EndTime: endTime,
|
|
|
Mark: mtype.FissionArchiveTaskMarkCondHour,
|
|
|
}), withdefault.FissionArchiveTask(&model.FissionArchiveTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
EndTime: endTime,
|
|
|
Mark: mtype.FissionArchiveTaskMarkCondDay,
|
|
|
}))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if s.taskCondDel {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.Mark.In(mtype.FissionArchiveTaskMarkCondHour, mtype.FissionArchiveTaskMarkCondDay)).Delete()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if s.taskEndChange {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID)).UpdateSimple(m.EndTime.Value(utils.CampaignArchiveEnd(timez.GMT(s.Req.GetEndTime(), s.Req.GetTOffset())).Unix()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = cmm.NewCMM(s.Ctx, s.GetDao()).AnalyzeCampaign(cpn.ProjectID, cpn.ID, cpn.StartTime, cpn.EndTime, 0)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新签到
|
|
|
func (s *Update) updateSignIn(cpn *model.FissionCampaign) (err error) {
|
|
|
cc := cache.NewCampaignSign(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found fcs")
|
|
|
}
|
|
|
|
|
|
fcsM := s.GetDao().FissionCampaignSign
|
|
|
var sign = s.Req.GetSign()
|
|
|
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait {
|
|
|
_, err = fcsM.WithContext(s.Ctx).Where(fcsM.ID.Eq(conf.ID)).UpdateSimple(
|
|
|
fcsM.Color.Value(sign.GetColor()),
|
|
|
fcsM.SignCycle.Value(sign.GetSignCycle()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cc.Clear(conf)
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
fcsM.SignType.Value(int8(sign.GetSignType())),
|
|
|
fcsM.IsContinue.Value(int8(sign.GetIsContinue())),
|
|
|
fcsM.HasCard.Value(int8(sign.GetHasCard())),
|
|
|
fcsM.InviteNum.Value(sign.GetInviteNum()),
|
|
|
fcsM.IsLoop.Value(int8(sign.GetIsLoop())),
|
|
|
fcsM.SignCycle.Value(sign.GetSignCycle()),
|
|
|
fcsM.RecycleType.Value(int8(sign.GetRecycleType())),
|
|
|
fcsM.Color.Value(sign.GetColor()),
|
|
|
}
|
|
|
|
|
|
_, err = fcsM.WithContext(s.Ctx).Where(fcsM.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cc.Clear(conf)
|
|
|
})
|
|
|
|
|
|
if conf.HasCard == mtype.No && sign.GetHasCard() == mtype.No {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf.HasCard == mtype.No && sign.GetHasCard() == mtype.Yes {
|
|
|
task := withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeInstall,
|
|
|
TaskMark: mtype.FissionCampaignTaskMarkInstall,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Num: sign.GetInviteNum(),
|
|
|
Chance: 1,
|
|
|
})
|
|
|
|
|
|
err = s.GetDao().FissionCampaignTask.WithContext(s.Ctx).Create(task)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
|
task, err := taskM.WithContext(s.Ctx).Where(
|
|
|
taskM.CampaignID.Eq(cpn.ID),
|
|
|
taskM.TaskType.Eq(mtype.FissionCampaignTaskTypeInstall),
|
|
|
taskM.PropMark.Eq(mtype.FissionCampaignTaskPropMarkChance),
|
|
|
).Take()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if sign.GetHasCard() == mtype.No {
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(taskM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(taskM.Num.Value(sign.GetInviteNum()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateDice(cpn *model.FissionCampaign) (err error) {
|
|
|
var dice = s.Req.GetDice()
|
|
|
fcdM := s.GetDao().FissionCampaignDice
|
|
|
fcd, err := fcdM.WithContext(s.Ctx).Where(fcdM.CampaignID.Eq(cpn.ID)).Take()
|
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
if fcd == nil {
|
|
|
return workerr.NotFound("not found fcd")
|
|
|
}
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
fcdM.InitChance.Value(dice.GetInitChance()),
|
|
|
fcdM.CustomDice.Value(dice.GetCustomDice()),
|
|
|
fcdM.DayChance.Value(dice.GetDayChance()),
|
|
|
fcdM.OpenMapPoint.Value(int8(dice.GetOpenMapPoint())),
|
|
|
fcdM.OpenInvite.Value(int8(dice.GetOpenInvite())),
|
|
|
fcdM.Odds.Value(dice.GetOdds()),
|
|
|
fcdM.PlayImg.Value(dice.GetPlayImg()),
|
|
|
fcdM.CloudImg.Value(dice.GetCloudImg()),
|
|
|
}
|
|
|
|
|
|
mapPoint, _ := jsonm.MarshalToString(&mtype.MapPoint{
|
|
|
Blank: dice.GetMapPoint().GetBlank(),
|
|
|
Again: dice.GetMapPoint().GetAgain(),
|
|
|
Normal: dice.GetMapPoint().GetNormal(),
|
|
|
Supper: dice.GetMapPoint().GetSupper(),
|
|
|
})
|
|
|
|
|
|
data = append(data, fcdM.MapPoint.Value(mapPoint))
|
|
|
|
|
|
// 更新数据
|
|
|
defer func() {
|
|
|
_, err = fcdM.WithContext(s.Ctx).Where(fcdM.ID.Eq(fcd.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cache.NewCampaignDice(s.Ctx).Clear(fcd)
|
|
|
|
|
|
if fcd.InitChance != dice.GetInitChance() {
|
|
|
s.OL().User(s.Req.UserId, s.Req.Ip).UpdateRunningDiceInit(fcd.ID, fcd.InitChance, dice.GetInitChance())
|
|
|
}
|
|
|
|
|
|
if fcd.DayChance != dice.GetDayChance() {
|
|
|
s.OL().User(s.Req.UserId, s.Req.Ip).UpdateRunningDiceDay(fcd.ID, fcd.DayChance, dice.GetDayChance())
|
|
|
}
|
|
|
|
|
|
}()
|
|
|
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态的直接返回
|
|
|
return
|
|
|
}
|
|
|
|
|
|
data = append(data,
|
|
|
fcdM.FixDiceTarget.Value(dice.GetFixDiceTarget()),
|
|
|
fcdM.FixDice.Value(int8(dice.GetFixDice())),
|
|
|
fcdM.FixDiceLimit.Value(dice.GetFixDiceLimit()),
|
|
|
fcdM.AwardType.Value(int8(dice.GetAwardType())),
|
|
|
fcdM.RollAgain.Value(int8(dice.GetRollAgain())),
|
|
|
fcdM.FixDiceCond.Value(int8(dice.GetFixDiceCond())),
|
|
|
)
|
|
|
|
|
|
if fcd.FixDice == mtype.No && dice.GetFixDice() == mtype.No {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
ntt := utils.Ternary[int8](dice.GetFixDiceCond() == mtype.FissionCampaignDiceFixDiceCondInstall,
|
|
|
mtype.FissionCampaignTaskTypeInstall, mtype.FissionCampaignTaskTypeRegister)
|
|
|
ntm := utils.Ternary[string](dice.GetFixDiceCond() == mtype.FissionCampaignDiceFixDiceCondInstall,
|
|
|
mtype.FissionCampaignTaskMarkInstall, mtype.FissionCampaignTaskMarkRegister)
|
|
|
|
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
|
if fcd.FixDice == mtype.No && dice.GetFixDice() == mtype.Yes {
|
|
|
err = taskM.WithContext(s.Ctx).Create(&model.FissionCampaignTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
TaskType: ntt,
|
|
|
TaskMark: ntm,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkFixedRoll,
|
|
|
Num: dice.GetFixDiceTarget(),
|
|
|
Chance: 1,
|
|
|
ChanceLimit: dice.GetFixDiceLimit(),
|
|
|
TaskLimit: 0,
|
|
|
})
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
ott := utils.Ternary[string](
|
|
|
fcd.FixDiceCond == mtype.FissionCampaignDiceFixDiceCondInstall,
|
|
|
mtype.FissionCampaignTaskMarkInstall, mtype.FissionCampaignTaskMarkRegister)
|
|
|
|
|
|
task, err := taskM.WithContext(s.Ctx).Where(
|
|
|
taskM.CampaignID.Eq(cpn.ID),
|
|
|
taskM.TaskMark.Eq(ott),
|
|
|
taskM.PropMark.Eq(mtype.FissionCampaignTaskPropMarkFixedRoll),
|
|
|
taskM.IsDel.Eq(mtype.No),
|
|
|
).Take()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if fcd.FixDice == mtype.Yes && dice.GetFixDice() == mtype.No {
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(taskM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if fcd.FixDice == mtype.Yes && dice.GetFixDice() == mtype.Yes {
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(
|
|
|
taskM.TaskType.Value(ntt),
|
|
|
taskM.TaskMark.Value(ntm),
|
|
|
taskM.Num.Value(dice.GetFixDiceTarget()),
|
|
|
taskM.ChanceLimit.Value(dice.GetFixDiceLimit()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateGrow(cpn *model.FissionCampaign) (err error) {
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态的直接返回
|
|
|
return
|
|
|
}
|
|
|
|
|
|
confM := s.GetDao().FissionCampaignGrow
|
|
|
|
|
|
conf, err := confM.WithContext(s.Ctx).Where(confM.CampaignID.Eq(cpn.ID)).Take()
|
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found grow conf")
|
|
|
}
|
|
|
var grow = s.Req.GetGrow()
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
confM.AutoHour.Value(grow.GetAutoHour()),
|
|
|
confM.AutoNum.Value(grow.GetAutoNum()),
|
|
|
confM.GrowNum.Value(grow.GetGrowNum()),
|
|
|
confM.TargetNum.Value(grow.GetTargetNum()),
|
|
|
confM.Revive.Value(int8(grow.GetRevive())),
|
|
|
confM.ReviveNum.Value(grow.GetReviveNum()),
|
|
|
confM.DieHour.Value(grow.GetDieHour()),
|
|
|
confM.InitNum.Value(grow.GetInitNum()),
|
|
|
}
|
|
|
|
|
|
_, err = confM.WithContext(s.Ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
// 阶段更新
|
|
|
var stepAdd []*model.FissionCampaignGrowStep
|
|
|
var stepDel []int64
|
|
|
var stepNewIds = make(map[int64]*pb.UpdateReq_GrowStep)
|
|
|
var stepMap = make(map[int64]int32)
|
|
|
for i, v := range grow.GetSteps() {
|
|
|
if v.GetId() > 0 {
|
|
|
//修改数据
|
|
|
stepNewIds[v.GetId()] = v
|
|
|
stepMap[v.GetId()] = int32(i + 1)
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
//没有ID就是新增数据
|
|
|
stepAdd = append(stepAdd, withdefault.FissionCampaignGrowStep(&model.FissionCampaignGrowStep{
|
|
|
CampaignID: cpn.ID,
|
|
|
Step: int32(i + 1),
|
|
|
Num: v.GetNum(),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
stepM := s.GetDao().FissionCampaignGrowStep
|
|
|
steps, err := stepM.WithContext(s.Ctx).Where(
|
|
|
stepM.CampaignID.Eq(cpn.ID),
|
|
|
stepM.IsDel.Eq(mtype.No),
|
|
|
).Order(stepM.Step).Find()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
for _, v := range steps {
|
|
|
step, ok := stepNewIds[v.ID]
|
|
|
if !ok {
|
|
|
stepDel = append(stepDel, v.ID)
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
_, err = stepM.WithContext(s.Ctx).Where(stepM.ID.Eq(v.ID), stepM.CampaignID.Eq(cpn.ID)).UpdateSimple(stepM.Step.Value(stepMap[v.ID]), stepM.Num.Value(step.GetNum()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if len(stepAdd) > 0 {
|
|
|
err = stepM.WithContext(s.Ctx).Create(stepAdd...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(stepDel) > 0 {
|
|
|
_, err = stepM.WithContext(s.Ctx).Where(stepM.ID.In(stepDel...), stepM.CampaignID.Eq(cpn.ID)).UpdateSimple(stepM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//更新复活任务
|
|
|
err = s._updateReviveTask(cpn)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) _updateReviveTask(cpn *model.FissionCampaign) error {
|
|
|
grow := s.Req.GetGrow()
|
|
|
taskM := s.GetDao().FissionCampaignTask
|
|
|
task, err := taskM.WithContext(s.Ctx).Where(
|
|
|
taskM.CampaignID.Eq(cpn.ID),
|
|
|
taskM.TaskMark.Eq(mtype.FissionCampaignTaskMarkInstall),
|
|
|
taskM.PropMark.Eq(mtype.FissionCampaignTaskPropMarkRevive),
|
|
|
taskM.IsDel.Eq(mtype.No),
|
|
|
).Take()
|
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
switch grow.GetRevive() {
|
|
|
case mtype.Yes:
|
|
|
//如果没有复活任务则创建复活任务
|
|
|
if task == nil {
|
|
|
task = withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpn.ID,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeInstall,
|
|
|
TaskMark: mtype.FissionCampaignTaskMarkInstall,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkRevive,
|
|
|
Num: grow.GetReviveNum(),
|
|
|
Chance: 1,
|
|
|
})
|
|
|
err = taskM.WithContext(s.Ctx).Create(task)
|
|
|
} else {
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(taskM.Num.Value(grow.GetReviveNum()))
|
|
|
}
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
case mtype.No:
|
|
|
//有任务则删除复活任务
|
|
|
if task == nil {
|
|
|
return nil
|
|
|
}
|
|
|
_, err = taskM.WithContext(s.Ctx).Where(taskM.ID.Eq(task.ID)).UpdateSimple(taskM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateBallot(cpn *model.FissionCampaign) (err error) {
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态的直接返回
|
|
|
return
|
|
|
}
|
|
|
|
|
|
cc := cache.NewCampaignBallot(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found ballot conf")
|
|
|
}
|
|
|
|
|
|
confM := s.GetDao().FissionCampaignBallot
|
|
|
var ballot = s.Req.GetBallot()
|
|
|
var data = []field.AssignExpr{
|
|
|
confM.InitChance.Value(ballot.GetInitChance()),
|
|
|
confM.DayChance.Value(ballot.GetDayChance()),
|
|
|
}
|
|
|
|
|
|
_, err = confM.WithContext(s.Ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateChop(cpn *model.FissionCampaign) (err error) {
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态的直接返回
|
|
|
return
|
|
|
}
|
|
|
|
|
|
cc := cache.NewCampaignChop(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
return s.BE().CacheError(err)
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found chop conf")
|
|
|
}
|
|
|
|
|
|
confM := s.GetDao().FissionCampaignChop
|
|
|
var chop = s.Req.GetChop()
|
|
|
|
|
|
var data []field.AssignExpr
|
|
|
|
|
|
if conf.ShowBar != int8(chop.GetShowBar()) {
|
|
|
data = append(data, confM.ShowBar.Value(int8(chop.GetShowBar())))
|
|
|
}
|
|
|
|
|
|
if len(data) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = confM.WithContext(s.Ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
_ = cc.Clear(conf)
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 设置延迟深度链接数据
|
|
|
func (s *Update) 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(),
|
|
|
})
|
|
|
}
|
|
|
|
|
|
if len(data.Data) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = app.NewDeepLinkLink().SaveCampaignDataList(s.Ctx, data)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 处理奖品数据
|
|
|
func (s *Update) updateReward(cpn *model.FissionCampaign) (err error) {
|
|
|
|
|
|
// 发布之后
|
|
|
if s.justUpdatePart {
|
|
|
return s._updateRunningReward(cpn)
|
|
|
}
|
|
|
|
|
|
m := s.GetDao().FissionCampaignReward
|
|
|
list, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
var add = s.otherReward
|
|
|
var delIds []int64
|
|
|
webAdd, webDelIds, err := s._updateRewards(s.Req.GetRewardsWeb(), list, cpn, mtype.FissionCampaignRewardTypeWeb, consts.CampaignUserType{})
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
add = append(add, webAdd...)
|
|
|
delIds = append(delIds, webDelIds...)
|
|
|
|
|
|
extraAdd, extraDelIds, err := s._updateRewards(s.Req.GetRewardsExtra(), list, cpn, mtype.FissionCampaignRewardTypeExtra, consts.CampaignUserType{})
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
add = append(add, extraAdd...)
|
|
|
delIds = append(delIds, extraDelIds...)
|
|
|
|
|
|
newcomerAdd, newcomerDelIds, err := s._updateRewards(s.Req.GetRewardsNewcomer(), list, cpn, mtype.FissionCampaignRewardTypeNewcomer, consts.CampaignUserType{})
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
add = append(add, newcomerAdd...)
|
|
|
delIds = append(delIds, newcomerDelIds...)
|
|
|
|
|
|
var appAdd []*model.FissionCampaignReward
|
|
|
var appDelIds []int64
|
|
|
switch s.Req.GetRewards().GetRewardGroup() {
|
|
|
case mtype.FissionRewardGroupNormal:
|
|
|
appAdd, appDelIds, err = s._updateRewards(s.Req.GetRewards().GetNormal(), list, cpn, mtype.FissionCampaignRewardTypeApp, consts.CampaignUserType{})
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
case mtype.FissionRewardGroupLang:
|
|
|
var langMarks []string
|
|
|
for _, langs := range s.Req.GetRewards().GetLangs() {
|
|
|
var langAdd []*model.FissionCampaignReward
|
|
|
var langDelIds []int64
|
|
|
langAdd, langDelIds, err = s._updateRewards(langs.GetRewards(), list, cpn, mtype.FissionCampaignRewardTypeApp, consts.CampaignUserType{LangMark: langs.GetLangMark()})
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
appAdd = append(appAdd, langAdd...)
|
|
|
appDelIds = append(appDelIds, langDelIds...)
|
|
|
langMarks = append(langMarks, langs.GetLangMark())
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.LangMark.NotIn(langMarks...)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
case mtype.FissionRewardGroupUserLevel:
|
|
|
var levelIds []int64
|
|
|
for _, level := range s.Req.GetRewards().GetUserLevel().GetLevelList() {
|
|
|
var levelAdd []*model.FissionCampaignReward
|
|
|
var levelDelIds []int64
|
|
|
levelAdd, levelDelIds, err = s._updateRewards(level.GetRewards(), list, cpn, mtype.FissionCampaignRewardTypeApp, consts.CampaignUserType{LevelId: level.GetLevelId()})
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
appAdd = append(appAdd, levelAdd...)
|
|
|
appDelIds = append(appDelIds, levelDelIds...)
|
|
|
levelIds = append(levelIds, level.GetLevelId())
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.LevelID.NotIn(levelIds...)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
case mtype.FissionRewardGroupLangAndUserLevel:
|
|
|
var langMarks []string
|
|
|
|
|
|
for _, lang := range s.Req.GetRewards().GetLangUserLevel() {
|
|
|
var levelIds []int64
|
|
|
for _, level := range lang.GetLevelList() {
|
|
|
var llAdd []*model.FissionCampaignReward
|
|
|
var llDelIds []int64
|
|
|
llAdd, llDelIds, err = s._updateRewards(level.GetRewards(), list, cpn, mtype.FissionCampaignRewardTypeApp, consts.CampaignUserType{LevelId: level.GetLevelId(), LangMark: lang.GetLangMark()})
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
appAdd = append(appAdd, llAdd...)
|
|
|
appDelIds = append(appDelIds, llDelIds...)
|
|
|
levelIds = append(levelIds, level.GetLevelId())
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.LangMark.Eq(lang.GetLangMark()), m.LevelID.NotIn(levelIds...)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
langMarks = append(langMarks, lang.GetLangMark())
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.LangMark.NotIn(langMarks...), m.LevelID.Gt(0)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
case mtype.FissionRewardGroupCountry:
|
|
|
var countryMarks []string
|
|
|
for _, country := range s.Req.GetRewards().GetCountry().GetCountryList() {
|
|
|
var countryAdd []*model.FissionCampaignReward
|
|
|
var countryDelIds []int64
|
|
|
countryAdd, countryDelIds, err = s._updateRewards(country.GetRewards(), list, cpn, mtype.FissionCampaignRewardTypeApp, consts.CampaignUserType{CountryMark: country.GetCountryMark()})
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
appAdd = append(appAdd, countryAdd...)
|
|
|
appDelIds = append(appDelIds, countryDelIds...)
|
|
|
countryMarks = append(countryMarks, country.GetCountryMark())
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.CountryMark.NotIn(countryMarks...)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
add = append(add, appAdd...)
|
|
|
delIds = append(delIds, appDelIds...)
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
if err = m.WithContext(s.Ctx).Create(add...); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delIds) > 0 {
|
|
|
if _, err = m.WithContext(s.Ctx).Where(m.ID.In(delIds...)).UpdateSimple(m.IsDel.Value(mtype.Yes)); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
err = s._updateRelated(cpn.ID)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新规则
|
|
|
err = s._updateRule(cpn.ID)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if cpn.FissionID == consts.IdChop {
|
|
|
err = s._updateHelp(cpn.ID)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return s._updateHelpTicket(cpn)
|
|
|
}
|
|
|
|
|
|
// 更新奖品数据
|
|
|
func (s *Update) _updateRewards(newList []*pb.UpdateReq_Reward, oldList []*model.FissionCampaignReward, cpn *model.FissionCampaign, rt int8, t consts.CampaignUserType) (add []*model.FissionCampaignReward, delIds []int64, err error) {
|
|
|
if len(oldList) == 0 && len(newList) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldMap = make(map[int64]*model.FissionCampaignReward)
|
|
|
for _, v := range oldList {
|
|
|
if v.RewardType == rt && v.LangMark == t.LangMark && v.LevelID == t.LevelId && v.CountryMark == t.CountryMark {
|
|
|
oldMap[v.ID] = v
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var delStockId []int64
|
|
|
m := s.GetDao().FissionCampaignReward
|
|
|
for i, v := range newList {
|
|
|
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
|
|
|
}
|
|
|
|
|
|
hashRule := utils.Ternary[int8](v.GetCampaignLimit() > 0, mtype.Yes, mtype.No)
|
|
|
sort := int32(i)
|
|
|
old, ok := oldMap[v.GetId()]
|
|
|
if !ok {
|
|
|
|
|
|
one := withdefault.FissionCampaignReward(&model.FissionCampaignReward{
|
|
|
CampaignID: cpn.ID,
|
|
|
Stock: v.GetStock(),
|
|
|
Sort: sort,
|
|
|
RewardType: rt,
|
|
|
Step: step,
|
|
|
InviteNum: v.GetInviteNum(),
|
|
|
RewardNum: v.GetRewardNum(),
|
|
|
IsThank: int8(v.GetIsThank()),
|
|
|
Score: v.GetScore(),
|
|
|
SignDay: v.GetSignDay(),
|
|
|
CollectNum: v.GetCollectNum(),
|
|
|
IsSuper: int8(v.GetIsSuper()),
|
|
|
RewardID: v.GetRewardId(),
|
|
|
LangMark: t.LangMark,
|
|
|
LevelID: t.LevelId,
|
|
|
Odds: v.GetOdds(),
|
|
|
CountryMark: t.CountryMark,
|
|
|
JumpURL: v.GetJumpUrl(),
|
|
|
HasRule: hashRule,
|
|
|
InitPercent: v.GetInitPercent(),
|
|
|
PropMark: mtype.FissionCampaignRewardPropMarkReward,
|
|
|
OpenAdd: int8(v.GetOpenAdd().GetOpen()),
|
|
|
OpenTask: int8(v.GetRewardTask().GetOpen()),
|
|
|
})
|
|
|
|
|
|
s.rewardAdd[one.ID] = v.GetOpenAdd()
|
|
|
s.rewardTask[one.ID] = v.GetRewardTask()
|
|
|
|
|
|
if cpn.FissionID == consts.IdDice {
|
|
|
one.SetCollectRule(mtype.CollectRule{
|
|
|
Open: v.GetCollectRule().GetOpen(),
|
|
|
InitCollect: v.GetCollectRule().GetInitCollect(),
|
|
|
SignDay: v.GetCollectRule().GetSignDay(),
|
|
|
AddCollect: v.GetCollectRule().GetAddCollect(),
|
|
|
ResetType: v.GetCollectRule().GetResetType(),
|
|
|
})
|
|
|
}
|
|
|
|
|
|
add = append(add, one)
|
|
|
|
|
|
newList[i].Id = one.ID
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
delete(oldMap, old.ID)
|
|
|
s.rewardAdd[old.ID] = v.GetOpenAdd()
|
|
|
s.rewardTask[old.ID] = v.GetRewardTask()
|
|
|
|
|
|
var upData []field.AssignExpr
|
|
|
|
|
|
if old.Sort != sort {
|
|
|
upData = append(upData, m.Sort.Value(sort))
|
|
|
}
|
|
|
|
|
|
if old.Step != step {
|
|
|
upData = append(upData, m.Step.Value(step))
|
|
|
}
|
|
|
|
|
|
if old.Score != v.GetScore() {
|
|
|
upData = append(upData, m.Score.Value(v.GetScore()))
|
|
|
}
|
|
|
|
|
|
if old.Odds != v.GetOdds() {
|
|
|
upData = append(upData, m.Odds.Value(v.GetOdds()))
|
|
|
}
|
|
|
|
|
|
if old.Stock != v.GetStock() {
|
|
|
upData = append(upData, m.Stock.Value(v.GetStock()))
|
|
|
}
|
|
|
|
|
|
if old.InitPercent != v.GetInitPercent() {
|
|
|
upData = append(upData, m.InitPercent.Value(v.GetInitPercent()))
|
|
|
}
|
|
|
|
|
|
if old.OpenAdd != int8(v.GetOpenAdd().GetOpen()) {
|
|
|
upData = append(upData, m.OpenAdd.Value(int8(v.GetOpenAdd().GetOpen())))
|
|
|
}
|
|
|
|
|
|
if old.OpenTask != int8(v.GetRewardTask().GetOpen()) {
|
|
|
upData = append(upData, m.OpenTask.Value(int8(v.GetRewardTask().GetOpen())))
|
|
|
}
|
|
|
|
|
|
hasRule := utils.Ternary[int8](v.GetCampaignLimit() > 0, mtype.Yes, mtype.No)
|
|
|
if old.HasRule != hasRule {
|
|
|
upData = append(upData, m.HasRule.Value(hasRule))
|
|
|
}
|
|
|
|
|
|
if cpn.FissionID == consts.IdDice {
|
|
|
cr, _ := jsonm.MarshalToString(mtype.CollectRule{
|
|
|
Open: v.GetCollectRule().GetOpen(),
|
|
|
InitCollect: v.GetCollectRule().GetInitCollect(),
|
|
|
SignDay: v.GetCollectRule().GetSignDay(),
|
|
|
AddCollect: v.GetCollectRule().GetAddCollect(),
|
|
|
ResetType: v.GetCollectRule().GetResetType(),
|
|
|
})
|
|
|
|
|
|
oldCr, newCr := utils.Md5Any(old.GetCollectRule()), utils.Md5String(cr)
|
|
|
if oldCr != newCr {
|
|
|
upData = append(upData, m.CollectRule.Value(cr))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if old.InviteNum != v.GetInviteNum() {
|
|
|
upData = append(upData, m.InviteNum.Value(v.GetInviteNum()))
|
|
|
}
|
|
|
|
|
|
if old.RewardNum != v.GetRewardNum() {
|
|
|
upData = append(upData, m.RewardNum.Value(v.GetRewardNum()))
|
|
|
}
|
|
|
|
|
|
if old.IsThank != int8(v.GetIsThank()) {
|
|
|
upData = append(upData, m.IsThank.Value(int8(v.GetIsThank())))
|
|
|
}
|
|
|
|
|
|
if old.SignDay != v.GetSignDay() {
|
|
|
upData = append(upData, m.SignDay.Value(v.GetSignDay()))
|
|
|
}
|
|
|
|
|
|
if old.CollectNum != v.GetCollectNum() {
|
|
|
upData = append(upData, m.CollectNum.Value(v.GetCollectNum()))
|
|
|
}
|
|
|
|
|
|
if old.IsSuper != int8(v.GetIsSuper()) {
|
|
|
upData = append(upData, m.IsSuper.Value(int8(v.GetIsSuper())))
|
|
|
}
|
|
|
|
|
|
if old.RewardID != v.GetRewardId() {
|
|
|
upData = append(upData, m.RewardID.Value(v.GetRewardId()))
|
|
|
}
|
|
|
|
|
|
if old.JumpURL != v.GetJumpUrl() {
|
|
|
upData = append(upData, m.JumpURL.Value(v.GetJumpUrl()))
|
|
|
}
|
|
|
|
|
|
if len(upData) == 0 {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(old.ID)).UpdateSimple(upData...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if old.Stock != v.GetStock() && verify.InArray(cpn.Status, mtype.FissionCampaignStatusPubPre, mtype.FissionCampaignStatusPub) {
|
|
|
delStockId = append(delStockId, old.ID)
|
|
|
s.OL().User(s.Req.UserId, s.Req.Ip).UpdateRunningStock(old.ID, old.Stock, v.GetStock())
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
if len(delStockId) > 0 {
|
|
|
stocks.NewCleaner(s.Ctx, delStockId...).ClearAllReward()
|
|
|
}
|
|
|
return
|
|
|
})
|
|
|
|
|
|
if len(oldMap) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, v := range oldMap {
|
|
|
delIds = append(delIds, v.ID)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新奖品库存追加规则
|
|
|
func (s *Update) updateRewardAdd(cpn *model.FissionCampaign) (err error) {
|
|
|
|
|
|
m := s.GetDao().FissionCampaignRewardAdd
|
|
|
oldList, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
oldMap := make(map[int64]*model.FissionCampaignRewardAdd, len(oldList))
|
|
|
for _, old := range oldList {
|
|
|
oldMap[old.RewardID] = old
|
|
|
}
|
|
|
|
|
|
list := make([]*model.FissionCampaignRewardAdd, 0)
|
|
|
for rewardID, add := range s.rewardAdd {
|
|
|
if add.GetOpen() == mtype.No {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var start = timez.GMT(add.GetStart(), cpn.TOffset)
|
|
|
var end = timez.GMT(add.GetEnd(), cpn.TOffset)
|
|
|
|
|
|
old, ok := oldMap[rewardID]
|
|
|
if ok {
|
|
|
var upData []field.AssignExpr
|
|
|
if old.DayNum != add.GetDayNum() {
|
|
|
upData = append(upData, m.DayNum.Value(add.GetDayNum()))
|
|
|
}
|
|
|
if old.DayAdd != add.GetDayAdd() {
|
|
|
upData = append(upData, m.DayAdd.Value(add.GetDayAdd()))
|
|
|
}
|
|
|
|
|
|
if old.Start != start {
|
|
|
upData = append(upData, m.Start.Value(start))
|
|
|
}
|
|
|
|
|
|
if old.End != end {
|
|
|
upData = append(upData, m.End.Value(end))
|
|
|
}
|
|
|
|
|
|
if (old.Start != start || old.End != end) && old.FinishAt != 0 {
|
|
|
upData = append(upData, m.FinishAt.Value(0))
|
|
|
}
|
|
|
|
|
|
if len(upData) > 0 {
|
|
|
if _, err = m.WithContext(s.Ctx).Where(m.ID.Eq(old.ID)).UpdateSimple(upData...); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
delete(oldMap, rewardID)
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
list = append(list, withdefault.FissionCampaignRewardAdd(&model.FissionCampaignRewardAdd{
|
|
|
CampaignID: cpn.ID,
|
|
|
RewardID: rewardID,
|
|
|
Start: start,
|
|
|
End: end,
|
|
|
DayNum: add.GetDayNum(),
|
|
|
DayAdd: add.GetDayAdd(),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
if len(list) > 0 {
|
|
|
if err = m.WithContext(s.Ctx).Create(list...); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var delIds []int64
|
|
|
for _, v := range oldMap {
|
|
|
delIds = append(delIds, v.ID)
|
|
|
}
|
|
|
|
|
|
if len(delIds) > 0 {
|
|
|
if _, err = m.WithContext(s.Ctx).Where(m.ID.In(delIds...)).UpdateSimple(m.IsDel.Value(mtype.Yes)); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新奖品任务
|
|
|
func (s *Update) updateRewardTask(cpn *model.FissionCampaign) (err error) {
|
|
|
|
|
|
m := s.GetDao().FissionCampaignCond
|
|
|
oldList, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.IsDel.Eq(mtype.No), m.RewardID.Gt(0)).Find()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
oldMap := make(map[int64]*model.FissionCampaignCond, len(oldList))
|
|
|
for _, old := range oldList {
|
|
|
oldMap[old.RewardID] = old
|
|
|
}
|
|
|
|
|
|
conds := make([]*model.FissionCampaignCond, 0)
|
|
|
tasks := make([]*model.FissionCampaignTask, 0)
|
|
|
|
|
|
for rewardID, add := range s.rewardTask {
|
|
|
if add.GetOpen() == mtype.No {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
old, ok := oldMap[rewardID]
|
|
|
if ok {
|
|
|
var upData []field.AssignExpr
|
|
|
if old.Event != add.GetEvent() {
|
|
|
upData = append(upData, m.Event.Value(add.GetEvent()))
|
|
|
}
|
|
|
|
|
|
if old.EventKey != add.GetEventKey() {
|
|
|
upData = append(upData, m.EventKey.Value(add.GetEventKey()))
|
|
|
}
|
|
|
|
|
|
if old.EventVal != add.GetEventVal() {
|
|
|
upData = append(upData, m.EventVal.Value(add.GetEventVal()))
|
|
|
}
|
|
|
|
|
|
if old.EventType != int8(add.GetEventType()) {
|
|
|
upData = append(upData, m.EventType.Value(int8(add.GetEventType())))
|
|
|
}
|
|
|
|
|
|
if old.IfCond != int8(add.GetIfCond()) {
|
|
|
upData = append(upData, m.IfCond.Value(int8(add.GetIfCond())))
|
|
|
}
|
|
|
|
|
|
if old.TriggetType != int8(add.GetTriggerType()) {
|
|
|
upData = append(upData, m.OpenPush.Value(int8(add.GetOpenPush())))
|
|
|
}
|
|
|
|
|
|
if old.OpenPush != int8(add.GetOpenPush()) {
|
|
|
upData = append(upData, m.OpenPush.Value(int8(add.GetOpenPush())))
|
|
|
}
|
|
|
|
|
|
if len(upData) > 0 {
|
|
|
if _, err = m.WithContext(s.Ctx).Where(m.ID.Eq(old.ID)).UpdateSimple(upData...); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
delete(oldMap, rewardID)
|
|
|
|
|
|
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: rewardID,
|
|
|
})
|
|
|
|
|
|
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: rewardID,
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
if len(conds) > 0 {
|
|
|
if err = m.WithContext(s.Ctx).Create(conds...); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(tasks) > 0 {
|
|
|
if err = s.GetDao().FissionCampaignTask.WithContext(s.Ctx).Create(tasks...); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var delIds []int64
|
|
|
for _, v := range oldMap {
|
|
|
delIds = append(delIds, v.ID)
|
|
|
}
|
|
|
|
|
|
if len(delIds) > 0 {
|
|
|
if _, err = m.WithContext(s.Ctx).Where(m.ID.In(delIds...)).UpdateSimple(m.IsDel.Value(mtype.Yes)); err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新奖品关联
|
|
|
func (s *Update) _updateRelated(cpnId int64) (err error) {
|
|
|
m := s.GetDao().RewardRelated
|
|
|
list, err := m.WithContext(s.Ctx).Where(m.RelateID.Eq(cpnId), m.RelateTable.Eq(dao.FissionCampaign.TableName())).Find()
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
var relateMap = make(map[int64]struct{})
|
|
|
var oldMap = make(map[int64]*model.RewardRelated)
|
|
|
for _, v := range list {
|
|
|
oldMap[v.RewardID] = v
|
|
|
relateMap[v.RewardID] = struct{}{}
|
|
|
}
|
|
|
|
|
|
var orIds []int64
|
|
|
var add []*model.RewardRelated
|
|
|
|
|
|
for _, rewardId := range s.otherRelateIds {
|
|
|
_, ok := relateMap[rewardId]
|
|
|
if !ok {
|
|
|
add = append(add, withdefault.RewardRelated(&model.RewardRelated{
|
|
|
RewardID: rewardId,
|
|
|
RelateID: cpnId,
|
|
|
RelateTable: dao.FissionCampaign.TableName(),
|
|
|
CancelTime: 0,
|
|
|
}))
|
|
|
relateMap[rewardId] = struct{}{}
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
old, ok1 := oldMap[rewardId]
|
|
|
if ok1 && old.CancelTime > 0 {
|
|
|
orIds = append(orIds, old.ID)
|
|
|
}
|
|
|
delete(oldMap, rewardId)
|
|
|
}
|
|
|
|
|
|
var bfn = func(newList []*pb.UpdateReq_Reward) (err error) {
|
|
|
for _, v := range newList {
|
|
|
_, ok := relateMap[v.GetRewardId()]
|
|
|
if !ok {
|
|
|
add = append(add, withdefault.RewardRelated(&model.RewardRelated{
|
|
|
RewardID: v.GetRewardId(),
|
|
|
RelateID: cpnId,
|
|
|
RelateTable: dao.FissionCampaign.TableName(),
|
|
|
CancelTime: 0,
|
|
|
}))
|
|
|
relateMap[v.GetRewardId()] = struct{}{}
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
old, ok1 := oldMap[v.GetRewardId()]
|
|
|
if ok1 && old.CancelTime > 0 {
|
|
|
orIds = append(orIds, old.ID)
|
|
|
}
|
|
|
delete(oldMap, v.GetRewardId())
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = bfn(s.Req.GetRewardsWeb())
|
|
|
_ = bfn(s.Req.GetRewardsExtra())
|
|
|
_ = bfn(s.Req.GetRewardsNewcomer())
|
|
|
|
|
|
_ = s._switchRewardGroupDo(bfn)
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
if err = m.WithContext(s.Ctx).Create(add...); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(orIds) > 0 {
|
|
|
if _, err = m.WithContext(s.Ctx).Where(m.ID.In(orIds...)).UpdateSimple(m.CancelTime.Value(0)); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(oldMap) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var cancelIds []int64
|
|
|
for _, v := range oldMap {
|
|
|
cancelIds = append(cancelIds, v.ID)
|
|
|
}
|
|
|
|
|
|
if _, err = m.WithContext(s.Ctx).Where(m.ID.In(cancelIds...)).UpdateSimple(m.CancelTime.Value(time.Now().Unix())); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更具奖品类型处理奖品
|
|
|
func (s *Update) _switchRewardGroupDo(do func(rewards []*pb.UpdateReq_Reward) error) (err error) {
|
|
|
switch s.Req.GetRewards().GetRewardGroup() {
|
|
|
case mtype.FissionRewardGroupNormal:
|
|
|
return do(s.Req.GetRewards().GetNormal())
|
|
|
case mtype.FissionRewardGroupLang:
|
|
|
for _, langs := range s.Req.GetRewards().GetLangs() {
|
|
|
err = do(langs.GetRewards())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
case mtype.FissionRewardGroupUserLevel:
|
|
|
for _, level := range s.Req.GetRewards().GetUserLevel().GetLevelList() {
|
|
|
err = do(level.GetRewards())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
case mtype.FissionRewardGroupLangAndUserLevel:
|
|
|
for _, lang := range s.Req.GetRewards().GetLangUserLevel() {
|
|
|
for _, level := range lang.GetLevelList() {
|
|
|
err = do(level.GetRewards())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
case mtype.FissionRewardGroupCountry:
|
|
|
for _, country := range s.Req.GetRewards().GetCountry().GetCountryList() {
|
|
|
err = do(country.GetRewards())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) _updateHelp(cpnId int64) (err error) {
|
|
|
m := s.GetDao().FissionCampaignTask
|
|
|
helps, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpnId), m.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldMap = make(map[int64]map[int8]*model.FissionCampaignTask)
|
|
|
for _, v := range helps {
|
|
|
rewardId := utils.FissionCampaignTaskMarkRewardOneRewardId(v.TaskMark)
|
|
|
if rewardId <= 0 {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
if _, ok := oldMap[rewardId]; !ok {
|
|
|
oldMap[rewardId] = map[int8]*model.FissionCampaignTask{
|
|
|
v.TaskType: v,
|
|
|
}
|
|
|
} else {
|
|
|
oldMap[rewardId][v.TaskType] = v
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var delIds []int64
|
|
|
var addTasks []*model.FissionCampaignTask
|
|
|
var bfn = func(newList []*pb.UpdateReq_Reward) (err error) {
|
|
|
for _, one := range newList {
|
|
|
rewardId := one.GetId()
|
|
|
oldHelps, ok := oldMap[rewardId]
|
|
|
taskMark := utils.FissionCampaignTaskMarkRewardOneVal(rewardId)
|
|
|
if !ok {
|
|
|
if one.GetHelp() == mtype.Yes {
|
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpnId,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeInstall,
|
|
|
TaskMark: taskMark,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Percent: one.GetHelpPercent(),
|
|
|
}))
|
|
|
|
|
|
s.helpInstall = true
|
|
|
}
|
|
|
if one.GetOpen() == mtype.Yes {
|
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpnId,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeOpen,
|
|
|
TaskMark: taskMark,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Percent: one.GetOpenPercent(),
|
|
|
PercentLimit: one.GetOpenPercentLimit(),
|
|
|
}))
|
|
|
|
|
|
s.helpOpen = true
|
|
|
}
|
|
|
if one.GetClick() == mtype.Yes {
|
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpnId,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeClick,
|
|
|
TaskMark: taskMark,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Percent: one.GetClickPercent(),
|
|
|
PercentLimit: one.GetClickPercentLimit(),
|
|
|
}))
|
|
|
|
|
|
s.helpClick = true
|
|
|
}
|
|
|
if one.GetRegister() == mtype.Yes {
|
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpnId,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeRegister,
|
|
|
TaskMark: taskMark,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Percent: one.GetRegisterPercent(),
|
|
|
}))
|
|
|
|
|
|
s.helpRegister = true
|
|
|
}
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
open, exist := oldHelps[mtype.FissionCampaignTaskTypeOpen]
|
|
|
if exist && one.Open == mtype.No {
|
|
|
delIds = append(delIds, open.ID)
|
|
|
} else if !exist && one.Open == mtype.Yes {
|
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpnId,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeOpen,
|
|
|
TaskMark: taskMark,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Percent: one.GetOpenPercent(),
|
|
|
PercentLimit: one.GetOpenPercentLimit(),
|
|
|
}))
|
|
|
s.helpOpen = true
|
|
|
} else if open != nil {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(open.ID)).UpdateSimple(
|
|
|
m.Percent.Value(one.GetOpenPercent()),
|
|
|
m.PercentLimit.Value(one.GetOpenPercentLimit()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
s.helpOpen = true
|
|
|
}
|
|
|
|
|
|
install, has := oldHelps[mtype.FissionCampaignTaskTypeInstall]
|
|
|
if has && one.Help == mtype.No {
|
|
|
delIds = append(delIds, install.ID)
|
|
|
} else if !has && one.Help == mtype.Yes {
|
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpnId,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeInstall,
|
|
|
TaskMark: taskMark,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Percent: one.GetHelpPercent(),
|
|
|
}))
|
|
|
s.helpInstall = true
|
|
|
} else if install != nil {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(install.ID)).UpdateSimple(m.Percent.Value(one.GetHelpPercent()))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
s.helpInstall = true
|
|
|
}
|
|
|
|
|
|
click, has := oldHelps[mtype.FissionCampaignTaskTypeClick]
|
|
|
if has && one.Click == mtype.No {
|
|
|
delIds = append(delIds, click.ID)
|
|
|
} else if !has && one.Click == mtype.Yes {
|
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpnId,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeClick,
|
|
|
TaskMark: taskMark,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Percent: one.GetClickPercent(),
|
|
|
PercentLimit: one.GetClickPercentLimit(),
|
|
|
}))
|
|
|
s.helpClick = true
|
|
|
} else if click != nil {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(click.ID)).UpdateSimple(
|
|
|
m.Percent.Value(one.GetClickPercent()),
|
|
|
m.PercentLimit.Value(one.GetClickPercentLimit()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
s.helpClick = true
|
|
|
}
|
|
|
|
|
|
register, has := oldHelps[mtype.FissionCampaignTaskTypeRegister]
|
|
|
if has && one.Register == mtype.No {
|
|
|
delIds = append(delIds, register.ID)
|
|
|
} else if !has && one.Register == mtype.Yes {
|
|
|
addTasks = append(addTasks, withdefault.FissionCampaignTask(&model.FissionCampaignTask{
|
|
|
CampaignID: cpnId,
|
|
|
TaskType: mtype.FissionCampaignTaskTypeRegister,
|
|
|
TaskMark: taskMark,
|
|
|
PropMark: mtype.FissionCampaignTaskPropMarkChance,
|
|
|
Percent: one.GetRegisterPercent(),
|
|
|
}))
|
|
|
s.helpRegister = true
|
|
|
} else if register != nil {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(register.ID)).UpdateSimple(m.Percent.Value(one.GetRegisterPercent()))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
s.helpRegister = true
|
|
|
}
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = s._switchRewardGroupDo(bfn)
|
|
|
|
|
|
if len(addTasks) > 0 {
|
|
|
err = m.WithContext(s.Ctx).Create(addTasks...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delIds) > 0 {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.In(delIds...)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateCash(cpn *model.FissionCampaign) (err error) {
|
|
|
m := s.GetDao().FissionCampaignCash
|
|
|
|
|
|
conf, err := cache.NewCampaignCash(s.Ctx).FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found cash conf")
|
|
|
}
|
|
|
|
|
|
var cash = s.Req.GetCash()
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
m.PriceNum.Value(cash.GetPriceNum()),
|
|
|
m.LoopNum.Value(cash.GetLoopNum()),
|
|
|
}
|
|
|
|
|
|
if cpn.Status == mtype.FissionCampaignStatusWait { //待发布状态可以改所有数据
|
|
|
data = append(data,
|
|
|
m.ExpiredDay.Value(cash.GetExpiredDay()),
|
|
|
m.Price.Value(cash.GetPrice()),
|
|
|
m.Currency.Value(int8(cash.GetCurrency())),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
if conf.PriceNum != cash.GetPriceNum() {
|
|
|
s.OL().User(s.Req.UserId, s.Req.Ip).UpdateRunningCashStock(conf.ID, conf.PriceNum, cash.GetPriceNum())
|
|
|
|
|
|
data = append(data, m.Lack.Value(mtype.No))
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
stocks.NewCleaner(s.Ctx, cpn.ID).ClearCampaign()
|
|
|
return
|
|
|
})
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignCash(s.Ctx).Clear(conf)
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新长图
|
|
|
func (s *Update) _updateLongImg(conf *model.FissionCampaignConfig) (err error) {
|
|
|
if conf.HasLongImg == mtype.No && len(s.Req.GetLongImgs()) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
m := s.GetDao().FissionCampaignLongImg
|
|
|
if conf.HasLongImg == mtype.Yes && len(s.Req.GetLongImgs()) == 0 {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.CampaignID.Eq(conf.CampaignID)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
list, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(conf.CampaignID), m.IsDel.Eq(mtype.No), m.LangID.Eq(0)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldMap = make(map[int64]*model.FissionCampaignLongImg)
|
|
|
for _, v := range list {
|
|
|
oldMap[v.ID] = v
|
|
|
}
|
|
|
|
|
|
zoneM := s.GetDao().FissionCampaignLongImgZone
|
|
|
var zone []*model.FissionCampaignLongImgZone
|
|
|
var add = make([]*model.FissionCampaignLongImg, 0)
|
|
|
var zoneDelIds []int64
|
|
|
for _, v := range s.Req.GetLongImgs() {
|
|
|
old, ok := oldMap[v.GetId()]
|
|
|
if !ok {
|
|
|
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(),
|
|
|
})
|
|
|
|
|
|
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(v.GetTargetType()),
|
|
|
TargetID: v.GetTargetId(),
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
add = append(add, one)
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(old.ID)).UpdateSimple(
|
|
|
m.ClickType.Value(int8(v.GetClickType())),
|
|
|
m.ImgURL.Value(v.GetImgUrl()),
|
|
|
m.WebURL.Value(v.GetWebUrl()),
|
|
|
m.AppParam.Value(v.GetAppParam()),
|
|
|
m.PcParam.Value(v.GetPcParam()),
|
|
|
m.TargetType.Value(int8(v.GetTargetType())),
|
|
|
m.TargetID.Value(v.GetTargetId()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
delete(oldMap, old.ID)
|
|
|
|
|
|
switch old.ClickType {
|
|
|
case mtype.FissionCampaignLongImgClickTypeAll:
|
|
|
if v.GetClickType() == mtype.FissionCampaignLongImgClickTypeZone {
|
|
|
for _, hotZone := range v.GetHotZone() {
|
|
|
zone = append(zone, withdefault.FissionCampaignLongImgZone(&model.FissionCampaignLongImgZone{
|
|
|
CampaignID: conf.CampaignID,
|
|
|
ImgID: old.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(),
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
case mtype.FissionCampaignLongImgClickTypeZone:
|
|
|
if v.GetClickType() == mtype.FissionCampaignLongImgClickTypeAll {
|
|
|
_, err = zoneM.WithContext(s.Ctx).Where(zoneM.ImgID.Eq(old.ID)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
} else if v.GetClickType() == mtype.FissionCampaignLongImgClickTypeZone {
|
|
|
var zones []*model.FissionCampaignLongImgZone
|
|
|
zones, err = zoneM.WithContext(s.Ctx).Where(zoneM.ImgID.Eq(old.ID), zoneM.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldZoneMap = make(map[int64]*model.FissionCampaignLongImgZone, len(zones))
|
|
|
for _, click := range zones {
|
|
|
oldZoneMap[click.ID] = click
|
|
|
}
|
|
|
|
|
|
for _, hotZone := range v.GetHotZone() {
|
|
|
oldZone, ok1 := oldZoneMap[hotZone.GetId()]
|
|
|
if !ok1 {
|
|
|
zone = append(zone, withdefault.FissionCampaignLongImgZone(&model.FissionCampaignLongImgZone{
|
|
|
CampaignID: conf.CampaignID,
|
|
|
ImgID: old.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(),
|
|
|
}))
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
_, err = zoneM.WithContext(s.Ctx).Where(zoneM.ID.Eq(oldZone.ID)).UpdateSimple(
|
|
|
zoneM.WebURL.Value(hotZone.GetWebUrl()),
|
|
|
zoneM.AppParam.Value(hotZone.GetAppParam()),
|
|
|
zoneM.PcParam.Value(hotZone.GetPcParam()),
|
|
|
zoneM.ClickX.Value(hotZone.GetClickX()),
|
|
|
zoneM.ClickY.Value(hotZone.GetClickY()),
|
|
|
zoneM.ClickH.Value(hotZone.GetClickH()),
|
|
|
zoneM.ClickW.Value(hotZone.GetClickW()),
|
|
|
zoneM.TargetType.Value(int8(hotZone.GetTargetType())),
|
|
|
zoneM.TargetID.Value(hotZone.GetTargetId()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
delete(oldZoneMap, oldZone.ID)
|
|
|
}
|
|
|
|
|
|
for id := range oldZoneMap {
|
|
|
zoneDelIds = append(zoneDelIds, id)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var imgDelIds []int64
|
|
|
for id := range oldMap {
|
|
|
imgDelIds = append(imgDelIds, id)
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
err = m.WithContext(s.Ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(zone) > 0 {
|
|
|
err = zoneM.WithContext(s.Ctx).Create(zone...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(imgDelIds) > 0 {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.In(imgDelIds...)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(zoneDelIds) > 0 {
|
|
|
_, err = zoneM.WithContext(s.Ctx).Where(zoneM.ID.In(zoneDelIds...)).UpdateSimple(zoneM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) _updateRunningReward(cpn *model.FissionCampaign) (err error) {
|
|
|
m := s.GetDao().FissionCampaignReward
|
|
|
var up = func(list []*pb.UpdateReq_Reward) error {
|
|
|
var ids []int64
|
|
|
for _, v := range list {
|
|
|
ids = append(ids, v.Id)
|
|
|
s.rewardAdd[v.GetId()] = v.GetOpenAdd()
|
|
|
s.rewardTask[v.GetId()] = v.GetRewardTask()
|
|
|
}
|
|
|
|
|
|
rewards, err1 := m.WithContext(s.Ctx).Where(m.ID.In(ids...), m.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err1 != nil {
|
|
|
return s.BE().MysqlError(err1)
|
|
|
}
|
|
|
var oldMap = make(map[int64]*model.FissionCampaignReward, len(rewards))
|
|
|
for _, v := range rewards {
|
|
|
oldMap[v.ID] = v
|
|
|
}
|
|
|
|
|
|
var stockUpIds []int64
|
|
|
var delStockId []int64
|
|
|
for i, reward := range list {
|
|
|
old, ok := oldMap[reward.GetId()]
|
|
|
if !ok {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var upData []field.AssignExpr
|
|
|
|
|
|
if old.Step != int32(i) {
|
|
|
upData = append(upData, m.Sort.Value(int32(i)))
|
|
|
}
|
|
|
|
|
|
if old.Score != reward.GetScore() {
|
|
|
upData = append(upData, m.Score.Value(reward.GetScore()))
|
|
|
}
|
|
|
|
|
|
if old.Odds != reward.GetOdds() {
|
|
|
s.OL().User(s.Req.UserId, s.Req.Ip).UpdateRunningOdds(old.ID, old.Odds, reward.GetOdds())
|
|
|
|
|
|
upData = append(upData, m.Odds.Value(reward.GetOdds()))
|
|
|
}
|
|
|
|
|
|
if old.Stock != reward.GetStock() {
|
|
|
delStockId = append(delStockId, old.ID)
|
|
|
s.OL().User(s.Req.UserId, s.Req.Ip).UpdateRunningStock(old.ID, old.Stock, reward.GetStock())
|
|
|
|
|
|
if old.Stock < reward.GetStock() {
|
|
|
stockUpIds = append(stockUpIds, old.ID)
|
|
|
}
|
|
|
|
|
|
upData = append(upData, m.Stock.Value(reward.GetStock()))
|
|
|
}
|
|
|
|
|
|
if old.InitPercent != reward.GetInitPercent() {
|
|
|
s.OL().User(s.Req.UserId, s.Req.Ip).UpdateRunningInitPercent(old.ID, old.InitPercent, reward.GetInitPercent())
|
|
|
|
|
|
upData = append(upData, m.InitPercent.Value(reward.GetInitPercent()))
|
|
|
}
|
|
|
|
|
|
if old.OpenAdd != int8(reward.GetOpenAdd().GetOpen()) {
|
|
|
upData = append(upData, m.OpenAdd.Value(int8(reward.GetOpenAdd().GetOpen())))
|
|
|
}
|
|
|
|
|
|
if old.OpenTask != int8(reward.GetRewardTask().GetOpen()) {
|
|
|
upData = append(upData, m.OpenTask.Value(int8(reward.GetRewardTask().GetOpen())))
|
|
|
}
|
|
|
|
|
|
hasRule := utils.Ternary[int8](reward.GetCampaignLimit() > 0, mtype.Yes, mtype.No)
|
|
|
if old.HasRule != hasRule {
|
|
|
upData = append(upData, m.HasRule.Value(hasRule))
|
|
|
}
|
|
|
|
|
|
if cpn.FissionID == consts.IdDice {
|
|
|
cr, _ := jsonm.MarshalToString(mtype.CollectRule{
|
|
|
Open: reward.GetCollectRule().GetOpen(),
|
|
|
InitCollect: reward.GetCollectRule().GetInitCollect(),
|
|
|
SignDay: reward.GetCollectRule().GetSignDay(),
|
|
|
AddCollect: reward.GetCollectRule().GetAddCollect(),
|
|
|
ResetType: reward.GetCollectRule().GetResetType(),
|
|
|
})
|
|
|
|
|
|
oldCr, newCr := utils.Md5Any(old.GetCollectRule()), utils.Md5String(cr)
|
|
|
if oldCr != newCr {
|
|
|
upData = append(upData, m.CollectRule.Value(cr))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(upData) == 0 {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
_, err1 = m.WithContext(s.Ctx).Where(m.ID.Eq(old.ID)).UpdateSimple(upData...)
|
|
|
if err1 != nil {
|
|
|
return s.BE().MysqlError(err1)
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cmm.NewUserAppReward(s.Ctx).Delete(old.CampaignID, int8(s.Req.GetRewards().GetRewardGroup()), old.LangMark, old.LevelID, old.CountryMark)
|
|
|
return
|
|
|
})
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
if len(delStockId) > 0 {
|
|
|
stocks.NewCleaner(s.Ctx, delStockId...).ClearAllReward()
|
|
|
}
|
|
|
|
|
|
if verify.InArray[int64](cpn.FissionID, consts.IdGrow) && len(stockUpIds) > 0 {
|
|
|
_ = app.NewVerControl(s.Ctx, ckey.FissionRewardLimitUpVer(cpn.ID), vercontrol.SetExpire(time.Hour)).Create(time.Now(), func() error {
|
|
|
producer.NewCampaignNotice(s.Ctx).RewardLimitUp(types.RewardLimitUp{CampaignId: cpn.ID, RewardIds: stockUpIds})
|
|
|
return nil
|
|
|
})
|
|
|
}
|
|
|
|
|
|
return
|
|
|
})
|
|
|
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
err = up(s.Req.GetRewards().GetNormal())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, v := range s.Req.GetRewards().GetUserLevel().GetLevelList() {
|
|
|
err = up(v.GetRewards())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for _, v := range s.Req.GetRewards().GetLangs() {
|
|
|
err = up(v.GetRewards())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for _, v := range s.Req.GetRewards().GetLangUserLevel() {
|
|
|
for _, reward := range v.GetLevelList() {
|
|
|
err = up(reward.GetRewards())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for _, v := range s.Req.GetRewards().GetCountry().GetCountryList() {
|
|
|
err = up(v.GetRewards())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
err = s._updateRule(cpn.ID)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if cpn.FissionID == consts.IdChop {
|
|
|
err = s._updateHelp(cpn.ID)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return s._updateHelpTicket(cpn)
|
|
|
}
|
|
|
|
|
|
func (s *Update) _updateRule(cpnId int64) (err error) {
|
|
|
m := s.GetDao().FissionCampaignRewardRule
|
|
|
list, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpnId)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldMap = make(map[int64]*model.FissionCampaignRewardRule, len(list))
|
|
|
for _, v := range list {
|
|
|
oldMap[v.RewardID] = v
|
|
|
}
|
|
|
|
|
|
olUser := s.OL().User(s.Req.GetUserId(), s.Req.GetIp())
|
|
|
var delIds []int64
|
|
|
var add []*model.FissionCampaignRewardRule
|
|
|
var bfn = func(rewards []*pb.UpdateReq_Reward) (err error) {
|
|
|
for _, v := range rewards {
|
|
|
|
|
|
old, ok := oldMap[v.GetId()]
|
|
|
if !ok {
|
|
|
if v.GetCampaignLimit() > 0 {
|
|
|
id := hashid.IdBigint()
|
|
|
add = append(add, withdefault.FissionCampaignRewardRule(&model.FissionCampaignRewardRule{
|
|
|
CampaignID: cpnId,
|
|
|
RewardID: v.GetId(),
|
|
|
CampaignLimit: v.GetCampaignLimit(),
|
|
|
}))
|
|
|
olUser.UpdateRunningRewardRule(id, 0, v.GetCampaignLimit())
|
|
|
}
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
if v.GetCampaignLimit() > 0 {
|
|
|
if v.GetCampaignLimit() != old.CampaignLimit {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(old.ID)).UpdateSimple(m.CampaignLimit.Value(v.GetCampaignLimit()))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
olUser.UpdateRunningRewardRule(v.GetId(), old.CampaignLimit, v.GetCampaignLimit())
|
|
|
}
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
delIds = append(delIds, old.ID)
|
|
|
olUser.UpdateRunningRewardRule(v.GetId(), old.CampaignLimit, 0)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = s._switchRewardGroupDo(bfn)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
err = m.WithContext(s.Ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delIds) > 0 {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.In(delIds...)).Delete()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cache.NewCampaignRewardRule(s.Ctx).Clear(list...)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateFlip(cpn *model.FissionCampaign) (err error) {
|
|
|
var flip = s.Req.GetFlip()
|
|
|
|
|
|
cc := cache.NewCampaignFlip(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found flip conf")
|
|
|
}
|
|
|
|
|
|
confM := s.GetDao().FissionCampaignFlip
|
|
|
var data []field.AssignExpr
|
|
|
defer func() {
|
|
|
|
|
|
if err == nil && len(data) > 0 {
|
|
|
_, err = confM.WithContext(s.Ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
_ = cc.Clear(conf)
|
|
|
}()
|
|
|
|
|
|
data = append(data,
|
|
|
confM.CardImg.Value(flip.GetCardImg()),
|
|
|
confM.DayChance.Value(flip.GetDayChance()),
|
|
|
)
|
|
|
|
|
|
if cpn.Status != mtype.FissionCampaignStatusWait { //不是待发布状态不能修改配置
|
|
|
return
|
|
|
}
|
|
|
|
|
|
data = append(data,
|
|
|
confM.InitChance.Value(flip.GetInitChance()),
|
|
|
)
|
|
|
|
|
|
//更新了初次抽奖机会,要处理玩家数据,预防有一些人没开始就进入游戏了,要同步一下数据
|
|
|
if conf.InitChance != flip.GetInitChance() {
|
|
|
fpwM := s.GetDao().FissionFlip
|
|
|
_, err = fpwM.WithContext(s.Ctx).Where(fpwM.CampaignID.Eq(cpn.ID)).UpdateSimple(fpwM.Chance.Value(flip.GetInitChance()))
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 助力规则
|
|
|
func (s *Update) _updateHelpTicket(cpn *model.FissionCampaign) (err error) {
|
|
|
m := s.GetDao().FissionCampaignTicket
|
|
|
|
|
|
ticket, err := m.WithContext(s.Ctx).Where(
|
|
|
m.CampaignID.Eq(cpn.ID),
|
|
|
m.Mark.Eq(mtype.FissionCampaignTicketRewardHelp),
|
|
|
).Take()
|
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
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 {
|
|
|
|
|
|
if ticket != nil && ticket.Open == mtype.Yes {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(ticket.ID)).UpdateSimple(m.Open.Value(mtype.No))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if ticket == nil {
|
|
|
err = m.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
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(ticket.ID)).UpdateSimple(
|
|
|
m.Open.Value(mtype.Yes),
|
|
|
m.HelpEvent.Value(strings.Join(helpEvent, ",")),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateKeep(cpn *model.FissionCampaign) (err error) {
|
|
|
conf, err := cache.NewCampaignKeep(s.Ctx).FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found conf")
|
|
|
}
|
|
|
|
|
|
keep := s.Req.GetKeepDog()
|
|
|
|
|
|
invite, _ := jsonm.MarshalToString(keep.GetInvite())
|
|
|
talkText, _ := jsonm.MarshalToString(keep.GetTalkText())
|
|
|
|
|
|
m := s.GetDao().FissionCampaignKeep
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(
|
|
|
m.Collect.Value(keep.GetCollect()),
|
|
|
m.CollectSecond.Value(keep.GetCollectSecond()),
|
|
|
m.OpenInvite.Value(int8(keep.GetOpenInvite())),
|
|
|
m.Invite.Value(invite),
|
|
|
m.InitGet.Value(keep.GetInitGet()),
|
|
|
m.SecGet.Value(keep.GetSecGet()),
|
|
|
m.FeedNum.Value(keep.GetFeedNum()),
|
|
|
m.FeedCycle.Value(keep.GetFeedCycle()),
|
|
|
m.TalkText.Value(talkText),
|
|
|
m.MaxFeed.Value(keep.GetMaxFeed()),
|
|
|
m.FeedGet.Value(keep.GetFeedGet()),
|
|
|
m.FeedGetNum.Value(keep.GetFeedGetNum()),
|
|
|
m.SecGetDayLimit.Value(keep.GetSecGetDayLimit()),
|
|
|
m.MachineType.Value(int8(keep.GetMachineType())),
|
|
|
m.OfflineGet.Value(keep.GetOfflineGet()),
|
|
|
m.OfflineMin.Value(keep.GetOfflineMin()),
|
|
|
m.OfflineLimit.Value(keep.GetOfflineLimit()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignKeep(s.Ctx).Clear(conf)
|
|
|
})
|
|
|
|
|
|
inviteConf := conf.GetInvite()
|
|
|
if inviteConf != nil && inviteConf.InviteMaxGet > 0 && inviteConf.InviteMaxGet < keep.GetInvite().GetInviteMaxGet() {
|
|
|
keepM := s.GetDao().FissionKeep
|
|
|
_, err = keepM.WithContext(s.Ctx).Where(
|
|
|
keepM.CampaignID.Eq(cpn.ID),
|
|
|
keepM.InviteLimit.Eq(mtype.Yes),
|
|
|
).UpdateSimple(keepM.InviteLimit.Value(mtype.No))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 把没有参与离线狗粮机的数据都参与一下
|
|
|
if conf.MachineType == mtype.FissionCampaignKeepMachineTypeOnline && keep.GetMachineType() == mtype.FissionCampaignKeepMachineTypeOffline {
|
|
|
keepM := s.GetDao().FissionKeep
|
|
|
_, err = keepM.WithContext(s.Ctx).Where(
|
|
|
keepM.CampaignID.Eq(cpn.ID),
|
|
|
keepM.RewardID.Gt(0),
|
|
|
keepM.RecordID.Eq(0),
|
|
|
keepM.ReceiveOffline.Eq(0),
|
|
|
).UpdateSimple(keepM.ReceiveOffline.Value(time.Now().Unix()))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
stepM := s.GetDao().FissionCampaignKeepStep
|
|
|
oldSteps, err := stepM.WithContext(s.Ctx).Where(stepM.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var rewardIds []int64
|
|
|
var oldMap = make(map[int32]*model.FissionCampaignKeepStep)
|
|
|
for _, v := range oldSteps {
|
|
|
oldMap[v.Step] = v
|
|
|
if v.RewardID > 0 {
|
|
|
rewardIds = append(rewardIds, v.RewardID)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var rewardMap = make(map[int64]*model.FissionCampaignReward, len(rewardIds))
|
|
|
if len(rewardIds) > 0 {
|
|
|
rewardM := s.GetDao().FissionCampaignReward
|
|
|
var rewards []*model.FissionCampaignReward
|
|
|
rewards, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.In(rewardIds...)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, v := range rewards {
|
|
|
rewardMap[v.ID] = v
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var delRewardIds []int64
|
|
|
var steps []*model.FissionCampaignKeepStep
|
|
|
for _, v := range keep.GetSteps() {
|
|
|
old, ok := oldMap[v.GetStep()]
|
|
|
if !ok {
|
|
|
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)
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var up = []field.AssignExpr{
|
|
|
stepM.Percent.Value(v.GetPercent()),
|
|
|
stepM.RewardType.Value(int8(v.GetRewardType())),
|
|
|
stepM.RewardNum.Value(v.GetRewardNum()),
|
|
|
stepM.IsDel.Value(mtype.No),
|
|
|
}
|
|
|
if old.RewardType == mtype.FissionCampaignKeepStepRewardTypeProp && 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,
|
|
|
})
|
|
|
|
|
|
up = append(up, stepM.RewardID.Value(rewardId))
|
|
|
} else if old.RewardType == mtype.FissionCampaignKeepStepRewardTypeReward && v.GetRewardType() == mtype.FissionCampaignKeepStepRewardTypeProp {
|
|
|
delRewardIds = append(delRewardIds, old.RewardID)
|
|
|
up = append(up, stepM.RewardID.Value(0))
|
|
|
} else if old.RewardType == mtype.FissionCampaignKeepStepRewardTypeReward && v.GetRewardType() == mtype.FissionCampaignKeepStepRewardTypeReward {
|
|
|
if rewardMap[old.RewardID].RewardID != v.GetReward().GetRewardId() {
|
|
|
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,
|
|
|
})
|
|
|
|
|
|
delRewardIds = append(delRewardIds, old.RewardID)
|
|
|
up = append(up, stepM.RewardID.Value(rewardId))
|
|
|
} else {
|
|
|
rewardM := s.GetDao().FissionCampaignReward
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.Eq(old.RewardID)).UpdateSimple(
|
|
|
rewardM.Stock.Value(v.GetReward().GetStock()),
|
|
|
rewardM.Step.Value(v.GetStep()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
stocks.NewCleaner(s.Ctx, old.RewardID).ClearAllReward()
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
_, err = stepM.WithContext(s.Ctx).Where(stepM.ID.Eq(old.ID)).UpdateSimple(up...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
delete(oldMap, v.GetStep())
|
|
|
}
|
|
|
|
|
|
var delIds []int64
|
|
|
for _, v := range oldMap {
|
|
|
delIds = append(delIds, v.ID)
|
|
|
}
|
|
|
|
|
|
if len(delIds) > 0 {
|
|
|
_, err = stepM.WithContext(s.Ctx).Where(stepM.ID.In(delIds...)).UpdateSimple(stepM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(steps) > 0 {
|
|
|
err = stepM.WithContext(s.Ctx).Create(steps...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delRewardIds) > 0 {
|
|
|
rewardM := s.GetDao().FissionCampaignReward
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.In(delIds...)).UpdateSimple(rewardM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updatePush(cpn *model.FissionCampaign) (err error) {
|
|
|
m := s.GetDao().FissionCampaignPush
|
|
|
list, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var pushMap = make(map[string]*model.FissionCampaignPush, len(list))
|
|
|
for _, v := range list {
|
|
|
pushMap[v.Mark] = v
|
|
|
}
|
|
|
|
|
|
var delKey []string
|
|
|
var add []*model.FissionCampaignPush
|
|
|
|
|
|
if s.Req.GetPush().GetTaskReset().GetOpen() == mtype.Yes {
|
|
|
cond, _ := jsonm.ToSliceString(s.Req.GetPush().GetTaskReset().GetPushCond())
|
|
|
|
|
|
if push, ok := pushMap[mtype.FissionCampaignPushMarkTaskReset]; ok {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(push.ID)).UpdateSimple(m.Cond.Value(cond), m.Open.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(push.CampaignID, push.Mark))
|
|
|
} else {
|
|
|
add = append(add, &model.FissionCampaignPush{
|
|
|
CampaignID: cpn.ID,
|
|
|
Mark: mtype.FissionCampaignPushMarkTaskReset,
|
|
|
Cond: cond,
|
|
|
Open: mtype.Yes,
|
|
|
})
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(cpn.ID, mtype.FissionCampaignPushMarkTaskReset))
|
|
|
}
|
|
|
} else {
|
|
|
if push, ok := pushMap[mtype.FissionCampaignPushMarkTaskReset]; ok && push.Open == mtype.Yes {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(push.ID)).UpdateSimple(m.Open.Value(mtype.No))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(push.CampaignID, push.Mark))
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if s.Req.GetPush().GetActive().GetOpen() == mtype.Yes {
|
|
|
cond, _ := jsonm.ToSliceString(s.Req.GetPush().GetActive().GetPushCond())
|
|
|
if push, ok := pushMap[mtype.FissionCampaignPushMarkActive]; ok {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(push.ID)).UpdateSimple(m.Cond.Value(cond), m.Open.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(push.CampaignID, push.Mark))
|
|
|
} else {
|
|
|
add = append(add, withdefault.FissionCampaignPush(&model.FissionCampaignPush{
|
|
|
CampaignID: cpn.ID,
|
|
|
Mark: mtype.FissionCampaignPushMarkActive,
|
|
|
Cond: cond,
|
|
|
Open: mtype.Yes,
|
|
|
}))
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(cpn.ID, mtype.FissionCampaignPushMarkActive))
|
|
|
}
|
|
|
} else {
|
|
|
if push, ok := pushMap[mtype.FissionCampaignPushMarkActive]; ok && push.Open == mtype.Yes {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(push.ID)).UpdateSimple(m.Open.Value(mtype.No))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(push.CampaignID, push.Mark))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if s.Req.GetPush().GetOffline().GetOpen() == mtype.Yes {
|
|
|
cond, _ := jsonm.ToSliceString(s.Req.GetPush().GetOffline().GetPushCond())
|
|
|
if push, ok := pushMap[mtype.FissionCampaignPushMarkOffline]; ok {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(push.ID)).UpdateSimple(m.Cond.Value(cond), m.Open.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(push.CampaignID, push.Mark))
|
|
|
} else {
|
|
|
add = append(add, &model.FissionCampaignPush{
|
|
|
CampaignID: cpn.ID,
|
|
|
Mark: mtype.FissionCampaignPushMarkOffline,
|
|
|
Cond: cond,
|
|
|
Open: mtype.Yes,
|
|
|
})
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(cpn.ID, mtype.FissionCampaignPushMarkOffline))
|
|
|
}
|
|
|
} else {
|
|
|
if push, ok := pushMap[mtype.FissionCampaignPushMarkOffline]; ok && push.Open == mtype.Yes {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(push.ID)).UpdateSimple(m.Open.Value(mtype.No))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(push.CampaignID, push.Mark))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if s.Req.GetPush().GetVisit().GetOpen() == mtype.Yes {
|
|
|
if push, ok := pushMap[mtype.FissionCampaignPushMarkVisit]; ok {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(push.ID)).UpdateSimple(m.Open.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(push.CampaignID, push.Mark))
|
|
|
} else {
|
|
|
add = append(add, &model.FissionCampaignPush{
|
|
|
CampaignID: cpn.ID,
|
|
|
Mark: mtype.FissionCampaignPushMarkVisit,
|
|
|
Cond: "{}",
|
|
|
Open: mtype.Yes,
|
|
|
})
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(cpn.ID, mtype.FissionCampaignPushMarkVisit))
|
|
|
}
|
|
|
} else {
|
|
|
if push, ok := pushMap[mtype.FissionCampaignPushMarkVisit]; ok && push.Open == mtype.Yes {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(push.ID)).UpdateSimple(m.Open.Value(mtype.No))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
delKey = append(delKey, ckey.FissionRewardPushOpenOnce(push.CampaignID, push.Mark))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
err = s.GetDao().FissionCampaignPush.WithContext(s.Ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delKey) > 0 {
|
|
|
app.Redis.Cache.Del(s.Ctx, delKey...)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) syncLinkTemp(cpn *model.FissionCampaign) (err error) {
|
|
|
if !s.changeTemp {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = app.NewDeepLinkLink().UpdateCampaignLinkOne(s.Ctx, &dlinkpb.UpdateCampaignLinkOneReq{
|
|
|
ProjectId: cpn.ProjectID,
|
|
|
CampaignId: cpn.ID,
|
|
|
TemplateKey: s.Req.GetConfig().GetLinkTempId(),
|
|
|
})
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 其他形式的奖品追加
|
|
|
func (s *Update) _otherAppendReward(rewards ...*model.FissionCampaignReward) {
|
|
|
for _, reward := range rewards {
|
|
|
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, reward)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateChild(cpn *model.FissionCampaign) (err error) {
|
|
|
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
|
|
|
}
|
|
|
|
|
|
childM := s.GetDao().FissionCampaignChild
|
|
|
childs, err := childM.WithContext(s.Ctx).Where(childM.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldMap = make(map[int64]int64, len(childs))
|
|
|
for _, v := range childs {
|
|
|
oldMap[v.ChildID] = v.ID
|
|
|
}
|
|
|
|
|
|
cm := cmm.NewCMM(s.Ctx, s.GetDao())
|
|
|
var add []*model.FissionCampaignChild
|
|
|
for _, v := range list {
|
|
|
if _, ok := oldMap[v.ID]; !ok {
|
|
|
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
|
|
|
}
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
delete(oldMap, v.ID)
|
|
|
}
|
|
|
|
|
|
var delIds []int64
|
|
|
for _, id := range oldMap {
|
|
|
delIds = append(delIds, id)
|
|
|
}
|
|
|
|
|
|
if len(delIds) > 0 {
|
|
|
_, err = childM.WithContext(s.Ctx).Where(childM.ID.In(delIds...)).Delete()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
err = childM.WithContext(s.Ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignChild(s.Ctx).Clear(childs...)
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 更新活动样式
|
|
|
func (s *Update) _updateStyle(cpn *model.FissionCampaign) (err error) {
|
|
|
cc := cache.NewCampaignStyle(s.Ctx)
|
|
|
style, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
return s.BE().CacheError(err)
|
|
|
}
|
|
|
|
|
|
cf := s.Req.GetConfig()
|
|
|
m := s.GetDao().FissionCampaignStyle
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
m.RuleTextColor.Value(cf.GetRuleTextColor()),
|
|
|
m.RuleBgColor.Value(cf.GetRuleBgColor()),
|
|
|
m.ShareText.Value(cf.GetShareText()),
|
|
|
m.ShareImg.Value(cf.GetShareImg()),
|
|
|
m.RankBackgroundColor.Value(cf.GetRankBackgroundColor()),
|
|
|
m.RankTextColor.Value(cf.GetRankTextColor()),
|
|
|
m.DownloadImg.Value(cf.GetDownloadPageImage()),
|
|
|
m.WechatImg.Value(cf.GetWechatPageImage()),
|
|
|
m.MainImg.Value(cf.GetImageMain()),
|
|
|
m.BgImg.Value(cf.GetImagePreview()),
|
|
|
m.LinkBtnTextColor.Value(cf.GetLinkBtnTextColor()),
|
|
|
m.LinkBtnBgColor.Value(cf.GetLinkBtnBgColor()),
|
|
|
m.LinkTextColor.Value(cf.GetLinkTextColor()),
|
|
|
m.PageTitle.Value(cf.GetPageTitle()),
|
|
|
m.WebImg.Value(cf.GetWebBgImg()),
|
|
|
m.IconType.Value(int8(cf.GetIconType())),
|
|
|
m.IconBgColor.Value(cf.GetIconBgColor()),
|
|
|
m.DlBannerImg.Value(cf.GetDlBannerImg()),
|
|
|
m.DlBannerAppLogo.Value(cf.GetDlBannerAppLogo()),
|
|
|
m.DlBannerAppName.Value(cf.GetDlBannerAppName()),
|
|
|
m.DlBannerAppBtn.Value(cf.GetDlBannerAppBtn()),
|
|
|
m.DlBannerPosition.Value(int8(cf.GetDlBannerPosition())),
|
|
|
m.TopicColor.Value(cf.GetTopicColor()),
|
|
|
m.PlayRule.Value(cf.GetPlayRule()),
|
|
|
m.PcBg.Value(cf.GetPcBg()),
|
|
|
m.IconTextColor.Value(cf.GetIconTextColor()),
|
|
|
m.RuleImg.Value(cf.GetRuleImg()),
|
|
|
}
|
|
|
|
|
|
share, _ := jsonm.MarshalToString(cf.GetShare())
|
|
|
data = append(data, m.Share.Value(share))
|
|
|
|
|
|
iconOpen, _ := jsonm.MarshalToString(cf.GetIconOpen())
|
|
|
data = append(data, m.IconOpen.Value(iconOpen))
|
|
|
|
|
|
switch cpn.FissionID {
|
|
|
case consts.IdPrizeWheel:
|
|
|
custom := s.Req.GetWheelStyle()
|
|
|
customStyle, _ := jsonm.ToObjString(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(),
|
|
|
})
|
|
|
data = append(data, m.CustomStyle.Value(customStyle))
|
|
|
case consts.IdLuckyGrid:
|
|
|
custom := s.Req.GetGridStyle()
|
|
|
customStyle, _ := jsonm.ToObjString(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(),
|
|
|
})
|
|
|
|
|
|
data = append(data, m.CustomStyle.Value(customStyle))
|
|
|
case consts.IdFlip:
|
|
|
custom := s.Req.GetFlipStyle()
|
|
|
customStyle, _ := jsonm.ToObjString(mtype.FlipStyle{
|
|
|
TopicMark: custom.GetTopicMark(),
|
|
|
MainImg: custom.GetMainImg(),
|
|
|
BgColor: custom.GetBgColor(),
|
|
|
ButtonColor: custom.GetButtonColor(),
|
|
|
PlayImg: custom.GetPlayImg(),
|
|
|
CardImg: custom.GetCardImg(),
|
|
|
})
|
|
|
|
|
|
data = append(data, m.CustomStyle.Value(customStyle))
|
|
|
case consts.IdGashapon:
|
|
|
custom := s.Req.GetGashaponStyle()
|
|
|
customStyle, _ := jsonm.ToObjString(mtype.GashaponStyle{
|
|
|
TopicMark: custom.GetTopicMark(),
|
|
|
MainImg: custom.GetMainImg(),
|
|
|
BgColor: custom.GetBgColor(),
|
|
|
MachineImg: custom.GetMachineImg(),
|
|
|
PlayImg: custom.GetPlayImg(),
|
|
|
EggType: custom.GetEggType(),
|
|
|
EggImgs: custom.GetEggImgs(),
|
|
|
})
|
|
|
|
|
|
data = append(data, m.CustomStyle.Value(customStyle))
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(style.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
_ = cc.Clear(style)
|
|
|
return
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateGold(cpn *model.FissionCampaign) (err error) {
|
|
|
m := s.GetDao().FissionCampaignGold
|
|
|
|
|
|
conf, err := cache.NewCampaignGold(s.Ctx).FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found cash conf")
|
|
|
}
|
|
|
|
|
|
var gold = s.Req.GetGold()
|
|
|
|
|
|
var data = []field.AssignExpr{
|
|
|
m.PriceNum.Value(gold.GetPriceNum()),
|
|
|
m.GoldNum.Value(gold.GetGoldNum()),
|
|
|
m.ExpiredDay.Value(gold.GetExpiredDay()),
|
|
|
m.Price.Value(gold.GetPrice()),
|
|
|
m.Currency.Value(int8(gold.GetCurrency())),
|
|
|
}
|
|
|
|
|
|
if conf.PriceNum != gold.GetPriceNum() {
|
|
|
s.OL().User(s.Req.UserId, s.Req.Ip).UpdateRunningGoldStock(conf.ID, conf.PriceNum, gold.GetPriceNum())
|
|
|
|
|
|
data = append(data, m.Lack.Value(mtype.No))
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
|
|
|
stocks.NewCleaner(s.Ctx, cpn.ID).ClearCampaign()
|
|
|
|
|
|
return
|
|
|
})
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignGold(s.Ctx).Clear(conf)
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateCoin(cpn *model.FissionCampaign) (err error) {
|
|
|
m := s.GetDao().FissionCampaignCoin
|
|
|
|
|
|
conf, err := cache.NewCampaignCoin(s.Ctx).FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found cash conf")
|
|
|
}
|
|
|
|
|
|
var coin = s.Req.GetCoin()
|
|
|
lackBtn, _ := jsonm.ToSliceString(coin.GetLackBtn())
|
|
|
var data = []field.AssignExpr{
|
|
|
m.CoinImg.Value(coin.GetCoinImg()),
|
|
|
m.OpenDays.Value(coin.GetOpenDays()),
|
|
|
m.OpenLimit.Value(coin.GetOpenLimit()),
|
|
|
m.InitCoin.Value(coin.GetInitCoin()),
|
|
|
m.InitUse.Value(coin.GetInitUse()),
|
|
|
m.UseCoin.Value(coin.GetUseCoin()),
|
|
|
m.UseLimit.Value(coin.GetUseLimit()),
|
|
|
m.URLID.Value(coin.GetUrlId()),
|
|
|
m.LackBtn.Value(lackBtn),
|
|
|
m.CustomBtnText.Value(coin.GetCustomBtnText()),
|
|
|
m.CustomWebURL.Value(coin.GetCustomWebUrl()),
|
|
|
m.CustomExtraParam.Value(coin.GetCustomExtraParam()),
|
|
|
m.CustomPcParam.Value(coin.GetCustomPcParam()),
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(data...)
|
|
|
if err != nil {
|
|
|
return s.BE().MysqlError(err)
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignCoin(s.Ctx).Clear(conf)
|
|
|
})
|
|
|
|
|
|
// 创建自定义按钮
|
|
|
if verify.InArray[int32](mtype.FissionCampaignCoinLackBtnCustom, coin.GetLackBtn()...) && conf.CustomBtnText != coin.GetCustomBtnText() {
|
|
|
var customBtn *model.FissionCustomBtn
|
|
|
customBtn, err = cache.NewFissionCustomBtn(s.Ctx).FindByUniq(cpn.ID, coin.GetCustomBtnText())
|
|
|
if err != nil {
|
|
|
return s.BE().CacheError(err)
|
|
|
}
|
|
|
|
|
|
if customBtn == nil {
|
|
|
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)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if coin.GetOpenDays() == conf.OpenDays &&
|
|
|
coin.GetInitCoin() == conf.InitCoin &&
|
|
|
coin.GetInitUse() == conf.InitUse &&
|
|
|
s.Req.GetStartTime() == cpn.TStart {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
sceneM := s.GetDao().FissionCoinScene
|
|
|
|
|
|
// 如果活动没开始,改了开始时间,要重制场次
|
|
|
if cpn.Status == mtype.FissionCampaignStatusWait && s.Req.GetStartTime() != cpn.TStart {
|
|
|
_, err = sceneM.WithContext(s.Ctx).Where(sceneM.CampaignID.Eq(cpn.ID)).Delete()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
start := timez.GMT(s.Req.GetStartTime(), s.Req.GetTOffset())
|
|
|
_, dayStart, _ := timez.GMTStartAndEndTs(cpn.TOffset, start)
|
|
|
_, 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)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 修改一些场次信息
|
|
|
diffDay := coin.GetOpenDays() - conf.OpenDays
|
|
|
scenes, err := sceneM.WithContext(s.Ctx).Where(sceneM.CampaignID.Eq(cpn.ID), sceneM.OpenTime.Gt(time.Now().Unix())).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, scene := range scenes {
|
|
|
var up []field.AssignExpr
|
|
|
|
|
|
if diffDay != 0 {
|
|
|
newOpenTime := scene.OpenTime + int64(diffDay*consts.DaySec)
|
|
|
|
|
|
// 如果开奖大于1天,才可以改时间
|
|
|
if newOpenTime-scene.OpenTime > consts.DaySec {
|
|
|
up = append(up, sceneM.OpenTime.Value(newOpenTime), sceneM.RewardTime.Value(newOpenTime+consts.DaySec))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if coin.GetInitCoin() != conf.InitCoin {
|
|
|
up = append(up, sceneM.InitCoin.Value(coin.GetInitCoin()))
|
|
|
}
|
|
|
|
|
|
if coin.GetInitUse() != conf.InitUse {
|
|
|
up = append(up, sceneM.InitUse.Value(coin.GetInitUse()))
|
|
|
}
|
|
|
|
|
|
_, err = sceneM.WithContext(s.Ctx).Where(sceneM.ID.Eq(scene.ID)).UpdateSimple(up...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateVs(cpn *model.FissionCampaign) (err error) {
|
|
|
conf, err := cache.NewCampaignVs(s.Ctx).FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found vs conf")
|
|
|
}
|
|
|
|
|
|
vs := s.Req.GetVs()
|
|
|
|
|
|
m := s.GetDao().FissionCampaignV
|
|
|
var up []field.AssignExpr
|
|
|
|
|
|
if conf.EachLimitNum != vs.GetEachLimitNum() {
|
|
|
up = append(up, m.EachLimitNum.Value(vs.GetEachLimitNum()))
|
|
|
}
|
|
|
|
|
|
if conf.OpenPoint != int8(vs.GetOpenPoint()) {
|
|
|
up = append(up, m.OpenPoint.Value(int8(vs.GetOpenPoint())))
|
|
|
}
|
|
|
|
|
|
if conf.InitChance != vs.GetInitChance() {
|
|
|
up = append(up, m.InitChance.Value(vs.GetInitChance()))
|
|
|
}
|
|
|
|
|
|
if conf.PointsNum != vs.GetPointsNum() {
|
|
|
up = append(up, m.PointsNum.Value(vs.GetPointsNum()))
|
|
|
}
|
|
|
|
|
|
if conf.MallOpen != int8(vs.GetMallOpen()) {
|
|
|
up = append(up, m.MallOpen.Value(int8(vs.GetMallOpen())))
|
|
|
}
|
|
|
|
|
|
if conf.MallID != vs.GetMallId() {
|
|
|
up = append(up, m.MallID.Value(vs.GetMallId()))
|
|
|
|
|
|
var mallRelate *malls.Relate
|
|
|
mallRelate, err = malls.NewRelate(s.Ctx, cpn.ID, cpn.TableName(), logic.WithDao(s.GetDao()))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = mallRelate.Related(mtype.RedeemMallRelateSourceCampaign, vs.GetMallId())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if conf.VsTz != vs.GetVsTz() {
|
|
|
up = append(up, m.VsTz.Value(vs.GetVsTz()))
|
|
|
}
|
|
|
|
|
|
if conf.ClaimType != int8(vs.GetClaimType()) {
|
|
|
up = append(up, m.ClaimType.Value(int8(vs.GetClaimType())))
|
|
|
}
|
|
|
|
|
|
if conf.IconMall != vs.GetIconMall() {
|
|
|
up = append(up, m.IconMall.Value(vs.GetIconMall()))
|
|
|
}
|
|
|
|
|
|
if conf.IconReward != vs.GetIconReward() {
|
|
|
up = append(up, m.IconReward.Value(vs.GetIconReward()))
|
|
|
}
|
|
|
|
|
|
if conf.IconSchedule != vs.GetIconSchedule() {
|
|
|
up = append(up, m.IconSchedule.Value(vs.GetIconSchedule()))
|
|
|
}
|
|
|
|
|
|
if len(up) > 0 {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(up...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignVs(s.Ctx).Clear(conf)
|
|
|
})
|
|
|
}
|
|
|
|
|
|
scheduleM := s.GetDao().FissionCampaignVsSchedule
|
|
|
oldSchedule, err := scheduleM.WithContext(s.Ctx).Where(scheduleM.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldScheduleMap = make(map[int64]*model.FissionCampaignVsSchedule, len(oldSchedule))
|
|
|
for _, schedule := range oldSchedule {
|
|
|
oldScheduleMap[schedule.ID] = schedule
|
|
|
}
|
|
|
|
|
|
rewardM := s.GetDao().FissionCampaignReward
|
|
|
oldRewards, err := rewardM.WithContext(s.Ctx).Where(
|
|
|
rewardM.CampaignID.Eq(cpn.ID),
|
|
|
rewardM.RewardType.Eq(mtype.FissionCampaignRewardTypeApp),
|
|
|
rewardM.IsDel.Eq(mtype.No),
|
|
|
).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldRewardMap = make(map[int64]*model.FissionCampaignReward, len(oldRewards))
|
|
|
for _, reward := range oldRewards {
|
|
|
oldRewardMap[reward.ID] = reward
|
|
|
}
|
|
|
|
|
|
teamM := s.GetDao().FissionCampaignVsTeam
|
|
|
oldTeams, err := teamM.WithContext(s.Ctx).Where(teamM.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldTeamMap = make(map[int64]*model.FissionCampaignVsTeam, len(oldTeams))
|
|
|
for _, team := range oldTeams {
|
|
|
oldTeamMap[team.ID] = team
|
|
|
}
|
|
|
|
|
|
var emptyId int64 = -1
|
|
|
var add []*model.FissionCampaignVsSchedule
|
|
|
var teams []*model.FissionCampaignVsTeam
|
|
|
for i, schedule := range vs.GetSchedules() {
|
|
|
|
|
|
for _, pk := range schedule.GetPkTeams() {
|
|
|
voteStart, _ := timez.YmdHiParse(pk.GetVoteStart(), vs.GetVsTz())
|
|
|
voteEnd, _ := timez.YmdHiParse(pk.GetVoteEnd(), vs.GetVsTz())
|
|
|
vsAt, _ := timez.YmdHiParse(pk.GetVsDate(), vs.GetVsTz())
|
|
|
|
|
|
old, ok := oldScheduleMap[pk.GetId()]
|
|
|
if !ok {
|
|
|
|
|
|
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(),
|
|
|
})
|
|
|
|
|
|
add = append(add, withdefault.FissionCampaignVsSchedule(&model.FissionCampaignVsSchedule{
|
|
|
CampaignID: cpn.ID,
|
|
|
VsIdx: int32(i),
|
|
|
RewardID: rewardId,
|
|
|
VsTeamIds: "",
|
|
|
VsImg: pk.GetVsImg(),
|
|
|
VoteStart: voteStart.Unix(),
|
|
|
VoteEnd: voteEnd.Unix(),
|
|
|
VsAt: vsAt.Unix(),
|
|
|
Desc: pk.GetDesc(),
|
|
|
OpenOdds: int8(pk.GetOpenOdds()),
|
|
|
OddsLeft: pk.GetOddsLeft(),
|
|
|
OddsRight: pk.GetOddsRight(),
|
|
|
OddsDraw: pk.GetOddsDraw(),
|
|
|
}, vsTeamIds, pk.GetOtherVote()))
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
delete(oldScheduleMap, pk.GetId())
|
|
|
|
|
|
var vsTeamIds []int64
|
|
|
for _, team := range pk.GetTeams() {
|
|
|
oldTeam, ok1 := oldTeamMap[team.GetId()]
|
|
|
if !ok1 {
|
|
|
|
|
|
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)
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
delete(oldTeamMap, team.GetId())
|
|
|
|
|
|
var upTeam []field.AssignExpr
|
|
|
|
|
|
if oldTeam.Name != team.GetName() {
|
|
|
upTeam = append(upTeam, teamM.Name.Value(team.GetName()))
|
|
|
}
|
|
|
|
|
|
if oldTeam.LogoImg != team.GetLogoImg() {
|
|
|
upTeam = append(upTeam, teamM.LogoImg.Value(team.GetLogoImg()))
|
|
|
}
|
|
|
|
|
|
vsTeamIds = append(vsTeamIds, oldTeam.ID)
|
|
|
|
|
|
if len(upTeam) > 0 {
|
|
|
_, err = teamM.WithContext(s.Ctx).Where(teamM.ID.Eq(oldTeam.ID)).UpdateSimple(upTeam...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
var upSchedule []field.AssignExpr
|
|
|
|
|
|
if old.VsIdx != int32(i) {
|
|
|
upSchedule = append(upSchedule, scheduleM.VsIdx.Value(int32(i)))
|
|
|
}
|
|
|
|
|
|
if !verify.AllInArray[int64](vsTeamIds, old.GetVsTeamIds()) {
|
|
|
str, _ := jsonm.ToSliceString(vsTeamIds)
|
|
|
upSchedule = append(upSchedule, scheduleM.VsTeamIds.Value(str))
|
|
|
}
|
|
|
|
|
|
if !verify.AllInArray[string](pk.GetOtherVote(), old.GetOtherVote()) {
|
|
|
str, _ := jsonm.ToSliceString(pk.GetOtherVote())
|
|
|
upSchedule = append(upSchedule, scheduleM.OtherVote.Value(str))
|
|
|
}
|
|
|
|
|
|
if old.VoteStart != voteStart.Unix() {
|
|
|
upSchedule = append(upSchedule, scheduleM.VoteStart.Value(voteStart.Unix()))
|
|
|
}
|
|
|
|
|
|
if old.VoteEnd != voteEnd.Unix() {
|
|
|
upSchedule = append(upSchedule, scheduleM.VoteEnd.Value(voteEnd.Unix()))
|
|
|
}
|
|
|
|
|
|
if old.VsAt != vsAt.Unix() {
|
|
|
upSchedule = append(upSchedule, scheduleM.VsAt.Value(vsAt.Unix()))
|
|
|
}
|
|
|
|
|
|
if old.VsImg != pk.GetVsImg() {
|
|
|
upSchedule = append(upSchedule, scheduleM.VsImg.Value(pk.GetVsImg()))
|
|
|
}
|
|
|
|
|
|
if old.Desc != pk.GetDesc() {
|
|
|
upSchedule = append(upSchedule, scheduleM.Desc.Value(pk.GetDesc()))
|
|
|
}
|
|
|
|
|
|
if old.OpenOdds != int8(pk.GetOpenOdds()) {
|
|
|
upSchedule = append(upSchedule, scheduleM.OpenOdds.Value(int8(pk.GetOpenOdds())))
|
|
|
}
|
|
|
|
|
|
if old.OddsLeft != pk.GetOddsLeft() {
|
|
|
upSchedule = append(upSchedule, scheduleM.OddsLeft.Value(pk.GetOddsLeft()))
|
|
|
}
|
|
|
|
|
|
if old.OddsRight != pk.GetOddsRight() {
|
|
|
upSchedule = append(upSchedule, scheduleM.OddsRight.Value(pk.GetOddsRight()))
|
|
|
}
|
|
|
|
|
|
if old.OddsDraw != pk.GetOddsDraw() {
|
|
|
upSchedule = append(upSchedule, scheduleM.OddsDraw.Value(pk.GetOddsDraw()))
|
|
|
}
|
|
|
|
|
|
oldReward, ok1 := oldRewardMap[old.RewardID]
|
|
|
if !ok1 || oldReward.PropMark != pk.GetPropMark() {
|
|
|
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(),
|
|
|
})
|
|
|
|
|
|
upSchedule = append(upSchedule, scheduleM.RewardID.Value(rewardId))
|
|
|
} else {
|
|
|
delete(oldRewardMap, old.RewardID)
|
|
|
|
|
|
var upReward []field.AssignExpr
|
|
|
switch pk.GetPropMark() {
|
|
|
case mtype.FissionCampaignRewardPropMarkPoint:
|
|
|
if oldReward.RewardNum != pk.GetPropNum() {
|
|
|
upReward = append(upReward, rewardM.RewardNum.Value(pk.GetPropNum()))
|
|
|
}
|
|
|
|
|
|
if oldReward.ExpiredDay != pk.GetExpiredDay() {
|
|
|
upReward = append(upReward, rewardM.ExpiredDay.Value(pk.GetExpiredDay()))
|
|
|
}
|
|
|
|
|
|
case mtype.FissionCampaignRewardPropMarkReward:
|
|
|
if oldReward.RewardID != pk.GetRewardId() {
|
|
|
upReward = append(upReward, rewardM.RewardID.Value(pk.GetRewardId()))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(upReward) > 0 {
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.Eq(oldReward.ID)).UpdateSimple(upReward...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if len(upSchedule) > 0 {
|
|
|
_, err = scheduleM.WithContext(s.Ctx).Where(scheduleM.ID.Eq(old.ID)).UpdateSimple(upSchedule...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
if err = scheduleM.WithContext(s.Ctx).Create(add...); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(teams) > 0 {
|
|
|
if err = teamM.WithContext(s.Ctx).Create(teams...); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var delSchedule []int64
|
|
|
for id := range oldScheduleMap {
|
|
|
delSchedule = append(delSchedule, id)
|
|
|
}
|
|
|
|
|
|
if len(delSchedule) > 0 {
|
|
|
_, err = scheduleM.WithContext(s.Ctx).Where(scheduleM.ID.In(delSchedule...)).Delete()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var delReward []int64
|
|
|
for id := range oldRewardMap {
|
|
|
delReward = append(delReward, id)
|
|
|
}
|
|
|
|
|
|
if len(delReward) > 0 {
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.In(delReward...)).UpdateSimple(rewardM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var delTeam []int64
|
|
|
for id := range oldTeamMap {
|
|
|
delTeam = append(delTeam, id)
|
|
|
}
|
|
|
|
|
|
if len(delTeam) > 0 {
|
|
|
_, err = teamM.WithContext(s.Ctx).Where(teamM.ID.In(delTeam...)).Delete()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) _updatePointsUse(cpn *model.FissionCampaign) (err error) {
|
|
|
req := s.Req.GetPointsUse()
|
|
|
if req.GetOpen() != mtype.Yes {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
pointUse, err := cache.NewCampaignPointsUse(s.Ctx).FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if pointUse == nil {
|
|
|
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
|
|
|
}
|
|
|
|
|
|
m := s.GetDao().FissionCampaignPointsUse
|
|
|
var up []field.AssignExpr
|
|
|
if pointUse.Icon != req.GetIcon() {
|
|
|
up = append(up, m.Icon.Value(req.GetIcon()))
|
|
|
}
|
|
|
|
|
|
if pointUse.URLID != req.GetUrlId() {
|
|
|
up = append(up, m.URLID.Value(req.GetUrlId()))
|
|
|
}
|
|
|
|
|
|
if pointUse.UseNum != req.GetUseNum() {
|
|
|
up = append(up, m.UseNum.Value(req.GetUseNum()))
|
|
|
}
|
|
|
|
|
|
if pointUse.DayLimit != req.GetDayLimit() {
|
|
|
up = append(up, m.DayLimit.Value(req.GetDayLimit()))
|
|
|
}
|
|
|
|
|
|
if pointUse.TotalLimit != req.GetTotalLimit() {
|
|
|
up = append(up, m.TotalLimit.Value(req.GetTotalLimit()))
|
|
|
}
|
|
|
|
|
|
if len(up) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(pointUse.ID)).UpdateSimple(up...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignPointsUse(s.Ctx).Clear(pointUse)
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) _updateChat(cpn *model.FissionCampaign) (err error) {
|
|
|
req := s.Req.GetChat()
|
|
|
if req.GetOpen() != mtype.Yes {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
chat, err := cache.NewCampaignChat(s.Ctx).FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if chat == nil {
|
|
|
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
|
|
|
}
|
|
|
|
|
|
m := s.GetDao().FissionCampaignChat
|
|
|
var up []field.AssignExpr
|
|
|
if chat.HeaderImg != req.GetHeaderImg() {
|
|
|
up = append(up, m.HeaderImg.Value(req.GetHeaderImg()))
|
|
|
}
|
|
|
|
|
|
if chat.ChatBg != req.GetChatBg() {
|
|
|
up = append(up, m.ChatBg.Value(req.GetChatBg()))
|
|
|
}
|
|
|
|
|
|
if chat.DayLimit != req.GetDayLimit() {
|
|
|
up = append(up, m.DayLimit.Value(req.GetDayLimit()))
|
|
|
}
|
|
|
|
|
|
if len(up) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(chat.ID)).UpdateSimple(up...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignChat(s.Ctx).Clear(chat)
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateUno(cpn *model.FissionCampaign) (err error) {
|
|
|
conf, err := cache.NewCampaignUno(s.Ctx).FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found uno conf")
|
|
|
}
|
|
|
|
|
|
uno := s.Req.GetUno()
|
|
|
|
|
|
m := s.GetDao().FissionCampaignUno
|
|
|
var up []field.AssignExpr
|
|
|
|
|
|
if conf.InitChance != uno.GetInitChance() {
|
|
|
up = append(up, m.InitChance.Value(uno.GetInitChance()))
|
|
|
}
|
|
|
|
|
|
if !verify.AllInArray[string](uno.GetPropMarks(), conf.GetPropMarks()) {
|
|
|
str, _ := jsonm.ToSliceString(uno.GetPropMarks())
|
|
|
up = append(up, m.PropMarks.Value(str))
|
|
|
}
|
|
|
|
|
|
if len(up) > 0 {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateColumnSimple(up...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignUno(s.Ctx).Clear(conf)
|
|
|
})
|
|
|
}
|
|
|
|
|
|
groupM := s.GetDao().FissionCampaignUnoGroup
|
|
|
groups, err := groupM.WithContext(s.Ctx).Where(groupM.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var groupMap = make(map[int64]*model.FissionCampaignUnoGroup, len(groups))
|
|
|
var rewardIds []int64
|
|
|
for _, group := range groups {
|
|
|
groupMap[group.ID] = group
|
|
|
rewardIds = append(rewardIds, group.RewardID)
|
|
|
}
|
|
|
|
|
|
rewardM := s.GetDao().FissionCampaignReward
|
|
|
rewards, err := rewardM.WithContext(s.Ctx).Where(rewardM.ID.In(rewardIds...)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var rewardMap = make(map[int64]*model.FissionCampaignReward, len(rewards))
|
|
|
for _, v := range rewards {
|
|
|
rewardMap[v.ID] = v
|
|
|
}
|
|
|
|
|
|
cardM := s.GetDao().FissionCampaignUnoCard
|
|
|
cards, err := cardM.WithContext(s.Ctx).Where(cardM.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var cardMap = make(map[string][]*model.FissionCampaignUnoCard)
|
|
|
for _, v := range cards {
|
|
|
cardMap[v.Mark] = append(cardMap[v.Mark], v)
|
|
|
}
|
|
|
|
|
|
var addCards []*model.FissionCampaignUnoCard
|
|
|
var stockIds []int64
|
|
|
var fn = func(unoG *pb.UpdateReq_UnoGroup) {
|
|
|
old := groupMap[unoG.GetId()]
|
|
|
|
|
|
var upG []field.AssignExpr
|
|
|
if old.Odds != unoG.GetOdds() {
|
|
|
upG = append(upG, groupM.Odds.Value(unoG.GetOdds()))
|
|
|
}
|
|
|
|
|
|
if old.OpenRule != int8(unoG.GetOpenRule()) {
|
|
|
upG = append(upG, groupM.OpenRule.Value(int8(unoG.GetOpenRule())))
|
|
|
}
|
|
|
|
|
|
if old.CustomCard != int8(unoG.GetCustomCard()) {
|
|
|
upG = append(upG, groupM.CustomCard.Value(int8(unoG.GetCustomCard())))
|
|
|
}
|
|
|
|
|
|
oldRule, newRule := old.GetLimitRule(), unoG.GetLimitRule()
|
|
|
if oldRule.InitNum != newRule.GetInitNum() ||
|
|
|
oldRule.SignDay != newRule.GetSignDay() ||
|
|
|
oldRule.AddNum != newRule.GetAddNum() ||
|
|
|
oldRule.ResetType != newRule.GetResetType() {
|
|
|
rule, _ := jsonm.ToObjString(newRule)
|
|
|
upG = append(upG, groupM.LimitRule.Value(rule))
|
|
|
}
|
|
|
|
|
|
if len(upG) > 0 {
|
|
|
_, err = groupM.WithContext(s.Ctx).Where(groupM.ID.Eq(old.ID)).UpdateSimple(upG...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var upR []field.AssignExpr
|
|
|
oldReward := rewardMap[old.RewardID]
|
|
|
if oldReward.RewardID != unoG.GetReward().GetRewardId() {
|
|
|
upR = append(upR, rewardM.RewardID.Value(unoG.GetReward().GetRewardId()))
|
|
|
}
|
|
|
|
|
|
if oldReward.Stock != unoG.GetReward().GetStock() {
|
|
|
upR = append(upR, rewardM.Stock.Value(unoG.GetReward().GetStock()))
|
|
|
stockIds = append(stockIds, oldReward.ID)
|
|
|
}
|
|
|
|
|
|
if len(upR) > 0 {
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.Eq(oldReward.ID)).UpdateColumnSimple(upR...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if unoG.GetCustomCard() == mtype.No {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
oldCards, ok := cardMap[old.Mark]
|
|
|
if !ok {
|
|
|
for i, card := range unoG.GetCards() {
|
|
|
addCards = append(addCards, withdefault.FissionCampaignUnoCard(&model.FissionCampaignUnoCard{
|
|
|
CampaignID: cpn.ID,
|
|
|
Mark: old.Mark,
|
|
|
CardNo: int32(i) + 1,
|
|
|
Title: card.GetTitle(),
|
|
|
ImgURL: card.GetImgUrl(),
|
|
|
WebURL: card.GetWebUrl(),
|
|
|
AppParam: card.GetAppParam(),
|
|
|
PcParam: card.GetPcParam(),
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
oldCardMap := make(map[int64]*model.FissionCampaignUnoCard, len(oldCards))
|
|
|
for _, v := range oldCards {
|
|
|
oldCardMap[v.ID] = v
|
|
|
}
|
|
|
|
|
|
for _, v := range unoG.GetCards() {
|
|
|
old := oldCardMap[v.GetId()]
|
|
|
var upC []field.AssignExpr
|
|
|
if old.Title != v.GetTitle() {
|
|
|
upC = append(upC, cardM.Title.Value(v.GetTitle()))
|
|
|
}
|
|
|
|
|
|
if old.ImgURL != v.GetImgUrl() {
|
|
|
upC = append(upC, cardM.ImgURL.Value(v.GetImgUrl()))
|
|
|
}
|
|
|
|
|
|
if old.AppParam != v.GetAppParam() {
|
|
|
upC = append(upC, cardM.AppParam.Value(v.GetAppParam()))
|
|
|
}
|
|
|
|
|
|
if old.PcParam != v.GetPcParam() {
|
|
|
upC = append(upC, cardM.PcParam.Value(v.GetPcParam()))
|
|
|
}
|
|
|
if old.WebURL != v.GetWebUrl() {
|
|
|
upC = append(upC, cardM.WebURL.Value(v.GetWebUrl()))
|
|
|
}
|
|
|
|
|
|
if len(upC) > 0 {
|
|
|
_, err = cardM.WithContext(s.Ctx).Where(cardM.ID.Eq(old.ID)).UpdateColumnSimple(upC...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fn(uno.GetRed())
|
|
|
fn(uno.GetYellow())
|
|
|
fn(uno.GetBlue())
|
|
|
fn(uno.GetGreen())
|
|
|
|
|
|
if len(addCards) > 0 {
|
|
|
if err = s.GetDao().FissionCampaignUnoCard.WithContext(s.Ctx).Create(addCards...); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(stockIds) > 0 {
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
stock, _ := stocks.NewCampaignReward(s.Ctx, stockIds...)
|
|
|
stock.Clear()
|
|
|
return
|
|
|
})
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateEvent(cpn *model.FissionCampaign) (err error) {
|
|
|
m := s.GetDao().FissionCampaignEvent
|
|
|
list, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID)).Find()
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var eventMap = make(map[string]*model.FissionCampaignEvent, len(list))
|
|
|
for _, v := range list {
|
|
|
eventMap[v.Mark] = v
|
|
|
}
|
|
|
|
|
|
events := s.Req.GetEvent()
|
|
|
|
|
|
var delRewardIds []int64
|
|
|
var clearStockIds []int64
|
|
|
var add []*model.FissionCampaignEvent
|
|
|
|
|
|
var rewardFn = func(reward *pb.UpdateReq_EventReward) (eventReward *mtype.EventReward) {
|
|
|
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,
|
|
|
})
|
|
|
|
|
|
eventReward = &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(),
|
|
|
})
|
|
|
eventReward = &mtype.EventReward{
|
|
|
Id: hashid.IdBigint(),
|
|
|
PropMark: reward.GetPropMark(),
|
|
|
RewardId: rewardId,
|
|
|
Chance: reward.GetChance(),
|
|
|
}
|
|
|
case mtype.FissionCampaignRewardPropMarkChance:
|
|
|
eventReward = &mtype.EventReward{
|
|
|
Id: hashid.IdBigint(),
|
|
|
PropMark: reward.GetPropMark(),
|
|
|
Chance: reward.GetChance(),
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var fn = func(event *pb.UpdateReq_EventOne, mark string) (err error) {
|
|
|
old, ok := eventMap[mark]
|
|
|
if event.GetOpen() == mtype.No {
|
|
|
if ok && old.Open == mtype.Yes {
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(old.ID)).UpdateSimple(m.Open.Value(mtype.No))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if !ok {
|
|
|
var rewards = make([]*mtype.EventReward, 0, len(event.GetRewards()))
|
|
|
for _, reward := range event.GetRewards() {
|
|
|
rewards = append(rewards, rewardFn(reward))
|
|
|
}
|
|
|
|
|
|
add = append(add, withdefault.FissionCampaignEvent(&model.FissionCampaignEvent{
|
|
|
CampaignID: cpn.ID,
|
|
|
Mark: mark,
|
|
|
Open: mtype.Yes,
|
|
|
}, rewards))
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldReward = old.GetRewards()
|
|
|
var oldMap = make(map[int64]*mtype.EventReward, len(oldReward))
|
|
|
for _, reward := range oldReward {
|
|
|
oldMap[reward.Id] = reward
|
|
|
}
|
|
|
|
|
|
rewardM := s.GetDao().FissionCampaignReward
|
|
|
var rewards = make([]*mtype.EventReward, 0)
|
|
|
for _, reward := range event.GetRewards() {
|
|
|
|
|
|
old, ok := oldMap[reward.GetId()]
|
|
|
if !ok {
|
|
|
rewards = append(rewards, rewardFn(reward))
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
if old.PropMark != reward.GetPropMark() {
|
|
|
if verify.InArray[string](old.PropMark, mtype.FissionCampaignRewardPropMarkPoint, mtype.FissionCampaignRewardPropMarkReward) {
|
|
|
delRewardIds = append(delRewardIds, old.RewardId)
|
|
|
clearStockIds = append(clearStockIds, old.RewardId)
|
|
|
}
|
|
|
|
|
|
rewards = append(rewards, rewardFn(reward))
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
switch old.PropMark {
|
|
|
case mtype.FissionCampaignRewardPropMarkReward:
|
|
|
_, err = rewardM.WithContext(s.Ctx).
|
|
|
Where(rewardM.ID.Eq(old.RewardId)).
|
|
|
UpdateSimple(
|
|
|
rewardM.Stock.Value(reward.GetReward().GetStock()),
|
|
|
rewardM.RewardID.Value(reward.GetReward().GetRewardId()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
clearStockIds = append(clearStockIds, old.RewardId)
|
|
|
case mtype.FissionCampaignRewardPropMarkPoint:
|
|
|
_, err = rewardM.WithContext(s.Ctx).
|
|
|
Where(rewardM.ID.Eq(old.RewardId)).
|
|
|
UpdateSimple(
|
|
|
rewardM.RewardNum.Value(reward.GetChance()),
|
|
|
rewardM.ExpiredDay.Value(reward.GetExpiredDay()),
|
|
|
)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
old.Chance = reward.GetChance()
|
|
|
case mtype.FissionCampaignRewardPropMarkChance:
|
|
|
old.Chance = reward.GetChance()
|
|
|
}
|
|
|
|
|
|
rewards = append(rewards, old)
|
|
|
}
|
|
|
|
|
|
old.Open = mtype.Yes
|
|
|
old.SetRewards(rewards)
|
|
|
|
|
|
if err = m.WithContext(s.Ctx).Save(old); err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
return cache.NewCampaignEvent(s.Ctx).Clear(old)
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
err = fn(events.GetFirstVisit(), mtype.FissionCampaignEventMarkFirstVisit)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
err = s.GetDao().FissionCampaignEvent.WithContext(s.Ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(delRewardIds) > 0 {
|
|
|
rewardM := s.GetDao().FissionCampaignReward
|
|
|
_, err = rewardM.WithContext(s.Ctx).Where(rewardM.ID.In(delRewardIds...)).UpdateSimple(rewardM.IsDel.Value(mtype.Yes))
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
s.AddAfterRun(func() (err error) {
|
|
|
if len(clearStockIds) > 0 {
|
|
|
stocks.NewCleaner(s.Ctx, clearStockIds...).ClearAllReward()
|
|
|
}
|
|
|
|
|
|
return
|
|
|
})
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *Update) updateGashapon(cpn *model.FissionCampaign) (err error) {
|
|
|
var gashapon = s.Req.GetGashapon()
|
|
|
|
|
|
cc := cache.NewCampaignGashapon(s.Ctx)
|
|
|
conf, err := cc.FindByCampaignId(cpn.ID)
|
|
|
if err != nil {
|
|
|
err = s.BE().CacheError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if conf == nil {
|
|
|
return workerr.NotFound("not found gashapon conf")
|
|
|
}
|
|
|
|
|
|
confM := s.GetDao().FissionCampaignGashapon
|
|
|
var up []field.AssignExpr
|
|
|
|
|
|
if conf.DayChance != gashapon.GetDayChance() {
|
|
|
up = append(up, confM.DayChance.Value(gashapon.GetDayChance()))
|
|
|
}
|
|
|
|
|
|
if conf.InitChance != gashapon.GetInitChance() {
|
|
|
up = append(up, confM.InitChance.Value(gashapon.GetInitChance()))
|
|
|
}
|
|
|
|
|
|
if len(up) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = confM.WithContext(s.Ctx).Where(confM.ID.Eq(conf.ID)).UpdateSimple(up...)
|
|
|
if err != nil {
|
|
|
err = s.BE().MysqlError(err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cc.Clear(conf)
|
|
|
|
|
|
return
|
|
|
}
|