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.
120 lines
2.4 KiB
Go
120 lines
2.4 KiB
Go
package mall
|
|
|
|
import (
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/service/provider"
|
|
"joybuywork/internal/service/provider/malls"
|
|
"joybuywork/internal/service/provider/stocks"
|
|
"joybuywork/internal/utils"
|
|
"joybuywork/internal/utils/logic"
|
|
pb "joybuywork/proto/go_proto/w_mall"
|
|
)
|
|
|
|
type ItemList struct {
|
|
logic.Logic
|
|
|
|
Req *pb.ItemListReq
|
|
Res *pb.ItemListRes
|
|
}
|
|
|
|
func (s *ItemList) Run() (err error) {
|
|
return logic.Run(s)
|
|
}
|
|
|
|
func (s *ItemList) Exec() (err error) {
|
|
return s.list()
|
|
}
|
|
|
|
func (s *ItemList) list() (err error) {
|
|
mall, err := malls.NewMall(s.Ctx, s.Req.GetMallId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var list []*model.RedeemMallItem
|
|
switch s.Req.GetStatus() {
|
|
case 1:
|
|
list, err = mall.UpItems()
|
|
if err != nil {
|
|
return
|
|
}
|
|
case 2:
|
|
list, err = mall.DownItems()
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
var rewardMap = make(map[int64]struct{})
|
|
var rewardIds []int64
|
|
var ids []int64
|
|
for _, v := range list {
|
|
if v.UseStock == -1 {
|
|
ids = append(ids, v.ID)
|
|
}
|
|
|
|
if _, ok := rewardMap[v.RewardID]; !ok {
|
|
rewardMap[v.RewardID] = struct{}{}
|
|
rewardIds = append(rewardIds, v.RewardID)
|
|
}
|
|
}
|
|
|
|
useStockMap, err := s._useStock(ids)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
preward, err := provider.NewRewards(s.Ctx, mall.GetMall().ProjectID, rewardIds...)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
s.Res.List = make([]*pb.ItemListRes_One, 0, len(list))
|
|
|
|
for _, v := range list {
|
|
info, _ := preward.InfoAutoLang(v.RewardID)
|
|
s.Res.List = append(s.Res.List, &pb.ItemListRes_One{
|
|
Id: v.ID,
|
|
RewardId: v.RewardID,
|
|
Title: info.RewardTitle,
|
|
ImgUrl: info.ImgUrl,
|
|
Stock: v.Stock,
|
|
Remain: utils.Ternary[int64](v.UseStock == -1, v.Stock-useStockMap[v.ID], v.Stock-v.UseStock),
|
|
UpType: int32(v.UpType),
|
|
UpCustom: v.UpCustom,
|
|
UpAt: v.UpAt,
|
|
UpFrom: v.UpFrom,
|
|
UpShow: v.GetUpShow(),
|
|
DownType: int32(v.DownType),
|
|
DownCustom: v.DownCustom,
|
|
DownAt: v.DownAt,
|
|
DownFrom: v.DownFrom,
|
|
DownShow: v.GetDownShow(),
|
|
Status: v.GetStatus(),
|
|
CoinNum: v.CoinNum,
|
|
UseStock: utils.Ternary[int64](v.UseStock == -1, useStockMap[v.ID], v.UseStock),
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *ItemList) _useStock(ids []int64) (data map[int64]int64, err error) {
|
|
data = make(map[int64]int64)
|
|
if len(ids) == 0 {
|
|
return
|
|
}
|
|
|
|
stock, err := stocks.NewMallItem(s.Ctx, ids...)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
data, err = stock.AllUseStock()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|