菜单

购物车

相关源文件

目的与范围

本文档详细介绍了商城电商平台内的购物车系统。它涵盖了商品如何添加到购物车、购物车商品如何管理、促销活动如何应用于购物车商品,以及购物车如何与订单处理系统集成。有关订单处理本身的信息,请参阅订单处理

概述

购物车系统允许用户添加商品、更新数量、修改商品规格、查看包含促销信息的购物车内容,并进入结算流程。对于已登录用户,购物车会跨会话持久化,并实施逻辑删除以维护订单历史记录。

来源:mall-portal/src/main/java/com/macro/mall/portal/service/OmsCartItemService.java mall-portal/src/main/java/com/macro/mall/portal/controller/OmsCartItemController.java

系统架构

组件图

来源:mall-portal/src/main/java/com/macro/mall/portal/controller/OmsCartItemController.java mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsCartItemServiceImpl.java

数据模型

关键实体

OmsCartItem

代表用户购物车中商品的实体。

字段类型描述
id长期主键
productId长期商品 ID 引用
productSkuId长期商品 SKU ID 引用
memberId长期拥有此购物车商品的会员(用户)ID
quantity整型此商品的数量
priceBigDecimal添加时商品的价格
productPic字符串产品图片 URL
productName字符串产品名称
productSubTitle字符串商品副标题/描述
productSkuCode字符串SKU 编码
memberNickname字符串会员昵称
createDate日期商品添加到购物车的日期
modifyDate日期商品最后修改日期
deleteStatus整型逻辑删除标志(0=活动,1=已删除)
productCategoryId长期产品类别 ID
productBrand字符串产品品牌
productSn字符串产品序列号
productAttr字符串JSON 格式的产品属性

CartPromotionItem

OmsCartItem 的扩展,包含促销信息。

字段类型描述
(所有 OmsCartItem 字段)
promotionInfo字符串适用促销的描述
promotionType整型应用的促销类型
reduceAmountBigDecimal价格减少金额
realStock整型实际可用库存
integration整型奖励的积分
growth整型奖励的成长值

CartProduct

代表购物车中具有其属性和 SKU 信息的商品的域对象。

来源:mall-portal/src/main/java/com/macro/mall/portal/domain/CartProduct.java mall-portal/src/main/java/com/macro/mall/portal/domain/CartPromotionItem.java

工作流图

添加商品到购物车

来源:mall-portal/src/main/java/com/macro/mall/portal/controller/OmsCartItemController.java32-41 mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsCartItemServiceImpl.java38-55

列出包含促销信息的购物车商品

来源:mall-portal/src/main/java/com/macro/mall/portal/controller/OmsCartItemController.java51-57 mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsCartItemServiceImpl.java81-92

主要功能

1. 购物车商品管理

购物车系统提供全面的购物车商品 CRUD 操作

  • 添加到购物车:将商品添加到购物车,如果已存在则更新数量
  • 列出购物车商品:检索会员的所有活动购物车商品
  • 更新数量:修改特定购物车商品的数量
  • 更新属性:更改商品在购物车中的属性/规格
  • 删除商品:逻辑删除指定的购物车商品
  • 清空购物车:逻辑删除会员的所有购物车商品

来源:mall-portal/src/main/java/com/macro/mall/portal/service/OmsCartItemService.java mall-portal/src/main/java/com/macro/mall/portal/controller/OmsCartItemController.java

2. 促销集成

购物车与促销系统集成,以应用折扣和特别优惠

  • 购物车商品可检索并应用促销信息
  • 促销计算基于购物车当前的状态
  • 促销类型包括商品阶梯(数量折扣)和满减(消费 X 获得 Y 折扣)

OmsPromotionService.calcCartPromotion() 方法将普通购物车商品转换为包含促销详情(如减少金额和促销描述)的 CartPromotionItem 对象。

来源:mall-portal/src/main/java/com/macro/mall/portal/service/OmsPromotionService.java mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsCartItemServiceImpl.java81-92

3. 商品规格管理

购物车支持选择和修改商品规格(SKU)

  • 用户可以获取购物车中商品的属性和可用 SKU
  • 用户可以更新购物车商品的属性/规格
  • 当规格更新时,系统会逻辑删除原始购物车商品并创建新的商品

来源:mall-portal/src/main/java/com/macro/mall/portal/controller/OmsCartItemController.java71-88 mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsCartItemServiceImpl.java114-129

API 端点

端点方法描述
/cart/addPOST添加到购物车
/cart/listGET获取购物车商品列表
/cart/list/promotionGET获取包含促销信息的购物车商品
/cart/update/quantityGET更新商品数量
/cart/getProduct/{productId}GET获取商品规格以更改属性
/cart/update/attrPOST更新商品属性/规格
/cart/deletePOST删除指定的购物车商品
/cart/clearPOST清空购物车所有商品

来源:mall-portal/src/main/java/com/macro/mall/portal/controller/OmsCartItemController.java

与其他系统集成

商品系统集成

购物车系统通过以下方式与商品管理系统集成

  1. PortalProductDao:检索包括属性和 SKU 在内的详细商品信息
  2. CartProduct:扩展了 PmsProduct 的域对象,增加了属性和 SKU 信息

来源:mall-portal/src/main/java/com/macro/mall/portal/dao/PortalProductDao.java mall-portal/src/main/resources/dao/PortalProductDao.xml

促销系统集成

购物车与促销系统集成以提供折扣价格

  1. OmsPromotionService:计算购物车商品的适用促销
  2. PromotionProduct:扩展了 PmsProduct 的域对象,包含促销相关信息
  3. CartPromotionItem:扩展了 OmsCartItem 的域对象,包含促销相关信息

来源:mall-portal/src/main/java/com/macro/mall/portal/service/OmsPromotionService.java mall-portal/src/main/java/com/macro/mall/portal/domain/PromotionProduct.java

订单处理集成

购物车系统为订单处理系统提供输入

  1. 结账时,购物车商品(包含促销信息)将用于创建订单
  2. 订单创建后,购物车商品不会立即移除,直到订单确认或取消
  3. 逻辑删除机制可确保历史订单数据的完整性

有关完整的订单处理流程,请参阅订单处理

实现细节

逻辑删除机制

购物车实施逻辑删除机制

  • 当商品被“删除”时,它们会被标记为 deleteStatus = 1,而不是从数据库中移除
  • 所有查询都过滤 deleteStatus = 0 以仅检索活动购物车商品
  • 这种方法维护了订单历史数据的完整性,并允许更轻松地恢复商品

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsCartItemServiceImpl.java104-111 mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsCartItemServiceImpl.java131-138

购物车商品序列化

系统通过 JacksonConfig 类配置 JSON 序列化,以从 API 响应中排除 null 字段,这有助于减小有效负载大小并提高可读性。

来源:mall-portal/src/main/java/com/macro/mall/portal/config/JacksonConfig.java