Java开发笔记9(一、从另一个表导入另一个表获取区域树数据;二、根据stationId生成二级树)

一、从另一个表导入另一个表获取区域树数据:

1.Controller:

/**
* b_stationinfrelatree 表中的前两级数据导入到 b_stationregiontree 表中接口。
*/
@PostMapping("/toStationInfRelaTree")
public Result InfToRegionTree() {
stationRegionTreeService.setInfToRegion();
return Result.ok();
}

2.Service:

Result setInfToRegion();

3.Impl:

@Override
public Result setInfToRegion() {

//查询所有数据
List<StationInfRelaTree> allDate = stationInfRelaTreeDao.getAllDate();
//创建一个List用来存放所有parentId'1'的根节点。
List<StationInfRelaTree> allRoot = new ArrayList<>();
for(StationInfRelaTree date : allDate) {
//如果parentId1,则代表是根节点,存入到allRoot集合中。
if(date.getParent().getId().equals("1")) {
allRoot.add(date);
}
}
for(StationInfRelaTree allroot : allRoot) {
StationRegionTree stationRegionTree = new StationRegionTree();
stationRegionTree.setId(Long.parseLong(allroot.getId()));
stationRegionTree.setRelaTreeId(allroot.getRelaTreeId());
stationRegionTree.setParent(allroot.getParent().getId());
stationRegionTree.setInfValue(allroot.getInfValue());
stationRegionTree.setInfCode(allroot.getInfCode());
stationRegionTree.setInfType(allroot.getInfType());
stationRegionTree.setInfName(allroot.getInfName());
stationRegionTree.setStationName(allroot.getStationName());
stationRegionTree.setInfMark(allroot.getInfMark());
stationRegionTree.setRelaTreeState(allroot.getRelaTreeState());
stationRegionTree.setStationCode(allroot.getInfValue());
// if (allroot.getRelaTreeId() == null || allroot.getRelaTreeId().isEmpty()) {
// continue;
// }
StationRegionTree RegionTrees = stationRegionTreeDao.selectRegion(allroot.getRelaTreeId());
if(RegionTrees != null) {
// stationRegionTreeMapper.updateRegin(stationRegionTree);
stationRegionTreeMapper.updateTreeById(stationRegionTree);
}else {
stationRegionTreeMapper.insertTree(stationRegionTree);
// stationRegionTreeDao.save(stationRegionTree);
}
}

//查找根节点下的子节点,子节点的parent_id就是根节点的rela_tree_id
for(StationInfRelaTree relaTree : allRoot) {
List<StationInfRelaTree> children = getChild(relaTree.getRelaTreeId(), allDate);
for(StationInfRelaTree childs : children) {
StationRegionTree RegionTree = new StationRegionTree();
RegionTree.setId(Long.parseLong(childs.getId()));
RegionTree.setRelaTreeId(childs.getRelaTreeId());
RegionTree.setParent(relaTree.getId());
RegionTree.setInfValue(childs.getInfValue());
RegionTree.setInfCode(childs.getInfCode());
RegionTree.setInfType(childs.getInfType());
RegionTree.setInfName(childs.getInfName());
RegionTree.setStationName(childs.getStationName());
RegionTree.setInfMark(childs.getInfMark());
RegionTree.setRelaTreeState(childs.getRelaTreeState());
RegionTree.setStationCode(relaTree.getInfValue());
StationRegionTree RegionTrees = stationRegionTreeDao.selectRegion(RegionTree.getRelaTreeId());
if(RegionTrees != null) {
// stationRegionTreeMapper.updateRegin(RegionTree);
stationRegionTreeMapper.updateTreeById(RegionTree);
}else {
stationRegionTreeMapper.insertTree(RegionTree);
// stationRegionTreeDao.save(RegionTree);
}
}
}
return Result.ok();
}

4.dao:

@Query(value = "select * from b_stationinfrelatree s", nativeQuery = true)
List<StationInfRelaTree> getAllDate();

@Query(value = "select s from StationRegionTree s where s.relaTreeId = :relaTreeId")
StationRegionTree selectRegion(@Param("relaTreeId") String relaTreeId);



void updateTreeById(StationRegionTree tree);
<update id="updateTreeById">
update b_stationregiontree set rela_tree_id =#{relaTreeId}, parent_id=#{parent}, inf_value=#{infValue}, inf_code=#{infCode}, inf_type=#{infType},
inf_name=#{infName}, station_name=#{stationName}, inf_mark=#{infMark}, rela_tree_state=#{relaTreeState}, station_code=#{stationCode}
where id=#{id}
</update>


void insertTree(StationRegionTree regionTree);
<insert id="insertTree">
insert into b_stationregiontree (id, rela_tree_id, parent_id, inf_value, inf_code, inf_type, inf_name, station_name, inf_mark, rela_tree_state, station_code)
values (#{id}, #{relaTreeId}, #{parent}, #{infValue}, #{infCode}, #{infType}, #{infName}, #{stationName}, #{infMark}, #{relaTreeState}, #{stationCode})
</insert>



@Query(value = "select s from StationRegionTree s where s.relaTreeId = :relaTreeId")
StationRegionTree selectRegion(@Param("relaTreeId") String relaTreeId);
 
4.entity:
package com.cars.ict.rbpsems.entity.controlpisled;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import javax.persistence.*;
import java.util.Set;

/**
* Created by
*/
@Entity
@Table(name = "b_stationinfrelatree")
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
public class StationInfRelaTree {

@Id
@Column(length = 20, name = "id")
private String id;

@Column(length = 20, name = "rela_tree_id")
private String relaTreeId;

/**
* 上級
*/
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private StationInfRelaTree parent;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent")
//@OrderBy(value = "code asc")
private Set<StationInfRelaTree> children;

/**
* 车站基础信息值
*/
@Column(length = 20, name = "inf_value")
private String infValue;
/**
* 车站基础信息编码
*/
@Column(length = 500, name = "inf_code")
private String infCode;
/**
* 车站基础信息类型
*/
@Column(length = 2, name = "inf_type")
private String infType;
/**
* 车站基础信息名称
*/
@Column(length = 20, name = "inf_name")
private String infName;
/**
* 车站名称
*/
@Column(length = 20, name = "station_name")
private String stationName;
/**
* 车站基础信息标示
*/
@Column(length = 100, name = "inf_mark")
private String infMark;
/**
* 信息状态 
*/
@Column(length = 1, name = "rela_tree_state")
private String relaTreeState;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getRelaTreeId() {
return relaTreeId;
}

public void setRelaTreeId(String relaTreeId) {
this.relaTreeId = relaTreeId;
}

public StationInfRelaTree getParent() {
return parent;
}

public void setParent(StationInfRelaTree parent) {
this.parent = parent;
}

public Set<StationInfRelaTree> getChildren() {
return children;
}

public void setChildren(Set<StationInfRelaTree> children) {
this.children = children;
}

public String getInfValue() {
return infValue;
}

public void setInfValue(String infValue) {
this.infValue = infValue;
}

public String getInfCode() {
return infCode;
}

public void setInfCode(String infCode) {
this.infCode = infCode;
}

public String getInfType() {
return infType;
}

public void setInfType(String infType) {
this.infType = infType;
}

public String getInfName() {
return infName;
}

public void setInfName(String infName) {
this.infName = infName;
}

public String getStationName() {
return stationName;
}

public void setStationName(String stationName) {
this.stationName = stationName;
}

public String getInfMark() {
return infMark;
}

public void setInfMark(String infMark) {
this.infMark = infMark;
}

public String getRelaTreeState() {
return relaTreeState;
}

public void setRelaTreeState(String relaTreeState) {
this.relaTreeState = relaTreeState;
}

public StationInfRelaTree(String relaTreeId, String infName, String infValue, String infType, String infCode, String infMark,
StationInfRelaTree parent, String stationName, String relaTreeState) {
super();
this.relaTreeId=relaTreeId;
this.infName=infName;
this.infValue=infValue;
this.infType=infType;
this.infCode=infCode;
this.infMark=infMark;
this.parent=parent;
this.stationName=stationName;
this.relaTreeState=relaTreeState;
}

public StationInfRelaTree() {
super();
}
}



package com.cars.ict.rbpsems.entity.controlpisled;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import javax.persistence.*;
import java.util.Set;

/**
* Created by
*/
@Entity
@Data
@Table(name = "b_stationregiontree")
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
public class StationRegionTree {

@Id
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
private long id;

@Column(length = 20, name = "rela_tree_id")
private String relaTreeId;

/**
* 上級
*/
// @JsonIgnore
// @ManyToOne(fetch = FetchType.LAZY)
@Column(name = "parent_id")
private String parent;


@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent")
//@OrderBy(value = "code asc")
private Set<StationRegionTree> children;

/**
* 车站基础信息值
*/
@Column(length = 20, name = "inf_value")
private String infValue;
/**
* 车站基础信息编码
*/
@Column(length = 500, name = "inf_code")
private String infCode;
/**
* 车站基础信息类型
*/
@Column(length = 2, name = "inf_type")
private String infType;
/**
* 车站基础信息名称
*/
@Column(length = 20, name = "inf_name")
private String infName;
/**
* 车站名称
*/
@Column(length = 20, name = "station_name")
private String stationName;
/**
* 车站基础信息标示
*/
@Column(length = 100, name = "inf_mark")
private String infMark;
/**
* 信息状态 
*/
@Column(length = 1, name = "rela_tree_state")
private String relaTreeState;

/**
* 车站编码 
*/
@Column(length = 20, name = "station_code")
private String stationCode;

}




=============================================================================================================
=============================================================================================================
=============================================================================================================
=============================================================================================================
二、根据stationId生成二级树:

1.controller:
//生成设备区域二级树
@PostMapping("/regionTree")
public Result list(String stationId) {
Set<String> stationIds;
if (org.apache.commons.lang3.StringUtils.isBlank(stationId)) {
stationIds = this.getStationIds();
} else {
stationIds = Sets.newHashSet();
stationIds.add(stationId);
}
return Result.ok(stationRegionTreeService.regionTreeList(stationIds));
}


2.service:
Result regionTreeList(Set<String> stationIds);

3.impl:
/**
* 设备区域二级树的生成
*/
@Override
public Result regionTreeList(Set<String> stationIds) {
Set<StationRegionTree> allList = stationRegionTreeDao.findByStationIds(stationIds);
//创建一个list集合,用于存放根节点
List<StationRegionTree> parent = new ArrayList<>();
for (StationRegionTree person : allList) {
//如果parentId1,则代表是根节点,存入到集合中 person.setSpread(true); 自动展开
if (person.getParent().equals("1")) {
// //虚拟字段spreadtrue时表示默认展开
// person.setSpread("true");
// //虚拟字段checkedtrue时表示默认选中
// person.setChecked("true");
parent.add(person);
}
}
//查找根节点下的子节点(只查到二级子节点),因为根节点的id就是子节点的parentId;
for (StationRegionTree person : parent) {
Set<StationRegionTree> children = getRegionChild(String.valueOf(person.getId()), allList);
person.setChildren(children);
}
return Result.ok(parent);
}

//查找子节点的方法
private Set<StationRegionTree> getRegionChild(String id, Set<StationRegionTree> allList) {
//存放子节点的集合
Set<StationRegionTree> children = new HashSet<>();
for (StationRegionTree person : allList) {
//如果根节点的id等于集合内parentId,说明是根节点的子节点
if (person.getParent().equals(id)) {
//虚拟字段checkedtrue时表示默认选中
// person.setChecked("true");
children.add(person);
}
}
return children;
}

4.dao:
@Query(value = "select r.* from b_stationregiontree r left join b_station_dict b on r.station_name = b.s_station_name where b.s_id\n" +
"in (:stationIds)", nativeQuery = true)
Set<StationRegionTree> findByStationIds(@Param("stationIds") Set<String> stationIds);

5.entity:

package com.cars.ict.rbpsems.entity.controlpisled;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import javax.persistence.*;
import java.util.Set;

/**
* Created by on 2022/3/4.
*/
@Entity
@Data
@Table(name = "b_stationregiontree")
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
public class StationRegionTree {

@Id
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
private long id;

@Column(length = 20, name = "rela_tree_id")
private String relaTreeId;

/**
* 上級
*/
// @JsonIgnore
// @ManyToOne(fetch = FetchType.LAZY)
@Column(name = "parent_id")
private String parent;


@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent")
//@OrderBy(value = "code asc")
private Set<StationRegionTree> children;

/**
* 车站基础信息值
*/
@Column(length = 20, name = "inf_value")
private String infValue;
/**
* 车站基础信息编码
*/
@Column(length = 500, name = "inf_code")
private String infCode;
/**
* 车站基础信息类型
*/
@Column(length = 2, name = "inf_type")
private String infType;
/**
* 车站基础信息名称
*/
@Column(length = 20, name = "inf_name")
private String infName;
/**
* 车站名称
*/
@Column(length = 20, name = "station_name")
private String stationName;
/**
* 车站基础信息标示
*/
@Column(length = 100, name = "inf_mark")
private String infMark;
/**
* 信息状态 
*/
@Column(length = 1, name = "rela_tree_state")
private String relaTreeState;

/**
* 车站编码 
*/
@Column(length = 20, name = "station_code")
private String stationCode;

}












 
 
 





posted @   sensen~||^_^|||&  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示