Просмотр исходного кода

docs: Task5 校准——测试路径service/、sku_id记录首个组合行SKU

Xiaogang Liao 1 неделя назад
Родитель
Сommit
df4b77d644

+ 12 - 3
docs/superpowers/plans/2026-10-31-sku-combo.md

@@ -760,11 +760,20 @@ Expected: 编译失败(`deductComboStock` / `restockComboOrder` 不存在)
 
 - [ ] **Step 4: `createMultiItem` 组合支持**
 
+循环外(`for (OrderItemVO item : dto.getItems())` 之前):
+
+```java
+        Long comboSkuId = null; // 首个组合行 SKU(多商品订单组合可不在首行)
+```
+
 循环开头:
 
 ```java
             ProductSku itemSku = item.getSkuId() != null ? productSkuService.getById(item.getSkuId()) : null;
             boolean comboItem = productSkuService.hasComboItems(itemSku);
+            if (comboItem && comboSkuId == null) {
+                comboSkuId = item.getSkuId();
+            }
 ```
 
 父商品库存校验加 `!comboItem`:
@@ -823,10 +832,10 @@ SKU 价格分支改为:
                     : item.getSpecOptionIds());
 ```
 
-订单头(`order.setProductType(...)` 后):
+订单头(`order.setProductType(...)` 后;`comboSkuId` 为循环中捕获的首个组合行 SKU,否则回退首行 SKU——保证多商品订单中组合不在首行时支付/退款仍能识别):
 
 ```java
-        order.setSkuId(firstItem.getSkuId());
+        order.setSkuId(comboSkuId != null ? comboSkuId : firstItem.getSkuId());
 ```
 
 - [ ] **Step 5: 支付成功扣减**
@@ -957,7 +966,7 @@ Expected: Tests run: 4, Failures: 0, Errors: 0
 - [ ] **Step 9: 提交**
 
 ```bash
-cd /app/cfc && git add cfc-backend/src/main/java/com/etotem/cfc/service/CartService.java cfc-backend/src/main/java/com/etotem/cfc/service/ProductOrderService.java cfc-backend/src/main/java/com/etotem/cfc/controller/product/ProductController.java cfc-backend/src/test/java/com/etotem/cfc/unit/ProductOrderComboStockTest.java
+cd /app/cfc && git add cfc-backend/src/main/java/com/etotem/cfc/service/CartService.java cfc-backend/src/main/java/com/etotem/cfc/service/ProductOrderService.java cfc-backend/src/main/java/com/etotem/cfc/controller/product/ProductController.java cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderComboStockTest.java
 git commit -m "feat(backend): 组合SKU购物车/下单/扣库/回补与详情展示"
 ```
 

+ 1 - 1
docs/superpowers/specs/2026-10-31-sku-combo-design.md

@@ -26,7 +26,7 @@
 - 组合组成商品**禁止**:选中商品自身、`productType=bundle` 的商品、以及其他组合 SKU 的商品(避免递归扣减)。
 - `comboItems` 语义:**非空数组**=整表替换;**空数组**=清除组合;**字段省略(null)**=保持不变(避免部分更新误清空)。
 - 切换模式时显式清理旧数据(切到组合→清 `linkedProductId`;切到关联/规格→删组合明细)。
-- 支付/退款识别组合订单:**给 `product_orders` 增加 `sku_id` 列**(迁移 434 一并做),下单时记录;比改造 `order_items` 写入路径更直接。
+- 支付/退款识别组合订单:**给 `product_orders` 增加 `sku_id` 列**(迁移 434 一并做),下单时记录(优先首个组合行 SKU,否则首行 SKU);比改造 `order_items` 写入路径更直接。
 - 支付扣减只对**组合行**做逐项扣减,不改变现有非组合订单(含多行订单)的扣减行为,避免扩大回归面。
 
 ## 3. 目标