package com.mzl.flower.service.impl.map;
|
|
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.http.HttpUtil;
|
import com.google.gson.Gson;
|
import com.mzl.flower.config.GaodeMapProperties;
|
import com.mzl.flower.dto.map.gaode.GaodeDistrict;
|
import com.mzl.flower.dto.map.gaode.GaodeMapResponse;
|
import com.mzl.flower.dto.response.coupon.CouponTemplateActivyVO;
|
import com.mzl.flower.entity.district.DistrictDO;
|
import com.mzl.flower.service.district.DistrictService;
|
import com.mzl.flower.service.map.MapGaodeService;
|
import com.mzl.flower.utils.ConverterUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.codec.digest.Md5Crypt;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
|
@Service
|
@Slf4j
|
public class MapGaodeServiceImpl implements MapGaodeService {
|
|
@Autowired
|
private GaodeMapProperties gaodeMapProperties;
|
|
@Autowired
|
private DistrictService districtService;
|
|
@Override
|
public void getAdministrativeDivision() {
|
|
String administrativeDivisionsUrl = gaodeMapProperties.getAdministrativeDivisionsUrl();
|
System.out.println(administrativeDivisionsUrl);
|
//可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
|
HashMap<String, Object> paramMap = new HashMap<>();
|
|
String result= HttpUtil.get(administrativeDivisionsUrl, paramMap);
|
System.out.println(result);
|
// 使用 Gson 解析 JSON 字符串
|
Gson gson = new Gson();
|
GaodeMapResponse response = gson.fromJson(result, GaodeMapResponse.class);
|
if(response.getStatus().equals("1")&&response.getInfocode().equals("10000")){
|
log.info("高德地图获取行政区划成功");
|
log.info(response.getDistricts().toString());
|
List<GaodeDistrict> allTengxunDistricts = new ArrayList<>();
|
for (GaodeDistrict gaodeDistrict : response.getDistricts()){
|
addDistrictToList(gaodeDistrict, null, allTengxunDistricts); // 从根节点开始,父节点 ID 为 null
|
}
|
// 打印所有区划信息
|
for (GaodeDistrict gaodeDistrict :allTengxunDistricts){
|
printDistrictInfo(gaodeDistrict);
|
}
|
// 保存所有的行政区划数据到数据库中
|
// 将allTengxunDistricts转换成List<DsitrictVO>
|
List<DistrictDO> districtDOList= ConverterUtil.transList(allTengxunDistricts, DistrictDO.class);
|
|
/**
|
* 保存数据到数据库中
|
*/
|
districtService.saveRemoteDistricts(districtDOList);
|
|
|
System.out.println("保存成功");
|
}else{
|
log.error("高德地图获取行政区划失败");
|
}
|
|
|
|
}
|
|
public static void addDistrictToList(GaodeDistrict gaodeDistrict, String parentId, List<GaodeDistrict> allTengxunDistricts) {
|
// 设置id
|
gaodeDistrict.setId(IdUtil.simpleUUID());
|
// String idStr=gaodeDistrict.getAdcode()+gaodeDistrict.getLevel();
|
// gaodeDistrict.setId(idStr);
|
// 设置父节点 ID
|
gaodeDistrict.setParentId(parentId);
|
// 将当前区划添加到结果列表
|
allTengxunDistricts.add(gaodeDistrict);
|
|
// 递归遍历子区划
|
if (gaodeDistrict.getDistricts() != null) {
|
for (GaodeDistrict child : gaodeDistrict.getDistricts()) {
|
addDistrictToList(child, gaodeDistrict.getId(), allTengxunDistricts); // 将当前节点的 ID 作为子节点的父节点 ID
|
}
|
}
|
}
|
|
public static void printDistrictInfo(GaodeDistrict gaodeDistrict) {
|
// 打印相关信息
|
System.out.println("ID: " + gaodeDistrict.getId() + ", 父节点ID: " + gaodeDistrict.getParentId());
|
System.out.println("名称: " + gaodeDistrict.getName());
|
System.out.println("编码: " + gaodeDistrict.getAdcode());
|
System.out.println("级别: " + gaodeDistrict.getLevel());
|
System.out.println("边界线: " + gaodeDistrict.getPolyline());
|
System.out.println("中心点: " + gaodeDistrict.getCenter());
|
System.out.println("子节点数量: " + gaodeDistrict.getDistricts().size());
|
|
System.out.println("--------------------------");
|
}
|
|
}
|