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