فهرست منبع

同步状态为审核、打单配货、预售的订单

24282 1 سال پیش
والد
کامیت
20ea94b42d

+ 7 - 0
sd-wln/src/main/java/com/sd/wln/controller/OrderHandleController.java

@@ -35,5 +35,12 @@ public class OrderHandleController {
         wlnStatementOfAccount.createStatementOfAccount();
     }
 
+    /**
+     * 批量同步订单
+     */
+    @PostMapping("/bathSyncOrder")
+    public void bathSyncOrder() {
+        orderHandleService.bathSyncOrder();
+    }
 
 }

+ 5 - 0
sd-wln/src/main/java/com/sd/wln/service/OrderHandleService.java

@@ -9,4 +9,9 @@ public interface OrderHandleService {
      */
     void resynchronization(ResynchronizationDto dto);
 
+    /**
+     * 批量同步订单
+     */
+    void bathSyncOrder();
+
 }

+ 10 - 0
sd-wln/src/main/java/com/sd/wln/service/WlnOrderService.java

@@ -17,6 +17,16 @@ public interface WlnOrderService {
     OrderInfo createOrder(OrderContext context, JSONObject wlnOrder);
 
     /**
+     * 更新订单
+     */
+    void updateOrder(OrderContext context, JSONObject wlnOrder, OrderInfo orderInfo);
+
+    /**
+     * 保存新增编辑
+     */
+    void save(OrderContext context);
+
+    /**
      * 添加订单
      */
     void addOrder(OrderContext context, JSONObject wlnOrder, OrderInfo orderInfo);

+ 41 - 2
sd-wln/src/main/java/com/sd/wln/service/impl/OrderHandleServiceImpl.java

@@ -1,5 +1,6 @@
 package com.sd.wln.service.impl;
 
+import cn.hutool.core.collection.ListUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.ruoyi.common.constant.StatusConstant;
@@ -16,8 +17,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -60,4 +62,41 @@ public class OrderHandleServiceImpl implements OrderHandleService {
         wlnOrderService.saveOrUpdateOrder(context);
     }
 
+    @Override
+    public void bathSyncOrder() {
+
+        List<OrderInfo> list = orderService.list(q -> q.in(OrderInfo::getWlnStatus, 0, 1, 14));
+        Map<String, OrderInfo> orderInfoMap = list.stream().collect(Collectors.toMap(OrderInfo::getWlnCode, Function.identity()));
+        Map<String, List<OrderInfo>> map = list.stream().collect(Collectors.groupingBy(OrderInfo::getWlnStorageCode));
+
+        for (String warehouseCode : map.keySet()) {
+            List<JSONObject> wlnOrderList = new ArrayList<>();
+
+            // list切分,万里牛最多只能查询200条
+            List<List<OrderInfo>> split = ListUtil.split(map.get(warehouseCode), 200);
+            for (List<OrderInfo> item : split) {
+                String wlnCodeListStr = item.stream().map(OrderInfo::getWlnCode).collect(Collectors.joining(","));
+                try {
+                    wlnOrderList.addAll(WlnUtil.getOrderListByWlnCodeList(wlnCodeListStr));
+                } catch (Exception e) {
+                    throw new ServiceException("订单同步失败:" + e.getMessage());
+                }
+            }
+
+            if (wlnOrderList.isEmpty()) {
+                continue;
+            }
+
+            // 初始化订单上下文
+            OrderContext context = new OrderContext(warehouseCode, wlnOrderList);
+
+            for (JSONObject wlnOrder : wlnOrderList) {
+                wlnOrderService.updateOrder(context, wlnOrder, orderInfoMap.get(wlnOrder.getString("trade_no")));
+            }
+
+            wlnOrderService.save(context);
+        }
+
+    }
+
 }

+ 31 - 33
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -111,17 +111,17 @@ public class WlnOrderServiceImpl implements WlnOrderService {
             // 循环万里牛订单
             for (JSONObject wlnOrder : wlnOrderList) {
 
-                Date printTime = wlnOrder.getDate("print_time");
-                if (printTime != null && printTime.before(DateUtil.parse("2023-09-01 00:00:00"))) {
-                    continue;
-                }
-
                 // 数据库中是否存在订单
                 OrderInfo orderInfo = existOrderMap.get(wlnOrder.getString("uid"));
 
                 // 不存在新增
                 if (orderInfo == null) {
 
+                    Date printTime = wlnOrder.getDate("print_time");
+                    if (printTime != null && printTime.before(DateUtil.parse("2023-09-01 00:00:00"))) {
+                        continue;
+                    }
+
                     // 审核通过之前或预售状态的订单不同步
                     Integer processStatus = wlnOrder.getInteger("process_status");
                     if (processStatus < 1 || processStatus == 14) {
@@ -142,22 +142,8 @@ public class WlnOrderServiceImpl implements WlnOrderService {
 
             }
 
-            // 开启事务
-            TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
-            try {
-                // 新增正常订单锁定库存
-                lockStorage(context);
-                // 修改正常订单为异常订单解锁库存
-                unlockStorage(context);
-                // 保存或更新数据
-                saveOrUpdateOrder(context);
-                // 提交事务
-                platformTransactionManager.commit(transactionStatus);
-            } catch (Exception e) {
-                log.error("同步订单失败", e);
-                // 回滚事务
-                platformTransactionManager.rollback(transactionStatus);
-            }
+
+            save(context);
 
         }
 
@@ -240,7 +226,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     /**
      * 修改订单
      */
-    private void updateOrder(OrderContext context, JSONObject wlnOrder, OrderInfo orderInfo) {
+    public void updateOrder(OrderContext context, JSONObject wlnOrder, OrderInfo orderInfo) {
         if (orderInfo.getDelFlag().equals(StatusConstant.DELETED)) {
             return;
         }
@@ -329,6 +315,22 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         updateOrderList.add(orderInfo);
     }
 
+    @Override
+    public void save(OrderContext context) {
+        // 开启事务
+        TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
+        try {
+            // 保存或更新数据
+            saveOrUpdateOrder(context);
+            // 提交事务
+            platformTransactionManager.commit(transactionStatus);
+        } catch (Exception e) {
+            log.error("同步订单失败", e);
+            // 回滚事务
+            platformTransactionManager.rollback(transactionStatus);
+        }
+    }
+
     /**
      * 创建订单包材
      */
@@ -642,6 +644,12 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     @Override
     public void saveOrUpdateOrder(OrderContext context) {
 
+        // 新增正常订单锁定库存
+        lockStorage(context);
+
+        // 修改正常订单为异常订单解锁库存
+        unlockStorage(context);
+
         List<OrderInfo> saveOrderList = context.getSaveOrderList();
         List<OrderInfo> updateOrderList = context.getUpdateOrderList();
         List<OrderInfo> saveStatementOrderList = context.getSaveStatementOrderList();
@@ -785,17 +793,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
             getOrderList(startTime, endTime, warehouseCode, list);
         }
 
-        Map<String, JSONObject> collect = list.stream().collect(Collectors.toMap(
-                item -> item.getString("uid"),
-                Function.identity(),
-                (v1, v2) -> {
-                    Long v1ModifyTime = v1.getLong("modify_time");
-                    Long v2ModifyTime = v2.getLong("modify_time");
-                    return v1ModifyTime > v2ModifyTime ? v1 : v2;
-                })
-        );
-
-        return new ArrayList<>(collect.values());
+        return list;
     }
 
     private void getOrderList(Long startTime, Long endTime, String warehouseCode, List<JSONObject> list) {

+ 49 - 20
sd-wln/src/main/java/com/sd/wln/util/WlnUtil.java

@@ -2,6 +2,7 @@ package com.sd.wln.util;
 
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.MapUtil;
@@ -20,6 +21,7 @@ import org.apache.http.util.EntityUtils;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.stream.Collectors;
 
 public class WlnUtil {
 
@@ -136,26 +138,32 @@ public class WlnUtil {
         return json.getJSONArray("data").toJavaList(JSONObject.class);
     }
 
-    // public static void main(String[] args) throws Exception {
-    //     List<JSONObject> skuList = getSkuList(1, 200);
-    //     System.out.println();
-    //
-    //     List<JSONObject> skuClassifyList = getSkuClassifyList();
-    //     System.out.println();
-    //
-    //     long endTime = System.currentTimeMillis();
-    //     long startTime = endTime - 1000 * 60 * 60 * 24;
-    //     List<JSONObject> orderList = getOrderList(1, 50, startTime, endTime, "B012");
-    //     System.out.println();
-    //
-    //     List<JSONObject> orderList = getOrderList("XD230717000737");
-    //     System.out.println();
-    //
-    //     long endTime = System.currentTimeMillis();
-    //     long startTime = endTime - 1000 * 60 * 60 * 24 * 7;
-    //     List<JSONObject> outboundOrder = getOutboundOrder(0, 200, 1690367461000L, 1690367461000L);
-    //     System.out.println();
-    // }
+    public static void main(String[] args) throws Exception {
+//         List<JSONObject> skuList = getSkuList(1, 200);
+//         System.out.println();
+//
+//         List<JSONObject> skuClassifyList = getSkuClassifyList();
+//         System.out.println();
+//
+//         long endTime = System.currentTimeMillis();
+//         long startTime = endTime - 1000 * 60 * 60 * 24;
+//         List<JSONObject> orderList = getOrderList(1, 50, startTime, endTime, "B012");
+//         System.out.println();
+
+        String a = "[\"XD231026000939\",\"XD231026000908\",\"XD231026001177\",\"XD231026001036\",\"XD231026001184\",\"XD231026001229\",\"XD231026001432\",\"XD231026001431\",\"XD231026001310\",\"XD231026001572\",\"XD231026001441\",\"XD231026001205\",\"XD231026001215\",\"XD231026001602\",\"XD231026001419\",\"XD231026001632\",\"XD231026001662\",\"XD231026001459\",\"XD231026001414\",\"XD231026001235\",\"XD231026001268\",\"XD231026001298\",\"XD231026001481\",\"XD231026001265\",\"XD231026001376\",\"XD231026001683\",\"XD231026001559\",\"XD231026001589\",\"XD231026001325\",\"XD231026001511\",\"XD231026001497\",\"XD231026001507\",\"XD231026001506\",\"XD231026001365\",\"XD231026001742\",\"XD231026001574\",\"XD231026001551\",\"XD231026001620\",\"XD231026001614\",\"XD231026001762\",\"XD231026001455\",\"XD231026001680\",\"XD231026001684\",\"XD231026001641\",\"XD231026001704\",\"XD231026001724\",\"XD231026001667\",\"XD231026001606\",\"XD231026001852\",\"XD231026001872\",\"XD231026001710\",\"XD231026001677\",\"XD231026001681\",\"XD231026001892\",\"XD231026001749\",\"XD231026001701\",\"XD231026001721\",\"XD231026001750\",\"XD231026001666\",\"XD231026002062\"]";
+        List<String> strings = JSON.parseArray(a, String.class);
+
+        List<String> collect1 = strings.stream().distinct().collect(Collectors.toList());
+        String collect = strings.stream().collect(Collectors.joining(","));
+
+        JSONObject orderList = getOrderByWlnCode(collect);
+        System.out.println(orderList.toString());
+
+//         long endTime = System.currentTimeMillis();
+//         long startTime = endTime - 1000 * 60 * 60 * 24 * 7;
+//         List<JSONObject> outboundOrder = getOutboundOrder(0, 200, 1690367461000L, 1690367461000L);
+//         System.out.println();
+    }
 
     /**
      * post请求
@@ -182,4 +190,25 @@ public class WlnUtil {
         }
     }
 
+
+    /**
+     * 获取订单
+     */
+    public static List<JSONObject> getOrderListByWlnCodeList(String wlnCodeListStr) throws Exception {
+        TradesParam param = new TradesParam();
+        param.setBill_code(wlnCodeListStr);
+        param.setPage(1);
+        param.setLimit(200);
+        param.setIs_split(true);
+        param.setManualImport(false);
+        param.generateSign(MapUtil.createLinkString(MapUtil.beanToMap(param)));
+        String result = send(PREFIX + "erp/opentrade/list/trades", MapUtil.beanToMap(param));
+        JSONObject json = JSONObject.parseObject(result);
+        Integer code = json.getInteger("code");
+        if (code != 0) {
+            throw new ServiceException(result);
+        }
+        return json.getJSONArray("data").toJavaList(JSONObject.class);
+    }
+
 }