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.

73 lines
1.7 KiB
Go

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
}