From adf4885c122ba691eafffb4691c13c270f02fa25 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, 21 Aug 2024 18:11:55 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=93=9C=EB=A1=A0=EC=9B=90=EC=8A=A4?= =?UTF-8?q?=ED=86=B1=20=EC=B2=98=EB=A6=AC=EC=9C=A0=ED=98=95=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC(=EA=B4=80=EC=A0=9C=EA=B3=BC,=20=EC=9A=B4=ED=95=AD?= =?UTF-8?q?=EA=B3=BC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http/server/server.http | 25 ++++++-- .../bas/dos/controller/BasDosController.java | 16 ++++- .../biz/api/bas/dos/model/BasDosPlanRq.java | 22 ++++--- .../dos/model/DosBasPlanReviewedProcRq.java | 21 +++++++ .../bas/dos/model/DosBasPlanReviewedRq.java | 6 +- .../api/bas/dos/service/BasDosService.java | 59 +++++++++++++++++-- .../com/palnet/biz/config/WebMvcConfig.java | 30 +++++----- .../CodeToReviewdProcTypeConverter.java | 11 ++++ .../palnet/biz/jpa/entity/DosFltPlanArea.java | 6 ++ .../converter/ReviewedProcTypeConverter.java | 27 +++++++++ .../biz/jpa/entity/type/ReviewedProcType.java | 39 ++++++++++++ .../biz/jpa/entity/type/ReviewedType.java | 20 +++++-- 12 files changed, 242 insertions(+), 40 deletions(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/DosBasPlanReviewedProcRq.java create mode 100644 pav-server/src/main/java/com/palnet/biz/config/convert/CodeToReviewdProcTypeConverter.java create mode 100644 pav-server/src/main/java/com/palnet/biz/jpa/entity/converter/ReviewedProcTypeConverter.java create mode 100644 pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedProcType.java diff --git a/http/server/server.http b/http/server/server.http index 73c14171..9f34b7a9 100644 --- a/http/server/server.http +++ b/http/server/server.http @@ -225,19 +225,36 @@ Authorization: {{accessToken}} GET {{appHost}}/api/bas/dos/plan/download/han-com?searchStDt=2023-06-14&searchEndDt=2025-06-14 Authorization: {{accessToken}} -### dos(드론원스톱) 검토 수정 +### dos(드론원스톱) 검토 수정 - 운항과 PATCH {{appHost}}/api/bas/dos/plan/reviewed Authorization: {{accessToken}} Content-Type: application/json { "planAreaSnoList": [ - 42, - 43 + 11, + 12, + 13 ], - "reviewedType": "R" + "reviewedType": "Q" } + +### dos(드론원스톱) 검토 처리 수정 - 관제과 +PATCH {{appHost}}/api/bas/dos/plan/reviewed/proc +Authorization: {{accessToken}} +Content-Type: application/json + +{ + "planAreaSnoList": [ + 11, + 12, + 13 + ], + "reviewedProcType": "P" +} + + ### 계정정보로 부서 바운더리 가져오기 GET http://localhost:8080/api/comn/coordinate/boundary Authorization: {{accessToken}} \ No newline at end of file diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/BasDosController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/BasDosController.java index 6758c808..08f573f0 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/BasDosController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/BasDosController.java @@ -50,7 +50,7 @@ public class BasDosController { } /** - * 비행계획 검토 + * 비행계획 검토 - 운항과 * * @param rq * @return @@ -64,6 +64,20 @@ public class BasDosController { return ResponseEntity.ok().build(); } + /** + * 비행계획 검토 - 관제과 + * @param rq + * @return + */ + @PatchMapping("/plan/reviewed/proc") + public ResponseEntity updateDosPlanReviewedProc(@RequestBody DosBasPlanReviewedProcRq rq) { + if (rq == null || rq.getPlanAreaSnoList() == null || rq.getPlanAreaSnoList().isEmpty() || rq.getReviewedProcType() == null) { + throw new CustomException(ErrorCode.NON_VALID_PARAMETER); + } + basDosService.updatePlanReviewedProc(rq); + return ResponseEntity.ok().build(); + } + /** * 엑셀 다운로드 * diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java index f37f1ac5..319dffbc 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java @@ -1,5 +1,6 @@ package com.palnet.biz.api.bas.dos.model; +import com.palnet.biz.jpa.entity.type.ReviewedProcType; import com.palnet.biz.jpa.entity.type.ReviewedType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -15,30 +16,33 @@ import java.time.LocalDate; @Builder public class BasDosPlanRq { - @Schema(description = "검색시작일자" , example = "2024-06-01", implementation = LocalDate.class) + @Schema(description = "검색시작일자", example = "2024-06-01", implementation = LocalDate.class) private LocalDate searchStDt; - @Schema(description = "검색끝일자" , example = "2024-06-30", implementation = LocalDate.class) + @Schema(description = "검색끝일자", example = "2024-06-30", implementation = LocalDate.class) private LocalDate searchEndDt; - @Schema(description = "문서번호" , implementation = String.class) + @Schema(description = "문서번호", example = "201118-1010", implementation = String.class) private String applyNo; - @Schema(description = "승인코드", implementation = String.class) + @Schema(description = "승인코드", example = "S", implementation = String.class) private String approvalCd; - @Schema(description = "바운더리" , example = "GIMPO", implementation = String.class) + @Schema(description = "바운더리", example = "GIMPO", implementation = String.class) private String selectZone; - @Schema(description = "시/구 주소" , example = "인천광역시", implementation = String.class) + @Schema(description = "시/구 주소", example = "인천광역시", implementation = String.class) private String ctprvn; - @Schema(description = "시/군/구 주소" , example = "남동구", implementation = String.class) + @Schema(description = "시/군/구 주소", example = "남동구", implementation = String.class) private String sig; - @Schema(description = "상세주소" , example = "만수동", implementation = String.class) + @Schema(description = "상세주소", example = "만수동", implementation = String.class) private String address; - @Schema(description = "검토결과" , example = "W", implementation = ReviewedType.class) + @Schema(description = "검토유형(운항과)", example = "W", implementation = ReviewedType.class) private ReviewedType reviewedType; + + @Schema(description = "검토유형(관제과)", example = "W", implementation = ReviewedProcType.class) + private ReviewedProcType reviewedProcType; } diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/DosBasPlanReviewedProcRq.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/DosBasPlanReviewedProcRq.java new file mode 100644 index 00000000..7c2708a2 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/DosBasPlanReviewedProcRq.java @@ -0,0 +1,21 @@ +package com.palnet.biz.api.bas.dos.model; + +import com.palnet.biz.jpa.entity.type.ReviewedProcType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class DosBasPlanReviewedProcRq { + @Schema(description = "비행구역일련번호", example = "[1, 2, 3]", type = "array") + private List planAreaSnoList; + @Schema(description = "검토처리유형", example = "P", implementation = ReviewedProcType.class) + private ReviewedProcType reviewedProcType; +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/DosBasPlanReviewedRq.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/DosBasPlanReviewedRq.java index ede64977..6759b1c1 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/DosBasPlanReviewedRq.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/DosBasPlanReviewedRq.java @@ -1,6 +1,7 @@ package com.palnet.biz.api.bas.dos.model; import com.palnet.biz.jpa.entity.type.ReviewedType; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -13,8 +14,9 @@ import java.util.List; @AllArgsConstructor @Builder public class DosBasPlanReviewedRq { - // 비행구역일련번호 + @Schema(description = "비행구역일련번호", example = "[1, 2, 3]", type = "array") private List planAreaSnoList; - // 검토 타입 + + @Schema(description = "검토 타입", example = "Q", implementation = ReviewedType.class) private ReviewedType reviewedType; } diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java index 3b2487a4..7a0a44be 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java @@ -16,6 +16,7 @@ import com.palnet.biz.api.external.service.DronOneStopService; import com.palnet.biz.jpa.entity.DosFltPlanArea; import com.palnet.biz.jpa.entity.DosFltPlanBas; import com.palnet.biz.jpa.entity.DosFltPlanResult; +import com.palnet.biz.jpa.entity.type.ReviewedProcType; import com.palnet.biz.jpa.entity.type.ReviewedType; import com.palnet.biz.jpa.repository.dos.*; import com.palnet.comn.code.ErrorCode; @@ -158,10 +159,11 @@ public class BasDosService { if (cptAuthCode != null) { Coordinate centerPoint = new Coordinate(area.getLon(), area.getLat()); if ("DF0002".equals(cptAuthCode)) { - // 검토요청한 건에 대해만 보이도록(reviewedType - REQUEST(요청), REQUEST_CANCEL(요청취소), REQUEST_AGAIN(재요청), REVIEWED(완료)) - if (area.getReviewedType() != ReviewedType.REQUEST && area.getReviewedType() != ReviewedType.REQUEST_AGAIN && area.getReviewedType() != ReviewedType.REQUEST_CANCEL && area.getReviewedType() != ReviewedType.REVIEWED) { + // 관제과와 관련된 내용으로만 필터링 reviewedProcType이 null이 아니라면 표출 + if (area.getReviewedProcType() == null) { continue; } + // 관제과(9.3km) AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); List airspaces = airspaceUtils.getAirspaces(AirspaceUtils.AirspaceType.GIMPO); @@ -207,7 +209,7 @@ public class BasDosService { } } bufferCoordList = coordBuffers.stream().map(coord -> Map.of("lat", coord.y, "lon", coord.x)).collect(Collectors.toList()); - if(area.getReqRadius() != null && area.getReqRadius() > 0) { + if (area.getReqRadius() != null && area.getReqRadius() > 0) { List reqCoordBuffers = areaUtils.createCircle(new Coordinate(area.getLon(), area.getLat()), area.getReqRadius()); reqBufferCoordList = reqCoordBuffers.stream().map(coord -> Map.of("lat", coord.y, "lon", coord.x)).collect(Collectors.toList()); } @@ -400,11 +402,16 @@ public class BasDosService { } /** - * 검토 수정 + * 검토 수정 - 운항과 * * @param rq */ public void updatePlanReviewed(DosBasPlanReviewedRq rq) { + ReviewedType reqReviewedType = rq.getReviewedType(); + if (reqReviewedType == null || reqReviewedType == ReviewedType.CANCEL || reqReviewedType == ReviewedType.PROCESS) { + log.warn("request reviewedType is not valid : {}", reqReviewedType); + throw new CustomException(ErrorCode.NON_VALID_PARAMETER); + } List planAreaSnoList = rq.getPlanAreaSnoList(); List planAreaList = dosFltPlanAreaRepository.findByPlanAreaSnoIn(planAreaSnoList); if (planAreaList == null || planAreaList.isEmpty()) { @@ -413,12 +420,56 @@ public class BasDosService { } for (DosFltPlanArea area : planAreaList) { + if (reqReviewedType == ReviewedType.WAIT || reqReviewedType == ReviewedType.UNNECESSARY) { + area.setReviewedProcType(null); + } else if (reqReviewedType == ReviewedType.REQUEST) { + area.setReviewedProcType(ReviewedProcType.WAIT); + } else if (reqReviewedType == ReviewedType.RE_REQUEST) { + area.setReviewedProcType(ReviewedProcType.RE_REVIEW); + } else if (reqReviewedType == ReviewedType.SUCCESS) { + area.setReviewedProcType(ReviewedProcType.SUCCESS); + } area.setReviewedType(rq.getReviewedType()); } dosFltPlanAreaRepository.saveAll(planAreaList); } + /** + * 검토 수정 - 관제과 + * + * @param rq + */ + public void updatePlanReviewedProc(DosBasPlanReviewedProcRq rq) { + ReviewedProcType reqReviewedProcType = rq.getReviewedProcType(); + if (reqReviewedProcType == null || reqReviewedProcType == ReviewedProcType.SUCCESS || reqReviewedProcType == ReviewedProcType.WAIT || reqReviewedProcType == ReviewedProcType.RE_REVIEW) { + log.warn("request reviewedProcType is not valid : {}", reqReviewedProcType); + throw new CustomException(ErrorCode.NON_VALID_PARAMETER); + } + + List planAreaSnoList = rq.getPlanAreaSnoList(); + List planAreaList = dosFltPlanAreaRepository.findByPlanAreaSnoIn(planAreaSnoList); + if (planAreaList == null || planAreaList.isEmpty()) { + log.warn("update data is not found"); + return; + } + + for (DosFltPlanArea area : planAreaList) { + if(area.getReviewedProcType() == ReviewedProcType.SUCCESS) { + log.warn("reviewedProcType is not changed because status is SUCCESS: area:{}/rq:{}", area.getReviewedProcType(), rq.getReviewedProcType()); + continue; + } + if (reqReviewedProcType == ReviewedProcType.CANCEL) { + area.setReviewedType(ReviewedType.CANCEL); + } else if (reqReviewedProcType == ReviewedProcType.PROCESS) { + area.setReviewedType(ReviewedType.PROCESS); + } + area.setReviewedProcType(rq.getReviewedProcType()); + } + + dosFltPlanAreaRepository.saveAll(planAreaList); + } + /** * Buffer 좌표 추출 * 비행구역의 데이터를 이용하여 주변의 좌표를 추출한다. diff --git a/pav-server/src/main/java/com/palnet/biz/config/WebMvcConfig.java b/pav-server/src/main/java/com/palnet/biz/config/WebMvcConfig.java index 32404c50..294da7ba 100644 --- a/pav-server/src/main/java/com/palnet/biz/config/WebMvcConfig.java +++ b/pav-server/src/main/java/com/palnet/biz/config/WebMvcConfig.java @@ -1,6 +1,7 @@ package com.palnet.biz.config; import com.palnet.biz.config.convert.CodeToFltPurposeBinding; +import com.palnet.biz.config.convert.CodeToReviewdProcTypeConverter; import com.palnet.biz.config.convert.CodeToReviewdTypeConverter; import com.palnet.biz.config.convert.StringToInstantBinding; import org.springframework.context.annotation.Bean; @@ -35,7 +36,7 @@ public class WebMvcConfig implements WebMvcConfigurer{ // public void configureMessageConverters(List> converters) { // converters.add(escapingConverter()); // } - + public void addResourceHandlers(final ResourceHandlerRegistry registry) { /*registry.addResourceHandler("/web/**").addResourceLocations("/web/") .setCacheControl(CacheControl.maxAge(10, TimeUnit.DAYS)).resourceChain(true) @@ -43,22 +44,22 @@ public class WebMvcConfig implements WebMvcConfigurer{ .addResolver(new VersionResourceResolver() .addContentVersionStrategy("/**")) .addTransformer(new AppCacheManifestTransformer());*/ - + // html 가능 하게 설정 /*registry.addResourceHandler("/**").addResourceLocations("/web/hcws/html/");*/ } - + @Bean public ResourceUrlEncodingFilter resourceUrlEncodingFilter() { return new ResourceUrlEncodingFilter(); } - + @Override public void addCorsMappings(CorsRegistry registry) { //임시로 크로스오리진 전체를 품 registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"); } - + // // @Bean // public HttpMessageConverter escapingConverter() { @@ -82,30 +83,31 @@ public class WebMvcConfig implements WebMvcConfigurer{ // // return escapingConverter; // } - - @Override + + @Override public void addFormatters(FormatterRegistry registry) { - // json + // json DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); registrar.setDateFormatter(DateTimeFormatter.ofPattern(dateFormat)); registrar.setDateTimeFormatter(DateTimeFormatter.ofPattern(dateTimeFormat)); registrar.registerFormatters(registry); - registry.addConverter(new StringToInstantBinding()); - registry.addConverter(new CodeToFltPurposeBinding()); - registry.addConverter(new CodeToReviewdTypeConverter()); + registry.addConverter(new StringToInstantBinding()); + registry.addConverter(new CodeToFltPurposeBinding()); + registry.addConverter(new CodeToReviewdTypeConverter()); + registry.addConverter(new CodeToReviewdProcTypeConverter()); /* ISO 타입. registrar.setUseIsoFormat(true); registrar.registerFormatters(registry); */ } - - + + @Override public void addInterceptors(InterceptorRegistry registry) { - + //접근고유ID 체크 Interceptor /*registry.addInterceptor(accsUUIDcheckInterceptor) .addPathPatterns("/sendbox/") diff --git a/pav-server/src/main/java/com/palnet/biz/config/convert/CodeToReviewdProcTypeConverter.java b/pav-server/src/main/java/com/palnet/biz/config/convert/CodeToReviewdProcTypeConverter.java new file mode 100644 index 00000000..188519f5 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/config/convert/CodeToReviewdProcTypeConverter.java @@ -0,0 +1,11 @@ +package com.palnet.biz.config.convert; + +import com.palnet.biz.jpa.entity.type.ReviewedProcType; +import org.springframework.core.convert.converter.Converter; + +public class CodeToReviewdProcTypeConverter implements Converter { + @Override + public ReviewedProcType convert(String s) { + return ReviewedProcType.fromCode(s); + } +} diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/entity/DosFltPlanArea.java b/pav-server/src/main/java/com/palnet/biz/jpa/entity/DosFltPlanArea.java index 50c257c3..d215ad4b 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/entity/DosFltPlanArea.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/entity/DosFltPlanArea.java @@ -1,6 +1,8 @@ package com.palnet.biz.jpa.entity; +import com.palnet.biz.jpa.entity.converter.ReviewedProcTypeConverter; import com.palnet.biz.jpa.entity.converter.ReviewedTypeConverter; +import com.palnet.biz.jpa.entity.type.ReviewedProcType; import com.palnet.biz.jpa.entity.type.ReviewedType; import lombok.AllArgsConstructor; import lombok.Builder; @@ -65,6 +67,10 @@ public class DosFltPlanArea { // 재검토 사유 @Column(name = "REVIEWED_REASON") private String reviewedReason; + // 검토 타입 + @Convert(converter = ReviewedProcTypeConverter.class) + @Column(name = "REVIEWED_PROC_TYPE") + private ReviewedProcType reviewedProcType; // 장애물 제한 표면 @Column(name = "LIMIT_ZONE") private String limitZone; diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/entity/converter/ReviewedProcTypeConverter.java b/pav-server/src/main/java/com/palnet/biz/jpa/entity/converter/ReviewedProcTypeConverter.java new file mode 100644 index 00000000..5040f0e4 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/entity/converter/ReviewedProcTypeConverter.java @@ -0,0 +1,27 @@ +package com.palnet.biz.jpa.entity.converter; + +import com.palnet.biz.jpa.entity.type.ReviewedProcType; +import org.apache.commons.lang3.StringUtils; + +import javax.persistence.AttributeConverter; +import javax.persistence.Converter; +import java.util.Objects; + +@Converter +public class ReviewedProcTypeConverter implements AttributeConverter { + @Override + public String convertToDatabaseColumn(ReviewedProcType attribute) { + if (Objects.isNull(attribute)) { + return null; + } + return attribute.getCode(); + } + + @Override + public ReviewedProcType convertToEntityAttribute(String dbData) { + if (StringUtils.isBlank(dbData)) { + return null; + } + return ReviewedProcType.fromCode(dbData); + } +} diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedProcType.java b/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedProcType.java new file mode 100644 index 00000000..bb11a2b8 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedProcType.java @@ -0,0 +1,39 @@ +package com.palnet.biz.jpa.entity.type; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +public enum ReviewedProcType { + WAIT("W", "대기"), // 검토대기(운항과로 부터 요청) + CANCEL("C", "취소"), // 검토요청취소 + PROCESS("P", "처리"), // 검토처리 + RE_REVIEW("R", "재검토"), // 재검토(운항과로 부터 재요청) + SUCCESS("S", "완료"); // 검토완료(운항과 완료에 의한 변경) + + + private final String code; + @Getter + private final String value; + + @JsonValue + public String getCode() { + return code; + } + + ReviewedProcType(String code, String value) { + this.code = code; + this.value = value; + } + + @JsonCreator + public static ReviewedProcType fromCode(String code) { + for (ReviewedProcType reviewedType : ReviewedProcType.values()) { + if (reviewedType.getCode().equals(code)) { + return reviewedType; + } + } + return null; + } + +} diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedType.java b/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedType.java index 348040c5..d71a3c42 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedType.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedType.java @@ -5,12 +5,20 @@ import com.fasterxml.jackson.annotation.JsonValue; import lombok.Getter; public enum ReviewedType { - REVIEWED("R", "검토완료"), // 검토완료 - 김포공항기준(운항과, 관제과) - WAIT("W", "검토대기"), // 최초 - 대상지역 - UNNECESSARY("U", "검토불필요"), // 최초 - 비대상지역 - REQUEST("Q", "검토요청"), // 검토요청 - 김포공항기준(운항과 > 관제과) - REQUEST_AGAIN("A", "검토재요청"), // 검토재요청 - 김포공항기준(관제과 > 운항과) - REQUEST_CANCEL("C", "검토요청취소"); // 검토요청취소 - 김포공항기준(관제과 > 운항과) +// REVIEWED("R", "검토완료"), // 검토완료 - 김포공항기준(운항과, 관제과) +// WAIT("W", "검토대기"), // 최초 - 대상지역 +// UNNECESSARY("U", "검토불필요"), // 최초 - 비대상지역 +// REQUEST("Q", "검토요청"), // 검토요청 - 김포공항기준(운항과 > 관제과) +// REQUEST_AGAIN("A", "검토재요청"), // 검토재요청 - 김포공항기준(관제과 > 운항과) +// REQUEST_CANCEL("C", "검토요청취소"); // 검토요청취소 - 김포공항기준(관제과 > 운항과) + + WAIT("W", "대기"), // 검토대기 + UNNECESSARY("U", "불필요"), // 검토불필요 + REQUEST("Q", "요청"), // 검토요청(관제과로 요청) + CANCEL("C", "요청취소"), // 검토요청취소(관제과로부터 요청취소) - 관제과에 의한 처리 + PROCESS("P", "요청처리"), // 검토처리(관제과로부터 처리) - 관제과에 의한 처리 + RE_REQUEST("R", "재요청"), // 검토재요청(관제과로 재요청) + SUCCESS("S", "완료"); // 검토완료 private final String code; @Getter