Skip to content

商城购物车

购物车是 Mall 交易链路中连接“商品选择”和“订单结算”的轻量模块。RuoYi Office 当前购物车能力主要面向会员端 / App 端接口,管理端不会直接维护用户购物车,但会在「交易配置」和「交易订单」页面提供文档入口,方便开发者理解购物车如何影响结算和下单。

本页基于当前 AppCartControllerCartServiceImpltrade_cart 数据对象整理,不复用上游截图。

模块边界

路径 / 接口
后端模块ruoyi-office/yudao-module-mall/yudao-module-trade-server
App 控制器controller/app/cart/AppCartController.java
服务实现service/cart/CartServiceImpl.java
数据对象dal/dataobject/cart/CartDO.java
数据表trade_cart
接口前缀/app-api/trade/cart 或经网关映射后的 App 端路径
管理端引用views/mall/trade/config/index.vueviews/mall/trade/order/index.vue 的 DocAlert

购物车链路

购物车只保存用户选择的 SKU、数量和选中状态。价格、商品上下架、库存、规格展示等信息在查询列表时通过 Product 模块实时组合,避免购物车中长期保存过期商品快照。

接口清单

AppCartController 提供的接口如下:

动作方法与路径说明
加入购物车POST /trade/cart/add根据 skuIdcount 新增购物项;同 SKU 已存在时累加数量并设为选中
修改数量PUT /trade/cart/update-count校验购物项归属当前用户,并重新校验 SKU 库存
修改选中PUT /trade/cart/update-selected批量修改购物项选中/取消选中状态
重置规格PUT /trade/cart/reset删除原购物项,再切换到新的 SKU 和数量
删除商品DELETE /trade/cart/delete按购物车记录 ID 批量删除
查询数量GET /trade/cart/get-count返回当前用户购物车商品总数量
查询列表GET /trade/cart/list返回有效和无效购物项列表

注意:购物车接口均基于 getLoginUserId() 获取当前会员用户,二次开发时不要从前端传入 userId 作为可信身份。

数据模型

CartDO 对应 trade_cart,核心字段较少:

字段含义说明
id购物车记录编号删除、改数量、重置规格均使用该编号
userId会员用户编号关联会员用户,所有查询都应带当前用户边界
spuId商品 SPU 编号用于查询商品主信息;SPU 删除后购物项会被延迟删除
skuId商品 SKU 编号用于库存、价格和规格查询
count购买数量加购时累加,更新时重新校验库存
selected是否选中结算页通常只处理选中的购物项

购物车不直接保存商品名称、图片、规格、价格等展示字段,这些字段在 getCartList 时由 ProductSpuApiProductSkuApi 组合得到。

关键校验

CartServiceImpl 中最重要的校验集中在 checkProductSku

  1. SKU 是否存在。
  2. 购买数量是否超过库存。
  3. 通过 SKU 找到所属 SPU,用于新增购物项。

查询购物车列表时还会加载 SPU/SKU 列表,并对已删除的 SPU 做延迟清理:如果商品 SPU 已不存在,系统会删除对应购物车记录,避免用户继续结算失效商品。

和交易配置、订单的关系

购物车本身不负责订单价格计算,但它会影响结算页传给交易订单的商品范围和数量。

模块关系
Product 商品购物车依赖 SPU/SKU 查询名称、图片、规格、价格和库存
Trade Config 交易配置配送、售后、分销等规则会在结算/下单阶段影响最终订单
Trade Order 交易订单选中的购物项进入结算后生成订单项快照
Promotion 营销当前服务注释中已提示购物车价格计算仍有扩展空间,复杂营销建议在结算阶段统一计算

因此排查“购物车价格不等于订单价格”时,应先确认订单是否经过优惠券、满减、会员价、积分、运费和调价等结算逻辑,而不是只看 trade_cart

二次开发建议

  1. 新增购物车展示字段:优先从 Product API 组合,不建议把商品快照冗余到 trade_cart
  2. 新增选中规则:保持按当前登录用户过滤,避免跨用户批量修改。
  3. 新增营销价格:建议在结算页或订单创建服务统一计算,避免购物车列表和订单金额出现两套规则。
  4. 新增库存占用:当前购物车只校验库存,不锁库存;如要提前锁库存,需要和订单超时关闭、库存释放一起设计。
  5. 新增清理任务:可按长期未更新、SPU/SKU 失效等条件定期清理,但要注意不要删除用户近期仍可能结算的购物项。

排查清单

现象优先检查
加购失败SKU 是否存在、库存是否足够、用户是否登录
修改数量失败购物车记录是否属于当前用户、数量是否超过库存
列表商品消失SPU 是否被删除或下架,getCartList 是否触发延迟删除
数量角标不准确get-count 当前按用户汇总数量,是否需要只统计选中项需结合产品需求判断
结算金额和列表不同结算阶段是否叠加营销、会员价、优惠券、运费、积分等规则

下一步

购物车进入订单后,请继续阅读 商城交易订单;发生退款或退货时,请阅读 售后退款

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版