package campaignnotice import ( "joybuywork/internal/repository/cache" "joybuywork/internal/repository/dbcheck" "joybuywork/internal/repository/mtype" "joybuywork/internal/service/provider/fissionaction" "joybuywork/internal/service/queue/producer" "joybuywork/internal/service/queue/types" "joybuywork/internal/utils/logic" "fmt" "gorm.io/gen/field" ) type CondStat struct { logic.Logic Req *types.CampaignCondStat } func (s *CondStat) Exec() (err error) { return s.stat() } func (s *CondStat) stat() (err error) { m := s.GetDao().FissionCampaignCond cond, err := m.WithContext(s.Ctx).Where(m.ID.Eq(s.Req.CondId)).Take() if err = dbcheck.DbError(err); err != nil { err = s.BE().MysqlError(err) return } if cond == nil { return } var upData = []field.AssignExpr{ m.Num.Add(1), m.Total.Add(s.Req.Total), } if s.Req.First { upData = append(upData, m.UserNum.Add(1)) } _, err = m.WithContext(s.Ctx).Where(m.ID.Eq(cond.ID)).UpdateSimple(upData...) if err != nil { err = s.BE().MysqlError(err) return } producer.NewCampaignNotice(s.Ctx).CampaignBehavior(types.CampaignBehavior{ CampaignId: cond.CampaignID, BehaviorType: mtype.FissionBehaviorTypeFinishCond, BehaviorTime: s.Req.BehaviorTime, UserMark: fmt.Sprint(s.Req.UserId), OtherData: map[string]float64{"total": s.Req.Total}, MarkId: fmt.Sprint(cond.ID), }) cpn, err := cache.NewCampaign(s.Ctx).FindById(cond.CampaignID) if err != nil { return } if cpn.ReportType == mtype.FissionCampaignReportTypeNew { user, _ := cache.NewFissionUser(s.Ctx, cond.CampaignID).FindById(s.Req.UserId) fissionaction.NewMarkPoint(s.Ctx).InApp(user).FinishCond(s.Req.BehaviorTime, cond.ID, s.Req.Total, s.Req.Event, s.Req.EventData) } return }