From 4fdde57a837b47b0a04aa17a7627c21b7425eda2 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期五, 26 十二月 2025 23:25:11 +0800
Subject: [PATCH] feat: 优化取消时,调度单中显示原因

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java |  110 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 88 insertions(+), 22 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java
index 3c47332..72e4127 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java
@@ -1,11 +1,14 @@
 package com.ruoyi.system.service.impl;
 
 import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.common.utils.LongUtil;
 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.IServiceOrderService;
+import com.ruoyi.system.service.ISysDictDataService;
 import com.ruoyi.system.service.ISysTaskEmergencyService;
 import com.ruoyi.system.service.ITaskStatusPushService;
 import com.ruoyi.system.utils.TaskStatusPushConverter;
@@ -41,6 +44,12 @@
     @Autowired
     private IDispatchOrdService dispatchOrdService;
     
+    @Autowired
+    private IServiceOrderService serviceOrderService;
+    
+    @Autowired
+    private ISysDictDataService sysDictDataService;
+    
     /**
      * 灏嗗崟涓换鍔$姸鎬佹帹閫佸埌鏃х郴缁�
      * 
@@ -48,16 +57,15 @@
      * @return 鏄惁鎺ㄩ�佹垚鍔�
      */
     @Override
-    @Transactional
     public boolean pushTaskStatusToLegacy(Long taskId) {
         if (!legacyConfig.isEnabled()) {
-            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囩姸鎬佹帹閫侊紝浠诲姟ID: {}", taskId);
+//            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囩姸鎬佹帹閫侊紝浠诲姟ID: {}", taskId);
             return false;
         }
         
         try {
             // 鏌ヨ浠诲姟淇℃伅
-            log.debug("銆愭柊鎺ㄦ棫銆戞煡璇换鍔D: {}", taskId);
+//            log.debug("銆愭柊鎺ㄦ棫銆戞煡璇换鍔D: {}", taskId);
             SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
             if (task == null) {
                 log.error("銆愭柊鎺ㄦ棫銆戜换鍔′笉瀛樺湪锛屼换鍔D: {}", taskId);
@@ -66,7 +74,7 @@
             
             // 鍙帹閫佹�ユ晳杞繍浠诲姟
             if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
-                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囩姸鎬佹帹閫侊紝浠诲姟ID: {}", taskId);
+//                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囩姸鎬佹帹閫侊紝浠诲姟ID: {}", taskId);
                 return false;
             }
             
@@ -110,13 +118,22 @@
             // 鍒ゆ柇鏄惁闇�瑕佹洿鏂帮紙鍖呭惈闃叉鐘舵�佸�掗��鐨勬鏌ワ級
             // 濡傛灉鏃х郴缁熺姸鎬佸凡缁� >= 鏂扮郴缁熻鎺ㄩ�佺殑鐘舵�侊紝璇存槑鏃х郴缁熺姸鎬佹洿鏂帮紝鏂扮郴缁熻惤鍚庯紝涓嶅簲璇ユ帹閫�
             if (!TaskStatusPushConverter.shouldUpdateLegacyStatus(targetStatusCode, currentLegacyStatus)) {
-                log.info("銆愭柊鎺ㄦ棫銆戞柊绯荤粺鐘舵�佽惤鍚庢垨绛変簬鏃х郴缁熺姸鎬侊紝璺宠繃鎺ㄩ�侊紝浠诲姟ID: {}, 鏂扮郴缁熺姸鎬�: {} ({}鈫抺}), 鏃х郴缁熺姸鎬�: {} ({})",
-                    taskId, 
-                    task.getTaskStatus(), newTaskStatus.getInfo(), targetStatusCode,
-                    currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus));
+//                log.info("銆愭柊鎺ㄦ棫銆戞柊绯荤粺鐘舵�佽惤鍚庢垨绛変簬鏃х郴缁熺姸鎬侊紝璺宠繃鎺ㄩ�侊紝浠诲姟ID: {}, 鏂扮郴缁熺姸鎬�: {} ({}鈫抺}), 鏃х郴缁熺姸鎬�: {} ({})",
+//                    taskId,
+//                    task.getTaskStatus(), newTaskStatus.getInfo(), targetStatusCode,
+//                    currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus));
                 return true; // 杩斿洖true锛屽洜涓鸿繖涓嶇畻澶辫触锛屽彧鏄笉闇�瑕佹帹閫�
             }
-            
+            if(newTaskStatus.equals(TaskStatus.CANCELLED)){
+                if(LongUtil.isNotEmpty(emergency.getLegacyServiceOrdId()) ) {
+                    log.info("鍙栨秷杞繍浠诲姟: {}", emergency.getLegacyServiceOrdId());
+                    cancelTask(emergency.getLegacyServiceOrdId(), emergency.getCancelReason(), emergency.getCancelBy());
+                }
+                if(LongUtil.isNotEmpty(emergency.getLegacyDispatchOrdId())){
+                    log.info("鍙栨秷璋冨害鍗�: {}", emergency.getLegacyDispatchOrdId());
+                    cancelDispatch(emergency.getLegacyDispatchOrdId(), emergency.getCancelReason(), emergency.getCancelBy());
+                }
+            }
             // 鎺ㄩ�佺姸鎬佸埌鏃х郴缁�
             boolean result = updateLegacyTaskStatus(emergency.getLegacyDispatchOrdId(), targetStatusCode);
             
@@ -137,7 +154,11 @@
             return false;
         }
     }
-    
+
+    private void cancelDispatch(Long legacyDispatchOrdId, String cancelReason, String cancelReasonText) {
+        dispatchOrdService.cancelDispatchOrd(legacyDispatchOrdId, Integer.parseInt(cancelReason), cancelReasonText);
+    }
+
     /**
      * 鎵归噺鎺ㄩ�佷换鍔$姸鎬佸埌鏃х郴缁�
      * 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚帹閫�
@@ -161,11 +182,11 @@
                 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());
                 
                 int pageSuccessCount = 0;
                 for (SysTaskEmergency emergency : syncedTasks) {
@@ -179,25 +200,25 @@
                         Thread.sleep(200); // 姣忎釜璇锋眰闂撮殧0.2绉�
                     } catch (InterruptedException e) {
                         Thread.currentThread().interrupt();
-                        log.warn("銆愭柊鎺ㄦ棫銆戞帹閫佺姸鎬佽涓柇");
+//                        log.warn("銆愭柊鎺ㄦ棫銆戞帹閫佺姸鎬佽涓柇");
                         return totalSuccessCount + pageSuccessCount;
                     }
                 }
                 
                 totalSuccessCount += pageSuccessCount;
-                log.info("鐘舵�佺 {} 椤垫帹閫佸畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
-                    (offset / pageSize) + 1, syncedTasks.size(), 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) {
@@ -205,7 +226,52 @@
             return 0;
         }
     }
-    
+
+
+    private void cancelTask(Long serviceOrderId, String cancelReason, String cancelBy){
+        // 鍙栨秷浠诲姟锛屾洿鏂癝QL Server涓殑ServiceOrder琛�
+        try {
+            if (LongUtil.isEmpty(serviceOrderId)) {
+                log.warn("ServiceOrderID涓虹┖锛屾棤娉曞彇娑堜换鍔�");
+                return;
+            }
+            
+            // 瑙f瀽鍙栨秷鍘熷洜ID
+            Integer cancelReasonId = null;
+            String cancelReasonText = "";
+            
+            if (cancelReason != null && !cancelReason.isEmpty()) {
+                try {
+                    cancelReasonId = Integer.parseInt(cancelReason);
+                    // 浠庢暟鎹瓧鍏告煡璇㈠彇娑堝師鍥犳枃鏈�
+                    String dictLabel = sysDictDataService.selectDictLabel("task_cancel_reason", cancelReason);
+                    if (dictLabel != null && !dictLabel.isEmpty()) {
+                        cancelReasonText = "[鍙栨秷鎿嶄綔:" + (cancelBy != null ? cancelBy : "绯荤粺") + "] " + dictLabel;
+                    } else {
+                        cancelReasonText = "[鍙栨秷鎿嶄綔:" + (cancelBy != null ? cancelBy : "绯荤粺") + "]";
+                    }
+                } catch (NumberFormatException e) {
+                    log.warn("鍙栨秷鍘熷洜ID鏍煎紡閿欒: {}", cancelReason);
+                    cancelReasonText = "[鍙栨秷鎿嶄綔:" + (cancelBy != null ? cancelBy : "绯荤粺") + "] " + cancelReason;
+                }
+            } else {
+                cancelReasonText = "[鍙栨秷鎿嶄綔:" + (cancelBy != null ? cancelBy : "绯荤粺") + "]";
+            }
+            
+            // 璋冪敤Service鏇存柊ServiceOrder琛�
+            int rows = serviceOrderService.updateServiceOrderCancelInfo(serviceOrderId, cancelReasonId, cancelReasonText);
+            
+            if (rows > 0) {
+                log.info("鎴愬姛鏇存柊鏃х郴缁烻erviceOrder鍙栨秷淇℃伅锛孲erviceOrdID: {}, 鍙栨秷鍘熷洜ID: {}, 鍙栨秷鍘熷洜鏂囨湰: {}", 
+                    serviceOrderId, cancelReasonId, cancelReasonText);
+            } else {
+                log.warn("鏇存柊鏃х郴缁烻erviceOrder鍙栨秷淇℃伅澶辫触锛屾湭鎵惧埌瀵瑰簲璁㈠崟锛孲erviceOrdID: {}", serviceOrderId);
+            }
+            
+        } catch (Exception e) {
+            log.error("鏇存柊鏃х郴缁烻erviceOrder鍙栨秷淇℃伅寮傚父锛孲erviceOrdID: {}", serviceOrderId, e);
+        }
+    }
     /**
      * 鏇存柊鏃х郴缁熻皟搴﹀崟鐘舵�侊紙鐩存帴鎿嶄綔SQL Server鏁版嵁搴擄級
      * 
@@ -217,13 +283,13 @@
         try {
             // 鐩存帴閫氳繃Service璋冪敤Mapper鏇存柊SQL Server鏁版嵁搴�
             int rows = dispatchOrdService.updateDispatchOrdState(dispatchOrdId, statusCode);
-            log.debug("鏇存柊鏃х郴缁熺姸鎬侊紝DispatchOrdID: {}, StateInt: {}", dispatchOrdId, statusCode);
+//            log.debug("鏇存柊鏃х郴缁熺姸鎬侊紝DispatchOrdID: {}, StateInt: {}", dispatchOrdId, statusCode);
             if (rows > 0) {
-                log.debug("鏇存柊鏃х郴缁熺姸鎬佹垚鍔燂紝DispatchOrdID: {}, StateInt: {}", 
-                    dispatchOrdId, statusCode);
+//                log.debug("鏇存柊鏃х郴缁熺姸鎬佹垚鍔燂紝DispatchOrdID: {}, StateInt: {}",
+//                    dispatchOrdId, statusCode);
                 return true;
             } else {
-                log.warn("鏇存柊鏃х郴缁熺姸鎬佸け璐ワ紝鏈壘鍒板搴旇皟搴﹀崟锛孌ispatchOrdID: {}", dispatchOrdId);
+//                log.warn("鏇存柊鏃х郴缁熺姸鎬佸け璐ワ紝鏈壘鍒板搴旇皟搴﹀崟锛孌ispatchOrdID: {}", dispatchOrdId);
                 return false;
             }
             

--
Gitblit v1.9.1