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