# 后端多规格功能适配指南 ## 概述 前端已完成商品多规格功能集成,需要后端相应适配以支持完整的多规格商品流程。 ## 需要适配的API接口 ### 1. 商品规格查询接口 **接口**: `GET /shop/shop-goods-spec` **当前问题**: 参数模型中缺少 `goodsId` 字段 **需要修改**: ```java // ShopGoodsSpecParam 类需要添加 goodsId 字段 public class ShopGoodsSpecParam extends PageParam { private Long goodsId; // 添加此字段 private Long id; private String keywords; // ... getter/setter } ``` ### 2. 商品SKU查询接口 **接口**: `GET /shop/shop-goods-sku` **当前问题**: 参数模型中缺少 `goodsId` 字段 **需要修改**: ```java // ShopGoodsSkuParam 类需要添加 goodsId 字段 public class ShopGoodsSkuParam extends PageParam { private Long goodsId; // 添加此字段 private Long id; private String keywords; // ... getter/setter } ``` ### 3. 购物车接口适配 **当前购物车数据结构**: ```typescript interface CartItem { goodsId: number; name: string; price: string; image: string; quantity: number; addTime: number; skuId?: number; // 新增SKU ID specInfo?: string; // 新增规格信息 } ``` **后端需要适配**: - 购物车存储时支持 `skuId` 和 `specInfo` 字段 - 购物车查询时返回完整的SKU信息 - 价格计算时优先使用SKU价格 ### 4. 订单创建接口适配 **前端订单数据结构**: ```typescript interface OrderGoodsItem { goodsId: number; quantity: number; skuId?: number; // SKU ID specInfo?: string; // 规格信息字符串 } ``` **后端需要处理**: - 订单商品项支持SKU信息 - 库存扣减时根据SKU进行 - 价格计算时使用SKU价格 - 订单详情显示规格信息 ## 数据库表结构检查 ### 1. 购物车表 (如果有) 确保包含以下字段: ```sql ALTER TABLE shop_cart ADD COLUMN sku_id BIGINT COMMENT 'SKU ID'; ALTER TABLE shop_cart ADD COLUMN spec_info VARCHAR(500) COMMENT '规格信息'; ``` ### 2. 订单商品表 确保包含以下字段: ```sql -- shop_order_goods 表应该已有这些字段 -- sku_id BIGINT COMMENT 'SKU ID' -- spec VARCHAR(255) COMMENT '商品规格' ``` ## 业务逻辑适配 ### 1. 库存管理 - 单规格商品:使用 `shop_goods.stock` - 多规格商品:使用 `shop_goods_sku.stock` - 下单时根据是否有SKU选择对应的库存扣减逻辑 ### 2. 价格计算 - 单规格商品:使用 `shop_goods.price` - 多规格商品:使用 `shop_goods_sku.price` - 订单金额计算时优先使用SKU价格 ### 3. 规格数据组织 后端查询规格时需要按商品ID过滤: ```java // 示例查询逻辑 public List listByGoodsId(Long goodsId) { return shopGoodsSpecMapper.selectList( new QueryWrapper() .eq("goods_id", goodsId) .orderByAsc("spec_name", "spec_value") ); } ``` ## 前端调用示例 ### 1. 加载商品规格 ```typescript // 前端会这样调用 listShopGoodsSpec({ goodsId: 123 }) listShopGoodsSku({ goodsId: 123 }) ``` ### 2. 创建订单 ```typescript // 单规格商品 { goodsItems: [{ goodsId: 123, quantity: 2 }] } // 多规格商品 { goodsItems: [{ goodsId: 123, quantity: 2, skuId: 456, specInfo: "颜色:红色|尺寸:L" }] } ``` ## 测试建议 1. **创建测试数据**: - 创建一个多规格商品 - 添加规格组(颜色、尺寸等) - 生成对应的SKU数据 2. **测试场景**: - 商品详情页规格加载 - 规格选择和SKU匹配 - 加入购物车(多规格) - 立即购买(多规格) - 订单创建和支付 3. **边界情况**: - SKU库存为0的处理 - 规格数据不完整的处理 - 单规格和多规格商品混合购买 ## 注意事项 1. **向后兼容**: 确保单规格商品的现有功能不受影响 2. **数据一致性**: SKU价格和库存与主商品数据的同步 3. **性能优化**: 规格和SKU数据的查询优化 4. **错误处理**: 规格选择错误、库存不足等异常情况的处理 ## 完成检查清单 - [ ] ShopGoodsSpecParam 添加 goodsId 字段 - [ ] ShopGoodsSkuParam 添加 goodsId 字段 - [ ] 规格查询接口支持按商品ID过滤 - [ ] SKU查询接口支持按商品ID过滤 - [ ] 购物车接口支持SKU信息 - [ ] 订单创建接口支持SKU信息 - [ ] 库存扣减逻辑适配多规格 - [ ] 价格计算逻辑适配多规格 - [ ] 测试多规格商品完整流程