PermissionUtil.java 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package jnpf.permission.util;
  2. import jnpf.constant.MsgCode;
  3. import jnpf.exception.DataException;
  4. import jnpf.permission.entity.OrganizeEntity;
  5. import jnpf.permission.service.OrganizeService;
  6. import jnpf.util.StringUtil;
  7. import java.util.*;
  8. /**
  9. * 类功能
  10. *
  11. * @author JNPF开发平台组 YanYu
  12. * @version V3.2.0
  13. * @copyright 引迈信息技术有限公司
  14. * @date 2022/1/27
  15. */
  16. public class PermissionUtil {
  17. /**
  18. * 递归取组织结构id
  19. *
  20. * @param organizeInfo 组织信息集合
  21. * @param organizeId 组织id
  22. * @param infoType 信息类型 1:id 2:fullName
  23. */
  24. private static LinkedList<String> getOrganizeInfos(LinkedList<String> organizeInfo, String organizeId, Integer infoType, OrganizeService organizeService) {
  25. OrganizeEntity infoEntity = organizeService.getInfo(organizeId);
  26. if (infoEntity != null) {
  27. organizeInfo.add(infoType.equals(1) ? organizeId : infoEntity.getFullName());
  28. // -1 为顶级节点
  29. if (!"-1".equals(infoEntity.getParentId())) {
  30. getOrganizeInfos(organizeInfo, infoEntity.getParentId(), infoType, organizeService);
  31. } else {
  32. // 结束时,进行倒序排列
  33. Collections.reverse(organizeInfo);
  34. }
  35. }
  36. return organizeInfo;
  37. }
  38. public static List<LinkedList<String>> getOrgIdsTree(List<String> organizeIds, Integer infoType, OrganizeService organizeService) {
  39. List<LinkedList<String>> organizeIdsTree = new ArrayList<>();
  40. organizeIds.forEach(id -> {
  41. organizeIdsTree.add(getOrganizeInfos(new LinkedList<>(), id, infoType, organizeService));
  42. });
  43. return organizeIdsTree;
  44. }
  45. /**
  46. * 获取组名连接信息
  47. *
  48. * @param organizeIds 组织id集合
  49. * @return 组织链式信息
  50. */
  51. public static String getLinkInfoByOrgId(List<String> organizeIds, OrganizeService organizeService) {
  52. StringBuilder organizeInfoVo = new StringBuilder();
  53. for (String id : organizeIds) {
  54. if (id != null) {
  55. StringBuilder organizeInfo = new StringBuilder();
  56. for (String name : getOrganizeInfos(new LinkedList<>(), id, 2, organizeService)) {
  57. organizeInfo.append(name).append("/");
  58. }
  59. // 去除最后一个斜杠
  60. if (organizeInfo.length() > 0) {
  61. organizeInfo = new StringBuilder(organizeInfo.substring(0, organizeInfo.length() - 1));
  62. }
  63. organizeInfo.append(",");
  64. organizeInfoVo.append(organizeInfo);
  65. }
  66. }
  67. return organizeInfoVo.toString();
  68. }
  69. /**
  70. * 获取组名连接信息
  71. *
  72. * @param organizeId 组织id
  73. * @return 组织链式信息
  74. */
  75. public static String getLinkInfoByOrgId(String organizeId, OrganizeService organizeService) {
  76. return getLinkInfoByOrgId(Collections.singletonList(organizeId), organizeService);
  77. }
  78. /**
  79. * 去掉尾部的封号
  80. */
  81. public static String getLinkInfoByOrgId(String organizeId, OrganizeService organizeService, Boolean separateFlag) {
  82. String linkInfo = getLinkInfoByOrgId(organizeId, organizeService);
  83. if (StringUtil.isEmpty(linkInfo)) {
  84. return linkInfo;
  85. }
  86. if (!separateFlag) {
  87. linkInfo = linkInfo.substring(0, linkInfo.length() - 1);
  88. }
  89. return linkInfo;
  90. }
  91. public static List<String> getOrgIdsByFormTree(OrganizeService organizeService, List<List<String>> organizeIdsTree) throws DataException {
  92. List<String> orgIds = new ArrayList<>();
  93. for (List<String> organizeIds : organizeIdsTree) {
  94. // 组织id数组树最后一个数组最后一个id,是需要储存的id
  95. String organizeId = organizeIds.get(organizeIds.size() - 1);
  96. orgIds.add(organizeId);
  97. }
  98. // 判断每个OrgId的有效性
  99. int count = organizeService.listByIds(orgIds).size();
  100. if (count != orgIds.size()) {
  101. throw new DataException(MsgCode.FA026.get());
  102. }
  103. return orgIds;
  104. }
  105. /**
  106. * 将树形数据移出
  107. *
  108. * @param list
  109. * @return
  110. */
  111. public static List<Map<String, Object>> getListFromTree(List<Map<String, Object>> list) {
  112. List<Map<String, Object>> result = new ArrayList<>();
  113. for (Map<String, Object> map : list) {
  114. if (map.get("children") != null) {
  115. result.add(map);
  116. List<Map<String, Object>> children = (List<Map<String, Object>>) map.get("children");
  117. result.addAll(getListFromTree(children));
  118. } else {
  119. result.add(map);
  120. }
  121. }
  122. return result;
  123. }
  124. /**
  125. * 递归讲list转换成树形
  126. *
  127. * @param list
  128. * @param parentField
  129. * @param childField
  130. * @return
  131. */
  132. public static List<Map<String, Object>> getTreeObj(List<Map<String, Object>> list, String parentField, String childField) {
  133. List<Map<String, Object>> result = new ArrayList<>(list);
  134. for (int i = 0; i < result.size(); i++) {
  135. Map<String, Object> item = result.get(i);
  136. if ((item.get(parentField) != null && !StringUtil.isNotEmpty(item.get(parentField).toString())) || (item.get(parentField) != null && !"[]".equals(item.get(parentField).toString()))) {
  137. if (hasChild(item, result, parentField, childField) && result.size() > 0) {
  138. result.remove(item);
  139. i--;
  140. }
  141. }
  142. }
  143. return result;
  144. }
  145. /**
  146. * 判断是否有子数据
  147. *
  148. * @param node
  149. * @param list
  150. * @param parentField
  151. * @param childField
  152. * @return
  153. */
  154. public static boolean hasChild(Map<String, Object> node, List<Map<String, Object>> list, String parentField, String childField) {
  155. for (int i = 0; i < list.size(); i++) {
  156. Map<String, Object> ele = list.get(i);
  157. if (ele.get(childField).equals(node.get(parentField))) {
  158. if (ele.get("children") == null) {
  159. ele.put("children", new ArrayList<>());
  160. }
  161. List<Map<String, Object>> children = (List<Map<String, Object>>) ele.get("children");
  162. children.add(node);
  163. ele.put("children", children);
  164. return true;
  165. }
  166. if (ele.get("children") != null) {
  167. List<Map<String, Object>> children = (List<Map<String, Object>>) ele.get("children");
  168. if (hasChild(node, children, parentField, childField)) {
  169. return true;
  170. }
  171. }
  172. }
  173. return false;
  174. }
  175. }