지대한
7 months ago
5 changed files with 200 additions and 10 deletions
@ -0,0 +1,37 @@ |
|||||||
|
package kr.co.palnet.kac.socket.core.model; |
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty; |
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.Builder; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
@Data |
||||||
|
@NoArgsConstructor |
||||||
|
@AllArgsConstructor |
||||||
|
@Builder |
||||||
|
public class UtmDto { |
||||||
|
@JsonProperty("GPSime") |
||||||
|
private String GPSime; // 시간 yyyyMMddHHmmss
|
||||||
|
@JsonProperty("droneInfo") |
||||||
|
private List<DronInfo> dronInfo; |
||||||
|
|
||||||
|
@Data |
||||||
|
@NoArgsConstructor |
||||||
|
@AllArgsConstructor |
||||||
|
@Builder |
||||||
|
public static class DronInfo { |
||||||
|
@JsonProperty("Id") |
||||||
|
private String id; |
||||||
|
@JsonProperty("Latitude") |
||||||
|
private String latitude; |
||||||
|
@JsonProperty("Longitude") |
||||||
|
private String longitude; |
||||||
|
@JsonProperty("Height") |
||||||
|
private String height; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package kr.co.palnet.kac.socket.service; |
||||||
|
|
||||||
|
import kr.co.palnet.kac.socket.core.model.UtmDto; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.web.client.RestClient; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
@RequiredArgsConstructor |
||||||
|
@Service |
||||||
|
public class ExternalService { |
||||||
|
|
||||||
|
public boolean sendDataToUtm(UtmDto utmDto) { |
||||||
|
|
||||||
|
// 임시 하드코딩
|
||||||
|
final String UTM_HOST = "http://192.168.0.133:9000"; |
||||||
|
final String UTM_REALTIME_URI = "/api/v1/utm"; |
||||||
|
|
||||||
|
RestClient client = RestClient.builder() |
||||||
|
.baseUrl(UTM_HOST) |
||||||
|
.defaultHeader("Content-Type", "application/json") |
||||||
|
.build(); |
||||||
|
|
||||||
|
try { |
||||||
|
|
||||||
|
ResponseEntity<Void> res = client.post() |
||||||
|
.uri(UTM_REALTIME_URI) |
||||||
|
.body(utmDto) |
||||||
|
.retrieve() |
||||||
|
.toEntity(Void.class); |
||||||
|
|
||||||
|
if (res.getStatusCode() == HttpStatus.OK) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
log.warn("fail send to utm. {}", e.getMessage()); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,67 @@ |
|||||||
|
package kr.co.palnet.kac.socket.service; |
||||||
|
|
||||||
|
import kr.co.palnet.kac.common.model.common.DronDto; |
||||||
|
import kr.co.palnet.kac.socket.core.model.UtmDto; |
||||||
|
import kr.co.palnet.kac.socket.core.storage.DronStorage; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.scheduling.annotation.Scheduled; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.time.Instant; |
||||||
|
import java.time.ZoneId; |
||||||
|
import java.time.format.DateTimeFormatter; |
||||||
|
import java.util.List; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
@RequiredArgsConstructor |
||||||
|
@Service |
||||||
|
public class ScheduledService { |
||||||
|
|
||||||
|
private final ExternalService externalService; |
||||||
|
|
||||||
|
@Scheduled(fixedDelay = 1000 * 2) |
||||||
|
public void sendDataToUtm() { |
||||||
|
log.info(">>>> sendDataToUtm <<<<<"); |
||||||
|
DronStorage dronStorage = DronStorage.getInstance(); |
||||||
|
List<DronDto> list = dronStorage.getAllByUtm(); |
||||||
|
|
||||||
|
// 가공
|
||||||
|
List<UtmDto.DronInfo> dronInfoList = list.stream().map(model -> { |
||||||
|
UtmDto.DronInfo dronInfo = UtmDto.DronInfo.builder() |
||||||
|
.id(model.getObjectId()) |
||||||
|
.latitude(model.getLat().toString()) |
||||||
|
.longitude(model.getLon().toString()) |
||||||
|
.height(model.getElev().toString()) |
||||||
|
.build(); |
||||||
|
return dronInfo; |
||||||
|
}).collect(Collectors.toList()); |
||||||
|
|
||||||
|
if (dronInfoList.isEmpty()) return; |
||||||
|
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss") |
||||||
|
.withZone(ZoneId.of("Asia/Seoul")); |
||||||
|
String dateStr = formatter.format(Instant.now()); |
||||||
|
|
||||||
|
UtmDto utmDto = UtmDto.builder() |
||||||
|
.GPSime(dateStr) |
||||||
|
.dronInfo(dronInfoList) |
||||||
|
.build(); |
||||||
|
|
||||||
|
// if (externalService.sendDataToUtm(utmDto)) {
|
||||||
|
// list.forEach(dron -> dron.setSendUtm(true));
|
||||||
|
// }
|
||||||
|
|
||||||
|
// TODO 현재 통신이 안되므로 모두 보낸다는 가정으로 진행
|
||||||
|
list.forEach(dron -> dron.setSendUtm(true)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Scheduled(fixedDelay = 1000 * 30) |
||||||
|
public void removeDron() { |
||||||
|
log.info(">>>> removeDron <<<<<"); |
||||||
|
DronStorage dronStorage = DronStorage.getInstance(); |
||||||
|
dronStorage.removeByCondition(); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue