24282 1 anno fa
parent
commit
b7c1f5763b

+ 8 - 8
sd-business/src/main/java/com/sd/business/entity/outbound/po/OutboundOrder.java

@@ -2,18 +2,18 @@ package com.sd.business.entity.outbound.po;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ruoyi.common.core.domain.BasePo;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.math.BigDecimal;
-import java.util.Date;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+import java.util.Date;
+
 /**
  * <p>
  * 出库单
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-12-15
  */
 @Getter
@@ -37,14 +37,14 @@ public class OutboundOrder extends BasePo {
     private String orderWlnCode;
 
     /**
-     * 万里牛sku规格编号
+     * 万里牛仓库编码
      */
-    private String skuSpecCode;
+    private String storageCode;
 
     /**
-     * 万里牛仓库编码
+     * 万里牛sku规格编号
      */
-    private String storageCode;
+    private String skuSpecCode;
 
     /**
      * 出库数量

+ 10 - 0
sd-wln/src/main/java/com/sd/wln/scheduled/WlnSyncTask.java

@@ -1,6 +1,7 @@
 package com.sd.wln.scheduled;
 
 import com.sd.wln.service.WlnOrderService;
+import com.sd.wln.service.WlnOutboundOrderService;
 import com.sd.wln.service.WlnSkuService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Profile;
@@ -20,6 +21,8 @@ public class WlnSyncTask {
     @Autowired
     private WlnOrderService wlnOrderService;
 
+    @Autowired
+    private WlnOutboundOrderService wlnOutboundOrderService;
 
     /**
      * 同步sku信息
@@ -37,5 +40,12 @@ public class WlnSyncTask {
         wlnOrderService.syncOrder();
     }
 
+    /**
+     * 生成对账单
+     */
+    @Scheduled(cron = "0 0 19-23 * * ?")
+    private void createStatementOfAccount() {
+        wlnOutboundOrderService.syncOutboundOrder();
+    }
 
 }

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

@@ -0,0 +1,10 @@
+package com.sd.wln.service;
+
+public interface WlnOutboundOrderService {
+
+    /**
+     * 同步出库单数据
+     */
+    void syncOutboundOrder();
+
+}

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

@@ -77,7 +77,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     /**
      * 只抓指定仓库编码订单数据
      */
-    private static final String WAREHOUSE_CODE = "T008";
+    public static final String WAREHOUSE_CODE = "T008";
 
     @Override
     public void syncOrder() {

+ 90 - 0
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOutboundOrderServiceImpl.java

@@ -0,0 +1,90 @@
+package com.sd.wln.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.sd.business.entity.outbound.po.OutboundOrder;
+import com.sd.business.service.outbound.OutboundOrderService;
+import com.sd.wln.service.WlnOutboundOrderService;
+import com.sd.wln.util.WlnUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+@Slf4j
+@Service
+public class WlnOutboundOrderServiceImpl implements WlnOutboundOrderService {
+
+    @Autowired
+    private OutboundOrderService outboundOrderService;
+
+    @Override
+    public void syncOutboundOrder() {
+        List<JSONObject> wlnOutboundOrder = getWlnOutboundOrder();
+        if (ObjectUtil.isEmpty(wlnOutboundOrder)) {
+            return;
+        }
+
+        List<OutboundOrder> outboundOrderList = new ArrayList<>();
+        for (JSONObject item : wlnOutboundOrder) {
+            // 非指定事业部订单不同步
+            if (ObjectUtil.notEqual(WlnOrderServiceImpl.WAREHOUSE_CODE, item.getString("storage_code"))) {
+                continue;
+            }
+
+            // 出库单明细
+            List<JSONObject> detailsList = item.getJSONArray("details").toJavaList(JSONObject.class);
+            for (JSONObject itemDetails : detailsList) {
+                OutboundOrder outboundOrder = new OutboundOrder();
+                outboundOrder.setCode(item.getString("inv_no"));
+                outboundOrder.setOrderCode(item.getString("tp_tid"));
+                outboundOrder.setOrderWlnCode(item.getString("from_trade_no"));
+                outboundOrder.setStorageCode(item.getString("storage_code"));
+                outboundOrder.setSkuSpecCode(itemDetails.getString("sku_no"));
+                outboundOrder.setQuantity(itemDetails.getBigDecimal("nums"));
+                outboundOrder.setOutboundTime(item.getDate("modify_time"));
+                outboundOrder.setOutboundTimestamp(item.getLong("modify_time"));
+                outboundOrder.setExpress(item.getString("express"));
+                outboundOrderList.add(outboundOrder);
+            }
+        }
+        outboundOrderService.saveBatch(outboundOrderList);
+    }
+
+    /**
+     * 查询近万里牛出库单
+     */
+    private List<JSONObject> getWlnOutboundOrder() {
+        OutboundOrder outboundOrder = outboundOrderService.getOne(q -> q.orderByDesc(OutboundOrder::getOutboundTimestamp));
+
+        long startTime;
+        long endTime = System.currentTimeMillis();
+        if (outboundOrder == null) {
+            startTime = endTime - 1000 * 60 * 60 * 24 * 7;
+        } else {
+            startTime = outboundOrder.getOutboundTimestamp() + 1;
+        }
+
+        List<JSONObject> list = new ArrayList<>();
+
+        int page = 1;
+        int size;
+        do {
+            try {
+                List<JSONObject> itemList = WlnUtil.getOutboundOrder(page, 200, startTime, endTime);
+                page++;
+                size = itemList.size();
+                list.addAll(itemList);
+            } catch (Exception e) {
+                log.error("出库单同步失败", e);
+                return Collections.emptyList();
+            }
+        } while (size >= 200);
+
+        return list;
+    }
+
+}