diff --git a/src/main/java/com/palnet/server/command/SocketCommand.java b/src/main/java/com/palnet/server/command/SocketCommand.java index 525289a..2a4845f 100644 --- a/src/main/java/com/palnet/server/command/SocketCommand.java +++ b/src/main/java/com/palnet/server/command/SocketCommand.java @@ -202,6 +202,120 @@ public class SocketCommand { 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 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("좌표 정보가 존재하지 않습니다."); + } + } + } + + public void ANTOSCommand(final SocketPayload payload) { + List> 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 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()); diff --git a/src/main/java/com/palnet/server/handler/SocketHandler.java b/src/main/java/com/palnet/server/handler/SocketHandler.java index e29ccf7..2f0a00a 100644 --- a/src/main/java/com/palnet/server/handler/SocketHandler.java +++ b/src/main/java/com/palnet/server/handler/SocketHandler.java @@ -54,6 +54,9 @@ public class SocketHandler extends SimpleChannelInboundHandler { break; case "ADS-B": command.ADSBCommand(payload); + case "ANTOS": + command.ANTOSCommand(payload); + break; default: break; }