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.

104 lines
2.0 KiB
Go

package campaignnotice
import (
"joybuywork/internal/app"
"joybuywork/internal/consts/ckey"
"joybuywork/internal/repository/finder"
"joybuywork/internal/repository/model"
"joybuywork/internal/repository/mtype"
"joybuywork/internal/service/queue/types"
"joybuywork/internal/utils/logic"
"joybuywork/proto/go_proto/workerr"
"time"
)
type OtherStat struct {
logic.Logic
Req *types.CampaignOtherStat
}
func (s *OtherStat) Exec() (err error) {
cpn, err := s.campaign()
if err != nil {
return
}
err = s.stat(cpn)
if err != nil {
return
}
return
}
// 活动数据
func (s *OtherStat) campaign() (cpn *model.FissionCampaign, err error) {
cpn, err = finder.Campaign(s.Ctx, s.Req.CampaignId)
if err != nil {
err = s.BE().CacheError(err)
return
}
if cpn == nil || cpn.IsDel == mtype.Yes {
err = workerr.NotFound("not found cpn")
return
}
if cpn.EndTime < time.Now().Unix() {
err = workerr.CEndError
return
}
return
}
// 统计
func (s *OtherStat) stat(cpn *model.FissionCampaign) (err error) {
exp := time.Unix(cpn.EndTime, 0).Add(time.Hour).Sub(time.Now())
//次数
key := ckey.FissionStatOther(s.Req.CampaignId)
app.Redis.Cache.HIncrBy(s.Ctx, key, s.Req.Mark, 1)
app.Redis.Cache.Expire(s.Ctx, key, exp)
switch s.Req.Mark {
case mtype.FissionStatOtherNoChanceClickBtn:
var yes bool
yes, err = s.newUser(cpn, exp)
if err != nil {
return
}
if yes {
app.Redis.Cache.HIncrBy(s.Ctx, key, mtype.FissionStatOtherNoChanceClickBtnUser, 1)
}
case mtype.FissionStatOtherInviteShow:
var yes bool
yes, err = s.newUser(cpn, exp)
if err != nil {
return
}
if yes {
app.Redis.Cache.HIncrBy(s.Ctx, key, mtype.FissionStatOtherInviteShowUser, 1)
}
}
return
}
func (s *OtherStat) newUser(cpn *model.FissionCampaign, exp time.Duration) (yes bool, err error) {
key := ckey.FissionStatOtherRecord(cpn.ID, s.Req.Mark)
yes, err = app.Redis.Cache.HSetNX(s.Ctx, key, s.Req.UserHashId, 1).Result()
if err != nil {
err = s.BE().RedisError(err)
return
}
app.Redis.Cache.Expire(s.Ctx, key, exp)
return
}