SysDeptServiceImpl.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. package com.ydtech.modules.admin.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.ydtech.core.page.HttpResult;
  8. import com.ydtech.core.page.PageRequest;
  9. import com.ydtech.core.page.PageResult;
  10. import com.ydtech.exception.SystemException;
  11. import com.ydtech.modules.admin.dao.SysAreaMapper;
  12. import com.ydtech.modules.admin.dao.SysDeptMapper;
  13. import com.ydtech.modules.admin.model.SysArea;
  14. import com.ydtech.modules.admin.model.SysDept;
  15. import com.ydtech.modules.admin.model.vo.SysDeptRemoveVo;
  16. import com.ydtech.modules.admin.model.SysUser;
  17. import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
  18. import com.ydtech.modules.admin.model.vo.SysDeptVo;
  19. import com.ydtech.modules.admin.model.vo.TreeSysDeptVO;
  20. import com.ydtech.modules.admin.service.SysAreaService;
  21. import com.ydtech.modules.admin.service.SysDeptService;
  22. import com.ydtech.modules.admin.service.SysUserTreeShowLevelService;
  23. import com.ydtech.modules.base.controller.BaseController;
  24. import com.ydtech.modules.protocol.utils.AssertionUtils;
  25. import com.ydtech.utils.StringUtils;
  26. import org.springframework.beans.BeanUtils;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import org.springframework.util.ObjectUtils;
  31. import java.util.*;
  32. import java.util.stream.Collectors;
  33. @Service
  34. public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
  35. implements SysDeptService {
  36. @Autowired
  37. private SysDeptMapper sysDeptMapper;
  38. @Autowired
  39. private SysAreaService sysAreaService;
  40. @Autowired
  41. private SysAreaMapper sysAreaMapper;
  42. @Autowired
  43. private SysUserTreeShowLevelService sysUserTreeShowLevelService;
  44. /**
  45. * 根据用户权限和指定部门ID,查询并构建部门树。
  46. *
  47. * @param deptId 部门ID,用于查询特定部门及其子部门,如果为空或特定值,则查询用户所在部门及其子部门。
  48. * @param managementSource 管理范围来源标识,用于不同场景下的部门树构建。
  49. * @return 返回符合用户权限和管理范围的部门树列表。
  50. */
  51. @Override
  52. public List<SysDept> findTree(String deptId, String managementSource) {
  53. // 获取当前操作用户
  54. SysUser user = BaseController.getUser();
  55. String userId = user.getId();
  56. // 根据用户ID查询用户的部门树展示级别
  57. LambdaQueryWrapper<SysUserTreeShowLevel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  58. lambdaQueryWrapper.eq(SysUserTreeShowLevel::getUserId, userId);
  59. SysUserTreeShowLevel treeShowLevel = sysUserTreeShowLevelService.getOne(lambdaQueryWrapper);
  60. List<SysDept> treeByShowLevel = new ArrayList<>();
  61. //如果当前用户未配置树展示等级,则默认为查询全部
  62. if (Objects.isNull(treeShowLevel)) {
  63. treeShowLevel = new SysUserTreeShowLevel();
  64. treeShowLevel.setShowLevel("subordinate");
  65. }
  66. // 如果指定的部门ID为空或特定值,则使用当前用户所在部门ID
  67. if (null == deptId || "".equals(deptId) || "undefined".equals(deptId)) {
  68. if(!treeShowLevel.getShowLevel().equals("all")) {
  69. deptId = user.getDeptId();
  70. }else{
  71. deptId = "9";
  72. }
  73. }
  74. // 根据用户的部门树展示级别查询相应的部门树
  75. switch (treeShowLevel.getShowLevel()) {
  76. case "all":
  77. treeByShowLevel = findTreeByShowLevel(deptId, managementSource, "all");
  78. break;
  79. case "same":
  80. treeByShowLevel = findTreeByShowLevel(deptId, managementSource, "same");
  81. break;
  82. case "subordinate":
  83. treeByShowLevel = findTreeByShowLevel(deptId, managementSource, "subordinate");
  84. break;
  85. }
  86. return treeByShowLevel;
  87. }
  88. private List<SysDept> findTreeByShowLevel(String deptId, String managementSource, String showLevel) {
  89. SysDept sysDept = getById(deptId);
  90. LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
  91. lqw.eq(SysDept::getDelFlag, 0);
  92. lqw.likeRight(SysDept::getId, deptId);
  93. lqw.orderByAsc(SysDept::getOrderNum);
  94. List<SysDept> sysDeptList = list(lqw);
  95. //判断机构来源条件 进行遍历
  96. if (null != managementSource && !"undefined".equals(managementSource) && !"".equals(managementSource)) {
  97. lqw.eq(SysDept::getManagementSource, managementSource);
  98. //条件
  99. List<SysDept> conditionList = list(lqw);
  100. Map<String, List<SysDept>> conditionMap = conditionList.stream().collect(Collectors.groupingBy(SysDept::getParentId));
  101. Map<String, List<SysDept>> map = conditionList.stream().collect(Collectors.groupingBy(SysDept::getParentId));
  102. //先查第6层
  103. conditionList.forEach(i ->
  104. i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>()))
  105. );
  106. List<SysDept> result = new ArrayList<>();
  107. //再查前4层
  108. int level = 5;
  109. while (level > 0) {
  110. List<SysDept> resultTmp = recursion(sysDeptList, conditionMap);
  111. if (resultTmp.size() == 0) {
  112. break;
  113. } else {
  114. int finalLevel = level;
  115. resultTmp = resultTmp.stream().filter(x->x.getComlevel().equals(String.valueOf(finalLevel))).collect(Collectors.toList());
  116. result.clear();
  117. result.addAll(resultTmp);
  118. }
  119. conditionMap = result.stream().collect(Collectors.groupingBy(SysDept::getParentId));
  120. level--;
  121. }
  122. sysDeptList = result;
  123. } else {
  124. Map<String, List<SysDept>> map = sysDeptList.stream().collect(Collectors.groupingBy(SysDept::getParentId));
  125. sysDeptList.forEach(i -> {
  126. i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>()));
  127. i.setDeptCount(i.getChildren().size());
  128. });
  129. sysDeptList = map.get(sysDept.getParentId());
  130. }
  131. if (showLevel.equals("same")) {
  132. if (null != managementSource && !"undefined".equals(managementSource) && !"".equals(managementSource)) {
  133. if (sysDept.getManagementSource().equals(managementSource)){
  134. sysDeptList.clear();
  135. sysDeptList.add(sysDept);
  136. }else {
  137. return new ArrayList<>();
  138. }
  139. }else {
  140. sysDeptList.clear();
  141. sysDeptList.add(sysDept);
  142. }
  143. }
  144. return sysDeptList;
  145. }
  146. private List<SysDept> recursion(List<SysDept> sysDeptList, Map<String, List<SysDept>> conditionMap) {
  147. List<SysDept> result = new ArrayList<>();
  148. sysDeptList.forEach(i ->
  149. conditionMap.forEach((key, value) -> {
  150. if (i.getId().equals(key)) {
  151. if (i.getChildren() == null) {
  152. i.setChildren(new ArrayList<>());
  153. }
  154. i.getChildren().addAll(value);
  155. //处理总部的排序为空造成的空指针报错处理 add by hxl
  156. i.setOrderNum(i.getOrderNum()==null?0:i.getOrderNum());
  157. result.add(i);
  158. }
  159. })
  160. );
  161. result.sort(Comparator.comparing(SysDept::getOrderNum));
  162. return result;
  163. }
  164. @Override
  165. public List<SysDept> getUserList(String deptId) {
  166. SysDept sysDept = getById(deptId);
  167. LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
  168. lqw.eq(SysDept::getDelFlag, 0);
  169. lqw.likeRight(SysDept::getId, deptId);
  170. List<SysDept> sysDeptList = list(lqw);
  171. Map<String, List<SysDept>> map = sysDeptList.stream().collect(Collectors.groupingBy(SysDept::getParentId));
  172. return map.get(sysDept.getParentId());
  173. }
  174. @Override
  175. @Transactional
  176. public void addDept(SysDeptVo sysDeptVo) {
  177. SysDept sysDept = new SysDept();
  178. BeanUtils.copyProperties(sysDeptVo, sysDept);
  179. String comlevel = ObjectUtils.isEmpty(sysDept.getComlevel()) ? "" : sysDept.getComlevel();
  180. String parentId = sysDept.getParentId();
  181. String number;
  182. if (comlevel.equals("2")) {
  183. AssertionUtils.isStringEmpty(sysDept.getProvince(), "二级机构份必填");
  184. number = sysDept.getProvince().substring(0, 2);
  185. } else if (comlevel.equals("3")) {
  186. AssertionUtils.isStringEmpty(sysDept.getCity(), "三级机构市必填");
  187. number = sysDept.getCity().substring(0, 4);
  188. } else if (comlevel.equals("4")) {
  189. AssertionUtils.isStringEmpty(sysDept.getArea(), "四级机构区必填");
  190. number = sysDept.getArea().substring(0, 6);
  191. } else {
  192. if (comlevel.equals("5")) {
  193. sysDeptVo.setDeptType("M");
  194. }
  195. String maxId = baseMapper.getMaxId(sysDept.getParentId());
  196. if (!maxId.equals("0")) {
  197. String substring = maxId.substring(sysDept.getParentId().length() + 1);
  198. int i = Integer.parseInt("1" + substring) + 1;
  199. number = String.valueOf(i);
  200. } else {
  201. number = "101";
  202. }
  203. }
  204. String substring = number.substring(number.length() - 2);
  205. String serialNumber;
  206. if ("M,D".contains(sysDeptVo.getDeptType())) {
  207. serialNumber = parentId + sysDeptVo.getDeptType() + substring;
  208. } else {
  209. serialNumber = parentId + substring;
  210. }
  211. sysDept.setId(serialNumber);
  212. SysDept dept = getById(sysDept.getId());
  213. if (!ObjectUtils.isEmpty(dept)) {
  214. throw new SystemException("机构编号为:" + dept.getId() + " " + dept.getName() + "已被占用");
  215. }
  216. SysDept parentDept = baseMapper.selectById(sysDept.getParentId());
  217. if (parentDept.getComlevel().equals("5")){
  218. sysDept.setManagementSource(parentDept.getManagementSource());
  219. }
  220. // 查询当前部门序号是否存在
  221. LambdaQueryWrapper<SysDept> qw = new LambdaQueryWrapper<>();
  222. qw.eq(SysDept::getDelFlag, 0); // 删除标志为未删除
  223. qw.eq(SysDept::getParentId, sysDept.getParentId()); // 父级部门ID相同
  224. qw.eq(SysDept::getOrderNum, sysDept.getOrderNum()); // 排序号相同
  225. boolean exists = baseMapper.exists(qw);
  226. if (exists) {
  227. // 如果存在,查询该父级部门下排序号大于当前部门的部门列表
  228. LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
  229. lqw.eq(SysDept::getDelFlag, 0); // 删除标志为未删除
  230. lqw.eq(SysDept::getParentId, sysDept.getParentId()); // 父级部门ID相同
  231. lqw.ge(SysDept::getOrderNum, sysDept.getOrderNum()); // 排序号大于等于当前部门
  232. List<SysDept> sysDeptList = list(lqw);
  233. // 更新这些部门的排序号
  234. sysDeptList.forEach(i -> {
  235. i.setOrderNum(i.getOrderNum() + 1);
  236. updateById(i);
  237. });
  238. }
  239. boolean b = save(sysDept);
  240. AssertionUtils.isSucceed(b, "删除失败");
  241. }
  242. @Override
  243. @Transactional
  244. public HttpResult updateDept(SysDept record) {
  245. // 查询修改的序号是否存在
  246. LambdaQueryWrapper<SysDept> qw = new LambdaQueryWrapper<>();
  247. qw.eq(SysDept::getDelFlag, 0); // 删除标志为未删除
  248. qw.eq(SysDept::getParentId, record.getParentId()); // 父级部门ID相同
  249. qw.eq(SysDept::getOrderNum, record.getOrderNum()); // 排序号相同
  250. boolean exists = baseMapper.exists(qw);
  251. //不存在则直接修改
  252. if (!exists) {
  253. baseMapper.updateById(record);
  254. return HttpResult.ok();
  255. }
  256. //查询机构
  257. SysDept sysDept = getById(record.getId());
  258. //原本的序号
  259. Integer orderNum = sysDept.getOrderNum();
  260. //本次修改的序号
  261. Integer newOrderNum = record.getOrderNum();
  262. // 向上换位
  263. if (newOrderNum < orderNum) {
  264. // 查询该父级部门下排序号大于当前部门的部门列表
  265. LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
  266. lqw.eq(SysDept::getDelFlag, 0); // 删除标志为未删除
  267. lqw.eq(SysDept::getParentId, record.getParentId()); // 父级部门ID相同
  268. lqw.ge(SysDept::getOrderNum, record.getOrderNum()); // 排序号大于等于当前部门
  269. List<SysDept> sysDeptList = list(lqw);
  270. sysDeptList.sort(Comparator.comparing(SysDept::getOrderNum));
  271. for (SysDept dept : sysDeptList) {
  272. dept.setOrderNum(dept.getOrderNum() + 1);
  273. updateById(dept);
  274. if (dept.getOrderNum().equals(orderNum)) {
  275. break;
  276. }
  277. }
  278. baseMapper.updateById(record);
  279. }
  280. //向下换位
  281. if (newOrderNum > orderNum) {
  282. // 查询该父级部门下排序号小于当前部门的部门列表
  283. LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
  284. lqw.eq(SysDept::getDelFlag, 0); // 删除标志为未删除
  285. lqw.eq(SysDept::getParentId, record.getParentId()); // 父级部门ID相同
  286. lqw.le(SysDept::getOrderNum, record.getOrderNum()); // 排序号大于等于当前部门
  287. List<SysDept> sysDeptList = list(lqw);
  288. sysDeptList.sort(Comparator.comparing(SysDept::getOrderNum).reversed());
  289. for (SysDept dept : sysDeptList) {
  290. dept.setOrderNum(dept.getOrderNum() - 1);
  291. updateById(dept);
  292. if (dept.getOrderNum().equals(orderNum)) {
  293. break;
  294. }
  295. }
  296. baseMapper.updateById(record);
  297. }
  298. if (newOrderNum.equals(orderNum)) {
  299. baseMapper.updateById(record);
  300. }
  301. return HttpResult.ok();
  302. }
  303. @Override
  304. public void deleteDept(SysDeptRemoveVo sysDeptRemoveVo) {
  305. SysDept sysDept = getById(sysDeptRemoveVo.getDeptId());
  306. List<SysDept> list = lambdaQuery().eq(SysDept::getParentId, sysDept.getId()).list();
  307. if (list.isEmpty()) {
  308. boolean b = removeById(sysDeptRemoveVo.getDeptId());
  309. AssertionUtils.isSucceed(b, "删除失败");
  310. } else {
  311. throw new SystemException(sysDept.getName() + "下还有其他隶属机构");
  312. }
  313. }
  314. @Override
  315. public PageResult<SysDept> findSubDepts(PageRequest pageRequest) {
  316. String id = pageRequest.getColumnFilterValue(pageRequest, "id");
  317. String managementSource = pageRequest.getColumnFilterValue(pageRequest, "managementSource");
  318. Page<SysDept> p = PageRequest.buildPageRequest(pageRequest);
  319. LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
  320. lqw.eq(StringUtils.isNotEmpty(id), SysDept::getParentId, id);
  321. lqw.eq(StringUtils.isNotEmpty(managementSource), SysDept::getManagementSource, managementSource);
  322. IPage<SysDept> pResult = page(p, lqw);
  323. //传入查询条件
  324. return PageResult.buildPageResult(pResult);
  325. }
  326. public String findMaxDeptId(String deptId) {
  327. if (deptId == null) return "";
  328. String result = "00";
  329. QueryWrapper<SysDept> qw = new QueryWrapper<>();
  330. qw.likeRight(StringUtils.isNotEmpty(deptId), "id", deptId + "D%");
  331. qw.select("IFNULL(MAX(id),0) maxid");
  332. Map<String, Object> m = getMap(qw);
  333. String maxId = m.get("maxid").toString();
  334. if (!maxId.equalsIgnoreCase("0") && !maxId.equalsIgnoreCase(deptId)) {
  335. result = maxId.substring(deptId.length() + 1);
  336. }
  337. return result;
  338. }
  339. public String findMaxHouseId(String deptId) {
  340. if (deptId == null) {
  341. return "";
  342. }
  343. String result = "00";
  344. QueryWrapper<SysDept> qw = new QueryWrapper<>();
  345. qw.like(StringUtils.isNotEmpty(deptId), "id", deptId + "M%");
  346. qw.select("IFNULL(MAX(id),0) maxid");
  347. Map<String, Object> m = getMap(qw);
  348. String maxId = m.get("maxid").toString();
  349. if (!maxId.equalsIgnoreCase("0") && !maxId.equalsIgnoreCase(deptId)) {
  350. result = maxId.substring(deptId.length() + 1);
  351. }
  352. return result;
  353. }
  354. //
  355. @Override
  356. public List<TreeSysDeptVO> selectListWhere(String where, Object[] paramValues) {
  357. String sql = "select t1.id, t1.name, t1.parent_id, t1.dept_code, t1.province, t1.city, t1.area, t1.comlevel from sys_dept t1 " +
  358. "where del_flag='0' " + where;
  359. QueryWrapper<SysDept> qw = new QueryWrapper<>();
  360. qw.select(sql);
  361. List<SysDept> sysDeptList = list(qw);
  362. List<TreeSysDeptVO> recordList = new ArrayList<TreeSysDeptVO>();
  363. sysDeptList.forEach(a -> {
  364. TreeSysDeptVO model = new TreeSysDeptVO();
  365. model.setId(a.getId());
  366. model.setName(a.getName());
  367. model.setParentId(a.getParentId());
  368. model.setDeptCode(a.getDeptCode());
  369. model.setProvince(a.getProvince());
  370. model.setCity(a.getCity());
  371. model.setArea(a.getArea());
  372. model.setComlevel(a.getComlevel());
  373. recordList.add(model);
  374. });
  375. return recordList;
  376. }
  377. /**
  378. * 获取机构树(不包含团队 dept_type=C)
  379. */
  380. @Override
  381. public List<SysDept> findCompanyTree(String deptId) {
  382. SysDept sysDept = getById(deptId);
  383. LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
  384. lqw.eq(SysDept::getDelFlag, 0);
  385. lqw.likeRight(SysDept::getId, deptId);
  386. lqw.and((wrapper)->{wrapper.eq(SysDept::getDeptType,'C').or().eq(SysDept::getId,'9');});
  387. List<SysDept> sysDeptList = list(lqw);
  388. Map<String, List<SysDept>> map = sysDeptList.stream().collect(Collectors.groupingBy(SysDept::getParentId));
  389. sysDeptList.forEach(i -> i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>())));
  390. return map.get(sysDept.getParentId());
  391. }
  392. /**
  393. * 根据传入机构,查询归属所有团队
  394. */
  395. @Override
  396. public List<SysDept> findTeamList(String deptId) {
  397. SysDept sysDept = getById(deptId);
  398. LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
  399. lqw.eq(SysDept::getDelFlag, 0);
  400. lqw.likeRight(SysDept::getId, deptId);
  401. lqw.eq(SysDept::getDeptType,'D');
  402. lqw.apply(" exists (SELECT 1 FROM `sys_dept` b WHERE sys_dept.parent_id = b.`id` AND b.`comlevel`='5') ");
  403. List<SysDept> sysDeptList = list(lqw);
  404. return sysDeptList;
  405. }
  406. /**
  407. * @version
  408. * @author: hxl
  409. * @Date: 2024/4/28 10:24
  410. * @Description: 查询省、市、县 、门店的列表
  411. */
  412. @Override
  413. public List<SysDept> queryListByParentId(String level, String parentId) {
  414. return sysDeptMapper.queryListByParentId(level,parentId);
  415. }
  416. @Override
  417. public String queryBelongArea(String deptId){
  418. //长度大于8的话 进行切割
  419. StringBuilder result = new StringBuilder();
  420. if(deptId.length() >= 8)
  421. {
  422. String area = deptId.substring(2,8);
  423. SysArea sysArea = sysAreaMapper.selectOne(new LambdaQueryWrapper<SysArea>().eq(SysArea::getAreaCode, area));
  424. if(sysArea == null){
  425. return "";
  426. }
  427. List<SysArea> sysAreas = sysAreaService.queryAllParent(sysArea);
  428. result.append(sysAreas.get(2).getAreaCname());
  429. result.append(sysAreas.get(1).getAreaCname());
  430. result.append(sysAreas.get(0).getAreaCname());
  431. }
  432. return result.toString();
  433. }
  434. @Override
  435. public List<SysArea> getListQueryBelongArea(String deptId) {
  436. //长度大于8的话 进行切割
  437. List<SysArea> sysAreas = new ArrayList<>();
  438. if (deptId.length() >= 8) {
  439. String area = deptId.substring(2, 8);
  440. SysArea sysArea = sysAreaMapper.selectOne(new LambdaQueryWrapper<SysArea>().eq(SysArea::getAreaCode, area));
  441. if (sysArea == null) {
  442. return null;
  443. }
  444. sysAreas = sysAreaService.queryAllParent(sysArea);
  445. }
  446. return sysAreas;
  447. }
  448. /**
  449. * @version
  450. * @author: hxl
  451. * @Date: 2024/6/28 8:43
  452. * @Description: 查询后线机构树
  453. */
  454. @Override
  455. public List<SysDept> queryHXDeptTree() {
  456. //所有的后线机构
  457. List<SysDept> sysDeptsHX = sysDeptMapper.queryHXDeptTree();
  458. //查询后线中顶级的数据
  459. List<SysDept> resultList =new ArrayList<SysDept>();
  460. List<SysDept> sysDeptTop = sysDeptsHX.stream().filter(item ->"99".equals(item.getId())).collect(Collectors.toList());
  461. for (SysDept dept : sysDeptTop) {
  462. resultList.add(buildDeptTree(dept,sysDeptsHX));
  463. }
  464. return resultList;
  465. }
  466. /**
  467. * 递归构建树形结构
  468. */
  469. private SysDept buildDeptTree(SysDept dept, List<SysDept> deptList){
  470. for (SysDept d : deptList) {
  471. if (dept.getId().equals(d.getParentId())) {
  472. if (null == dept.getChildren()) {
  473. dept.setChildren(new ArrayList<SysDept>());
  474. }
  475. //递归调用
  476. dept.getChildren().add(buildDeptTree(d, deptList));
  477. }
  478. }
  479. return dept;
  480. }
  481. /**
  482. * @version
  483. * @author: hxl
  484. * @Date: 2024/6/28 8:42
  485. * @Description: 查询前线机构树
  486. */
  487. @Override
  488. public List<SysDept> queryQXDeptTree() {
  489. List<SysDept> sysDeptAll = sysDeptMapper.queryListByQXDept();
  490. //查询后线中顶级的数据
  491. List<SysDept> resultList =new ArrayList<SysDept>();
  492. List<SysDept> sysDeptTop = sysDeptAll.stream().filter(item ->"3".equals(item.getComlevel())).collect(Collectors.toList());
  493. for (SysDept dept : sysDeptTop) {
  494. resultList.add(buildDeptTree(dept,sysDeptAll));
  495. }
  496. return sysDeptMapper.queryListByQXDept();
  497. }
  498. }