From 1783013e419dcc8d4c1f4829497d7c1dc1f3f9b7 Mon Sep 17 00:00:00 2001 From: yujung7768903 Date: Tue, 12 Nov 2024 21:32:20 +0900 Subject: [PATCH] =?UTF-8?q?fix:=EB=8F=84=EB=B3=B4=20=EA=B2=BD=EB=A1=9C=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=97=90=EB=9F=AC=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/space/response/MoveUserInfo.java | 11 +++-- .../domain/space/response/PathDto.java | 19 +++++++++ .../space/response/TmapWalkPathResponse.java | 37 ++++++++++------- .../domain/space/service/SpaceService.java | 3 +- .../domain/space/service/TmapService.java | 41 ++++++++++--------- 5 files changed, 71 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/moim/backend/domain/space/response/MoveUserInfo.java b/src/main/java/com/moim/backend/domain/space/response/MoveUserInfo.java index ce6997d..0cf2f8e 100644 --- a/src/main/java/com/moim/backend/domain/space/response/MoveUserInfo.java +++ b/src/main/java/com/moim/backend/domain/space/response/MoveUserInfo.java @@ -87,19 +87,18 @@ public static MoveUserInfo createWithCarPath( public static MoveUserInfo createWithWalkPath( Space space, Participation participation, - int totalTime, - double totalDistance, + TmapWalkPathResponse tmapWalkPathResponse, Listpath ) { MoveUserInfo moveUserInfo = new MoveUserInfo(); moveUserInfo.isAdmin = (participation.getUserId() == space.getAdminId()) ? true : false; moveUserInfo.userId = participation.getUserId(); moveUserInfo.userName = participation.getUserName(); - moveUserInfo.transportationType = participation.getTransportation(); - moveUserInfo.totalTime = totalTime; - moveUserInfo.totalDistance = totalDistance; + moveUserInfo.transportationType = TransportationType.WALK; + moveUserInfo.totalTime = tmapWalkPathResponse.getTotalTime(); + moveUserInfo.totalDistance = tmapWalkPathResponse.getTotalDistance(); moveUserInfo.path = path; - moveUserInfo.payment = 0; + moveUserInfo.payment = tmapWalkPathResponse.getPayment(); return moveUserInfo; } } diff --git a/src/main/java/com/moim/backend/domain/space/response/PathDto.java b/src/main/java/com/moim/backend/domain/space/response/PathDto.java index 99c2cf9..a037d97 100644 --- a/src/main/java/com/moim/backend/domain/space/response/PathDto.java +++ b/src/main/java/com/moim/backend/domain/space/response/PathDto.java @@ -6,6 +6,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.Objects; + @Getter @Builder @NoArgsConstructor @@ -17,4 +19,21 @@ public class PathDto { @JsonProperty("y") private Double latitude; + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || obj.getClass() != this.getClass()) { + return false; + } + PathDto comparePath = (PathDto) obj; + return Double.compare(latitude, comparePath.getLatitude()) == 0 + && Double.compare(longitude, comparePath.getLongitude()) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(latitude, longitude); + } } diff --git a/src/main/java/com/moim/backend/domain/space/response/TmapWalkPathResponse.java b/src/main/java/com/moim/backend/domain/space/response/TmapWalkPathResponse.java index 188ad83..b7059c4 100644 --- a/src/main/java/com/moim/backend/domain/space/response/TmapWalkPathResponse.java +++ b/src/main/java/com/moim/backend/domain/space/response/TmapWalkPathResponse.java @@ -9,9 +9,24 @@ @Getter @NoArgsConstructor @AllArgsConstructor -public class TmapWalkPathResponse { +public class TmapWalkPathResponse implements MoveInfoInterface { public List features; + @Override + public int getTotalTime() { + return Math.round(features.get(0).properties.getTotalTime() / 60); + } + + @Override + public Double getTotalDistance() { + return Double.valueOf(features.get(0).properties.getDistance()); + } + + @Override + public int getPayment() { + return 0; + } + @Getter @NoArgsConstructor @AllArgsConstructor @@ -25,7 +40,7 @@ public static class Feature { @AllArgsConstructor public static class Geometry { public String type; - public String coordinates; + public List coordinates; } // Geometry 타입에 따라 시간이나 거리를 넘겨줄 때의 키 값이 달라짐 @@ -33,17 +48,11 @@ public static class Geometry { @NoArgsConstructor @AllArgsConstructor public static class Properties { - private long totalDistance; // 단위: m. Geometry 타입이 "Point"일 때 - private long totalTime; // 단위: 초. Geometry 타입이 "Point"일 때 - private long distance; // 단위: m. Geometry 타입이 "LineString"일 때 - private long time; // 단위: 초. Geometry 타입이 "LineString"일 때 - - public long getTotalTime() { - return totalTime + time; - } - - public long getTotalDistance() { - return totalDistance + distance; - } + // totalDistance는 여러 feature 중 한 개에만 담겨서 옴 + // 가장 첫 번째 feature에 담겨서 오는 듯 하나 항상 그런지는 모름. + private long totalDistance; // 단위: m + private long totalTime; // 단위: 초 + private long distance; // 단위: m + private long time; // 단위: 초 } } diff --git a/src/main/java/com/moim/backend/domain/space/service/SpaceService.java b/src/main/java/com/moim/backend/domain/space/service/SpaceService.java index 86b6e8e..e740e13 100644 --- a/src/main/java/com/moim/backend/domain/space/service/SpaceService.java +++ b/src/main/java/com/moim/backend/domain/space/service/SpaceService.java @@ -513,7 +513,8 @@ private List getMoveUserInfoList( List moveUserInfoList = new ArrayList<>(); for (Participation participation : participationList) { - log.info("participation: {}, ({}, {})", participation.getUserName(), participation.getLatitude(), participation.getLongitude()); + log.info("participation id: {}, name: {}", participation.getParticipationId(), participation.getUserName()); + log.info("start position: ({}, {})", participation.getLatitude(), participation.getLongitude()); moveUserInfoList.add(getMoveUserInfo(bestPlace, space, participation)); } diff --git a/src/main/java/com/moim/backend/domain/space/service/TmapService.java b/src/main/java/com/moim/backend/domain/space/service/TmapService.java index 0474fe4..309456a 100644 --- a/src/main/java/com/moim/backend/domain/space/service/TmapService.java +++ b/src/main/java/com/moim/backend/domain/space/service/TmapService.java @@ -10,7 +10,10 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Optional; +import java.util.Set; @Service public class TmapService { @@ -42,23 +45,18 @@ public MoveUserInfo createMoveUserInfoWithWalkPath( TmapWalkPathResponse tmapWalkPathResponse, BestPlace bestPlace ) { - List path = new ArrayList<>(); - int totalTime = 0; - double totalDistance = 0; - + Set path = new LinkedHashSet<>(); for (TmapWalkPathResponse.Feature feature : tmapWalkPathResponse.getFeatures()) { // path 구성 추가 if ("Point".equals(feature.getGeometry().type)) { - path.add(getPathFromPointOfWalkPath(feature.geometry.coordinates)); + Optional pathFromPointOfWalkPath = getPathFromPointOfWalkPath(feature.geometry.coordinates); + pathFromPointOfWalkPath.ifPresent(p -> path.add(p)); } else if ("LineString".equals(feature.getGeometry().type)) { path.addAll(getPathListFromLineStringOfWalkPath(feature)); } - path.add(new PathDto(bestPlace.getLongitude(), bestPlace.getLatitude())); - // geometry 타입에 따라 totalTime에 값 - totalTime += feature.properties.getTotalTime(); - totalDistance += feature.properties.getTotalDistance(); } - return MoveUserInfo.createWithWalkPath(space, participation, totalTime, totalDistance, path); + path.add(new PathDto(bestPlace.getLongitude(), bestPlace.getLatitude())); + return MoveUserInfo.createWithWalkPath(space, participation, tmapWalkPathResponse, new ArrayList<>(path)); } // 이동 구간이 도보인 경우, 상세 도보 경로를 path list로 변환 @@ -91,18 +89,23 @@ private List getPathFromPassStopList(TmapPublicPathResponse.Leg leg) { private List getPathListFromLineStringOfWalkPath(TmapWalkPathResponse.Feature feature) { List pathList = new ArrayList<>(); - String[] pathStr = feature.geometry.coordinates.replace("[", "").replace("]", "").split(","); - for (String point : pathStr) { - pathList.add(getPathFromPointOfWalkPath(point)); + for (Object coordinate : feature.geometry.coordinates) { + if (coordinate instanceof List) { + Optional pathFromPoint = getPathFromPointOfWalkPath((List) coordinate); + pathFromPoint.ifPresent(p -> pathList.add(p)); + } } return pathList; } - private PathDto getPathFromPointOfWalkPath(String point) { - String[] pathStr = point.replace("[", "").replace("]", "").split(","); - return PathDto.builder() - .longitude(Double.parseDouble(pathStr[0])) - .latitude(Double.parseDouble(pathStr[1])) - .build(); + private Optional getPathFromPointOfWalkPath(List point) { + if (point.get(0) instanceof Double && point.get(1) instanceof Double) { + PathDto path = PathDto.builder() + .longitude(Double.parseDouble(point.get(0).toString())) + .latitude(Double.parseDouble(point.get(1).toString())) + .build(); + return Optional.ofNullable(path); + } + return Optional.empty(); } }