Kaynağa Gözat

重新同步订单

24282 1 yıl önce
ebeveyn
işleme
47fc4a7bcb

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/order/po/OrderInfo.java

@@ -251,4 +251,9 @@ public class OrderInfo extends BasePo {
      */
     private String remark;
 
+    /**
+     * 订单删除标记
+     */
+    private Integer delFlag;
+
 }

+ 2 - 2
sd-starter/src/test/java/A1_SyncBomTest.java

@@ -99,7 +99,7 @@ public class A1_SyncBomTest {
     }
 
     private void saveBomSpec(DataSource sdDataSource, List<Bom> bomList) {
-        LogicHolder.setLogicHolder(new LogicHolder());
+        LogicHolder.setLogicHolder(true);
         List<BomSpec> list = bomSpecService.list(q -> q.isNotNull(BomSpec::getOldId));
         List<Long> bomSpecIdList = list.stream().map(BaseIdPo::getId).collect(Collectors.toList());
         bomSpecService.removeBatchByIds(bomSpecIdList);
@@ -142,7 +142,7 @@ public class A1_SyncBomTest {
     }
 
     private List<Bom> saveBom(DataSource sdDataSource) {
-        LogicHolder.setLogicHolder(new LogicHolder());
+        LogicHolder.setLogicHolder(true);
         List<Bom> list = bomService.list(q -> q.isNotNull(Bom::getOldId));
         List<Long> bomIdList = list.stream().map(BaseIdPo::getId).collect(Collectors.toList());
         bomService.removeBatchByIds(bomIdList);

+ 1 - 1
sd-wln/src/main/java/com/sd/wln/context/OrderContext.java

@@ -180,7 +180,7 @@ public class OrderContext {
      */
     public Map<String, OrderInfo> getExistOrderMap() {
         if (existOrderMap == null) {
-            LogicHolder.setLogicHolder(new LogicHolder());
+            LogicHolder.setLogicHolder(true);
             List<String> uidList = wlnOrderList.stream().map(item -> item.getString("uid")).collect(Collectors.toList());
             existOrderMap = orderService.mapKEntity(OrderInfo::getWlnUid, q -> q.in(OrderInfo::getWlnUid, uidList));
             LogicHolder.clear();

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

@@ -0,0 +1,24 @@
+package com.sd.wln.controller;
+
+import com.sd.wln.entity.ResynchronizationDto;
+import com.sd.wln.service.OrderHandleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/orderHandle")
+public class OrderHandleController {
+
+    @Autowired
+    private OrderHandleService orderHandleService;
+
+    @PostMapping("/resynchronization")
+    public void resynchronization(@RequestBody ResynchronizationDto dto) {
+        orderHandleService.resynchronization(dto);
+    }
+
+
+}

+ 15 - 0
sd-wln/src/main/java/com/sd/wln/entity/ResynchronizationDto.java

@@ -0,0 +1,15 @@
+package com.sd.wln.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ResynchronizationDto {
+
+    /**
+     * 万里牛编号
+     */
+    private String wlnCode;
+
+}

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

@@ -0,0 +1,12 @@
+package com.sd.wln.service;
+
+import com.sd.wln.entity.ResynchronizationDto;
+
+public interface OrderHandleService {
+
+    /**
+     * 重新同步订单
+     */
+    void resynchronization(ResynchronizationDto dto);
+
+}

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

@@ -1,5 +1,9 @@
 package com.sd.wln.service;
 
+import com.alibaba.fastjson2.JSONObject;
+import com.sd.business.entity.order.po.OrderInfo;
+import com.sd.wln.context.OrderContext;
+
 public interface WlnOrderService {
 
     /**
@@ -7,4 +11,19 @@ public interface WlnOrderService {
      */
     void syncOrder();
 
+    /**
+     * 创建订单
+     */
+    OrderInfo createOrder(OrderContext context, JSONObject wlnOrder);
+
+    /**
+     * 添加订单
+     */
+    void addOrder(OrderContext context, JSONObject wlnOrder, OrderInfo orderInfo);
+
+    /**
+     * 新增或编辑订单
+     */
+    void saveOrUpdateOrder(OrderContext context);
+
 }

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

@@ -0,0 +1,61 @@
+package com.sd.wln.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.annotation.LogicIgnore;
+import com.ruoyi.common.constant.StatusConstant;
+import com.ruoyi.common.exception.ServiceException;
+import com.sd.business.entity.order.po.OrderInfo;
+import com.sd.business.service.order.OrderService;
+import com.sd.wln.context.OrderContext;
+import com.sd.wln.entity.ResynchronizationDto;
+import com.sd.wln.service.OrderHandleService;
+import com.sd.wln.service.WlnOrderService;
+import com.sd.wln.util.WlnUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class OrderHandleServiceImpl implements OrderHandleService {
+
+    @Autowired
+    private OrderService orderService;
+
+    @Autowired
+    private WlnOrderService wlnOrderService;
+
+    @Transactional(rollbackFor = Exception.class)
+    @LogicIgnore
+    @Override
+    public void resynchronization(ResynchronizationDto dto) {
+        JSONObject wlnOrder;
+        try {
+            wlnOrder = WlnUtil.getOrderByWlnCode(dto.getWlnCode());
+        } catch (ServiceException e) {
+            throw e;
+        } catch (Exception e) {
+            log.error("订单同步失败", e);
+            throw new ServiceException("订单同步失败");
+        }
+
+        String uid = wlnOrder.getString("uid");
+        OrderInfo orderInfo = orderService.getOne(q -> q.eq(OrderInfo::getWlnUid, uid));
+        if (orderInfo != null) {
+            if (Objects.equals(orderInfo.getDelFlag(), StatusConstant.NOT_DELETED)) {
+                throw new ServiceException("订单未被删除,无法重新同步");
+            }
+            orderService.delete(orderInfo.getId());
+        }
+
+        String storageCode = wlnOrder.getString("storage_code");
+        OrderContext context = new OrderContext(storageCode);
+        OrderInfo order = wlnOrderService.createOrder(context, wlnOrder);
+        wlnOrderService.addOrder(context, wlnOrder, order);
+        wlnOrderService.saveOrUpdateOrder(context);
+    }
+
+}

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

@@ -100,8 +100,18 @@ public class WlnOrderServiceImpl implements WlnOrderService {
 
             }
 
-            // 保存或更新数据
-            saveOrUpdateOrder(context);
+            // 开启事务
+            TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
+            try {
+                // 保存或更新数据
+                saveOrUpdateOrder(context);
+                // 提交事务
+                platformTransactionManager.commit(transactionStatus);
+            } catch (Exception e) {
+                log.error("同步订单失败", e);
+                // 回滚事务
+                platformTransactionManager.rollback(transactionStatus);
+            }
 
         }
 
@@ -110,7 +120,8 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     /**
      * 创建订单
      */
-    private OrderInfo createOrder(OrderContext context, JSONObject wlnOrder) {
+    @Override
+    public OrderInfo createOrder(OrderContext context, JSONObject wlnOrder) {
 
         OrderInfo orderInfo = new OrderInfo();
         orderInfo.setId(IdWorker.getId());
@@ -322,7 +333,8 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     /**
      * 添加订单到上下文
      */
-    private void addOrder(OrderContext context, JSONObject wlnOrder, OrderInfo orderInfo) {
+    @Override
+    public void addOrder(OrderContext context, JSONObject wlnOrder, OrderInfo orderInfo) {
         Map<String, SkuSpec> skuSpecMap = context.getSkuSpecMap();
 
         List<OrderSku> orderSkuList = new ArrayList<>();
@@ -479,7 +491,8 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     /**
      * 保存或更新数据
      */
-    private void saveOrUpdateOrder(OrderContext context) {
+    @Override
+    public void saveOrUpdateOrder(OrderContext context) {
 
         List<OrderInfo> saveOrderList = context.getSaveOrderList();
         List<OrderInfo> updateOrderList = context.getUpdateOrderList();
@@ -487,38 +500,22 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         List<OrderSkuBom> saveOrderSkuBomList = context.getSaveOrderSkuBomList();
         List<OrderPackageBom> orderPackageBomList = context.getOrderPackageBomList();
 
-        // 开启事务
-        TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
-
-        try {
-
-            if (saveOrderList.size() > 0) {
-                orderService.saveBatch(saveOrderList);
-            }
-            if (updateOrderList.size() > 0) {
-                orderService.updateBatchById(updateOrderList);
-            }
-            if (saveOrderSkuList.size() > 0) {
-                orderSkuService.saveBatch(saveOrderSkuList);
-            }
-            if (saveOrderSkuBomList.size() > 0) {
-                orderSkuBomService.saveBatch(saveOrderSkuBomList);
-            }
-            if (orderPackageBomList.size() > 0) {
-                orderPackageBomService.saveBatch(orderPackageBomList);
-            }
-
-            // 提交事务
-            platformTransactionManager.commit(transactionStatus);
-
-        } catch (Exception e) {
-
-            log.error("同步订单失败", e);
-
-            // 回滚事务
-            platformTransactionManager.rollback(transactionStatus);
-
+        if (saveOrderList.size() > 0) {
+            orderService.saveBatch(saveOrderList);
         }
+        if (updateOrderList.size() > 0) {
+            orderService.updateBatchById(updateOrderList);
+        }
+        if (saveOrderSkuList.size() > 0) {
+            orderSkuService.saveBatch(saveOrderSkuList);
+        }
+        if (saveOrderSkuBomList.size() > 0) {
+            orderSkuBomService.saveBatch(saveOrderSkuBomList);
+        }
+        if (orderPackageBomList.size() > 0) {
+            orderPackageBomService.saveBatch(orderPackageBomList);
+        }
+
     }
 
 }

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

@@ -52,7 +52,7 @@ public class WlnSkuServiceImpl implements WlnSkuService {
         }
 
         // 查询数据库sku分类
-        LogicHolder.setLogicHolder(new LogicHolder());
+        LogicHolder.setLogicHolder(true);
         List<SkuClassify> mysqlSkuClassifyList = skuClassifyService.list();
         LogicHolder.clear();
 
@@ -107,7 +107,7 @@ public class WlnSkuServiceImpl implements WlnSkuService {
             }
         } while (size >= 200);
 
-        LogicHolder.setLogicHolder(new LogicHolder());
+        LogicHolder.setLogicHolder(true);
 
         // 产品分类map
         Map<String, Long> skuClassifyMap = skuClassifyService.mapKV(SkuClassify::getWlnCatagoryId, BaseIdPo::getId, null);

+ 34 - 1
sd-wln/src/main/java/com/sd/wln/util/WlnUtil.java

@@ -88,6 +88,34 @@ public class WlnUtil {
     }
 
     /**
+     * 获取订单
+     */
+    public static JSONObject getOrderByWlnCode(String wlnCode) throws Exception {
+        TradesParam param = new TradesParam();
+        param.setBill_code(wlnCode);
+        param.setPage(1);
+        param.setLimit(10);
+        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);
+        }
+        List<JSONObject> list = json.getJSONArray("data").toJavaList(JSONObject.class);
+
+        if (list.size() == 0) {
+            throw new ServiceException("未能通过万里牛订单编号找到订单");
+        }
+        if (list.size() > 1) {
+            throw new ServiceException("通过万里牛订单编号找到多条订单");
+        }
+        return list.get(0);
+    }
+
+    /**
      * 获取出库单
      */
     public static List<JSONObject> getOutboundOrder(Integer page, Integer limit, Long startTime, Long endTime) throws IOException {
@@ -110,17 +138,22 @@ public class WlnUtil {
 
     // 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();
     // }