You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.4 KiB
Go
152 lines
3.4 KiB
Go
package campaignnotice
|
|
|
|
import (
|
|
"joybuywork/internal/consts"
|
|
"joybuywork/internal/consts/ckey"
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/repository/withdefault"
|
|
"joybuywork/internal/service/provider/award"
|
|
"joybuywork/internal/service/provider/cachecurd"
|
|
"joybuywork/internal/service/provider/players"
|
|
"joybuywork/internal/service/queue/types"
|
|
"joybuywork/internal/utils"
|
|
"joybuywork/internal/utils/logic"
|
|
"time"
|
|
)
|
|
|
|
type ChildInvite struct {
|
|
logic.Logic
|
|
|
|
Req *types.CampaignChildInvite
|
|
}
|
|
|
|
func (s *ChildInvite) Exec() (err error) {
|
|
cpn, err := cache.NewCampaign(s.Ctx).FindById(s.Req.CampaignId)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if cpn.Status != mtype.FissionCampaignStatusCancel {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignReward
|
|
list, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.IsDel.Eq(mtype.No)).Order(m.Step).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
l := len(list)
|
|
|
|
var rankNum int64
|
|
switch l {
|
|
case 7:
|
|
rankNum = 10000
|
|
case 6:
|
|
rankNum = 100
|
|
case 5:
|
|
rankNum = 10
|
|
default:
|
|
rankNum = int64(l)
|
|
}
|
|
|
|
ranker, err := cachecurd.NewRanker(s.Ctx, ckey.FissionChildRank(cpn.ID), cachecurd.SetChildBuild(cpn.ID, cpn.ChildType))
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
ranks, err := ranker.GetRank(rankNum)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if len(ranks) == 0 {
|
|
return
|
|
}
|
|
|
|
pcpn, err := cache.NewCampaign(s.Ctx).FindById(cpn.Pid)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
childUserCache := cache.NewFissionChildUser(s.Ctx)
|
|
childUserM := s.GetDao().FissionChildUser
|
|
for i, rank := range ranks {
|
|
var idx = -1
|
|
user, _ := cache.NewFissionUser(s.Ctx, cpn.Pid).FindById(utils.StrToInt64(rank.UserId))
|
|
if i < 4 {
|
|
idx = i
|
|
} else if i < 10 {
|
|
idx = 4
|
|
} else if i < 100 {
|
|
idx = 5
|
|
} else if i < 10000 {
|
|
idx = 6
|
|
}
|
|
|
|
if idx == -1 {
|
|
return
|
|
}
|
|
|
|
player, _ := childUserCache.FindByUniqIdx(user.ID, cpn.ID)
|
|
if player == nil || player.RecordID > 0 {
|
|
continue
|
|
}
|
|
|
|
reward := list[idx]
|
|
var record *model.FissionRewardRecord
|
|
record, _, _, err = award.NewAwardReward(s.Ctx, s.GetDao(), cpn.ProjectID, user).One(reward, true, award.RewardRecordChildId(player.CampaignID))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
_, err = childUserM.WithContext(s.Ctx).
|
|
Where(childUserM.ID.Eq(player.ID)).
|
|
UpdateSimple(
|
|
childUserM.LastDone.Value(time.Now().Unix()),
|
|
childUserM.RewardID.Value(record.RewardID),
|
|
childUserM.RecordID.Value(record.ID),
|
|
)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
err = s.GetDao().FissionChildUserRecord.WithContext(s.Ctx).Create(withdefault.FissionChildUserRecord(&model.FissionChildUserRecord{
|
|
PCpnID: player.PCpnID,
|
|
CampaignID: player.CampaignID,
|
|
UserID: player.UserID,
|
|
PlayerID: player.ID,
|
|
ChildType: player.ChildType,
|
|
Mark: mtype.FissionChildUserRecordSourceInvite,
|
|
RecordID: record.ID,
|
|
}))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
_ = childUserCache.Clear(player)
|
|
|
|
if reward.PropMark == mtype.FissionCampaignRewardPropMarkReward {
|
|
continue
|
|
}
|
|
|
|
switch pcpn.FissionID {
|
|
case consts.IdKeep:
|
|
keepDog, _ := players.NewKeepDog(s.Ctx, user)
|
|
_ = keepDog.ChildActive(reward.RewardNum, mtype.FissionCampaignChildTypeInvite)
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
}
|