| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | } |
| | | 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(); |
| | |
| | | } |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | |
| | | 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) { |
| | |
| | | } |
| | | |
| | | 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) |