Ver código fonte

1.控制台业务数据人员数调整

wuhp 1 ano atrás
pai
commit
60b62750a3

+ 36 - 1
src/main/java/com/ydtech/modules/admin/service/impl/SysDeptServiceImpl.java

@@ -16,6 +16,7 @@ import com.ydtech.modules.admin.dao.SysUserDeptRelationshipMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.SysArea;
 import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto;
 import com.ydtech.modules.admin.model.po.SysUserDeptRelationship;
 import com.ydtech.modules.admin.model.report.financialReceivables.FinancialReceivablesMonthVo;
 import com.ydtech.modules.admin.model.vo.*;
@@ -828,6 +829,19 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
         if (users == null || users.isEmpty()) {
             return new ArrayList<>();
         }
+
+        List<SysUser> allList = new ArrayList<>();
+        for (SysUser user : users) {
+            this.addLeadUserList(user,allList);
+        }
+        List<SysUser> collect = allList.stream()
+                .collect(Collectors.collectingAndThen(
+                        Collectors.toMap(SysUser::getId, u -> u, (u1, u2) -> u1),  // 以id作为键来合并重复元素,保留第一个遇到的元素
+                        Map::values))
+                .stream()
+                .distinct()  // 进一步确保去重,主要针对可能存在的相同id但不同对象引用情况(较极端情况)
+                .collect(Collectors.toList());
+
         List<SysUser> topUsers = new ArrayList<>(); //存放1级用户,即没有直接上级的用户
         // 根据组织结构展示级别,筛选顶层节点并构建组织结构树
         if("admin".equals(sysUser.getName())){
@@ -837,10 +851,31 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
             topUsers.add(sysUser);
         }
         // 递归构建用户树结构
-        buildUserTree(topUsers, users,managementSource);
+        buildUserTree(topUsers, collect,managementSource);
         return topUsers;
     }
 
+    private void addLeadUserList(SysUser user, List<SysUser> allList) {
+        addLeadUserList(user, allList, new HashSet<>());
+    }
+
+    private void addLeadUserList(SysUser user, List<SysUser> allList, Set<String> processedIds) {
+        if (user == null) {
+            return;
+        }
+        // 先判断当前用户ID是否已经处理过,如果处理过则直接返回,避免循环引用导致的无限递归
+        if (processedIds.contains(user.getId())) {
+            return;
+        }
+        allList.add(user);
+        processedIds.add(user.getId());
+        String leaderId = user.getLeaderId();
+        if (StringUtils.isNotEmpty(leaderId)) {
+            SysUser leaderUser = sysUserMapper.getByUserId(leaderId);
+            addLeadUserList(leaderUser, allList, processedIds);
+        }
+    }
+
     /**
      * 拼接机构来源
      * @param users

+ 2 - 0
src/main/resources/mapper/modules/admin/SysUserMapper.xml

@@ -1488,6 +1488,7 @@
 
     <select id="getQxFrontlineAgentList" resultType="com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto">
         SELECT
+        su.leader_id  as "leaderId",
         sd.name as "deptName",
         su.name as "name",
         sd.id as "deptId",
@@ -1598,6 +1599,7 @@
         select t.id                 id,
                t.name               name,
                t.mobile             mobile,
+               t.leader_id          leaderId,
                t2.management_source managementSource,
                t.operatorCode,
                t2.id                deptId