一、先将SQL导入数据库
https://download.csdn.net/download/qq_45614471/20419356
https://download.csdn.net/download/qq_45614471/20419356
二、接口全量查询所有四级父子行政区域数据
1、实体类
/**
* 行政区域 VO
* @author rambo
*/
@ApiModel(value = "行政区域 VO", description = "行政区域 VO")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString(callSuper = true)
@Accessors(chain = true)
public class DistrictsVO extends StringVO{
/** 城市编码 */
@ApiModelProperty(value = "城市编码", position = 10, required = true)
private String citycode;
/** 区域编码 */
@ApiModelProperty(value = "区域编码", position = 11, required = true)
private String adcode;
/** 城市名称 */
@ApiModelProperty(value = "城市名称", position = 12, required = true)
private String name;
/** 区域中心点 */
@ApiModelProperty(value = "区域中心点", position = 13, required = true)
private String center;
/** 行政区划级别 */
@ApiModelProperty(value = "行政区划级别", position = 14, required = true)
private String level;
/** 上级区域编码 */
@ApiModelProperty(value = "上级区域编码", position = 15, required = true)
private String pid;
@TableField(exist = false)
List<Districts> childrenList = new LinkedList<>();
}
2、controller
/**
* 行政区域列表查询
* @return
*/
@ApiOperation(value = "行政区域全量查询", notes = "行政区域全量查询")
@GetMapping("/list/all")
ResponseInfo<List<DistrictsVO>> listDistinctAll();
3、service
/**
* 行政区域
* @return
*/
@Override
public ResponseInfo<List<DistrictsVO>> listDistinctAll() {
List<Districts> list = districtsService.selectListAll();
return ResponseInfo.ofOkOrNoContent(BeanConverts.convert(list,DistrictsVO.class));
}
serviceImpl
public List<Districts> selectListAll() {
List<Districts> regions = districtsMapper.selectListAll();
List<Districts> tree = new ArrayList<>();
regions.forEach(item->{
if (item.getPid().equals("0")){
recursionFn(regions, item); //递归列表
tree.add(item);
}
});
return tree;
}
private void recursionFn(List<Districts> list, Districts region){
// 得到子节点列表
List<Districts> childList = getChildList(list, region);
region.setChildrenList(childList);
childList.forEach(item->{
if(hasChild(list,item)){
//判断是否有子节点
recursionFn(list, item);
}
});
}
private List<Districts> getChildList(List<Districts> list, Districts region){
List<Districts> tlist = new ArrayList<Districts>();
list.forEach(item->{
if(item.getPid().equals(region.getAdcode())){
tlist.add(item);
}
});
return tlist;
}
private boolean hasChild(List<Districts> list, Districts region)
{
return getChildList(list, region).size() > 0 ? true : false;
}
4、mapper
<select id="selectListAll" resultType="com.ehe.elder.domain.Districts">
select * from t_elder_districts
</select>
三、逐级查询(防止数据量过大导致内存泄漏)
1、controller
/**
* 行政区域列表查询
* @param pid
* @return
*/
@ApiOperation(value = "行政区域列表查询", notes = "行政区域列表查询")
@GetMapping("/list/area/{pid}")
ResponseInfo<List<DistrictsVO>> listDistinct(@ApiParam(value = "查询条件", required = true) @PathVariable("pid") String pid);
2、service
/**
* 行政区域
* @param pid
* @return
*/
@Override
public ResponseInfo<List<DistrictsVO>> listDistinct(String pid) {
if (StringUtils.isEmpty(pid) || "undefined".equals(pid)){
pid = "0";
}
return ResponseInfo.ofOkOrNoContent(BeanConverts.convert(districtsService.selectDisList(pid), DistrictsVO.class));
}
3、mapper
<select id="seletDisList" resultType="com.ehe.elder.domain.Districts">
select * from t_elder_districts where pid = #{pid}
</select>
四级联动借助第三方高德API可参考这篇文档:
https://blog.csdn.net/qq_45614471/article/details/103515608