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/TaskStatusSyncServiceImpl.java |  137 +++++++++++++++++++++------------------------
 1 files changed, 65 insertions(+), 72 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusSyncServiceImpl.java
index c04dbc0..9c9809f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusSyncServiceImpl.java
@@ -1,14 +1,14 @@
 package com.ruoyi.system.service.impl;
 
 import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.LongUtil;
 import com.ruoyi.system.domain.DispatchOrd;
 import com.ruoyi.system.domain.SysTask;
 import com.ruoyi.system.domain.SysTaskEmergency;
 import com.ruoyi.system.domain.enums.TaskStatus;
 import com.ruoyi.system.mapper.SysTaskMapper;
-import com.ruoyi.system.service.IDispatchOrdService;
-import com.ruoyi.system.service.ISysTaskEmergencyService;
-import com.ruoyi.system.service.ITaskStatusSyncService;
+import com.ruoyi.system.service.*;
 import com.ruoyi.system.utils.TaskStatusConverter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,6 +35,9 @@
     
     @Autowired
     private SysTaskMapper sysTaskMapper;
+
+    @Autowired
+    private ISysTaskService taskService;
     
     @Autowired
     private ISysTaskEmergencyService sysTaskEmergencyService;
@@ -49,7 +52,6 @@
      * @return 鏄惁鍚屾鎴愬姛
      */
     @Override
-    @Transactional
     public boolean syncTaskStatusFromLegacy(Long taskId) {
         if (!legacyConfig.isEnabled()) {
             log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囩姸鎬佸悓姝ワ紝浠诲姟ID: {}", taskId);
@@ -98,7 +100,9 @@
             return false;
         }
     }
-    
+
+    @Autowired
+    private IServiceOrderService serviceOrderService;
     /**
      * 鎵归噺鍚屾宸插悓姝ヨ皟搴﹀崟鐨勪换鍔$姸鎬侊紙浠庢棫绯荤粺鍒版柊绯荤粺锛�
      * 浣跨敤鍒嗛〉鏌ヨ锛屾壒閲忔煡璇QL Server鏁版嵁搴擄紝鍑忓皯缃戠粶璇锋眰娆℃暟
@@ -108,13 +112,13 @@
     @Override
     public int batchSyncTaskStatusFromLegacy() {
         if (!legacyConfig.isEnabled()) {
-            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤");
+//            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤");
             return 0;
         }
         
         try {
             int totalSuccessCount = 0;
-            int pageSize = 10; // 姣忛〉200鏉�
+            int pageSize = 10; // 姣忛〉10鏉�
             int offset = 0;
             
             while (true) {
@@ -122,87 +126,76 @@
                 List<SysTaskEmergency> syncedTasks = sysTaskEmergencyService.selectSyncedTasksForStatusUpdate(offset, pageSize);
                 
                 if (syncedTasks == null || syncedTasks.isEmpty()) {
-                    log.info("娌℃湁鏇村闇�瑕佸悓姝ョ姸鎬佺殑浠诲姟锛宱ffset: {}", offset);
+//                    log.info("娌℃湁鏇村闇�瑕佸悓姝ョ姸鎬佺殑浠诲姟锛宱ffset: {}", offset);
                     break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
                 }
                 
-                log.info("寮�濮嬪悓姝ョ姸鎬佺 {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, syncedTasks.size());
+//                log.info("寮�濮嬪悓姝ョ姸鎬佺 {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, syncedTasks.size());
                 
                 // 2. 鎻愬彇璋冨害鍗旾D鍒楄〃
-                List<Long> dispatchOrdIDs = new ArrayList<>();
+
                 Map<Long, SysTaskEmergency> dispatchIdToTaskMap = new HashMap<>();
-                
+
+
                 for (SysTaskEmergency emergency : syncedTasks) {
                     Long dispatchOrdId = emergency.getLegacyDispatchOrdId();
-                    if (dispatchOrdId != null && dispatchOrdId > 0) {
-                        dispatchOrdIDs.add(dispatchOrdId);
-                        dispatchIdToTaskMap.put(dispatchOrdId, emergency);
+                    if (LongUtil.isNotEmpty(emergency.getTaskId())) {
+
+                        if(!dispatchIdToTaskMap.containsKey(dispatchOrdId)) {
+                            dispatchIdToTaskMap.put(emergency.getTaskId(), emergency);
+                        }
+                    }
+                    Long serviceOrdId = emergency.getLegacyServiceOrdId();
+                    if(LongUtil.isNotEmpty(serviceOrdId)){
+                        if(!dispatchIdToTaskMap.containsKey(emergency.getTaskId())) {
+                            dispatchIdToTaskMap.put(emergency.getTaskId(), emergency);
+                        }
                     }
                 }
                 
-                if (dispatchOrdIDs.isEmpty()) {
-                    log.warn("鏈〉娌℃湁鏈夋晥鐨勮皟搴﹀崟ID");
+                if (dispatchIdToTaskMap.size()<=0) {
+//                    log.warn("鏈〉娌℃湁鏈夋晥鐨勮皟搴﹀崟ID");
                     offset += pageSize;
                     continue;
                 }
                 
                 // 3. 鎵归噺鏌ヨ鏃х郴缁熻皟搴﹀崟鐘舵�侊紙鐩存帴鏌ヨSQL Server鏁版嵁搴擄級
-                List<DispatchOrd> dispatchOrds = dispatchOrdService.selectDispatchOrdStatesByIDs(dispatchOrdIDs);
-                
-                if (dispatchOrds == null || dispatchOrds.isEmpty()) {
-                    log.warn("鏈煡璇㈠埌鏃х郴缁熻皟搴﹀崟鐘舵��");
-                    offset += pageSize;
-                    continue;
-                }
-                
-                // 4. 鏋勫缓璋冨害鍗旾D鍒扮姸鎬佺殑鏄犲皠
-                Map<Long, Integer> dispatchIdToStateMap = new HashMap<>();
-                for (DispatchOrd dispatchOrd : dispatchOrds) {
-                    try {
-                        Long dispatchOrdId = Long.parseLong(dispatchOrd.getDispatchOrdID());
-                        Integer dispatchOrdState = Integer.parseInt(dispatchOrd.getDispatchOrdState());
-                        if (dispatchOrdState != null) {
-                            dispatchIdToStateMap.put(dispatchOrdId, dispatchOrdState);
+                dispatchIdToTaskMap.forEach((taskId, emergency) -> {
+                    Long dispatchOrdId = emergency.getLegacyDispatchOrdId();
+                    Long serviceOrdId = emergency.getLegacyServiceOrdId();
+                    if(LongUtil.isNotEmpty(dispatchOrdId)){
+                       Integer state =dispatchOrdService.selectDispatchOrdStateByID(dispatchOrdId);
+                        syncTaskStatusWithLegacyState(taskId, state);
+                    }
+                    else if(LongUtil.isNotEmpty(serviceOrdId)){
+                        try {
+                            Integer serviceOrdState = serviceOrderService.selectServiceOrderStateById(serviceOrdId);
+                            if (serviceOrdState == 4) {
+                                //鍙栨秷
+                                Map<String, Object> cancelInfo = serviceOrderService.selectCancelInfoById(serviceOrdId);
+                                String cancelReasonText = (String) cancelInfo.get("ServiceOrdCancelReasonTXT");
+                                String cancelReason = (String) cancelInfo.get("ServiceOrdCancelReason");
+                                taskService.saveCancel(taskId, cancelReason, cancelReasonText, DateUtils.getNowDate());
+                            }
+                        }catch (Exception ex){
+                            log.error("鏌ヨ鏃х郴缁熺姸鎬佸け璐ワ紝浠诲姟ID: {}, ServiceOrdID: {}", taskId, serviceOrdId);
                         }
-                    } catch (NumberFormatException e) {
-                        log.error("瑙f瀽璋冨害鍗旾D澶辫触: {}", dispatchOrd.getDispatchOrdID(), e);
+
+//                        syncTaskStatusWithLegacyState(taskId, state);
                     }
-                }
-                
-                // 5. 閬嶅巻浠诲姟锛屽悓姝ョ姸鎬�
-                int pageSuccessCount = 0;
-                for (Map.Entry<Long, SysTaskEmergency> entry : dispatchIdToTaskMap.entrySet()) {
-                    Long dispatchOrdId = entry.getKey();
-                    SysTaskEmergency emergency = entry.getValue();
-                    
-                    // 鑾峰彇鏃х郴缁熺姸鎬�
-                    Integer legacyStatus = dispatchIdToStateMap.get(dispatchOrdId);
-                    if (legacyStatus == null) {
-                        log.warn("鏈壘鍒拌皟搴﹀崟鐘舵�侊紝DispatchOrdID: {}", dispatchOrdId);
-                        continue;
-                    }
-                    
-                    // 鍚屾鍗曚釜浠诲姟鐘舵��
-                    boolean result = syncTaskStatusWithLegacyState(emergency.getTaskId(), legacyStatus);
-                    if (result) {
-                        pageSuccessCount++;
-                    }
-                }
-                
-                totalSuccessCount += pageSuccessCount;
-                log.info("鐘舵�佺 {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
-                    (offset / pageSize) + 1, syncedTasks.size(), pageSuccessCount);
-                
+                });
+
+//
                 // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
                 if (syncedTasks.size() < pageSize) {
-                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝鐘舵�佸悓姝ョ粨鏉�");
+//                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝鐘舵�佸悓姝ョ粨鏉�");
                     break;
                 }
                 
                 offset += pageSize; // 涓嬩竴椤�
             }
             
-            log.info("鎵归噺鍚屾浠诲姟鐘舵�佸畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+//            log.info("鎵归噺鍚屾浠诲姟鐘舵�佸畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
             return totalSuccessCount;
             
         } catch (Exception e) {
@@ -219,7 +212,6 @@
      * @param legacyStatus 鏃х郴缁熺姸鎬佺爜
      * @return 鏄惁鎴愬姛
      */
-    @Transactional
     private boolean syncTaskStatusWithLegacyState(Long taskId, Integer legacyStatus) {
         try {
             // 鏌ヨ浠诲姟淇℃伅
@@ -232,23 +224,23 @@
             // 杞崲涓烘柊绯荤粺鐘舵��
             TaskStatus newStatus = TaskStatusConverter.convertFromLegacyStatus(legacyStatus);
             if (newStatus == null) {
-                log.debug("鏃х郴缁熺姸鎬佺爜 > 10 鎴栨棤娉曡浆鎹紝璺宠繃鍚屾锛屼换鍔D: {}, 鐘舵�佺爜: {} ({})",
-                    taskId, legacyStatus, TaskStatusConverter.getLegacyStatusDescription(legacyStatus));
+//                log.debug("鏃х郴缁熺姸鎬佺爜 > 10 鎴栨棤娉曡浆鎹紝璺宠繃鍚屾锛屼换鍔D: {}, 鐘舵�佺爜: {} ({})",
+//                    taskId, legacyStatus, TaskStatusConverter.getLegacyStatusDescription(legacyStatus));
                 return false;
             }
             
             // 妫�鏌ョ姸鎬佹槸鍚﹀彉鍖�
             if (newStatus.getCode().equals(task.getTaskStatus())) {
-                log.debug("浠诲姟鐘舵�佹湭鍙樺寲锛屼换鍔D: {}, 褰撳墠鐘舵��: {}", taskId, newStatus.getInfo());
+                // log.debug("鍙樺寲锛屼换鍔D: {}, 褰撳墠鐘舵��: {}", taskId, newStatus.getInfo());
                 return true;
             }
             
             // 姣旇緝鏂版棫绯荤粺鐘舵�佺殑浼樺厛绾э紝闃叉鐘舵�佸�掗��
             TaskStatus currentStatus = TaskStatus.getByCode(task.getTaskStatus());
             if (currentStatus != null && !shouldSyncStatus(currentStatus, newStatus, legacyStatus)) {
-                log.info("銆愭棫绯荤粺鏇存柊鍒版柊绯荤粺銆� 鏃х郴缁熺姸鎬佽惤鍚庝簬鏂扮郴缁熺姸鎬侊紝璺宠繃鍚屾锛屼换鍔D: {}, 鏂扮郴缁熺姸鎬�: {} ({}), 鏃х郴缁熺姸鎬�: {} ({})",
-                    taskId, task.getTaskStatus(), currentStatus.getInfo(), 
-                    newStatus.getCode(), TaskStatusConverter.getLegacyStatusDescription(legacyStatus));
+                // log.info("銆愭棫绯荤粺鏇存柊鍒版柊绯荤粺銆� 鏃х郴缁熺姸鎬佽惤鍚庝簬鏂扮郴缁熺姸鎬侊紝璺宠繃鍚屾锛屼换鍔D: {}, 鏂扮郴缁熺姸鎬�: {} ({}), 鏃х郴缁熺姸鎬�: {} ({})",
+                //     taskId, task.getTaskStatus(), currentStatus.getInfo(), 
+                //     newStatus.getCode(), TaskStatusConverter.getLegacyStatusDescription(legacyStatus));
                 return false;
             }
             
@@ -281,12 +273,13 @@
                 default:
                     break;
             }
+
             
             sysTaskMapper.updateSysTask(task);
             
-            log.info("浠诲姟鐘舵�佸悓姝ユ垚鍔燂紝浠诲姟ID: {}, 鏃х姸鎬�: {}, 鏂扮姸鎬�: {}, 鏃х郴缁熺姸鎬佺爜: {} ({})", 
-                taskId, oldStatus, newStatus.getCode(), legacyStatus, 
-                TaskStatusConverter.getLegacyStatusDescription(legacyStatus));
+//            log.info("浠诲姟鐘舵�佸悓姝ユ垚鍔燂紝浠诲姟ID: {}, 鏃х姸鎬�: {}, 鏂扮姸鎬�: {}, 鏃х郴缁熺姸鎬佺爜: {} ({})",
+//                taskId, oldStatus, newStatus.getCode(), legacyStatus,
+//                TaskStatusConverter.getLegacyStatusDescription(legacyStatus));
             
             return true;
             

--
Gitblit v1.9.1