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