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 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 allTengxunDistricts = new ArrayList<>(); for (GaodeDistrict gaodeDistrict : response.getDistricts()){ addDistrictToList(gaodeDistrict, null, allTengxunDistricts); // 从根节点开始,父节点 ID 为 null } // 打印所有区划信息 for (GaodeDistrict gaodeDistrict :allTengxunDistricts){ printDistrictInfo(gaodeDistrict); } // 保存所有的行政区划数据到数据库中 // 将allTengxunDistricts转换成List List districtDOList= ConverterUtil.transList(allTengxunDistricts, DistrictDO.class); /** * 保存数据到数据库中 */ districtService.saveRemoteDistricts(districtDOList); System.out.println("保存成功"); }else{ log.error("高德地图获取行政区划失败"); } } public static void addDistrictToList(GaodeDistrict gaodeDistrict, String parentId, List 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("--------------------------"); } }