给层级目录添加分类父类(父类为临时组合节点,非数据库数据)

发布时间 2023-11-13 11:27:53作者: 指尖的键舞

/**
* Ztree树结构实体类
*
* @author ctspn
*/
@Data
public class Tree implements Serializable
{
private static final long serialVersionUID = 1L;

/** 节点主键 */
private Long pkId;

/** 节点ID */
private String id;

/** 节点父ID */
private String pId;

/** 节点名称 */
private String name;

/** 节点标题 */
private String title;

//子节点
private List<Tree> children;

//节点默认展开
private Boolean spread = true;


/** 部门编号*/
private String organNo;
//与上一层关系
private String upperAffiliatedRelation;
//持股比例
private BigDecimal upperHoldStockPercent;

}
{
//创建分类节点
//按父id分组
Map<String, List<Tree>> map = trees.stream().collect(Collectors.groupingBy(Tree::getPId));
for (Map.Entry<String, List<Tree>> entry : map.entrySet()) {
String mapKey = entry.getKey();
List<Tree> mapValue = entry.getValue();
//按同一分类目录分组
Map<String, List<Tree>> collect = mapValue.stream().collect(Collectors.groupingBy(item-> Optional.ofNullable(item.getUpperAffiliatedRelation()).orElse("0")));
for (Map.Entry<String, List<Tree>> item : collect.entrySet()) {
String key = item.getKey();
List<Tree> value = item.getValue();
setNode(trees, key ,value, mapKey);//调用方法创造节点
}
}
//组成目录
List<Tree> collect = trees.stream().filter(item -> item.getPId().equals("0"))
.peek(menu -> menu.setChildren(getChildList(menu, trees))).collect(Collectors.toList());
return collect;
}
private List<Tree> getChildList(Tree menu, List<Tree> trees) {
return trees.stream().filter(item -> item.getPId().equals(menu.getId()))
.peek(child -> child.setChildren(getChildList(child, trees))).collect(Collectors.toList());
}
//创造节点
List<Tree> setNode(List<Tree> trees, String key, List<Tree> value, String mapKey) {
//创建分类目录
Tree node = new Tree();
String pid = UUID.randomUUID().toString();//目录id
if (other113.equals(key)) {
node.setTitle(other113Display+"("+value.size()+")");
}
if(mapKey.equals("0")){
node.setTitle(AccessorHelper.getAccessor().getOrgan().getName());
}
node.setId(pid);
node.setPId(mapKey);//设置临时节点父级
value.forEach(t->{t.setPId(pid);});//设置子类
if(!mapKey.equals("0")){
value.forEach(item->{
item.setTitle(item.getTitle()+"[持股"+item.getUpperHoldStockPercent().toString()+"%]");
});
}

trees.add(node);
return trees;
}