From 9f7368ceb60b8f5c635cf455914f435d8d782a90 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期六, 21 六月 2025 23:58:03 +0800
Subject: [PATCH] 添加钉钉推送消息功能

---
 src/main/java/com/gs/xky/service/XkyService.java |  182 +++++++++++++++++++++++++++++++--------------
 1 files changed, 126 insertions(+), 56 deletions(-)

diff --git a/src/main/java/com/gs/xky/service/XkyService.java b/src/main/java/com/gs/xky/service/XkyService.java
index c16e49f..cb43c6c 100644
--- a/src/main/java/com/gs/xky/service/XkyService.java
+++ b/src/main/java/com/gs/xky/service/XkyService.java
@@ -2,6 +2,7 @@
 
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.gs.xky.config.ApiResponse;
@@ -13,6 +14,8 @@
 import com.gs.xky.dto.XkyEntity;
 import com.gs.xky.entity.*;
 import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -24,9 +27,8 @@
 @RequiredArgsConstructor
 public class XkyService {
 
+    private static final Logger log = LoggerFactory.getLogger(XkyService.class);
     private final ApiService apiService;
-
-
     private final DeliveryNoticeService deliveryNoticeService;
 
     private final TblBarcodeInformationService barcodeInformationService;
@@ -40,52 +42,154 @@
 
     public void GetSaveDetail() throws IOException {
         long currentTimeMillis = System.currentTimeMillis();
+        long startDate = currentTimeMillis - (30 * 60 * 1000); // 璁$畻 120 鍒嗛挓鍓嶇殑鏃堕棿鎴�
 
-        XkyCommonParam param = XkyCommonParam.GetInit();
-
-        // 璁$畻浜斿垎閽熷墠鐨勬椂闂存埑
-        long startDate = currentTimeMillis - (20 * 60 * 1000); // 1 鍒嗛挓 = 1 * 60 * 1000 姣
-
-        // 鍒涘缓 BodyParam 瀵硅薄骞惰祴鍊�
+        XkyCommonParam<BodyParam> param = XkyCommonParam.GetInit();
         BodyParam bodyParam = new BodyParam();
         bodyParam.setStartDate(startDate);
         bodyParam.setEndDate(currentTimeMillis);
         bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE);
         bodyParam.setStatus(new int[]{1, 6});
-//        bodyParam.setLogisticsStatus(2);
-
         param.setBody(bodyParam);
+
+        // 璁板綍璇锋眰鍙傛暟鏃ュ織
+        log.info("銆怗etSaveDetail 璇锋眰鍙傛暟銆戞椂闂�: {}, 鍙傛暟: {}", currentTimeMillis, JSONUtil.toJsonStr(param));
 
         ApiResponse<XkyEntity> noList = apiService.sendListRequest(param, XkyEntity.class, "https://openapi.xiekeyun.com/delivery/getNoList.json");
 
-//        List<String> deliveryNoList = noList.getDataList().stream().map(XkyEntity::getDeliveryNo).collect(Collectors.toList());
+        // 璁板綍杩斿洖鏁版嵁鏃ュ織
+        log.info("銆怗etSaveDetail 鍝嶅簲鏁版嵁銆戞椂闂�: {}, 杩斿洖: {}", currentTimeMillis, JSONUtil.toJsonStr(noList));
 
         List<XkyEntity> deliveryNoList = noList.getDataList();
-
         if (CollUtil.isEmpty(deliveryNoList)) {
+            log.info("銆怗etSaveDetail銆戣繑鍥炲垪琛ㄤ负绌猴紝璺宠繃澶勭悊");
             return;
         }
 
-        deliveryNoList.forEach(deliveryNo -> {
+        log.info("銆怗etSaveDetail銆戣幏鍙栧埌{}鏉¢�佽揣鍗曟暟鎹�", deliveryNoList.size());
+
+        // 鍒嗘壒澶勭悊鏁版嵁锛屽噺灏戝唴瀛樺崰鐢�
+        int batchSize = 10; // 姣忔壒澶勭悊10鏉℃暟鎹�
+        int totalSize = deliveryNoList.size();
+        int batchCount = (totalSize + batchSize - 1) / batchSize; // 鍚戜笂鍙栨暣璁$畻鎵规鏁�
+
+        for (int i = 0; i < batchCount; i++) {
+            int fromIndex = i * batchSize;
+            int toIndex = Math.min((i + 1) * batchSize, totalSize);
+
+            log.info("銆怗etSaveDetail銆戝鐞嗙{}鎵归�佽揣鍗曟暟鎹紝鑼冨洿锛歿}-{}", i + 1, fromIndex, toIndex);
+
+            // 鑾峰彇褰撳墠鎵规鐨勬暟鎹�
+            List<XkyEntity> batchDeliveries = deliveryNoList.subList(fromIndex, toIndex);
+
+            // 澶勭悊褰撳墠鎵规鐨勬暟鎹�
+            processBatchDeliveries(batchDeliveries);
+        }
+
+        log.info("銆怗etSaveDetail銆戞墍鏈夐�佽揣鍗曞鐞嗗畬鎴�");
+    }
+
+    /**
+     * 鎵归噺澶勭悊閫佽揣鍗曟暟鎹�
+     *
+     * @param batchDeliveries 褰撳墠鎵规鐨勯�佽揣鍗曟暟鎹�
+     */
+    private void processBatchDeliveries(List<XkyEntity> batchDeliveries) {
+        batchDeliveries.forEach(deliveryNo -> {
             try {
-
                 if ("6".equals(deliveryNo.getStatus()) || "0".equals(deliveryNo.getLogisticsStatus())) {
-
-                    remove(deliveryNo);
-
-                } else if ("1".equals(deliveryNo.getStatus()) && "2".equals(deliveryNo.getLogisticsStatus())) {
+                    log.info("銆恜rocessBatchDeliveries銆戠Щ闄ら�佽揣鍗�: {}", deliveryNo.getDeliveryNo());
+                    remove1(deliveryNo);
+                } else if ("1".equals(deliveryNo.getStatus()) && ("2".equals(deliveryNo.getLogisticsStatus()) || "1".equals(deliveryNo.getLogisticsStatus()))) {
+                    log.info("銆恜rocessBatchDeliveries銆戝鐞嗛�佽揣鍗�: {}, 鐗╂祦鐘舵��: {}", deliveryNo.getDeliveryNo(), deliveryNo.getLogisticsStatus());
                     XkyDetail detail = getDetail(deliveryNo.getDeliveryNo());
                     deliveryNoticeService.saveDeliveryNotice(detail);
                     List<BarcodeDeliveryNo> barcodeDeliveryNos = GetBarcodeInformation(deliveryNo.getDeliveryNo());
                     barcodeInformationService.SaveBarcodeInformation(barcodeDeliveryNos, deliveryNo.getDeliveryNo());
-
-                    deliveryNoticeService.callPdaReceiptBtn("閫佽揣鍗曠鏀禰BTNOK[PL017[" + deliveryNo.getDeliveryNo(), "");
+                    //宸查�佽揪鐨勬墠鑷姩杞崲涓篗ES鍒拌揣鍗�
+                    if ("2".equals(deliveryNo.getLogisticsStatus())) {
+                        log.info("銆恜rocessBatchDeliveries銆戦�佽揣鍗曞凡閫佽揪锛屾墽琛岀鏀�: {}", deliveryNo.getDeliveryNo());
+                        deliveryNoticeService.callPdaReceiptBtn("閫佽揣鍗曠鏀禰BTNOK[PL017[" + deliveryNo.getDeliveryNo(), "");
+                    }
                 }
-
             } catch (IOException e) {
-                throw new RuntimeException(e);
+                log.error("銆恜rocessBatchDeliveries銆戝鐞嗛�佽揣鍗曞紓甯�: {}, 寮傚父: {}", deliveryNo.getDeliveryNo(), e.getMessage(), e);
+                // 涓嶆姏鍑哄紓甯革紝閬垮厤涓�涓�佽揣鍗曠殑寮傚父瀵艰嚧鏁翠釜鎵规澶辫触
+            } catch (Exception e) {
+                log.error("銆恜rocessBatchDeliveries銆戝鐞嗛�佽揣鍗曟湭棰勬湡寮傚父: {}, 寮傚父: {}", deliveryNo.getDeliveryNo(), e.getMessage(), e);
+                // 涓嶆姏鍑哄紓甯革紝閬垮厤涓�涓�佽揣鍗曠殑寮傚父瀵艰嚧鏁翠釜鎵规澶辫触
             }
         });
+    }
+
+    public void remove1(XkyEntity deliveryNo) {
+
+        //MesQaItemsDetect01涓嶮esInvItemArnDetail鐨勫叧鑱斿叧绯绘槸
+        //MesQaItemsDetect01.lotNo=MesInvItemArnDetail.billNo
+        //and MesQaItemsDetect01.item_id=MesInvItemArnDetail.item_id
+
+        //鎴戠幇鍦ㄥ笇鏈涗笉娓呯┖DeliveryNotice锛孌eliveryNoticeDetail锛孴blBarcodeInformation琛ㄧ殑鏁版嵁浜�
+        //杩樻湁MesInvItemArn锛孧esInvItemArnDetail锛孧esInvItemBarcodes琛ㄧ殑鏁版嵁
+        //鍙垹闄esQaItemsDetect01琛ㄧ殑鏁版嵁
+
+        LambdaQueryWrapper<MesInvItemArn> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(MesInvItemArn::getPaperBillNo, deliveryNo.getDeliveryNo());
+        MesInvItemArn mesInvItemArn = mesInvItemArnService.getOne(wrapper, false);
+
+        // 鍙湁褰撴壘鍒板搴旂殑MesInvItemArn璁板綍鏃舵墠鍒犻櫎MesQaItemsDetect01琛ㄧ殑鏁版嵁
+        if (mesInvItemArn != null) {
+            // 鏇存柊MesInvItemArn琛紝璁剧疆syncFlag=1锛宻yncMsg="SRM鎵嬪姩鍒犻櫎閫佽揣鍗�"
+            LambdaUpdateWrapper<MesInvItemArn> updateWrapper = new LambdaUpdateWrapper<>();
+            updateWrapper.eq(MesInvItemArn::getId, mesInvItemArn.getId())
+                    .set(MesInvItemArn::getSyncFlag, 1)
+                    .set(MesInvItemArn::getStatus, 1)
+                    .set(MesInvItemArn::getSyncMsg, "SRM鎵嬪姩鍒犻櫎閫佽揣鍗�");
+            mesInvItemArnService.update(updateWrapper);
+
+            //MesInvItemArnDetail
+            LambdaUpdateWrapper<MesInvItemArnDetail> deleteWrapper = new LambdaUpdateWrapper<>();
+            deleteWrapper.eq(MesInvItemArnDetail::getMid, mesInvItemArn.getId())
+                    .set(MesInvItemArnDetail::getReturnFlag, 1);
+
+            mesInvItemArnDetailService.update(deleteWrapper);
+
+            // 鍒犻櫎MesQaItemsDetect01琛ㄧ殑鏁版嵁
+            mesQaItemsDetect01Service.removeQa(mesInvItemArn.getBillNo());
+        }
+    }
+
+    private XkyDetail getDetail(String deliveryNo) throws IOException {
+        XkyCommonParam<BodyParam> param = XkyCommonParam.GetInit();
+
+        // 鍒涘缓 BodyParam 瀵硅薄骞惰祴鍊�
+        BodyParam bodyParam = new BodyParam();
+
+        bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE);
+        bodyParam.setDeliveryNo(deliveryNo);
+
+
+        param.setBody(bodyParam);
+
+        ApiResponse<XkyDetail> noList = apiService.sendListRequest(param, XkyDetail.class, "https://openapi.xiekeyun.com/delivery/getDetail.json");
+
+        return noList.getData();
+    }
+
+    private List<BarcodeDeliveryNo> GetBarcodeInformation(String deliveryNo) throws IOException {
+        XkyCommonParam<BodyParam> param = XkyCommonParam.GetInit();
+
+        // 鍒涘缓 BodyParam 瀵硅薄骞惰祴鍊�
+        BodyParam bodyParam = new BodyParam();
+
+        bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE);
+        bodyParam.setDeliveryNo(deliveryNo);
+
+        param.setBody(bodyParam);
+
+
+        ApiResponse<BarcodeDeliveryNo> noList = apiService.sendListRequest(param, BarcodeDeliveryNo.class, "https://openapi.xiekeyun.com/barcode/byDeliveryNo.json");
+
+        return noList.getDataList();
     }
 
     private void remove(XkyEntity deliveryNo) {
@@ -130,39 +234,5 @@
                 mesQaItemsDetect01Service.removeQa(mesInvItemArn.getBillNo());
             }
         }
-    }
-
-    private XkyDetail getDetail(String deliveryNo) throws IOException {
-        XkyCommonParam param = XkyCommonParam.GetInit();
-
-        // 鍒涘缓 BodyParam 瀵硅薄骞惰祴鍊�
-        BodyParam bodyParam = new BodyParam();
-
-        bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE);
-        bodyParam.setDeliveryNo(deliveryNo);
-
-
-        param.setBody(bodyParam);
-
-        ApiResponse<XkyDetail> noList = apiService.sendListRequest(param, XkyDetail.class, "https://openapi.xiekeyun.com/delivery/getDetail.json");
-
-        return noList.getData();
-    }
-
-    private List<BarcodeDeliveryNo> GetBarcodeInformation(String deliveryNo) throws IOException {
-        XkyCommonParam param = XkyCommonParam.GetInit();
-
-        // 鍒涘缓 BodyParam 瀵硅薄骞惰祴鍊�
-        BodyParam bodyParam = new BodyParam();
-
-        bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE);
-        bodyParam.setDeliveryNo(deliveryNo);
-
-        param.setBody(bodyParam);
-
-
-        ApiResponse<BarcodeDeliveryNo> noList = apiService.sendListRequest(param, BarcodeDeliveryNo.class, "https://openapi.xiekeyun.com/barcode/byDeliveryNo.json");
-
-        return noList.getDataList();
     }
 }

--
Gitblit v1.9.3