ソースを参照

同步更新订单调整

fgd 1 年間 前
コミット
f349994acb

+ 6 - 0
sd-wln/src/main/java/com/sd/wln/service/impl/OrderHandleServiceImpl.java

@@ -61,6 +61,12 @@ public class OrderHandleServiceImpl implements OrderHandleService {
         }
         LogicHolder.clear();
 
+        // 审核通过之前或预售状态的订单不同步
+        Integer processStatus = wlnOrder.getInteger("process_status");
+        if (processStatus < 1 || processStatus == 14) {
+            throw new ServiceException("订单同步失败,订单状态为审核或预售状态,无法重新同步");
+        }
+
         String storageCode = wlnOrder.getString("storage_code");
         OrderContext context = new OrderContext(storageCode, Collections.singletonList(wlnOrder));
         OrderInfo order = wlnOrderService.createOrder(context, wlnOrder);

+ 58 - 44
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -252,16 +252,20 @@ public class WlnOrderServiceImpl implements WlnOrderService {
                     && ObjectUtil.notEqual(orderInfo.getClassify(), OrderClassifyEnum.NO_REASON_ORDER.getKey())) {
                 List<OrderInfo> updateOrderList = context.getUpdateOrderList();
                 List<OrderInfo> saveStatementOrderList = context.getSaveStatementOrderList();
-                orderInfo.setWlnStatus(wlnOrder.getInteger("process_status"));
-                orderInfo.setWlnModifyTime(wlnOrder.getDate("modify_time"));
-                orderInfo.setWlnModifyTimestamp(wlnOrder.getLong("modify_time"));
-                orderInfo.setStatus(OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
-                orderInfo.setClassify(OrderClassifyEnum.NO_REASON_ORDER.getKey());
-                orderInfo.setShippingTime(new Date());
+                OrderInfo updateOrderInfo = new OrderInfo();
+                updateOrderInfo.setId(orderInfo.getId());
+                updateOrderInfo.setExceptionType(orderInfo.getExceptionType());
+                updateOrderInfo.setStockType(orderInfo.getStockType());
+                updateOrderInfo.setWlnStatus(wlnOrder.getInteger("process_status"));
+                updateOrderInfo.setWlnModifyTime(wlnOrder.getDate("modify_time"));
+                updateOrderInfo.setWlnModifyTimestamp(wlnOrder.getLong("modify_time"));
+                updateOrderInfo.setStatus(OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
+                updateOrderInfo.setClassify(OrderClassifyEnum.NO_REASON_ORDER.getKey());
+                updateOrderInfo.setShippingTime(new Date());
 
                 // 保存对账单列表
                 saveStatementOrderList.add(orderInfo);
-                updateOrderList.add(orderInfo);
+                updateOrderList.add(updateOrderInfo);
             }
 
             return;
@@ -278,50 +282,54 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         Department department = context.getDepartment();
         Map<Long, List<OrderSku>> existOrderSkuMap = context.getExistOrderSkuMap();
         List<OrderInfo> updateOrderList = context.getUpdateOrderList();
-
-        orderInfo.setWlnStorageCode(wlnOrder.getString("storage_code"));
-        orderInfo.setWlnUid(wlnOrder.getString("uid"));
-        orderInfo.setCode(wlnOrder.getString("tp_tid"));
-        orderInfo.setWlnCode(wlnOrder.getString("trade_no"));
-        orderInfo.setWlnStatus(wlnOrder.getInteger("process_status"));
-        orderInfo.setWlnCreateTime(wlnOrder.getDate("create_time"));
-        orderInfo.setWlnModifyTime(wlnOrder.getDate("modify_time"));
-        orderInfo.setWlnModifyTimestamp(wlnOrder.getLong("modify_time"));
-        orderInfo.setWlnApproveTime(wlnOrder.getDate("approve_time"));
-        orderInfo.setWlnPrintTime(wlnOrder.getDate("print_time"));
-        orderInfo.setSourcePlatform(wlnOrder.getString("source_platform"));
-        orderInfo.setShopName(wlnOrder.getString("shop_name"));
-        orderInfo.setProvince(wlnOrder.getString("province"));
-        orderInfo.setCity(wlnOrder.getString("city"));
-        orderInfo.setCounty(wlnOrder.getString("district"));
-        orderInfo.setDetailedAddress(wlnOrder.getString("address"));
-        orderInfo.setPostcode(wlnOrder.getString("zip"));
-        orderInfo.setDeliveryTime(DateUtil.offsetDay(orderInfo.getWlnCreateTime(), 1));
-        orderInfo.setRemark(wlnOrder.getString("remark"));
+        OrderInfo updateOrderInfo = new OrderInfo();
+        updateOrderInfo.setId(orderInfo.getId());
+        updateOrderInfo.setExceptionType(orderInfo.getExceptionType());
+        updateOrderInfo.setStockType(orderInfo.getStockType());
+
+        updateOrderInfo.setWlnStorageCode(wlnOrder.getString("storage_code"));
+        updateOrderInfo.setWlnUid(wlnOrder.getString("uid"));
+        updateOrderInfo.setCode(wlnOrder.getString("tp_tid"));
+        updateOrderInfo.setWlnCode(wlnOrder.getString("trade_no"));
+        updateOrderInfo.setWlnStatus(wlnOrder.getInteger("process_status"));
+        updateOrderInfo.setWlnCreateTime(wlnOrder.getDate("create_time"));
+        updateOrderInfo.setWlnModifyTime(wlnOrder.getDate("modify_time"));
+        updateOrderInfo.setWlnModifyTimestamp(wlnOrder.getLong("modify_time"));
+        updateOrderInfo.setWlnApproveTime(wlnOrder.getDate("approve_time"));
+        updateOrderInfo.setWlnPrintTime(wlnOrder.getDate("print_time"));
+        updateOrderInfo.setSourcePlatform(wlnOrder.getString("source_platform"));
+        updateOrderInfo.setShopName(wlnOrder.getString("shop_name"));
+        updateOrderInfo.setProvince(wlnOrder.getString("province"));
+        updateOrderInfo.setCity(wlnOrder.getString("city"));
+        updateOrderInfo.setCounty(wlnOrder.getString("district"));
+        updateOrderInfo.setDetailedAddress(wlnOrder.getString("address"));
+        updateOrderInfo.setPostcode(wlnOrder.getString("zip"));
+        updateOrderInfo.setDeliveryTime(DateUtil.offsetDay(orderInfo.getWlnCreateTime(), 1));
+        updateOrderInfo.setRemark(wlnOrder.getString("remark"));
 
         // 赋值订单异常类型
-        if (orderInfo.getWlnStatus() == 10) {
-            addExceptionType(orderInfo, OrderExceptionTypeEnum.ORDER_CLOSURE);
+        if (updateOrderInfo.getWlnStatus() == 10) {
+            addExceptionType(updateOrderInfo, OrderExceptionTypeEnum.ORDER_CLOSURE);
         }
-        if (orderInfo.getWlnStatus() == 11) {
-            addExceptionType(orderInfo, OrderExceptionTypeEnum.ORDER_ABORT);
+        if (updateOrderInfo.getWlnStatus() == 11) {
+            addExceptionType(updateOrderInfo, OrderExceptionTypeEnum.ORDER_ABORT);
         }
-        if (orderInfo.getWlnStatus() == 12) {
-            addExceptionType(orderInfo, OrderExceptionTypeEnum.ORDER_EXCEPTION_HANDLING);
+        if (updateOrderInfo.getWlnStatus() == 12) {
+            addExceptionType(updateOrderInfo, OrderExceptionTypeEnum.ORDER_EXCEPTION_HANDLING);
         }
 
         // 事业部
         if (department == null) {
-            addExceptionType(orderInfo, OrderExceptionTypeEnum.UNKNOWN_WAREHOUSE);
+            addExceptionType(updateOrderInfo, OrderExceptionTypeEnum.UNKNOWN_WAREHOUSE);
         } else {
-            orderInfo.setDepartmentId(department.getId());
+            updateOrderInfo.setDepartmentId(department.getId());
         }
 
-        List<OrderSku> orderSkuList = new ArrayList<>(existOrderSkuMap.getOrDefault(orderInfo.getId(), Collections.emptyList()));
+        List<OrderSku> orderSkuList = new ArrayList<>(existOrderSkuMap.getOrDefault(updateOrderInfo.getId(), Collections.emptyList()));
         List<JSONObject> wlnOrderSkuList = wlnOrder.getJSONArray("orders").toJavaList(JSONObject.class);
 
         if (orderSkuList.size() != wlnOrderSkuList.size()) {
-            addExceptionType(orderInfo, OrderExceptionTypeEnum.SKU_UPDATE);
+            addExceptionType(updateOrderInfo, OrderExceptionTypeEnum.SKU_UPDATE);
         } else {
             for (JSONObject wlnOrderSku : wlnOrderSkuList) {
                 for (OrderSku orderSku : orderSkuList) {
@@ -336,19 +344,25 @@ public class WlnOrderServiceImpl implements WlnOrderService {
             }
 
             if (!orderSkuList.isEmpty()) {
-                addExceptionType(orderInfo, OrderExceptionTypeEnum.SKU_UPDATE);
+                addExceptionType(updateOrderInfo, OrderExceptionTypeEnum.SKU_UPDATE);
             }
         }
 
-        // 万里牛订单状态不为1时,订单状态修改为备料中
+        // 当前万里牛订单状态不为1时,订单状态修改为备料中
         if (department != null
                 && Objects.equals(department.getOrderMode(), "2")
-                && orderInfo.getWlnStatus() != 1
+                && updateOrderInfo.getWlnStatus() != 1
                 && Objects.equals(orderInfo.getStatus(), OrderStatusEnum.UNDER_REVIEW.getKey())) {
-            orderInfo.setStatus(OrderStatusEnum.STOCK_PREPARATION.getKey());
+            updateOrderInfo.setStatus(OrderStatusEnum.STOCK_PREPARATION.getKey());
+            updateOrderInfo.setLockStorage(StatusConstant.NO);
+        }
+
+        // 异常订单保存锁定库存状态
+        if (!Objects.equals(orderInfo.getExceptionType(), OrderExceptionTypeEnum.NORMAL.getKey().toString())) {
+            updateOrderInfo.setLockStorage(orderInfo.getLockStorage());
         }
 
-        updateOrderList.add(orderInfo);
+        updateOrderList.add(updateOrderInfo);
     }
 
     @Override
@@ -854,7 +868,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         List<OrderInfo> updateOrderList = context.getUpdateOrderList();
         Map<Long, List<OrderSku>> existOrderSkuMap = context.getExistOrderSkuMap();
 
-        Map<Long, OrderInfo> orderMap = Stream.concat(saveOrderList.stream(), updateOrderList.stream()).collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
+        Map<Long, OrderInfo> orderMap = Stream.concat(saveOrderList.stream(), updateOrderList.stream()).collect(Collectors.toMap(BaseIdPo::getId, Function.identity(), (v1, v2) -> v2));
 
         Map<Long, List<OrderSku>> orderSkuMap = Stream.concat(
                         saveOrderSkuList.stream(),
@@ -907,7 +921,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
 
         for (OrderInfo orderInfo : updateOrderList) {
             if (ObjectUtil.equal(orderInfo.getExceptionType(), OrderExceptionTypeEnum.NORMAL.getKey().toString())
-                    || ObjectUtil.equal(orderInfo.getLockStorage(), StatusConstant.NO)) {
+                    || !ObjectUtil.equal(orderInfo.getLockStorage(), StatusConstant.YES)) {
                 continue;
             }