From 09faa36132c8cbada5327649875534ef01c1a3b1 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 11 十二月 2025 20:44:31 +0800
Subject: [PATCH] feat: 优化任务里程统计
---
ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java | 137 +++++++++++++++++++++++++++++++++++----------
1 files changed, 107 insertions(+), 30 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 c46d1d8..629bed0 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
@@ -11,6 +11,7 @@
import com.ruoyi.system.domain.SysMessage;
import com.ruoyi.system.domain.SysTask;
import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.domain.NotifyTask;
import com.ruoyi.system.event.TaskCreatedEvent;
import com.ruoyi.system.event.TaskAssignedEvent;
import com.ruoyi.system.event.TaskStatusChangedEvent;
@@ -19,9 +20,11 @@
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.IWechatTaskNotifyService;
+import com.ruoyi.system.service.INotifyTaskService;
+import com.ruoyi.system.service.INotifyDispatchService;
-import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.List;
/**
* 浠诲姟娑堟伅鐩戝惉鍣�
@@ -48,7 +51,15 @@
private SysTaskEmergencyMapper sysTaskEmergencyMapper;
@Autowired
- private IWechatTaskNotifyService wechatTaskNotifyService;
+ private INotifyTaskService notifyTaskService;
+
+ @Autowired
+ private INotifyDispatchService notifyDispatchService;
+
+ /** 寰呭噯澶囩姸鎬� - 鍙互鍙戦�佺煭淇¢�氱煡 */
+ private static final String TASK_STATUS_PENDING = "PENDING";
+ /** 寰呭噯澶囩姸鎬� - 鍙互鍙戦�佺煭淇¢�氱煡 */
+ private static final String TASK_STATUS_PREPARING = "PREPARING";
/**
* 鐩戝惉浠诲姟鍒涘缓浜嬩欢
@@ -96,6 +107,7 @@
/**
* 鐩戝惉浠诲姟鍒嗛厤浜嬩欢
+ * 鍒涘缓閫氱煡浠诲姟锛岀敱閫氱煡鍒嗗彂鏈嶅姟鍐冲畾鍙戦�佹笭閬�
*
* @param event 浠诲姟鍒嗛厤浜嬩欢
*/
@@ -111,10 +123,39 @@
log.warn("鎵ц浜篒D鍒楄〃涓虹┖锛屾棤娉曟帹閫佹秷鎭�");
return;
}
+
+ // 鏌ヨ浠诲姟淇℃伅
+ SysTask task = sysTaskMapper.selectSysTaskByTaskId(event.getTaskId());
+ if (task == null) {
+ log.warn("浠诲姟涓嶅瓨鍦紝taskId={}", event.getTaskId());
+ return;
+ }
+
+ // 鏌ヨ鎬ユ晳鎵╁睍淇℃伅锛堢敤浜庢瀯寤洪�氱煡鍐呭锛�
+ SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(event.getTaskId());
+
+ Long creatorId = task.getCreatorId();
+ String taskStatus = task.getTaskStatus();
- // 缁欐瘡涓墽琛屼汉鍙戦�佺珯鍐呮秷鎭�
- for (int i = 0; i < event.getAssigneeIds().size(); i++) {
- Long assigneeId = event.getAssigneeIds().get(i);
+ // 浠呭湪寰呭噯澶囩姸鎬佷笅鍙戦�侀�氱煡
+ if (!TASK_STATUS_PENDING.equals(taskStatus) && !TASK_STATUS_PREPARING.equals(taskStatus)) {
+ log.info("浠诲姟鐘舵��({})闈炲緟鍑嗗鐘舵�侊紝璺宠繃閫氱煡锛宼askId={}", taskStatus, event.getTaskId());
+ return;
+ }
+
+ // 鏋勫缓閫氱煡鍐呭
+ String notifyContent = buildNotifyContent(task, emergency);
+
+ // 鏀堕泦鍒涘缓鐨勯�氱煡浠诲姟
+ List<NotifyTask> createdTasks = new ArrayList<>();
+
+ // 涓烘瘡涓墽琛屼汉鍒涘缓閫氱煡浠诲姟
+ for (Long assigneeId : event.getAssigneeIds()) {
+ // 鎺掗櫎鍒涘缓浜�
+ if (creatorId != null && creatorId.equals(assigneeId)) {
+ log.debug("璺宠繃鍒涘缓浜猴紝涓嶅彂閫佷换鍔″垎閰嶉�氱煡锛寀serId={}", assigneeId);
+ continue;
+ }
// 鑾峰彇鎵ц浜轰俊鎭�
SysUser assignee = sysUserMapper.selectUserById(assigneeId);
@@ -123,33 +164,32 @@
continue;
}
- // 鍒涘缓绔欏唴娑堟伅
- SysMessage message = new SysMessage();
- message.setMessageType("PUSH");
- message.setMessageTitle("浠诲姟鎺ㄩ��");
- message.setMessageContent("鎮ㄦ湁鏂扮殑浠诲姟锛岃鍙婃椂澶勭悊");
- message.setTaskId(event.getTaskId());
- message.setTaskCode(event.getTaskCode());
- message.setReceiverId(assigneeId);
- message.setReceiverName(assignee.getNickName());
- message.setSenderId(event.getAssignerId());
- message.setSenderName(event.getAssignerName() != null ? event.getAssignerName() : "绯荤粺");
- message.setIsRead("0");
- message.setCreateTime(DateUtils.getNowDate());
- message.setDelFlag("0");
+ // 鍒涘缓閫氱煡浠诲姟锛堝甫闃查噸锛�
+ NotifyTask notifyTask = new NotifyTask();
+ notifyTask.setTaskId(event.getTaskId());
+ notifyTask.setTaskCode(event.getTaskCode());
+ notifyTask.setNotifyType(NotifyTask.NOTIFY_TYPE_TASK_ASSIGN);
+ notifyTask.setUserId(assigneeId);
+ notifyTask.setUserName(assignee.getNickName());
+ notifyTask.setUserPhone(assignee.getPhonenumber());
+ notifyTask.setTitle("浠诲姟鎺ㄩ��");
+ notifyTask.setContent(notifyContent);
+ notifyTask.setCreateBy(event.getAssignerName() != null ? event.getAssignerName() : "绯荤粺");
- // 淇濆瓨娑堟伅
- sysMessageMapper.insertSysMessage(message);
- log.info("浠诲姟鍒嗛厤娑堟伅宸蹭繚瀛橈紝娑堟伅ID锛歿}锛屾帴鏀朵汉锛歿}", message.getMessageId(), assignee.getNickName());
+ NotifyTask created = notifyTaskService.createNotifyTask(notifyTask);
+ if (created != null) {
+ createdTasks.add(created);
+ log.info("鍒涘缓閫氱煡浠诲姟鎴愬姛锛宨d={}, userId={}", created.getId(), assigneeId);
+ } else {
+ log.info("閫氱煡浠诲姟宸插瓨鍦紝璺宠繃锛宼askId={}, userId={}", event.getTaskId(), assigneeId);
+ }
}
- // 鍙戦�佸井淇¤闃呮秷鎭紙鎺掗櫎鍒涘缓浜猴級
- try {
- SysTask task = sysTaskMapper.selectSysTaskByTaskId(event.getTaskId());
- Long creatorId = task != null ? task.getCreatorId() : null;
- wechatTaskNotifyService.sendTaskNotifyMessage(event.getTaskId(), event.getAssigneeIds(), creatorId);
- } catch (Exception e) {
- log.error("澶勭悊浠诲姟鍒嗛厤浜嬩欢鏃跺彂閫佸井淇¤闃呮秷鎭け璐�", e);
+ // 鍒嗗彂閫氱煡浠诲姟
+ if (!createdTasks.isEmpty()) {
+ int successCount = notifyDispatchService.dispatchNotifies(createdTasks);
+ log.info("閫氱煡鍒嗗彂瀹屾垚锛宼askId={}锛屽垱寤烘暟閲�={}锛屾垚鍔熸暟閲�={}",
+ event.getTaskId(), createdTasks.size(), successCount);
}
} catch (Exception e) {
@@ -158,6 +198,43 @@
}
/**
+ * 鏋勫缓閫氱煡鍐呭
+ */
+ private String buildNotifyContent(SysTask task, SysTaskEmergency emergency) {
+ StringBuilder content = new StringBuilder("鎮ㄦ湁鏂扮殑杞繍浠诲姟锛岃鍙婃椂澶勭悊锛屼换鍔″崟鍙�:"+task.getTaskCode());
+
+ // 娣诲姞鍑哄彂鍦颁俊鎭�
+ String departure = null;
+ if (emergency != null && StringUtils.isNotEmpty(emergency.getHospitalOutName())) {
+ departure = emergency.getHospitalOutName();
+ } else if (StringUtils.isNotEmpty(task.getDepartureAddress())) {
+ departure = task.getDepartureAddress();
+ }
+
+ // 娣诲姞鐩殑鍦颁俊鎭�
+ 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) {
+ content = new StringBuilder();
+ 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();
+ }
+
+ /**
* 鐩戝惉浠诲姟鐘舵�佸彉鏇翠簨浠�
*
* @param event 浠诲姟鐘舵�佸彉鏇翠簨浠�
--
Gitblit v1.9.1