Browse Source

laanc 검증 1차안

pull/10/head
지대한 12 months ago
parent
commit
583e77a9db
  1. 8
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancController.java
  2. 54
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java
  3. 8
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancMapper.java
  4. 98
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java
  5. 1
      pav-server/src/main/java/com/palnet/biz/api/external/model/PilotValidRs.java
  6. 12
      pav-server/src/main/java/com/palnet/biz/api/external/service/TsService.java

8
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancController.java

@ -56,13 +56,13 @@ public class BasLaancController {
} catch (CustomException e) {
Map<String, Object> resultMap = new HashMap<String, Object>();
log.error("IGNORE : {}", e);
log.error("IGNORE : ", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
resultMap.put("errorMessage", e.getMessage());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
log.error("IGNORE : ", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
@ -80,13 +80,13 @@ public class BasLaancController {
rs = basLaancService.createFlightPlan(rq);
} catch (CustomException e) {
Map<String, Object> resultMap = new HashMap<String, Object>();
log.error("IGNORE : {}", e);
log.error("IGNORE : ", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
resultMap.put("errorMessage", e.getMessage());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
log.error("IGNORE : ", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));

54
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java

@ -1,11 +1,13 @@
package com.palnet.biz.api.bas.laanc.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.palnet.biz.api.external.model.PilotValidRs;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* packageName : com.palnet.biz.api.bas.flight.model
* fileName : BasFlightPlanErrorRS
@ -23,32 +25,38 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
public class BasLaancValidatedRs {
private String pilotQlfcYn; // 자격여부
private String arcrftInsuranceYn; // 항공기보험여부
private String arcrftDuplicatedYn; // 기체 중복여부
private String planAreaDuplicatdYn; // 비행계획서비행구역 중복여부
private String evaluatedTargetAreaYn; // 평가대상지역여부 - 공역과 겹칠때만
private String flightAreaYn; // 비행가능여부 - 비행가능 "Y"
private boolean isPilotQlfc; // 자격여부
private boolean isArcrftInsurance; // 항공기보험여부
private boolean isArcrftDuplicated; // 기체 중복여부
private boolean isPlanAreaDuplicatd; // 비행계획서비행구역 중복여부
private boolean isEvaluatedTargetArea; // 평가대상지역여부 - 공역과 겹칠때만 true
private boolean isFlightArea; // 비행가능여부 - 비행가능 true
private boolean isArcrftWeight; // 항공기중량여부 - 25kg 이하 true
private boolean isElev; // 고도여부 - 150m 이하 true
private boolean isReport; // 신고 대상 - 상업적이면서 기체중량2kg 이상일경우 - true
private String commercialYn; // 상업적/비상업적 구분 - 비상업 "N"
private String arcrftWeightYn; // 항공기중량여부 - 25kg 이하 "Y"
private String elevYn; // 고도여부 - 150m 이하 "Y"
private String corpRegYn; // 사업자 여부
private List<PilotValidRs> pilotValidRsList; // 자격여부
public boolean isValid() {
return "Y".equals(pilotQlfcYn)
&& "Y".equals(arcrftInsuranceYn)
&& "N".equals(arcrftDuplicatedYn)
&& "N".equals(planAreaDuplicatdYn)
&& "Y".equals(evaluatedTargetAreaYn)
&& "Y".equals(flightAreaYn);
if (isReport) {
return isPilotQlfc
&& isArcrftInsurance
&& !isArcrftDuplicated // 기체 중복여부
&& !isPlanAreaDuplicatd // 비행구역 중복여부
&& isEvaluatedTargetArea // 관제구역여부
&& isFlightArea // 비행가능여부
&& isElev // 150m 이하
&& isArcrftWeight; // 25kg 이하
}
@JsonIgnore
public boolean isValidAirspace() {
return "N".equals(arcrftDuplicatedYn)
&& "N".equals(planAreaDuplicatdYn)
&& "Y".equals(evaluatedTargetAreaYn)
&& "Y".equals(flightAreaYn);
return !isArcrftDuplicated
&& !isPlanAreaDuplicatd
&& isEvaluatedTargetArea
&& isFlightArea
&& isElev // 150m 이하
&& isArcrftWeight; // 25kg 이하
}
}

8
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancMapper.java

@ -1,10 +1,7 @@
package com.palnet.biz.api.bas.laanc.service;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrModel;
import com.palnet.biz.api.bas.laanc.model.BasLaancArcrftModel;
import com.palnet.biz.api.bas.laanc.model.BasLaancAreaCoordModel;
import com.palnet.biz.api.bas.laanc.model.BasLaancAreaModel;
import com.palnet.biz.api.bas.laanc.model.BasLaancPlanRq;
import com.palnet.biz.api.bas.laanc.model.*;
import com.palnet.biz.jpa.entity.*;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
@ -24,7 +21,8 @@ import org.mapstruct.factory.Mappers;
public interface BasLaancMapper {
BasLaancMapper MAPPER = Mappers.getMapper(BasLaancMapper.class);
void mergeToEntity(@MappingTarget FltPlanBas rq1, FltPlanBas rq2);
void merge(@MappingTarget FltPlanBas rq1, FltPlanBas rq2);
void merge(@MappingTarget BasLaancValidatedRs rq1, BasLaancValidatedRs rq2);
@Mapping(source = "updateUserId", target = "updateUserId", ignore = true)
@Mapping(source = "updateDt", target = "updateDt", ignore = true)

98
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java

@ -10,6 +10,8 @@ import com.palnet.biz.api.external.model.PilotValidRq;
import com.palnet.biz.api.external.model.PilotValidRs;
import com.palnet.biz.api.external.service.TsService;
import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.entity.type.ArcrftWghtCd;
import com.palnet.biz.jpa.entity.type.FltType;
import com.palnet.biz.jpa.repository.flt.*;
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository;
import com.palnet.biz.jpa.repository.pty.PtyGroupBasRepository;
@ -66,54 +68,64 @@ public class BasLaancService {
// LAANC 검증
public BasLaancValidatedRs validationLaanc(BasLaancPlanRq rq) {
BasLaancValidatedRs basLaancValidatedRs = new BasLaancValidatedRs();
basLaancValidatedRs.setCommercialYn("COMMERCIAL".equals(rq.getFltType()) ? "Y" : "N");
// basLaancValidatedRs.set
;
// TODO 조종사 자격 및 기체보험 확인
PilotValidRq pilotValidRq = PilotValidRq.builder()
BasLaancValidatedRs rs = new BasLaancValidatedRs();
// 조종사 자격 확인 - 무게가 2kg 초과이거나 상업적일 경우에만 진행
// 상업 여부 - 상업(true)
boolean isCommercial = FltType.COMMERCIAL == rq.getFltType();
// 2kg 초과 기체신고번호
List<String> idntfNumList = rq.getArcrftList().stream().filter(arcrft -> arcrft.getArcrftWghtCd() != ArcrftWghtCd.W250G_LOE && arcrft.getArcrftWghtCd() != ArcrftWghtCd.W250G_W2KG).map(BasLaancArcrftModel::getIdntfNum).collect(Collectors.toList());
// 신고 여부 - 무게가 2kg 초과이거나 상업적일 경우 - true
boolean isReport = !idntfNumList.isEmpty() || isCommercial;
rs.setReport(isReport);
// TODO start - 조종사 자격 및 기체보험 확인
if (isReport) {
List<PilotValidRq> pilotValidRqList = idntfNumList.stream().map(idntfNum -> {
// TODO 기체보험 확인, 조종사 자격 확인
return PilotValidRq.builder()
.pilotci("조종사CI")
.declarationnum("기체신고번호")
.declarationnum(idntfNum)
.build();
}).collect(Collectors.toList());
PilotValidRs pilotValidRs = tsService.callPilotValid(pilotValidRq);
if (pilotValidRs == null) {
basLaancValidatedRs.setPilotQlfcYn("N");
basLaancValidatedRs.setArcrftInsuranceYn("N");
List<PilotValidRs> pilotValidRsList = tsService.callPilotValid(pilotValidRqList);
if (pilotValidRsList.isEmpty()) {
rs.setPilotQlfc(false);
rs.setArcrftInsurance(false);
} else {
basLaancValidatedRs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn());
basLaancValidatedRs.setArcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn());
rs.setPilotValidRsList(pilotValidRsList);
rs.setPilotQlfc(pilotValidRsList.stream().allMatch(pilotValidRs -> "Y".equals(pilotValidRs.getPilotcredentialyn())));
rs.setArcrftInsurance(pilotValidRsList.stream().allMatch(pilotValidRs -> "Y".equals(pilotValidRs.getArcrftinsuranceyn())));
}
}
// TODO end - 조종사 자격 및 기체보험 확인
// BasLaancValidatedRs basLaancValidatedRs = this.validationPlanAreaAndArcrftAndAirspace(rq);
// 고도 150m 이하 - true
boolean isElev = rq.getAreaList().stream().anyMatch(area -> area.getFltElev() != null && Integer.parseInt(area.getFltElev()) <= 150);
rs.setElev(isElev);
// 기체중량 25kg 이하
boolean isArcrftWeight = rq.getArcrftList().stream().anyMatch(arcrft -> arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO && arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO_TEST);
rs.setArcrftWeight(isArcrftWeight);
// // TODO 조종사 자격 및 기체보험 확인
// PilotValidRq pilotValidRq = PilotValidRq.builder()
// .pilotci("조종사CI")
// .declarationnum("기체신고번호")
// .build();
//
// PilotValidRs pilotValidRs = tsService.callPilotValid(pilotValidRq);
// if (pilotValidRs == null) {
// basLaancValidatedRs.setPilotQlfcYn("N");
// basLaancValidatedRs.setArcrftInsuranceYn("N");
// } else {
// basLaancValidatedRs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn());
// basLaancValidatedRs.setArcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn());
// }
// 비행구역 중복여부, 기체 중복여부, 판단구역 - 공역과 겹칠 경우, 비행가능여부
BasLaancValidatedRs validationPlanRs = this.validationPlanAreaAndArcrftAndAirspace(rq);
BasLaancMapper.MAPPER.merge(rs, validationPlanRs);
return basLaancValidatedRs;
return rs;
}
// 비행계획서 등록, 약관 등록, 공문 생성
@Transactional
public BasLaancLastRs createFlightPlan(BasLaancPlanRq rq) {
BasLaancValidatedRs basLaancValidatedRs = this.validationPlanAreaAndArcrftAndAirspace(rq);
BasLaancValidatedRs basLaancValidatedRs = rq.getValidatedRs();
BasLaancValidatedRs validatedRs = this.validationPlanAreaAndArcrftAndAirspace(rq);
BasLaancMapper.MAPPER.merge(basLaancValidatedRs, validatedRs);
// LAANC가 검증된것들만 DB저장
if (!basLaancValidatedRs.isValid()) new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
if (!basLaancValidatedRs.isValid()) throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
// 비행계획서
@ -124,7 +136,7 @@ public class BasLaancService {
FltPlanBas fltPlanBas = BasLaancMapper.MAPPER.modelToPlanEntity(cstmrInfo);
FltPlanBas rqFltPlanBas = BasLaancMapper.MAPPER.modelToPlanEntity(rq);
BasLaancMapper.MAPPER.mergeToEntity(fltPlanBas, rqFltPlanBas);
BasLaancMapper.MAPPER.merge(fltPlanBas, rqFltPlanBas);
fltPlanBas.setDelYn("N");
fltPlanBas.setAprvlYn("Y");
fltPlanBas.setAprvlDt(Instant.now());
@ -187,7 +199,7 @@ public class BasLaancService {
arcrftEntity.setCreateUserId(userId);
arcrftEntity.setUpdateUserId(userId);
// 추가 필드
arcrftEntity.setAcrftInsuranceYn(rq.getValidatedRs().getArcrftInsuranceYn()); // 보험여부
arcrftEntity.setAcrftInsuranceYn(rq.getValidatedRs().isArcrftInsurance() ? "Y" : "N"); // 보험여부
// arcrftEntity.setInsuranceExperiod(null); // 보헌 유효기간
// arcrftEntity.setCorporationNm(null); // 법인명
fltPlanArcrftRepository.save(arcrftEntity);
@ -232,12 +244,10 @@ public class BasLaancService {
// 초기화
BasLaancValidatedRs rs = BasLaancValidatedRs.builder()
.pilotQlfcYn("N")
.arcrftInsuranceYn("N")
.arcrftDuplicatedYn("N")
.planAreaDuplicatdYn("N")
.evaluatedTargetAreaYn("N")
.flightAreaYn("N")
.isPlanAreaDuplicatd(false) // 비행구역 중복여부
.isArcrftDuplicated(false) // 기체 중복여부
.isEvaluatedTargetArea(false) // 판단구역 - 공역과 겹칠 경우
.isFlightArea(false) // 비행가능여부
.build();
@ -303,7 +313,7 @@ public class BasLaancService {
Geometry targetGeometry = areaUtils.coordinateToGeometry(targetBufferCoords);
Geometry effectiveGeometry = areaUtils.coordinateToGeometry(effectiveCoordBufferList);
if (targetGeometry.intersects(effectiveGeometry) && isEqualsFltElev) {
rs.setPlanAreaDuplicatdYn("Y");
rs.setPlanAreaDuplicatd(true);
}
}
}
@ -320,7 +330,7 @@ public class BasLaancService {
)
);
if (isDuplicatedArcrft) {
rs.setArcrftDuplicatedYn("Y");
rs.setArcrftDuplicated(true);
}
}
}
@ -354,7 +364,7 @@ public class BasLaancService {
// 평가 가능 지역 판단
boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(featureInfo);
rs.setEvaluatedTargetAreaYn(duplicatedAirspace ? "Y" : "N");
rs.setEvaluatedTargetArea(duplicatedAirspace);
// 비행 가능 지역 판단
// if (duplicatedAirspace) {
@ -366,7 +376,7 @@ public class BasLaancService {
// 비행 가능 지역 판단
boolean validLaancAirspace = airspaceUtils.isValidLaancAirspace(featureInfo);
rs.setFlightAreaYn(validLaancAirspace ? "Y" : "N");
rs.setFlightArea(validLaancAirspace);
}
return rs;

1
pav-server/src/main/java/com/palnet/biz/api/external/model/PilotValidRs.java vendored

@ -27,4 +27,5 @@ public class PilotValidRs {
private String arcrftinsuranceyn; // 기체보험가입여부
private String arcrftdeclaration; // 기체신고여부
private String corpregyn; // 사업자유무
private PilotValidRq rq;
}

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

@ -6,6 +6,9 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* packageName : com.palnet.biz.api.external.service
* fileName : TsService
@ -22,13 +25,15 @@ import org.springframework.stereotype.Service;
@Service
public class TsService {
public PilotValidRs callPilotValid(PilotValidRq rq) {
public List<PilotValidRs> callPilotValid(List<PilotValidRq> rqList) {
// if(rq.getPilotci() == null || rq.getDeclarationnum() == null) {
// return null;
// }
// TODO: call pilot valid api
// RS 임시코드 - 추후 조건에 따른 TRUE/FALSE 처리 필요
List<PilotValidRs> rsList = new ArrayList<>();
for (PilotValidRq rq : rqList) {
PilotValidRs pilotValidRs = new PilotValidRs();
pilotValidRs.setRspCode("200");
pilotValidRs.setRspMessage("success");
@ -36,6 +41,9 @@ public class TsService {
pilotValidRs.setArcrftinsuranceyn("Y");
pilotValidRs.setArcrftdeclaration("Y");
pilotValidRs.setCorpregyn("Y");
return pilotValidRs;
pilotValidRs.setRq(rq);
rsList.add(pilotValidRs);
}
return rsList;
}
}

Loading…
Cancel
Save