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 }