OrganizeServiceImpl.java 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240
  1. package jnpf.permission.service.impl;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import com.baomidou.dynamic.datasource.annotation.DSTransactional;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.core.metadata.IPage;
  8. import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.google.common.collect.ImmutableList;
  11. import com.google.common.collect.ImmutableMap;
  12. import com.google.common.collect.Lists;
  13. import jnpf.base.ActionResult;
  14. import jnpf.base.UserInfo;
  15. import jnpf.base.entity.DictionaryDataEntity;
  16. import jnpf.base.service.DictionaryDataService;
  17. import jnpf.base.service.SuperServiceImpl;
  18. import jnpf.base.service.SysconfigService;
  19. import jnpf.constant.*;
  20. import jnpf.emnus.OrgTypeEnum;
  21. import jnpf.emnus.SysParamEnum;
  22. import jnpf.message.service.SynThirdDingTalkService;
  23. import jnpf.message.service.SynThirdQyService;
  24. import jnpf.message.util.SynThirdConsts;
  25. import jnpf.model.BaseSystemInfo;
  26. import jnpf.permission.entity.*;
  27. import jnpf.permission.mapper.OrganizeMapper;
  28. import jnpf.permission.model.organize.OrganizeConditionModel;
  29. import jnpf.permission.model.organize.OrganizeListVO;
  30. import jnpf.permission.model.organize.OrganizeModel;
  31. import jnpf.permission.model.organize.OrganizePagination;
  32. import jnpf.permission.service.*;
  33. import jnpf.permission.util.PermissionUtil;
  34. import jnpf.util.*;
  35. import jnpf.util.enums.DictionaryDataEnum;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.stereotype.Service;
  38. import java.util.*;
  39. import java.util.stream.Collectors;
  40. /**
  41. * 组织机构
  42. *
  43. * @author JNPF开发平台组
  44. * @version V3.1.0
  45. * @copyright 引迈信息技术有限公司
  46. * @date 2019年9月26日 上午9:18
  47. */
  48. @Service
  49. public class OrganizeServiceImpl extends SuperServiceImpl<OrganizeMapper, OrganizeEntity> implements OrganizeService {
  50. @Autowired
  51. private PositionService positionService;
  52. @Autowired
  53. private CacheKeyUtil cacheKeyUtil;
  54. @Autowired
  55. private UserService userService;
  56. @Autowired
  57. private RedisUtil redisUtil;
  58. @Autowired
  59. private UserRelationService userRelationService;
  60. @Autowired
  61. private RoleRelationService roleRelationService;
  62. @Autowired
  63. private SynThirdQyService synThirdQyService;
  64. @Autowired
  65. private SynThirdDingTalkService synThirdDingTalkService;
  66. @Autowired
  67. private OrganizeAdministratorService organizeAdministratorService;
  68. @Autowired
  69. private DictionaryDataService dictionaryDataService;
  70. @Autowired
  71. private SysconfigService sysconfigApi;
  72. @Autowired
  73. private CodeNumService codeNumService;
  74. @Override
  75. public List<OrganizeEntity> getList(OrganizePagination pagination) {
  76. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  77. boolean flag = false;
  78. //关键词查询
  79. if (StringUtil.isNotEmpty(pagination.getKeyword())) {
  80. flag = true;
  81. queryWrapper.lambda().and(t -> t.like(OrganizeEntity::getFullName, pagination.getKeyword()).or()
  82. .like(OrganizeEntity::getEnCode, pagination.getKeyword()));
  83. }
  84. //是否查询子组织
  85. if (StringUtil.isNotEmpty(pagination.getParentId())) {
  86. if (Objects.equals(pagination.getParentId(), "0")) {
  87. queryWrapper.lambda().eq(OrganizeEntity::getParentId, "-1");
  88. } else {
  89. queryWrapper.lambda().eq(OrganizeEntity::getParentId, pagination.getParentId());
  90. }
  91. }
  92. //是否查询启用禁用
  93. if (Objects.equals(pagination.getEnabledMark(), 1)) {
  94. queryWrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1);
  95. }
  96. //排序
  97. queryWrapper.lambda().orderByAsc(OrganizeEntity::getSortCode).orderByAsc(OrganizeEntity::getCreatorTime);
  98. if (flag) {
  99. queryWrapper.lambda().orderByDesc(OrganizeEntity::getLastModifyTime);
  100. }
  101. //不分页
  102. if (Objects.equals(pagination.getDataType(), 1)) {
  103. return list(queryWrapper);
  104. }
  105. //分页
  106. Page<OrganizeEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
  107. IPage<OrganizeEntity> iPage = this.page(page, queryWrapper);
  108. return pagination.setData(iPage.getRecords(), iPage.getTotal());
  109. }
  110. @Override
  111. public void create(OrganizeEntity entity) {
  112. if (StringUtil.isEmpty(entity.getId())) {
  113. entity.setId(RandomUtil.uuId());
  114. }
  115. // 自动生成编码
  116. if (StringUtil.isEmpty(entity.getEnCode())) {
  117. entity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.ZZ), code -> this.isExistByEnCode(code, null)));
  118. }
  119. // 设置组织树形id和名称
  120. setOrgTreeIdAndName(entity);
  121. entity.setCreatorUserId(UserProvider.getUser().getUserId());
  122. String positionId = RandomUtil.uuId();
  123. entity.setDutyPosition(positionId);
  124. entity.setEnabledMark(1);
  125. this.save(entity);
  126. //生成默认岗位
  127. BaseSystemInfo sysInfo = sysconfigApi.getSysInfo();
  128. PositionEntity positionEntity = new PositionEntity();
  129. positionEntity.setId(positionId);
  130. positionEntity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.GW), code -> positionService.isExistByEnCode(code, null)));
  131. positionEntity.setFullName(sysInfo.getSysPositionName());
  132. positionEntity.setOrganizeId(entity.getId());
  133. positionEntity.setDefaultMark(1);
  134. positionService.create(positionEntity);
  135. redisUtil.remove(cacheKeyUtil.getOrganizeInfoList());
  136. redisUtil.remove(cacheKeyUtil.getPositionList());
  137. redisUtil.remove(TenantHolder.getDatasourceId() + CacheKeyUtil.SYS_ORG_Tree);
  138. redisUtil.remove(TenantHolder.getDatasourceId() + CacheKeyUtil.SYS_POS);
  139. }
  140. @Override
  141. public boolean update(String id, OrganizeEntity entity) {
  142. entity.setId(id);
  143. if (StringUtil.isEmpty(entity.getEnCode())) {
  144. entity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.ZZ), code -> this.isExistByEnCode(code, id)));
  145. }
  146. entity.setLastModifyTime(DateUtil.getNowDate());
  147. entity.setLastModifyUserId(UserProvider.getUser().getUserId());
  148. entity.setEnabledMark(1);
  149. // 设置组织树形id和名称
  150. setOrgTreeIdAndName(entity);
  151. boolean updateById = this.updateById(entity);
  152. redisUtil.remove(cacheKeyUtil.getOrganizeInfoList());
  153. redisUtil.remove(cacheKeyUtil.getPositionList());
  154. redisUtil.remove(TenantHolder.getDatasourceId() + CacheKeyUtil.SYS_ORG_Tree);
  155. redisUtil.remove(TenantHolder.getDatasourceId() + CacheKeyUtil.SYS_POS);
  156. return updateById;
  157. }
  158. @Override
  159. public OrganizeEntity getInfo(String id) {
  160. return this.getById(id);
  161. }
  162. @Override
  163. @DSTransactional
  164. public ActionResult<String> delete(String orgId, Boolean isSyn) {
  165. OrganizeEntity organizeEntity = this.getInfo(orgId);
  166. if (organizeEntity == null) {
  167. return ActionResult.fail(MsgCode.FA003.get());
  168. }
  169. List<OrganizeEntity> orgList = getAllChild(orgId);
  170. Map<Integer,List<OrganizeEntity>> map = new HashMap<>();
  171. for (OrganizeEntity org : orgList) {
  172. String organizeIdTree = org.getOrganizeIdTree();
  173. int length = organizeIdTree.split(",").length;
  174. List<OrganizeEntity> organizeEntityList = map.get(length)!=null?map.get(length):new ArrayList<>();
  175. organizeEntityList.add(org);
  176. map.put(length,organizeEntityList);
  177. }
  178. List<String> orgIdS = orgList.stream().map(OrganizeEntity::getId).collect(Collectors.toList());
  179. List<PositionEntity> posList = positionService.getListByOrgIds(orgIdS);
  180. List<String> posIds = posList.stream().map(PositionEntity::getId).collect(Collectors.toList());
  181. List<String> objectIds = new ArrayList<>();
  182. objectIds.addAll(orgIdS);
  183. objectIds.addAll(posIds);
  184. List<UserRelationEntity> userList = userRelationService.getListByObjectIdAll(objectIds);
  185. if (CollectionUtil.isNotEmpty(userList)) {
  186. return ActionResult.fail(MsgCode.PS040.get(MsgCode.PS003.get()));
  187. }
  188. //删除组织,和岗位
  189. for (OrganizeEntity item : orgList) {
  190. this.removeById(item.getId());
  191. positionService.deleteByOrgId(item.getId());
  192. }
  193. List<Integer> collect = map.keySet()
  194. .stream().sorted(Comparator.comparing(Integer::byteValue).reversed())
  195. .collect(Collectors.toList());
  196. List<OrganizeEntity> organizeEntities =new ArrayList<>();
  197. for (Integer integer : collect) {
  198. organizeEntities.addAll(map.get(integer));
  199. }
  200. if (isSyn) {
  201. ThreadPoolExecutorUtil.getExecutor().execute(() -> {
  202. try {
  203. //删除部门后判断是否需要同步到企业微信
  204. synThirdQyService.unifyDepartmentSysToQy(false, organizeEntities, "",SynThirdConsts.DELETE_DEP);
  205. //删除部门后判断是否需要同步到钉钉
  206. synThirdDingTalkService.unifyDepartmentSysToDing(false, organizeEntities, "",SynThirdConsts.DELETE_DEP);
  207. } catch (Exception e) {
  208. log.error("删除部门后同步失败到企业微信或钉钉失败,异常:" + e.getMessage());
  209. }
  210. });
  211. }
  212. //删除关系
  213. for (UserRelationEntity ure : userList) {
  214. userRelationService.removeById(ure);
  215. }
  216. List<RoleRelationEntity> roleList = roleRelationService.getListByObjectId(objectIds, null);
  217. for (RoleRelationEntity rre : roleList) {
  218. roleRelationService.removeById(rre);
  219. }
  220. redisUtil.remove(cacheKeyUtil.getOrganizeInfoList());
  221. redisUtil.remove(cacheKeyUtil.getPositionList());
  222. redisUtil.remove(TenantHolder.getDatasourceId() + CacheKeyUtil.SYS_ORG_Tree);
  223. redisUtil.remove(TenantHolder.getDatasourceId() + CacheKeyUtil.SYS_POS);
  224. return ActionResult.success(MsgCode.SU003.get());
  225. }
  226. @Override
  227. public boolean checkLevel(OrganizeEntity entity) {
  228. BaseSystemInfo sysInfo = sysconfigApi.getSysInfo();
  229. Integer orgLevel = sysInfo.getOrgLevel();
  230. OrganizeEntity pEntity = this.getInfo(entity.getParentId());
  231. int thisLevel = 1;
  232. if (pEntity != null) {
  233. String[] parents = pEntity.getOrganizeIdTree().split(",");
  234. //创建修改不同判断
  235. if (StringUtil.isEmpty(entity.getId())) {
  236. thisLevel += parents.length;
  237. } else {
  238. int childMax = 1;
  239. List<OrganizeEntity> allChild = this.getAllChild(entity.getId());
  240. for (OrganizeEntity item : allChild) {
  241. String[] trees = item.getOrganizeIdTree().split(entity.getId() + ",");
  242. if (trees.length >= 2) {
  243. String[] childs = trees[1].split(",");
  244. int length = childs.length + 1;
  245. if (length > childMax) {
  246. childMax = length;
  247. }
  248. }
  249. }
  250. thisLevel = parents.length + childMax;
  251. }
  252. }
  253. return thisLevel <= orgLevel;
  254. }
  255. @Override
  256. public boolean checkOrgType(OrganizeEntity entity) {
  257. List<OrganizeEntity> listChild = this.getListByParentId(entity.getId());
  258. OrgTypeEnum orgTypeEnum = OrgTypeEnum.get(entity.getCategory());
  259. //有一个子组织类型不在范围内就false
  260. for (OrganizeEntity item : listChild) {
  261. if (!orgTypeEnum.getChildType().contains(item.getCategory())) {
  262. return false;
  263. }
  264. }
  265. return true;
  266. }
  267. @Override
  268. public Map<String, Object> getAllOrgsTreeName() {
  269. Map<String, Object> map = new HashMap<>();
  270. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  271. List<OrganizeEntity> list = this.list(queryWrapper);
  272. Map<String, String> collect = list.stream().collect(Collectors.toMap(OrganizeEntity::getId, OrganizeEntity::getFullName));
  273. for (OrganizeEntity org : list) {
  274. String organizeIdTree = org.getOrganizeIdTree();
  275. if (StringUtil.isEmpty(organizeIdTree)) {
  276. organizeIdTree = org.getId();
  277. }
  278. String[] split = organizeIdTree.split(",");
  279. StringJoiner names = new StringJoiner("/");
  280. for (String id : split) {
  281. if (collect.get(id) != null) {
  282. names.add(collect.get(id));
  283. }
  284. }
  285. map.put(org.getId(), names.toString());
  286. }
  287. return map;
  288. }
  289. @Override
  290. public Map<String, String> getAllOrgsTreeName(boolean enabledMark) {
  291. Map<String, String> map = new HashMap<>();
  292. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  293. if (enabledMark) {
  294. queryWrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1);
  295. }
  296. List<OrganizeEntity> list = this.list(queryWrapper);
  297. Map<String, String> collect = list.stream().collect(Collectors.toMap(OrganizeEntity::getId, OrganizeEntity::getFullName));
  298. for (OrganizeEntity org : list) {
  299. String organizeIdTree = org.getOrganizeIdTree();
  300. if (StringUtil.isEmpty(organizeIdTree)) {
  301. organizeIdTree = org.getId();
  302. }
  303. String[] split = organizeIdTree.split(",");
  304. StringJoiner names = new StringJoiner("/");
  305. for (String id : split) {
  306. if (collect.get(id) != null) {
  307. names.add(collect.get(id));
  308. continue;
  309. }
  310. names = new StringJoiner(names.toString().substring(0, names.toString().length() - 1));
  311. }
  312. map.put(org.getId(), names.toString());
  313. }
  314. return map;
  315. }
  316. @Override
  317. public List<OrganizeEntity> getListAll(List<String> idAll, String keyWord) {
  318. // 定义变量判断是否需要使用修改时间倒序
  319. boolean flag = false;
  320. List<OrganizeEntity> list = new ArrayList<>();
  321. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  322. if (StringUtil.isNotEmpty(keyWord)) {
  323. flag = true;
  324. queryWrapper.lambda().and(t -> t.like(OrganizeEntity::getFullName, keyWord).or().like(OrganizeEntity::getEnCode, keyWord));
  325. }
  326. // 排序
  327. queryWrapper.lambda().orderByAsc(OrganizeEntity::getSortCode).orderByAsc(OrganizeEntity::getCreatorTime);
  328. if (flag) {
  329. queryWrapper.lambda().orderByDesc(OrganizeEntity::getLastModifyTime);
  330. }
  331. if (idAll.size() > 0) {
  332. queryWrapper.lambda().in(OrganizeEntity::getId, idAll);
  333. list = this.list(queryWrapper);
  334. }
  335. return list;
  336. }
  337. @Override
  338. public List<OrganizeEntity> getListByIds(List<String> idList) {
  339. if (CollectionUtil.isEmpty(idList)) return Collections.EMPTY_LIST;
  340. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  341. List<List<String>> lists = Lists.partition(idList, 1000);
  342. for (List<String> list : lists) {
  343. queryWrapper.lambda().in(OrganizeEntity::getId, list);
  344. }
  345. return this.list(queryWrapper);
  346. }
  347. @Override
  348. public boolean isExistByFullName(OrganizeEntity entity, boolean isCheck, boolean isFilter) {
  349. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  350. queryWrapper.lambda().eq(OrganizeEntity::getFullName, entity.getFullName());
  351. if (!isCheck) {
  352. if (isFilter) {
  353. queryWrapper.lambda().ne(OrganizeEntity::getId, entity.getId());
  354. }
  355. List<OrganizeEntity> entityList = this.list(queryWrapper);
  356. if (entityList.size() > 0) {
  357. for (OrganizeEntity organizeEntity : entityList) {
  358. if (organizeEntity != null && organizeEntity.getParentId().equals(entity.getParentId())) {
  359. return true;
  360. }
  361. }
  362. }
  363. return false;
  364. }
  365. return this.count(queryWrapper) > 0;
  366. }
  367. @Override
  368. public boolean isExistByEnCode(String enCode, String id) {
  369. if (StringUtil.isEmpty(enCode)) return false;
  370. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  371. queryWrapper.lambda().eq(OrganizeEntity::getEnCode, enCode);
  372. if (!StringUtil.isEmpty(id)) {
  373. queryWrapper.lambda().ne(OrganizeEntity::getId, id);
  374. }
  375. return this.count(queryWrapper) > 0;
  376. }
  377. /**
  378. * 递归获取组织列表
  379. *
  380. * @return
  381. */
  382. private void recursionOrg(String id, List<OrganizeEntity> list) {
  383. OrganizeEntity info = getInfo(id);
  384. if (info != null) {
  385. list.add(info);
  386. recursionOrg(info.getParentId(), list);
  387. }
  388. }
  389. @Override
  390. public List<OrganizeEntity> getParentList(String parentId) {
  391. List<OrganizeEntity> list = new ArrayList<>();
  392. if (StringUtil.isNotEmpty(parentId)) {
  393. recursionOrg(parentId, list);
  394. // 倒序排放
  395. Collections.reverse(list);
  396. }
  397. return list;
  398. }
  399. @Override
  400. public List<OrganizeEntity> getListByParentIds(List<String> idList) {
  401. if (CollectionUtil.isEmpty(idList)) return Collections.EMPTY_LIST;
  402. LambdaQueryWrapper<OrganizeEntity> wrapper = new LambdaQueryWrapper<>();
  403. wrapper.in(OrganizeEntity::getParentId, idList);
  404. wrapper.eq(OrganizeEntity::getEnabledMark, 1);
  405. return this.list(wrapper);
  406. }
  407. @Override
  408. public void setOrgTreeIdAndName(OrganizeEntity entity) {
  409. StringJoiner orgIdTree = new StringJoiner(",");
  410. StringJoiner orgNameTree = new StringJoiner("/");
  411. List<OrganizeEntity> parentList = getParentList(entity.getParentId());
  412. if (CollectionUtil.isNotEmpty(parentList)) {
  413. parentList.stream().forEach(t -> {
  414. orgIdTree.add(t.getId());
  415. orgNameTree.add(t.getFullName());
  416. });
  417. }
  418. orgIdTree.add(entity.getId());
  419. orgNameTree.add(entity.getFullName());
  420. entity.setOrganizeIdTree(orgIdTree.toString());
  421. entity.setOrgNameTree(orgNameTree.toString());
  422. }
  423. @Override
  424. public List<OrganizeEntity> getDepsByParentId(String id) {
  425. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  426. queryWrapper.lambda().eq(OrganizeEntity::getParentId, id);
  427. queryWrapper.lambda().eq(OrganizeEntity::getCategory, PermissionConst.DEPARTMENT);
  428. queryWrapper.lambda().orderByAsc(OrganizeEntity::getSortCode).orderByAsc(OrganizeEntity::getCreatorTime);
  429. List<OrganizeEntity> list = this.list(queryWrapper);
  430. return list;
  431. }
  432. @Override
  433. public List<OrganizeEntity> getList(boolean filterEnabledMark) {
  434. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  435. if (filterEnabledMark) {
  436. queryWrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1);
  437. }
  438. queryWrapper.lambda().orderByAsc(OrganizeEntity::getSortCode).orderByAsc(OrganizeEntity::getCreatorTime);
  439. List<OrganizeEntity> list = this.list(queryWrapper);
  440. return list;
  441. }
  442. @Override
  443. public OrganizeEntity getInfoByFullName(String fullName) {
  444. if (StringUtil.isEmpty(fullName)) {
  445. return null;
  446. }
  447. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  448. queryWrapper.lambda().eq(OrganizeEntity::getFullName, fullName);
  449. List<OrganizeEntity> list = this.list(queryWrapper);
  450. return list.size() > 0 ? list.get(0) : null;
  451. }
  452. @Override
  453. public List<OrganizeEntity> getList(String keyword, boolean filterEnabledMark) {
  454. return new LinkedList<>(getOrgMaps(keyword, filterEnabledMark, null).values());
  455. }
  456. /**
  457. * 获取组织信息
  458. *
  459. * @return OrgId, OrgEntity
  460. */
  461. @Override
  462. public Map<String, OrganizeEntity> getOrgMapsAll(SFunction<OrganizeEntity, ?>... columns) {
  463. return getOrgMaps(null, false, null, columns);
  464. }
  465. /**
  466. * 获取组织信息
  467. *
  468. * @param keyword
  469. * @param filterEnabledMark
  470. * @param category
  471. * @return OrgId, OrgEntity
  472. */
  473. @Override
  474. public Map<String, OrganizeEntity> getOrgMaps(String keyword, boolean filterEnabledMark, String category, SFunction<OrganizeEntity, ?>... columns) {
  475. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  476. if (StringUtil.isNotEmpty(keyword)) {
  477. queryWrapper.lambda().and(t -> t.like(OrganizeEntity::getFullName, keyword).or().like(OrganizeEntity::getEnCode, keyword.toLowerCase()));
  478. }
  479. if (filterEnabledMark) {
  480. queryWrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1);
  481. }
  482. if (StringUtil.isNotEmpty(category)) {
  483. queryWrapper.lambda().eq(OrganizeEntity::getCategory, category);
  484. }
  485. Map<String, OrganizeEntity> orgMaps = getBaseOrgMaps(queryWrapper, ImmutableMap.of(OrganizeEntity::getSortCode, true, OrganizeEntity::getCreatorTime, false), null, false);
  486. Map<String, OrganizeEntity> entityList = new LinkedHashMap<>();
  487. if (StringUtil.isNotEmpty(keyword)) {
  488. getParentOrganize(orgMaps, orgMaps, entityList);
  489. orgMaps.clear();
  490. orgMaps = entityList;
  491. }
  492. return orgMaps;
  493. }
  494. /**
  495. * 组织基础过滤
  496. *
  497. * @param queryWrapper
  498. * @param orderBy Map<Column, isAsc>
  499. * @param groupBy Column
  500. * @param columns query
  501. * @return
  502. */
  503. public Map<String, OrganizeEntity> getBaseOrgMaps(QueryWrapper<OrganizeEntity> queryWrapper, Map<SFunction<OrganizeEntity, ?>, Boolean> orderBy, List<SFunction<OrganizeEntity, ?>> groupBy, boolean bigColumnHas, SFunction<OrganizeEntity, ?>... columns) {
  504. if (queryWrapper == null) {
  505. queryWrapper = new QueryWrapper<>();
  506. }
  507. LambdaQueryWrapper<OrganizeEntity> lambdaQueryWrapper = queryWrapper.lambda();
  508. List<SFunction<OrganizeEntity, ?>> columnList;
  509. List<SFunction<OrganizeEntity, ?>> bigColumnList = null;
  510. //没有指定查询字段就返回全部字段
  511. if (columns == null || columns.length == 0) {
  512. columnList = Arrays.asList(OrganizeEntity::getId, OrganizeEntity::getParentId, OrganizeEntity::getCategory, OrganizeEntity::getEnCode, OrganizeEntity::getFullName, OrganizeEntity::getManagerId, OrganizeEntity::getSortCode, OrganizeEntity::getEnabledMark, OrganizeEntity::getOrganizeIdTree, OrganizeEntity::getCreatorTime, OrganizeEntity::getCreatorUserId, OrganizeEntity::getLastModifyTime, OrganizeEntity::getLastModifyUserId, OrganizeEntity::getDeleteMark, OrganizeEntity::getDeleteTime, OrganizeEntity::getDeleteUserId, OrganizeEntity::getTenantId);
  513. //把长文本字段分开查询, 默认带有排序, 数据量大的情况长文本字段参与排序速度非常慢
  514. if (bigColumnHas) {
  515. bigColumnList = Arrays.asList(OrganizeEntity::getId, OrganizeEntity::getDescription, OrganizeEntity::getPropertyJson);
  516. }
  517. } else {
  518. columnList = new ArrayList<>(Arrays.asList(columns));
  519. //指定字段中没有ID, 强制添加ID字段
  520. if (!columnList.contains((SFunction<OrganizeEntity, ?>) OrganizeEntity::getId)) {
  521. columnList.add(OrganizeEntity::getId);
  522. }
  523. }
  524. lambdaQueryWrapper.select(columnList);
  525. QueryWrapper<OrganizeEntity> bigColumnQuery = null;
  526. if (bigColumnList != null) {
  527. //获取大字段不参与排序
  528. bigColumnQuery = queryWrapper.clone();
  529. }
  530. //排序
  531. if (orderBy != null && !orderBy.isEmpty()) {
  532. orderBy.forEach((k, v) -> {
  533. lambdaQueryWrapper.orderBy(true, v, k);
  534. });
  535. }
  536. //分组
  537. if (groupBy != null && !groupBy.isEmpty()) {
  538. lambdaQueryWrapper.groupBy(groupBy);
  539. }
  540. List<OrganizeEntity> list = this.list(queryWrapper);
  541. Map<String, OrganizeEntity> orgMaps = new LinkedHashMap<>(list.size(), 1);
  542. list.forEach(t -> orgMaps.put(t.getId(), t));
  543. if (bigColumnList != null) {
  544. //获取大字段数据
  545. bigColumnQuery.lambda().select(bigColumnList);
  546. List<OrganizeEntity> listBigFields = this.list(bigColumnQuery);
  547. listBigFields.forEach(t -> {
  548. OrganizeEntity organizeEntity = orgMaps.get(t.getId());
  549. if (organizeEntity != null) {
  550. organizeEntity.setPropertyJson(t.getPropertyJson());
  551. organizeEntity.setDescription(t.getDescription());
  552. }
  553. });
  554. }
  555. return orgMaps;
  556. }
  557. /**
  558. * 获取父级集合
  559. *
  560. * @param list 需要遍历的集合
  561. * @param entityList 结果集
  562. */
  563. private void getParentOrganize(Map<String, OrganizeEntity> list, Map<String, OrganizeEntity> searchList, Map<String, OrganizeEntity> entityList) {
  564. Map<String, OrganizeEntity> list1 = new LinkedHashMap<>();
  565. searchList.forEach((id, entity) -> {
  566. entityList.put(id, entity);
  567. OrganizeEntity info = list.get(id);
  568. if (info == null) {
  569. info = getInfo(id);
  570. }
  571. if (Objects.nonNull(info)) {
  572. if (StringUtil.isNotEmpty(info.getParentId()) && !"-1".equals(info.getParentId())) {
  573. OrganizeEntity organizeEntity = list.get(info.getParentId());
  574. if (organizeEntity == null) {
  575. organizeEntity = getInfo(info.getParentId());
  576. }
  577. if (organizeEntity != null) {
  578. list1.put(organizeEntity.getId(), organizeEntity);
  579. getParentOrganize(list, list1, entityList);
  580. }
  581. } else if (StringUtil.isNotEmpty(info.getParentId()) && "-1".equals(info.getParentId())) {
  582. entityList.put(id, info);
  583. }
  584. }
  585. });
  586. }
  587. @Override
  588. public List<OrganizeEntity> getOrgEntityList(List<String> idList, Boolean enable) {
  589. if (!idList.isEmpty()) {
  590. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  591. queryWrapper.lambda().in(OrganizeEntity::getId, idList);
  592. if (enable) {
  593. queryWrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1);
  594. }
  595. // queryWrapper.lambda().select(OrganizeEntity::getId, OrganizeEntity::getFullName);
  596. return this.list(queryWrapper);
  597. }
  598. return Collections.EMPTY_LIST;
  599. }
  600. @Override
  601. public Map<String, Object> getOrgMap() {
  602. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  603. queryWrapper.lambda().select(OrganizeEntity::getId, OrganizeEntity::getFullName);
  604. List<OrganizeEntity> list = this.list(queryWrapper);
  605. return list.stream().collect(Collectors.toMap(OrganizeEntity::getId, OrganizeEntity::getFullName));
  606. }
  607. @Override
  608. public Map<String, Object> getOrgEncodeAndName(String category) {
  609. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  610. queryWrapper.lambda().select(OrganizeEntity::getId, OrganizeEntity::getFullName, OrganizeEntity::getEnCode);
  611. if (StringUtil.isNotEmpty(category)) {
  612. queryWrapper.lambda().eq(OrganizeEntity::getCategory, category);
  613. }
  614. List<OrganizeEntity> list = this.list(queryWrapper);
  615. return list.stream().collect(Collectors.toMap(o -> o.getFullName() + "/" + o.getEnCode(), OrganizeEntity::getId, (v1, v2) -> v2));
  616. }
  617. @Override
  618. public Map<String, Object> getOrgNameAndId(String category) {
  619. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  620. queryWrapper.lambda().select(OrganizeEntity::getId, OrganizeEntity::getFullName);
  621. if (StringUtil.isNotEmpty(category)) {
  622. queryWrapper.lambda().eq(OrganizeEntity::getCategory, category);
  623. }
  624. List<OrganizeEntity> list = this.list(queryWrapper);
  625. Map<String, Object> allOrgMap = new HashMap<>();
  626. for (OrganizeEntity entity : list) {
  627. allOrgMap.put(entity.getFullName(), entity.getId());
  628. }
  629. return allOrgMap;
  630. }
  631. @Override
  632. public OrganizeEntity getByFullName(String fullName) {
  633. OrganizeEntity organizeEntity = new OrganizeEntity();
  634. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  635. queryWrapper.lambda().eq(OrganizeEntity::getFullName, fullName);
  636. queryWrapper.lambda().select(OrganizeEntity::getId);
  637. List<OrganizeEntity> list = this.list(queryWrapper);
  638. if (list.size() > 0) {
  639. organizeEntity = list.get(0);
  640. }
  641. return organizeEntity;
  642. }
  643. @Override
  644. public void getOrganizeIdTree(String organizeId, List<String> organizeParentIdList) {
  645. OrganizeEntity entity = getInfo(organizeId);
  646. if (entity != null) {
  647. organizeParentIdList.add(entity.getId());
  648. if (StringUtil.isNotEmpty(entity.getParentId())) {
  649. getOrganizeIdTree(entity.getParentId(), organizeParentIdList);
  650. }
  651. }
  652. }
  653. @Override
  654. public void getOrganizeId(String organizeId, List<OrganizeEntity> organizeList) {
  655. OrganizeEntity entity = getInfo(organizeId);
  656. if (entity != null) {
  657. organizeList.add(entity);
  658. if (StringUtil.isNotEmpty(entity.getParentId())) {
  659. getOrganizeId(entity.getParentId(), organizeList);
  660. }
  661. }
  662. }
  663. @Override
  664. @DSTransactional
  665. public boolean first(String id) {
  666. boolean isOk = false;
  667. //获取要上移的那条数据的信息
  668. OrganizeEntity upEntity = this.getById(id);
  669. Long upSortCode = upEntity.getSortCode() == null ? 0 : upEntity.getSortCode();
  670. //查询上几条记录
  671. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  672. queryWrapper.lambda().lt(OrganizeEntity::getSortCode, upSortCode).eq(OrganizeEntity::getParentId, upEntity.getParentId()).orderByDesc(OrganizeEntity::getSortCode);
  673. List<OrganizeEntity> downEntity = this.list(queryWrapper);
  674. if (downEntity.size() > 0) {
  675. //交换两条记录的sort值
  676. Long temp = upEntity.getSortCode();
  677. upEntity.setSortCode(downEntity.get(0).getSortCode());
  678. downEntity.get(0).setSortCode(temp);
  679. this.updateById(downEntity.get(0));
  680. this.updateById(upEntity);
  681. isOk = true;
  682. }
  683. return isOk;
  684. }
  685. @Override
  686. @DSTransactional
  687. public boolean next(String id) {
  688. boolean isOk = false;
  689. //获取要下移的那条数据的信息
  690. OrganizeEntity downEntity = this.getById(id);
  691. Long upSortCode = downEntity.getSortCode() == null ? 0 : downEntity.getSortCode();
  692. //查询下几条记录
  693. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  694. queryWrapper.lambda().gt(OrganizeEntity::getSortCode, upSortCode).eq(OrganizeEntity::getParentId, downEntity.getParentId()).orderByAsc(OrganizeEntity::getSortCode);
  695. List<OrganizeEntity> upEntity = this.list(queryWrapper);
  696. if (upEntity.size() > 0) {
  697. //交换两条记录的sort值
  698. Long temp = downEntity.getSortCode();
  699. downEntity.setSortCode(upEntity.get(0).getSortCode());
  700. upEntity.get(0).setSortCode(temp);
  701. this.updateById(upEntity.get(0));
  702. this.updateById(downEntity);
  703. isOk = true;
  704. }
  705. return isOk;
  706. }
  707. @Override
  708. public String allowDelete(String orgId) {
  709. // 组织底下是否有组织
  710. List<OrganizeEntity> list = getListByParentId(orgId);
  711. if (Objects.nonNull(list) && list.size() > 0) {
  712. return MsgCode.PS003.get();
  713. }
  714. // 组织底下是否有岗位
  715. List<PositionEntity> positonList = positionService.getListByOrganizeId(Collections.singletonList(orgId), false);
  716. List<String> positonIds = positonList.stream().map(PositionEntity::getId).collect(Collectors.toList());
  717. // 组织底下是否有用户
  718. if (userRelationService.existByObj(PermissionConst.ORGANIZE, orgId)) {
  719. return MsgCode.PS005.get();
  720. }
  721. // 组织底下是否有角色
  722. List<RoleRelationEntity> listByObjectId = roleRelationService.getListByObjectId(positonIds, PermissionConst.POSITION);
  723. if (listByObjectId.size() > 0) {
  724. return MsgCode.PS006.get();
  725. }
  726. return null;
  727. }
  728. @Override
  729. public List<OrganizeEntity> getOrganizeName(List<String> id) {
  730. List<OrganizeEntity> list = new ArrayList<>();
  731. if (id.size() > 0) {
  732. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  733. List<List<String>> lists = Lists.partition(id, 1000);
  734. queryWrapper.lambda().and(t->{
  735. for (List<String> ids : lists) {
  736. t.or().in(OrganizeEntity::getId, ids);
  737. }
  738. });
  739. queryWrapper.lambda().orderByAsc(OrganizeEntity::getSortCode).orderByAsc(OrganizeEntity::getCreatorTime);
  740. list = this.list(queryWrapper);
  741. }
  742. return list;
  743. }
  744. @Override
  745. public Map<String, OrganizeEntity> getOrganizeName(List<String> id, String keyword, boolean filterEnabledMark, String category) {
  746. Map<String, OrganizeEntity> list = Collections.EMPTY_MAP;
  747. if (id.size() > 0) {
  748. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  749. List<List<String>> lists = Lists.partition(id, 1000);
  750. queryWrapper.lambda().and(t->{
  751. for (List<String> ids : lists) {
  752. t.or().in(OrganizeEntity::getId, ids);
  753. }
  754. });
  755. if (StringUtil.isNotEmpty(keyword)) {
  756. queryWrapper.lambda().and(t -> t.like(OrganizeEntity::getFullName, keyword).or().like(OrganizeEntity::getEnCode, keyword));
  757. }
  758. if (StringUtil.isNotEmpty(category)) {
  759. queryWrapper.lambda().eq(OrganizeEntity::getCategory, category);
  760. }
  761. if (filterEnabledMark) {
  762. queryWrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1);
  763. }
  764. list = getBaseOrgMaps(queryWrapper, ImmutableMap.of(OrganizeEntity::getSortCode, true, OrganizeEntity::getCreatorTime, false), null, false);
  765. // Map<String, OrganizeEntity> orgList = new LinkedHashMap<>(id.size(), 1);
  766. // orgMaps.values().forEach(t -> {
  767. // if (StringUtil.isNotEmpty(t.getOrganizeIdTree())) {
  768. // String[] split = t.getOrganizeIdTree().split(",");
  769. // for (String orgId : split) {
  770. // if (id.contains(orgId) && !orgList.containsKey(orgId)) {
  771. // OrganizeEntity entity = orgMaps.get(orgId);
  772. // if(entity == null){
  773. // entity = getInfo(orgId);
  774. // }
  775. // if (entity != null) {
  776. // orgList.put(orgId, entity);
  777. // }
  778. // }
  779. // }
  780. // }
  781. // });
  782. // list = orgList;
  783. }
  784. return list;
  785. }
  786. @Override
  787. public List<String> getUnderOrganizations(String organizeId, boolean filterEnabledMark) {
  788. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  789. if (filterEnabledMark) {
  790. queryWrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1);
  791. }
  792. queryWrapper.lambda().ne(OrganizeEntity::getId, organizeId);
  793. queryWrapper.lambda().like(OrganizeEntity::getOrganizeIdTree, organizeId);
  794. queryWrapper.lambda().select(OrganizeEntity::getId);
  795. return this.list(queryWrapper).stream().map(OrganizeEntity::getId).collect(Collectors.toList());
  796. }
  797. @Override
  798. public List<String> getUnderOrganizationss(String organizeId) {
  799. List<String> totalIds = this.getUnderOrganizations(organizeId, false);
  800. if (!UserProvider.getUser().getIsAdministrator()) {
  801. // 得到有权限的组织
  802. List<String> collect = organizeAdministratorService.getListByAuthorize().stream().map(OrganizeEntity::getId).collect(Collectors.toList());
  803. totalIds = totalIds.stream().filter(t -> collect.contains(t)).collect(Collectors.toList());
  804. }
  805. return totalIds;
  806. }
  807. @Override
  808. public List<OrganizeEntity> getListByParentId(String id) {
  809. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  810. queryWrapper.lambda().eq(OrganizeEntity::getParentId, id);
  811. queryWrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1);
  812. return this.list(queryWrapper);
  813. }
  814. @Override
  815. public List<OrganizeEntity> getAllOrgByUserId(String userId) {
  816. List<String> ids = new ArrayList<>();
  817. userRelationService.getAllOrgRelationByUserId(userId).forEach(r -> {
  818. ids.add(r.getObjectId());
  819. });
  820. return this.listByIds(ids);
  821. }
  822. @Override
  823. public String getFullNameByOrgIdTree(Map<String, String> idNameMaps, String orgIdTree, String regex) {
  824. if (idNameMaps == null || idNameMaps.isEmpty()) {
  825. idNameMaps = this.getInfoList();
  826. }
  827. String fullName = "";
  828. if (StringUtil.isNotEmpty(orgIdTree)) {
  829. String[] split = orgIdTree.split(",");
  830. StringBuilder orgName = new StringBuilder();
  831. String tmpName;
  832. for (String orgId : split) {
  833. if (StringUtil.isEmpty(orgIdTree)) {
  834. continue;
  835. }
  836. if ((tmpName = idNameMaps.get(orgId)) != null) {
  837. orgName.append(regex).append(tmpName);
  838. }
  839. }
  840. if (orgName.length() > 0) {
  841. fullName = orgName.toString().replaceFirst(regex, "");
  842. }
  843. }
  844. return fullName;
  845. }
  846. @Override
  847. public String getOrganizeIdTree(OrganizeEntity entity) {
  848. List<String> list = new ArrayList<>();
  849. this.getOrganizeIdTree(entity.getParentId(), list);
  850. // 倒序排放
  851. Collections.reverse(list);
  852. StringBuilder organizeIdTree = new StringBuilder();
  853. for (String organizeParentId : list) {
  854. organizeIdTree.append("," + organizeParentId);
  855. }
  856. String organizeParentIdTree = organizeIdTree.toString();
  857. if (StringUtil.isNotEmpty(organizeParentIdTree)) {
  858. organizeParentIdTree = organizeParentIdTree.replaceFirst(",", "");
  859. }
  860. return organizeParentIdTree;
  861. }
  862. @Override
  863. public List<OrganizeEntity> getOrganizeByParentId(String parentId) {
  864. QueryWrapper<OrganizeEntity> queryWrapper = new QueryWrapper<>();
  865. queryWrapper.lambda().eq(OrganizeEntity::getParentId, parentId);
  866. return this.list(queryWrapper);
  867. }
  868. @Override
  869. public List<OrganizeEntity> getAllChild(String id) {
  870. QueryWrapper<OrganizeEntity> wrapper = new QueryWrapper<>();
  871. wrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1).like(OrganizeEntity::getOrganizeIdTree, id);
  872. return this.list(wrapper);
  873. }
  874. @Override
  875. public List<OrganizeEntity> getDepartmentAll(String organizeId) {
  876. OrganizeEntity organizeCompany = getOrganizeCompany(organizeId);
  877. if (null == organizeCompany) {
  878. return new ArrayList<>();
  879. }
  880. String id = organizeCompany.getId();
  881. List<OrganizeEntity> organizeList = new ArrayList<>();
  882. organizeList.add(organizeCompany);
  883. List<OrganizeEntity> organizeEntityList = getListByParentId(id).stream().filter(t -> PermissionConst.DEPARTMENT.equals(t.getCategory())).collect(Collectors.toList());
  884. for (OrganizeEntity entity : organizeEntityList) {
  885. QueryWrapper<OrganizeEntity> wrapper = new QueryWrapper<>();
  886. wrapper.lambda().eq(OrganizeEntity::getEnabledMark, 1).like(OrganizeEntity::getOrganizeIdTree, entity.getId());
  887. organizeList.addAll(this.list(wrapper));
  888. }
  889. return organizeList;
  890. }
  891. @Override
  892. public OrganizeEntity getOrganizeCompany(String organizeId) {
  893. OrganizeEntity entity = getInfo(organizeId);
  894. if (entity == null) {
  895. return null;
  896. }
  897. List<String> categoryList = ImmutableList.of("group", "company", "subsidiary", "unit");
  898. if (categoryList.contains(entity.getCategory())) {
  899. return entity;
  900. } else {
  901. return PermissionConst.DEPARTMENT.equals(entity.getCategory()) ? getOrganizeCompany(entity.getParentId()) : null;
  902. }
  903. }
  904. @Override
  905. public void getOrganizeDepartmentAll(String organizeId, List<OrganizeEntity> organizeList) {
  906. List<OrganizeEntity> organizeEntityList = getListByParentId(organizeId);
  907. for (OrganizeEntity entity : organizeEntityList) {
  908. if (!PermissionConst.COMPANY.equals(entity.getCategory())) {
  909. organizeList.add(entity);
  910. getOrganizeDepartmentAll(entity.getId(), organizeList);
  911. }
  912. }
  913. }
  914. @Override
  915. public List<String> getOrgIdTree(OrganizeEntity entity) {
  916. List<String> orgIds = new ArrayList<>();
  917. if (entity != null) {
  918. String organizeIdTree = entity.getOrganizeIdTree();
  919. if (StringUtil.isNotEmpty(organizeIdTree)) {
  920. String[] split = organizeIdTree.split(",");
  921. for (String orgId : split) {
  922. orgIds.add(orgId);
  923. }
  924. }
  925. }
  926. return orgIds;
  927. }
  928. @Override
  929. public List<String> upWardRecursion(List<String> orgIDs, String orgID) {
  930. this.getOrgIDs(orgIDs, orgID);
  931. return orgIDs;
  932. }
  933. @Override
  934. public Map<String, String> getInfoList() {
  935. if (redisUtil.exists(cacheKeyUtil.getOrganizeInfoList())) {
  936. return new HashMap<>(redisUtil.getMap(cacheKeyUtil.getOrganizeInfoList()));
  937. } else {
  938. Map<String, OrganizeEntity> orgs = getOrgMaps(null, false, null, OrganizeEntity::getFullName);
  939. Map<String, String> infoMap = new LinkedHashMap<>(orgs.size(), 1);
  940. orgs.forEach((k, v) -> infoMap.put(k, v.getFullName()));
  941. redisUtil.insert(cacheKeyUtil.getOrganizeInfoList(), infoMap);
  942. return infoMap;
  943. }
  944. }
  945. private void getOrgIDs(List<String> orgIDs, String orgID) {
  946. OrganizeEntity info = this.getInfo(orgID);
  947. if (info != null) {
  948. this.getOrgIDs(orgIDs, info.getParentId());
  949. orgIDs.add(info.getId());
  950. }
  951. }
  952. @Override
  953. public List<String> getOrgIds(List<String> departIds, String type) {
  954. List<String> idList = new ArrayList<>(16);
  955. // 获取所有组织
  956. if (departIds.size() > 0) {
  957. List<String> collect = departIds.stream().filter(JnpfConst.SYSTEM_PARAM.keySet()::contains).collect(Collectors.toList());
  958. String organizeId = UserProvider.getUser().getOrganizeId();
  959. collect.forEach(t -> {
  960. if (JnpfConst.CURRENT_ORG.equals(t) || JnpfConst.CURRENT_ORG_TYPE.equals(t)) {
  961. idList.add(organizeId + "--" + jnpf.constant.PermissionConst.COMPANY);
  962. idList.add(organizeId);
  963. } else if (JnpfConst.CURRENT_ORG_SUB.equals(t) || JnpfConst.CURRENT_ORG_SUB_TYPE.equals(t)) {
  964. List<String> underOrganizations = this.getUnderOrganizations(organizeId, true);
  965. underOrganizations.add(organizeId);
  966. underOrganizations.forEach(orgId -> {
  967. idList.add(orgId + "--" + jnpf.constant.PermissionConst.COMPANY);
  968. idList.add(orgId);
  969. });
  970. } else if (JnpfConst.CURRENT_GRADE.equals(t) || JnpfConst.CURRENT_GRADE_TYPE.equals(t)) {
  971. List<String> organizeUserList = organizeAdministratorService.getOrganizeUserList(JnpfConst.CURRENT_ORG_SUB);
  972. organizeUserList.forEach(orgId -> {
  973. idList.add(orgId + "--" + jnpf.constant.PermissionConst.COMPANY);
  974. idList.add(orgId);
  975. });
  976. }
  977. });
  978. departIds.removeAll(collect);
  979. idList.addAll(departIds);
  980. for (String departId : departIds) {
  981. String[] split = departId.split("--");
  982. if (split.length == 1 || split.length == 0) {
  983. continue;
  984. }
  985. if (split.length > 1) {
  986. if (jnpf.constant.PermissionConst.ORGANIZE.equals(split[1])) {
  987. departId = split[0];
  988. }
  989. if (jnpf.constant.PermissionConst.DEPARTMENT.equals(split[1])) {
  990. departId = split[0];
  991. }
  992. }
  993. if (!jnpf.constant.PermissionConst.ROLE.equals(type)) {
  994. List<String> underOrganizations = this.getUnderOrganizations(departId, true);
  995. if (underOrganizations.size() > 0) {
  996. idList.addAll(underOrganizations);
  997. idList.add(organizeId);
  998. }
  999. }
  1000. }
  1001. }
  1002. return idList.stream().distinct().collect(Collectors.toList());
  1003. }
  1004. @Override
  1005. public List<OrganizeModel> getOrgIdsList(OrganizeConditionModel organizeConditionModel) {
  1006. List<String> ids = new ArrayList<>();
  1007. List<String> orgIds = getOrgIds(organizeConditionModel.getDepartIds(), null);
  1008. Map<String, String> orgIdNameMaps = Optional.ofNullable(organizeConditionModel.getOrgIdNameMaps()).orElse(this.getInfoList());
  1009. orgIds.forEach(t -> ids.add(t.split("--")[0]));
  1010. List<OrganizeEntity> listAll = this.getListAll(ids, organizeConditionModel.getKeyword());
  1011. List<OrganizeModel> organizeList = JsonUtil.getJsonToList(listAll, OrganizeModel.class);
  1012. organizeList.forEach(t -> {
  1013. t.setIcon("department".equals(t.getCategory()) ? PermissionConst.DEPARTMENT_ICON : PermissionConst.COMPANY_ICON);
  1014. t.setLastFullName(t.getFullName());
  1015. if (StringUtil.isNotEmpty(t.getOrganizeIdTree())) {
  1016. t.setOrganizeIds(Arrays.asList(t.getOrganizeIdTree().split(",")));
  1017. t.setOrganize(this.getFullNameByOrgIdTree(orgIdNameMaps, t.getOrganizeIdTree(), "/"));
  1018. String[] split = t.getOrganizeIdTree().split(",");
  1019. List<String> list = Arrays.asList(split);
  1020. Collections.reverse(list);
  1021. for (int i = 1; i < list.size(); i++) {
  1022. String orgId = list.get(i);
  1023. List<OrganizeModel> collect1 = organizeList.stream().filter(tt -> orgId.equals(tt.getId())).collect(Collectors.toList());
  1024. if (collect1.size() > 0) {
  1025. String[] split1 = StringUtil.isNotEmpty(t.getOrganizeIdTree()) ? t.getOrganizeIdTree().split(orgId) : new String[0];
  1026. if (split1.length > 0) {
  1027. t.setFullName(this.getFullNameByOrgIdTree(orgIdNameMaps, split1[1], "/"));
  1028. }
  1029. t.setOrganize(this.getFullNameByOrgIdTree(orgIdNameMaps, t.getOrganizeIdTree(), "/"));
  1030. t.setParentId(orgId);
  1031. break;
  1032. }
  1033. }
  1034. }
  1035. });
  1036. return organizeList;
  1037. }
  1038. @Override
  1039. public List<OrganizeListVO> selectedList(List<String> idStrList) {
  1040. if (CollectionUtil.isEmpty(idStrList)) return Collections.EMPTY_LIST;
  1041. List<String> idList = new ArrayList<>();
  1042. for (String idStr : idStrList) {
  1043. String[] split = idStr.split("--");
  1044. idList.add(split[0]);
  1045. }
  1046. List<OrganizeEntity> listByIds = this.getListByIds(idList);
  1047. List<OrganizeListVO> listVo = new ArrayList<>();
  1048. for (String idStr : idStrList) {
  1049. String[] split = idStr.split("--");
  1050. String id = split[0];
  1051. String type = split.length > 1 ? split[1] : "";
  1052. SysParamEnum sysParamEnum = SysParamEnum.get(type);
  1053. String suffix = sysParamEnum != null ? sysParamEnum.getSuffix() : "";
  1054. OrganizeEntity organizeEntity = listByIds.stream().filter(t -> t.getId().equals(id)).findFirst().orElse(null);
  1055. if (organizeEntity != null) {
  1056. OrganizeListVO vo = JsonUtil.getJsonToBean(organizeEntity, OrganizeListVO.class);
  1057. vo.setId(idStr);
  1058. vo.setOrgNameTree(organizeEntity.getOrgNameTree() + suffix);
  1059. listVo.add(vo);
  1060. }
  1061. }
  1062. return listVo;
  1063. }
  1064. @Override
  1065. public List<OrganizeEntity> OrganizeCondition(List<String> idStrList) {
  1066. if (CollectionUtil.isEmpty(idStrList)) return Collections.EMPTY_LIST;
  1067. List<String> idList = new ArrayList<>();
  1068. List<String> parenList = new ArrayList<>();//用于查子组织
  1069. List<String> ancestorsList = new ArrayList<>();//用于查孙子组织
  1070. UserInfo userInfo = UserProvider.getUser();
  1071. List<String> currentOrgIds = userInfo.getOrganizeIds();
  1072. for (String idStr : idStrList) {
  1073. if (DataInterfaceVarConst.ORG.equals(idStr)) {
  1074. idList.addAll(currentOrgIds);
  1075. } else if (DataInterfaceVarConst.ORGANDSUB.equals(idStr)) {
  1076. idList.addAll(currentOrgIds);
  1077. parenList.addAll(currentOrgIds);
  1078. } else if (DataInterfaceVarConst.ORGANIZEANDPROGENY.equals(idStr)) {
  1079. ancestorsList.addAll(currentOrgIds);
  1080. } else {
  1081. String[] split = idStr.split("--");
  1082. idList.add(split[0]);
  1083. if (split.length > 1) {
  1084. if (SysParamEnum.SUBORG.getCode().equalsIgnoreCase(split[1])) {
  1085. parenList.add(split[0]);
  1086. }
  1087. if (SysParamEnum.PROGENYORG.getCode().equalsIgnoreCase(split[1])) {
  1088. ancestorsList.add(split[0]);
  1089. }
  1090. }
  1091. }
  1092. }
  1093. if (CollectionUtil.isEmpty(idList) && CollectionUtil.isEmpty(parenList) && CollectionUtil.isEmpty(ancestorsList)) {
  1094. return Collections.EMPTY_LIST;
  1095. }
  1096. QueryWrapper<OrganizeEntity> query = new QueryWrapper<>();
  1097. query.lambda().eq(OrganizeEntity::getEnabledMark, 1);
  1098. query.lambda().and(t -> {
  1099. if (CollectionUtil.isNotEmpty(idList)) {
  1100. List<List<String>> lists = Lists.partition(idList, 1000);
  1101. for (List<String> thisList : lists) {
  1102. t.in(OrganizeEntity::getId, thisList).or();
  1103. }
  1104. }
  1105. if (CollectionUtil.isNotEmpty(parenList)) {
  1106. List<List<String>> lists = Lists.partition(parenList, 1000);
  1107. for (List<String> thisList : lists) {
  1108. t.in(OrganizeEntity::getParentId, thisList).or();
  1109. }
  1110. }
  1111. if (CollectionUtil.isNotEmpty(ancestorsList)) {
  1112. for (String thisId : ancestorsList) {
  1113. t.like(OrganizeEntity::getOrganizeIdTree, thisId).or();
  1114. }
  1115. }
  1116. });
  1117. query.lambda().orderByAsc(OrganizeEntity::getSortCode).orderByAsc(OrganizeEntity::getCreatorTime);
  1118. return this.list(query);
  1119. }
  1120. @Override
  1121. public String getNameByIdStr(String idStr) {
  1122. StringJoiner sj = new StringJoiner(",");
  1123. if (StringUtil.isNotEmpty(idStr)) {
  1124. try {
  1125. List<String> ids = JsonUtil.getJsonToList(idStr, String.class);
  1126. List<OrganizeEntity> listByIds = this.getListByIds(ids);
  1127. for (OrganizeEntity item : listByIds) {
  1128. sj.add(item.getOrgNameTree());
  1129. }
  1130. } catch (Exception e) {
  1131. e.printStackTrace();
  1132. }
  1133. }
  1134. return sj.toString();
  1135. }
  1136. @Override
  1137. public List<OrganizeEntity> getProgeny(List<String> idList, Integer enabledMark) {
  1138. if (CollectionUtil.isEmpty(idList)) return Collections.EMPTY_LIST;
  1139. QueryWrapper<OrganizeEntity> query = new QueryWrapper<>();
  1140. if (enabledMark != null) {
  1141. query.lambda().eq(OrganizeEntity::getEnabledMark, enabledMark);
  1142. }
  1143. query.lambda().and(t -> {
  1144. for (String thisId : idList) {
  1145. t.like(OrganizeEntity::getOrganizeIdTree, thisId).or();
  1146. }
  1147. });
  1148. query.lambda().orderByAsc(OrganizeEntity::getSortCode).orderByAsc(OrganizeEntity::getCreatorTime);
  1149. return this.list(query);
  1150. }
  1151. }