From fab989642f977c2f6544fd7bf4368c5c7120b131 Mon Sep 17 00:00:00 2001 From: yh <1844516659@qq.com> Date: Tue, 19 Jul 2022 15:16:26 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A3=9E=E6=BB=B4=E5=87=BA=E8=A1=8C=E7=BD=91?= =?UTF-8?q?=E7=BA=A6=E8=BD=A62022-service-map-=E5=85=A5=E5=BA=93=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=9C=B0=E5=9B=BE=E5=9C=B0=E5=8C=BA=E5=AD=97?= =?UTF-8?q?=E5=85=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/AmapConfigConstants.java | 6 + .../constant/CommonStatusEnum.java | 6 + .../remote/MapDicDistrictClient.java | 2 +- .../service/DicDistrictService.java | 112 +++++++++++++++++- 4 files changed, 123 insertions(+), 3 deletions(-) diff --git a/internal-common/src/main/java/com/mashibing/internalcommon/constant/AmapConfigConstants.java b/internal-common/src/main/java/com/mashibing/internalcommon/constant/AmapConfigConstants.java index dee9be6..15699f2 100644 --- a/internal-common/src/main/java/com/mashibing/internalcommon/constant/AmapConfigConstants.java +++ b/internal-common/src/main/java/com/mashibing/internalcommon/constant/AmapConfigConstants.java @@ -20,4 +20,10 @@ public class AmapConfigConstants { public static final String DISTANCE = "distance"; public static final String DURATION = "duration"; + public static final String DISTRICTS = "districts"; + public static final String ADCODE = "adcode"; + public static final String NAME = "name"; + public static final String LEVEL = "level"; + public static final String STREET = "street" ; + } diff --git a/internal-common/src/main/java/com/mashibing/internalcommon/constant/CommonStatusEnum.java b/internal-common/src/main/java/com/mashibing/internalcommon/constant/CommonStatusEnum.java index d852167..02b794b 100644 --- a/internal-common/src/main/java/com/mashibing/internalcommon/constant/CommonStatusEnum.java +++ b/internal-common/src/main/java/com/mashibing/internalcommon/constant/CommonStatusEnum.java @@ -31,6 +31,12 @@ public enum CommonStatusEnum { */ ,PRICE_RULE_EMPTY(1300,"计价规则不存在") + /** + 地图信息:1400-1499 + */ + ,MAP_DISTRICT_ERROR(1400,"请求地图错误") + + ; diff --git a/service-map/src/main/java/com/mashibing/servicemap/remote/MapDicDistrictClient.java b/service-map/src/main/java/com/mashibing/servicemap/remote/MapDicDistrictClient.java index 15b116f..3f7f33f 100644 --- a/service-map/src/main/java/com/mashibing/servicemap/remote/MapDicDistrictClient.java +++ b/service-map/src/main/java/com/mashibing/servicemap/remote/MapDicDistrictClient.java @@ -34,7 +34,7 @@ public class MapDicDistrictClient { // 发起 结果拉取请求 ResponseEntity forEntity = restTemplate.getForEntity(url.toString(), String.class); - return forEntity.toString(); + return forEntity.getBody(); } } diff --git a/service-map/src/main/java/com/mashibing/servicemap/service/DicDistrictService.java b/service-map/src/main/java/com/mashibing/servicemap/service/DicDistrictService.java index 55d7762..98519c4 100644 --- a/service-map/src/main/java/com/mashibing/servicemap/service/DicDistrictService.java +++ b/service-map/src/main/java/com/mashibing/servicemap/service/DicDistrictService.java @@ -1,8 +1,13 @@ package com.mashibing.servicemap.service; import com.mashibing.internalcommon.constant.AmapConfigConstants; +import com.mashibing.internalcommon.constant.CommonStatusEnum; +import com.mashibing.internalcommon.dto.DicDistrict; import com.mashibing.internalcommon.dto.ResponseResult; +import com.mashibing.servicemap.mapper.DicDistrictMapper; import com.mashibing.servicemap.remote.MapDicDistrictClient; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -14,15 +19,118 @@ public class DicDistrictService { @Autowired private MapDicDistrictClient mapDicDistrictClient; + @Autowired + private DicDistrictMapper dicDistrictMapper; + public ResponseResult initDicDistrict(String keywords){ // 请求第三方接口,拉取区域编号信息 - String dicDistrict = mapDicDistrictClient.dicDistrict(keywords); - System.out.println("\n\ndicDistrict = " + dicDistrict); + String dicDistrictResultStr = mapDicDistrictClient.dicDistrict(keywords); + System.out.println("dicDistrictResultStr = " + dicDistrictResultStr); // 解析 结果 + JSONObject resultJobj = JSONObject.fromObject(dicDistrictResultStr); + int status = resultJobj.getInt(AmapConfigConstants.STATUS); + // 错误响应 返回失败 + if(status != 1){ + ResponseResult.fail(CommonStatusEnum.MAP_DISTRICT_ERROR.getCode(),CommonStatusEnum.MAP_DISTRICT_ERROR.getValue()); + } + + // 正确响应 则进行详细解析 + JSONArray resultJobjArr = resultJobj.getJSONArray(AmapConfigConstants.DISTRICTS); + + // 遍历 解析 所有节点信息 + for (int i = 0; i < resultJobjArr.size(); i++) { + + // 0 国家节点下的信息 + JSONObject contryJobj = resultJobjArr.getJSONObject(i); + + String contryAddresscode = contryJobj.getString(AmapConfigConstants.ADCODE) ; + String contryAddressName = contryJobj.getString(AmapConfigConstants.NAME) ; + String contryParentAddressCode = "0" ; + String contryLevel = contryJobj.getString(AmapConfigConstants.LEVEL) ; + // 持久化 国家节点信息 + saveDicDistrictObj(contryAddresscode,contryAddressName,contryParentAddressCode,contryLevel); + + + // 解析 省 + JSONArray provinceJobjArr = contryJobj.getJSONArray(AmapConfigConstants.DISTRICTS); + for (int p = 0; p < provinceJobjArr.size(); p++) { + JSONObject provinceJobj = provinceJobjArr.getJSONObject(p); + + // 持久化 省 节点信息 + String provinceAddresscode = provinceJobj.getString(AmapConfigConstants.ADCODE) ; + String provinceAddressName = provinceJobj.getString(AmapConfigConstants.NAME) ; + String provinceParentAddressCode = contryAddresscode; + String provinceLevel = provinceJobj.getString(AmapConfigConstants.LEVEL) ; + saveDicDistrictObj(provinceAddresscode,provinceAddressName,provinceParentAddressCode,provinceLevel); + + + + // 解析 市 + JSONArray cityJobjArr = provinceJobj.getJSONArray(AmapConfigConstants.DISTRICTS); + for (int c = 0;c< cityJobjArr.size();c++) { + + // 持久化 市 节点信息 + JSONObject cityJobj = cityJobjArr.getJSONObject(c); + String cityAddressCode = cityJobj.getString(AmapConfigConstants.ADCODE); + String cityAddressName = cityJobj.getString(AmapConfigConstants.NAME); + String cityParentAddressCode = provinceAddresscode; + String cityLevel = cityJobj.getString(AmapConfigConstants.LEVEL); + saveDicDistrictObj(cityAddressCode, cityAddressName, cityParentAddressCode, cityLevel); + + + // 解析 区 + JSONArray districtArray = cityJobj.getJSONArray(AmapConfigConstants.DISTRICTS); + for (int d = 0; d < districtArray.size(); d++) { + + // 持久化 区 节点信息 + JSONObject districtJobj = districtArray.getJSONObject(d); + String districtAddressCode = districtJobj.getString(AmapConfigConstants.ADCODE); + String districtAddressName = districtJobj.getString(AmapConfigConstants.NAME); + String districtLevelParentAddressCode = cityAddressCode; + String districtLevelLevel = districtJobj.getString(AmapConfigConstants.LEVEL); + // 暂不解析 街道 + if(districtLevelLevel.equals(AmapConfigConstants.STREET)){ + continue; + } + saveDicDistrictObj(districtAddressCode, districtAddressName, districtLevelParentAddressCode, districtLevelLevel); + + } + } + + } + + } + + return ResponseResult.success(); } + private void saveDicDistrictObj(String addresscode,String addressName,String parentAddressCode,String levelStr){ + DicDistrict district = new DicDistrict(); + district.setAddressCode(addresscode); + district.setAddressName(addressName); + Integer level = generatelevel(levelStr); + district.setLevel(level) ; + district.setParentAddressCode(parentAddressCode); + + dicDistrictMapper.insert(district); + } + + private int generatelevel(String level) { + int levelInt = 0; + if (level.trim().equals("country")) { + levelInt = 0; + } else if (level.trim().equals("province")) { + levelInt = 1; + } else if (level.trim().equals("city")) { + levelInt = 2; + } else if (level.trim().equals("district")) { + levelInt = 3; + } + return levelInt; + } + }