From 0a3eed02e78dfeeb7763a4b62992eefcd1f5a0ca Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期二, 23 十二月 2025 23:33:34 +0800
Subject: [PATCH] feat: 优化状态变更时实时推送
---
ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java | 197 ++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 177 insertions(+), 20 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 e847ee4..d343005 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,8 +1,11 @@
package com.ruoyi.system.listener;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.utils.DeptUtil;
+import com.ruoyi.common.utils.LongUtil;
import com.ruoyi.system.domain.*;
-import com.ruoyi.system.event.TaskDispatchSyncEvent;
-import com.ruoyi.system.service.ISysTaskAssigneeService;
+import com.ruoyi.system.event.*;
+import com.ruoyi.system.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,16 +14,11 @@
import org.springframework.stereotype.Component;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.system.event.TaskCreatedEvent;
-import com.ruoyi.system.event.TaskAssignedEvent;
-import com.ruoyi.system.event.TaskStatusChangedEvent;
import com.ruoyi.system.mapper.SysMessageMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysTaskMapper;
import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.system.service.INotifyTaskService;
-import com.ruoyi.system.service.INotifyDispatchService;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -67,6 +65,9 @@
@Autowired
private ISysTaskAssigneeService taskAssigneeService;
+ @Autowired
+ private ITaskStatusPushService taskStatusPushService;
+
@Async
@EventListener
public void handleTaskDispatchEvent(TaskDispatchSyncEvent event) {
@@ -78,9 +79,16 @@
List<SysTaskAssignee> assignees=taskAssigneeService.getAssigneesByTaskId(emergency.getTaskId());
if(assignees!=null && !assignees.isEmpty()){
List<Long> assigneeIds=assignees.stream().map(SysTaskAssignee::getUserId).collect(Collectors.toList());
- sendDispatchNotify(assigneeIds, task.getCreatorId(), event.getTaskId(), task.getTaskCode(), buildNotifyContent(task, emergency));
+ task.setEmergencyInfo( emergency);
+ sendDispatchNotify(assigneeIds, task.getCreatorId(), event.getTaskId(),task.getShowTaskCode(), buildNotifyContent(task, emergency));
}
}
+
+ Long taskId= event.getTaskId();
+ Long dispatchOrdId= event.getDispatchOrderId();
+ Long serviceOrdId= event.getServiceOrderId();
+ Integer oaUserID= event.getOaUserId();
+ legacySystemSyncService.syncTaskAttachment(taskId, dispatchOrdId, serviceOrdId, oaUserID);
}catch (Exception ex){
log.error("澶勭悊浠诲姟娲惧彂鍚屾浜嬩欢澶辫触", ex);
@@ -129,6 +137,118 @@
}
+ @Autowired
+ private ISysDeptService sysDeptService;
+ /**
+ * 鍙湁鏈嶅姟鍗曪紝涓斿彧鍦ㄥ箍宸炲鐨勬湇鍔″崟锛屾病鏈夎皟搴﹀崟
+ * @param event
+ */
+ @Async
+ @EventListener
+ public void handleTaskOnlyServiceSync(TaskDispatchSyncEvent event){
+ //缁欒礋璐d汉鍙戦�佹秷鎭�
+ Long taskId= event.getTaskId();
+ SysTask task=sysTaskMapper.selectSysTaskByTaskId(taskId);
+ SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+ if(emergency != null){
+ task.setEmergencyInfo( emergency);
+ Long deptId=task.getDeptId();
+ if(!deptId.equals(DeptUtil.GUANGZHOU_DEPT_ID)){
+ //鎵惧埌璇ラ儴闂ㄧ殑璐熻矗浜�
+ SysDept dept= sysDeptService.selectDeptById(deptId);
+ if(dept!=null){
+ String serviceOrdClass= dept.getServiceOrderClass();
+ String dispatchOrdClass= dept.getDispatchOrderClass();
+ List<SysUser> user=sysUserMapper.selectUsersByOrderClassAndCanViewAllConsult(serviceOrdClass);
+ if(user!=null && !user.isEmpty()){
+ List<NotifyTask> tasks=new ArrayList<>();
+ String buildNotifyContent = buildUnAssignNotifyContent(task, emergency);
+ for(SysUser u:user){
+ NotifyTask notifyTask= this.sendTaskUnAssignNotify(u.getUserId(),u.getNickName(),u.getPhonenumber(),taskId,task.getShowTaskCode(),"鏈嶅姟鍗曟淳鍙�",buildNotifyContent);
+ tasks.add(notifyTask);
+ }
+ if(!tasks.isEmpty()){
+ int successCount = notifyDispatchService.dispatchNotifies(tasks);
+ log.info("浠诲姟鏈垎閰嶆秷鎭凡鍙戦�侊紝鍙戦�佹垚鍔熸暟閲忥細{}", successCount);
+ }
+ }
+ }
+ }
+
+
+
+ }
+ }
+
+ private String buildUnAssignNotifyContent(SysTask task, SysTaskEmergency emergency){
+ //娲惧彂鍗曞彿
+ String dispatchCode=emergency.getDispatchCode();
+ String taskCode=task.getTaskCode();
+ String orderCode=dispatchCode;
+ if(dispatchCode==null){
+ orderCode=taskCode;
+ }
+ Date dispatchTime=task.getPlanedStartTime();
+
+ StringBuilder content = new StringBuilder();
+ content.append("鎮ㄦ湁鏂扮殑鏈嶅姟鍗曪紝浠诲姟鍗曞彿:"+orderCode);
+ // 娣诲姞鍑哄彂鍦颁俊鎭�
+ String departure = null;
+ if (emergency != null && StringUtils.isNotEmpty(emergency.getHospitalOutName())) {
+ departure = emergency.getHospitalOutName();
+ } else if (StringUtils.isNotEmpty(task.getDepartureAddress())) {
+ departure = task.getDepartureAddress();
+ }
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ content.append("锛屽嚭鍙戞椂闂�:").append(df.format(dispatchTime));
+
+ // 娣诲姞鐩殑鍦颁俊鎭�
+ String destination = null;
+ if (emergency != null && StringUtils.isNotEmpty(emergency.getHospitalInName())) {
+ destination = emergency.getHospitalInName();
+ } else if (StringUtils.isNotEmpty(task.getDestinationAddress())) {
+ destination = task.getDestinationAddress();
+ }
+
+ if (departure != null || destination != null) {
+ if (departure != null) {
+ content.append("鍑哄彂鍦帮細").append(departure);
+ }
+ if (destination != null) {
+ if (content.length() > 0) content.append("锛�");
+ content.append("鐩殑鍦帮細").append(destination);
+ }
+ content.append("锛岃鍙婃椂澶勭悊銆�");
+ }
+
+ return content.toString();
+ }
+
+
+
+
+ @Autowired
+ private ILegacySystemSyncService legacySystemSyncService;
+
+ @Async
+ @EventListener
+ public void handleTaskUpdateEvent(TaskUpdateEvent event){
+ log.info("鏀跺埌浠诲姟鏇存柊浜嬩欢锛屼换鍔D锛歿}锛屼换鍔$紪鍙凤細{}", event.getTaskId(), event.getTaskCode());
+ legacySystemSyncService.resyncDispatchOrderToLegacy(event.getTaskId());
+
+ }
+ //鍦ㄨ繖閲岀洃鍚淳鍙戠殑浜嬩欢
+ @Async
+ @EventListener
+ public void handleTaskServiceOrderSyncEvent(TaskServiceOrderSyncEvent event) {
+// log.info("鏀跺埌浠诲姟鏈嶅姟鍗曞悓姝ヤ簨浠讹紝浠诲姟ID锛歿}锛屼换鍔$紪鍙凤細{}锛屾湇鍔″崟ID锛歿}", event.getTaskId(), event.getTaskCode(), event.getServiceOrderId());
+ Long dispatchOrderId= legacySystemSyncService.syncDispatchOrderToLegacy(event.getTaskId());
+// if(LongUtil.isNotEmpty(dispatchOrderId)){
+// //鏇存柊needsync涓�0
+//
+// }
+ }
+
/**
* 鐩戝惉浠诲姟鍒嗛厤浜嬩欢
@@ -161,7 +281,7 @@
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());
@@ -170,7 +290,7 @@
// 鏋勫缓閫氱煡鍐呭
String notifyContent = buildNotifyContent(task, emergency);
- this.sendDispatchNotify(event.getAssigneeIds(), creatorId, event.getTaskId(), event.getTaskCode(), notifyContent);
+ this.sendDispatchNotify(event.getAssigneeIds(), creatorId, event.getTaskId(),task.getShowTaskCode(), notifyContent);
} catch (Exception e) {
@@ -237,6 +357,23 @@
taskId, createdTasks.size(), successCount);
}
}
+
+ private NotifyTask sendTaskUnAssignNotify(Long userId,String nickName,String phone,
+ Long taskId,String taskCode,String title,String notifyContent) {
+ NotifyTask notifyTask = new NotifyTask();
+ notifyTask.setTaskId(taskId);
+ notifyTask.setTaskCode(taskCode);
+ notifyTask.setNotifyType(NotifyTask.NOTIFY_TASK_UNASSIGN);
+ notifyTask.setUserId(userId);
+ notifyTask.setUserName(nickName);
+ notifyTask.setUserPhone(phone);
+ notifyTask.setTitle(title);
+ notifyTask.setContent(notifyContent);
+ notifyTask.setCreateBy( "绯荤粺");
+
+ NotifyTask created = notifyTaskService.createNotifyTask(notifyTask);
+ return created;
+ }
/**
* 鏋勫缓閫氱煡鍐呭
*/
@@ -284,6 +421,8 @@
return content.toString();
}
+ @Autowired
+ private ITaskStatusSyncService taskStatusSyncService;
/**
* 鐩戝惉浠诲姟鐘舵�佸彉鏇翠簨浠�
*
@@ -292,26 +431,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);
@@ -319,7 +476,7 @@
log.warn("鎵句笉鍒扮敤鎴蜂俊鎭紝鐢ㄦ埛ID锛歿}", receiverId);
continue;
}
-
+
// 鍒涘缓娑堟伅
SysMessage message = new SysMessage();
message.setMessageType("STATUS");
@@ -334,13 +491,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