|
|
@@ -2,7 +2,9 @@ package com.energy.manage.service.util;
|
|
|
|
|
|
import com.energy.manage.common.constant.Constants;
|
|
|
import com.energy.manage.service.domain.vo.system.PermissionVo;
|
|
|
+import com.energy.manage.service.domain.vo.system.SystemPermissionVo;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.springframework.util.ObjectUtils;
|
|
|
import org.testng.collections.Lists;
|
|
|
|
|
|
import java.util.*;
|
|
|
@@ -113,4 +115,81 @@ public class TreeUtil {
|
|
|
list.sort(Comparator.comparing(m -> String.valueOf(m.get("sort"))));
|
|
|
return list;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 集合转树结构
|
|
|
+ *
|
|
|
+ * @param dataList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static List<SystemPermissionVo> newConvert2Tree(List<SystemPermissionVo> dataList) {
|
|
|
+ if (CollectionUtils.isEmpty(dataList)) {
|
|
|
+ return Collections.EMPTY_LIST;
|
|
|
+ }
|
|
|
+ int maxDepth = getNewMaxDepth(dataList);
|
|
|
+ Map<Integer, List<SystemPermissionVo>> dataMap = new HashMap<>(dataList.size());
|
|
|
+ for (int i = maxDepth; i >= 1; i--) {
|
|
|
+ int depth = i;
|
|
|
+ List<SystemPermissionVo> child =
|
|
|
+ dataList.stream().filter(item -> item.getPermissionDepth() == depth)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ for (SystemPermissionVo item : child) {
|
|
|
+ List<SystemPermissionVo> childList = dataMap.get(item.getPermissionId());
|
|
|
+ if (!CollectionUtils.isEmpty(childList)) {
|
|
|
+ item.setChildren(childList);
|
|
|
+ int isSelect = item.getChecked();
|
|
|
+ if (isSelect == 1) {
|
|
|
+ // 根据子节点判断本节点是全选还是部分选中,子节点存在未选中或者存在部分选中的时候,当前是部分选中
|
|
|
+ childList.stream().forEach(childItem -> {
|
|
|
+ if (childItem.getChecked().intValue() == Constants.GLOBAL_NOT_USE
|
|
|
+ || childItem.getChecked().intValue() == 2) {
|
|
|
+ item.setChecked(2);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<SystemPermissionVo> list = dataMap.get(item.getParentId());
|
|
|
+ if (CollectionUtils.isEmpty(list)) {
|
|
|
+ list = new ArrayList<>();
|
|
|
+ }
|
|
|
+ list.add(item);
|
|
|
+ dataMap.put(item.getParentId(), list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<SystemPermissionVo> result = new ArrayList<>();
|
|
|
+ //优化
|
|
|
+ Map<Integer, SystemPermissionVo> existPermissionMap = dataList.stream()
|
|
|
+ .collect(Collectors.toMap(SystemPermissionVo::getPermissionId, v -> v, (key1, key2) -> key2));
|
|
|
+
|
|
|
+ dataMap.forEach((id, list) -> {
|
|
|
+ if (existPermissionMap.containsKey(id)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ result.addAll(list);
|
|
|
+ });
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 内部方法,获取集合内最深的节点数
|
|
|
+ *
|
|
|
+ * @param list
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static int getNewMaxDepth(List<SystemPermissionVo> list) {
|
|
|
+ if (CollectionUtils.isEmpty(list)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int maxDepth = 0;
|
|
|
+ for (SystemPermissionVo item : list) {
|
|
|
+ if(ObjectUtils.isEmpty(item)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ maxDepth = Math.max(maxDepth, item.getPermissionDepth());
|
|
|
+ }
|
|
|
+ return maxDepth;
|
|
|
+ }
|
|
|
+
|
|
|
}
|