From b9e9cde65890851f4ca2d7b4809b802b88937ddf Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期三, 01 四月 2026 23:05:48 +0800
Subject: [PATCH]  feat:同步状态优化

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java |  133 +++++++++++++++++++++++++-------------------
 1 files changed, 75 insertions(+), 58 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
index 6e56c55..997cc28 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -76,7 +76,7 @@
      */
     @Override
     public int syncLegacyTransferOrders(int daysAgo) {
-        log.info("寮�濮嬪悓姝}澶╁墠鐨勬棫绯荤粺杞繍鍗曟暟鎹�", daysAgo);
+//        log.info("寮�濮嬪悓姝}澶╁墠鐨勬棫绯荤粺杞繍鍗曟暟鎹�", daysAgo);
         
         try {
             // 鍙傛暟楠岃瘉
@@ -88,64 +88,81 @@
             // 璁$畻鏃ユ湡鑼冨洿
             Date startDate = DateUtils.addDays(new Date(), -daysAgo);
             String startDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", startDate);
+            String endDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", new Date());
             
-            // 浠嶴QL Server鏌ヨ杞繍鍗曟暟鎹�
-            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr);
-            
-            if (transferOrders == null || transferOrders.isEmpty()) {
-                log.info("鏈煡璇㈠埌{}澶╁墠鐨勮浆杩愬崟鏁版嵁", daysAgo);
-                return 0;
-            }
-            
-            log.info("鏌ヨ鍒皗}鏉¤浆杩愬崟鏁版嵁锛屽紑濮嬪悓姝�...", transferOrders.size());
-            
+            // Keyset娓告爣鍒嗛〉浠� SQL Server 鎷夊彇杞繍鍗曟暟鎹紝姣忛〉 10 鏉★紝璧颁富閿储寮曞交搴曡閬胯秴鏃�
+            final int PAGE_SIZE = 5;
+            long lastId = 0L;   // 娓告爣锛氳褰曚笂涓�椤垫渶鍚庝竴鏉$殑 ServiceOrdID锛岄娆′紶 0
             int successCount = 0;
-            int totalCount = transferOrders.size();
-            int processedCount = 0;
-            
-            for (Map<String, Object> order : transferOrders) {
-                processedCount++;
-                try {
-                    Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID");
-                    Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID");
-                    
-                    // 妫�鏌ュ弬鏁版湁鏁堟��
-                    if (serviceOrdID==null || serviceOrdID<=0) {
-                        log.warn("绗瑊}鏉℃暟鎹湇鍔″崟ID涓虹┖锛岃烦杩囧鐞�", processedCount);
-                        continue;
-                    }
-                    
-                    log.debug("姝e湪澶勭悊绗瑊}/{}鏉¤浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", 
-                             processedCount, totalCount, serviceOrdID, dispatchOrdID);
-                    
-                    // 妫�鏌ユ槸鍚﹀凡鍚屾
-                    if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
-                        log.debug("杞繍鍗曞凡鍚屾锛岃烦杩�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
-                        //杩涜鏇存柊鎿嶄綔
-                        updateTransferOrder(serviceOrdID, dispatchOrdID, order);
-                        continue;
-                    }
-                    
-                    // 鍚屾鍗曚釜杞繍鍗�
-                    boolean success = syncSingleTransferOrder(serviceOrdID, dispatchOrdID, order);
-                    if (success) {
-                        successCount++;
-                    }
-                    
-                    // 鎺у埗鍚屾棰戠巼锛岄伩鍏嶈姹傝繃蹇�
-                    Thread.sleep(100);
-                } catch (InterruptedException ie) {
-                    log.warn("鍚屾浠诲姟琚腑鏂�");
-                    Thread.currentThread().interrupt();
+
+            while (true) {
+                List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr, endDateStr, lastId, PAGE_SIZE);
+
+                if (transferOrders == null || transferOrders.isEmpty()) {
                     break;
-                } catch (Exception e) {
-                    log.error("鍚屾鍗曚釜杞繍鍗曞け璐�: ServiceOrdID={}, DispatchOrdID={}", 
-                             MapValueUtils.getStringValue(order, "ServiceOrdID"), 
-                             MapValueUtils.getStringValue(order, "DispatchOrdID"), e);
+                }
+
+                int totalCount = transferOrders.size();
+                int processedCount = 0;
+
+                for (Map<String, Object> order : transferOrders) {
+                    processedCount++;
+                    try {
+                        Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID");
+                        Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID");
+
+                        // 妫�鏌ュ弬鏁版湁鏁堟��
+                        if (serviceOrdID == null || serviceOrdID <= 0) {
+                            log.warn("绗瑊}鏉℃暟鎹湇鍔″崟ID涓虹┖锛岃烦杩囧鐞�", processedCount);
+                            continue;
+                        }
+
+//                        log.debug("姝e湪澶勭悊绗瑊}/{}鏉¤浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}",
+//                                 processedCount, totalCount, serviceOrdID, dispatchOrdID);
+
+                        // 妫�鏌ユ槸鍚﹀凡鍚屾
+                        if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
+//                            log.debug("杞繍鍗曞凡鍚屾锛岃烦杩�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+                            //杩涜鏇存柊鎿嶄綔
+                            updateTransferOrder(serviceOrdID, dispatchOrdID, order);
+                            continue;
+                        }
+
+                        // 鍚屾鍗曚釜杞繍鍗�
+                        boolean success = syncSingleTransferOrder(serviceOrdID, dispatchOrdID, order);
+                        if (success) {
+                            successCount++;
+                        }
+
+                        // 鎺у埗鍚屾棰戠巼锛岄伩鍏嶈姹傝繃蹇�
+                        Thread.sleep(100);
+                    } catch (InterruptedException ie) {
+                        log.warn("鍚屾浠诲姟琚腑鏂�");
+                        Thread.currentThread().interrupt();
+                        break;
+                    } catch (Exception e) {
+                        log.error("鍚屾鍗曚釜杞繍鍗曞け璐�: ServiceOrdID={}, DispatchOrdID={}",
+                                MapValueUtils.getStringValue(order, "ServiceOrdID"),
+                                MapValueUtils.getStringValue(order, "DispatchOrdID"), e);
+                    }
+                }
+
+                // 鏇存柊娓告爣涓烘湰椤垫渶鍚庝竴鏉$殑 ServiceOrdID
+                Map<String, Object> lastOrder = transferOrders.get(transferOrders.size() - 1);
+                Long lastServiceOrdID = MapValueUtils.getLongValue(lastOrder, "ServiceOrdID");
+                if (lastServiceOrdID != null && lastServiceOrdID > 0) {
+                    lastId = lastServiceOrdID;
+                } else {
+                    break;
+                }
+
+                // 鏈〉鏈弧涓�椤碉紝璇存槑宸叉棤鏇村鏁版嵁
+                if (totalCount < PAGE_SIZE) {
+                    break;
                 }
             }
-            
-            log.info("鍚屾瀹屾垚锛屽叡澶勭悊{}鏉¤浆杩愬崟锛屾垚鍔熷悓姝}鏉¤浆杩愬崟鏁版嵁", totalCount, successCount);
+
+//            log.info("鍚屾瀹屾垚锛屾垚鍔熷悓姝}鏉¤浆杩愬崟鏁版嵁", successCount);
             return successCount;
             
         } catch (Exception e) {
@@ -345,13 +362,13 @@
             createTaskVo.setDeptId(deptId);
 
 
-            int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
+            Long taskId = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
 
-            if (result > 0) {
-//                log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
+            if (taskId != null && taskId > 0) {
+//                log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, taskId);
 
                 try {
-                    notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
+                    notifyTransferOrderByWechat(taskId, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
                 } catch (Exception e) {
                     log.error("杞繍鍗曞悓姝ユ垚鍔熷悗鍙戦�佸井淇¢�氱煡澶辫触: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
                 }

--
Gitblit v1.9.1