From 700f9d0da314a4ea701fe9f68d305b67d72ec5fb Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期三, 08 七月 2026 15:08:37 +0800
Subject: [PATCH] 各类修复fix

---
 backend/src/main/java/com/sinata/appointment/service/ApprovalEngineService.java |   60 ++++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 48 insertions(+), 12 deletions(-)

diff --git a/backend/src/main/java/com/sinata/appointment/service/ApprovalEngineService.java b/backend/src/main/java/com/sinata/appointment/service/ApprovalEngineService.java
index 0825a05..47ab6cc 100644
--- a/backend/src/main/java/com/sinata/appointment/service/ApprovalEngineService.java
+++ b/backend/src/main/java/com/sinata/appointment/service/ApprovalEngineService.java
@@ -17,6 +17,7 @@
 import com.sinata.appointment.entity.MpPassLocalUnitMember;
 import com.sinata.appointment.entity.MpStaffGroupMember;
 import com.sinata.appointment.entity.MpUser;
+import com.sinata.appointment.entity.SysDept;
 import com.sinata.appointment.exception.BizException;
 import com.sinata.appointment.mapper.ApprovalInstanceMapper;
 import com.sinata.appointment.mapper.ApprovalTaskMapper;
@@ -25,6 +26,7 @@
 import com.sinata.appointment.mapper.MpPassLocalUnitMemberMapper;
 import com.sinata.appointment.mapper.MpStaffGroupMemberMapper;
 import com.sinata.appointment.mapper.MpUserMapper;
+import com.sinata.appointment.mapper.SysDeptMapper;
 import com.sinata.appointment.constants.BizErrorCode;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
@@ -54,6 +56,7 @@
     private final ApprovalInstanceMapper approvalInstanceMapper;
     private final ApprovalTaskMapper approvalTaskMapper;
     private final MpUserMapper mpUserMapper;
+    private final SysDeptMapper sysDeptMapper;
     private final MpPassLocalUnitMapper mpPassLocalUnitMapper;
     private final MpPassLocalUnitMemberMapper mpPassLocalUnitMemberMapper;
     private final MpStaffGroupMemberMapper mpStaffGroupMemberMapper;
@@ -119,7 +122,7 @@
         }
         if (ApprovalNodeCode.LEVEL2_DEPT_LEADER.equals(nodeCode)) {
             Long deptId = resolveVisitedDeptId(order);
-            return listEmployeeIdsByDeptAndLeaderFlag(deptId, true);
+            return getDeptLeaderIds(deptId);
         }
         if (ApprovalNodeCode.LEVEL4_VISIT_DEPT.equals(nodeCode)) {
             Long competentDeptId = getVisitCompetentDeptId();
@@ -127,7 +130,7 @@
         }
         if (ApprovalNodeCode.LEVEL5_VISIT_DEPT_LEADER.equals(nodeCode)) {
             Long competentDeptId = getVisitCompetentDeptId();
-            return listEmployeeIdsByDeptAndLeaderFlag(competentDeptId, true);
+            return getDeptLeaderIds(competentDeptId);
         }
         if (ApprovalNodeCode.LEVEL3_LOCAL_DEPT_LEADER.equals(nodeCode)) {
             return List.of();
@@ -162,19 +165,56 @@
         }
     }
 
-    private List<Long> listEmployeeIdsByDeptAndLeaderFlag(Long deptId, boolean leaderFlag) {
+    private List<Long> getDeptLeaderIds(Long deptId) {
         if (deptId == null || deptId <= 0) {
             return List.of();
         }
-        List<MpUser> users =
+        SysDept dept = sysDeptMapper.selectById(deptId);
+        if (dept == null || dept.getDelFlag() != null && dept.getDelFlag() == 1) {
+            return List.of();
+        }
+        List<Long> leaderIds = parseDeptLeaderIds(dept);
+        if (leaderIds.isEmpty()) {
+            return List.of();
+        }
+        List<MpUser> leaders =
                 mpUserMapper.selectList(
                         new LambdaQueryWrapper<MpUser>()
                                 .eq(MpUser::getDelFlag, 0)
                                 .eq(MpUser::getStatus, 1)
                                 .eq(MpUser::getUserType, MiniUserType.EMPLOYEE)
-                                .eq(MpUser::getDeptId, deptId)
-                                .eq(MpUser::getDeptLeaderFlag, leaderFlag));
-        return users.stream().map(MpUser::getId).filter(Objects::nonNull).toList();
+                                .in(MpUser::getId, leaderIds));
+        Map<Long, MpUser> leaderMap = new LinkedHashMap<>();
+        for (MpUser leader : leaders) {
+            leaderMap.put(leader.getId(), leader);
+        }
+        List<Long> result = new ArrayList<>();
+        for (Long id : leaderIds) {
+            if (leaderMap.containsKey(id)) {
+                result.add(id);
+            }
+        }
+        return result;
+    }
+
+    private List<Long> parseDeptLeaderIds(SysDept dept) {
+        List<Long> ids = new ArrayList<>();
+        Set<Long> seen = new LinkedHashSet<>();
+        if (StringUtils.hasText(dept.getLeaderIds())) {
+            for (String part : dept.getLeaderIds().split(",")) {
+                if (!StringUtils.hasText(part)) {
+                    continue;
+                }
+                try {
+                    Long id = Long.parseLong(part.trim());
+                    if (id > 0 && seen.add(id)) {
+                        ids.add(id);
+                    }
+                } catch (NumberFormatException ignored) {
+                }
+            }
+        }
+        return ids;
     }
 
     private List<Long> listAllActiveEmployeeIdsByDept(Long deptId) {
@@ -192,11 +232,7 @@
     }
 
     private List<Long> listEmployeeIdsByDeptWithLeaderFallback(Long deptId) {
-        List<Long> normalEmployees = listEmployeeIdsByDeptAndLeaderFlag(deptId, false);
-        if (normalEmployees != null && !normalEmployees.isEmpty()) {
-            return normalEmployees;
-        }
-        return listEmployeeIdsByDeptAndLeaderFlag(deptId, true);
+        return listAllActiveEmployeeIdsByDept(deptId);
     }
 
     @Transactional(rollbackFor = Exception.class)

--
Gitblit v1.7.1