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 }