|
|
|
@ -37,7 +37,7 @@ public class SocketCommand {
|
|
|
|
|
* |
|
|
|
|
* @param payload |
|
|
|
|
*/ |
|
|
|
|
public void sandboxCollectionPut(SocketPayload payload) { |
|
|
|
|
public void sandBoxCommand(final SocketPayload payload) { |
|
|
|
|
List<LinkedHashMap<?, ?>> resultList = (ArrayList) payload.getBody(); |
|
|
|
|
|
|
|
|
|
/** 전문 설정 ***/ |
|
|
|
@ -152,4 +152,118 @@ public class SocketCommand {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void ADSBCommand(final SocketPayload payload) { |
|
|
|
|
List<LinkedHashMap<?, ?>> resultList = (ArrayList) payload.getBody(); |
|
|
|
|
|
|
|
|
|
/** 전문 설정 ***/ |
|
|
|
|
final String messageType = "LTEM"; |
|
|
|
|
final String objectType = "DRON"; |
|
|
|
|
|
|
|
|
|
/** 데이터 모델링 **/ |
|
|
|
|
for (LinkedHashMap<?, ?> obj : resultList) { |
|
|
|
|
// 위,경도 좌표가 0으로 들어오는 것은 무시 처리
|
|
|
|
|
if ((Double) obj.get("lat") > 0 && (Double) obj.get("lon") > 0) { |
|
|
|
|
GPModel model = new GPModel(); |
|
|
|
|
|
|
|
|
|
model.setObjectType(objectType); |
|
|
|
|
model.setMessageType(messageType); |
|
|
|
|
model.setObjectId(obj.get("objectId").toString().trim()); |
|
|
|
|
model.setTerminalId(payload.getTerminalId()); |
|
|
|
|
model.setTerminalRcvDt(obj.get("terminalRcvDt").toString().trim()); |
|
|
|
|
model.setSpeedType((String) obj.get("speedType")); |
|
|
|
|
model.setElevType((String) obj.get("elevType")); |
|
|
|
|
model.setDronStatus((String) obj.get("dronStatus")); |
|
|
|
|
|
|
|
|
|
if (obj.get("lat") != null) model.setLat(Double.valueOf(obj.get("lat").toString())); |
|
|
|
|
if (obj.get("lon") != null) model.setLng(Double.valueOf(obj.get("lon").toString())); |
|
|
|
|
if (obj.get("elev") != null) model.setElev(Double.valueOf(obj.get("elev").toString())); |
|
|
|
|
if (obj.get("speed") != null) model.setSpeed(Double.valueOf(obj.get("speed").toString())); |
|
|
|
|
if (obj.get("heading") != null) model.setHeading(Double.valueOf(obj.get("heading").toString())); |
|
|
|
|
|
|
|
|
|
// 서버 수신 시간 정보
|
|
|
|
|
model.setServerRcvDt(DateUtils.getCurrentTime()); |
|
|
|
|
|
|
|
|
|
// 관제 이력 정보
|
|
|
|
|
List<GPHistoryModel> hisList; |
|
|
|
|
|
|
|
|
|
GPHistoryModel history = new GPHistoryModel(); |
|
|
|
|
history.setObjectId(model.getObjectId()); |
|
|
|
|
history.setLat(model.getLat()); |
|
|
|
|
history.setLng(model.getLng()); |
|
|
|
|
|
|
|
|
|
if (model.getPostionHistory() != null) { |
|
|
|
|
hisList = model.getPostionHistory(); |
|
|
|
|
} else { |
|
|
|
|
hisList = new ArrayList<>(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
hisList.add(history); |
|
|
|
|
model.setPostionHistory(hisList); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// STEP 1. 전에 내부 메모리에서 controlId 조회
|
|
|
|
|
ControlCacheModel control = ControlCacheUtils.getControl(model.getObjectId()); |
|
|
|
|
|
|
|
|
|
if (control == null) { |
|
|
|
|
// STEP 1. Control ID 발급 -> Application Server Http 통신
|
|
|
|
|
try { |
|
|
|
|
HttpRequest request = HttpRequest.newBuilder() |
|
|
|
|
.uri(new URI( |
|
|
|
|
env.getProperty("app.host") + "api/ctr/cntrl/id/" + model.getObjectId() |
|
|
|
|
)) |
|
|
|
|
.version(HttpClient.Version.HTTP_2) |
|
|
|
|
.GET() |
|
|
|
|
.build(); |
|
|
|
|
|
|
|
|
|
HttpResponse<String> response = HttpClient |
|
|
|
|
.newHttpClient() |
|
|
|
|
.send(request, HttpResponse.BodyHandlers.ofString()); |
|
|
|
|
|
|
|
|
|
logger.debug("CONTROL ID RESPONSE : {}", response.body()); |
|
|
|
|
|
|
|
|
|
Map body = JsonUtils.fromJson(response.body(), HashMap.class); |
|
|
|
|
|
|
|
|
|
Map data = (Map) body.get("data"); |
|
|
|
|
model.setControlId((String) data.get("controlId")); |
|
|
|
|
model.setTypeCd((String) data.get("typeCd")); |
|
|
|
|
model.setAreaTrnsYn((String) data.get("areaTrnsYn")); |
|
|
|
|
model.setControlStartDt(DateUtils.getCurrentTime()); |
|
|
|
|
|
|
|
|
|
ControlCacheModel ccm = new ControlCacheModel(); |
|
|
|
|
ccm.setControlId((String) data.get("controlId")); |
|
|
|
|
ccm.setTypeCd((String) data.get("typeCd")); |
|
|
|
|
ccm.setAreaTrnsYn((String) data.get("areaTrnsYn")); |
|
|
|
|
ccm.setRegTime(System.currentTimeMillis()); |
|
|
|
|
ControlCacheUtils.setControl(model.getObjectId(),ccm); |
|
|
|
|
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
logger.error("요청한 URL 정보가 잘못되었습니다.", e.getMessage()); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
model.setControlId(control.getControlId()); |
|
|
|
|
model.setTypeCd("02"); |
|
|
|
|
model.setAreaTrnsYn(control.getAreaTrnsYn()); |
|
|
|
|
model.setControlWarnCd(control.isControlWarnCd()); |
|
|
|
|
control.setRegTime(System.currentTimeMillis()); |
|
|
|
|
ControlCacheUtils.setControl(model.getObjectId(),control); |
|
|
|
|
} |
|
|
|
|
// STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리
|
|
|
|
|
|
|
|
|
|
if ("PA".equals(model.getObjectId().substring(0, 2))) { |
|
|
|
|
messageProducer.sendControlHistoryMessage(model); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// STEP 3. 화면에 표출할 정보 WebSocket 전달
|
|
|
|
|
messageProducer.sendControlMessage(model); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
logger.error("좌표 정보가 존재하지 않습니다."); |
|
|
|
|
throw new IllegalArgumentException("좌표 정보가 존재하지 않습니다."); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|