From 8cb5d3440208a3be3e772e65f1bd0ec63031ba62 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期三, 17 十二月 2025 08:37:14 +0800
Subject: [PATCH] feat: 增加服务单派发通知

---
 ruoyi-ui/src/views/system/notify/channelConfig.vue                                          |   21 -
 ruoyi-common/src/main/java/com/ruoyi/common/utils/BigDecimalUtil.java                       |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java               |  114 ++++++++++
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                             |   17 +
 sql/sys_notify_send_log.sql                                                                 |   22 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java   |    6 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/DeptUtil.java                             |   13 +
 ruoyi-system/src/main/java/com/ruoyi/system/domain/NotifyTask.java                          |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java            |    8 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java   |   64 ++--
 ruoyi-admin/src/main/resources/application.yml                                              |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java            |   51 ++-
 ruoyi-ui/src/views/system/notify/log/index.vue                                              |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java            |  133 ++++--------
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java |   84 +++----
 ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacyTransferSyncService.java         |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java                    |   20 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysEmergencyTaskService.java           |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java                       |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java                    |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/event/TaskOnlyServerOrderSyncEvent.java         |   12 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/LegacyTransferSyncMapper.java            |    2 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/LongUtil.java                             |   17 +
 sql/update_sys_notify_send_log.sql                                                          |    5 
 24 files changed, 388 insertions(+), 240 deletions(-)

diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 4219d2c..105bc73 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -58,7 +58,7 @@
     basename: i18n/messages
   profiles:
     # 鐜 dev|test|prod
-    active: prod
+    active: dev
   # 鏂囦欢涓婁紶
   servlet:
     multipart:
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/BigDecimalUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/BigDecimalUtil.java
new file mode 100644
index 0000000..f7c2216
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/BigDecimalUtil.java
@@ -0,0 +1,9 @@
+package com.ruoyi.common.utils;
+
+import java.math.BigDecimal;
+
+public class BigDecimalUtil {
+    public static Boolean isZero(BigDecimal bigDecimal) {
+        return bigDecimal.compareTo(BigDecimal.ZERO) == 0;
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DeptUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DeptUtil.java
new file mode 100644
index 0000000..f9d2e63
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DeptUtil.java
@@ -0,0 +1,13 @@
+package com.ruoyi.common.utils;
+
+public class DeptUtil {
+
+    /**
+     * 鎬诲叕鍙搁儴闂↖D
+     */
+    public static Long ROOT_DEPT_ID=100L;
+    /**
+     * 骞垮窞鎬婚儴閮ㄩ棬ID
+     */
+    public static Long GUANGZHOU_DEPT_ID=101L;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/LongUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/LongUtil.java
new file mode 100644
index 0000000..4fe173e
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/LongUtil.java
@@ -0,0 +1,17 @@
+package com.ruoyi.common.utils;
+
+/**
+ * Long宸ュ叿绫�
+ */
+public class LongUtil {
+    public static Boolean isEmpty(Long value) {
+        if(value==null || value<=0)return true;
+        return false;
+    }
+
+    public static Boolean isNotEmpty(Long value) {
+        return !isEmpty(value);
+    }
+}
+
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/NotifyTask.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/NotifyTask.java
index 6f7682a..349b1c7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/NotifyTask.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/NotifyTask.java
@@ -19,6 +19,10 @@
     // ==================== 閫氱煡绫诲瀷甯搁噺 ====================
     /** 閫氱煡绫诲瀷锛氫换鍔″垎閰� */
     public static final String NOTIFY_TYPE_TASK_ASSIGN = "TASK_ASSIGN";
+    /**
+     * 閫氱煡绫诲瀷锛氭湇鍔″崟閫氱煡锛屾病鏈夌敓鎴愯皟搴︾殑鏈嶅姟鍗曪紝鍜ㄨ鍗�
+     */
+    public static final String NOTIFY_TASK_UNASSIGN = "TASK_UNASSIGN";
     /** 閫氱煡绫诲瀷锛氱姸鎬佸彉鏇� */
     public static final String NOTIFY_TYPE_STATUS_CHANGE = "STATUS_CHANGE";
     /** 閫氱煡绫诲瀷锛氫换鍔″垱寤� */
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskOnlyServerOrderSyncEvent.java b/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskOnlyServerOrderSyncEvent.java
new file mode 100644
index 0000000..9ad37e5
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskOnlyServerOrderSyncEvent.java
@@ -0,0 +1,12 @@
+package com.ruoyi.system.event;
+
+/**
+ * 骞垮窞鎬婚儴涔嬪鐨勬湇鍔″崟浜嬩欢娲惧彂 鏃х郴缁熷悓姝ュ埌鏂扮郴缁熻繃鏉ョ殑鏈嶅姟鍗曪紝鍜ㄨ鍗�
+ */
+public class TaskOnlyServerOrderSyncEvent  extends TaskEvent{
+
+
+    public TaskOnlyServerOrderSyncEvent(Object source, Long taskId, String taskCode) {
+        super(source, taskId, taskCode);
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java b/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java
index 16231ef..29ba4e0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java
@@ -9,6 +9,14 @@
     public Long getServiceOrderId(){
         return this.serviceOrderId;
     }
+
+    /**
+     * 鏈嶅姟鍗曞悓姝ュ埌鏃х郴缁熸垚鍔熷悗瑙﹀彂浜嬩欢
+     * @param source
+     * @param taskId
+     * @param taskCode
+     * @param serviceOrderId
+     */
     public TaskServiceOrderSyncEvent(Object source, Long taskId, String taskCode,Long serviceOrderId) {
         super(source, taskId, taskCode);
         this.serviceOrderId=serviceOrderId;
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..8cc98ed 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,7 +1,10 @@
 package com.ruoyi.system.listener;
 
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.utils.DeptUtil;
 import com.ruoyi.system.domain.*;
 import com.ruoyi.system.event.TaskDispatchSyncEvent;
+import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysTaskAssigneeService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -78,7 +81,8 @@
                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));
                }
             }
 
@@ -129,6 +133,93 @@
     }
 
 
+    @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();
+    }
+
 
     /**
      * 鐩戝惉浠诲姟鍒嗛厤浜嬩欢
@@ -161,7 +252,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 +261,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 +328,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;
+    }
     /**
      * 鏋勫缓閫氱煡鍐呭
      */
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/LegacyTransferSyncMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/LegacyTransferSyncMapper.java
index 3e0d220..66d1c8d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/LegacyTransferSyncMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/LegacyTransferSyncMapper.java
@@ -53,7 +53,7 @@
      * @param serviceOrdID 鏈嶅姟鍗旾D
      * @return 鐥呮儏ID鍒楄〃
      */
-    List<String> selectDiseaseIdsByServiceOrdID(@Param("serviceOrdID") String serviceOrdID);
+    List<String> selectDiseaseIdsByServiceOrdID(@Param("serviceOrdID") Long serviceOrdID);
     
     /**
      * 鏍规嵁璋冨害鍗旾D鏌ヨ鎵ц浜轰俊鎭�
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index 4811f42..221f042 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -167,4 +167,12 @@
      * @return 鐢ㄦ埛鍒楄〃
      */
     public List<SysUser> selectUsersByBranchDeptIds(@Param("branchDeptIds") List<Long> branchDeptIds);
-}
+    
+    /**
+     * 鏍规嵁serviceOrderClass鎴杁ispatchOrderClass鏌ヨ鍏锋湁canViewAllConsult鏉冮檺鐨勭敤鎴�
+     * 
+     * @param orderClass serviceOrderClass鎴杁ispatchOrderClass
+     * @return 鐢ㄦ埛鍒楄〃
+     */
+    public List<SysUser> selectUsersByOrderClassAndCanViewAllConsult(@Param("orderClass") String orderClass);
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacyTransferSyncService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacyTransferSyncService.java
index 70e578c..38a4962 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacyTransferSyncService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacyTransferSyncService.java
@@ -30,7 +30,7 @@
      * @param dispatchOrdID 璋冨害鍗旾D
      * @return 鏄惁鍚屾鎴愬姛
      */
-    boolean syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID);
+    boolean syncSingleTransferOrder(Long serviceOrdID, Long dispatchOrdID);
     
     /**
      * 妫�鏌ヨ浆杩愬崟鏄惁宸插悓姝�
@@ -39,7 +39,7 @@
      * @param dispatchOrdID 璋冨害鍗旾D
      * @return 鏄惁宸插悓姝�
      */
-    boolean isTransferOrderSynced(String serviceOrdID, String dispatchOrdID);
+    boolean isTransferOrderSynced(Long serviceOrdID, Long dispatchOrdID);
     
     /**
      * 鏋勯�燭askCreateVO瀵硅薄鐢ㄤ簬鍒涘缓浠诲姟
@@ -49,5 +49,5 @@
      * @param order 杞繍鍗曡缁嗕俊鎭�
      * @return TaskCreateVO瀵硅薄
      */
-    TaskCreateVO buildCreateTaskVo(String serviceOrdID, String dispatchOrdID, Map<String, Object> order);
+    TaskCreateVO buildCreateTaskVo(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order);
 }
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysEmergencyTaskService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysEmergencyTaskService.java
index f58c998..e8f2ade 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysEmergencyTaskService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysEmergencyTaskService.java
@@ -8,7 +8,7 @@
 public interface ISysEmergencyTaskService {
 
     void saveEmergencyInfo(Long taskId, String createUserName, TaskCreateVO createVO,
-                           String serviceOrderId, String dispatchOrderId, String serviceOrdNo);
+                           Long serviceOrderId, Long dispatchOrderId, String serviceOrdNo);
 
     void updateEmergencyInfoFromUpdateVO(SysTaskEmergency oldEmergency, TaskUpdateVO updateVO, String userName);
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java
index 38d32fe..a5a2a26 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java
@@ -63,7 +63,7 @@
      * @param updateTime 鏇存柊鏃堕棿
      * @return 缁撴灉
      */
-    public int insertTask(TaskCreateVO createVO,String serviceOrderId,String dispatchOrderId, String serviceOrdNo, Long userId,String userName, Long deptId, Date createTime, Date updateTime);
+    public int insertTask(TaskCreateVO createVO,Long serviceOrderId,Long dispatchOrderId, String serviceOrdNo, Long userId,String userName, Long deptId, Date createTime, Date updateTime);
 
     /**
      * 淇敼浠诲姟绠$悊
@@ -86,7 +86,7 @@
      * @param updateTime
      * @return
      */
-    public int updateTask(TaskUpdateVO updateVO, String serviceOrderId, String dispatchOrderId, String serviceOrdNo, Long userId, String userName, Long deptId, Date createTime, Date updateTime);
+    public int updateTask(TaskUpdateVO updateVO, Long serviceOrderId, Long dispatchOrderId, String serviceOrdNo, Long userId, String userName, Long deptId, Date createTime, Date updateTime);
 
     /**
      * 鎵归噺鍒犻櫎浠诲姟绠$悊
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 7f7dcb0..233bf16 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -104,23 +104,23 @@
      * @param user 鐢ㄦ埛淇℃伅
      * @return 缁撴灉
      */
-    public boolean checkUserNameUnique(SysUser user);
+    public Boolean checkUserNameUnique(SysUser user);
 
     /**
      * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴
-     *
+     * 
      * @param user 鐢ㄦ埛淇℃伅
      * @return 缁撴灉
      */
-    public boolean checkPhoneUnique(SysUser user);
+    public Boolean checkPhoneUnique(SysUser user);
 
     /**
      * 鏍¢獙email鏄惁鍞竴
-     *
+     * 
      * @param user 鐢ㄦ埛淇℃伅
      * @return 缁撴灉
      */
-    public boolean checkEmailUnique(SysUser user);
+    public Boolean checkEmailUnique(SysUser user);
 
     /**
      * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔
@@ -243,4 +243,12 @@
      * @return 鐢ㄦ埛鍒楄〃
      */
     public List<SysUser> selectUsersByBranchDeptIds(List<Long> branchDeptIds);
-}
+    
+    /**
+     * 鏍规嵁serviceOrderClass鎴杁ispatchOrderClass鏌ヨ鍏锋湁canViewAllConsult鏉冮檺鐨勭敤鎴�
+     * 
+     * @param orderClass serviceOrderClass鎴杁ispatchOrderClass
+     * @return 鐢ㄦ埛鍒楄〃
+     */
+    public List<SysUser> selectUsersByOrderClassAndCanViewAllConsult(String orderClass);
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
index 32708d8..d871794 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
@@ -149,7 +149,7 @@
             
             // 濡傛灉宸茬粡鍚屾杩囷紝涓嶅啀閲嶅鍚屾
             if (emergency.getLegacyServiceOrdId() != null && emergency.getLegacyServiceOrdId() > 0) {
-                log.info("浠诲姟宸插悓姝ヨ繃锛屼换鍔D: {}, ServiceOrdID: {}", taskId, emergency.getLegacyServiceOrdId());
+//                log.info("浠诲姟宸插悓姝ヨ繃锛屼换鍔D: {}, ServiceOrdID: {}", taskId, emergency.getLegacyServiceOrdId());
                 return emergency.getLegacyServiceOrdId();
             }
             
@@ -192,7 +192,7 @@
                 sysTaskMapper.updateSysTask(task);
 
                 eventPublisher.publishEvent(new TaskServiceOrderSyncEvent(this, taskId, task.getTaskCode(), serviceOrdId));
-                log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
+//                log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
                 return serviceOrdId;
             } else {
                 // 鍚屾澶辫触
@@ -228,7 +228,7 @@
     //鍦ㄨ繖閲岀洃鍚淳鍙戠殑浜嬩欢
     @EventListener
     public void handleTaskServiceOrderSyncEvent(TaskServiceOrderSyncEvent event) {
-        log.info("鏀跺埌浠诲姟鏈嶅姟鍗曞悓姝ヤ簨浠讹紝浠诲姟ID锛歿}锛屼换鍔$紪鍙凤細{}锛屾湇鍔″崟ID锛歿}", event.getTaskId(), event.getTaskCode(), event.getServiceOrderId());
+//        log.info("鏀跺埌浠诲姟鏈嶅姟鍗曞悓姝ヤ簨浠讹紝浠诲姟ID锛歿}锛屼换鍔$紪鍙凤細{}锛屾湇鍔″崟ID锛歿}", event.getTaskId(), event.getTaskCode(), event.getServiceOrderId());
         syncDispatchOrderToLegacy(event.getTaskId());
     }
     /**
@@ -256,7 +256,7 @@
                     break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
                 }
                 
-                log.info("寮�濮嬪悓姝ョ {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
+//                log.info("寮�濮嬪悓姝ョ {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
                 
                 int pageSuccessCount = 0;
                 for (SysTaskEmergency emergency : pendingTasks) {
@@ -276,19 +276,19 @@
                 }
                 
                 totalSuccessCount += pageSuccessCount;
-                log.info("绗� {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
-                    (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
+//                log.info("绗� {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
+//                    (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
                 
                 // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
                 if (pendingTasks.size() < pageSize) {
-                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝鍚屾缁撴潫");
+//                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝鍚屾缁撴潫");
                     break;
                 }
                 
                 offset += pageSize; // 涓嬩竴椤�
             }
             
-            log.info("鎵归噺鍚屾瀹屾垚锛屾�绘垚鍔熸暟: {}", totalSuccessCount);
+//            log.info("鎵归噺鍚屾瀹屾垚锛屾�绘垚鍔熸暟: {}", totalSuccessCount);
             return totalSuccessCount;
             
         } catch (Exception e) {
@@ -375,7 +375,7 @@
             
             // 濡傛灉宸茬粡鍚屾杩囷紝涓嶅啀閲嶅鍚屾
             if (emergency.getLegacyDispatchOrdId() != null && emergency.getLegacyDispatchOrdId() > 0) {
-                log.info("璋冨害鍗曞凡鍚屾杩囷紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+//                log.info("璋冨害鍗曞凡鍚屾杩囷紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
                 return emergency.getLegacyDispatchOrdId();
             }
 
@@ -487,7 +487,7 @@
 
                 eventPublisher.publishEvent(new TaskDispatchSyncEvent(this, taskId, task.getTaskCode(),serviceOrdId, dispatchOrdId, oaUserID));
 
-                log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
+//                log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
                 return dispatchOrdId;
             } else {
                 // 鍚屾澶辫触
@@ -579,19 +579,19 @@
                 }
                 
                 totalSuccessCount += pageSuccessCount;
-                log.info("璋冨害鍗曠 {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
-                    (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
+//                log.info("璋冨害鍗曠 {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
+//                    (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
                 
                 // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
                 if (pendingTasks.size() < pageSize) {
-                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曞悓姝ョ粨鏉�");
+//                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曞悓姝ョ粨鏉�");
                     break;
                 }
                 
                 offset += pageSize; // 涓嬩竴椤�
             }
             
-            log.info("鎵归噺鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+//            log.info("鎵归噺鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
             return totalSuccessCount;
             
         } catch (Exception e) {
@@ -617,7 +617,7 @@
                 SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
                 if (dept != null && StringUtils.isNotEmpty(dept.getDispatchOrderClass())) {
                     dispatchOrdClass = dept.getDispatchOrderClass();
-                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 璋冨害鍗曠紪鐮�: {}", task.getDeptId(), dispatchOrdClass);
+//                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 璋冨害鍗曠紪鐮�: {}", task.getDeptId(), dispatchOrdClass);
                 }
             } catch (Exception e) {
                 log.error("鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: {}", task.getDeptId(), e);
@@ -865,8 +865,8 @@
 //            params.put("Entourage_3", doctorOaId);  // 鍖荤敓
 //            params.put("Entourage_4", nurseOaId);   // 鎶ゅ+
             
-            log.info("浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: {}, 棰嗛槦ID: {}, 鍙告満: {}, 鍖荤敓: {}, 鎶ゅ+: {}", 
-                task.getTaskId(), leadEntourageId, driverOaId, doctorOaId, nurseOaId);
+//            log.info("浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: {}, 棰嗛槦ID: {}, 鍙告満: {}, 鍖荤敓: {}, 鎶ゅ+: {}",
+//                task.getTaskId(), leadEntourageId, driverOaId, doctorOaId, nurseOaId);
             
         } catch (Exception e) {
             log.error("鍚屾浠诲姟鎵ц浜哄憳寮傚父锛屼换鍔D: {}", task.getTaskId(), e);
@@ -906,7 +906,7 @@
             }
             
             // 濡傛灉鏁版嵁搴撲腑娌℃湁鎵ц浜哄憳淇℃伅锛屽皾璇曚粠浠诲姟鐨勪富瑕佹墽琛屼汉鑾峰彇
-            log.warn("鏁版嵁搴撲腑鏈壘鍒版墽琛屼汉鍛樹俊鎭紝灏濊瘯浠庝换鍔′富瑕佹墽琛屼汉鑾峰彇锛屼换鍔D: {}", taskId);
+//            log.warn("鏁版嵁搴撲腑鏈壘鍒版墽琛屼汉鍛樹俊鎭紝灏濊瘯浠庝换鍔′富瑕佹墽琛屼汉鑾峰彇锛屼换鍔D: {}", taskId);
             SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
             if (task != null && task.getAssigneeId() != null) {
                 SysUser user = sysUserMapper.selectUserById(task.getAssigneeId());
@@ -1033,8 +1033,8 @@
                 if (dept != null && StringUtils.isNotEmpty(dept.getServiceOrderClass())) {
                     // 浣跨敤閮ㄩ棬鐨勬湇鍔″崟缂栫爜浣滀负ServiceOrdClass
                     serviceOrdClass = dept.getServiceOrderClass();
-                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 閮ㄩ棬鍚嶇О: {}, 鏈嶅姟鍗曠紪鐮�: {}", 
-                        task.getDeptId(), dept.getDeptName(), serviceOrdClass);
+//                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 閮ㄩ棬鍚嶇О: {}, 鏈嶅姟鍗曠紪鐮�: {}",
+//                        task.getDeptId(), dept.getDeptName(), serviceOrdClass);
                 } else {
                     log.warn("浠诲姟鎵�灞為儴闂ㄦ湭閰嶇疆鏈嶅姟鍗曠紪鐮侊紝閮ㄩ棬ID: {}銆侀儴闂ㄥ悕绉�: {}锛屼娇鐢ㄩ粯璁ゅ��", 
                         task.getDeptId(), dept != null ? dept.getDeptName() : "null");
@@ -1050,7 +1050,7 @@
         String serviceOrdAreaType = "1"; // 榛樿鍊�
         if (StringUtils.isNotEmpty(emergency.getDocumentTypeId())) {
             serviceOrdAreaType = emergency.getDocumentTypeId();
-            log.info("鑾峰彇鍗曟嵁绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 鍗曟嵁绫诲瀷ID: {}", task.getTaskId(), serviceOrdAreaType);
+//            log.info("鑾峰彇鍗曟嵁绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 鍗曟嵁绫诲瀷ID: {}", task.getTaskId(), serviceOrdAreaType);
         } else {
             log.warn("浠诲姟鏈厤缃崟鎹被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", task.getTaskId());
         }
@@ -1063,7 +1063,7 @@
         String serviceOrdType = "1"; // 榛樿鍊�
         if (StringUtils.isNotEmpty(emergency.getTaskTypeId())) {
             serviceOrdType = emergency.getTaskTypeId();
-            log.info("鑾峰彇浠诲姟绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 浠诲姟绫诲瀷ID: {}", taskId, serviceOrdType);
+//            log.info("鑾峰彇浠诲姟绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 浠诲姟绫诲瀷ID: {}", taskId, serviceOrdType);
         } else {
             log.warn("浠诲姟鏈厤缃换鍔$被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", taskId);
         }
@@ -1169,7 +1169,7 @@
             HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
             httpsConn.setSSLSocketFactory(createTrustAllSSLContext().getSocketFactory());
             httpsConn.setHostnameVerifier((hostname, session) -> true); // 淇′换鎵�鏈変富鏈哄悕
-            log.debug("閰嶇疆HTTPS杩炴帴锛屼俊浠绘墍鏈塖SL璇佷功锛孶RL: {}", urlString);
+//            log.debug("閰嶇疆HTTPS杩炴帴锛屼俊浠绘墍鏈塖SL璇佷功锛孶RL: {}", urlString);
         }
         
         try {
@@ -1468,7 +1468,7 @@
             log.info("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熻姹傚弬鏁�: {}", params);
             // 鍙戦�丠TTP璇锋眰鍒版棫绯荤粺锛堜娇鐢╝dmin_save_25.asp鎺ュ彛锛�
             String response = sendHttpPost(legacyConfig.getDispatchUpdateUrl(), params);
-            log.info("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熷搷搴�: ServiceOrdID:{},DispatchOrdId:{},Result: {}",emergency.getLegacyServiceOrdId(),emergency.getLegacyDispatchOrdId(), response);
+//            log.info("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熷搷搴�: ServiceOrdID:{},DispatchOrdId:{},Result: {}",emergency.getLegacyServiceOrdId(),emergency.getLegacyDispatchOrdId(), response);
             // 瑙f瀽鍝嶅簲
 //            Long dispatchOrdId = parseResponse(response);
             
@@ -1479,7 +1479,7 @@
                 emergency.setDispatchSyncErrorMsg(null);
                 sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 
-                log.info("璋冨害鍗曢噸鏂板悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+//                log.info("璋冨害鍗曢噸鏂板悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
                 return true;
             } else {
                 // 閲嶆柊鍚屾澶辫触
@@ -1527,17 +1527,17 @@
                 // 鍒嗛〉鏌ヨ闇�瑕侀噸鏂板悓姝ョ殑浠诲姟
                 List<SysTaskEmergency> needResyncTasks = sysTaskEmergencyMapper.selectNeedResyncTasks(offset, pageSize);
                 
-                log.info("鏌ヨ鍒伴渶瑕侀噸鏂板悓姝ョ殑浠诲姟鏁伴噺: {}", needResyncTasks.size());
+//                log.info("鏌ヨ鍒伴渶瑕侀噸鏂板悓姝ョ殑浠诲姟鏁伴噺: {}", needResyncTasks.size());
                 if (needResyncTasks == null || needResyncTasks.isEmpty()) {
                     log.info("娌℃湁鏇村闇�瑕侀噸鏂板悓姝ョ殑浠诲姟锛宱ffset: {}", offset);
                     break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
                 }
                 
-                log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, needResyncTasks.size());
+//                log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, needResyncTasks.size());
                 
                 int pageSuccessCount = 0;
                 for (SysTaskEmergency emergency : needResyncTasks) {
-                    log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
+//                    log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
                     boolean success = resyncDispatchOrderToLegacy(emergency.getTaskId());
                     
                     if (success) {
@@ -1555,19 +1555,19 @@
                 }
                 
                 totalSuccessCount += pageSuccessCount;
-                log.info("璋冨害鍗曢噸鏂板悓姝ョ {} 椤靛畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
-                    (offset / pageSize) + 1, needResyncTasks.size(), pageSuccessCount);
+//                log.info("璋冨害鍗曢噸鏂板悓姝ョ {} 椤靛畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
+//                    (offset / pageSize) + 1, needResyncTasks.size(), pageSuccessCount);
                 
                 // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
                 if (needResyncTasks.size() < pageSize) {
-                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曢噸鏂板悓姝ョ粨鏉�");
+//                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曢噸鏂板悓姝ョ粨鏉�");
                     break;
                 }
                 
                 offset += pageSize; // 涓嬩竴椤�
             }
             
-            log.info("鎵归噺閲嶆柊鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+//            log.info("鎵归噺閲嶆柊鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
             return totalSuccessCount;
             
         } catch (Exception e) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
index 03102dd..7bdf8a6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -108,11 +108,11 @@
             for (Map<String, Object> order : transferOrders) {
                 processedCount++;
                 try {
-                    String serviceOrdID = MapValueUtils.getStringValue(order, "ServiceOrdID");
-                    String dispatchOrdID = MapValueUtils.getStringValue(order, "DispatchOrdID");
+                    Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID");
+                    Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID");
                     
                     // 妫�鏌ュ弬鏁版湁鏁堟��
-                    if (StringUtils.isEmpty(serviceOrdID)) {
+                    if (serviceOrdID==null || serviceOrdID<=0) {
                         log.warn("绗瑊}鏉℃暟鎹湇鍔″崟ID涓虹┖锛岃烦杩囧鐞�", processedCount);
                         continue;
                     }
@@ -164,41 +164,25 @@
      * @return 鏄惁鍚屾鎴愬姛
      */
     @Override
-    public boolean syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID) {
-        log.info("寮�濮嬪悓姝ュ崟涓浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+    public boolean syncSingleTransferOrder(Long serviceOrdID, Long dispatchOrdID) {
+//        log.info("寮�濮嬪悓姝ュ崟涓浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
         
         try {
             // 妫�鏌ュ弬鏁版湁鏁堟��
-            if (StringUtils.isEmpty(serviceOrdID)) {
+            if (serviceOrdID == null || serviceOrdID <= 0) {
                 log.error("鏈嶅姟鍗旾D涓嶈兘涓虹┖");
                 return false;
             }
-            // 鐩存帴鏌ヨ鎸囧畾鐨勮浆杩愬崟淇℃伅
-            Long serviceOrdIdLong = null;
-            Long dispatchOrdIdLong = null;
+
+
             
-            try {
-                serviceOrdIdLong = Long.valueOf(serviceOrdID);
-            } catch (NumberFormatException e) {
-                log.error("鏈嶅姟鍗旾D涓嶆槸鏈夋晥鏁板瓧: {}", serviceOrdID);
-                return false;
-            }
-            
-            if (StringUtils.isNotEmpty(dispatchOrdID)) {
-                try {
-                    dispatchOrdIdLong = Long.valueOf(dispatchOrdID);
-                } catch (NumberFormatException e) {
-                    log.warn("璋冨害鍗旾D涓嶆槸鏈夋晥鏁板瓧: {}", dispatchOrdID);
-                }
-            }
-            
-            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrdersByIDs(serviceOrdIdLong, dispatchOrdIdLong);
+            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrdersByIDs(serviceOrdID, dispatchOrdID);
 
             Map<String, Object> order = transferOrders.get(0);
 
             // 妫�鏌ユ槸鍚﹀凡鍚屾
             if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
-                log.info("杞繍鍗曞凡鍚屾锛岃烦杩�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+//                log.info("杞繍鍗曞凡鍚屾锛岃烦杩�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                 updateTransferOrder(serviceOrdID, dispatchOrdID, order);
                 return true;
             }
@@ -226,11 +210,11 @@
      * @param order
      * @return
      */
-    private boolean updateTransferOrder(String serviceOrdID, String dispatchOrdID, Map<String, Object> order){
-        log.info("寮�濮嬪悓姝ュ崟涓浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+    private boolean updateTransferOrder(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order){
+//        log.info("寮�濮嬪悓姝ュ崟涓浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
         String sysTaskCode="";
         try {
-            SysTaskEmergency emergency=sysTaskEmergencyMapper.selectByLegacyServiceOrdId(Long.parseLong(serviceOrdID));
+            SysTaskEmergency emergency=sysTaskEmergencyMapper.selectByLegacyServiceOrdId(serviceOrdID);
             if(emergency.getNeedResync().equals(1)){
                 log.info("鏂扮郴缁熼渶瑕佸悓姝ュ埌鏃х郴缁熼偅閲岋紝鎵�浠ヤ笉瑕佸悓姝ユ棫鏁版嵁鍒版柊绯荤粺,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                 return false;
@@ -275,12 +259,12 @@
             Long deptId=dept==null?null:dept.getDeptId();
             TaskUpdateVO updateTaskVo = new TaskUpdateVO();
             BeanUtils.copyProperties(createTaskVo, updateTaskVo);
-            log.info("寮�濮嬩繚瀛樿浆杩愪换鍔�,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+//            log.info("寮�濮嬩繚瀛樿浆杩愪换鍔�,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
 
             int result = sysTaskService.updateTask(updateTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
 
             if (result > 0) {
-                log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
+//                log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
 
                 try {
                     notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
@@ -307,8 +291,8 @@
      * @param order 杞繍鍗曡缁嗕俊鎭�
      * @return 鏄惁鍚屾鎴愬姛
      */
-    private boolean syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID, Map<String, Object> order) {
-        log.info("寮�濮嬪悓姝ュ崟涓浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+    private boolean syncSingleTransferOrder(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order) {
+//        log.info("寮�濮嬪悓姝ュ崟涓浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
         String sysTaskCode="";
         try {
             // 鏋勯�燭askCreateVO瀵硅薄
@@ -355,7 +339,7 @@
             int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
 
             if (result > 0) {
-                log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
+//                log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
 
                 try {
                     notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
@@ -383,10 +367,10 @@
      * @return 鏄惁宸插悓姝�
      */
     @Override
-    public boolean isTransferOrderSynced(String serviceOrdID, String dispatchOrdID) {
+    public boolean isTransferOrderSynced(Long serviceOrdID, Long dispatchOrdID) {
         try {
             // 妫�鏌ュ弬鏁版湁鏁堟��
-            if (StringUtils.isEmpty(serviceOrdID)) {
+            if (serviceOrdID == null || serviceOrdID<=0) {
                 log.warn("鏈嶅姟鍗旾D涓嶈兘涓虹┖");
                 return false;
             }
@@ -395,7 +379,7 @@
             // 鏉′欢锛歭egacy_service_ord_id = serviceOrdID 鎴� legacy_dispatch_ord_id = dispatchOrdID
             
             try {
-                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(Long.valueOf(serviceOrdID));
+                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(serviceOrdID);
                 if (emergency != null) {
                     return true;
                 }
@@ -403,9 +387,9 @@
                 log.warn("鏈嶅姟鍗旾D涓嶆槸鏈夋晥鏁板瓧: {}", serviceOrdID);
             }
             
-            if (StringUtils.isNotEmpty(dispatchOrdID)) {
+            if (dispatchOrdID>0) {
                 try {
-                    SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyDispatchOrdId(Long.valueOf(dispatchOrdID));
+                    SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyDispatchOrdId(dispatchOrdID);
                     if (emergency != null) {
                         return true;
                     }
@@ -441,7 +425,7 @@
      * @return TaskCreateVO瀵硅薄
      */
     @Override
-    public TaskCreateVO buildCreateTaskVo(String serviceOrdID, String dispatchOrdID, Map<String, Object> order) {
+    public TaskCreateVO buildCreateTaskVo(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order) {
 //        log.info("鏋勯�燭askCreateVO: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
 
         try {
@@ -451,7 +435,7 @@
                 return null;
             }
             
-            if (StringUtils.isEmpty(serviceOrdID)) {
+            if (serviceOrdID==null || serviceOrdID<=0) {
                 log.error("鏈嶅姟鍗旾D涓嶈兘涓虹┖");
                 return null;
             }
@@ -730,11 +714,11 @@
      * @param dispatchOrdID 璋冨害鍗旾D
      * @return 鎵ц浜轰俊鎭垪琛�
      */
-    private List<TaskCreateVO.AssigneeInfo> queryAssignees(String dispatchOrdID) {
+    private List<TaskCreateVO.AssigneeInfo> queryAssignees(Long dispatchOrdID) {
         long startTime = System.currentTimeMillis();
         try {
             // 妫�鏌ュ弬鏁版湁鏁堟��
-            if (StringUtils.isEmpty(dispatchOrdID)) {
+            if (dispatchOrdID==null || dispatchOrdID <= 0) {
                 log.warn("璋冨害鍗旾D涓嶈兘涓虹┖");
                 return new ArrayList<>();
             }
@@ -813,10 +797,10 @@
      * @param serviceOrdID 鏈嶅姟鍗旾D
      * @return 鐥呮儏ID鍒楄〃
      */
-    private String queryDiseaseIds(String serviceOrdID) {
+    private String queryDiseaseIds(Long serviceOrdID) {
         try {
             // 妫�鏌ュ弬鏁版湁鏁堟��
-            if (StringUtils.isEmpty(serviceOrdID)) {
+            if (serviceOrdID==null || serviceOrdID <= 0) {
                 log.warn("鏈嶅姟鍗旾D涓嶈兘涓虹┖");
                 return null;
             }
@@ -840,8 +824,8 @@
 
 
     private void notifyTransferOrderByWechat(Long taskId,
-                                             String serviceOrdID,
-                                             String dispatchOrdID,
+                                             Long serviceOrdID,
+                                             Long dispatchOrdID,
                                              String serviceOrdNo,
                                              Date serviceOrdCcTime,
                                              SysDept dept,
@@ -850,7 +834,7 @@
             // 鑾峰彇閫氱煡鎺ユ敹浜哄垪琛�
             List<SysUser> receivers = getWechatNotifyUsers(dispatchOrdID, dept);
             if (receivers == null || receivers.isEmpty()) {
-                log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟鏃犲彲鐢ㄥ井淇℃帴鏀朵汉锛宼askId={}", taskId);
+//                log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟鏃犲彲鐢ㄥ井淇℃帴鏀朵汉锛宼askId={}", taskId);
                 return;
             }
 
@@ -864,13 +848,13 @@
 
             // 璋冪敤缁熶竴鐨勫井淇¢�氱煡鏈嶅姟
             int successCount = wechatTaskNotifyService.sendTaskNotifyMessage(taskId, userIds);
-            log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟寰俊閫氱煡鍙戦�佸畬鎴愶紝taskId={}, 鎴愬姛={}", taskId, successCount);
+//            log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟寰俊閫氱煡鍙戦�佸畬鎴愶紝taskId={}, 鎴愬姛={}", taskId, successCount);
         } catch (Exception e) {
             log.error("notifyTransferOrderByWechat鍙戠敓寮傚父, serviceOrdID={}, dispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
         }
     }
 
-    private List<SysUser> getWechatNotifyUsers(String dispatchOrdID, SysDept dept) {
+    private List<SysUser> getWechatNotifyUsers(Long dispatchOrdID, SysDept dept) {
         try {
             List<SysUser> result = new ArrayList<>();
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java
index f85f37b..ceac8fb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java
@@ -41,7 +41,7 @@
 
     @Override
     public void saveEmergencyInfo(Long taskId, String createUserName, TaskCreateVO createVO,
-                                  String serviceOrderId, String dispatchOrderId, String serviceOrdNo) {
+                                  Long serviceOrderId, Long dispatchOrderId, String serviceOrdNo) {
         SysTaskEmergency emergencyInfo = new SysTaskEmergency();
         emergencyInfo.setTaskId(taskId);
 
@@ -123,13 +123,13 @@
         }
 
         if (serviceOrderId != null) {
-            emergencyInfo.setLegacyServiceOrdId(Long.parseLong(serviceOrderId));
+            emergencyInfo.setLegacyServiceOrdId(serviceOrderId);
             emergencyInfo.setSyncStatus(2);
             emergencyInfo.setSyncTime(DateUtils.getNowDate());
             emergencyInfo.setSyncErrorMsg("鏃х郴缁熷悓姝ヨ繃鏉�");
         }
         if (dispatchOrderId != null) {
-            emergencyInfo.setLegacyDispatchOrdId(Long.parseLong(dispatchOrderId));
+            emergencyInfo.setLegacyDispatchOrdId(dispatchOrderId);
             emergencyInfo.setDispatchSyncStatus(2);
             emergencyInfo.setDispatchSyncTime(DateUtils.getNowDate());
             emergencyInfo.setDispatchSyncErrorMsg("鏃х郴缁熷悓姝ヨ繃鏉�");
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
index 8ea35df..3caf8c5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
@@ -9,8 +9,9 @@
 
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.*;
 import com.ruoyi.system.domain.vo.*;
-import com.ruoyi.system.event.TaskDispatchSyncEvent;
+import com.ruoyi.system.event.*;
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.service.*;
 import com.ruoyi.system.utils.TaskCodeGenerator;
@@ -19,10 +20,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.GpsDistanceUtils;
 import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.system.domain.SysTask;
@@ -34,9 +31,6 @@
 import com.ruoyi.system.domain.SysTaskAssignee;
 import com.ruoyi.system.domain.enums.TaskStatus;
 import com.ruoyi.system.domain.VehicleInfo;
-import com.ruoyi.system.event.TaskCreatedEvent;
-import com.ruoyi.system.event.TaskAssignedEvent;
-import com.ruoyi.system.event.TaskStatusChangedEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -317,7 +311,7 @@
      */
     @Override
     @Transactional
-    public int insertTask(TaskCreateVO createVO,String serviceOrderId,String dispatchOrderId, String serviceOrdNo, Long userId,String userName, Long deptId, Date createTime, Date updateTime) {
+    public int insertTask(TaskCreateVO createVO,Long serviceOrderId,Long dispatchOrderId, String serviceOrdNo, Long userId,String userName, Long deptId, Date createTime, Date updateTime) {
         SysTask task = new SysTask();
         if(createVO.getTaskCode()!=null){
             task.setTaskCode(createVO.getTaskCode());
@@ -411,8 +405,9 @@
         }
         
 
-        
-
+        if(result>0) {
+            this.sendEmeryTaskProcess(task, dispatchOrderId);
+        }
         
         return result;
     }
@@ -613,11 +608,11 @@
      * @return 缁撴灉
      */
     @Override
-    public int updateTask(TaskUpdateVO updateVO, String serviceOrderId, String dispatchOrderId, String serviceOrdNo,
+    public int updateTask(TaskUpdateVO updateVO, Long serviceOrderId, Long dispatchOrderId, String serviceOrdNo,
                          Long userId, String userName, Long deptId, Date createTime, Date updateTime) {
 //        log.info("寮�濮嬫洿鏂颁换鍔� ServiceOrdID: {} , dispatchOrdId:{}", serviceOrderId,dispatchOrderId);
         // 閫氳繃鏃х郴缁熸湇鍔″崟ID鏌ユ壘浠诲姟
-        SysTaskEmergency taskEmergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(Long.parseLong(serviceOrderId));
+        SysTaskEmergency taskEmergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(serviceOrderId);
         Long taskId = taskEmergency.getTaskId();
         updateVO.setTaskId(taskId);
         SysTask task = new SysTask();
@@ -722,14 +717,14 @@
 //            log.info("鏇存柊鎵ц浜哄憳 ServiceOrdID:{},dispatchOrderId:{}",serviceOrderId,dispatchOrderId);
             sysTaskAssigneeService.updateTaskAssignees(taskId, updateVO.getAssignees(), userName);
         }
-        Long dispatchOrderIdLong = 0L;
+
         // 鏇存柊鎬ユ晳杞繍鎵╁睍淇℃伅
         if (result > 0) {
             // 鏇存柊鏃х郴缁烮D
-            taskEmergency.setLegacyServiceOrdId(Long.parseLong(serviceOrderId));
-            if (dispatchOrderId != null) {
-                dispatchOrderIdLong = Long.parseLong(dispatchOrderId);
-                taskEmergency.setLegacyDispatchOrdId(dispatchOrderIdLong);
+            taskEmergency.setLegacyServiceOrdId(serviceOrderId);
+            if (LongUtil.isNotEmpty(dispatchOrderId)) {
+
+                taskEmergency.setLegacyDispatchOrdId(dispatchOrderId);
                 taskEmergency.setDispatchSyncStatus(2);
                 taskEmergency.setDispatchSyncTime(new Date());
                 taskEmergency.setDispatchSyncErrorMsg("鏃х郴缁熷悓姝ヨ繃鏉�");
@@ -747,16 +742,30 @@
                 sysEmergencyTaskService.updateEmergencyInfoFromCreateVO(taskEmergency, updateVO, userName);
             }
            SysTaskEmergency emergency= sysEmergencyTaskService.selectSysTaskEmergencyByTaskId(taskId);
-            dispatchOrderIdLong = emergency.getLegacyDispatchOrdId();
+            dispatchOrderId = emergency.getLegacyDispatchOrdId();
         }
 
-        if(updateVO.getTaskStatus()!=null && updateVO.getTaskStatus().equals(TaskStatus.PENDING.getCode()) && updateVO.getAssignees()!=null && !updateVO.getAssignees().isEmpty() && dispatchOrderIdLong>0L){
+        if(updateVO.getTaskStatus()!=null && updateVO.getTaskStatus().equals(TaskStatus.PENDING.getCode()) && updateVO.getAssignees()!=null && !updateVO.getAssignees().isEmpty() && dispatchOrderId>0L){
             this.sendTaskAssigneeEvent(updateVO,task,userId,userName);
         }
-        
+
         return result;
     }
 
+    private void sendEmeryTaskProcess(SysTask task,Long dispatchOrderId){
+        Long taskId = task.getTaskId();
+        String taskCode = task.getShowTaskCode();
+        if(task.getTaskStatus()!=null && task.getTaskStatus().equals(TaskStatus.PENDING.getCode())){
+            //濡傛灉娌℃湁鍒嗛厤浜哄憳锛屼笖娌℃湁璋冨害鍗曪紝涓嶆槸骞垮窞鎬诲叕鍙哥殑灏遍渶瑕佸彂閫侀�氱煡璺熻繘
+            if(LongUtil.isEmpty(dispatchOrderId)){
+                if(!task.getDeptId().equals(DeptUtil.GUANGZHOU_DEPT_ID) && task.getAssignees().isEmpty()){
+                    //鍙戦�侀�氱煡
+                    eventPublisher.publishEvent(new TaskOnlyServerOrderSyncEvent(this, taskId, taskCode));
+
+                }
+            }
+        }
+    }
     /**
      * 鎵归噺鍒犻櫎浠诲姟绠$悊
      * 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index ddc34de..e94af7a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -28,7 +28,6 @@
 import com.ruoyi.system.mapper.SysUserPostMapper;
 import com.ruoyi.system.mapper.SysUserRoleMapper;
 import com.ruoyi.system.service.ISysConfigService;
-import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysUserService;
 
 /**
@@ -58,9 +57,6 @@
 
     @Autowired
     private ISysConfigService configService;
-
-    @Autowired
-    private ISysDeptService deptService;
 
     @Autowired
     protected Validator validator;
@@ -127,18 +123,6 @@
     {
         return userMapper.selectUserByPhonenumber(phonenumber);
     }
-
-    /**
-     * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
-     * 
-     * @param userId 鐢ㄦ埛ID
-     * @return 鐢ㄦ埛瀵硅薄淇℃伅
-     */
-    @Override
-    public SysUser selectUserById(Long userId)
-    {
-        return userMapper.selectUserById(userId);
-    }
     
     /**
      * 閫氳繃寰俊OpenID鏌ヨ鐢ㄦ埛
@@ -177,6 +161,18 @@
     }
 
     /**
+     * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
+     * 
+     * @param userId 鐢ㄦ埛ID
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+    @Override
+    public SysUser selectUserById(Long userId)
+    {
+        return userMapper.selectUserById(userId);
+    }
+
+    /**
      * 鏌ヨ鐢ㄦ埛鎵�灞炶鑹茬粍
      * 
      * @param userName 鐢ㄦ埛鍚�
@@ -190,7 +186,7 @@
         {
             return StringUtils.EMPTY;
         }
-        return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
+        return list.stream().map(SysRole::getRoleName).reduce((x, y) -> x + "," + y).orElse(StringUtils.EMPTY);
     }
 
     /**
@@ -217,7 +213,7 @@
      * @return 缁撴灉
      */
     @Override
-    public boolean checkUserNameUnique(SysUser user)
+    public Boolean checkUserNameUnique(SysUser user)
     {
         Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
         SysUser info = userMapper.checkUserNameUnique(user.getUserName());
@@ -235,7 +231,7 @@
      * @return
      */
     @Override
-    public boolean checkPhoneUnique(SysUser user)
+    public Boolean checkPhoneUnique(SysUser user)
     {
         Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
         SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
@@ -253,7 +249,7 @@
      * @return
      */
     @Override
-    public boolean checkEmailUnique(SysUser user)
+    public Boolean checkEmailUnique(SysUser user)
     {
         Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
         SysUser info = userMapper.checkEmailUnique(user.getEmail());
@@ -445,10 +441,10 @@
     public void insertUserPost(SysUser user)
     {
         Long[] posts = user.getPostIds();
-        if (StringUtils.isNotEmpty(posts))
+        if (StringUtils.isNotNull(posts))
         {
             // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞�
-            List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length);
+            List<SysUserPost> list = new ArrayList<SysUserPost>();
             for (Long postId : posts)
             {
                 SysUserPost up = new SysUserPost();
@@ -456,7 +452,10 @@
                 up.setPostId(postId);
                 list.add(up);
             }
-            userPostMapper.batchUserPost(list);
+            if (list.size() > 0)
+            {
+                userPostMapper.batchUserPost(list);
+            }
         }
     }
 
@@ -468,10 +467,10 @@
      */
     public void insertUserRole(Long userId, Long[] roleIds)
     {
-        if (StringUtils.isNotEmpty(roleIds))
+        if (StringUtils.isNotNull(roleIds))
         {
             // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
-            List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
+            List<SysUserRole> list = new ArrayList<SysUserRole>();
             for (Long roleId : roleIds)
             {
                 SysUserRole ur = new SysUserRole();
@@ -479,7 +478,10 @@
                 ur.setRoleId(roleId);
                 list.add(ur);
             }
-            userRoleMapper.batchUserRole(list);
+            if (list.size() > 0)
+            {
+                userRoleMapper.batchUserRole(list);
+            }
         }
     }
 
@@ -513,7 +515,6 @@
         for (Long userId : userIds)
         {
             checkUserAllowed(new SysUser(userId));
-            checkUserDataScope(userId);
         }
         // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
         userRoleMapper.deleteUserRole(userIds);
@@ -541,6 +542,7 @@
         int failureNum = 0;
         StringBuilder successMsg = new StringBuilder();
         StringBuilder failureMsg = new StringBuilder();
+        String password = configService.selectConfigByKey("sys.user.initPassword");
         for (SysUser user : userList)
         {
             try
@@ -550,73 +552,18 @@
                 if (StringUtils.isNull(u))
                 {
                     BeanValidators.validateWithException(validator, user);
-                    deptService.checkDeptDataScope(user.getDeptId());
-                    
-                    // 鏍¢獙鎵嬫満鍙峰敮涓�鎬�
-                    if (StringUtils.isNotEmpty(user.getPhonenumber()))
-                    {
-                        SysUser phoneCheck = userMapper.checkPhoneUnique(user.getPhonenumber());
-                        if (StringUtils.isNotNull(phoneCheck))
-                        {
-                            failureNum++;
-                            failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆澶辫触锛氭墜鏈哄彿鐮� " + user.getPhonenumber() + " 宸茶鐢ㄦ埛 " + phoneCheck.getUserName() + " 浣跨敤");
-                            continue;
-                        }
-                    }
-                    
-                    // 鏍¢獙閭鍞竴鎬�
-                    if (StringUtils.isNotEmpty(user.getEmail()))
-                    {
-                        SysUser emailCheck = userMapper.checkEmailUnique(user.getEmail());
-                        if (StringUtils.isNotNull(emailCheck))
-                        {
-                            failureNum++;
-                            failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆澶辫触锛氶偖绠� " + user.getEmail() + " 宸茶鐢ㄦ埛 " + emailCheck.getUserName() + " 浣跨敤");
-                            continue;
-                        }
-                    }
-                    
-                    String password = configService.selectConfigByKey("sys.user.initPassword");
                     user.setPassword(SecurityUtils.encryptPassword(password));
                     user.setCreateBy(operName);
-                    userMapper.insertUser(user);
+                    this.insertUser(user);
                     successNum++;
                     successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆鎴愬姛");
                 }
                 else if (isUpdateSupport)
                 {
                     BeanValidators.validateWithException(validator, user);
-                    checkUserAllowed(u);
-                    checkUserDataScope(u.getUserId());
-                    deptService.checkDeptDataScope(user.getDeptId());
-                    
-                    // 鏍¢獙鎵嬫満鍙峰敮涓�鎬э紙鎺掗櫎鑷繁锛�
-                    if (StringUtils.isNotEmpty(user.getPhonenumber()))
-                    {
-                        SysUser phoneCheck = userMapper.checkPhoneUnique(user.getPhonenumber());
-                        if (StringUtils.isNotNull(phoneCheck) && !phoneCheck.getUserId().equals(u.getUserId()))
-                        {
-                            failureNum++;
-                            failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 鏇存柊澶辫触锛氭墜鏈哄彿鐮� " + user.getPhonenumber() + " 宸茶鐢ㄦ埛 " + phoneCheck.getUserName() + " 浣跨敤");
-                            continue;
-                        }
-                    }
-                    
-                    // 鏍¢獙閭鍞竴鎬э紙鎺掗櫎鑷繁锛�
-                    if (StringUtils.isNotEmpty(user.getEmail()))
-                    {
-                        SysUser emailCheck = userMapper.checkEmailUnique(user.getEmail());
-                        if (StringUtils.isNotNull(emailCheck) && !emailCheck.getUserId().equals(u.getUserId()))
-                        {
-                            failureNum++;
-                            failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 鏇存柊澶辫触锛氶偖绠� " + user.getEmail() + " 宸茶鐢ㄦ埛 " + emailCheck.getUserName() + " 浣跨敤");
-                            continue;
-                        }
-                    }
-                    
                     user.setUserId(u.getUserId());
                     user.setUpdateBy(operName);
-                    userMapper.updateUser(user);
+                    this.updateUser(user);
                     successNum++;
                     successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 鏇存柊鎴愬姛");
                 }
@@ -655,10 +602,18 @@
     @Override
     public List<SysUser> selectUsersByBranchDeptIds(List<Long> branchDeptIds)
     {
-        if (branchDeptIds == null || branchDeptIds.isEmpty()) {
-            return new ArrayList<>();
-        }
-        
         return userMapper.selectUsersByBranchDeptIds(branchDeptIds);
     }
-}
+    
+    /**
+     * 鏍规嵁serviceOrderClass鎴杁ispatchOrderClass鏌ヨ鍏锋湁canViewAllConsult鏉冮檺鐨勭敤鎴�
+     * 
+     * @param orderClass serviceOrderClass鎴杁ispatchOrderClass
+     * @return 鐢ㄦ埛鍒楄〃
+     */
+    @Override
+    public List<SysUser> selectUsersByOrderClassAndCanViewAllConsult(String orderClass)
+    {
+        return userMapper.selectUsersByOrderClassAndCanViewAllConsult(orderClass);
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index bdd74b3..c0abc50 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -300,4 +300,19 @@
 		ORDER BY u.create_time DESC
 	</select>
 	
-</mapper> 
\ No newline at end of file
+	<!-- 鏍规嵁serviceOrderClass鎴杁ispatchOrderClass鏌ヨ鍏锋湁canViewAllConsult鏉冮檺鐨勭敤鎴� -->
+	<select id="selectUsersByOrderClassAndCanViewAllConsult" resultMap="SysUserResult">
+		SELECT DISTINCT
+			u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, 
+			u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.create_time,
+			u.can_view_all_consult,u.oa_order_class
+
+		FROM sys_user u
+		WHERE u.del_flag = '0'
+			AND u.status = '0'
+			AND u.can_view_all_consult = '1'
+			AND u.oa_order_class like concat('%', #{orderClass}, '%')
+		ORDER BY u.create_time DESC
+	</select>
+	
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/system/notify/channelConfig.vue b/ruoyi-ui/src/views/system/notify/channelConfig.vue
index 5e13fa6..855f979 100644
--- a/ruoyi-ui/src/views/system/notify/channelConfig.vue
+++ b/ruoyi-ui/src/views/system/notify/channelConfig.vue
@@ -3,17 +3,14 @@
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="閫氱煡绫诲瀷" prop="notifyType">
         <el-select v-model="queryParams.notifyType" placeholder="璇烽�夋嫨閫氱煡绫诲瀷" clearable>
-          <el-option label="浠诲姟鍒嗛厤" value="TASK_ASSIGN" />
-          <el-option label="鐘舵�佸彉鏇�" value="STATUS_CHANGE" />
-          <el-option label="浠诲姟鍒涘缓" value="TASK_CREATE" />
+         <el-option v-for="dict in dict.type.sys_notify_type" :key="dict.value" :label="dict.label" :value="dict.value" />
+          
         </el-select>
       </el-form-item>
       <el-form-item label="娓犻亾" prop="channel">
         <el-select v-model="queryParams.channel" placeholder="璇烽�夋嫨娓犻亾" clearable>
-          <el-option label="寰俊璁㈤槄娑堟伅" value="WECHAT" />
-          <el-option label="鐭俊" value="SMS" />
-          <el-option label="绔欏唴娑堟伅" value="SITE_MSG" />
-          <el-option label="APP鎺ㄩ��" value="APP_PUSH" />
+          <el-option v-for="dict in dict.type.sys_notify_channel" :key="dict.value" :label="dict.label" :value="dict.value" />
+          
         </el-select>
       </el-form-item>
       <el-form-item label="鏄惁鍚敤" prop="enabled">
@@ -121,18 +118,12 @@
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="閫氱煡绫诲瀷" prop="notifyType">
           <el-select v-model="form.notifyType" placeholder="璇烽�夋嫨閫氱煡绫诲瀷" style="width: 100%">
-            <el-option label="浠诲姟鍒嗛厤" value="TASK_ASSIGN" />
-            <el-option label="鐘舵�佸彉鏇�" value="STATUS_CHANGE" />
-            <el-option label="浠诲姟鍒涘缓" value="TASK_CREATE" />
+            <el-option v-for="dict in dict.type.sys_notify_type" :key="dict.value" :label="dict.label" :value="dict.value" />
           </el-select>
         </el-form-item>
         <el-form-item label="娓犻亾" prop="channel">
           <el-select v-model="form.channel" placeholder="璇烽�夋嫨娓犻亾" style="width: 100%">
-            <el-option label="寰俊璁㈤槄娑堟伅" value="WECHAT" />
-            <el-option label="鐭俊" value="SMS" />
-            <el-option label="绔欏唴娑堟伅" value="SITE_MSG" />
-            <el-option label="APP鎺ㄩ��" value="APP_PUSH" />
-            <el-option label="浼佷笟寰俊" value="QY_WECHAT" />
+            <el-option v-for="dict in dict.type.sys_notify_channel" :key="dict.value" :label="dict.label" :value="dict.value" />
           </el-select>
         </el-form-item>
         <el-form-item label="鏄惁鍚敤" prop="enabled">
diff --git a/ruoyi-ui/src/views/system/notify/log/index.vue b/ruoyi-ui/src/views/system/notify/log/index.vue
index e7079b9..071381b 100644
--- a/ruoyi-ui/src/views/system/notify/log/index.vue
+++ b/ruoyi-ui/src/views/system/notify/log/index.vue
@@ -88,7 +88,7 @@
 
     <el-table v-loading="loading" :data="notifySendLogList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="ID" align="center" prop="id" />
+      
       <el-table-column label="閫氱煡浠诲姟ID" align="center" prop="notifyTaskId" />
       <el-table-column label="浠诲姟ID" align="center" prop="taskId" />
       <el-table-column label="鐢ㄦ埛ID" align="center" prop="userId" />
diff --git a/sql/sys_notify_send_log.sql b/sql/sys_notify_send_log.sql
index c415448..3335ee4 100644
--- a/sql/sys_notify_send_log.sql
+++ b/sql/sys_notify_send_log.sql
@@ -3,34 +3,36 @@
 -- 鐢ㄤ簬璁板綍鍚勭被閫氱煡娑堟伅鐨勫彂閫佽褰曪紝瀹炵幇闃查噸鏈哄埗
 -- 纭繚鍚屼竴浠诲姟鍚屼竴浜哄悓涓�閫氱煡绫诲瀷鍙彂閫佷竴娆�
 -- ===========================================
-
 DROP TABLE IF EXISTS `sys_notify_send_log`;
 
 CREATE TABLE `sys_notify_send_log` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭ID',
-  `task_id` bigint(20) NOT NULL COMMENT '浠诲姟ID',
-  `user_id` bigint(20) NOT NULL COMMENT '鎺ユ敹鐢ㄦ埛ID',
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '涓婚敭ID',
+  `notify_task_id` bigint DEFAULT NULL COMMENT '鍏宠仈鐨勯�氱煡浠诲姟ID',
+  `task_id` bigint NOT NULL COMMENT '浠诲姟ID',
+  `user_id` bigint NOT NULL COMMENT '鎺ユ敹鐢ㄦ埛ID',
   `user_name` varchar(64) DEFAULT NULL COMMENT '鎺ユ敹鐢ㄦ埛濮撳悕',
   `notify_type` varchar(32) NOT NULL COMMENT '閫氱煡绫诲瀷锛歍ASK_ASSIGN-浠诲姟鍒嗛厤, STATUS_CHANGE-鐘舵�佸彉鏇�, TASK_CREATE-浠诲姟鍒涘缓',
   `channel` varchar(32) NOT NULL COMMENT '閫氱煡娓犻亾锛歐ECHAT-寰俊璁㈤槄娑堟伅, SMS-鐭俊, APP_PUSH-APP鎺ㄩ��, SITE_MSG-绔欏唴娑堟伅',
+  `send_content` text,
   `send_status` char(1) DEFAULT '0' COMMENT '鍙戦�佺姸鎬侊細0-寰呭彂閫�, 1-鍙戦�佹垚鍔�, 2-鍙戦�佸け璐�',
-  `send_content` text COMMENT '鍙戦�佺殑鍐呭',
   `send_time` datetime DEFAULT NULL COMMENT '鍙戦�佹椂闂�',
-  `send_result` text DEFAULT NULL COMMENT '鍙戦�佺粨鏋�/閿欒淇℃伅',
-  `retry_count` int(11) DEFAULT 0 COMMENT '閲嶈瘯娆℃暟',
+  `send_result` varchar(500) DEFAULT NULL COMMENT '鍙戦�佺粨鏋�/閿欒淇℃伅',
+  `retry_count` int DEFAULT '0' COMMENT '閲嶈瘯娆℃暟',
   `create_time` datetime NOT NULL COMMENT '鍒涘缓鏃堕棿',
   `create_by` varchar(64) DEFAULT '' COMMENT '鍒涘缓鑰�',
   `update_time` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
   `update_by` varchar(64) DEFAULT '' COMMENT '鏇存柊鑰�',
   `remark` varchar(500) DEFAULT NULL COMMENT '澶囨敞',
+  `response_msg` text COMMENT '鍝嶅簲娑堟伅',
   PRIMARY KEY (`id`),
-  UNIQUE KEY `uk_task_user_type_channel` (`task_id`, `user_id`, `notify_type`, `channel`) COMMENT '鍚屼竴浠诲姟鍚屼竴鐢ㄦ埛鍚屼竴绫诲瀷鍚屼竴娓犻亾鍙兘鏈変竴鏉¤褰�',
+  UNIQUE KEY `uk_task_user_type_channel` (`task_id`,`user_id`,`notify_type`,`channel`) COMMENT '鍚屼竴浠诲姟鍚屼竴鐢ㄦ埛鍚屼竴绫诲瀷鍚屼竴娓犻亾鍙兘鏈変竴鏉¤褰�',
   KEY `idx_task_id` (`task_id`),
   KEY `idx_user_id` (`user_id`),
   KEY `idx_notify_type` (`notify_type`),
   KEY `idx_send_status` (`send_status`),
-  KEY `idx_create_time` (`create_time`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='閫氱煡鍙戦�佽褰曡〃';
+  KEY `idx_create_time` (`create_time`),
+  KEY `idx_notify_task_id` (`notify_task_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='閫氱煡鍙戦�佽褰曡〃';
 
 -- ===========================================
 -- 浣跨敤璇存槑锛�
diff --git a/sql/update_sys_notify_send_log.sql b/sql/update_sys_notify_send_log.sql
new file mode 100644
index 0000000..4c9c770
--- /dev/null
+++ b/sql/update_sys_notify_send_log.sql
@@ -0,0 +1,5 @@
+-- 涓� sys_notify_send_log 琛ㄦ坊鍔� response_msg 瀛楁
+-- 璇ヨ剼鏈敤浜庝慨澶嶅洜瀛楁缂哄け瀵艰嚧鐨� SQL 璇硶閿欒
+
+ALTER TABLE `sys_notify_send_log` 
+ADD COLUMN `response_msg` text DEFAULT NULL COMMENT '鍝嶅簲娑堟伅';
\ No newline at end of file

--
Gitblit v1.9.1