cloudroam
2025-04-02 9b8db73dbec26af11e80ee36926ac6d039b921ff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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("--------------------------");
    }
 
}