从高德上同步省市区行政区划数据到本地数据库demo

  本地数据库表结构:

create table tbl_sys_area_bak
(
    id          int                                  not null
        primary key,
    parent_ids  varchar(255)                         null comment '所有上级(1,2,3)',
    parent_id   varchar(32)                          null comment '地区上级(3)',
    area_name   varchar(32)                          not null comment '地区名称(深圳市)',
    full_name   varchar(128)                         not null comment '地区全称(中国,广东省,深圳市)',
    level       int                                  not null comment '地区级别',
    code        varchar(100)                         null comment '区域编码',
    sort        int                                  not null comment '排序',
    remarks     varchar(255)                         null comment '备注',
    create_id   int                                  not null comment '创建者id',
    update_id   int                                  not null comment '更新者id',
    create_date datetime   default CURRENT_TIMESTAMP null comment '创建日期',
    update_date datetime   default CURRENT_TIMESTAMP null comment '更新日期',
    del_flag    tinyint(1) default 0                 not null comment '删除标记(Y删除,N未删除)',
    constraint index_area_code
        unique (code)
)
    comment '地区表;

  注意想用高德开放平台的api,需要先去该平台注册一个应用,我这里用的java,申请的是web服务平台的key。
在这里插入图片描述
粘贴下面代码,替换上自己的key之后,就可以将高德的行政区划数据导入自己本地数据库中。

注意:在跑该demo的过程中,控制台上可能会提示有部分数据导入失败,原因是本地数据库的等级设为了3级(省、市、区/县),有一部分省直辖县级市等级分为了2级(例如:五指山市,仙桃市、天门市……),该县级市下辖乡镇所用的adcode是该县级市的adcode。数据库用adcode作为了表的id,所以当插入了县级市的信息之后,再插入该县级市下辖的乡镇的时候,发现id(即adcode)重复,所以插入失败。这个可以根据自己业务需要,调整表结构来避免这个问题

 @ResponseBody
  @GetMapping("/t1")
  public Object t1() {
    //获取所有得的省份
    List<String> tblSysAreas = List.of(
        "河北省",
        "山西省",
        "辽宁省",
        "吉林省",
        "黑龙江省",
        "江苏省",
        "浙江省",
        "安徽省",
        "福建省",
        "江西省",
        "山东省",
        "河南省",
        "湖北省",
        "湖南省",
        "广东省",
        "海南省",
        "四川省",
        "贵州省",
        "云南省",
        "陕西省",
        "甘肃省",
        "青海省",
        "台湾省",
        "北京市",
        "天津市",
        "上海市",
        "重庆市",
        "内蒙古自治区",
        "广西壮族自治区",
        "西藏自治区",
        "宁夏回族自治区",
        "新疆维吾尔自治区",
        "香港特别行政区",
        "澳门特别行政区"
    );
    for (int i = 0; i < tblSysAreas.size(); i++) {
      int a = i + 1;
      getAreaInfo(tblSysAreas.get(i), a);
    }
    return scsDataRv("插入成功");
  }

  private void getAreaInfo(String areaName, int sort) {
  //此key为高德开放平台上申请的应用
    String key = "10901ba132asflwo4cccde7b122bdd69";
    String url = "https://restapi.amap.com/v3/config/district?"
        + "keywords=" + areaName
        + "&subdistrict=3"
        + "&key=" + key;
    JSONObject jsonObject = null;
    try {
      String response = httpApiService.doGet(url);
      jsonObject = JSONUtil.parseObj(response);
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println(areaName + "没有获取成功");
    }
    JSONObject provinceInfo = null;
    try {
      //第一层,省
      JSONArray jsonArray = jsonObject.getJSONArray("districts");
      provinceInfo = JSONUtil.parseObj(jsonArray.get(0));
      //插入省信息
      insertProvince(provinceInfo, sort);
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println("省份插入异常");
    }

    //第二层,市
    JSONArray cityInfos = provinceInfo.getJSONArray("districts");
    int citySort = 0;
    for (int i = 0; i < cityInfos.size(); i++) {
      JSONObject cityInfo = JSONUtil.parseObj(cityInfos.get(i));
      ++citySort;
      try {
        //插入市信息
        insertCityInfo(provinceInfo, cityInfo, citySort);
      } catch (Exception e) {
        e.printStackTrace();
        System.out.println("城市信息插入异常");
      }

      //区信息
      JSONArray areaList = JSONUtil.parseArray(cityInfo.get("districts"));
      int areaSort = 0;
      for (int i1 = 0; i1 < areaList.size(); i1++) {
        JSONObject areaInfo = JSONUtil.parseObj(areaList.get(i1));
        ++areaSort;
        try {
          //插入区信息
          insertAreaInfo(provinceInfo, cityInfo, areaInfo, areaSort);
        } catch (Exception e) {
          e.printStackTrace();
          System.out.println("区域信息插入异常");
        }

      }
    }

  }

  private void insertAreaInfo(JSONObject provinceInfo, JSONObject cityInfo, JSONObject areaInfo, int sort) {
    TblSysAreaBak build = TblSysAreaBak.builder()
        .id(Integer.valueOf(String.valueOf(areaInfo.get("adcode"))))
        .code((String) areaInfo.get("adcode"))
        .sort(sort)
        .updateId(1)
        .createId(1)
        .level(3)
        .parentId((String) cityInfo.get("adcode"))
        .parentIds("0,".concat((String) provinceInfo.get("adcode")).concat(",").concat((String) cityInfo.get("adcode")).concat(",").concat((String) areaInfo.get("adcode")))
        .fullName("中国,".concat((String) provinceInfo.get("name")).concat(",").concat((String) cityInfo.get("name")).concat(",").concat((String) areaInfo.get("name")))
        .delFlag(DelFlagEnum.N.getDelKey())
        .areaName((String) areaInfo.get("name")).build();
    tblSysAreaBakService.insert(build);
  }

  private void insertCityInfo(JSONObject provinceInfo, JSONObject cityInfo, int sort) {
    TblSysAreaBak build = TblSysAreaBak.builder()
        .id(Integer.valueOf(String.valueOf(cityInfo.get("adcode"))))
        .code((String) cityInfo.get("adcode"))
        .sort(sort)
        .updateId(1)
        .createId(1)
        .level(2)
        .parentId((String) provinceInfo.get("adcode"))
        .parentIds("0,".concat((String) provinceInfo.get("adcode")).concat(",").concat((String) cityInfo.get("adcode")))
        .fullName("中国,".concat((String) provinceInfo.get("name")).concat(",").concat((String) cityInfo.get("name")))
        .delFlag(DelFlagEnum.N.getDelKey())
        .areaName((String) cityInfo.get("name")).build();
    tblSysAreaBakService.insert(build);
  }

  private void insertProvince(JSONObject provinceInfo, int sort) {
    TblSysAreaBak build = TblSysAreaBak.builder()
        .id(Integer.valueOf(String.valueOf(provinceInfo.get("adcode"))))
        .code((String) provinceInfo.get("adcode"))
        .sort(sort)
        .updateId(1)
        .createId(1)
        .level(1)
        .parentId("0")
        .parentIds("0,".concat((String) provinceInfo.get("adcode")))
        .fullName("中国,".concat((String) provinceInfo.get("name")))
        .delFlag(DelFlagEnum.N.getDelKey())
        .areaName((String) provinceInfo.get("name")).build();
    tblSysAreaBakService.insert(build);
  }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值