From 5d75fcaea0a3774052b7484a4ffe755258502363 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 06 十二月 2025 20:49:11 +0800
Subject: [PATCH] fix:开始执行人员就绪按钮

---
 ruoyi-system/src/main/java/com/ruoyi/system/listener/DispatchOrdRunningListener.java |  195 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 195 insertions(+), 0 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/DispatchOrdRunningListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/DispatchOrdRunningListener.java
new file mode 100644
index 0000000..861d5a9
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/DispatchOrdRunningListener.java
@@ -0,0 +1,195 @@
+package com.ruoyi.system.listener;
+
+import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.domain.enums.TaskStatus;
+import com.ruoyi.system.event.TaskStatusChangedEvent;
+import com.ruoyi.system.mapper.LegacyTransferSyncMapper;
+import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
+import com.ruoyi.system.mapper.SysTaskMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.system.utils.TaskStatusPushConverter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * 璋冨害鍗曠姸鎬佸彉鏇磋褰曠洃鍚櫒
+ * 鐩戝惉浠诲姟鐘舵�佸彉鏇翠簨浠讹紝骞跺皢鐘舵�佸彉鏇磋褰曞悓姝ュ埌SQL Server鐨凞ispatchOrd_Running琛�
+ * 
+ * @author ruoyi
+ * @date 2025-12-05
+ */
+@Component
+public class DispatchOrdRunningListener {
+    
+    private static final Logger log = LoggerFactory.getLogger(DispatchOrdRunningListener.class);
+    
+    @Autowired
+    private LegacySystemConfig legacyConfig;
+    
+    @Autowired
+    private SysTaskMapper sysTaskMapper;
+    
+    @Autowired
+    private SysTaskEmergencyMapper sysTaskEmergencyMapper;
+    
+    @Autowired
+    private LegacyTransferSyncMapper legacyTransferSyncMapper;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+    
+    /**
+     * 鐩戝惉浠诲姟鐘舵�佸彉鏇翠簨浠�
+     * 
+     * @param event 浠诲姟鐘舵�佸彉鏇翠簨浠�
+     */
+    @Async
+    @EventListener
+    public void handleTaskStatusChangedEvent(TaskStatusChangedEvent event) {
+        try {
+            log.info("鏀跺埌浠诲姟鐘舵�佸彉鏇翠簨浠讹紝鍑嗗鍚屾鍒癉ispatchOrd_Running锛屼换鍔D锛歿}锛屾棫鐘舵�侊細{}锛屾柊鐘舵�侊細{}", 
+                    event.getTaskId(), event.getOldStatus(), event.getNewStatus());
+            
+            // 妫�鏌ユ棫绯荤粺鍚屾鏄惁鍚敤
+            if (!legacyConfig.isEnabled()) {
+                log.debug("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩嘍ispatchOrd_Running鍚屾锛屼换鍔D: {}", event.getTaskId());
+                return;
+            }
+            
+            // 鏌ヨ浠诲姟淇℃伅
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(event.getTaskId());
+            if (task == null) {
+                log.error("浠诲姟涓嶅瓨鍦紝浠诲姟ID: {}", event.getTaskId());
+                return;
+            }
+            
+            // 鍙鐞嗘�ユ晳杞繍浠诲姟
+            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
+                log.debug("闈炴�ユ晳杞繍浠诲姟锛岃烦杩嘍ispatchOrd_Running鍚屾锛屼换鍔D: {}", event.getTaskId());
+                return;
+            }
+            
+            // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
+            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(event.getTaskId());
+            if (emergency == null) {
+                log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", event.getTaskId());
+                return;
+            }
+            
+            // 蹇呴』宸茬粡鍚屾杩囪皟搴﹀崟
+            if (emergency.getLegacyDispatchOrdId() == null || emergency.getLegacyDispatchOrdId() <= 0) {
+                log.debug("璋冨害鍗曟湭鍚屾鍒版棫绯荤粺锛岃烦杩嘍ispatchOrd_Running鍚屾锛屼换鍔D: {}", event.getTaskId());
+                return;
+            }
+            
+            // 鑾峰彇鏂扮郴缁熺姸鎬�
+            TaskStatus newTaskStatus = TaskStatus.getByCode(event.getNewStatus());
+            if (newTaskStatus == null) {
+                log.error("鏃犳晥鐨勪换鍔$姸鎬侊紝浠诲姟ID: {}, 鐘舵�佺爜: {}", event.getTaskId(), event.getNewStatus());
+                return;
+            }
+
+            SysUser user= sysUserMapper.selectUserById(event.getOperatorId());
+            if(user==null){
+                log.error("鎿嶄綔浜轰笉瀛樺湪锛屼换鍔D: {}, 鎿嶄綔浜篒D: {}", event.getTaskId(), event.getOperatorId());
+                return;
+            }
+            Integer oaUserId=user.getOaUserId();
+            
+            // 杞崲涓烘棫绯荤粺鐘舵�佺爜
+            Integer legacyStatusCode = TaskStatusPushConverter.convertToLegacyStatus(newTaskStatus);
+            if (legacyStatusCode == null) {
+                log.debug("浠诲姟鐘舵�佷笉闇�瑕佸悓姝ュ埌鏃х郴缁燂紝浠诲姟ID: {}, 鐘舵��: {}",
+                    event.getTaskId(), newTaskStatus.getInfo());
+                return;
+            }
+            
+            // 鎻掑叆鐘舵�佸彉鏇磋褰曞埌DispatchOrd_Running琛�
+            syncDispatchOrdRunning(
+                emergency.getLegacyDispatchOrdId(),
+                legacyStatusCode,
+                new Date(), // 浣跨敤褰撳墠鏃堕棿浣滀负鐘舵�佸彉鏇存椂
+                    oaUserId.longValue(),
+                event.getLatitude(),
+                event.getLongitude(),
+                event.getAddress()
+            );
+            
+        } catch (Exception e) {
+            log.error("澶勭悊浠诲姟鐘舵�佸彉鏇翠簨浠跺苟鍚屾鍒癉ispatchOrd_Running澶辫触锛屼换鍔D: {}", event.getTaskId(), e);
+            // 涓嶆姏鍑哄紓甯革紝閬垮厤褰卞搷涓绘祦绋�
+        }
+    }
+    
+    /**
+     * 鍚屾鐘舵�佸彉鏇磋褰曞埌DispatchOrd_Running琛�
+     * 
+     * @param dispatchOrdId 璋冨害鍗旾D
+     * @param statusCode 鐘舵�佺爜
+     * @param statusTime 鐘舵�佹椂闂�
+     * @param operatorId 鎿嶄綔浜篒D
+     * @param latitude 绾害
+     * @param longitude 缁忓害
+     * @param address 鍦板潃
+     */
+    private void syncDispatchOrdRunning(Long dispatchOrdId, Integer statusCode, 
+                                        Date statusTime, Long operatorId,
+                                        Double latitude, Double longitude, String address) {
+        try {
+            // 鍒ゆ柇鏄惁鏈塆PS淇℃伅
+            boolean hasGps = (latitude != null && longitude != null);
+            if (hasGps) {
+                log.info("寮�濮嬪悓姝ョ姸鎬佸彉鏇磋褰曞埌DispatchOrd_Running锛孌ispatchOrdID: {}, 鐘舵�佺爜: {} ({}), GPS: [{}, {}]", 
+                    dispatchOrdId, statusCode, TaskStatusPushConverter.getLegacyStatusDescription(statusCode),
+                    latitude, longitude);
+            } else {
+                log.info("寮�濮嬪悓姝ョ姸鎬佸彉鏇磋褰曞埌DispatchOrd_Running锛孌ispatchOrdID: {}, 鐘舵�佺爜: {} ({}), 鏃燝PS淇℃伅", 
+                    dispatchOrdId, statusCode, TaskStatusPushConverter.getLegacyStatusDescription(statusCode));
+            }
+            
+            // 璋冪敤Mapper鎻掑叆璁板綍
+            int rows = legacyTransferSyncMapper.insertDispatchOrdRunning(
+                dispatchOrdId,
+                statusCode,
+                statusTime,
+                operatorId,
+                latitude,
+                longitude,
+                address
+            );
+            
+            if (rows > 0) {
+                if (hasGps) {
+                    log.info("鐘舵�佸彉鏇磋褰曞凡鍚屾鍒癉ispatchOrd_Running锛孌ispatchOrdID: {}, 鐘舵�佺爜: {} ({}), GPS: [{}, {}], 鍦板潃: {}", 
+                        dispatchOrdId, 
+                        statusCode, 
+                        TaskStatusPushConverter.getLegacyStatusDescription(statusCode),
+                        latitude, 
+                        longitude,
+                        address != null ? address : "鏃�");
+                } else {
+                    log.info("鐘舵�佸彉鏇磋褰曞凡鍚屾鍒癉ispatchOrd_Running锛孌ispatchOrdID: {}, 鐘舵�佺爜: {} ({}), 鏃燝PS淇℃伅", 
+                        dispatchOrdId, 
+                        statusCode, 
+                        TaskStatusPushConverter.getLegacyStatusDescription(statusCode));
+                }
+            } else {
+                log.warn("鍚屾鐘舵�佸彉鏇磋褰曞け璐ワ紝鏈彃鍏ユ暟鎹紝DispatchOrdID: {}", dispatchOrdId);
+            }
+            
+        } catch (Exception e) {
+            log.error("鍚屾鐘舵�佸彉鏇磋褰曞埌DispatchOrd_Running寮傚父锛孌ispatchOrdID: {}, 鐘舵�佺爜: {}", 
+                dispatchOrdId, statusCode, e);
+            // 涓嶆姏鍑哄紓甯革紝閬垮厤褰卞搷涓绘祦绋�
+        }
+    }
+}

--
Gitblit v1.9.1