package cn.huge.module.utils;
|
|
import cn.huge.base.common.utils.ObjectUtils;
|
import cn.huge.module.ctuser.dto.CtUnitTreeDTO;
|
import org.apache.commons.collections.CollectionUtils;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Set;
|
|
/**
|
* @author zhouxiantao
|
* @create 2025-03-25 10:17
|
*/
|
public class TreeUtils {
|
/**
|
* 创建树形结构
|
*
|
* @param selectTermDTOList 所有集合
|
* @return List
|
*/
|
public static List<CtUnitTreeDTO> createUserTree(List<CtUnitTreeDTO> selectTermDTOList) {
|
List<CtUnitTreeDTO> firstMapList = new ArrayList<>();
|
for (CtUnitTreeDTO selectTermDTO : selectTermDTOList) {
|
for (CtUnitTreeDTO currentParam : selectTermDTOList) {
|
if (currentParam.getValue().equals(selectTermDTO.getParentId())) {
|
addToMBean(currentParam, selectTermDTO);
|
break;
|
}
|
}
|
}
|
//取第一级节点
|
for (CtUnitTreeDTO selectTermDTO : selectTermDTOList) {
|
if ("root".equals(selectTermDTO.getParentId())) {
|
firstMapList.add(selectTermDTO);
|
}
|
}
|
return firstMapList;
|
}
|
|
/**
|
* 获取组织的子级组织
|
*
|
* @param targetUnit 目标组织
|
* @param currentUnit 子级组织
|
*/
|
public static void addToMBean(CtUnitTreeDTO targetUnit, CtUnitTreeDTO currentUnit) {
|
List<CtUnitTreeDTO> childListObj = targetUnit.getChildren();
|
List<CtUnitTreeDTO> childList = null;
|
if (CollectionUtils.isEmpty(childListObj)) {
|
childList = new ArrayList();
|
targetUnit.setChildren(childList);
|
} else {
|
childList = childListObj;
|
}
|
childList.add(currentUnit);
|
}
|
|
public static List<CtUnitTreeDTO> sort(Set<CtUnitTreeDTO> termsSet){
|
List<CtUnitTreeDTO> termsList = new ArrayList<>();
|
if(ObjectUtils.isNotEmpty(termsSet)){
|
for (CtUnitTreeDTO selectTermDTO : termsSet) {
|
termsList.add(selectTermDTO);
|
}
|
termsList.sort((o1, o2)->{
|
String s1 = o1.getValue().replaceAll("[^0-9]", "");
|
if(ObjectUtils.isEmpty(s1)){
|
s1 = "0";
|
}
|
String s2 = o2.getValue().replaceAll("[^0-9]", "");
|
if(ObjectUtils.isEmpty(s2)){
|
s2 = "0";
|
}
|
Double totalScore1 = Double.valueOf(s1);
|
Double totalScore2 = Double.valueOf(s2);
|
if(totalScore1 < totalScore2) {
|
return 1;
|
}else if (totalScore1.equals(totalScore2)) {
|
return 0;
|
}else {
|
return -1;
|
}
|
});
|
}
|
return termsList;
|
}
|
|
}
|