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.8 KiB
Go

package delay
import (
"joybuywork/internal/plugins/jsonm"
"joybuywork/internal/repository/cache"
"joybuywork/internal/repository/dao"
"joybuywork/internal/repository/dbcheck"
"joybuywork/internal/repository/model"
"joybuywork/internal/repository/mtype"
"joybuywork/internal/service/notify"
"joybuywork/internal/service/queue/types"
"joybuywork/internal/utils/logic"
)
type RewardPush struct {
logic.Logic
Req *types.DelayCommonRewardPush
}
func (s *RewardPush) Exec() (err error) {
m := dao.FissionNotifyTask
task, err := m.WithContext(s.Ctx).Where(m.ID.Eq(s.Req.TaskId)).Take()
if err = dbcheck.DbError(err); err != nil {
return s.BE().MysqlError(err)
}
if task == nil {
return
}
ntfM := dao.FissionNotify
ntf, err := ntfM.WithContext(s.Ctx).Where(ntfM.ID.Eq(task.NotifyID)).Take()
if err != nil {
return s.BE().MysqlError(err)
}
if ntf == nil || ntf.IsOk == mtype.Yes {
return s.deleteTask(task)
}
var notifyReward notify.Reward
err = jsonm.StrUnmarshal(task.Reward, &notifyReward)
if err != nil {
return
}
cpn, _ := cache.NewCampaign(s.Ctx).FindById(notifyReward.CampaignId)
project, _ := cache.NewProject(s.Ctx).FindById(cpn.ProjectID)
rewardM := s.GetDao().FissionRewardRecord.SubTable(cpn.ID)
reward, _ := rewardM.WithContext(s.Ctx).Where(rewardM.ID.Eq(notifyReward.RewardId)).Take()
breward, _ := cache.NewReward(s.Ctx).FindById(reward.BaseRewardID)
url, _ := cache.NewNotifyURL(s.Ctx).FindById(breward.URLID)
if url != nil {
notifyReward.KvData = breward.GetJustKvData()
_ = notifyReward.Send(s.Ctx, url.URL, project.NotifyToken, project.PushLadder, ntf.GetHeaders())
}
return s.deleteTask(task)
}
func (s *RewardPush) deleteTask(task *model.FissionNotifyTask) (err error) {
_, err = dao.FissionNotifyTask.WithContext(s.Ctx).Delete(task)
if err != nil {
return s.BE().MysqlError(err)
}
return
}