🛒 购物车模块域专家 (shopping-cart-expert)
📌 这是一个示例域专家,展示如何使用 PaceNote 的模板 v4 为自己的业务模块创建域专家。 请参考此示例为你的实际项目创建域专家。
执行声明
🔧 正在执行: shopping-cart-expert (#shopping-cart-expert)
✅ 已加载购物车模块知识
⭕ 当前步骤: [根据用户问题动态填充]
模块概述
购物车模块是电商平台的核心交易模块,负责从用户加购商品到发起结算的完整流程。
核心职责
- 商品管理 — 加购、删除、修改数量、规格切换
- 价格计算 — 实时计算含优惠券/满减/会员折扣的最终价格
- 库存校验 — 实时校验库存,处理超卖风险
- 结算入口 — 生成结算订单数据,传递给订单模块
边界声明
- ❌ 不负责: 订单创建(属于
order-expert) - ❌ 不负责: 支付处理(属于
payment-expert) - ❌ 不负责: 商品详情展示(属于
product-expert)
场景入口
| # | 场景 | 典型需求关键词 | 涉及核心文件 |
|---|---|---|---|
| 1 | 加购商品 | 加入购物车、加购、add to cart | src/cart/services/CartService.ts, src/cart/models/CartItem.ts |
| 2 | 修改数量 | 数量变更、增减、stepper | src/cart/components/QuantityStepper.vue, src/cart/services/CartService.ts |
| 3 | 优惠计算 | 优惠券、满减、折扣、促销 | src/cart/services/PriceCalculator.ts, src/cart/models/Discount.ts |
| 4 | 结算流程 | 结算、checkout、去付款 | src/cart/services/CheckoutService.ts, src/cart/pages/Checkout.vue |
| 5 | 库存校验 | 缺货、库存不足、超卖 | src/cart/services/StockValidator.ts |
| 6 | 购物车持久化 | 登录合并、离线缓存 | src/cart/services/CartStorage.ts, src/cart/services/CartMerger.ts |
⚠️ 踩坑陷阱表
| # | 陷阱描述 | ❌ 错误做法 | ✅ 正确做法 | 严重度 |
|---|---|---|---|---|
| 1 | 并发加购导致重复 | 前端不做防抖,连续点击多次加购 | 加购按钮 300ms 防抖 + 后端幂等校验(用 requestId) | 🔴 高 |
| 2 | 优惠计算精度丢失 | 用 float 计算价格 | 全程使用整数分(cent)计算,仅展示时转换 | 🔴 高 |
| 3 | 库存检查时机 | 仅在加购时校验库存 | 加购时校验 + 结算时二次校验 + 支付前终校验 | 🔴 高 |
| 4 | 登录后购物车合并 | 覆盖式合并(丢失匿名购物车) | 三方合并策略:取数量最大值 + 保留匿名车特有项 | 🟡 中 |
| 5 | 满减活动叠加 | 允许无限叠加优惠 | 优惠互斥规则引擎,按优先级选最优组合 | 🟡 中 |
| 6 | 大量 SKU 性能 | 购物车不限商品数渲染 | 限制 99 件 + 虚拟滚动 + 分批加载 | 🟡 中 |
依赖关系
上游依赖(我调用谁)
| 模块 | 交互方式 | 典型场景 |
|---|---|---|
product-service |
REST API GET /api/products/{id} |
加购时获取商品最新信息 |
inventory-service |
gRPC CheckStock() |
校验库存 |
promotion-service |
REST API POST /api/promotions/calculate |
计算优惠 |
user-service |
JWT Token 解析 | 获取用户 ID 和会员等级 |
下游依赖(谁调用我)
| 模块 | 交互方式 | 典型场景 |
|---|---|---|
order-service |
事件 CartCheckedOut |
结算生成订单 |
analytics-service |
事件 CartItemAdded/Removed |
行为分析 |
recommendation-service |
REST API GET /api/cart/items |
基于购物车推荐 |
配置映射
| 配置项 | 文件路径 | 作用 | 默认值 |
|---|---|---|---|
CART_MAX_ITEMS |
.env |
购物车最大商品数 | 99 |
CART_EXPIRE_DAYS |
.env |
匿名购物车过期天数 | 30 |
PRICE_CALC_MODE |
config/cart.yaml |
价格计算模式(cent/decimal) |
cent |
STOCK_CHECK_TIMEOUT |
config/cart.yaml |
库存校验超时(ms) | 3000 |
MERGE_STRATEGY |
config/cart.yaml |
登录合并策略(max/sum/replace) |
max |
技术栈信息
| 层 | 技术 | 说明 |
|---|---|---|
| 前端 | Vue 3 + Pinia | 购物车状态管理用 Pinia store |
| 后端 | Node.js + Express | RESTful API |
| 缓存 | Redis | 购物车数据 + 库存预扣 |
| 消息 | RabbitMQ | 结算事件推送 |
| 数据库 | PostgreSQL | 持久化购物车(登录用户) |
搜索策略
需要搜索购物车相关代码时:
1. 前端代码: src/cart/ 目录
2. 后端 API: src/api/cart/ 目录
3. 数据模型: src/models/Cart*.ts
4. 测试: tests/cart/ 目录
5. 配置: config/cart.yaml
📌 这只是示例。你的域专家应该包含你项目的真实模块知识。 使用
#app-skill-wizard可以快速为你的模块生成类似的域专家。