|
|
@@ -501,9 +501,51 @@ public class LifeSysDeptServiceImpl implements LifeSysDeptService {
|
|
|
// 对根节点按排序值排序
|
|
|
result.sort(Comparator.comparing(LifeSysDeptVo::getDeptSort, Comparator.nullsLast(Integer::compareTo)));
|
|
|
|
|
|
+ // 第三步:统计每个部门的人员数量(包含子部门)
|
|
|
+ for (LifeSysDeptVo vo : result) {
|
|
|
+ calculateMemberCount(vo);
|
|
|
+ }
|
|
|
+
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 递归计算部门人员数量(包含子部门)
|
|
|
+ *
|
|
|
+ * @param deptVo 部门VO
|
|
|
+ * @return 人员数量
|
|
|
+ */
|
|
|
+ private Integer calculateMemberCount(LifeSysDeptVo deptVo) {
|
|
|
+ if (deptVo == null || deptVo.getDeptId() == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 统计当前部门直接的人员数量
|
|
|
+ QueryWrapper<LifeSys> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("department_id", String.valueOf(deptVo.getDeptId()));
|
|
|
+ queryWrapper.eq("delete_flag", 0); // 未删除的用户
|
|
|
+ queryWrapper.eq("status", 1); // 启用的用户
|
|
|
+ Integer directMemberCount = lifeSysMapper.selectCount(queryWrapper);
|
|
|
+ if (directMemberCount == null) {
|
|
|
+ directMemberCount = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 递归统计所有子部门的人员数量
|
|
|
+ Integer childrenMemberCount = 0;
|
|
|
+ if (deptVo.getChildren() != null && !deptVo.getChildren().isEmpty()) {
|
|
|
+ for (LifeSysDeptVo child : deptVo.getChildren()) {
|
|
|
+ childrenMemberCount += calculateMemberCount(child);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 总人员数量 = 当前部门人员数量 + 所有子部门人员数量
|
|
|
+ Integer totalMemberCount = directMemberCount + childrenMemberCount;
|
|
|
+ deptVo.setMemberCount(totalMemberCount);
|
|
|
+ deptVo.setCurrentMemberCount(directMemberCount);
|
|
|
+
|
|
|
+ return totalMemberCount;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public R<List<LifeSysVo>> viewMembers(Integer pageNum, Integer pageSize, Long deptId) {
|
|
|
log.info("LifeSysDeptServiceImpl.viewMembers?pageNum={}, pageSize={}, deptId={}", pageNum, pageSize, deptId);
|