package com.engine.organization.util.tree;
import com.api.hrm.bean.TreeNode;
import com.engine.organization.entity.searchtree.SearchTree;
import org.apache.commons.collections4.CollectionUtils;
import weaver.conn.RecordSet;
import weaver.general.StringUtil;
import java.util.*;
import java.util.stream.Collectors;
/**
* @description:
* @author:dxfeng
* @createTime: 2022/06/06
* @version: 1.0
*/
public class SearchTreeUtil {
/**
* 左侧树 类型表示
*
* 0:集团
* 1:分部
* 2:部门
*/
private static final String TYPE_GROUP = "0";
public static Map getSearchTree(String type, List treeList) {
Map dataMap = new HashMap<>();
SearchTree topGroup = getTopGroup();
// 集团
List companyList = new ArrayList<>();
companyList.add(topGroup);
List treeDatas = new ArrayList<>();
// 排序,设置是否为叶子节点
List collect = treeList.stream().peek(item ->
item.setIsParent(CollectionUtils.isNotEmpty(item.getSubs()))
).sorted(Comparator.comparing(item -> Integer.parseInt(item.getId()))).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) {
treeDatas.addAll(collect);
}
// 未点击,初始化树结构
if (StringUtil.isEmpty(type)) {
dataMap.put("companys", companyList);
SearchTree rootCompany = getTopGroup();
rootCompany.setSubs(treeDatas);
rootCompany.setIsParent(CollectionUtils.isNotEmpty(rootCompany.getSubs()));
Map rootCompanyMap = new HashMap<>();
rootCompanyMap.put("rootCompany", rootCompany);
dataMap.put("datas", rootCompanyMap);
} else {
// 根据ID查询
dataMap.put("datas", treeDatas);
}
return dataMap;
}
/**
* 获取集团
*
* @return
*/
private static SearchTree getTopGroup() {
RecordSet rs = new RecordSet();
String sql = "select * from HrmCompany ";
rs.executeQuery(sql);
SearchTree groupTree = new SearchTree();
groupTree.setCanClick(false);
groupTree.setCanceled(false);
groupTree.setCompanyid("1");
groupTree.setIcon("icon-coms-LargeArea");
groupTree.setId("0");
groupTree.setIsVirtual("0");
while (rs.next()) {
groupTree.setName(rs.getString("COMPANYNAME"));
}
groupTree.setSelected(false);
groupTree.setType(TYPE_GROUP);
return groupTree;
}
/**
* 处理树层级
*
* @param treeList
* @return
*/
public static List builderTreeMode(List treeList) {
Map> collects = treeList.stream().collect(Collectors.groupingBy(TreeNode::getPid));
return treeList.stream().peek(e -> e.setSubs(collects.get(e.getId()))).peek(item -> {
if (CollectionUtils.isNotEmpty(item.getSubs())) {
item.setIsParent(true);
}
}).filter(item -> isTop(item.getPid())).collect(Collectors.toList());
}
/**
* 组合分部、部门层级关系
*
* @param treeList
* @param deptTrees
* @return
*/
public static List builderTreeMode(List treeList, List deptTrees) {
Map> parentMap = treeList.stream().collect(Collectors.groupingBy(TreeNode::getPid));
Map> childMap = deptTrees.stream().collect(Collectors.groupingBy(SearchTree::getParentComp));
boolean isAdd = !childMap.isEmpty();
return treeList.stream().peek(e -> {
List treeNodes = new ArrayList<>();
List nodes = parentMap.get(e.getId());
if (CollectionUtils.isNotEmpty(nodes)) {
treeNodes.addAll(nodes);
}
if (isAdd && CollectionUtils.isNotEmpty(childMap.get(e.getId()))) {
treeNodes.addAll(childMap.get(e.getId()));
}
e.setSubs(treeNodes);
}).peek(item -> {
if (CollectionUtils.isNotEmpty(item.getSubs())) {
item.setIsParent(true);
}
}).filter(item -> isTop(item.getPid())).collect(Collectors.toList());
}
/**
* 判断是为顶层数据
*
* @param pid
* @return
*/
private static boolean isTop(String pid) {
return StringUtil.isEmpty(pid) || "0".equals(pid);
}
/**
* 判断是为顶层数据
*
* @param pid
* @return
*/
public static boolean isTop(Long pid) {
return null == pid;
}
}