SysDeptServiceImpl.java 27 KB

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