|
|
|
@ -1,15 +1,15 @@
|
|
|
|
|
package kr.co.palnet.kac.socket.core.command.impl; |
|
|
|
|
|
|
|
|
|
import kr.co.palnet.kac.common.model.common.ControlDto; |
|
|
|
|
import kr.co.palnet.kac.common.model.common.DronDto; |
|
|
|
|
import kr.co.palnet.kac.common.model.common.DronHistoryDto; |
|
|
|
|
import kr.co.palnet.kac.common.model.common.DroneDto; |
|
|
|
|
import kr.co.palnet.kac.common.model.common.DroneHistoryDto; |
|
|
|
|
import kr.co.palnet.kac.common.model.common.SimpleControlDto; |
|
|
|
|
import kr.co.palnet.kac.socket.core.command.DronCommand; |
|
|
|
|
import kr.co.palnet.kac.socket.core.model.DronRq; |
|
|
|
|
import kr.co.palnet.kac.socket.core.command.DroneCommand; |
|
|
|
|
import kr.co.palnet.kac.socket.core.model.DroneRq; |
|
|
|
|
import kr.co.palnet.kac.socket.core.storage.ControlStorage; |
|
|
|
|
import kr.co.palnet.kac.socket.core.util.DronUtil; |
|
|
|
|
import kr.co.palnet.kac.socket.service.KacAppService; |
|
|
|
|
import kr.co.palnet.kac.socket.service.WebSocketService; |
|
|
|
|
import kr.co.palnet.kac.util.DroneUtil; |
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
@ -22,7 +22,7 @@ import java.util.List;
|
|
|
|
|
@Slf4j |
|
|
|
|
@RequiredArgsConstructor |
|
|
|
|
@Component |
|
|
|
|
public class SandboxDronCommandImpl implements DronCommand { |
|
|
|
|
public class SandboxDroneCommandImpl implements DroneCommand { |
|
|
|
|
|
|
|
|
|
private final WebSocketService webSocketService; |
|
|
|
|
private final KacAppService kacAppService; |
|
|
|
@ -36,59 +36,59 @@ public class SandboxDronCommandImpl implements DronCommand {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void command(DronRq rq) { |
|
|
|
|
public void command(DroneRq rq) { |
|
|
|
|
log.info(">>>> SandboxCommandServiceImpl <<<<<"); |
|
|
|
|
List<DronDto> resultList = rq.getBody(); |
|
|
|
|
List<DroneDto> resultList = rq.getBody(); |
|
|
|
|
/** 전문 설정 ***/ |
|
|
|
|
final String messageType = "LTEM"; |
|
|
|
|
final String objectType = "DRON"; |
|
|
|
|
|
|
|
|
|
/** 데이터 모델링 **/ |
|
|
|
|
for (DronDto dron : resultList) { |
|
|
|
|
for (DroneDto drone : resultList) { |
|
|
|
|
// 위,경도 좌표가 0으로 들어오는 것은 무시 처리
|
|
|
|
|
if (DronUtil.latlonCheck(dron.getLat(), dron.getLon())) { |
|
|
|
|
if (DroneUtil.checkCoordinates(drone.getLat(), drone.getLon())) { |
|
|
|
|
|
|
|
|
|
dron.setObjectType(objectType); |
|
|
|
|
dron.setMessageType(messageType); |
|
|
|
|
dron.setTerminalId(rq.getTerminalId()); |
|
|
|
|
dron.setRegDt(Instant.now()); |
|
|
|
|
drone.setObjectType(objectType); |
|
|
|
|
drone.setMessageType(messageType); |
|
|
|
|
drone.setTerminalId(rq.getTerminalId()); |
|
|
|
|
drone.setRegDt(Instant.now()); |
|
|
|
|
|
|
|
|
|
// 서버 수신 시간 정보
|
|
|
|
|
dron.setServerRcvDt(Instant.now()); |
|
|
|
|
drone.setServerRcvDt(Instant.now()); |
|
|
|
|
|
|
|
|
|
// 관제 이력 정보
|
|
|
|
|
List<DronHistoryDto> hisList; |
|
|
|
|
List<DroneHistoryDto> hisList; |
|
|
|
|
|
|
|
|
|
DronHistoryDto history = DronHistoryDto.builder() |
|
|
|
|
.objectId(dron.getObjectId()) |
|
|
|
|
.lat(dron.getLat()) |
|
|
|
|
.lon(dron.getLon()) |
|
|
|
|
DroneHistoryDto history = DroneHistoryDto.builder() |
|
|
|
|
.objectId(drone.getObjectId()) |
|
|
|
|
.lat(drone.getLat()) |
|
|
|
|
.lon(drone.getLon()) |
|
|
|
|
.build(); |
|
|
|
|
|
|
|
|
|
if (dron.getPostionHistory() != null) { |
|
|
|
|
hisList = dron.getPostionHistory(); |
|
|
|
|
if (drone.getPostionHistory() != null) { |
|
|
|
|
hisList = drone.getPostionHistory(); |
|
|
|
|
} else { |
|
|
|
|
hisList = new ArrayList<>(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
hisList.add(history); |
|
|
|
|
dron.setPostionHistory(hisList); |
|
|
|
|
drone.setPostionHistory(hisList); |
|
|
|
|
|
|
|
|
|
Long start = System.currentTimeMillis(); |
|
|
|
|
|
|
|
|
|
// STEP 1. 전에 내부 메모리에서 controlId 조회
|
|
|
|
|
ControlStorage controlStorage = ControlStorage.getInstance(); |
|
|
|
|
ControlDto dronCacheDTO = controlStorage.get(dron.getObjectId()); |
|
|
|
|
ControlDto dronCacheDTO = controlStorage.get(drone.getObjectId()); |
|
|
|
|
|
|
|
|
|
if (dronCacheDTO == null) { |
|
|
|
|
// STEP 1. Control ID 발급 -> Application Server Http 통신
|
|
|
|
|
try { |
|
|
|
|
SimpleControlDto simpleControlDto = kacAppService.getControlId(dron.getObjectId()); |
|
|
|
|
SimpleControlDto simpleControlDto = kacAppService.getControlId(drone.getObjectId()); |
|
|
|
|
|
|
|
|
|
dron.setControlId(simpleControlDto.getControlId()); |
|
|
|
|
dron.setTypeCd(simpleControlDto.getTypeCd()); |
|
|
|
|
dron.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); |
|
|
|
|
dron.setControlStartDt(Instant.now()); |
|
|
|
|
drone.setControlId(simpleControlDto.getControlId()); |
|
|
|
|
drone.setTypeCd(simpleControlDto.getTypeCd()); |
|
|
|
|
drone.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); |
|
|
|
|
drone.setControlStartDt(Instant.now()); |
|
|
|
|
|
|
|
|
|
ControlDto controlDto = new ControlDto(); |
|
|
|
|
controlDto.setControlId(simpleControlDto.getControlId()); |
|
|
|
@ -96,20 +96,20 @@ public class SandboxDronCommandImpl implements DronCommand {
|
|
|
|
|
controlDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); |
|
|
|
|
controlDto.setRegTime(System.currentTimeMillis()); |
|
|
|
|
|
|
|
|
|
controlStorage.put(dron.getObjectId(), controlDto); |
|
|
|
|
controlStorage.put(drone.getObjectId(), controlDto); |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
dron.setControlId(dronCacheDTO.getControlId()); |
|
|
|
|
dron.setTypeCd("02"); |
|
|
|
|
dron.setAreaTrnsYn(dronCacheDTO.getAreaTrnsYn()); |
|
|
|
|
dron.setControlWarnCd(dronCacheDTO.isControlWarnCd()); |
|
|
|
|
drone.setControlId(dronCacheDTO.getControlId()); |
|
|
|
|
drone.setTypeCd("02"); |
|
|
|
|
drone.setAreaTrnsYn(dronCacheDTO.getAreaTrnsYn()); |
|
|
|
|
drone.setControlWarnCd(dronCacheDTO.isControlWarnCd()); |
|
|
|
|
dronCacheDTO.setRegTime(System.currentTimeMillis()); |
|
|
|
|
|
|
|
|
|
controlStorage.put(dron.getObjectId(), dronCacheDTO); |
|
|
|
|
controlStorage.put(drone.getObjectId(), dronCacheDTO); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -120,20 +120,20 @@ public class SandboxDronCommandImpl implements DronCommand {
|
|
|
|
|
DronStorage dronStorage = DronStorage.getInstance(); |
|
|
|
|
dronStorage.add(dron); |
|
|
|
|
*/ |
|
|
|
|
kacAppService.sendData(dron); |
|
|
|
|
kacAppService.sendData(drone); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// STEP 3. 화면에 표출할 정보 WebSocket 전달
|
|
|
|
|
try { |
|
|
|
|
webSocketService.sendData(dron); |
|
|
|
|
webSocketService.sendData(drone); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Long end = System.currentTimeMillis(); |
|
|
|
|
log.info(">>> during time : {} - {}", dron.getObjectId(), end - start); |
|
|
|
|
log.info(">>> during time : {} - {}", drone.getObjectId(), end - start); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
log.error("좌표 정보가 존재하지 않습니다."); |