Java开发笔记7(区域树查询)
1、controller:
//根据区域ID查询详细信息
@GetMapping("/list")
public Result list(String name, 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(stationRegionService.list(name, stationIds));
}
2、service:
List<StationRegionVO> list(String name, Set<String> stationIds);
3、serviceImpl:
@Override
// @Cacheable(value = "stationRegionList")
public List<StationRegionVO> list(String name, Set<String> stationIds) {
if (stationIds == null || stationIds.size() == 0) {
if (StringUtils.isEmpty(name)) {
return stationRegionDao.findStationRegionVOWithRoot();
}
Map<String, Object> params = new HashMap<>(2);
StringBuffer jql = new StringBuffer(60);
jql.append("select new com.cars.ict.rbpsems.vo.base.StationRegionVO (d) from StationRegion d where d.name like :name order by d.index asc, d.code desc");
params.put("name", "%" + name + "%");
return stationRegionDao.findListByJQL(jql.toString(), params);
} else { //===================只查询到二级区域==================在这里修改成下面的以查询全部======================
if (StringUtils.isEmpty(name)) {
List<StationRegionVO> ret = stationRegionDao.findRoot(stationIds);
for (StationRegionVO stationRegionVO : ret) {
for (StationRegionVO child : stationRegionVO.getChildren()) {
if (child.getChildren()!= null && !child.getChildren().isEmpty()) {
child.getChildren().clear();
}
}
}
return ret;
}
Map<String, Object> params = new HashMap<>(4);
StringBuffer jql = new StringBuffer(60);
jql.append("select new com.cars.ict.rbpsems.vo.base.StationRegionVO (d) from StationRegion d where d.name like :name and d.station.id in (:stationIds ) order by d.index asc, d.code desc");
params.put("name", "%" + name + "%");
params.put("stationIds", stationIds);
return stationRegionDao.findListByJQL(jql.toString(), params);
}
}
注: 上面是只查询到二级区域,查询全部则修改成下面的代码:
} else {
if (StringUtils.isEmpty(name)) {
return stationRegionDao.findRoot(stationIds);
}
4、dao:
public interface StationRegionDao extends BaseDao<StationRegion, String> {
/**
* 查询根节点区域数据
* @return
*/
@Query("select new com.cars.ict.rbpsems.vo.base.StationRegionVO (d) from StationRegion d where d.parent is null order by d.index asc, d.code desc")
List<StationRegionVO> findStationRegionVOWithRoot();
/**
* 根据车站插叙根节点数据
* @param stationIds
* @return
*/
@Query("select new com.cars.ict.rbpsems.vo.base.StationRegionVO (d) from StationRegion d where d.parent is null and d.station.id in (:stationIds ) order by d.index asc, d.code desc")
List<StationRegionVO> findRoot(@Param("stationIds") Set<String> stationIds);
}
5、entity:
package com.cars.ict.rbpsems.entity.base;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
/**
* 车站区域
*
* @author mike
*/
@Entity
@Data
@Table(name = "b_station_region_dict")
public class StationRegion implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GenericGenerator(name = "uuid", strategy = "uuid")
@GeneratedValue(generator = "uuid")
@Column(length = 32, name = "s_id")
private String id;
/**
* 区域名称
*/
@Column(length = 100, name = "s_name")
private String name;
/**
* 区域编码
*/
@Column(length = 50, name = "s_code")
private String code;
/**
* 区域编码
*/
@Column(name = "s_area_code")
private String areaCode;
/**
* 区域类型简称
*/
@Column(length = 50, name = "s_abbreviation")
private String abbreviation;
/**
* 站点
*/
@ManyToOne
@JoinColumn(name = "s_station_id")
private Station station;
/**
* 类型: 0 区域 1 车站
*/
@Column(length = 50, name = "s_type")
private String type = "0";
/**
* 车站区域照片
*/
@Column(length = 50, name = "s_station_region_pic")
private String stationRegionPic = "";
/**
* 排序
*/
@Column(name = "i_index")
private Integer index;
/**
* 上级区域
*/
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "s_pid")
private StationRegion parent;
/**
* 车站区域是否被监控管理
*/
@Column(name = "s_ismonitored")
private String ismonitored = "0";
@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent")
private List<StationRegion> children;
public StationRegion() {
super();
}
public StationRegion(String name, String code