Java开发笔记13(树的结构修改记录)

1.Controller:

/**
* 区域树生成
*/
@GetMapping("/list")
private Result regionTree() {
Station station = getStation(getUser());
String stationCode = station.getStationTelecode();
List<NewTreeVo> tree = stationInfRelaService.regionTree(stationCode);
return Result.ok(tree);
}
 

2.Service:

List<NewTreeVo> regionTree(String stationCode);

 

3.Impl:

@Override
public List<NewTreeVo> regionTree(String stationCode) {
List<StationInfRelaTree> allList = stationInfRelaTreeDao.findByStationCode(stationCode);
List<StationInfRelaTree> rootList = allList.stream().filter(s -> s.getParent() == null).collect(Collectors.toList());

Integer rootType = 1;
return rootList.stream()
//转为vo对象
.map(root -> generateNewTreeVo(root, rootType))
//获取子节点
.peek(root -> {
String relaTreeId = root.getUserdata().getRelaTreeId();
int curRootType = Integer.parseInt(root.getUserdata().getType());
root.setItems(getItems(allList, relaTreeId, curRootType));
}).collect(Collectors.toList());
}

/**
* 获取子节点
* @param allList 所有数据集
* @param parentId 父节点
* @param rootType 父节点类型
* @return
*/
private static Set<NewTreeVo> getItems(List<StationInfRelaTree> allList, String parentId, int rootType) {
return allList.stream()
.filter(node -> node.getParent() != null && node.getParent().getRelaTreeId().equals(parentId))
.map(node -> generateNewTreeVo(node, rootType + 1))
.peek(node -> {
String relaTreeId = node.getUserdata().getRelaTreeId();
int curRootType = Integer.parseInt(node.getUserdata().getType());
node.setItems(getItems(allList, relaTreeId, curRootType));
})
.collect(Collectors.toSet());
}

/**
* StationInfRelaTree 转为 NewTreeVo
* @param infRelaTree
* @param type 节点类型
* @return
*/
private static NewTreeVo generateNewTreeVo(StationInfRelaTree infRelaTree, Integer type) {
return NewTreeVo.builder()
.id(infRelaTree.getId())
.text(infRelaTree.getInfName())
.userdata(generateUserData(infRelaTree, type)).build();
}

/**
* 生成NewTreeVo.UserData
* @see NewTreeVo.UserData
* @param infRelaTree
* @param type
* @return
*/
private static NewTreeVo.UserData generateUserData(StationInfRelaTree infRelaTree, Integer type) {
NewTreeVo.UserData userData = new NewTreeVo.UserData();
//属性拷贝
BeanUtils.copyProperties(infRelaTree, userData);
//其他属性赋值
StationInfRelaTree parent = infRelaTree.getParent();
if (parent != null) {
userData.setParent_id(parent.getRelaTreeId());
}else{
userData.setParent_id("1");
}

userData.setType(type.toString());
return userData;
}
 

4:Dao:

@Query("select t from StationInfRelaTree t where t.stationCode = :stationCode")
List<StationInfRelaTree> findByStationCode(@Param("stationCode") String stationCode);

 5:entity:

@Data
@Builder
public class NewTreeVo implements Serializable {


private String id;

private String text; //区域名称

private UserData userdata; //除了idstationName之外的其他数据,放到userdata里面。

private Set<NewTreeVo> items;

@Data
public static class UserData {
private String relaTreeId;
private String parent_id;
private String infValue;
private String infCode;
private String infType;
private String stationName;
private String infMark;
private String relaTreeState;
private String stationCode;
private String ismonitored;
//节点类型 一级节点1 二级节点2...
private String type;
}
}
posted @   sensen~||^_^|||&  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示