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.
1381 lines
30 KiB
Go
1381 lines
30 KiB
Go
package service
|
|
|
|
import (
|
|
"joybuywork/internal/plugins/jsonm"
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/dbcheck"
|
|
"joybuywork/internal/repository/finder"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/repository/withdefault"
|
|
"joybuywork/internal/service/containers"
|
|
"joybuywork/internal/service/provider"
|
|
"joybuywork/internal/service/provider/s2s"
|
|
"joybuywork/internal/utils"
|
|
"joybuywork/internal/utils/verify"
|
|
pb "joybuywork/proto/go_proto/w_reward"
|
|
"joybuywork/proto/go_proto/workerr"
|
|
"fmt"
|
|
"time"
|
|
|
|
"gorm.io/gen"
|
|
)
|
|
|
|
type WReward struct {
|
|
Service
|
|
}
|
|
|
|
// List 奖品列表
|
|
func (s *WReward) List(req *pb.ListReq, res *pb.ListRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
*res = pb.ListRes{}
|
|
|
|
container := new(containers.RewardList)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// Select 奖品选择
|
|
func (s *WReward) Select(req *pb.SelectReq, res *pb.SelectRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
rewards, err := provider.NewRewards(s.ctx, project.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
list, err := rewards.InfoList()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
*res = pb.SelectRes{
|
|
List: make([]*pb.SelectRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
|
|
if req.GetReceiveType() > 0 && v.ReceiveType != req.GetReceiveType() {
|
|
continue
|
|
}
|
|
|
|
one := &pb.SelectRes_One{
|
|
Id: v.Id,
|
|
RewardTitle: v.RewardTitle,
|
|
Title: "",
|
|
ImgUrl: "",
|
|
LangMark: "",
|
|
ReceiveType: v.ReceiveType,
|
|
KvData: make([]*pb.SelectRes_KV, 0, len(v.KvData)),
|
|
Contact: v.Contact,
|
|
Url: v.Url,
|
|
FormTitle: v.FormTitle,
|
|
}
|
|
|
|
for _, kv := range v.KvData {
|
|
one.KvData = append(one.KvData, &pb.SelectRes_KV{
|
|
Key: kv.Key,
|
|
Value: kv.Value,
|
|
IsShow: kv.IsShow,
|
|
})
|
|
}
|
|
|
|
lang := rewards.AutoLang(v.Id, req.GetLangMark())
|
|
one.Title, one.ImgUrl, one.LangMark = lang.Title, lang.ImgUrl, lang.Mark
|
|
|
|
res.List = append(res.List, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Show 奖品详情
|
|
func (s *WReward) Show(req *pb.ShowReq, res *pb.ShowRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
reward, err := cache.NewReward(s.ctx).FindById(req.GetId())
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if reward == nil || reward.IsDel == mtype.Yes || reward.ProjectID != project.ID {
|
|
err = workerr.NotFound("not found reward")
|
|
return
|
|
}
|
|
|
|
rlm := s.GetDao().RewardLang
|
|
rls, err := rlm.WithContext(s.ctx).Where(rlm.RewardID.Eq(reward.ID), rlm.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
relateM := s.GetDao().RewardRelated
|
|
relateNum, err := relateM.WithContext(s.ctx).Where(relateM.RewardID.Eq(reward.ID), relateM.CancelTime.Eq(0)).Count()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.ShowRes{
|
|
Id: reward.ID,
|
|
RewardTitle: reward.RewardTitle,
|
|
ReceiveType: int32(reward.ReceiveType),
|
|
UrlId: reward.URLID,
|
|
Contact: reward.Contact,
|
|
KvData: nil,
|
|
Langs: make([]*pb.ShowRes_Lang, 0, len(rls)),
|
|
FormId: reward.FormID,
|
|
RelateNum: relateNum,
|
|
DyRewardType: int32(reward.DyRewardType),
|
|
}
|
|
|
|
_ = jsonm.StrUnmarshal(reward.KvData, &res.KvData)
|
|
|
|
for _, v := range rls {
|
|
res.Langs = append(res.Langs, &pb.ShowRes_Lang{
|
|
Mark: v.Mark,
|
|
Title: v.Title,
|
|
ImgUrl: v.ImgURL,
|
|
IsDefault: int32(v.IsDefault),
|
|
LangType: int32(mtype.MarkToLangType[v.Mark]),
|
|
OpenToUse: int32(v.OpenToUse),
|
|
WebUrl: v.WebURL,
|
|
AppParam: v.AppParam,
|
|
PcParam: v.PcParam,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Store 创建奖品
|
|
func (s *WReward) Store(req *pb.StoreReq, res *pb.StoreRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// 验证kv是否存在
|
|
var kvData []*mtype.RewardKV
|
|
var kvStr, kvMark string
|
|
if verify.InArray[int32](req.GetReceiveType(), mtype.RewardReceiveTypeNotify, mtype.RewardReceiveTypeClient) {
|
|
kvData = make([]*mtype.RewardKV, 0, len(req.GetKvData()))
|
|
markStruct := make([]*mtype.KV, 0, len(req.GetKvData()))
|
|
for _, v := range req.GetKvData() {
|
|
markStruct = append(markStruct, &mtype.KV{
|
|
Key: v.GetKey(),
|
|
Value: v.GetValue(),
|
|
})
|
|
|
|
kvData = append(kvData, &mtype.RewardKV{
|
|
Key: v.GetKey(),
|
|
Value: v.GetValue(),
|
|
IsShow: utils.Ternary(req.GetDyRewardType() == mtype.RewardDyRewardTypeNone, v.GetIsShow(), mtype.No),
|
|
})
|
|
}
|
|
|
|
kvStr, _ = jsonm.MarshalToString(markStruct)
|
|
kvMark = utils.Md5String(kvStr)
|
|
|
|
m := s.GetDao().Reward
|
|
var exist *model.Reward
|
|
exist, err = m.WithContext(s.ctx).Where(
|
|
m.ProjectID.Eq(project.ID),
|
|
m.KvMark.Eq(kvMark),
|
|
m.ReceiveType.Eq(int8(req.GetReceiveType())),
|
|
m.IsDel.Eq(mtype.No)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if exist != nil {
|
|
return workerr.RewardKvExistError
|
|
}
|
|
}
|
|
|
|
tran := s.GetDao().Begin()
|
|
defer func() {
|
|
if err != nil {
|
|
_ = tran.Rollback()
|
|
return
|
|
}
|
|
_ = tran.Commit()
|
|
}()
|
|
|
|
m := tran.Reward
|
|
reward := withdefault.Reward(&model.Reward{
|
|
ProjectID: project.ID,
|
|
ReceiveType: int8(req.GetReceiveType()),
|
|
KvData: "",
|
|
KvMark: kvMark,
|
|
URLID: req.GetUrlId(),
|
|
Contact: req.GetContact(),
|
|
RewardTitle: req.GetRewardTitle(),
|
|
TitleDefault: 0,
|
|
FormID: req.GetFormId(),
|
|
DyRewardType: int8(req.GetDyRewardType()),
|
|
Source: int8(req.GetSource()),
|
|
})
|
|
|
|
reward.SetKvData(kvData)
|
|
|
|
if req.GetRewardTitle() == "" {
|
|
for _, v := range req.GetLangs() {
|
|
if v.GetIsDefault() == mtype.Yes {
|
|
reward.RewardTitle = v.GetTitle()
|
|
reward.TitleDefault = mtype.Yes
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
err = m.WithContext(s.ctx).Create(reward)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var imgIds []int64
|
|
for _, v := range req.GetLangs() {
|
|
if v.GetImageId() > 0 {
|
|
imgIds = append(imgIds, v.GetImageId())
|
|
}
|
|
}
|
|
|
|
var imgMap = make(map[int64]string, len(imgIds))
|
|
if len(imgIds) > 0 {
|
|
mm := s.GetDao().Material
|
|
var materials []*model.Material
|
|
materials, err = mm.WithContext(s.ctx).Where(mm.ID.In(imgIds...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(materials) != len(imgIds) {
|
|
err = workerr.RewardImageInvalidError
|
|
return
|
|
}
|
|
|
|
for _, v := range materials {
|
|
imgMap[v.ID] = v.MaterialData
|
|
}
|
|
}
|
|
|
|
var langs = make([]*model.RewardLang, 0, len(req.GetLangs()))
|
|
for _, v := range req.GetLangs() {
|
|
one := withdefault.RewardLang(&model.RewardLang{
|
|
ProjectID: project.ID,
|
|
RewardID: reward.ID,
|
|
Mark: v.GetMark(),
|
|
Title: v.GetTitle(),
|
|
ImgURL: v.GetImgUrl(),
|
|
IsDefault: int8(v.GetIsDefault()),
|
|
OpenToUse: int8(v.GetOpenToUse()),
|
|
WebURL: v.GetWebUrl(),
|
|
AppParam: v.GetAppParam(),
|
|
ImageID: v.GetImageId(),
|
|
PcParam: v.GetPcParam(),
|
|
})
|
|
if _, ok := imgMap[v.GetImageId()]; ok {
|
|
one.ImgURL = imgMap[v.GetImageId()]
|
|
}
|
|
|
|
langs = append(langs, one)
|
|
}
|
|
|
|
rlm := s.GetDao().RewardLang
|
|
err = rlm.WithContext(s.ctx).Create(langs...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.StoreRes{
|
|
Id: reward.ID,
|
|
}
|
|
return
|
|
}
|
|
|
|
// Update 更新奖品
|
|
func (s *WReward) Update(req *pb.UpdateReq, res *pb.UpdateRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
c := cache.NewReward(s.ctx)
|
|
reward, err := c.FindById(req.GetId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if reward == nil || reward.IsDel == mtype.Yes || reward.ProjectID != project.ID {
|
|
err = workerr.NotFound("not found reward")
|
|
return
|
|
}
|
|
|
|
if req.GetReceiveType() != int32(reward.ReceiveType) {
|
|
relateM := s.GetDao().RewardRelated
|
|
var count int64
|
|
count, err = relateM.WithContext(s.ctx).Where(relateM.RewardID.Eq(reward.ID), relateM.CancelTime.Eq(0)).Count()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if count > 0 {
|
|
err = s.BE().VerifyError("奖品已经被绑定,无法修改奖品的发放类型")
|
|
return
|
|
}
|
|
|
|
}
|
|
|
|
// 验证kv是否存在
|
|
var kvData []*mtype.RewardKV
|
|
var kvStr, kvMark string
|
|
if verify.InArray[int32](req.GetReceiveType(), mtype.RewardReceiveTypeNotify, mtype.RewardReceiveTypeClient) {
|
|
kvData = make([]*mtype.RewardKV, 0, len(req.GetKvData()))
|
|
markStruct := make([]*mtype.KV, 0, len(req.GetKvData()))
|
|
for _, v := range req.GetKvData() {
|
|
markStruct = append(markStruct, &mtype.KV{
|
|
Key: v.GetKey(),
|
|
Value: v.GetValue(),
|
|
})
|
|
|
|
kvData = append(kvData, &mtype.RewardKV{
|
|
Key: v.GetKey(),
|
|
Value: v.GetValue(),
|
|
IsShow: utils.Ternary(req.GetDyRewardType() == mtype.RewardDyRewardTypeNone, v.GetIsShow(), mtype.No),
|
|
})
|
|
}
|
|
|
|
kvStr, _ = jsonm.MarshalToString(markStruct)
|
|
kvMark = utils.Md5String(kvStr)
|
|
|
|
m := s.GetDao().Reward
|
|
var exist *model.Reward
|
|
exist, err = m.WithContext(s.ctx).Where(
|
|
m.ProjectID.Eq(project.ID),
|
|
m.KvMark.Eq(kvMark),
|
|
m.ReceiveType.Eq(int8(req.GetReceiveType())),
|
|
m.IsDel.Eq(mtype.No), m.ID.Neq(reward.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if exist != nil {
|
|
return workerr.RewardKvExistError
|
|
}
|
|
}
|
|
|
|
// 语言数据
|
|
rlm := s.GetDao().RewardLang
|
|
oldLang, err := rlm.WithContext(s.ctx).Where(rlm.RewardID.Eq(reward.ID)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var oldLangMap = make(map[string]*model.RewardLang)
|
|
for _, v := range oldLang {
|
|
oldLangMap[v.Mark] = v
|
|
}
|
|
|
|
var imgIds []int64
|
|
for _, v := range req.GetLangs() {
|
|
if v.GetImageId() > 0 {
|
|
imgIds = append(imgIds, v.GetImageId())
|
|
}
|
|
}
|
|
|
|
var imgMap = make(map[int64]string, len(imgIds))
|
|
if len(imgIds) > 0 {
|
|
mm := s.GetDao().Material
|
|
var materials []*model.Material
|
|
materials, err = mm.WithContext(s.ctx).Where(mm.ID.In(imgIds...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(materials) != len(imgIds) {
|
|
err = workerr.RewardImageInvalidError
|
|
return
|
|
}
|
|
|
|
for _, v := range materials {
|
|
imgMap[v.ID] = v.MaterialData
|
|
}
|
|
}
|
|
|
|
tran := s.GetDao().Begin()
|
|
defer func() {
|
|
if err != nil {
|
|
_ = tran.Rollback()
|
|
return
|
|
}
|
|
_ = tran.Commit()
|
|
_ = c.Clear(reward)
|
|
}()
|
|
|
|
m := tran.Reward
|
|
|
|
var rewardTitle = req.GetRewardTitle()
|
|
var titleDefault int8
|
|
if (reward.RewardTitle == rewardTitle && reward.TitleDefault == mtype.Yes) || rewardTitle == "" {
|
|
for _, v := range req.GetLangs() {
|
|
if v.GetIsDefault() == mtype.Yes {
|
|
rewardTitle = v.GetTitle()
|
|
titleDefault = mtype.Yes
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
kvDataStr, _ := jsonm.MarshalToString(kvData)
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(reward.ID)).UpdateSimple(
|
|
m.Contact.Value(req.GetContact()),
|
|
m.KvData.Value(kvDataStr),
|
|
m.KvMark.Value(kvMark),
|
|
m.URLID.Value(req.GetUrlId()),
|
|
m.ReceiveType.Value(int8(req.GetReceiveType())),
|
|
m.RewardTitle.Value(rewardTitle),
|
|
m.TitleDefault.Value(titleDefault),
|
|
m.OldData.Value(mtype.No),
|
|
m.FormID.Value(req.GetFormId()),
|
|
m.DyRewardType.Value(int8(req.GetDyRewardType())),
|
|
)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var newLangMap = make(map[string]struct{})
|
|
var addLangs []*model.RewardLang
|
|
rlm = tran.RewardLang
|
|
for _, v := range req.GetLangs() {
|
|
newLangMap[v.GetMark()] = struct{}{}
|
|
image := utils.Ternary(v.GetImageId() > 0, imgMap[v.GetImageId()], v.GetImgUrl())
|
|
old, ok := oldLangMap[v.GetMark()]
|
|
if ok {
|
|
_, err = rlm.WithContext(s.ctx).Where(rlm.ID.Eq(old.ID)).UpdateSimple(
|
|
rlm.Title.Value(v.GetTitle()),
|
|
rlm.ImgURL.Value(image),
|
|
rlm.IsDefault.Value(int8(v.GetIsDefault())),
|
|
rlm.IsDel.Value(mtype.No),
|
|
rlm.OpenToUse.Value(int8(v.GetOpenToUse())),
|
|
rlm.WebURL.Value(v.GetWebUrl()),
|
|
rlm.AppParam.Value(v.GetAppParam()),
|
|
rlm.ImageID.Value(v.GetImageId()),
|
|
rlm.PcParam.Value(v.GetPcParam()),
|
|
)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
continue
|
|
}
|
|
|
|
addLangs = append(addLangs, withdefault.RewardLang(&model.RewardLang{
|
|
ProjectID: project.ID,
|
|
RewardID: reward.ID,
|
|
Mark: v.GetMark(),
|
|
Title: v.GetTitle(),
|
|
ImgURL: image,
|
|
IsDefault: int8(v.GetIsDefault()),
|
|
OpenToUse: int8(v.GetOpenToUse()),
|
|
WebURL: v.GetWebUrl(),
|
|
AppParam: v.GetAppParam(),
|
|
ImageID: v.GetImageId(),
|
|
PcParam: v.GetPcParam(),
|
|
}))
|
|
}
|
|
|
|
for _, v := range oldLang {
|
|
if _, ok := newLangMap[v.Mark]; !ok {
|
|
_, err = rlm.WithContext(s.ctx).Where(rlm.ID.Eq(v.ID)).UpdateSimple(rlm.IsDel.Value(mtype.Yes))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(addLangs) > 0 {
|
|
err = rlm.WithContext(s.ctx).Create(addLangs...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
*res = pb.UpdateRes{
|
|
Id: reward.ID,
|
|
}
|
|
return
|
|
}
|
|
|
|
// Destroy 删除奖品
|
|
func (s *WReward) Destroy(req *pb.DestroyReq, res *pb.DestroyRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
*res = pb.DestroyRes{}
|
|
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
sids := utils.SplitToInt64(req.GetIds(), ",")
|
|
|
|
m := s.GetDao().Reward
|
|
list, err := m.WithContext(s.ctx).Where(m.ProjectID.Eq(project.ID), m.ID.In(sids...), m.IsDel.Value(mtype.No)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var ids []int64
|
|
for _, v := range list {
|
|
ids = append(ids, v.ID)
|
|
}
|
|
|
|
relateM := s.GetDao().RewardRelated
|
|
|
|
var num []struct {
|
|
RewardId int64
|
|
Num int64
|
|
}
|
|
|
|
err = relateM.WithContext(s.ctx).
|
|
Select(relateM.RewardID, relateM.ID.Count().As("num")).
|
|
Where(relateM.RewardID.In(ids...), relateM.CancelTime.Eq(0)).
|
|
Group(relateM.RewardID).
|
|
Scan(&num)
|
|
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var bindMap = make(map[int64]int64)
|
|
for _, v := range num {
|
|
bindMap[v.RewardId] = v.Num
|
|
}
|
|
|
|
var clearCache []*model.Reward
|
|
var delIds []int64
|
|
for _, v := range list {
|
|
if _, ok := bindMap[v.ID]; !ok {
|
|
delIds = append(delIds, v.ID)
|
|
clearCache = append(clearCache, v)
|
|
} else {
|
|
res.Ids = append(res.Ids, fmt.Sprintf("%d", v.ID))
|
|
}
|
|
}
|
|
|
|
if len(delIds) > 0 {
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.In(delIds...)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
_ = cache.NewReward(s.ctx).Clear(clearCache...)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// UrlList 回调地址列表
|
|
func (s *WReward) UrlList(req *pb.UrlListReq, res *pb.UrlListRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().NotifyURL
|
|
|
|
query := m.WithContext(s.ctx).Where(m.ProjectID.Eq(project.ID), m.IsDel.Eq(mtype.No))
|
|
switch req.GetOrderType() {
|
|
case 1:
|
|
query = query.Order(m.CreatedAt)
|
|
default:
|
|
query = query.Order(m.OldData, m.ID.Desc())
|
|
}
|
|
|
|
list, err := query.Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(list) == 0 {
|
|
return
|
|
}
|
|
|
|
*res = pb.UrlListRes{
|
|
List: make([]*pb.UrlListRes_One, 0, len(list)),
|
|
}
|
|
|
|
var urlIds []int64
|
|
for _, v := range list {
|
|
urlIds = append(urlIds, v.ID)
|
|
}
|
|
|
|
type Num struct {
|
|
UrlId int64
|
|
Num int64
|
|
}
|
|
|
|
var num []*Num
|
|
rewardM := s.GetDao().Reward
|
|
err = rewardM.WithContext(s.ctx).
|
|
Select(rewardM.URLID, rewardM.ID.Count().As("num")).
|
|
Where(rewardM.URLID.In(urlIds...), rewardM.IsDel.Eq(mtype.No)).
|
|
Group(rewardM.URLID).
|
|
Scan(&num)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var numMap = map[int64]int64{}
|
|
for _, v := range num {
|
|
numMap[v.UrlId] = v.Num
|
|
}
|
|
|
|
for _, v := range list {
|
|
headers := v.GetHeaders()
|
|
|
|
one := &pb.UrlListRes_One{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
Url: v.URL,
|
|
Num: numMap[v.ID],
|
|
CreatedAt: v.CreatedAt,
|
|
Headers: make([]*pb.UrlListRes_Header, 0, len(headers)),
|
|
}
|
|
|
|
for _, header := range headers {
|
|
one.Headers = append(one.Headers, &pb.UrlListRes_Header{
|
|
Key: header.Key,
|
|
Mark: header.Mark,
|
|
Val: header.Val,
|
|
})
|
|
}
|
|
|
|
res.List = append(res.List, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// UrlStore 创建回调地址
|
|
func (s *WReward) UrlStore(req *pb.UrlStoreReq, res *pb.UrlStoreRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().NotifyURL
|
|
|
|
url := withdefault.NotifyURL(&model.NotifyURL{
|
|
ProjectID: project.ID,
|
|
Title: req.GetTitle(),
|
|
URL: req.GetUrl(),
|
|
Source: int8(req.GetSource()),
|
|
})
|
|
|
|
url.Headers, _ = jsonm.ToSliceString(req.GetHeaders())
|
|
|
|
err = m.WithContext(s.ctx).Create(url)
|
|
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.UrlStoreRes{
|
|
Id: url.ID,
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// UrlUpdate 更新回调地址
|
|
func (s *WReward) UrlUpdate(req *pb.UrlUpdateReq, res *pb.UrlUpdateRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
c := cache.NewNotifyURL(s.ctx)
|
|
url, err := c.FindById(req.GetId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if url == nil || url.IsDel == mtype.Yes || url.ProjectID != project.ID {
|
|
err = workerr.NotFound("not found url")
|
|
return
|
|
}
|
|
|
|
headers, _ := jsonm.ToSliceString(req.GetHeaders())
|
|
|
|
m := s.GetDao().NotifyURL
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(url.ID)).UpdateSimple(
|
|
m.URL.Value(req.GetUrl()),
|
|
m.Title.Value(req.GetTitle()),
|
|
m.Headers.Value(headers),
|
|
)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
_ = c.Clear(url)
|
|
|
|
*res = pb.UrlUpdateRes{
|
|
Id: url.ID,
|
|
}
|
|
return
|
|
}
|
|
|
|
// UrlDestroy 删除回调地址
|
|
func (s *WReward) UrlDestroy(req *pb.UrlDestroyReq, res *pb.UrlDestroyRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
c := cache.NewNotifyURL(s.ctx)
|
|
url, err := c.FindById(req.GetId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if url == nil || url.IsDel == mtype.Yes || url.ProjectID != project.ID {
|
|
err = workerr.NotFound("not found url")
|
|
return
|
|
}
|
|
|
|
rewardM := s.GetDao().Reward
|
|
bindNum, err := rewardM.WithContext(s.ctx).Where(rewardM.ProjectID.Eq(project.ID), rewardM.URLID.Eq(url.ID), rewardM.IsDel.Eq(mtype.No)).Count()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if bindNum > 0 {
|
|
err = s.BE().VerifyError("can not delete")
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().NotifyURL
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(url.ID)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
_ = c.Clear(url)
|
|
*res = pb.UrlDestroyRes{}
|
|
return
|
|
}
|
|
|
|
// FormList 表单列表
|
|
func (s *WReward) FormList(req *pb.FormListReq, res *pb.FormListRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := finder.Project(s.ctx, req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if project == nil {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().Form
|
|
|
|
var cond = []gen.Condition{
|
|
m.ProjectID.Eq(project.ID),
|
|
m.IsDel.Eq(mtype.No),
|
|
}
|
|
|
|
if req.GetTitle() != "" {
|
|
cond = append(cond, m.Title.Like(utils.DbAllLike(req.GetTitle())))
|
|
}
|
|
|
|
offset, limit := utils.PpDbLo(req.GetPage(), req.GetPerPage())
|
|
list, total, err := m.WithContext(s.ctx).Where(cond...).Order(m.ID.Desc()).FindByPage(offset, limit)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if total == 0 {
|
|
return
|
|
}
|
|
|
|
var formIds []int64
|
|
for _, v := range list {
|
|
formIds = append(formIds, v.ID)
|
|
}
|
|
|
|
type Num struct {
|
|
FormId int64
|
|
Num int64
|
|
}
|
|
|
|
var num []*Num
|
|
rewardM := s.GetDao().Reward
|
|
err = rewardM.WithContext(s.ctx).
|
|
Select(rewardM.FormID, rewardM.ID.Count().As("num")).
|
|
Where(rewardM.FormID.In(formIds...), rewardM.IsDel.Eq(mtype.No)).
|
|
Group(rewardM.FormID).
|
|
Scan(&num)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var numMap = map[int64]int64{}
|
|
for _, v := range num {
|
|
numMap[v.FormId] = v.Num
|
|
}
|
|
|
|
*res = pb.FormListRes{
|
|
List: make([]*pb.FormListRes_One, 0, len(list)),
|
|
Total: total,
|
|
}
|
|
|
|
for _, v := range list {
|
|
items := v.GetItems()
|
|
one := &pb.FormListRes_One{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
CreatedAt: v.CreatedAt,
|
|
Items: make([]*pb.FormListRes_Item, 0, len(items)),
|
|
Num: numMap[v.ID],
|
|
}
|
|
|
|
for _, item := range items {
|
|
one.Items = append(one.Items, &pb.FormListRes_Item{
|
|
Name: item.Name,
|
|
})
|
|
}
|
|
|
|
res.List = append(res.List, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// FormSelect 表单选择
|
|
func (s *WReward) FormSelect(req *pb.FormSelectReq, res *pb.FormSelectRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := finder.Project(s.ctx, req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if project == nil {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().Form
|
|
|
|
list, err := m.WithContext(s.ctx).Where(m.ProjectID.Eq(project.ID), m.IsDel.Eq(mtype.No)).Order(m.ID.Desc()).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(list) == 0 {
|
|
return
|
|
}
|
|
|
|
*res = pb.FormSelectRes{
|
|
List: make([]*pb.FormSelectRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
res.List = append(res.List, &pb.FormSelectRes_One{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// FormStore 创建表单
|
|
func (s *WReward) FormStore(req *pb.FormStoreReq, res *pb.FormStoreRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var items = make([]*mtype.FormItem, 0, len(req.GetItems()))
|
|
for _, item := range req.GetItems() {
|
|
trans := make([]*mtype.FormItemTran, 0, len(item.GetTrans()))
|
|
for _, tran := range item.GetTrans() {
|
|
trans = append(trans, &mtype.FormItemTran{
|
|
Mark: tran.GetMark(),
|
|
Name: tran.GetName(),
|
|
IsDefault: tran.GetIsDefault(),
|
|
})
|
|
}
|
|
|
|
items = append(items, &mtype.FormItem{
|
|
Name: item.GetName(),
|
|
Trans: trans,
|
|
})
|
|
}
|
|
|
|
form := withdefault.Form(&model.Form{
|
|
ProjectID: project.ID,
|
|
Title: req.GetTitle(),
|
|
Items: "",
|
|
})
|
|
form.SetItems(items)
|
|
|
|
m := s.GetDao().Form
|
|
if err = m.WithContext(s.ctx).Create(form); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.FormStoreRes{
|
|
Id: form.ID,
|
|
}
|
|
return
|
|
}
|
|
|
|
// FormUpdate 更新表单
|
|
func (s *WReward) FormUpdate(req *pb.FormUpdateReq, res *pb.FormUpdateRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
cc := cache.NewForm(s.ctx)
|
|
form, err := cc.FindById(req.GetId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if form == nil || form.IsDel == mtype.Yes {
|
|
err = workerr.NotFound("form not found")
|
|
return
|
|
}
|
|
|
|
var items = make([]*mtype.FormItem, 0, len(req.GetItems()))
|
|
for _, item := range req.GetItems() {
|
|
trans := make([]*mtype.FormItemTran, 0, len(item.GetTrans()))
|
|
for _, tran := range item.GetTrans() {
|
|
trans = append(trans, &mtype.FormItemTran{
|
|
Mark: tran.GetMark(),
|
|
Name: tran.GetName(),
|
|
IsDefault: tran.GetIsDefault(),
|
|
})
|
|
}
|
|
|
|
items = append(items, &mtype.FormItem{
|
|
Name: item.GetName(),
|
|
Trans: trans,
|
|
})
|
|
}
|
|
|
|
upItems, _ := jsonm.MarshalToString(items)
|
|
|
|
m := s.GetDao().Form
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(form.ID)).UpdateSimple(m.Title.Value(req.GetTitle()), m.Items.Value(upItems))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
_ = cc.Clear(form)
|
|
|
|
*res = pb.FormUpdateRes{
|
|
Id: form.ID,
|
|
}
|
|
return
|
|
}
|
|
|
|
// FormDestroy 删除表单
|
|
func (s *WReward) FormDestroy(req *pb.FormDestroyReq, res *pb.FormDestroyRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
cc := cache.NewForm(s.ctx)
|
|
form, err := cc.FindById(req.GetId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if form == nil || form.IsDel == mtype.Yes {
|
|
return
|
|
}
|
|
|
|
rewardM := s.GetDao().Reward
|
|
total, err := rewardM.WithContext(s.ctx).Where(rewardM.ProjectID.Eq(project.ID), rewardM.IsDel.Eq(mtype.No), rewardM.FormID.Eq(form.ID)).Count()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if total > 0 {
|
|
err = s.BE().VerifyError("can not delete")
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().Form
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(form.ID)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
_ = cc.Clear(form)
|
|
|
|
*res = pb.FormDestroyRes{
|
|
Id: form.ID,
|
|
}
|
|
return
|
|
}
|
|
|
|
// Urls 回调地址列表
|
|
func (s *WReward) Urls(req *pb.UrlsReq, res *pb.UrlsRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
m := s.GetDao().NotifyURL
|
|
list, err := m.WithContext(s.ctx).Where(m.ProjectID.Eq(req.GetProjectId()), m.ID.In(req.GetIds()...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(list) == 0 {
|
|
return
|
|
}
|
|
|
|
*res = pb.UrlsRes{
|
|
List: make([]*pb.UrlsRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
headers := v.GetHeaders()
|
|
|
|
one := &pb.UrlsRes_One{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
Url: v.URL,
|
|
CreatedAt: v.CreatedAt,
|
|
Headers: make([]*pb.UrlsRes_Header, 0, len(headers)),
|
|
}
|
|
|
|
for _, header := range headers {
|
|
one.Headers = append(one.Headers, &pb.UrlsRes_Header{
|
|
Key: header.Key,
|
|
Mark: header.Mark,
|
|
Val: header.Val,
|
|
})
|
|
}
|
|
|
|
res.List = append(res.List, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Rewards 奖品详情
|
|
func (s *WReward) Rewards(req *pb.RewardsReq, res *pb.RewardsRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
prewards, err := provider.NewRewards(s.ctx, req.GetProjectId(), req.GetIds()...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.RewardsRes{
|
|
List: make([]*pb.RewardsRes_One, 0, len(req.GetIds())),
|
|
}
|
|
|
|
for _, id := range req.GetIds() {
|
|
info, _ := prewards.InfoAutoLang(id, req.GetLangMark())
|
|
|
|
one := &pb.RewardsRes_One{
|
|
Id: info.Id,
|
|
RewardTitle: info.RewardTitle,
|
|
ReceiveType: info.ReceiveType,
|
|
UrlId: info.UrlId,
|
|
Contact: info.Contact,
|
|
KvData: make([]*pb.RewardsRes_KV, 0, len(info.KvData)),
|
|
Lang: &pb.RewardsRes_Lang{
|
|
Mark: info.Mark,
|
|
Title: info.Title,
|
|
ImgUrl: info.ImgUrl,
|
|
IsDefault: info.IsDefault,
|
|
OpenToUse: info.OpenToUse,
|
|
WebUrl: info.WebUrl,
|
|
AppParam: info.AppParam,
|
|
PcParam: info.PcParam,
|
|
},
|
|
FormId: info.FormId,
|
|
DyRewardType: info.DyRewardType,
|
|
}
|
|
|
|
for _, v := range info.KvData {
|
|
one.KvData = append(one.KvData, &pb.RewardsRes_KV{
|
|
Key: v.Key,
|
|
Value: v.Value,
|
|
IsShow: v.IsShow,
|
|
})
|
|
}
|
|
|
|
res.List = append(res.List, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Forms 表单列表
|
|
func (s *WReward) Forms(req *pb.FormsReq, res *pb.FormsRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
m := s.GetDao().Form
|
|
list, err := m.WithContext(s.ctx).Where(m.ProjectID.Eq(req.GetProjectId()), m.ID.In(req.GetIds()...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if len(list) == 0 {
|
|
return
|
|
}
|
|
|
|
*res = pb.FormsRes{
|
|
List: make([]*pb.FormsRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
items := v.GetItems()
|
|
one := &pb.FormsRes_One{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
CreatedAt: v.CreatedAt,
|
|
Items: make([]*pb.FormsRes_Item, 0, len(items)),
|
|
}
|
|
|
|
for _, item := range items {
|
|
one.Items = append(one.Items, &pb.FormsRes_Item{
|
|
Name: item.Name,
|
|
})
|
|
}
|
|
|
|
res.List = append(res.List, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// RelateReward 关联奖品
|
|
func (s *WReward) RelateReward(req *pb.RelateRewardReq, res *pb.RelateRewardRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
m := s.GetDao().RewardRelated
|
|
list, err := m.WithContext(s.ctx).Where(m.RelateID.Eq(req.GetRelateId()), m.RelateTable.Eq(req.GetRelateTable())).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var oldMap = make(map[int64]*model.RewardRelated)
|
|
for _, v := range list {
|
|
oldMap[v.RewardID] = v
|
|
}
|
|
|
|
var reRelate []int64
|
|
var relates []*model.RewardRelated
|
|
for _, id := range req.GetRewardIds() {
|
|
old, ok := oldMap[id]
|
|
if !ok {
|
|
relates = append(relates, withdefault.RewardRelated(&model.RewardRelated{
|
|
RewardID: id,
|
|
RelateID: req.GetRelateId(),
|
|
RelateTable: req.GetRelateTable(),
|
|
}))
|
|
|
|
continue
|
|
}
|
|
|
|
delete(oldMap, old.RewardID)
|
|
|
|
if old.CancelTime == 0 {
|
|
continue
|
|
}
|
|
|
|
reRelate = append(reRelate, old.ID)
|
|
}
|
|
|
|
if len(relates) > 0 {
|
|
if err = m.WithContext(s.ctx).Create(relates...); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
if len(reRelate) > 0 {
|
|
idGroup := utils.Groups[int64](reRelate, 200)
|
|
for _, ids := range idGroup {
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.In(ids...)).UpdateSimple(m.CancelTime.Value(0))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
var cancelIds []int64
|
|
for _, related := range oldMap {
|
|
cancelIds = append(cancelIds, related.ID)
|
|
}
|
|
|
|
if len(cancelIds) > 0 {
|
|
idGroup := utils.Groups[int64](cancelIds, 200)
|
|
for _, ids := range idGroup {
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.In(ids...)).UpdateSimple(m.CancelTime.Value(time.Now().Unix()))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
*res = pb.RelateRewardRes{}
|
|
return
|
|
}
|
|
|
|
// PushReward 奖品推送
|
|
func (s *WReward) PushReward(req *pb.PushRewardReq, res *pb.PushRewardRes) (err error) {
|
|
defer s.checkErr()
|
|
reward, err := cache.NewReward(s.ctx).FindById(req.GetRewardId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if reward == nil || reward.ReceiveType != mtype.RewardReceiveTypeNotify {
|
|
return
|
|
}
|
|
|
|
rp, err := s2s.NewReward(s.ctx, reward)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
push, err := rp.CreatePush(
|
|
req.GetSource(),
|
|
req.GetSourceId(),
|
|
req.GetSourceSecondId(),
|
|
req.GetRelateId(),
|
|
int8(req.GetSync()),
|
|
mtype.RewardPushParam{
|
|
SourceHashId: req.GetSourceHashId(),
|
|
RelateHashId: req.GetRelateHashId(),
|
|
UserId: req.GetUserId(),
|
|
UserPlatform: req.GetUserPlatform(),
|
|
ParentUserId: req.GetParentUserId(),
|
|
ParentUserPlatform: req.GetParentPlatform(),
|
|
Num: req.GetNum(),
|
|
Lang: req.GetLang(),
|
|
Title: req.GetTitle(),
|
|
RewardType: req.GetRewardType(),
|
|
RewardId: fmt.Sprintf("%d", req.GetRelateId()),
|
|
CampaignId: req.GetCampaignId(),
|
|
},
|
|
)
|
|
|
|
if err != nil || push == nil {
|
|
return
|
|
}
|
|
|
|
if req.GetSync() == mtype.Yes {
|
|
push, err = rp.Send(push, false)
|
|
if err != nil || push == nil {
|
|
return
|
|
}
|
|
} else {
|
|
rp.Async(push, 0)
|
|
}
|
|
|
|
*res = pb.PushRewardRes{
|
|
TaskId: push.ID,
|
|
RewardVal: push.RespData,
|
|
Status: int32(push.Status),
|
|
FailType: push.FailType,
|
|
FailMsg: push.FailMsg,
|
|
}
|
|
return
|
|
}
|
|
|
|
// RewardIds 查询奖品id
|
|
func (s *WReward) RewardIds(req *pb.RewardIdsReq, res *pb.RewardIdsRes) (err error) {
|
|
defer s.checkErr()
|
|
m := s.GetDao().Reward
|
|
var cond = []gen.Condition{
|
|
m.ProjectID.Eq(req.GetProjectId()),
|
|
}
|
|
|
|
if req.GetRewardTitle() != "" {
|
|
cond = append(cond, m.RewardTitle.Like(utils.DbAllLike(req.GetRewardTitle())))
|
|
}
|
|
|
|
var ids []int64
|
|
err = m.WithContext(s.ctx).Where(cond...).Pluck(m.ID, &ids)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
*res = pb.RewardIdsRes{
|
|
Ids: ids,
|
|
}
|
|
return
|
|
}
|