You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.1 KiB
76 lines
2.1 KiB
package pay
|
|
|
|
import (
|
|
"yunyan/comm"
|
|
"yunyan/lego/sys/log"
|
|
"yunyan/pb"
|
|
)
|
|
|
|
// @Summary 获取商品列表
|
|
// @Description 获取商品列表。后台已配置上架商品时返回应用商品配置,否则返回业务库旧商品。
|
|
// @Tags Pay
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Security BearerAuth
|
|
// @Param order body pb.PayGetGoodssReq true "获取商品列表"
|
|
// @Success 200 {object} comm.HttpResult{data=pb.PayGetGoodssResp} "商品列表"
|
|
// @Router /api/home/pay_getgoodss [post]
|
|
func (this *apiComp) GetGoodss(session comm.IUserSession, req *pb.PayGetGoodssReq) (resp *pb.PayGetGoodssResp, errdata *pb.ErrorData) {
|
|
appGoods, err := this.module.model.appGoodss()
|
|
if err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError,
|
|
Message: err.Error(),
|
|
}
|
|
this.module.Error("GetGoodss 读后台商品失败!",
|
|
log.Field{Key: "uid", Value: session.GetUserId()},
|
|
log.Field{Key: "err", Value: err.Error()})
|
|
return
|
|
}
|
|
var legacy []*pb.DBGoods
|
|
if !hasEnabledAppGoods(appGoods) {
|
|
legacy, err = this.module.model.goodss()
|
|
if err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError,
|
|
Message: err.Error(),
|
|
}
|
|
this.module.Error("GetGoodss 失败!", log.Field{Key: "uid", Value: session.GetUserId()}, log.Field{Key: "err", Value: err.Error()})
|
|
return
|
|
}
|
|
}
|
|
resp = &pb.PayGetGoodssResp{
|
|
Goodss: listedGoods(appGoods, legacy),
|
|
}
|
|
return
|
|
}
|
|
|
|
// listedGoods 是客户端充值页实际拿到的列表。
|
|
// 后台「应用商品配置」有上架商品时只用那一份(与 pay_getgoodssv2 同源);
|
|
// 一条上架的都没有时,退回业务库 goods,避免还没迁商品的应用充值页被清空。
|
|
func listedGoods(app []*comm.AppGoods, legacy []*pb.DBGoods) []*pb.DBGoods {
|
|
out := make([]*pb.DBGoods, 0)
|
|
for _, v := range app {
|
|
if v != nil && v.Enable {
|
|
out = append(out, dbGoodsOfAppGoods(v))
|
|
}
|
|
}
|
|
if len(out) > 0 {
|
|
return out
|
|
}
|
|
for _, v := range legacy {
|
|
if v != nil && v.Enable {
|
|
out = append(out, v)
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func hasEnabledAppGoods(app []*comm.AppGoods) bool {
|
|
for _, v := range app {
|
|
if v != nil && v.Enable {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|