Przeglądaj źródła

fix: 处理订单修改自动还库存

luofeiyun 3 tygodni temu
rodzic
commit
18a8833e0c

+ 3 - 0
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/api/dto/ReduceStockReqDTO.java

@@ -13,6 +13,9 @@ public class ReduceStockReqDTO {
     @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Long OrderId;
 
+    @Schema(description = "旧订单ID,用于还库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long oldOrderId;
+
     @Schema(description = "订单状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private Integer orderStatus;
 

+ 11 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java

@@ -91,7 +91,8 @@ public class VoyageApiImpl implements VoyageApi {
             if (Objects.equals(type, DistributorOrStoreEnum.DISTRIBUTOR.getValue())) {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
-                //先返还初定扣的库存
+                //先返还初定扣的库存,使用修改前一步订单的 ID
+                preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
                 preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
                 //再去扣初定的库存
                 preReduceStockDistributor(reqDTO);
@@ -124,6 +125,7 @@ public class VoyageApiImpl implements VoyageApi {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
                 preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
+                preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
             }
         } finally {
             if (lock.isHeldByCurrentThread() && lock.isLocked()) {
@@ -147,6 +149,7 @@ public class VoyageApiImpl implements VoyageApi {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
                 //先返还初定扣的库存
+                preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
                 preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
                 //再去扣确定的库存
                 reduceStockDistributor(reqDTO);
@@ -173,6 +176,7 @@ public class VoyageApiImpl implements VoyageApi {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
                 cancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
+                cancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
             }
         } finally {
             if (lock.isHeldByCurrentThread() && lock.isLocked()) {
@@ -185,6 +189,9 @@ public class VoyageApiImpl implements VoyageApi {
      * 确定状态时取消订单还库存
      */
     private void cancelReduceStockDistributor(Long orderId, Integer type) {
+        if(orderId == null) {
+            return;
+        }
         //退还航次总库存
         //找到确定时扣库存的记录
         VoyageStockLogDO voyageStockLogDO = voyageStockLogMapper.selectByOrder(orderId, TradeOrderStatusEnum.UNUSED.getStatus());
@@ -536,6 +543,9 @@ public class VoyageApiImpl implements VoyageApi {
      * 初定取消还分销商库存
      */
     private void preCancelReduceStockDistributor(Long orderId, Integer type) {
+        if(orderId == null) {
+            return;
+        }
         //退还航次总库存
         //找到初定时扣库存的记录
         VoyageStockLogDO voyageStockLogDO = voyageStockLogMapper.selectByOrder(orderId, TradeOrderStatusEnum.YD.getStatus());

+ 5 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/TradeStockOrderHandler.java

@@ -53,6 +53,10 @@ public class TradeStockOrderHandler implements TradeOrderHandler{
 
     private void reduceStock(TradeOrderBO order){
         ReduceStockReqDTO reqDTO = new ReduceStockReqDTO();
+        TradeOrderDO lastOrder = tradeOrderService.getLastOrderByOrderNo(order.getTradeOrderDO().getOrderNo());
+        if(lastOrder != null){
+            reqDTO.setOldOrderId(lastOrder.getId());
+        }
         reqDTO.setOrderId(order.getTradeOrderDO().getId());
         reqDTO.setOrderStatus(order.getTradeOrderDO().getOrderStatus());
         //TODO: 当前默认为分销商,扣分销商库存,门店的后续再完善
@@ -127,7 +131,7 @@ public class TradeStockOrderHandler implements TradeOrderHandler{
     public void afterOrderModify(TradeOrderBO order) {
         Integer sellMethod = order.getTradeOrderDO().getSellMethod();
         if (sellMethod == 1||sellMethod == 4||sellMethod == 7||sellMethod == 0||sellMethod == 3) {
-            reduceBackStock(order);
+//            reduceBackStock(order);
         }
     }