From 09e6dc3fb7266620fafb5e341808a8eb36e080a1 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 13 十二月 2025 22:51:52 +0800
Subject: [PATCH] feat:增加企业微信消息提醒

---
 ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java |  216 +++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 173 insertions(+), 43 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 87a04f4..a9a1141 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,5 +1,8 @@
 package com.ruoyi.system.listener;
 
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.event.TaskDispatchSyncEvent;
+import com.ruoyi.system.service.ISysTaskAssigneeService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -8,9 +11,6 @@
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.system.domain.SysMessage;
-import com.ruoyi.system.domain.SysTask;
-import com.ruoyi.system.domain.SysTaskEmergency;
 import com.ruoyi.system.event.TaskCreatedEvent;
 import com.ruoyi.system.event.TaskAssignedEvent;
 import com.ruoyi.system.event.TaskStatusChangedEvent;
@@ -19,9 +19,15 @@
 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.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 浠诲姟娑堟伅鐩戝惉鍣�
@@ -48,8 +54,38 @@
     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";
+
+    @Autowired
+    private ISysTaskAssigneeService taskAssigneeService;
+
+    @Async
+    @EventListener
+    public void handleTaskDispatchEvent(TaskDispatchSyncEvent event) {
+        try{
+            log.info("鏀跺埌浠诲姟娲惧彂鍚屾浜嬩欢锛屼换鍔D锛歿}锛屼换鍔$紪鍙凤細{}锛屾淳鍙戝崟ID锛歿}", event.getTaskId(), event.getTaskCode(), event.getDispatchOrderId());
+            SysTask task=sysTaskMapper.selectSysTaskByTaskId(event.getTaskId());
+            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(event.getTaskId());
+            if(emergency != null){
+               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));
+               }
+            }
+
+        }catch (Exception ex){
+            log.error("澶勭悊浠诲姟娲惧彂鍚屾浜嬩欢澶辫触", ex);
+        }
+    }
     /**
      * 鐩戝惉浠诲姟鍒涘缓浜嬩欢
      * 
@@ -92,8 +128,11 @@
         }
     }
 
+
+
     /**
      * 鐩戝惉浠诲姟鍒嗛厤浜嬩欢
+     * 鍒涘缓閫氱煡浠诲姟锛岀敱閫氱煡鍒嗗彂鏈嶅姟鍐冲畾鍙戦�佹笭閬�
      * 
      * @param event 浠诲姟鍒嗛厤浜嬩欢
      */
@@ -109,46 +148,30 @@
                 log.warn("鎵ц浜篒D鍒楄〃涓虹┖锛屾棤娉曟帹閫佹秷鎭�");
                 return;
             }
-            
-            // 缁欐瘡涓墽琛屼汉鍙戦�佺珯鍐呮秷鎭�
-            for (int i = 0; i < event.getAssigneeIds().size(); i++) {
-                Long assigneeId = event.getAssigneeIds().get(i);
-                
-                // 鑾峰彇鎵ц浜轰俊鎭�
-                SysUser assignee = sysUserMapper.selectUserById(assigneeId);
-                if (assignee == null) {
-                    log.warn("鎵句笉鍒版墽琛屼汉淇℃伅锛岀敤鎴稩D锛歿}", assigneeId);
-                    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");
-                
-                // 淇濆瓨娑堟伅
-                sysMessageMapper.insertSysMessage(message);
-                log.info("浠诲姟鍒嗛厤娑堟伅宸蹭繚瀛橈紝娑堟伅ID锛歿}锛屾帴鏀朵汉锛歿}", message.getMessageId(), assignee.getNickName());
+
+            // 鏌ヨ浠诲姟淇℃伅
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(event.getTaskId());
+            if (task == null) {
+                log.warn("浠诲姟涓嶅瓨鍦紝taskId={}", event.getTaskId());
+                return;
             }
 
-            // 鍙戦�佸井淇¤闃呮秷鎭紙鎺掗櫎鍒涘缓浜猴級
-            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);
+            // 鏌ヨ鎬ユ晳鎵╁睍淇℃伅锛堢敤浜庢瀯寤洪�氱煡鍐呭锛�
+            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(event.getTaskId());
+
+            Long creatorId = task.getCreatorId();
+            String taskStatus = task.getTaskStatus();
+            
+            // 浠呭湪寰呭噯澶囩姸鎬佷笅鍙戦�侀�氱煡
+            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(), event.getTaskCode(), notifyContent);
+
             
         } catch (Exception e) {
             log.error("澶勭悊浠诲姟鍒嗛厤浜嬩欢澶辫触", e);
@@ -156,6 +179,113 @@
     }
 
     /**
+     * 鍚戞墽琛屼汉鍙戦�佷换鍔″垎閰嶉�氱煡
+     * @param assigneeIds
+     * @param creatorId
+     * @param taskId
+     * @param taskCode
+     *
+     * @param notifyContent
+     */
+
+    private void sendDispatchNotify(List<Long> assigneeIds, Long creatorId,
+                            Long taskId,String taskCode,String notifyContent) {
+        // 鏀堕泦鍒涘缓鐨勯�氱煡浠诲姟
+
+        List<NotifyTask> createdTasks = new ArrayList<>();
+
+        // 涓烘瘡涓墽琛屼汉鍒涘缓閫氱煡浠诲姟
+        for (Long assigneeId : assigneeIds) {
+            // 鎺掗櫎鍒涘缓浜�
+            if (creatorId != null && creatorId.equals(assigneeId)) {
+                log.debug("璺宠繃鍒涘缓浜猴紝涓嶅彂閫佷换鍔″垎閰嶉�氱煡锛寀serId={}", assigneeId);
+                continue;
+            }
+
+            // 鑾峰彇鎵ц浜轰俊鎭�
+            SysUser assignee = sysUserMapper.selectUserById(assigneeId);
+            if (assignee == null) {
+                log.warn("鎵句笉鍒版墽琛屼汉淇℃伅锛岀敤鎴稩D锛歿}", assigneeId);
+                continue;
+            }
+
+            // 鍒涘缓閫氱煡浠诲姟锛堝甫闃查噸锛�
+            NotifyTask notifyTask = new NotifyTask();
+            notifyTask.setTaskId(taskId);
+            notifyTask.setTaskCode(taskCode);
+            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( "绯荤粺");
+
+            NotifyTask created = notifyTaskService.createNotifyTask(notifyTask);
+            if (created != null) {
+                createdTasks.add(created);
+                log.info("鍒涘缓閫氱煡浠诲姟鎴愬姛锛宨d={}, userId={}", created.getId(), assigneeId);
+            } else {
+                log.info("閫氱煡浠诲姟宸插瓨鍦紝璺宠繃锛宼askId={}, userId={}", taskId, assigneeId);
+            }
+        }
+
+        // 鍒嗗彂閫氱煡浠诲姟
+        if (!createdTasks.isEmpty()) {
+            int successCount = notifyDispatchService.dispatchNotifies(createdTasks);
+            log.info("閫氱煡鍒嗗彂瀹屾垚锛宼askId={}锛屽垱寤烘暟閲�={}锛屾垚鍔熸暟閲�={}",
+                    taskId, createdTasks.size(), successCount);
+        }
+    }
+    /**
+     * 鏋勫缓閫氱煡鍐呭
+     */
+    private String buildNotifyContent(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) {
+            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