2025-09-02 06:30:21 +00:00
|
|
|
package model
|
|
|
|
|
2025-09-11 10:06:20 +00:00
|
|
|
import "github.com/codinl/go-logger"
|
|
|
|
|
|
|
|
// gen:qs
|
|
|
|
//
|
2025-09-02 06:30:21 +00:00
|
|
|
//go:generate goqueryset -in mall_cart.go
|
|
|
|
type MallCart struct {
|
|
|
|
Model
|
|
|
|
|
2025-09-11 10:06:20 +00:00
|
|
|
Uid uint64 `json:"uid" gorm:"index"`
|
|
|
|
GoodsId uint32 `json:"goods_id"` // 商品id
|
|
|
|
Count uint32 `json:"count"` // 数量
|
|
|
|
|
|
|
|
GoodsInfo Goods `json:"goods_info" gorm:"-"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type MallCartAddReq struct {
|
|
|
|
GoodsId uint32 `json:"goods_id"`
|
|
|
|
AddType uint32 `json:"add_type"` // 1-加 2-减
|
|
|
|
}
|
|
|
|
|
|
|
|
type MallCartListReq struct {
|
|
|
|
PageNum int `json:"page_num"`
|
|
|
|
PageSize int `json:"page_size"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type MallCartListResp struct {
|
|
|
|
List []MallCart `json:"list"`
|
|
|
|
Total int `json:"total"`
|
|
|
|
PageNum int `json:"page_num"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type MallCartDel struct {
|
|
|
|
MallCartIds []uint32 `json:"mall_cart_ids"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// MallCartList 封装商城购物车列表查询
|
|
|
|
func MallCartList(uid uint32, pageNum, pageSize int) (*MallCartListResp, error) {
|
|
|
|
resp := &MallCartListResp{
|
|
|
|
PageNum: pageNum,
|
|
|
|
List: []MallCart{}, // 初始化为空列表,避免返回 nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// 默认分页参数
|
|
|
|
page := pageNum - 1
|
|
|
|
if page < 0 {
|
|
|
|
page = 0
|
|
|
|
}
|
|
|
|
if pageSize <= 0 {
|
|
|
|
pageSize = 10
|
|
|
|
}
|
|
|
|
|
|
|
|
qs := NewMallCartQuerySet(DB).UidEq(uint64(uid))
|
|
|
|
|
|
|
|
// 获取总数
|
|
|
|
count, err := qs.Count()
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("err:", err)
|
|
|
|
return resp, err
|
|
|
|
}
|
|
|
|
if count == 0 {
|
|
|
|
resp.Total = 0
|
|
|
|
return resp, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// 计算总页数
|
|
|
|
resp.Total = (count + pageSize - 1) / pageSize // 向上取整
|
|
|
|
|
|
|
|
// 分页查询
|
|
|
|
var mallCarts []MallCart
|
|
|
|
err = qs.OrderDescByID().Offset(page * pageSize).Limit(pageSize).All(&mallCarts)
|
|
|
|
if err != nil && err != RecordNotFound {
|
|
|
|
logger.Error("err:", err)
|
|
|
|
return resp, err
|
|
|
|
}
|
|
|
|
if len(mallCarts) == 0 {
|
|
|
|
return resp, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// 收集商品 ID
|
|
|
|
ids := make([]uint32, 0, len(mallCarts))
|
|
|
|
for _, v := range mallCarts {
|
|
|
|
ids = append(ids, v.GoodsId)
|
|
|
|
}
|
|
|
|
|
|
|
|
// 查询商品信息(避免 ids 为空)
|
|
|
|
if len(ids) > 0 {
|
|
|
|
var goodsList []Goods
|
|
|
|
err = NewGoodsQuerySet(DB).GoodsIdIn(ids...).All(&goodsList)
|
|
|
|
if err != nil && err != RecordNotFound {
|
|
|
|
logger.Error("err:", err)
|
|
|
|
return resp, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// 建立 map
|
|
|
|
goodsMap := make(map[uint32]Goods, len(goodsList))
|
|
|
|
for _, g := range goodsList {
|
|
|
|
goodsMap[g.GoodsId] = g
|
|
|
|
}
|
|
|
|
|
|
|
|
// 绑定商品信息
|
|
|
|
for i := range mallCarts {
|
|
|
|
if g, ok := goodsMap[mallCarts[i].GoodsId]; ok {
|
|
|
|
mallCarts[i].GoodsInfo = g
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2025-09-02 06:30:21 +00:00
|
|
|
|
2025-09-11 10:06:20 +00:00
|
|
|
resp.List = mallCarts
|
|
|
|
return resp, nil
|
2025-09-02 06:30:21 +00:00
|
|
|
}
|