Browse Source

TS - 드론원스탑 비행계획서 받기

pull/16/head
지대한 10 months ago
parent
commit
f4a6203a83
  1. 2
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java
  2. 41
      pav-server/src/main/java/com/palnet/biz/api/external/controller/ExternalLaancController.java
  3. 13
      pav-server/src/main/java/com/palnet/biz/api/external/model/TsPlanRq.java
  4. 33
      pav-server/src/main/java/com/palnet/biz/api/external/service/TsService.java
  5. 97
      pav-server/src/main/java/com/palnet/comn/code/ErrorCode.java

2
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;
}
}

41
pav-server/src/main/java/com/palnet/biz/api/external/controller/ExternalLaancController.java vendored

@ -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<String, String> 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<String, String> 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<String, String> 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);
}
}

13
pav-server/src/main/java/com/palnet/biz/api/external/model/TsPlanRq.java vendored

@ -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;
}
}

33
pav-server/src/main/java/com/palnet/biz/api/external/service/TsService.java vendored

@ -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);
}
}
}

97
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;
}
}

Loading…
Cancel
Save