Kaynağa Gözat

fix: 处理订单修改因事务原因导致库存不足的问题

luofeiyun 2 hafta önce
ebeveyn
işleme
e8f04e4602

+ 12 - 4
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java

@@ -96,8 +96,10 @@ public class VoyageApiImpl implements VoyageApi {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
                 //先返还初定扣的库存,使用修改前一步订单的 ID
-                preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
                 preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
+                if(reqDTO.getOldOrderId() != null && reqDTO.getOldOrderId() != reqDTO.getOrderId()) {
+                    preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                }
                 //再去扣初定的库存
                 preReduceStockDistributor(reqDTO);
             }
@@ -128,8 +130,10 @@ public class VoyageApiImpl implements VoyageApi {
             if (Objects.equals(type, DistributorOrStoreEnum.DISTRIBUTOR.getValue())) {//分销商下单,当前阶段不考虑门店下单
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
-                preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
                 preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
+                if(reqDTO.getOldOrderId() != null && reqDTO.getOldOrderId() != reqDTO.getOrderId()) {
+                    preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                }
             }
         } finally {
             if (lock.isHeldByCurrentThread() && lock.isLocked()) {
@@ -153,8 +157,10 @@ public class VoyageApiImpl implements VoyageApi {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
                 //先返还初定扣的库存
-                preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
                 preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
+                if(reqDTO.getOldOrderId() != null && reqDTO.getOldOrderId() != reqDTO.getOrderId()) {
+                    preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                }
                 //再去扣确定的库存
                 reduceStockDistributor(reqDTO);
             }
@@ -180,7 +186,9 @@ public class VoyageApiImpl implements VoyageApi {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
                 cancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
-                cancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                if(reqDTO.getOldOrderId() != null && reqDTO.getOldOrderId() != reqDTO.getOrderId()) {
+                    cancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                }
             }
         } finally {
             if (lock.isHeldByCurrentThread() && lock.isLocked()) {