mall项目-购物车模块

mall项目-购物车模块

一、模块位置与文件结构

ControllerOmsCartItemController.javamall-portal/.../controller/
Service 接口OmsCartItemService.javamall-portal/.../service/
Service 实现OmsCartItemServiceImpl.javamall-portal/.../service/impl/
实体OmsCartItem.javamall-mbg/.../model/
MapperOmsCartItemMapper.java + .xmlmall-mbg/.../mapper/
扩展 DomainCartProduct.java、CartPromotionItem.java、PromotionProduct.javamall-portal/.../domain/

二、数据模型(oms_cart_item 表)

idbigint主键
product_idbigint商品 ID(关联 pms_product)
product_sku_idbigintSKU ID(关联 pms_sku_stock)
member_idbigint会员 ID(关联 ums_member,归属用户)
quantityint购买数量
pricedecimal(10,2)添加时的快照价格
product_picvarchar商品主图(反范式冗余)
product_namevarchar商品名称(反范式冗余)
product_attrvarchar销售属性 JSON,如 [{"key":"颜色","value":"红色"}]
delete_statusint软删除标志:0=正常,1=已删除

设计特点:
反范式冗余:product_name、product_pic、product_brand 等字段冗余存储,避免查询时频繁 JOIN
软删除:物理记录永远保留,delete_status=1 表示删除
价格快照:price 在加入购物车时记录,不随商品价格变动而更新

三、API 接口一览

POST/cart/add添加商品到购物车
GET/cart/list获取购物车列表
GET/cart/list/promotion获取购物车列表(含促销信息)
GET/cart/update/quantity修改购物车商品数量
GET/cart/getProduct/{productId}获取商品规格(用于重新选择规格)
POST/cart/update/attr修改购物车商品规格
POST/cart/delete删除指定购物车商品
POST/cart/clear清空购物车

四、核心业务逻辑

1. 添加商品(add)

查询当前会员的购物车中是否存在 相同 productId + productSkuId 且未删除的记录
如果存在:累加数量(quantity = quantity + 1)
如果不存在:新增一条记录,冗余写入商品名称、图片、品牌等信息
整个操作在 @Transactional 事务中执行

2. 促销计算(OmsPromotionService.calcCartPromotion)

按 productId 分组,对每个商品计算最优促销
支持三种促销类型:
单品促销(promotionType=1):使用 SKU 上的 promotionPrice
阶梯打折(promotionType=3):如 "买3件打8折",基于 pms_product_ladder
满减优惠(promotionType=4):如 "满100减20",基于 pms_product_full_reduction
结果为 CartPromotionItem,包含 promotionMessage(促销描述)、reduceAmount(优惠金额)、realStock(实际库存)等信息

3. 修改规格(updateAttr)

软删除旧的购物车记录(deleteStatus=1)
清空 ID 后重新调用 add() 插入新记录
整个操作在 @Transactional 中执行,确保原子性

4. 成员数据隔离

所有操作均通过 UmsMemberService.getCurrentMember() 获取当前登录会员
每个方法都限定 memberId,用户只能操作自己的购物车数据

五、模块依赖关系

OmsCartItemController

OmsCartItemServiceImpl
├──→ OmsCartItemMapper (oms_cart_item 表的 CRUD)
├──→ UmsMemberService (获取当前认证会员)
├──→ PortalProductDao (查询商品详情 + SKU + 属性)
└──→ OmsPromotionService (促销优惠计算)
└──→ PortalProductDao (查询促销相关信息: ladder, full_reduction)
涉及的数据库表:
oms_cart_item — 购物车主表
pms_product / pms_sku_stock — 商品 / SKU 库存
pms_product_ladder / pms_product_full_reduction — 阶梯价 / 满减规则
ums_member — 会员用户

六、总结

购物车模块采用标准的 Controller → Service (接口+实现) → Mapper 分层架构,属于典型的 Spring Boot 单体后端实现。核心特点是:
1. 反范式设计减少 JOIN 查询
2. 软删除保障数据安全
3. 价格快照确保下单时价格一致
4. 与促销模块深度集成,支持单品促销、阶梯折扣、满减三种优惠方式