|
|
@@ -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
|