From 03d225272f860f4285acae67c102b73532bd3b2a Mon Sep 17 00:00:00 2001
From: fs-danaus <danaus314@qq.com>
Date: 星期日, 03 三月 2024 22:59:42 +0800
Subject: [PATCH] 华为地图服务功能

---
 src/com/yc/sdk/huaweimap/entity/CoordinateEntity.java             |   10 +
 src/com/yc/sdk/huaweimap/entity/CommentEntity.java                |    9 
 src/com/yc/sdk/huaweimap/entity/CoordinateBoundsEntity.java       |    9 
 src/com/yc/sdk/huaweimap/entity/IPLocationResponseEntity.java     |   11 +
 src/com/yc/sdk/huaweimap/entity/ChildrenNodeEntity.java           |   16 +
 WebRoot/home.jsp                                                  |    8 
 src/com/yc/sdk/map/entity/LocationEntity.java                     |   21 ++
 src/com/yc/sdk/huaweimap/entity/ReverseGeocodeRequestEntity.java  |   12 +
 src/com/yc/sdk/huaweimap/entity/PeriodEntity.java                 |    9 
 src/com/yc/sdk/huaweimap/entity/TimeOfWeekEntity.java             |    9 
 src/com/yc/sdk/map/service/AbstractMapService.java                |   26 ++
 src/com/yc/sdk/map/service/MapService.java                        |   19 +
 src/com/yc/sdk/huaweimap/entity/IPLocationResultEntity.java       |   10 +
 src/com/yc/sdk/huaweimap/entity/WordEntity.java                   |    9 
 src/com/yc/sdk/huaweimap/entity/AutocompletePredictionEntity.java |   12 +
 src/com/yc/sdk/huaweimap/service/HuaWeiMapService.java            |  104 ++++++++++
 src/com/yc/action/login/LoginAction.java                          |   48 ++--
 src/com/yc/sdk/huaweimap/entity/ReverseGeocodeResponseEntity.java |   13 +
 src/com/yc/sdk/huaweimap/entity/AddressDetailEntity.java          |   21 ++
 src/com/yc/sdk/huaweimap/entity/StarInfoEntity.java               |    8 
 src/com/yc/sdk/huaweimap/entity/CommentInfoEntity.java            |    9 
 src/com/yc/sdk/huaweimap/entity/OpeningHoursEntity.java           |   11 +
 src/com/yc/sdk/huaweimap/entity/SiteEntity.java                   |   17 +
 src/com/yc/sdk/gaodemap/api/GaoDeMapService.java                  |   37 +++
 src/com/yc/sdk/huaweimap/entity/PoiEntity.java                    |   22 ++
 src/com/yc/sdk/shopping/action/api/DistributorAddress.java        |   75 +++----
 26 files changed, 482 insertions(+), 73 deletions(-)

diff --git a/WebRoot/home.jsp b/WebRoot/home.jsp
index 18585b9..7c3813f 100644
--- a/WebRoot/home.jsp
+++ b/WebRoot/home.jsp
@@ -68,9 +68,11 @@
     //--------------------鑿滃崟閫夐」閰嶇疆
     long rand = new Random().nextLong();
     //褰撳墠鐧诲綍鎵嬫満鍙风爜
-    String phoneNumber= session.getAttribute(SessionKey.USER_TELE_PHONE).toString();
-    if(StringUtils.isNotBlank(phoneNumber)){
-        phoneNumber=phoneNumber.substring(0,3)+"****"+phoneNumber.substring(7);
+    String phoneNumber = session.getAttribute(SessionKey.USER_TELE_PHONE).toString();
+    if (StringUtils.isNotBlank(phoneNumber)) {
+        if (phoneNumber.length() > 7) {
+            phoneNumber = phoneNumber.substring(0, 3) + "****" + phoneNumber.substring(7);
+        }
     }
 %>
 <%!
diff --git a/src/com/yc/action/login/LoginAction.java b/src/com/yc/action/login/LoginAction.java
index 4830ebd..3d3247f 100644
--- a/src/com/yc/action/login/LoginAction.java
+++ b/src/com/yc/action/login/LoginAction.java
@@ -27,10 +27,9 @@
 import com.yc.sdk.WebSocketMessage.entity.MessageInfo;
 import com.yc.sdk.WebSocketMessage.entity.MessageType;
 import com.yc.sdk.WebSocketMessage.entity.WsMessageUserEntity;
-import com.yc.sdk.gaodemap.action.GdMapServiceInit;
-import com.yc.sdk.gaodemap.api.GdMapService;
 import com.yc.sdk.gaodemap.entity.GdErrorException;
-import com.yc.sdk.gaodemap.entity.RegeoCodeEntity;
+import com.yc.sdk.map.entity.LocationEntity;
+import com.yc.sdk.map.service.MapService;
 import com.yc.sdk.password.action.ChangePassword;
 import com.yc.sdk.shopping.action.VerificationCodes;
 import com.yc.sdk.shopping.action.api.InvitationCode;
@@ -679,6 +678,7 @@
                 map.put("selectNextDocumentWhenApproved", session.getAttribute(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED));
                 map.put("userConfig", sysUserConfigEntity);
                 map.put("perssion", session.getAttribute(SessionKey.PERSSION));
+                map.put("map_provider", org.apache.commons.lang3.StringUtils.isNotBlank(AttachmentConfig.get("map_provider")) ? AttachmentConfig.get("map_provider") : "gaode");//huawei,gaode
                 this.printJson(response, GridUtils.toJson(map));
                 return null;
             } else if (redirect != null && !"".equals(redirect)) { // 澧炲姞鐧诲綍鍚庨噸瀹氬悜椤甸潰鍔熻兘锛宎dded by Johns Wang, 2016-02-17
@@ -923,30 +923,26 @@
                     userEntity.setEquipmentModel(model);
                     userEntity.setUserAgent(userAgentString);
                 }
-                String longitude = request.getHeader("x-app-longitude");
-                String latitude = request.getHeader("x-app-latitude");
+            String longitude = request.getHeader("x-app-longitude");
+            String latitude = request.getHeader("x-app-latitude");
+            //---閫氳繃缁忕含搴�,IP 鑾峰彇鍦扮悊淇℃伅锛堝浗锛岀渷锛屽競锛屽尯)
+            LocationEntity ipLocationEntity = MapService.getMapFactory().reverseGeocode(longitude, latitude, ip);
+            if (ipLocationEntity != null) {
+                userEntity.setCountryName(ipLocationEntity.getCountryName());
+                userEntity.setProvinceName(ipLocationEntity.getProvinceName());
+                userEntity.setCityName(ipLocationEntity.getCityName());
+                userEntity.setCountyName(ipLocationEntity.getCityName());
+            }
+            userEntity.setLongitude(longitude);
+            userEntity.setLatitude(latitude);
+            userEntity.setIp(ip);
 
-                //---閫氳繃缁忕含搴�,IP 鑾峰彇鍦扮悊淇℃伅锛堝浗锛岀渷锛屽競锛屽尯)
-                if(org.apache.commons.lang3.StringUtils.isNotBlank(dataSourceMap.getGeoWebApiKey())) {
-                    GdMapService gdMapService = GdMapServiceInit.getGdMapService(dataSourceMap.getGeoWebApiKey());
-                    final RegeoCodeEntity regeo = gdMapService.getRegeoV2(longitude, latitude, ip);
-                    if (regeo != null) {
-                        userEntity.setCountryName(regeo.getCountry());
-                        userEntity.setProvinceName(regeo.getProvince());
-                        userEntity.setCityName(regeo.getCity());
-                        userEntity.setCountyName(regeo.getDistrict());
-                    }
-                }
-                    userEntity.setLongitude(longitude);
-                    userEntity.setLatitude(latitude);
-                    userEntity.setIp(ip);
-
-                PerssionEntity perssionEntity = new PerssionEntity();
-                SpObserver.setDBtoInstance("_" + dbId);
-                perssionEntity.setRole(rIfc.getRole(userAccount.getUserCode()));
-                perssionEntity.setPerssion(userAccountService.getUserProfiles(userAccount.getUserCode()));
-                if (userAccount.getDefaultSet() != null && !"".equals(userAccount.getDefaultSet())) {
-                    perssionEntity.setDefaultSet(userAccountService.getDefaultSet(userAccount.getDefaultSet()));
+            PerssionEntity perssionEntity = new PerssionEntity();
+            SpObserver.setDBtoInstance("_" + dbId);
+            perssionEntity.setRole(rIfc.getRole(userAccount.getUserCode()));
+            perssionEntity.setPerssion(userAccountService.getUserProfiles(userAccount.getUserCode()));
+            if (userAccount.getDefaultSet() != null && !"".equals(userAccount.getDefaultSet())) {
+                perssionEntity.setDefaultSet(userAccountService.getDefaultSet(userAccount.getDefaultSet()));
                 }
 
                 // 淇濆瓨浼氳瘽 session淇℃伅
diff --git a/src/com/yc/sdk/gaodemap/api/GaoDeMapService.java b/src/com/yc/sdk/gaodemap/api/GaoDeMapService.java
new file mode 100644
index 0000000..fc0a668
--- /dev/null
+++ b/src/com/yc/sdk/gaodemap/api/GaoDeMapService.java
@@ -0,0 +1,37 @@
+package com.yc.sdk.gaodemap.api;
+
+import com.yc.entity.AttachmentConfig;
+import com.yc.sdk.gaodemap.action.GdMapServiceInit;
+import com.yc.sdk.gaodemap.entity.RegeoCodeEntity;
+import com.yc.sdk.map.entity.LocationEntity;
+import com.yc.sdk.map.service.AbstractMapService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class GaoDeMapService implements AbstractMapService {
+    @Autowired
+    GdMapService gdMapService;
+    private static String KEY = AttachmentConfig.get("GaoDeWebServiceKey");
+
+    public GaoDeMapService() {
+        this.gdMapService = GdMapServiceInit.getGdMapService(KEY);
+    }
+
+    @Override
+    public LocationEntity getIPLocation(String ip) throws Exception {
+        return null;
+    }
+
+    @Override
+    public LocationEntity reverseGeocode(String longitude, String latitude, String ip) throws Exception {
+        RegeoCodeEntity regeoV2 = gdMapService.getRegeoV2(longitude, latitude, ip);
+        LocationEntity location = new LocationEntity();
+        location.setCountryName(regeoV2.getCountry());
+        location.setProvinceName(regeoV2.getProvince());
+        location.setCityName(regeoV2.getCity());
+        location.setSubLocality(regeoV2.getDistrict());
+        location.setThoroughfare(regeoV2.getTownship());
+        return location;
+    }
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/AddressDetailEntity.java b/src/com/yc/sdk/huaweimap/entity/AddressDetailEntity.java
new file mode 100644
index 0000000..4dac0e8
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/AddressDetailEntity.java
@@ -0,0 +1,21 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class AddressDetailEntity {
+    String countryCode;
+    String country;
+    String adminArea;
+    String subAdminArea;
+    String tertiaryAdminArea;
+    String city;
+    String adminCode;
+    String cityCode;
+    String locality;
+    String subLocality;
+    String streetNumber;
+    String thoroughfare;
+    String postalCode;
+
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/AutocompletePredictionEntity.java b/src/com/yc/sdk/huaweimap/entity/AutocompletePredictionEntity.java
new file mode 100644
index 0000000..59ba25f
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/AutocompletePredictionEntity.java
@@ -0,0 +1,12 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AutocompletePredictionEntity {
+    String description;
+    List<WordEntity> matchedKeywords;
+    List<WordEntity> matchedWords;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/ChildrenNodeEntity.java b/src/com/yc/sdk/huaweimap/entity/ChildrenNodeEntity.java
new file mode 100644
index 0000000..bc54424
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/ChildrenNodeEntity.java
@@ -0,0 +1,16 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ChildrenNodeEntity {
+    String siteId;
+    String name;
+    String formatAddress;
+    CoordinateEntity location;
+    List<String> hwPoiTypes;
+    String domeAndInt;
+    String depAndArr;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/CommentEntity.java b/src/com/yc/sdk/huaweimap/entity/CommentEntity.java
new file mode 100644
index 0000000..8ab5096
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/CommentEntity.java
@@ -0,0 +1,9 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class CommentEntity {
+    StarInfoEntity starInfo;
+    CommentInfoEntity commentInfo;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/CommentInfoEntity.java b/src/com/yc/sdk/huaweimap/entity/CommentInfoEntity.java
new file mode 100644
index 0000000..90f7abb
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/CommentInfoEntity.java
@@ -0,0 +1,9 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class CommentInfoEntity {
+    Integer total;
+
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/CoordinateBoundsEntity.java b/src/com/yc/sdk/huaweimap/entity/CoordinateBoundsEntity.java
new file mode 100644
index 0000000..aaaf2da
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/CoordinateBoundsEntity.java
@@ -0,0 +1,9 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class CoordinateBoundsEntity {
+    CoordinateEntity northeast;
+    CoordinateEntity southwest;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/CoordinateEntity.java b/src/com/yc/sdk/huaweimap/entity/CoordinateEntity.java
new file mode 100644
index 0000000..b2dfbaf
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/CoordinateEntity.java
@@ -0,0 +1,10 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class CoordinateEntity {
+    Double lat;//绾害锛屽彇鍊艰寖鍥达細[-90, 90]
+    Double lng;//缁忓害锛屽彇鍊艰寖鍥达細[-180, 180]銆�
+
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/IPLocationResponseEntity.java b/src/com/yc/sdk/huaweimap/entity/IPLocationResponseEntity.java
new file mode 100644
index 0000000..9ec865c
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/IPLocationResponseEntity.java
@@ -0,0 +1,11 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class IPLocationResponseEntity {
+    String errorCode;
+    String errorMsg;
+    String status;
+    IPLocationResultEntity result;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/IPLocationResultEntity.java b/src/com/yc/sdk/huaweimap/entity/IPLocationResultEntity.java
new file mode 100644
index 0000000..747b9bb
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/IPLocationResultEntity.java
@@ -0,0 +1,10 @@
+package com.yc.sdk.huaweimap.entity;
+
+import com.yc.sdk.map.entity.LocationEntity;
+import lombok.Data;
+
+@Data
+public class IPLocationResultEntity extends LocationEntity {
+    String radius;//鍩庡競鍗婂緞
+
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/OpeningHoursEntity.java b/src/com/yc/sdk/huaweimap/entity/OpeningHoursEntity.java
new file mode 100644
index 0000000..f95a574
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/OpeningHoursEntity.java
@@ -0,0 +1,11 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OpeningHoursEntity {
+    List<String> texts;
+    List<String> periods;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/PeriodEntity.java b/src/com/yc/sdk/huaweimap/entity/PeriodEntity.java
new file mode 100644
index 0000000..3eb445d
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/PeriodEntity.java
@@ -0,0 +1,9 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class PeriodEntity {
+    TimeOfWeekEntity open;
+    TimeOfWeekEntity close;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/PoiEntity.java b/src/com/yc/sdk/huaweimap/entity/PoiEntity.java
new file mode 100644
index 0000000..dd0fb32
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/PoiEntity.java
@@ -0,0 +1,22 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PoiEntity {
+    List<String> poiTypes;
+    List<String> hwPoiTypes;
+    String phone;
+    String internationalPhone;
+    Double rating;
+    String websiteUrl;
+    OpeningHoursEntity openingHours;
+    List<String> photoUrls;
+    Integer priceLevel;
+    String businessStatus;
+    List<ChildrenNodeEntity> childrenNodes;
+    String icon;
+    CommentEntity comments;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/ReverseGeocodeRequestEntity.java b/src/com/yc/sdk/huaweimap/entity/ReverseGeocodeRequestEntity.java
new file mode 100644
index 0000000..a1b448c
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/ReverseGeocodeRequestEntity.java
@@ -0,0 +1,12 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class ReverseGeocodeRequestEntity {
+    CoordinateEntity location;
+    String language;
+    Integer radius;
+
+    Boolean returnPoi;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/ReverseGeocodeResponseEntity.java b/src/com/yc/sdk/huaweimap/entity/ReverseGeocodeResponseEntity.java
new file mode 100644
index 0000000..cb8ed9f
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/ReverseGeocodeResponseEntity.java
@@ -0,0 +1,13 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReverseGeocodeResponseEntity {
+
+    String returnCode;
+    String returnDesc;
+    List<SiteEntity> sites;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/SiteEntity.java b/src/com/yc/sdk/huaweimap/entity/SiteEntity.java
new file mode 100644
index 0000000..55308f1
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/SiteEntity.java
@@ -0,0 +1,17 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class SiteEntity {
+    String siteId;
+    String name;
+    String formatAddress;
+    Boolean aoiFlag;
+    AddressDetailEntity address;
+    CoordinateEntity location;
+    CoordinateBoundsEntity viewport;
+    Double distance;
+    Integer utcOffset;
+    AutocompletePredictionEntity prediction;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/StarInfoEntity.java b/src/com/yc/sdk/huaweimap/entity/StarInfoEntity.java
new file mode 100644
index 0000000..75ffc54
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/StarInfoEntity.java
@@ -0,0 +1,8 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class StarInfoEntity {
+    String averageRating;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/TimeOfWeekEntity.java b/src/com/yc/sdk/huaweimap/entity/TimeOfWeekEntity.java
new file mode 100644
index 0000000..b4c8a23
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/TimeOfWeekEntity.java
@@ -0,0 +1,9 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class TimeOfWeekEntity {
+    Integer week;
+    String time;
+}
diff --git a/src/com/yc/sdk/huaweimap/entity/WordEntity.java b/src/com/yc/sdk/huaweimap/entity/WordEntity.java
new file mode 100644
index 0000000..e514a78
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/entity/WordEntity.java
@@ -0,0 +1,9 @@
+package com.yc.sdk.huaweimap.entity;
+
+import lombok.Data;
+
+@Data
+public class WordEntity {
+    Integer offset;
+    Integer value;
+}
diff --git a/src/com/yc/sdk/huaweimap/service/HuaWeiMapService.java b/src/com/yc/sdk/huaweimap/service/HuaWeiMapService.java
new file mode 100644
index 0000000..d471375
--- /dev/null
+++ b/src/com/yc/sdk/huaweimap/service/HuaWeiMapService.java
@@ -0,0 +1,104 @@
+package com.yc.sdk.huaweimap.service;
+
+import com.alibaba.fastjson.JSON;
+import com.yc.entity.AttachmentConfig;
+import com.yc.exception.ApplicationException;
+import com.yc.sdk.huaweimap.entity.*;
+import com.yc.sdk.map.entity.LocationEntity;
+import com.yc.sdk.map.service.AbstractMapService;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鍗庝负鍦板浘鏈嶅姟
+ */
+@Service
+public class HuaWeiMapService implements AbstractMapService {
+
+    private static String KEY = AttachmentConfig.get("HuaWeiWebServiceKey");
+    private static String GEOCODEURL = "https://siteapi.cloud.huawei.com/mapApi/v1/siteService/reverseGeocode";
+    private static String IPURL = "https://openlocation-drcn.platform.dbankcloud.com/networklocation/v1/ipLocation";
+
+    @Override
+    public LocationEntity getIPLocation(String ip) throws Exception {
+        HttpClient httpClient = HttpClients.createDefault();
+        HttpPost post = new HttpPost(IPURL);
+        post.setHeader("Content-Type", "application/json;charset=utf-8");
+        post.setHeader("x-forwarded-for", ip);
+        post.setHeader("Authorization", "Bearer " + KEY);
+        String data = "{\"ip\":\"" + ip + "\"}";
+        StringEntity myEntity = new StringEntity(data, "UTF-8");
+        myEntity.setContentType("application/json;charset=UTF-8");
+        post.setEntity(myEntity);
+        HttpResponse response = httpClient.execute(post);
+        int statusCode = response.getStatusLine().getStatusCode();
+        if (statusCode != HttpStatus.SC_OK) {
+            throw new ApplicationException("鑾峰彇鍝嶅簲澶辫触锛岃閲嶆柊鎻愪氦-" + response.getStatusLine().getStatusCode() + "[" + response.getStatusLine().getReasonPhrase() + "]");
+        } else {
+            IPLocationResponseEntity responseEntity = JSON.parseObject(EntityUtils.toString(response.getEntity(), "UTF-8"), IPLocationResponseEntity.class);
+            if ("0".equalsIgnoreCase(responseEntity.getStatus())) {
+                //鎴愬姛
+                return responseEntity.getResult();
+            } else {
+                throw new ApplicationException(responseEntity.getErrorMsg());
+            }
+        }
+    }
+
+    @Override
+    public LocationEntity reverseGeocode(String longitude, String latitude, String ip) {
+        LocationEntity locationEntity = null;
+        try {
+            if (StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude)) {
+                HttpClient httpClient = HttpClients.createDefault();
+                HttpPost post = new HttpPost(GEOCODEURL);
+                post.setHeader("Content-Type", "application/json;charset=utf-8");
+                post.setHeader("Authorization", "Bearer " + KEY);
+                ReverseGeocodeRequestEntity request = new ReverseGeocodeRequestEntity();
+                CoordinateEntity location = new CoordinateEntity();
+                location.setLat(Double.parseDouble(latitude));
+                location.setLng(Double.parseDouble(longitude));
+                request.setRadius(10);
+                request.setLocation(location);
+                StringEntity myEntity = new StringEntity(JSON.toJSONString(request), "UTF-8");
+                myEntity.setContentType("application/json;charset=UTF-8");
+                post.setEntity(myEntity);
+                HttpResponse response = httpClient.execute(post);
+                int statusCode = response.getStatusLine().getStatusCode();
+                if (statusCode != HttpStatus.SC_OK) {
+                    throw new ApplicationException("鑾峰彇鍝嶅簲澶辫触锛岃閲嶆柊鎻愪氦-" + response.getStatusLine().getStatusCode() + "[" + response.getStatusLine().getReasonPhrase() + "]");
+                } else {
+                    ReverseGeocodeResponseEntity responseEntity = JSON.parseObject(EntityUtils.toString(response.getEntity(), "UTF-8"), ReverseGeocodeResponseEntity.class);
+                    if ("0".equalsIgnoreCase(responseEntity.getReturnCode())) {
+                        //鎴愬姛
+                        SiteEntity siteEntity = responseEntity.getSites().get(0);
+                        AddressDetailEntity address = siteEntity.getAddress();
+                        locationEntity = new LocationEntity();
+                        locationEntity.setCountryName(address.getCountry());//鍥藉
+                        locationEntity.setProvinceName(address.getAdminArea());//鐪�
+                        locationEntity.setCityName(address.getCity());//甯�
+                        locationEntity.setSubLocality(address.getSubLocality());//鍖�
+                        locationEntity.setThoroughfare(address.getThoroughfare());//琛楅亾
+                        return locationEntity;
+                    } else {
+                        throw new ApplicationException(responseEntity.getReturnDesc());
+                    }
+                }
+            } else {
+                if (StringUtils.isNotBlank(ip)) {
+                    locationEntity = getIPLocation(ip);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return locationEntity;
+    }
+}
diff --git a/src/com/yc/sdk/map/entity/LocationEntity.java b/src/com/yc/sdk/map/entity/LocationEntity.java
new file mode 100644
index 0000000..38af4a4
--- /dev/null
+++ b/src/com/yc/sdk/map/entity/LocationEntity.java
@@ -0,0 +1,21 @@
+package com.yc.sdk.map.entity;
+
+import lombok.Data;
+
+/**
+ * IP鍦板潃瀹氫綅淇℃伅
+ */
+@Data
+public class LocationEntity {
+    String ip;//瀹氫綅IP
+    String countryName;//鍥藉鍚嶇О
+    String countryCode;//鍥藉浠g爜
+    String provinceName;//鐪佷唤鍚嶇О锛堜腑鍥藉尯锛�
+    String provinceCode;//鐪佷唤缂栫爜锛堜腑鍥藉尯锛�
+    String cityName;//鍩庡競鍚嶇О
+    String cityCode;//鍩庡競缂栫爜
+    String latitude;//鍩庡競涓績绾害
+    String longitude;//鍩庡競涓績缁忓害
+    String subLocality;//鍖�
+    String thoroughfare;//琛楅亾
+}
diff --git a/src/com/yc/sdk/map/service/AbstractMapService.java b/src/com/yc/sdk/map/service/AbstractMapService.java
new file mode 100644
index 0000000..178d341
--- /dev/null
+++ b/src/com/yc/sdk/map/service/AbstractMapService.java
@@ -0,0 +1,26 @@
+package com.yc.sdk.map.service;
+
+import com.yc.sdk.map.entity.LocationEntity;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鍦板浘鏈嶅姟鎶借薄绫�
+ */
+@Service
+public interface AbstractMapService {
+
+    /**
+     * IP瀹氫綅鏈嶅姟
+     *
+     * @return
+     */
+    LocationEntity getIPLocation(String ip) throws Exception;
+
+    /**
+     * 閫嗗湴鐞嗙紪鐮�
+     *
+     * @return
+     */
+    LocationEntity reverseGeocode(String longitude, String latitude, String ip) throws Exception;
+
+}
diff --git a/src/com/yc/sdk/map/service/MapService.java b/src/com/yc/sdk/map/service/MapService.java
new file mode 100644
index 0000000..cecae01
--- /dev/null
+++ b/src/com/yc/sdk/map/service/MapService.java
@@ -0,0 +1,19 @@
+package com.yc.sdk.map.service;
+
+import com.yc.entity.AttachmentConfig;
+import com.yc.sdk.gaodemap.api.GaoDeMapService;
+import com.yc.sdk.huaweimap.service.HuaWeiMapService;
+
+public class MapService {
+    public static AbstractMapService getMapFactory() {
+        String map_provider = AttachmentConfig.get("map_provider");
+        switch (map_provider) {
+            case "huawei":
+                return new HuaWeiMapService();
+            case "gaode":
+                return new GaoDeMapService();
+            default:
+                return new HuaWeiMapService();
+        }
+    }
+}
diff --git a/src/com/yc/sdk/shopping/action/api/DistributorAddress.java b/src/com/yc/sdk/shopping/action/api/DistributorAddress.java
index 4e98166..fc580cf 100644
--- a/src/com/yc/sdk/shopping/action/api/DistributorAddress.java
+++ b/src/com/yc/sdk/shopping/action/api/DistributorAddress.java
@@ -1,16 +1,5 @@
 package com.yc.sdk.shopping.action.api;
 
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.dao.DataAccessException;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.yc.action.BaseAction;
@@ -18,10 +7,10 @@
 import com.yc.entity.DataSourceEntity;
 import com.yc.multiData.MultiDataSource;
 import com.yc.multiData.SpObserver;
-import com.yc.sdk.gaodemap.action.GdMapServiceInit;
-import com.yc.sdk.gaodemap.api.GdMapService;
 import com.yc.sdk.gaodemap.entity.GdErrorException;
 import com.yc.sdk.gaodemap.entity.RegeoCodeEntity;
+import com.yc.sdk.map.entity.LocationEntity;
+import com.yc.sdk.map.service.MapService;
 import com.yc.sdk.miniapp.entity.MaCompanyEntity;
 import com.yc.sdk.shopping.entity.DepartmentEntity;
 import com.yc.sdk.shopping.entity.RegionEntity;
@@ -33,6 +22,16 @@
 import com.yc.sdk.shopping.util.SettingKey;
 import com.yc.sdk.weixincp.service.ERPUserIfc;
 import com.yc.utils.SessionKey;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.util.List;
 
 @Controller
 public class DistributorAddress extends BaseAction{
@@ -172,38 +171,26 @@
 		
 		try {
 			if (city ==null || "".equals(city)) {
-				if (gaoDeWebServiceKey==null || "".equals(gaoDeWebServiceKey)) {
-					errJson.addProperty("warning","娌℃湁璁剧疆楂樺痉鍦板浘Web鏈嶅姟鎵�闇�鐨刱ey锛岃鍦� attachment.config.properties 鏂囦欢涓缃富閿负 GaoDeWebServiceKey 鐨勯敭鍊�");
-					json.add("error", errJson);
-					this.printJson(response, json.toString());
-					return;
+				if (StringUtils.isBlank(longitude) && StringUtils.isBlank(latitude)) {
+					if (settingEntity.getLongitude() != null && !"".equals(settingEntity.getLongitude()) &&
+							settingEntity.getLatitude() != null && !"".equals(settingEntity.getLatitude())) {
+						longitude = settingEntity.getLongitude();
+						latitude = settingEntity.getLatitude();
+					} else if (maCompanyEntity.getLongitude() != null && !"".equals(maCompanyEntity.getLongitude()) &&
+							maCompanyEntity.getLatitude() != null && !"".equals(maCompanyEntity.getLatitude())) {
+						longitude = maCompanyEntity.getLongitude();
+						latitude = maCompanyEntity.getLatitude();
+					} else {
+						errJson.addProperty("warning", "鐢变簬鐢ㄦ埛鏈巿鏉冨皬绋嬪簭浣跨敤浣嶇疆淇℃伅锛岃鍦� 714001 鎴� 110101 鍔熻兘鍙蜂腑璁剧疆 銆愬湴鐞嗙粡搴︺�戝拰銆愬湴鐞嗙含搴︺��");
+						json.add("error", errJson);
+						this.printJson(response, json.toString());
+						return;
+					}
 				}
-				
-				//浠庨珮寰峰湴鍥惧彇鏁� 
-				GdMapService gdMapService = GdMapServiceInit.getGdMapService(gaoDeWebServiceKey) ;
-				if (longitude != null && ! "".equals(longitude) && latitude != null && !"".equals(latitude)) {
-					regeoCodeEntity = gdMapService.getRegeo(longitude, latitude) ;
-					city = regeoCodeEntity.getCity();
-					province = regeoCodeEntity.getProvince();
-					district = regeoCodeEntity.getDistrict();
-				}else if (settingEntity.getLongitude()!=null&&!"".equals(settingEntity.getLongitude()) &&
-						settingEntity.getLatitude() != null && !"".equals(settingEntity.getLatitude())) {
-					regeoCodeEntity = gdMapService.getRegeo(settingEntity.getLongitude(), settingEntity.getLatitude()) ;
-					city = regeoCodeEntity.getCity();
-					province = regeoCodeEntity.getProvince();
-					district = regeoCodeEntity.getDistrict();
-				}else if (maCompanyEntity.getLongitude()!=null&&!"".equals(maCompanyEntity.getLongitude()) &&
-						maCompanyEntity.getLatitude() != null && !"".equals(maCompanyEntity.getLatitude())){
-					regeoCodeEntity = gdMapService.getRegeo(maCompanyEntity.getLongitude(), maCompanyEntity.getLatitude()) ;
-					city = regeoCodeEntity.getCity();
-					province = regeoCodeEntity.getProvince();
-					district = regeoCodeEntity.getDistrict();
-				}else {
-					errJson.addProperty("warning","鐢变簬鐢ㄦ埛鏈巿鏉冨皬绋嬪簭浣跨敤浣嶇疆淇℃伅锛岃鍦� 714001 鎴� 110101 鍔熻兘鍙蜂腑璁剧疆 銆愬湴鐞嗙粡搴︺�戝拰銆愬湴鐞嗙含搴︺��");
-					json.add("error", errJson);
-					this.printJson(response, json.toString());
-					return;
-				}
+				LocationEntity location = MapService.getMapFactory().reverseGeocode(longitude, latitude, null);
+				city = location.getCityName();
+				province = location.getProvinceName();
+				district = location.getSubLocality();
 			}
 		}catch (GdErrorException e) {
 			e.printStackTrace();

--
Gitblit v1.8.0