지대한
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