Skip to content

Commit 81fa6ec

Browse files
committed
feat: cluster dist 별 정렬
1 parent 5060553 commit 81fa6ec

File tree

6 files changed

+40
-16
lines changed

6 files changed

+40
-16
lines changed

workspace/server/src/main/java/org/hellokicktty/server/controller/KickboardController.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.RequiredArgsConstructor;
44
import org.hellokicktty.server.domain.Cluster;
5+
import org.hellokicktty.server.domain.Coordinate;
56
import org.hellokicktty.server.domain.Kickboard;
67
import org.hellokicktty.server.dto.KickboardListResponseDto;
78
import org.hellokicktty.server.dto.KickboardResponseDto;
@@ -10,7 +11,9 @@
1011
import org.slf4j.LoggerFactory;
1112
import org.springframework.web.bind.annotation.*;
1213

14+
import java.util.Comparator;
1315
import java.util.List;
16+
import java.util.stream.Collectors;
1417

1518
import static org.hellokicktty.server.service.ClusterService.*;
1619

@@ -26,7 +29,9 @@ public class KickboardController {
2629
KickboardListResponseDto findKickboards(Double lat, Double lng) {
2730

2831
List<Kickboard> kickboardList = kickboardService.findKickboardsInOrder(lat, lng);
29-
List<Cluster> clusters = clusterKickboards(kickboardList);
32+
List<Cluster> clusters = clusterKickboards(kickboardList, lat, lng);
33+
34+
3035
Double distance = getShortestDistance(clusters);
3136

3237
return new KickboardListResponseDto(distance, clusters, kickboardList);

workspace/server/src/main/java/org/hellokicktty/server/controller/RecommendController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class RecommendController {
1919

2020
Logger log = LoggerFactory.getLogger(Logger.class);
2121
private final KickboardService kickboardService;
22-
private final int LEAST_CLUSTER_NUMBER = 4;
22+
private final int MAX_CLUSTER_NUMBER = 4;
2323

2424
@GetMapping("/recommend")
2525
public RecommendResponseDto recommendClustersByKickboardId(Long id) {
@@ -28,8 +28,8 @@ public RecommendResponseDto recommendClustersByKickboardId(Long id) {
2828
if (kickboard == null) return new RecommendResponseDto();
2929

3030
List<Kickboard> kickboardList = kickboardService.findKickboardsInOrder(kickboard.getLat(), kickboard.getLng());
31-
List<Cluster> clusters = ClusterService.clusterKickboards(kickboardList);
32-
clusters.subList(0, Math.min(LEAST_CLUSTER_NUMBER, clusters.size()));
31+
List<Cluster> clusters = ClusterService.clusterKickboards(kickboardList, kickboard.getLat(), kickboard.getLng());
32+
clusters = clusters.subList(0, Math.min(MAX_CLUSTER_NUMBER, clusters.size()));
3333

3434
return new RecommendResponseDto(clusters);
3535
}

workspace/server/src/main/java/org/hellokicktty/server/controller/UpdateController.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;
99
import org.springframework.web.bind.annotation.PostMapping;
10+
import org.springframework.web.bind.annotation.RequestBody;
1011
import org.springframework.web.bind.annotation.RestController;
1112

1213
import java.util.List;
@@ -19,7 +20,8 @@ public class UpdateController {
1920
private final KickboardService kickboardService;
2021

2122
@PostMapping("/update")
22-
public void updateKickboards(UpdateRequestDto dto) {
23+
public void updateKickboards(@RequestBody UpdateRequestDto dto) {
24+
2325
List<Kickboard> kickboardList = dto.getKickboards();
2426
for (Kickboard k : kickboardList) {
2527
kickboardService.updateKickboard(k);

workspace/server/src/main/java/org/hellokicktty/server/repository/JpaKickboardRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public Long save(Kickboard kickboard) {
2424
return kickboard.getId();
2525
}
2626

27+
@Transactional
2728
public Long update(Kickboard k) {
2829
Kickboard kickboard = em.find(Kickboard.class, k.getId());
2930
kickboard.update(k.getCluster_id(), k.getDanger(), k.getBorder());

workspace/server/src/main/java/org/hellokicktty/server/service/ClusterService.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
import org.hellokicktty.server.domain.Kickboard;
77
import org.springframework.stereotype.Service;
88

9-
import java.util.ArrayList;
10-
import java.util.List;
11-
import java.util.Map;
12-
import java.util.TreeMap;
9+
import java.util.*;
10+
import java.util.stream.Collectors;
1311

1412
@Service
1513
@RequiredArgsConstructor
@@ -18,9 +16,9 @@ public class ClusterService {
1816

1917
// == utils ==
2018

21-
public static List<Cluster> clusterKickboards(List<Kickboard> kickboardList) {
19+
public static List<Cluster> clusterKickboards(List<Kickboard> kickboardList, Double lat, Double lng) {
2220

23-
Map<Long, Cluster> clusterMap = new TreeMap<>();
21+
Map<Long, Cluster> clusterMap = new HashMap<>();
2422
for (Kickboard kickboard : kickboardList) {
2523
if (kickboard.getBorder()) {
2624
Long cluster_id = kickboard.getCluster_id();
@@ -38,8 +36,27 @@ public static List<Cluster> clusterKickboards(List<Kickboard> kickboardList) {
3836
List<Coordinate> borders = cluster.getBorders();
3937
Coordinate center = getCenter(borders);
4038
cluster.setCenter(center);
39+
40+
if (lat == null || lng == null) {
41+
cluster.setDistance(-1d);
42+
continue;
43+
}
44+
double dist = 1e9d;
45+
46+
for (Coordinate border : borders) {
47+
Double delta = KickboardService.getCoordinateDelta(new Coordinate(lat, lng), border);
48+
delta = KickboardService.coordinateToMeter(delta);
49+
dist = Math.min(dist, delta);
50+
}
51+
cluster.setDistance(dist);
4152
}
42-
return new ArrayList<>(clusterMap.values());
53+
if (lat == null || lng == null) return clusterList;
54+
55+
clusterList = clusterList.stream()
56+
.sorted(Comparator.comparingDouble(Cluster::getDistance))
57+
.collect(Collectors.toList());
58+
59+
return clusterList;
4360
}
4461

4562
public static Coordinate getCenter(List<Coordinate> borders) {

workspace/server/src/main/java/org/hellokicktty/server/service/KickboardService.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class KickboardService {
2929

3030
public static double CLUSTER_COORDINATE_RANGE = 0.00001 * CLUSTER_METER_RANGE; // degree
3131

32-
private final String URL = "http://localhost:8081/cluster"; // AI Server Request End-Point
32+
private final String URL = "http://localhost:8001/cluster"; // AI Server Request End-Point
3333

3434
@PostConstruct
3535
public void init() {
@@ -150,9 +150,8 @@ public static Double getCoordinateDelta(Coordinate u, Coordinate v) {
150150
return Math.sqrt(Math.pow(dLat, 2) + Math.pow(dLng, 2));
151151
}
152152

153-
public static Double convertCtoM(Double coordinateDelta) {
154-
return coordinateDelta * 0.00001;
153+
public static Double coordinateToMeter(Double coordinateDelta) {
154+
return coordinateDelta * 100000;
155155
}
156156

157-
158157
}

0 commit comments

Comments
 (0)