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

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
}