1、商城列表接口优化;

2、租赁订单排序优化;
3、新增商城购物车接口(待完善);
This commit is contained in:
chenlin 2025-09-02 14:30:21 +08:00
parent c1803207bf
commit 8c0cd8e574
5 changed files with 89 additions and 12 deletions

View File

@ -17,6 +17,14 @@ import (
"time" "time"
) )
// MallGoodsList 商品列表
// @Summary 商品列表
// @Tags 商城, V1.4.5
// @Produce json
// @Accept json
// @Param request body model.GoodsListReq true "新建商品列表模型"
// @Success 200 {object} model.GoodsListResp
// @Router /api/v1/mall/goods/list [post]
func MallGoodsList(c *gin.Context) { func MallGoodsList(c *gin.Context) {
req := model.GoodsListReq{} req := model.GoodsListReq{}
if err := c.ShouldBindJSON(&req); err != nil { if err := c.ShouldBindJSON(&req); err != nil {
@ -49,10 +57,10 @@ func MallGoodsList(c *gin.Context) {
} }
} }
ret := map[string]interface{}{ ret := model.GoodsListResp{
"list": list, List: list,
"cur_page": req.PageIdx, CurPage: req.PageIdx,
"total_page": total, TotalPage: total,
} }
RespOK(c, ret) RespOK(c, ret)

View File

@ -2052,7 +2052,7 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
} }
effectiveStoreListStr := fmt.Sprintf("(%s)", strings.Trim(strings.Join(strings.Fields(fmt.Sprint(effectiveStoreList)), ","), "[]")) effectiveStoreListStr := fmt.Sprintf("(%s)", strings.Trim(strings.Join(strings.Fields(fmt.Sprint(effectiveStoreList)), ","), "[]"))
if homeCategoryInfo.AllFlag == 1 && homeCategoryInfo.OrderFlag != 1 { if homeCategoryInfo.AllFlag == 1 {
if storeId != 0 { if storeId != 0 {
var cardStocks []GameCardGoodsStock var cardStocks []GameCardGoodsStock
cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id=%d AND a.store_id IN %s AND a.rent_stock>0 ORDER BY b.id ASC;", storeId, effectiveStoreListStr) cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id=%d AND a.store_id IN %s AND a.rent_stock>0 ORDER BY b.id ASC;", storeId, effectiveStoreListStr)

View File

@ -79,7 +79,7 @@ type Goods struct {
VersionId uint64 `json:"version_id"` // 乐观锁 VersionId uint64 `json:"version_id"` // 乐观锁
ShowDiscount int8 `json:"show_discount"` // ShowDiscount int8 `json:"show_discount"` //
GoodsAccountNum uint32 `json:"goods_account_num"` // 收款账户编号 GoodsAccountNum uint32 `json:"goods_account_num"` // 收款账户编号
//Stock uint32 `json:"stock"` // 库存 ErpStock uint32 `json:"erp_stock" gorm:"-"` // erp库存
GoodsCat *GoodsCat `json:"goods_cat" gorm:"-"` GoodsCat *GoodsCat `json:"goods_cat" gorm:"-"`
GoodsDiscount *GoodsDiscount `json:"goods_discount" gorm:"-"` GoodsDiscount *GoodsDiscount `json:"goods_discount" gorm:"-"`
@ -203,6 +203,12 @@ type GoodsListReq struct {
PageSize int `json:"page_size"` PageSize int `json:"page_size"`
} }
type GoodsListResp struct {
List []Goods `json:"list"`
CurPage int `json:"cur_page"`
TotalPage int `json:"total_page"`
}
func (m *GoodsListReq) GoodsList() ([]Goods, int, error) { func (m *GoodsListReq) GoodsList() ([]Goods, int, error) {
page := m.PageIdx - 1 page := m.PageIdx - 1
if page < 0 { if page < 0 {
@ -248,6 +254,51 @@ func (m *GoodsListReq) GoodsList() ([]Goods, int, error) {
return nil, 0, err return nil, 0, err
} }
// 处理ERP库存批量查询
erpIDs := make([]uint32, 0)
for _, g := range goodsList {
if g.ErpCommodityId != 0 {
erpIDs = append(erpIDs, g.ErpCommodityId)
}
}
if len(erpIDs) > 0 {
type ErpStockData struct {
ErpCommodityId uint32
Stock uint32
}
var stocks []ErpStockData
db := DB.Table("erp_stock_commodity").
Select("erp_commodity_id, SUM(count) AS stock").
Where("state = ?", 1).
Group("erp_commodity_id")
// 根据数量区分使用 = 或 IN
if len(erpIDs) == 1 {
db = db.Where("erp_commodity_id = ?", erpIDs[0])
} else {
db = db.Where("erp_commodity_id IN ?", erpIDs)
}
if err := db.Find(&stocks).Error; err != nil {
logger.Error("err:", err)
return nil, 0, err
}
// 构建映射
stockMap := make(map[uint32]uint32, len(stocks))
for _, s := range stocks {
stockMap[s.ErpCommodityId] = s.Stock
}
// 给商品赋值库存
for i := range goodsList {
if goodsList[i].ErpCommodityId != 0 {
goodsList[i].ErpStock = stockMap[goodsList[i].ErpCommodityId]
}
}
}
return goodsList, totalPage, nil return goodsList, totalPage, nil
} }

12
model/mall_cart.go Normal file
View File

@ -0,0 +1,12 @@
package model
//go:generate goqueryset -in mall_cart.go
type MallCart struct {
Model
Uid uint64 `json:"uid" gorm:"index"`
GameCardId uint64 `json:"game_card_id"` // 游戏卡id
Count uint32 `json:"count"` // 数量
GameCard GameCard `json:"game_card" gorm:"-"`
}

View File

@ -206,14 +206,21 @@ func ConfigAppRouter(r gin.IRouter) {
mall.POST("order/refund_cancel", controller.MallOrderRefundCancel) // 订单-退货-取消 mall.POST("order/refund_cancel", controller.MallOrderRefundCancel) // 订单-退货-取消
mall.POST("order/refund_send", controller.MallOrderRefundSend) // 订单-退货-填物流 mall.POST("order/refund_send", controller.MallOrderRefundSend) // 订单-退货-填物流
} }
shoppingCart := api.Group("shopping_cart") // 心愿单/购物车
{
mallCart := api.Group("mall_cart") // 商城购物车
{
mallCart.Use(auth.UserAccessAuth)
mallCart.POST("list", controller.ShoppingCartList) // 商城购物车列表
mallCart.POST("add", controller.ShoppingCartAdd) // 添加商品
mallCart.POST("del", controller.ShoppingCartDel) // 删除商品
}
shoppingCart := api.Group("shopping_cart") // 租卡心愿单/购物车
{
shoppingCart.Use(auth.UserAccessAuth) shoppingCart.Use(auth.UserAccessAuth)
shoppingCart.POST("list", controller.ShoppingCartList) // 详情 shoppingCart.POST("list", controller.ShoppingCartList) // 详情
shoppingCart.POST("add", controller.ShoppingCartAdd) // shoppingCart.POST("add", controller.ShoppingCartAdd) // 添加商品
shoppingCart.POST("del", controller.ShoppingCartDel) // shoppingCart.POST("del", controller.ShoppingCartDel) // 删除商品
} }
shareCard := api.Group("share_card") shareCard := api.Group("share_card")
{ {
@ -322,5 +329,4 @@ func ConfigAppRouter(r gin.IRouter) {
lottery.POST("/today_draw_count", controller.GetTodayDrawCount) // 查询用户当天抽奖次数 lottery.POST("/today_draw_count", controller.GetTodayDrawCount) // 查询用户当天抽奖次数
lottery.POST("/prize_order/detail", controller.GetLotteryPrizeOrderDetail) // 查询抽奖订单详情 lottery.POST("/prize_order/detail", controller.GetLotteryPrizeOrderDetail) // 查询抽奖订单详情
} }
} }