|
|
@@ -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购物车/下单/扣库/回补与详情展示"
|
|
|
```
|
|
|
|