From f4a6203a83689645b0a5f02ed1b2a6b76291f9ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Wed, 29 Nov 2023 16:30:05 +0900 Subject: [PATCH] =?UTF-8?q?TS=20-=20=EB=93=9C=EB=A1=A0=EC=9B=90=EC=8A=A4?= =?UTF-8?q?=ED=83=91=20=EB=B9=84=ED=96=89=EA=B3=84=ED=9A=8D=EC=84=9C=20?= =?UTF-8?q?=EB=B0=9B=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bas/laanc/service/BasLaancService.java | 2 +- .../controller/ExternalLaancController.java | 41 +++++++- .../biz/api/external/model/TsPlanRq.java | 13 +++ .../biz/api/external/service/TsService.java | 33 ++++++- .../java/com/palnet/comn/code/ErrorCode.java | 97 +++++++++++-------- 5 files changed, 134 insertions(+), 52 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java index f95ead21..da933435 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java @@ -1,7 +1,6 @@ package com.palnet.biz.api.bas.laanc.service; import com.google.zxing.WriterException; -import com.itextpdf.io.util.HashCode; import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrModel; import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrTermsModel; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; @@ -693,4 +692,5 @@ public class BasLaancService { return rs; } + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/external/controller/ExternalLaancController.java b/pav-server/src/main/java/com/palnet/biz/api/external/controller/ExternalLaancController.java index 46628122..c752a694 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/external/controller/ExternalLaancController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/external/controller/ExternalLaancController.java @@ -4,6 +4,8 @@ import com.palnet.biz.api.bas.laanc.service.BasLaancService; import com.palnet.biz.api.external.model.TsPlanRq; import com.palnet.biz.api.external.model.TsQrcodeRs; import com.palnet.biz.api.external.service.TsService; +import com.palnet.comn.code.ErrorCode; +import com.palnet.comn.exception.CustomException; import com.palnet.comn.utils.JsonUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -22,7 +24,6 @@ import java.util.Map; @RestController public class ExternalLaancController { - private final BasLaancService basLaancService; private final TsService tsService; /* @@ -41,15 +42,40 @@ public class ExternalLaancController { @PostMapping("/plan/dos") public ResponseEntity createTsFltPlan(@RequestBody String body) { log.info(">>>> /plan/ost body: {}", body); + TsPlanRq tsPlanRq; try { - TsPlanRq tsPlanRq = JsonUtils.fromJson(body, TsPlanRq.class); - } catch (Exception e) { - log.error("IGNORE: ", e); + tsPlanRq = JsonUtils.fromJson(body, TsPlanRq.class); + } catch (Exception e){ + ErrorCode errorCode = ErrorCode.TS_PARAM; Map error = new HashMap<>(); error.put("rspCode", "300"); - error.put("rspMessage", "메시지 규격이 다릅니다."); + error.put("rspMessage", errorCode.message()); return ResponseEntity.status(300).body(error); } + + +// try { +// tsService.createPlanDos(tsPlanRq); +// } catch (CustomException e) { +// log.error("IGNORE: ", e); +// +// ErrorCode errorCode = ErrorCode.fromCode(e.getErrorCode()); +// if (errorCode == null) errorCode = ErrorCode.TS_ETC; +// +// String tsErrorCode = errorCode.code().replaceAll("TS", ""); +// +// Map error = new HashMap<>(); +// error.put("rspCode", tsErrorCode); +// error.put("rspMessage", errorCode.message()); +// +// return ResponseEntity.status(Integer.parseInt(tsErrorCode)).body(error); +// } catch (Exception e) { +// log.error("IGNORE: ", e); +// Map error = new HashMap<>(); +// error.put("rspCode", ErrorCode.TS_ETC.code()); +// error.put("rspMessage", ErrorCode.TS_ETC.message()); +// return ResponseEntity.status(300).body(error); +// } return ResponseEntity.ok().build(); } @@ -61,4 +87,9 @@ public class ExternalLaancController { return ResponseEntity.ok().build(); } + public static void main(String[] args) { + ErrorCode errorCode = ErrorCode.fromCode("TS200"); + System.out.println(errorCode); + } + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/external/model/TsPlanRq.java b/pav-server/src/main/java/com/palnet/biz/api/external/model/TsPlanRq.java index 7be305e6..d2e0a9ca 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/external/model/TsPlanRq.java +++ b/pav-server/src/main/java/com/palnet/biz/api/external/model/TsPlanRq.java @@ -1,5 +1,6 @@ package com.palnet.biz.api.external.model; +import com.palnet.biz.api.bas.laanc.model.BasLaancPlanRq; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -86,4 +87,16 @@ public class TsPlanRq { private String radius; } } + + + + // Laanc RQ로 변형 + public BasLaancPlanRq toBasLaancPlanRq() { + BasLaancPlanRq rq = new BasLaancPlanRq(); + + + + + return rq; + } } diff --git a/pav-server/src/main/java/com/palnet/biz/api/external/service/TsService.java b/pav-server/src/main/java/com/palnet/biz/api/external/service/TsService.java index 923f5b6c..4c2c7d5e 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/external/service/TsService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/external/service/TsService.java @@ -6,10 +6,11 @@ import com.google.zxing.client.j2se.MatrixToImageConfig; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; -import com.palnet.biz.api.external.model.PilotValidRq; -import com.palnet.biz.api.external.model.PilotValidRs; -import com.palnet.biz.api.external.model.TsQrcodeRq; -import com.palnet.biz.api.external.model.TsQrcodeRs; +import com.palnet.biz.api.bas.laanc.model.BasLaancLastRs; +import com.palnet.biz.api.bas.laanc.model.BasLaancPlanRq; +import com.palnet.biz.api.bas.laanc.model.BasLaancValidatedRs; +import com.palnet.biz.api.bas.laanc.service.BasLaancService; +import com.palnet.biz.api.external.model.*; import com.palnet.biz.jpa.entity.ComConfirmBas; import com.palnet.biz.jpa.repository.com.ComConfirmBasRepository; import com.palnet.comn.utils.JsonUtils; @@ -20,6 +21,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientResponseException; import org.springframework.web.util.DefaultUriBuilderFactory; @@ -55,6 +57,7 @@ public class TsService { private final String ACCOUNT_VALIDATE_URI = "/api/account/getValidate"; private final ComConfirmBasRepository comConfirmBasRepository; + private final BasLaancService basLaancService; // 이전 TS 연동 @@ -163,4 +166,26 @@ public class TsService { comConfirmBasRepository.save(entity); } } + + + // TS 비행계획서 + public void createPlanDos(TsPlanRq tsPlanRq) { + // convert + BasLaancPlanRq rq = tsPlanRq.toBasLaancPlanRq(); + + + // 기존 로직대로 수행 + BasLaancValidatedRs basLaancValidatedRs = basLaancService.validationLaanc(rq); + if (!basLaancValidatedRs.isValid()) { + log.info("ts dron one stop validation fail : {}", basLaancValidatedRs); + return; + } + + try { + BasLaancLastRs flightPlan = basLaancService.createFlightPlan(rq); + } catch (Exception e) { + log.error("ts dron one stop create flight plan fail", e); + } + } + } diff --git a/pav-server/src/main/java/com/palnet/comn/code/ErrorCode.java b/pav-server/src/main/java/com/palnet/comn/code/ErrorCode.java index 0e412384..59115320 100644 --- a/pav-server/src/main/java/com/palnet/comn/code/ErrorCode.java +++ b/pav-server/src/main/java/com/palnet/comn/code/ErrorCode.java @@ -1,46 +1,59 @@ package com.palnet.comn.code; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.palnet.biz.jpa.entity.type.FltType; + public enum ErrorCode { - SUCCESS("1", "성공"), - FAIL("-1" , "실패"), - NON_VALID_PARAMETER("VP001", "파라미터가 유효하지 않습니다."), - INTERNAL_SERVER_ERROR("ER500", "내부 시스템 오류"), - NOT_REGIST_ERROR_CODE("ER501", "등록되지 않은 오류 코드"), - DATA_NOTFIND("DT001","데이터 를 찾을수 없습니다."), - DATA_DUPLICATE("DT002","중복 데이터가 존재합니다."), - DATA_NOT_CHANGE("DT003","아직 갱신되지 않았습니다."), - DATA_NO("DT003", "데이터 미존재"), - DB_ERROR("DB001" , "디비 처리중 오류"), - PLAN_DATA_DUPLICATE("FT500", "이미 등록된 비행계획서의 비행구역과 비행시간이 일치합니다.\n비행시간 또는 비행구역을 수정하여 주십시오."), - ARCRFT_DATA_DUPLICATE("FT501", "해당 기체는 다른 비행계획서에서 이미 등록된 기체입니다.\n비행시간 또는 기체 정보를 확인하여 주십시오."), - PLAN_LAANC_NOT_VALID("FT502", "LAANC를 통과하지 못한 비행계획서입니다."), - EXTERNAL_API_ERROR("EA500", "외부서버 호출에 실패하였습니다."), - AUTH_NAUTHORIZED("AU001", "권한이 없습니다."), - - // TS 연동 ERROR CODE - TS_SUCCESS("TS200", "정상적으로 수신되었습니다."), - TS_PARAM("TS300", "메시지 규격이 다릅니다."), // Json 포멧이 틀린 경우 - TS_PARAM_REQUIRED("TS301", "필수 항목이 누락되었습니다."), // 필수 항목이 누락된 경우 - TS_TYPE("TS302", "메시지 타입이 맞지 않습니다."), // 메시지내 파라미터의 타입이 잘못된 경우 - TS_SERVER_ERROR("TS500", "서버 연결이 되지 않습니다."), // call측 network exception 처리 - TS_NT_LAZY("TS501", "네트워크 연결이 지연 됩니다."), // call측 network exception 처리 - TS_AUTH_KEY("TS600", "인증키가 유효하지 않습니다."), - TS_ETC("TS700", "기타 오류"); // 기 정의된 내용이 아닌 기타 오류인 경우 - - private final String code; - - private final String message; - - private ErrorCode(String code, String message) { - this.code = code; - this.message = message; - } - - public String code() { - return code; - } - - public String message() { - return message; - } + SUCCESS("1", "성공"), + FAIL("-1", "실패"), + NON_VALID_PARAMETER("VP001", "파라미터가 유효하지 않습니다."), + INTERNAL_SERVER_ERROR("ER500", "내부 시스템 오류"), + NOT_REGIST_ERROR_CODE("ER501", "등록되지 않은 오류 코드"), + DATA_NOTFIND("DT001", "데이터 를 찾을수 없습니다."), + DATA_DUPLICATE("DT002", "중복 데이터가 존재합니다."), + DATA_NOT_CHANGE("DT003", "아직 갱신되지 않았습니다."), + DATA_NO("DT003", "데이터 미존재"), + DB_ERROR("DB001", "디비 처리중 오류"), + PLAN_DATA_DUPLICATE("FT500", "이미 등록된 비행계획서의 비행구역과 비행시간이 일치합니다.\n비행시간 또는 비행구역을 수정하여 주십시오."), + ARCRFT_DATA_DUPLICATE("FT501", "해당 기체는 다른 비행계획서에서 이미 등록된 기체입니다.\n비행시간 또는 기체 정보를 확인하여 주십시오."), + PLAN_LAANC_NOT_VALID("FT502", "LAANC를 통과하지 못한 비행계획서입니다."), + EXTERNAL_API_ERROR("EA500", "외부서버 호출에 실패하였습니다."), + AUTH_NAUTHORIZED("AU001", "권한이 없습니다."), + + // TS 연동 ERROR CODE + TS_SUCCESS("TS200", "정상적으로 수신되었습니다."), + TS_PARAM("TS300", "메시지 규격이 다릅니다."), // Json 포멧이 틀린 경우 + TS_PARAM_REQUIRED("TS301", "필수 항목이 누락되었습니다."), // 필수 항목이 누락된 경우 + TS_TYPE("TS302", "메시지 타입이 맞지 않습니다."), // 메시지내 파라미터의 타입이 잘못된 경우 + TS_SERVER_ERROR("TS500", "서버 연결이 되지 않습니다."), // call측 network exception 처리 + TS_NT_LAZY("TS501", "네트워크 연결이 지연 됩니다."), // call측 network exception 처리 + TS_AUTH_KEY("TS600", "인증키가 유효하지 않습니다."), + TS_ETC("TS700", "기타 오류"); // 기 정의된 내용이 아닌 기타 오류인 경우 + + private final String code; + + private final String message; + + private ErrorCode(String code, String message) { + this.code = code; + this.message = message; + } + + public String code() { + return code; + } + + public String message() { + return message; + } + + @JsonCreator + public static ErrorCode fromCode(String code) { + for (ErrorCode errorCode : ErrorCode.values()) { + if (errorCode.code().equals(code)) { + return errorCode; + } + } + return null; + } }