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 @ 2023-04-17 13:40  sensen~||^_^|||&  阅读(79)  评论(0)    收藏  举报