diff --git a/online-taxi-public/internal-common/src/main/java/com/internal/contant/AmapConfigConstant.java b/online-taxi-public/internal-common/src/main/java/com/internal/contant/AmapConfigConstant.java new file mode 100644 index 0000000..0df9ca6 --- /dev/null +++ b/online-taxi-public/internal-common/src/main/java/com/internal/contant/AmapConfigConstant.java @@ -0,0 +1,12 @@ +package com.internal.contant; + + +public class AmapConfigConstant { + public static final String STATUS = "status"; + public static final String ROUTE = "route"; + public static final String PATHS = "paths"; + public static final String DISTANCE = "distance"; + public static final String DURATION = "duration"; + + public static final String DIRECTION_URL = "https://restapi.amap.com/v3/direction/driving"; +} diff --git a/online-taxi-public/internal-common/src/main/java/com/internal/response/DriectionResponse.java b/online-taxi-public/internal-common/src/main/java/com/internal/response/DirectionResponse.java similarity index 78% rename from online-taxi-public/internal-common/src/main/java/com/internal/response/DriectionResponse.java rename to online-taxi-public/internal-common/src/main/java/com/internal/response/DirectionResponse.java index 17248a5..6acd8b4 100644 --- a/online-taxi-public/internal-common/src/main/java/com/internal/response/DriectionResponse.java +++ b/online-taxi-public/internal-common/src/main/java/com/internal/response/DirectionResponse.java @@ -3,7 +3,7 @@ package com.internal.response; import lombok.Data; @Data -public class DriectionResponse { +public class DirectionResponse { private Integer distance; diff --git a/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/ServiceMapApplication.java b/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/ServiceMapApplication.java index f4b580e..2e36f7a 100644 --- a/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/ServiceMapApplication.java +++ b/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/ServiceMapApplication.java @@ -3,6 +3,8 @@ package com.taxi.servicemap; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.web.client.RestTemplate; @SpringBootApplication public class ServiceMapApplication { @@ -10,4 +12,9 @@ public class ServiceMapApplication { public static void main(String[] args) { SpringApplication.run(ServiceMapApplication.class); } + + @Bean + public RestTemplate restTemplate(){ + return new RestTemplate(); + } } diff --git a/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/remote/MapDirectionClient.java b/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/remote/MapDirectionClient.java new file mode 100644 index 0000000..62bf850 --- /dev/null +++ b/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/remote/MapDirectionClient.java @@ -0,0 +1,79 @@ +package com.taxi.servicemap.remote; + +import com.internal.contant.AmapConfigConstant; +import com.internal.dto.ResponseResult; +import com.internal.response.DirectionResponse; +import lombok.extern.slf4j.Slf4j; +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.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +@Service +@Slf4j +public class MapDirectionClient { + + @Value("${amap.key}") + private java.lang.String mapKey; + + @Autowired + private RestTemplate restTemplate; + + public DirectionResponse direction(String depLongitude, String depLatitude, + String destLongitude, String destLatitude) { + //组装请求URL + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(AmapConfigConstant.DIRECTION_URL); + stringBuilder.append("?"); + stringBuilder.append("origin=" + depLongitude + "," + depLatitude); + stringBuilder.append("&"); + stringBuilder.append("destination=" + destLongitude + "," + destLatitude); + stringBuilder.append("&output=json"); + stringBuilder.append("&"); + stringBuilder.append("key=" + mapKey); + log.info(stringBuilder.toString()); + //调用高德地图API + ResponseEntity forEntity = + restTemplate.getForEntity(stringBuilder.toString(), String.class); + String directionStr = forEntity.getBody(); + + //解析 + DirectionResponse directionResponse = parseDirectionEntity(directionStr); + return directionResponse; + } + + public DirectionResponse parseDirectionEntity(String directionStr) { + DirectionResponse driectionResponse = new DirectionResponse(); + try { + //最外层 + JSONObject jsonObject = JSONObject.fromObject(directionStr); + + if (jsonObject.has(AmapConfigConstant.STATUS)) { + int status = jsonObject.getInt(AmapConfigConstant.STATUS); + if (1 == status) {//返回成功 + if (jsonObject.has(AmapConfigConstant.ROUTE)) { + JSONObject routeObj = jsonObject.getJSONObject(AmapConfigConstant.ROUTE); + if (routeObj.has(AmapConfigConstant.PATHS)) { + JSONArray pathsArray = routeObj.getJSONArray(AmapConfigConstant.PATHS); + JSONObject pathsObj = pathsArray.getJSONObject(0); + if (pathsObj.has(AmapConfigConstant.DISTANCE)) { + Integer distanceInt = pathsObj.getInt(AmapConfigConstant.DISTANCE); + driectionResponse.setDistance(distanceInt); + } + if (pathsObj.has(AmapConfigConstant.DURATION)) { + Integer durationInt = pathsObj.getInt(AmapConfigConstant.DURATION); + driectionResponse.setDuration(durationInt); + } + } + } + } + } + } catch (Exception ex) { + ex.printStackTrace(); + } + return driectionResponse; + } +} diff --git a/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/service/DirectionSevice.java b/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/service/DirectionSevice.java index 3fe2922..0c71248 100644 --- a/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/service/DirectionSevice.java +++ b/online-taxi-public/service-map/src/main/java/com/taxi/servicemap/service/DirectionSevice.java @@ -1,18 +1,21 @@ package com.taxi.servicemap.service; import com.internal.dto.ResponseResult; -import com.internal.response.DriectionResponse; +import com.internal.response.DirectionResponse; +import com.taxi.servicemap.remote.MapDirectionClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class DirectionSevice { - public ResponseResult driving(String depLongitude, String depLatitude, - String destLongitude, String destLatitude){ + @Autowired + private MapDirectionClient mapDirectionClient; - DriectionResponse driectionResponse= new DriectionResponse(); - driectionResponse.setDistance(123); - driectionResponse.setDuration(2342); + public ResponseResult driving(String depLongitude, String depLatitude, + String destLongitude, String destLatitude) { + DirectionResponse driectionResponse = mapDirectionClient.direction(depLongitude, depLatitude, + destLongitude, destLatitude); return ResponseResult.success(driectionResponse); } } diff --git a/online-taxi-public/service-map/src/main/resources/application.yaml b/online-taxi-public/service-map/src/main/resources/application.yaml index 2aa31f5..53517cf 100644 --- a/online-taxi-public/service-map/src/main/resources/application.yaml +++ b/online-taxi-public/service-map/src/main/resources/application.yaml @@ -1,2 +1,5 @@ server: - port: 8085 \ No newline at end of file + port: 8085 + +amap: + key: 01d85ea8f7db65efc370cfec18ff6397 \ No newline at end of file diff --git a/online-taxi-public/service-map/target/classes/application.yaml b/online-taxi-public/service-map/target/classes/application.yaml index 2aa31f5..53517cf 100644 --- a/online-taxi-public/service-map/target/classes/application.yaml +++ b/online-taxi-public/service-map/target/classes/application.yaml @@ -1,2 +1,5 @@ server: - port: 8085 \ No newline at end of file + port: 8085 + +amap: + key: 01d85ea8f7db65efc370cfec18ff6397 \ No newline at end of file