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.
152 lines
3.4 KiB
Go
152 lines
3.4 KiB
Go
package campaignuser
|
|
|
|
import (
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/dbcheck"
|
|
"joybuywork/internal/repository/finder"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/utils/logic"
|
|
pb "joybuywork/proto/go_proto/w_campaign_user"
|
|
"joybuywork/proto/go_proto/workerr"
|
|
)
|
|
|
|
type RewardForm struct {
|
|
logic.Logic
|
|
Req *pb.RewardFormReq
|
|
Res *pb.RewardFormRes
|
|
|
|
langMark string
|
|
}
|
|
|
|
func (s *RewardForm) Run() error {
|
|
return logic.Run(s)
|
|
}
|
|
|
|
func (s *RewardForm) Exec() (err error) {
|
|
user, err := s.user()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if user.IsView == mtype.Yes {
|
|
return s.view()
|
|
}
|
|
|
|
return s.form(user)
|
|
}
|
|
|
|
func (s *RewardForm) user() (user *model.FissionUser, err error) {
|
|
user, err = finder.FissionUser(s.Ctx, s.Req.GetCampaignId(), s.Req.GetUserId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if user == nil {
|
|
err = workerr.NotFound("not found user")
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 预览用户表单
|
|
func (s *RewardForm) view() (err error) {
|
|
m := s.GetDao().FissionCampaignReward
|
|
reward, err := m.WithContext(s.Ctx).Where(m.ID.Eq(s.Req.GetCampaignId()), m.ID.Eq(s.Req.GetRewardId())).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if reward == nil {
|
|
err = workerr.NotFound("not found reward")
|
|
return
|
|
}
|
|
|
|
breward, err := cache.NewReward(s.Ctx).FindById(reward.RewardID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
return s._res(false, breward.FormID, reward.ID, 0, nil)
|
|
}
|
|
|
|
// 正常用户表单
|
|
func (s *RewardForm) form(user *model.FissionUser) (err error) {
|
|
m := s.GetDao().FissionRewardRecord.SubTable(user.CampaignID)
|
|
record, err := m.WithContext(s.Ctx).Where(m.HashID.Eq(s.Req.GetRewardHashId()), m.UserID.Eq(user.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if record == nil {
|
|
err = workerr.NotFound("not found record")
|
|
return
|
|
}
|
|
|
|
if record.Status == mtype.FissionRewardRecordStatusSubmitForm {
|
|
rfm := s.GetDao().FissionRewardRecordForm
|
|
var recordForm *model.FissionRewardRecordForm
|
|
recordForm, err = rfm.WithContext(s.Ctx).Where(rfm.RecordID.Eq(record.ID)).Take()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return s._res(true, recordForm.FormID, record.RewardID, record.ID, recordForm.GetItems())
|
|
}
|
|
|
|
breward, err := cache.NewReward(s.Ctx).FindById(record.BaseRewardID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if breward.ReceiveType != mtype.RewardReceiveTypeForm || record.Status != mtype.FissionRewardRecordStatusWaitForm {
|
|
return
|
|
}
|
|
|
|
return s._res(false, breward.FormID, record.RewardID, record.ID, nil)
|
|
}
|
|
|
|
// 结果
|
|
func (s *RewardForm) _res(isSubmit bool, formId, rewardId, recordId int64, items []*mtype.SubmitFormItem) (err error) {
|
|
form, err := cache.NewForm(s.Ctx).FindById(formId)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
s.Res.IsSubmit = isSubmit
|
|
s.Res.Title = form.Title
|
|
s.Res.Id = recordId
|
|
s.Res.RewardId = rewardId
|
|
|
|
if isSubmit {
|
|
s.Res.Items = make([]*pb.RewardFormRes_Item, 0, len(items))
|
|
for _, item := range items {
|
|
s.Res.Items = append(s.Res.Items, &pb.RewardFormRes_Item{
|
|
Name: item.Name,
|
|
Key: item.Key,
|
|
Value: item.Value,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
for _, v := range form.GetItems() {
|
|
s.Res.Items = append(s.Res.Items, &pb.RewardFormRes_Item{
|
|
Name: v.GetTranName(s.Req.GetLangMark()),
|
|
Key: v.Name,
|
|
Value: "",
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|