From c5ac97682e3b4ca748541ace97cb37a2295bd81e Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 19 三月 2026 22:46:29 +0800
Subject: [PATCH] feat: 增加GPS清理后台任务
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 103 insertions(+), 15 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 93a4c36..af792e6 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,7 +57,6 @@
* @return 鏄惁鎺ㄩ�佹垚鍔�
*/
@Override
- @Transactional
public boolean pushTaskStatusToLegacy(Long taskId) {
if (!legacyConfig.isEnabled()) {
// log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囩姸鎬佹帹閫侊紝浠诲姟ID: {}", taskId);
@@ -93,8 +101,8 @@
// 杞崲涓烘棫绯荤粺鐘舵�佺爜
Integer targetStatusCode = TaskStatusPushConverter.convertToLegacyStatus(newTaskStatus);
if (targetStatusCode == null) {
-// log.debug("銆愭柊鎺ㄦ棫銆戜换鍔$姸鎬佷笉闇�瑕佹帹閫佸埌鏃х郴缁燂紝浠诲姟ID: {}, 鐘舵��: {}",
-// taskId, newTaskStatus.getInfo());
+ log.debug("銆愭柊鎺ㄦ棫銆戜换鍔$姸鎬佷笉闇�瑕佹帹閫佸埌鏃х郴缁燂紝浠诲姟ID: {}, 鐘舵��: {}",
+ taskId, newTaskStatus.getInfo());
return false;
}
@@ -116,16 +124,46 @@
// 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());
+ }
+ }
+
+ // 鍒ゆ柇鏄惁闇�瑕佹洿鏂板疄闄呭紑濮嬫椂闂达細浠庡緟澶勭悊杞埌鍏朵粬鐘舵�侊紙闄ゅ彇娑堝锛�
+ if ( targetStatusCode != 10 && task.getActualStartTime() != null) {
+ try {
+ int rows = dispatchOrdService.updateDispatchOrdActualDate(
+ emergency.getLegacyDispatchOrdId(),
+ task.getActualStartTime());
+ if (rows > 0) {
+ log.info("銆愭柊鎺ㄦ棫銆戞洿鏂板疄闄呭紑濮嬫椂闂存垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}, 瀹為檯寮�濮嬫椂闂�: {}",
+ taskId, emergency.getLegacyDispatchOrdId(), task.getActualStartTime());
+ } else {
+ log.warn("銆愭柊鎺ㄦ棫銆戞洿鏂板疄闄呭紑濮嬫椂闂村け璐ワ紝鏈壘鍒板搴旇皟搴﹀崟锛孌ispatchOrdID: {}",
+ emergency.getLegacyDispatchOrdId());
+ }
+ } catch (Exception e) {
+ log.error("銆愭柊鎺ㄦ棫銆戞洿鏂板疄闄呭紑濮嬫椂闂村紓甯革紝DispatchOrdID: {}",
+ emergency.getLegacyDispatchOrdId(), e);
+ // 涓嶆姏鍑哄紓甯革紝缁х画鎵ц鐘舵�佹帹閫�
+ }
+ }
// 鎺ㄩ�佺姸鎬佸埌鏃х郴缁�
boolean result = updateLegacyTaskStatus(emergency.getLegacyDispatchOrdId(), targetStatusCode);
- if (!result) {
-// log.info("銆愭柊鎺ㄦ棫銆戜换鍔$姸鎬佹帹閫佹垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}, 鏃х姸鎬�: {} ({}), 鏂扮姸鎬�: {} ({})",
-// taskId, emergency.getLegacyDispatchOrdId(),
-// currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus),
-// targetStatusCode, TaskStatusPushConverter.getLegacyStatusDescription(targetStatusCode));
-// } else {
+ if (result) {
+ log.info("銆愭柊鎺ㄦ棫銆戜换鍔$姸鎬佹帹閫佹垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}, 鏃х姸鎬�: {} ({}), 鏂扮姸鎬�: {} ({})",
+ taskId, emergency.getLegacyDispatchOrdId(),
+ currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus),
+ targetStatusCode, TaskStatusPushConverter.getLegacyStatusDescription(targetStatusCode));
+ } else {
log.error("銆愭柊鎺ㄦ棫銆戜换鍔$姸鎬佹帹閫佸け璐ワ紝浠诲姟ID: {}, DispatchOrdID: {}",
taskId, emergency.getLegacyDispatchOrdId());
}
@@ -137,7 +175,11 @@
return false;
}
}
-
+
+ private void cancelDispatch(Long legacyDispatchOrdId, String cancelReason, String cancelReasonText) {
+ dispatchOrdService.cancelDispatchOrd(legacyDispatchOrdId, Integer.parseInt(cancelReason), cancelReasonText);
+ }
+
/**
* 鎵归噺鎺ㄩ�佷换鍔$姸鎬佸埌鏃х郴缁�
* 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚帹閫�
@@ -153,7 +195,7 @@
try {
int totalSuccessCount = 0;
- int pageSize = 200; // 姣忛〉200鏉�
+ int pageSize = 5; // 姣忛〉10鏉�
int offset = 0;
while (true) {
@@ -205,7 +247,53 @@
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 {
+ log.info("鍙栨秷鍘熷洜 cancelReason:{},鍙栨秷浜�:{}", cancelReason, cancelBy);
+ 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.error("鍙栨秷鍘熷洜ID鏍煎紡閿欒: {}", cancelReason,e);
+ 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,10 +305,10 @@
try {
// 鐩存帴閫氳繃Service璋冪敤Mapper鏇存柊SQL Server鏁版嵁搴�
int rows = dispatchOrdService.updateDispatchOrdState(dispatchOrdId, statusCode);
-// log.debug("鏇存柊鏃х郴缁熺姸鎬侊紝DispatchOrdID: {}, StateInt: {}", dispatchOrdId, statusCode);
+ log.debug("鏇存柊鏃х郴缁熺姸鎬侊紝DispatchOrdID: {}, statusCode: {}", dispatchOrdId, statusCode);
if (rows > 0) {
-// log.debug("鏇存柊鏃х郴缁熺姸鎬佹垚鍔燂紝DispatchOrdID: {}, StateInt: {}",
-// dispatchOrdId, statusCode);
+ log.debug("鏇存柊鏃х郴缁熺姸鎬佹垚鍔燂紝DispatchOrdID: {}, statusCode: {}",
+ dispatchOrdId, statusCode);
return true;
} else {
// log.warn("鏇存柊鏃х郴缁熺姸鎬佸け璐ワ紝鏈壘鍒板搴旇皟搴﹀崟锛孌ispatchOrdID: {}", dispatchOrdId);
--
Gitblit v1.9.1