From 40a8157440e3b906da8f52e07d939d78c3f4c313 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 12 四月 2026 16:14:06 +0800
Subject: [PATCH] feat: 任务增加统计、同步增加通知
---
ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java | 121 ++++++++++++++++++++++++++++++++++------
1 files changed, 103 insertions(+), 18 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java
index 588e0e7..5b20aae 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.listener;
import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.config.WechatConfig;
import com.ruoyi.common.utils.DeptUtil;
import com.ruoyi.common.utils.LongUtil;
import com.ruoyi.system.domain.*;
@@ -57,6 +58,12 @@
@Autowired
private INotifyDispatchService notifyDispatchService;
+ @Autowired
+ private IQyWechatService qyWechatService;
+
+ @Autowired
+ private WechatConfig wechatConfig;
+
/** 寰呭噯澶囩姸鎬� - 鍙互鍙戦�佺煭淇¢�氱煡 */
private static final String TASK_STATUS_PENDING = "PENDING";
/** 寰呭噯澶囩姸鎬� - 鍙互鍙戦�佺煭淇¢�氱煡 */
@@ -64,6 +71,9 @@
@Autowired
private ISysTaskAssigneeService taskAssigneeService;
+
+ @Autowired
+ private ITaskStatusPushService taskStatusPushService;
@Async
@EventListener
@@ -80,7 +90,7 @@
sendDispatchNotify(assigneeIds, task.getCreatorId(), event.getTaskId(),task.getShowTaskCode(), buildNotifyContent(task, emergency));
}
}
-
+ syncDispatchActualStartTime(emergency, task);
Long taskId= event.getTaskId();
Long dispatchOrdId= event.getDispatchOrderId();
Long serviceOrdId= event.getServiceOrderId();
@@ -91,6 +101,19 @@
log.error("澶勭悊浠诲姟娲惧彂鍚屾浜嬩欢澶辫触", ex);
}
}
+
+ private void syncDispatchActualStartTime(SysTaskEmergency emergency, SysTask task) {
+ try {
+ //杩欓噷涔熷悓姝ヤ竴涓嬪疄闄呮椂闂�
+ Long disatpchOrdId = emergency.getLegacyDispatchOrdId();
+ Date actualTime = task.getActualStartTime();
+ legacySystemSyncService.updateDispatchActualTime(disatpchOrdId, actualTime);
+ }catch (Exception ex){
+ log.error("鍚屾瀹為檯鏃堕棿澶辫触", ex);
+ }
+ }
+
+
/**
* 鐩戝惉浠诲姟鍒涘缓浜嬩欢
*
@@ -250,6 +273,7 @@
/**
* 鐩戝惉浠诲姟鍒嗛厤浜嬩欢
* 鍒涘缓閫氱煡浠诲姟锛岀敱閫氱煡鍒嗗彂鏈嶅姟鍐冲畾鍙戦�佹笭閬�
+ * 鍚屾椂鐩存帴鍙戦�佷紒涓氬井淇¢�氱煡
*
* @param event 浠诲姟鍒嗛厤浜嬩欢
*/
@@ -279,20 +303,61 @@
Long creatorId = task.getCreatorId();
String taskStatus = task.getTaskStatus();
task.setEmergencyInfo(emergency);
- // 浠呭湪寰呭噯澶囩姸鎬佷笅鍙戦�侀�氱煡
- if (!TASK_STATUS_PENDING.equals(taskStatus) && !TASK_STATUS_PREPARING.equals(taskStatus)) {
- log.info("浠诲姟鐘舵��({})闈炲緟鍑嗗鐘舵�侊紝璺宠繃閫氱煡锛宼askId={}", taskStatus, event.getTaskId());
- return;
- }
-
+
// 鏋勫缓閫氱煡鍐呭
String notifyContent = buildNotifyContent(task, emergency);
- this.sendDispatchNotify(event.getAssigneeIds(), creatorId, event.getTaskId(),task.getShowTaskCode(), notifyContent);
+
+ // 鐩存帴鍙戦�佷紒涓氬井淇¢�氱煡缁欐墽琛屼汉鍛�
+ sendQyWechatNotifyToAssignees(event.getAssigneeIds(), creatorId, event.getTaskId(), notifyContent);
+
+ // 鍚屾椂璧板師鏈夐�氱煡鍒嗗彂娴佺▼锛堢珯鍐呮秷鎭瓑锛�
+ // 浠呭湪寰呭噯澶囩姸鎬佷笅鍙戦�佸叾浠栭�氱煡
+ if (TASK_STATUS_PENDING.equals(taskStatus) || TASK_STATUS_PREPARING.equals(taskStatus)) {
+ this.sendDispatchNotify(event.getAssigneeIds(), creatorId, event.getTaskId(), task.getShowTaskCode(), notifyContent);
+ }
} catch (Exception e) {
log.error("澶勭悊浠诲姟鍒嗛厤浜嬩欢澶辫触", e);
}
+ }
+
+ /**
+ * 鐩存帴鍙戦�佷紒涓氬井淇¢�氱煡缁欐墽琛屼汉鍛�
+ */
+ private void sendQyWechatNotifyToAssignees(List<Long> assigneeIds, Long creatorId, Long taskId, String content) {
+ String appId = wechatConfig.getAppId();
+ String pathPage = "/pagesTask/detail?id=" + taskId;
+ int successCount = 0;
+
+ for (Long assigneeId : assigneeIds) {
+ // 鎺掗櫎鍒涘缓浜�
+ if (creatorId != null && creatorId.equals(assigneeId)) {
+ log.debug("璺宠繃鍒涘缓浜猴紝涓嶅彂閫佷紒涓氬井淇¢�氱煡锛寀serId={}", assigneeId);
+ continue;
+ }
+
+ try {
+ boolean success = qyWechatService.sendNotifyMessage(
+ assigneeId,
+ "杞繍鍗曚换鍔℃淳鍗曢�氱煡",
+ content,
+ appId,
+ pathPage
+ );
+
+ if (success) {
+ successCount++;
+ log.info("浼佷笟寰俊娲惧崟閫氱煡鍙戦�佹垚鍔燂紝taskId={}, userId={}", taskId, assigneeId);
+ } else {
+ log.warn("浼佷笟寰俊娲惧崟閫氱煡鍙戦�佸け璐ワ紝taskId={}, userId={}", taskId, assigneeId);
+ }
+ } catch (Exception e) {
+ log.error("浼佷笟寰俊娲惧崟閫氱煡鍙戦�佸紓甯革紝taskId={}, userId={}", taskId, assigneeId, e);
+ }
+ }
+
+ log.info("浼佷笟寰俊娲惧崟閫氱煡鍙戦�佸畬鎴愶紝taskId={}, 鎴愬姛鏁伴噺={}/{}", taskId, successCount, assigneeIds.size());
}
/**
@@ -418,6 +483,8 @@
return content.toString();
}
+ @Autowired
+ private ITaskStatusSyncService taskStatusSyncService;
/**
* 鐩戝惉浠诲姟鐘舵�佸彉鏇翠簨浠�
*
@@ -426,26 +493,44 @@
@Async
@EventListener
public void handleTaskStatusChangedEvent(TaskStatusChangedEvent event) {
+
+ sendTaskStatusToLocal(event);
+ sendTaskStatusToLegacy(event.getTaskId());
+
+ }
+
+ private void sendTaskStatusToLegacy(Long taskId) {
+ try{
+ log.info("浠诲姟鐘舵�佸悓姝ュ埌鏃х郴缁熷紑濮� taskId:{}",taskId);
+ taskStatusPushService.pushTaskStatusToLegacy(taskId);
+ }catch (Exception e){
+ log.error("浠诲姟鐘舵�佸悓姝ュ埌鏃х郴缁熷紓甯� taskId:{}",taskId, e);
+ }
+ }
+
+
+
+ private void sendTaskStatusToLocal(TaskStatusChangedEvent event) {
try {
- log.info("鏀跺埌浠诲姟鐘舵�佸彉鏇翠簨浠讹紝浠诲姟ID锛歿}锛屾棫鐘舵�侊細{}锛屾柊鐘舵�侊細{}",
+ log.info("鏀跺埌浠诲姟鐘舵�佸彉鏇翠簨浠讹紝浠诲姟ID锛歿}锛屾棫鐘舵�侊細{}锛屾柊鐘舵�侊細{}",
event.getTaskId(), event.getOldStatus(), event.getNewStatus());
-
+ //鍙戣捣鐘舵�佸悓姝�
// 鏋勫缓鐘舵�佸彉鏇村唴瀹�
String statusContent = getStatusChangeContent(event.getNewStatus(), event.getNewStatusDesc());
-
+
// 鏀堕泦鎵�鏈夐渶瑕侀�氱煡鐨勭敤鎴稩D锛堟墽琛屼汉+鍒涘缓浜猴紝鍘婚噸锛�
java.util.Set<Long> receiverIds = new java.util.HashSet<>();
-
+
// 娣诲姞鎵ц浜�
if (event.getAssigneeIds() != null) {
receiverIds.addAll(event.getAssigneeIds());
}
-
+
// 娣诲姞鍒涘缓浜猴紙濡傛灉涓嶆槸鎵ц浜猴級
if (event.getCreatorId() != null) {
receiverIds.add(event.getCreatorId());
}
-
+
// 缁欐瘡涓敤鎴峰彂閫佹秷鎭�
for (Long receiverId : receiverIds) {
SysUser user = sysUserMapper.selectUserById(receiverId);
@@ -453,7 +538,7 @@
log.warn("鎵句笉鍒扮敤鎴蜂俊鎭紝鐢ㄦ埛ID锛歿}", receiverId);
continue;
}
-
+
// 鍒涘缓娑堟伅
SysMessage message = new SysMessage();
message.setMessageType("STATUS");
@@ -468,13 +553,13 @@
message.setIsRead("0");
message.setCreateTime(DateUtils.getNowDate());
message.setDelFlag("0");
-
+
// 淇濆瓨娑堟伅
sysMessageMapper.insertSysMessage(message);
- log.info("浠诲姟鐘舵�佸彉鏇存秷鎭凡淇濆瓨锛屾秷鎭疘D锛歿}锛屾柊鐘舵�侊細{}锛屾帴鏀朵汉锛歿}",
+ log.info("浠诲姟鐘舵�佸彉鏇存秷鎭凡淇濆瓨锛屾秷鎭疘D锛歿}锛屾柊鐘舵�侊細{}锛屾帴鏀朵汉锛歿}",
message.getMessageId(), event.getNewStatus(), user.getNickName());
}
-
+
} catch (Exception e) {
log.error("澶勭悊浠诲姟鐘舵�佸彉鏇翠簨浠跺け璐�", e);
}
--
Gitblit v1.9.1