全国行政区域数据及导入及接口实现及四级联动

一、先将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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值