From 9dcd27c8d8b6715ca5fee1ce7dad33e79a6beb9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Fri, 22 Jul 2022 07:23:47 +0900 Subject: [PATCH 1/7] =?UTF-8?q?=EC=84=A4=EC=A0=95=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20-=20Date=20type=20=EC=9D=BC=EB=B0=98=20?= =?UTF-8?q?=EB=AA=A8=EB=8D=B8=20=ED=8F=AC=EB=A9=A7=ED=8C=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20(YYYY-MM-DD=20HH:mm:ss)=20-=20Swagger=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95(token=20=EA=B8=B0=EC=9E=85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/palnet/biz/config/DateTimeConfig.java | 68 ++++++++++++++++++ .../com/palnet/biz/config/JsonConfig.java | 14 +++- .../com/palnet/biz/config/SwaggerConfig.java | 71 +++++++++++++++++++ 3 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/palnet/biz/config/DateTimeConfig.java create mode 100644 src/main/java/com/palnet/biz/config/SwaggerConfig.java diff --git a/src/main/java/com/palnet/biz/config/DateTimeConfig.java b/src/main/java/com/palnet/biz/config/DateTimeConfig.java new file mode 100644 index 0000000..dc4ad6a --- /dev/null +++ b/src/main/java/com/palnet/biz/config/DateTimeConfig.java @@ -0,0 +1,68 @@ +package com.palnet.biz.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.format.Formatter; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.Locale; + +@Configuration +public class DateTimeConfig { + + private static final String DATE_FORMAT = "yyyy-MM-dd"; + private static final String TIME_FORMAT = "HH:mm:ss"; + private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + +// @Bean +// public Formatter localDateFormatter() { +// return new Formatter() { +// @Override +// public LocalDate parse(String text, Locale locale) { +// return LocalDate.parse(text, DateTimeFormatter.ofPattern("yyyyMMdd", locale)); +// } +// +// @Override +// public String print(LocalDate object, Locale locale) { +// return DateTimeFormatter.ISO_DATE.format(object); +// } +// }; +// } +// +// +// @Bean +// public Formatter localDateTimeFormatter() { +// return new Formatter() { +// @Override +// public LocalDateTime parse(String text, Locale locale) { +// return LocalDateTime.parse(text, DateTimeFormatter.ofPattern("yyyyMMddHHmmss", locale)); +// } +// +// @Override +// public String print(LocalDateTime object, Locale locale) { +// return DateTimeFormatter.ISO_DATE_TIME.format(object); +// } +// }; +// } + + @Bean + public Formatter DateFormatter() { + return new Formatter() { + @Override + public Date parse(String text, Locale locale) throws ParseException { + SimpleDateFormat dt = new SimpleDateFormat(DATE_TIME_FORMAT, locale); + return dt.parse(text); + } + + @Override + public String print(Date object, Locale locale) { + return new SimpleDateFormat(DATE_TIME_FORMAT).format(object); + } + }; + } +} diff --git a/src/main/java/com/palnet/biz/config/JsonConfig.java b/src/main/java/com/palnet/biz/config/JsonConfig.java index 948a017..6f63801 100644 --- a/src/main/java/com/palnet/biz/config/JsonConfig.java +++ b/src/main/java/com/palnet/biz/config/JsonConfig.java @@ -1,6 +1,8 @@ package com.palnet.biz.config; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; @@ -11,6 +13,8 @@ import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import java.time.format.DateTimeFormatter; import java.util.TimeZone; @@ -22,23 +26,31 @@ public class JsonConfig { private static final String timeFormat = "HH:mm:ss"; private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss"; + /* + */ @Bean + @Primary public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { return builder -> { -// builder.timeZone(TimeZone.getTimeZone("UTC")); + builder.timeZone(TimeZone.getTimeZone("UTC")); builder.simpleDateFormat(dateTimeFormat); builder.serializers(new LocalTimeSerializer(DateTimeFormatter.ofPattern(timeFormat))); builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat))); builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat))); + builder.serializationInclusion(JsonInclude.Include.NON_NULL); + builder.serializationInclusion(JsonInclude.Include.NON_EMPTY); builder.deserializers(new LocalTimeDeserializer(DateTimeFormatter.ofPattern(timeFormat))); builder.deserializers(new LocalDateDeserializer(DateTimeFormatter.ofPattern(dateFormat))); builder.deserializers(new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(dateTimeFormat))); + builder.featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS); builder.featuresToDisable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); builder.featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + builder.featuresToDisable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES); }; } + } diff --git a/src/main/java/com/palnet/biz/config/SwaggerConfig.java b/src/main/java/com/palnet/biz/config/SwaggerConfig.java new file mode 100644 index 0000000..6a77d90 --- /dev/null +++ b/src/main/java/com/palnet/biz/config/SwaggerConfig.java @@ -0,0 +1,71 @@ +package com.palnet.biz.config; + +import io.swagger.v3.oas.models.parameters.Parameter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.ApiKey; +import springfox.documentation.service.AuthorizationScope; +import springfox.documentation.service.SecurityReference; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +@Configuration +//@EnableSwagger2 +public class SwaggerConfig { + + + @Bean + public Docket api() { + return new Docket(DocumentationType.OAS_30) // open api spec 3.0 + .apiInfo(new ApiInfoBuilder().version("1.0").title("PAV").build()) + .forCodeGeneration(true).securitySchemes(Arrays.asList(apiKey())) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.any()) + .build() + .apiInfo(apiInfo()) + .directModelSubstitute(Date.class, String.class) + .directModelSubstitute(LocalDate.class, String.class) + .directModelSubstitute(LocalDateTime.class, String.class) + .securityContexts(Arrays.asList(securityContext())) + .securitySchemes(Arrays.asList(apiKey())); + } + + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("PAV API") + .description("----") + .version("1.0") + .build(); + } + + //ApiKey 정의 + private ApiKey apiKey() { + return new ApiKey("Authorization", "Authorization", "header"); + } + + //JWT SecurityContext 구성 + private SecurityContext securityContext() { + return SecurityContext.builder().securityReferences(defaultAuth()).build(); + } + + private List defaultAuth() { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEveryThing"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + return Arrays.asList(new SecurityReference("Authorization", authorizationScopes)); + } +} From 5064ad4d4f211f8501ec7df26bf8e4381b3ac408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Fri, 22 Jul 2022 07:24:34 +0900 Subject: [PATCH 2/7] =?UTF-8?q?entity=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../palnet/biz/jpa/entity/FltPlanArcrft.java | 11 ++++++---- .../palnet/biz/jpa/entity/FltPlanArea.java | 6 +++--- .../biz/jpa/entity/FltPlanAreaCoord.java | 3 ++- .../com/palnet/biz/jpa/entity/FltPlanBas.java | 13 ++++++------ .../palnet/biz/jpa/entity/FltPlanPilot.java | 6 +++--- .../palnet/biz/jpa/entity/PtyCrtfyhpBas.java | 20 +++++-------------- 6 files changed, 27 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/palnet/biz/jpa/entity/FltPlanArcrft.java b/src/main/java/com/palnet/biz/jpa/entity/FltPlanArcrft.java index fa3e808..3539d4a 100644 --- a/src/main/java/com/palnet/biz/jpa/entity/FltPlanArcrft.java +++ b/src/main/java/com/palnet/biz/jpa/entity/FltPlanArcrft.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import javax.persistence.*; -import java.time.LocalDateTime; +import java.util.Date; @Table(name = "FLT_PLAN_ARCRFT") @Entity @@ -23,6 +23,9 @@ public class FltPlanArcrft { @Column(name="ARCRFT_SNO") private Integer arcrftSno; + @Column(name="IDNTF_NUM") + private String idntfNum; + @Column(name="GROUP_NM") private String groupNm; @@ -39,7 +42,7 @@ public class FltPlanArcrft { private String prdctCmpnNm; @Column(name="PRDCT_DATE") - private LocalDateTime prdctDate; + private Date prdctDate; @Column(name="ARCRFT_LNGTH") private double arcrftLngth; @@ -78,13 +81,13 @@ public class FltPlanArcrft { private String createUserId; @Column(name="CREATE_DT") - private LocalDateTime createDt; + private Date createDt; @Column(name="UPDATE_USER_ID") private String updateUserId; @Column(name="update_DT") - private LocalDateTime updateDt; + private Date updateDt; } diff --git a/src/main/java/com/palnet/biz/jpa/entity/FltPlanArea.java b/src/main/java/com/palnet/biz/jpa/entity/FltPlanArea.java index 94e03b8..5c02fa6 100644 --- a/src/main/java/com/palnet/biz/jpa/entity/FltPlanArea.java +++ b/src/main/java/com/palnet/biz/jpa/entity/FltPlanArea.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import javax.persistence.*; -import java.time.LocalDateTime; +import java.util.Date; @Table(name = "FLT_PLAN_AREA") @Entity @@ -36,13 +36,13 @@ public class FltPlanArea { private String createUserId; @Column(name = "CREATE_DT") - private LocalDateTime createDt; + private Date createDt; @Column(name = "UPDATE_USER_ID") private String updateUserId; @Column(name = "UPDATE_DT") - private LocalDateTime updateDt; + private Date updateDt; } diff --git a/src/main/java/com/palnet/biz/jpa/entity/FltPlanAreaCoord.java b/src/main/java/com/palnet/biz/jpa/entity/FltPlanAreaCoord.java index 720b3d8..5457e3b 100644 --- a/src/main/java/com/palnet/biz/jpa/entity/FltPlanAreaCoord.java +++ b/src/main/java/com/palnet/biz/jpa/entity/FltPlanAreaCoord.java @@ -5,6 +5,7 @@ import lombok.Setter; import javax.persistence.*; import java.time.LocalDateTime; +import java.util.Date; @Table(name = "FLT_PLAN_AREA_COORD") @Entity @@ -31,5 +32,5 @@ public class FltPlanAreaCoord { private String createUserId; @Column(name = "CREATE_DT") - private LocalDateTime createDt; + private Date createDt; } diff --git a/src/main/java/com/palnet/biz/jpa/entity/FltPlanBas.java b/src/main/java/com/palnet/biz/jpa/entity/FltPlanBas.java index 72c93e2..1e58ea2 100644 --- a/src/main/java/com/palnet/biz/jpa/entity/FltPlanBas.java +++ b/src/main/java/com/palnet/biz/jpa/entity/FltPlanBas.java @@ -5,6 +5,7 @@ import lombok.Setter; import javax.persistence.*; import java.time.LocalDateTime; +import java.util.Date; @Table(name = "FLT_PLAN_BAS") @Entity @@ -17,8 +18,8 @@ public class FltPlanBas { @Column(name = "PLAN_SNO") private Integer planSno; - @Column(name = "GROUP_SNO") - private Integer groupSno; + @Column(name = "GROUP_ID") + private String groupId; @Column(name = "CSTMR_SNO") private Integer cstmrSno; @@ -45,10 +46,10 @@ public class FltPlanBas { private String zip; @Column(name = "SCH_FLT_ST_DT") - private LocalDateTime schFltStDt; + private Date schFltStDt; @Column(name = "SCH_FLT_END_DT") - private LocalDateTime schFltEndDt; + private Date schFltEndDt; @Column(name = "FLT_PURPOSE") private String fltPurpose; @@ -63,13 +64,13 @@ public class FltPlanBas { private String createUserId; @Column(name = "CREATE_DT") - private LocalDateTime createDt; + private Date createDt; @Column(name = "UPDATE_USER_ID") private String updateUserId; @Column(name = "UPDATE_DT") - private LocalDateTime updateDt; + private Date updateDt; } diff --git a/src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java b/src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java index 2a53005..6753f78 100644 --- a/src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java +++ b/src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import javax.persistence.*; -import java.time.LocalDateTime; +import java.util.Date; @Table(name = "FLT_PLAN_PILOT") @Entity @@ -57,12 +57,12 @@ public class FltPlanPilot { private String createUserId; @Column(name = "CREATE_DT") - private LocalDateTime createDt; + private Date createDt; @Column(name = "UPDATE_USER_ID") private String updateUserId; @Column(name = "UPDATE_DT") - private LocalDateTime updateDt; + private Date updateDt; } diff --git a/src/main/java/com/palnet/biz/jpa/entity/PtyCrtfyhpBas.java b/src/main/java/com/palnet/biz/jpa/entity/PtyCrtfyhpBas.java index 13e6035..490a5cd 100644 --- a/src/main/java/com/palnet/biz/jpa/entity/PtyCrtfyhpBas.java +++ b/src/main/java/com/palnet/biz/jpa/entity/PtyCrtfyhpBas.java @@ -1,21 +1,11 @@ package com.palnet.biz.jpa.entity; -import java.io.Serializable; -import java.time.LocalDateTime; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.NamedQuery; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; - +import lombok.Data; import org.hibernate.annotations.CreationTimestamp; -import lombok.Data; +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; /** @@ -36,7 +26,7 @@ public class PtyCrtfyhpBas implements Serializable { @CreationTimestamp @Column(name="CREATE_DT") - private LocalDateTime createDt; + private Date createDt; @Column(name="CRTFYHP_NO") private String crtfyhpNo; From 04b58aa26d3495f0a5d3e1598ee6bf9ba73b6d14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Fri, 22 Jul 2022 07:25:44 +0900 Subject: [PATCH 3/7] =?UTF-8?q?mapstruct=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 350 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 189 insertions(+), 161 deletions(-) diff --git a/pom.xml b/pom.xml index 07c27cc..f5b45ff 100644 --- a/pom.xml +++ b/pom.xml @@ -1,166 +1,173 @@ - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.5.1 - - - com.palnet - pav-server - 0.0.1-SNAPSHOT - pav-server - Pav Server - - 1.8 - - - - - - org.springframework.cloud - spring-cloud-starter-aws - 2.0.1.RELEASE - - - org.springframework.cloud - spring-cloud-aws-context - 1.2.1.RELEASE - - - org.springframework.cloud - spring-cloud-aws-autoconfigure - 1.2.1.RELEASE - - - io.jsonwebtoken - jjwt - 0.9.1 - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - - io.netty - netty-all - 4.1.9.Final - - - org.bgee.log4jdbc-log4j2 - log4jdbc-log4j2-jdbc4 - 1.16 - - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.5.1 + + + com.palnet + pav-server + 0.0.1-SNAPSHOT + pav-server + Pav Server + + 11 + 1.5.2.Final + + + + + + org.springframework.cloud + spring-cloud-starter-aws + 2.0.1.RELEASE + + + org.springframework.cloud + spring-cloud-aws-context + 1.2.1.RELEASE + + + org.springframework.cloud + spring-cloud-aws-autoconfigure + 1.2.1.RELEASE + + + io.jsonwebtoken + jjwt + 0.9.1 + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-web + + + + io.netty + netty-all + 4.1.9.Final + + + org.bgee.log4jdbc-log4j2 + log4jdbc-log4j2-jdbc4 + 1.16 + + + org.projectlombok lombok - - - ch.qos.logback - logback-classic - - - - org.springframework.boot - spring-boot-starter - - + + + ch.qos.logback + logback-classic + + + + org.springframework.boot + spring-boot-starter + + org.springframework.boot spring-boot-starter-data-jpa - - mysql - mysql-connector-java - runtime - - - org.springframework.boot - spring-boot-starter-jdbc - - - com.h2database - h2 - - - - org.springframework.boot - spring-boot-starter-test - test - - - - com.querydsl - querydsl-apt - - - - com.querydsl - querydsl-jpa - - - - org.apache.httpcomponents - httpclient - - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr353 - - - - - org.apache.commons - commons-lang3 - - - - - - commons-httpclient - commons-httpclient - 3.1 - - - - - com.googlecode.json-simple - json-simple - 1.1.1 - - - - - org.springframework.amqp - spring-rabbit-test - test - - - org.springframework.boot - spring-boot-starter-amqp - - - - - io.springfox - springfox-boot-starter - 3.0.0 - - - - - - - + + mysql + mysql-connector-java + runtime + + + org.springframework.boot + spring-boot-starter-jdbc + + + com.h2database + h2 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + com.querydsl + querydsl-apt + + + + com.querydsl + querydsl-jpa + + + + org.apache.httpcomponents + httpclient + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr353 + + + + + org.apache.commons + commons-lang3 + + + + + + commons-httpclient + commons-httpclient + 3.1 + + + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + + + org.springframework.amqp + spring-rabbit-test + test + + + org.springframework.boot + spring-boot-starter-amqp + + + + + io.springfox + springfox-boot-starter + 3.0.0 + + + + org.mapstruct + mapstruct + ${org.mapstruct.version} + + + + + + + com.mysema.maven apt-maven-plugin 1.1.3 @@ -178,11 +185,32 @@ - - org.springframework.boot - spring-boot-maven-plugin - - - + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 11 + 11 + + + org.projectlombok + lombok + 1.18.20 + + + org.mapstruct + mapstruct-processor + ${org.mapstruct.version} + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + From 3821bf5728bdc9c1a649a4032a1a89a7af56fb29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Fri, 22 Jul 2022 07:27:21 +0900 Subject: [PATCH 4/7] =?UTF-8?q?jackson=20obejctmapper=20build=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=A0=81=EC=9A=A9=20=EC=95=88=EB=90=98=EB=8A=94=20?= =?UTF-8?q?=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?Bean=EC=97=90=20=EB=93=B1=EB=A1=9D=EB=90=9C=20objectmapper=20?= =?UTF-8?q?=EB=8C=80=EC=8B=A0=20static=EC=9C=BC=EB=A1=9C=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EB=8A=94=20objectmapper=20=EA=B6=8C=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/palnet/Application.java | 8 ++++---- src/main/java/com/palnet/comn/utils/JsonUtils.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/palnet/Application.java b/src/main/java/com/palnet/Application.java index 70c54dc..81922b0 100644 --- a/src/main/java/com/palnet/Application.java +++ b/src/main/java/com/palnet/Application.java @@ -14,9 +14,9 @@ public class Application { SpringApplication.run(Application.class, args); } - @Bean - public ObjectMapper objectMapper() { - return new ObjectMapper(); - } +// @Bean +// public ObjectMapper objectMapper() { +// return new ObjectMapper(); +// } } diff --git a/src/main/java/com/palnet/comn/utils/JsonUtils.java b/src/main/java/com/palnet/comn/utils/JsonUtils.java index a7097e4..69ec766 100644 --- a/src/main/java/com/palnet/comn/utils/JsonUtils.java +++ b/src/main/java/com/palnet/comn/utils/JsonUtils.java @@ -12,7 +12,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class JsonUtils { - private static ObjectMapper getObjectMapper() { + public static ObjectMapper getObjectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); return mapper; From 2795f65d500d5a51da4028d5065b6ba11a6f35ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Fri, 22 Jul 2022 07:28:49 +0900 Subject: [PATCH 5/7] =?UTF-8?q?objectmapper=20=EA=B0=80=EC=A0=B8=EC=98=A4?= =?UTF-8?q?=EB=8A=94=EA=B3=B3=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/palnet/biz/message/consumer/MessageConsumer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java b/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java index 0722410..2376047 100644 --- a/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java +++ b/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java @@ -3,6 +3,7 @@ package com.palnet.biz.message.consumer; import com.fasterxml.jackson.databind.ObjectMapper; import com.palnet.biz.message.service.MessageService; import com.palnet.comn.model.GPDatabaseModel; +import com.palnet.comn.utils.JsonUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; @@ -22,7 +23,7 @@ public class MessageConsumer { public MessageConsumer(MessageService messageService, ObjectMapper objectMapper) { this.messageService = messageService; - this.objectMapper = objectMapper; + this.objectMapper = JsonUtils.getObjectMapper(); } @RabbitHandler From 4422c2b47ede0188044faa53d9b0d27ac74d835b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Fri, 22 Jul 2022 07:29:55 +0900 Subject: [PATCH 6/7] =?UTF-8?q?token=EC=97=90=20=EA=B6=8C=ED=95=9C?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/api/acnt/jwt/model/JwtGroupModel.java | 9 +++ .../biz/api/acnt/jwt/model/JwtUserModel.java | 13 ++-- .../biz/api/acnt/jwt/utils/JwtTokenUtil.java | 59 +++++++++++++++---- .../pty/PtyCrtfyhpBasQueryRepository.java | 13 +++- .../pty/PtyCstmrQueryRepository.java | 35 +++++++++-- 5 files changed, 107 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtGroupModel.java diff --git a/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtGroupModel.java b/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtGroupModel.java new file mode 100644 index 0000000..cb5c5f7 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtGroupModel.java @@ -0,0 +1,9 @@ +package com.palnet.biz.api.acnt.jwt.model; + +import lombok.Data; + +@Data +public class JwtGroupModel { + private String groupId; + private String groupAuthCd; +} diff --git a/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java b/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java index 7b36a5c..570b4fd 100644 --- a/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java +++ b/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java @@ -1,13 +1,14 @@ package com.palnet.biz.api.acnt.jwt.model; -import lombok.*; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import javax.persistence.*; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; +import java.util.*; @Entity @Data @@ -34,7 +35,9 @@ public class JwtUserModel implements UserDetails { @Column(name = "CSTMR_STATUS_CD") private String cstmrStatusCd; - + + @Transient + private List group; // 사용자의 권한을 콜렉션 형태로 반환 diff --git a/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java b/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java index e03e71f..7960620 100644 --- a/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java +++ b/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java @@ -1,21 +1,24 @@ package com.palnet.biz.api.acnt.jwt.utils; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.stereotype.Component; - +import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; - import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; @Component @Log4j2 @@ -30,6 +33,8 @@ public class JwtTokenUtil implements Serializable { @Value("${spring.jwt.secret}") private String secret; + @Value("${spring.jwt.prefix}") + private String JWT_PREFIX; //retrieve username from jwt token // jwt token으로부터 username을 획득한다. @@ -66,6 +71,7 @@ public class JwtTokenUtil implements Serializable { Map claims = new HashMap<>(); claims.put("userId", userDetails.getUserId()); claims.put("cstmrSno", userDetails.getCstmrSno()); + claims.put("group", userDetails.getGroup()); return doGenerateToken(claims, userDetails.getUsername()); } @@ -101,4 +107,35 @@ public class JwtTokenUtil implements Serializable { final String username = getUsernameFromToken(token); return (username.equals(userDetails.getUsername()) && !isTokenExpired(token)); } + + public String getUserIdByToken() { + ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest rq = sra.getRequest(); + String token = rq.getHeader("Authorization"); + if(token == null || "".equals(token)) return null; + token = token.substring(JWT_PREFIX.length()).trim(); + String userId = getUsernameFromToken(token); + return userId; + } + public Integer getCstmrSnoByToken() { + ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest rq = sra.getRequest(); + String token = rq.getHeader("Authorization"); + if(token == null || "".equals(token)) return null; + token = token.substring(JWT_PREFIX.length()).trim(); + Claims payload = getAllClaimsFromToken(token); + Integer cstmrSno = payload.get("cstmrSno",Integer.class); + return cstmrSno; + } + + public List getGroupAuthByToken() { + ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest rq = sra.getRequest(); + String token = rq.getHeader("Authorization"); + if(token == null || "".equals(token)) return null; + token = token.substring(JWT_PREFIX.length()).trim(); + Claims payload = getAllClaimsFromToken(token); + List cstmrSno = payload.get("group",List.class); + return cstmrSno; + } } \ No newline at end of file diff --git a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java index efa47fb..faaeb26 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java @@ -9,7 +9,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Repository; -import java.time.LocalDateTime; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Log4j2 @@ -21,11 +22,19 @@ public class PtyCrtfyhpBasQueryRepository{ public List confirmSms(String hpno , String crtfyNo){ QPtyCrtfyhpBas qEntity = QPtyCrtfyhpBas.ptyCrtfyhpBas; + Date now = Calendar.getInstance().getTime(); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MINUTE, -5); + Date prevTime = calendar.getTime(); + BooleanBuilder builder = new BooleanBuilder(); builder.and(qEntity.crtfyhpNo.eq(crtfyNo)); builder.and(qEntity.crtfyhpYn.eq("N")); - builder.and(qEntity.createDt.between(LocalDateTime.now().minusMinutes(5), LocalDateTime.now())); +// builder.and(qEntity.createDt.between(LocalDateTime.now().minusMinutes(5), LocalDateTime.now())); + builder.and(qEntity.createDt.goe(prevTime)); + builder.and(qEntity.createDt.loe(now)); + List entity = query.select(qEntity).from(qEntity) diff --git a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java index 79a4ec2..641c105 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java @@ -1,12 +1,11 @@ package com.palnet.biz.jpa.repository.pty; +import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; +import com.palnet.biz.jpa.entity.*; import org.springframework.stereotype.Repository; import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel; import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; -import com.palnet.biz.jpa.entity.PtyCstmrBas; -import com.palnet.biz.jpa.entity.QPtyCstmrBas; -import com.palnet.biz.jpa.entity.QPtyCstmrDtl; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -14,6 +13,9 @@ import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; +import java.util.ArrayList; +import java.util.List; + @Log4j2 @Repository @RequiredArgsConstructor @@ -72,6 +74,8 @@ public class PtyCstmrQueryRepository{ public JwtUserModel findUserPassword(String userId) { QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas; + QPtyCstmrGroup groupEntity = QPtyCstmrGroup.ptyCstmrGroup; + BooleanBuilder builder = new BooleanBuilder(); builder.and(basEntity.userId.eq(userId)); @@ -79,6 +83,19 @@ public class PtyCstmrQueryRepository{ .from(basEntity) .where(builder) .fetchFirst(); + + List pcgEntityList = null; + if(entity != null){ + BooleanBuilder groupBuilder = new BooleanBuilder(); + groupBuilder.and(groupEntity.cstmrSno.eq(entity.getCstmrSno())); + + pcgEntityList = query.select(groupEntity) + .from(groupEntity) + .where(groupBuilder) + .fetch(); + } + + if(entity != null) { JwtUserModel model = new JwtUserModel(); model.setAuth(entity.getAuthId()); @@ -86,7 +103,17 @@ public class PtyCstmrQueryRepository{ model.setCstmrSno(entity.getCstmrSno()); model.setCstmrStatusCd(entity.getCstmrStatusCd()); model.setUserPswd(entity.getUserPswd()); - + if(pcgEntityList != null && !pcgEntityList.isEmpty()){ + List groupModelList = new ArrayList<>(); + for(PtyCstmrGroup pcgEntity : pcgEntityList){ + JwtGroupModel groupModel = new JwtGroupModel(); + groupModel.setGroupId(pcgEntity.getGroupId()); + groupModel.setGroupAuthCd(pcgEntity.getGroupAuthCd()); + groupModelList.add(groupModel); + } + model.setGroup(groupModelList); + } + return model; }else { From 3bec8453f6e54a124e68bebe5b8a2bde295492af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Fri, 22 Jul 2022 10:53:30 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=EB=B9=84=ED=96=89=EA=B3=84=ED=9A=8D?= =?UTF-8?q?=EC=84=9C=20CRUD=20=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BasFlightController.java | 197 +++++++++++++- .../flight/model/BasFlightPlanAprovRq.java | 12 + .../model/BasFlightPlanArcrftModel.java | 35 +++ .../model/BasFlightPlanAreaCoordModel.java | 16 ++ .../flight/model/BasFlightPlanAreaModel.java | 23 ++ .../bas/flight/model/BasFlightPlanListRq.java | 14 + .../bas/flight/model/BasFlightPlanModel.java | 33 +++ .../flight/model/BasFlightPlanPilotModel.java | 27 ++ .../bas/flight/service/BasFlightMapper.java | 105 +++++++ .../bas/flight/service/BasFlightService.java | 257 ++++++++++++++++++ .../palnet/biz/jpa/entity/FltPlanPilot.java | 4 +- .../com/ComArcrftBasRepository.java | 3 + .../flt/FltPlanArcrftRepository.java | 5 +- .../flt/FltPlanAreaCoordRepository.java | 4 + .../repository/flt/FltPlanAreaRepository.java | 5 + .../repository/flt/FltPlanBasRepository.java | 16 ++ .../flt/FltPlanPilotRepository.java | 5 + .../flt/FltPlanQueryRepository.java | 122 +++++++++ .../pty/PtyGroupQueryRepository.java | 15 +- 19 files changed, 877 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAprovRq.java create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordModel.java create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanListRq.java create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanPilotModel.java create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightMapper.java create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java create mode 100644 src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java diff --git a/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java b/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java index d796106..5d9ef2a 100644 --- a/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java +++ b/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java @@ -1,27 +1,38 @@ package com.palnet.biz.api.bas.flight.controller; +import com.palnet.biz.api.bas.flight.model.*; +import com.palnet.biz.api.bas.flight.service.BasFlightService; +import com.palnet.biz.api.comn.response.BasicResponse; +import com.palnet.biz.api.comn.response.ErrorResponse; +import com.palnet.biz.api.comn.response.SuccessResponse; +import com.palnet.comn.exception.CustomException; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.io.FileReader; import java.io.IOException; import java.io.Reader; +import java.util.HashMap; import java.util.List; +import java.util.Map; -@RestController @Slf4j +@RequiredArgsConstructor +@RestController @RequestMapping(value = "/api/bas/flight", produces = {MediaType.APPLICATION_JSON_VALUE}) public class BasFlightController { + private final BasFlightService basFlightService; + @GetMapping("/area") public ResponseEntity getAirArea() throws IOException, ParseException { // 1. file read @@ -42,4 +53,182 @@ public class BasFlightController { return ResponseEntity.ok().body(airArea); } + + // 비행계획서 조회 + @GetMapping(value = "/plan/list") + public ResponseEntity listPlan(BasFlightPlanListRq rq) { + Map resultMap = new HashMap(); + try { + List result = basFlightService.listPlan(rq); + resultMap.put("result", result); + + } catch (CustomException e) { + log.error("IGNORE : {}", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } + + // 비행계획서 상세 조회 + @GetMapping(value = "/plan/detail/{planSno}") + public ResponseEntity detailPlan(@PathVariable("planSno") Integer planSno) { + Map resultMap = new HashMap(); + try { + BasFlightPlanModel result = basFlightService.detailPlan(planSno); + resultMap.put("result", result); + + } catch (CustomException e) { + log.error("IGNORE : {}", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } + + // 비행계획서 등록 + @PostMapping(value = "/plan/create") + public ResponseEntity createPlan(@RequestBody BasFlightPlanModel rq) { + Map resultMap = new HashMap(); + try { + log.info(">>> rq : {}", rq); + boolean result = basFlightService.createPlan(rq); + resultMap.put("result", result); + + } catch (CustomException e) { + log.error("IGNORE : {}", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } + + // 비행계획서 수정 + @PutMapping(value = "/plan/update") + public ResponseEntity updatePlan(@RequestBody BasFlightPlanModel rq) { + Map resultMap = new HashMap(); + try { + boolean result = basFlightService.updatePlan(rq); + resultMap.put("result", result); + + } catch (CustomException e) { + log.error("IGNORE : {}", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } + + // 비행계획서 삭제 + @DeleteMapping(value = "/plan/delete/{planSno}") + public ResponseEntity deletePlan(@PathVariable("planSno") Integer planSno) { + Map resultMap = new HashMap(); + try { + boolean result = basFlightService.deletePlan(planSno); + resultMap.put("result", result); + + } catch (CustomException e) { + log.error("IGNORE : {}", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } + + // 비행계획서 승인/미승인 + @PutMapping(value = "/plan/aprove") + public ResponseEntity aprovePlan(@RequestBody BasFlightPlanAprovRq rq) { + Map resultMap = new HashMap(); + try { + int result = basFlightService.aprovePlan(rq); + resultMap.put("result", result); + + } catch (CustomException e) { + log.error("IGNORE : {}", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + + } + // 그룹 조종사 조회 + @GetMapping(value = "/plan/pilot/{groupId}") + public ResponseEntity findPilot(@PathVariable("groupId") String groupId) { + Map resultMap = new HashMap(); + try { + List result = basFlightService.listPilotByGroup(groupId); + resultMap.put("result", result); + + } catch (CustomException e) { + log.error("IGNORE : {}", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + + } + // 그룹 기체 조회 + @GetMapping(value = "/plan/arcrft/{groupId}") + public ResponseEntity findArcrft(@PathVariable("groupId") String groupId) { + Map resultMap = new HashMap(); + try { + List result = basFlightService.listArcrftByGroup(groupId); + resultMap.put("result", result); + + } catch (CustomException e) { + log.error("IGNORE : {}", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + + } } diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAprovRq.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAprovRq.java new file mode 100644 index 0000000..af3ca20 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAprovRq.java @@ -0,0 +1,12 @@ +package com.palnet.biz.api.bas.flight.model; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class BasFlightPlanAprovRq { + private List planSnoList; + private String aprvlYn; +} diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java new file mode 100644 index 0000000..468bdb0 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java @@ -0,0 +1,35 @@ +package com.palnet.biz.api.bas.flight.model; + +import lombok.Data; + +import java.util.Date; + +@Data +public class BasFlightPlanArcrftModel { + private Integer planArcrftSno; + private Integer planSno; + private Integer arcrftSno; + private String idntfNum; + private String groupNm; + private String prdctNum; + private String arcrftTypeCd; + private String arcrftModelNm; + private String prdctCmpnNm; + private Date prdctDate; + private double arcrftLngth; + private double arcrftWdth; + private double arcrftHght; + private double arcrftWght; + private String wghtTypeCd; + private String imageUrl; + private double takeoffWght; + private String useYn; + private String cameraYn; + private String insrncYn; + private String ownerNm; + private String createUserId; + private Date createDt; + private String updateUserId; + private Date updateDt; + private String docState = "R"; +} diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordModel.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordModel.java new file mode 100644 index 0000000..ecba6fc --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordModel.java @@ -0,0 +1,16 @@ +package com.palnet.biz.api.bas.flight.model; + +import lombok.Data; + +import java.util.Date; + +@Data +public class BasFlightPlanAreaCoordModel { + private Integer planAreaCoordSno; + private Integer planAreaSno; + private double lat; + private double lon; + private String createUserId; + private Date createDt; + private String docState = "R"; +} diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java new file mode 100644 index 0000000..9804499 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java @@ -0,0 +1,23 @@ +package com.palnet.biz.api.bas.flight.model; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Data +public class BasFlightPlanAreaModel { + private Integer planAreaSno; + private Integer planSno; + private String areaType; + private String fltMethod; + private Integer bufferZone; + private String fltElev; + private String createUserId; + private Date createDt; + private String updateUserId; + private Date updateDt; + private String docState = "R"; + private List coords; +} diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanListRq.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanListRq.java new file mode 100644 index 0000000..b89fd5f --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanListRq.java @@ -0,0 +1,14 @@ +package com.palnet.biz.api.bas.flight.model; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Date; + +@Data +public class BasFlightPlanListRq { + private Date schFltStDt; + private Date schFltEndDt; + private LocalDateTime datetime; + private String aprvlYn; +} diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java new file mode 100644 index 0000000..b5779a7 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java @@ -0,0 +1,33 @@ +package com.palnet.biz.api.bas.flight.model; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class BasFlightPlanModel { + private Integer planSno; + private String groupId; + private Integer cstmrSno; + private String memberName; + private String email; + private String hpno; + private String clncd; + private String addr; + private String addrDtlCn; + private String zip; + private Date schFltStDt; + private Date schFltEndDt; + private String fltPurpose; + private String aprvlYn; + private String delYn; + private String createUserId; + private Date createDt; + private String updateUserId; + private Date updateDt; + private String docState = "R"; + private List area; + private List pilot; + private List arcrft; +} diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanPilotModel.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanPilotModel.java new file mode 100644 index 0000000..71ee5e6 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanPilotModel.java @@ -0,0 +1,27 @@ +package com.palnet.biz.api.bas.flight.model; + +import lombok.Data; + +import java.util.Date; + +@Data +public class BasFlightPlanPilotModel { + private Integer planPilotSno; + private Integer planSno; + private Integer cstmrSno; + private String groupNm; + private String memberName; + private String email; + private String hpno; + private String clncd; + private String addr; + private String addrDtlCn; + private String zip; + private String qlfcNo; + private String carrer; + private String createUserId; + private Date createDt; + private String updateUserId; + private Date updateDt; + private String docState = "R"; +} diff --git a/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightMapper.java b/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightMapper.java new file mode 100644 index 0000000..0864661 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightMapper.java @@ -0,0 +1,105 @@ +package com.palnet.biz.api.bas.flight.service; + +import com.palnet.biz.api.bas.flight.model.*; +import com.palnet.biz.jpa.entity.*; +import org.mapstruct.IterableMapping; +import org.mapstruct.Mapper; +import org.mapstruct.MappingTarget; +import org.mapstruct.Named; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface BasFlightMapper { + BasFlightMapper mapper = Mappers.getMapper(BasFlightMapper.class); + + // to entity + @Named("toPlanEntity") + FltPlanBas modelToEntity(BasFlightPlanModel model); + + @Named("toAreaEntity") + FltPlanArea modelToEntity(BasFlightPlanAreaModel model); + + @Named("toCoordEntity") + FltPlanAreaCoord modelToEntity(BasFlightPlanAreaCoordModel model); + + @Named("toPilotEntity") + FltPlanPilot modelToEntity(BasFlightPlanPilotModel model); + + @Named("toArcrftEntity") + FltPlanArcrft modelToEntity(BasFlightPlanArcrftModel model); + + // to entity merge + @Named("toPlanEntityForMergeModel") + void updateEntityByModel(@MappingTarget FltPlanBas entity, BasFlightPlanModel model); + @Named("toAreaEntityForMergeModel") + void updateEntityByModel(@MappingTarget FltPlanArea entity, BasFlightPlanAreaModel model); + @Named("toCoordEntityForMergeModel") + void updateEntityByModel(@MappingTarget FltPlanAreaCoord entity, BasFlightPlanAreaCoordModel model); + @Named("toPilotEntityForMergeModel") + void updateEntityByModel(@MappingTarget FltPlanPilot entity, BasFlightPlanPilotModel model); + @Named("toArcrftEntityForMergeModel") + void updateEntityByModel(@MappingTarget FltPlanArcrft entity, BasFlightPlanArcrftModel model); + + + // to model + @Named("toPlanModel") + BasFlightPlanModel entityToModel(FltPlanBas entity); + + @Named("toAreaModel") + BasFlightPlanAreaModel entityToModel(FltPlanArea entity); + + + @Named("toCoordModel") + BasFlightPlanAreaCoordModel entityToModel(FltPlanAreaCoord entity); + + @Named("toPilotModel") + BasFlightPlanPilotModel entityToModel(FltPlanPilot entity); + + @Named("toArcrftModel") + BasFlightPlanArcrftModel entityToModel(FltPlanArcrft entity); + + @Named("comArcrftBasToArcrftModel") + BasFlightPlanArcrftModel entityToModel(ComArcrftBas entity); + + + // to entity - list + @Named("toPlanEntity") + List modelToEntityPlanList(List model); + + @Named("toAreaEntity") + List modelToEntityAreaList(List model); + + @Named("toCoordEntity") + List modelToEntityCoordList(List model); + + @Named("toPilotEntity") + List modelToEntityPilotList(List model); + + @Named("toArcrftEntity") + List modelToEntityArcrftList(List model); + + + // to model - list + @Named("toPlanModel") + List entityToModelPlanList(List entity); + + @Named("toAreaModel") + List entityToModeArealList(List entity); + + @Named("toCoordModel") + List entityToModelCoordList(List entity); + + @Named("toPilotModel") + List entityToModelPilotList(List entity); + + @Named("toArcrftModel") + List entityToModelArcrftList(List entity); + + @Named("comArcrftBasToArcrftModel") + List comArcrftEntityToModelArcrftList(List entity); + + + +} diff --git a/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java b/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java new file mode 100644 index 0000000..3bb839b --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java @@ -0,0 +1,257 @@ +package com.palnet.biz.api.bas.flight.service; + +import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; +import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; +import com.palnet.biz.api.bas.flight.model.*; +import com.palnet.biz.jpa.entity.*; +import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository; +import com.palnet.biz.jpa.repository.flt.*; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + + +@Log4j2 +@RequiredArgsConstructor +@Service +public class BasFlightService { + + private final FltPlanBasRepository fltPlanBasRepository; + private final FltPlanArcrftRepository fltPlanArcrftRepository; + private final FltPlanAreaRepository fltPlanAreaRepository; + private final FltPlanAreaCoordRepository fltPlanAreaCoordRepository; + private final FltPlanPilotRepository fltPlanPilotRepository; + private final FltPlanQueryRepository fltPlanQueryRepository; + private final ComArcrftBasRepository comArcrftBasRepository; + + private final JwtTokenUtil jwtTokenUtil; + + // 비행계획서 조회 + public List listPlan(BasFlightPlanListRq rq) { + List groupAuthList = jwtTokenUtil.getGroupAuthByToken(); + return fltPlanQueryRepository.listPlan(rq); + } + + // 비행계획서 상세 조회 + public BasFlightPlanModel detailPlan(Integer planSno) { + BasFlightPlanModel rs = new BasFlightPlanModel(); + // 비행계획서 + FltPlanBas planEntity = fltPlanBasRepository.findByPlanSnoAndDelYnNot(planSno, "Y").orElse(null); + if(planEntity != null){ + rs = BasFlightMapper.mapper.entityToModel(planEntity); + // 버퍼영역 + List areaEntityList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(planSno); + if (areaEntityList != null && !areaEntityList.isEmpty()) { + List area = new ArrayList<>(); + for (FltPlanArea areaEntity : areaEntityList) { + BasFlightPlanAreaModel areaModel = BasFlightMapper.mapper.entityToModel(areaEntity); + List coordEntityList = fltPlanAreaCoordRepository.findFirstByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(areaEntity.getPlanAreaSno()); + if (coordEntityList != null && !coordEntityList.isEmpty()) { + areaModel.setCoords(BasFlightMapper.mapper.entityToModelCoordList(coordEntityList)); + } + area.add(areaModel); + } + rs.setArea(area); + } + // 조종사 + List pilotList = fltPlanPilotRepository.findByPlanSnoOrderByPlanPilotSnoAsc(planSno); + if (pilotList != null && !pilotList.isEmpty()) { + rs.setPilot(BasFlightMapper.mapper.entityToModelPilotList(pilotList)); + } + // 기체 + List arcrft = fltPlanArcrftRepository.findByPlanSnoOrderByPlanArcrftSnoAsc(planSno); + if (arcrft != null && !arcrft.isEmpty()) { + rs.setArcrft(BasFlightMapper.mapper.entityToModelArcrftList(arcrft)); + } + } + return rs; + } + + // 비행계획서 등록 + public boolean createPlan(BasFlightPlanModel rq) { + // 비행계획서 + FltPlanBas basEntity = BasFlightMapper.mapper.modelToEntity(rq); + FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity); + Integer planSno = rBasEntity.getPlanSno(); + // 비행구역 + List areaModelList = rq.getArea(); + if (areaModelList != null && !areaModelList.isEmpty()) { + for (BasFlightPlanAreaModel areaModel : areaModelList) { + FltPlanArea areaEntity = BasFlightMapper.mapper.modelToEntity(areaModel); + areaEntity.setPlanSno(planSno); + FltPlanArea rAreaEntity = fltPlanAreaRepository.save(areaEntity); + Integer planAreaSno = rAreaEntity.getPlanAreaSno(); + List coordModelList = areaModel.getCoords(); + if (coordModelList != null && !coordModelList.isEmpty()) { + for (BasFlightPlanAreaCoordModel coordModel : coordModelList) { + FltPlanAreaCoord coordEntity = BasFlightMapper.mapper.modelToEntity(coordModel); + coordEntity.setPlanAreaSno(planAreaSno); + fltPlanAreaCoordRepository.save(coordEntity); + } + } + } + } + + // 조종사 + List pilotModelList = rq.getPilot(); + if (pilotModelList != null && !pilotModelList.isEmpty()) { + for (BasFlightPlanPilotModel pilotModel : pilotModelList) { + FltPlanPilot pilotEntity = BasFlightMapper.mapper.modelToEntity(pilotModel); + pilotEntity.setPlanSno(planSno); + fltPlanPilotRepository.save(pilotEntity); + } + } + + + // 기체 + List arcrftModelList = rq.getArcrft(); + if (arcrftModelList != null && !arcrftModelList.isEmpty()) { + for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) { + FltPlanArcrft arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel); + arcrftEntity.setPlanSno(planSno); + fltPlanArcrftRepository.save(arcrftEntity); + } + } + return true; + } + + // 비행계획서 수정 + public boolean updatePlan(BasFlightPlanModel rq) { + if (rq != null && rq.getPlanSno() != null) { + Integer planSno = rq.getPlanSno(); + // 비행계획서 + FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow(); + BasFlightMapper.mapper.updateEntityByModel(planEntity, rq); + fltPlanBasRepository.save(planEntity); + + // 비행구역 + List areaModelList = rq.getArea(); + if (areaModelList != null && !areaModelList.isEmpty()) { + List areaEntityList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(planSno); + for (BasFlightPlanAreaModel areaModel : areaModelList) { +// FltPlanArea areaEntity = fltPlanAreaRepository.findById(areaModel.getPlanAreaSno()).orElse(null); + FltPlanArea areaEntity = areaEntityList.stream().filter(fltPlanArea -> fltPlanArea.getPlanAreaSno() == areaModel.getPlanAreaSno()).findFirst().orElse(null); + if (areaEntity == null) { + areaEntity = BasFlightMapper.mapper.modelToEntity(areaModel); + } else { + BasFlightMapper.mapper.updateEntityByModel(areaEntity, areaModel); + } + fltPlanAreaRepository.save(areaEntity); + + + List coordsModelList = areaModel.getCoords(); + if (coordsModelList != null && !coordsModelList.isEmpty()) { + Integer areaSno = areaModel.getPlanAreaSno(); + List coordEntityList = fltPlanAreaCoordRepository.findFirstByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(areaSno); + for (BasFlightPlanAreaCoordModel coordModel : coordsModelList) { + FltPlanAreaCoord coordEntity = coordEntityList.stream().filter(fltPlanAreaCoord -> fltPlanAreaCoord.getPlanAreaCoordSno() == coordModel.getPlanAreaCoordSno()).findFirst().orElse(null); + if (coordEntity == null) { + coordEntity = BasFlightMapper.mapper.modelToEntity(coordModel); + } else { + BasFlightMapper.mapper.updateEntityByModel(coordEntity, coordModel); + } + fltPlanAreaCoordRepository.save(coordEntity); + } + List deleteCoordEntity = coordEntityList.stream().filter(fltPlanAreaCoord -> { + for (BasFlightPlanAreaCoordModel coordModel : coordsModelList) { + if (coordModel.getPlanAreaCoordSno() == fltPlanAreaCoord.getPlanAreaCoordSno()) + return false; + } + return true; + }).collect(Collectors.toList()); + fltPlanAreaCoordRepository.deleteAll(deleteCoordEntity); + } + + + } + + List deleteAreaEntity = areaEntityList.stream().filter(fltPlanArea -> { + for (BasFlightPlanAreaModel areaModel : areaModelList) { + if (areaModel.getPlanAreaSno() == fltPlanArea.getPlanAreaSno()) + return false; + } + return true; + }).collect(Collectors.toList()); + fltPlanAreaRepository.deleteAll(deleteAreaEntity); + + + } + + // 조종사 + List pilotModelList = rq.getPilot(); + if(pilotModelList != null && !pilotModelList.isEmpty()){ + List pilotEntityList = fltPlanPilotRepository.findByPlanSnoOrderByPlanPilotSnoAsc(planSno); + for(BasFlightPlanPilotModel pilotModel : pilotModelList){ + FltPlanPilot pilotEntity = pilotEntityList.stream().filter(fltPlanPilot -> fltPlanPilot.getPlanPilotSno() == pilotModel.getPlanPilotSno()).findFirst().orElse(null); + if(pilotEntity != null){ + BasFlightMapper.mapper.updateEntityByModel(pilotEntity, pilotModel); + fltPlanPilotRepository.save(pilotEntity); + } + } + List deletePilotEntity = pilotEntityList.stream().filter(fltPlanPilot -> { + for (BasFlightPlanPilotModel pilotModel : pilotModelList) { + if (pilotModel.getPlanPilotSno() == fltPlanPilot.getPlanPilotSno()) + return false; + } + return true; + }).collect(Collectors.toList()); + fltPlanPilotRepository.deleteAll(deletePilotEntity); + } + + // 기체 + List arcrftModelList = rq.getArcrft(); + if(arcrftModelList != null && !arcrftModelList.isEmpty()){ + List arcrftEntityList = fltPlanArcrftRepository.findByPlanSnoOrderByPlanArcrftSnoAsc(planSno); + for(BasFlightPlanArcrftModel arcrftModel : arcrftModelList){ + FltPlanArcrft arcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> fltPlanArcrft.getPlanArcrftSno() == arcrftModel.getPlanArcrftSno()).findFirst().orElse(null); + if(arcrftEntity != null){ + BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, arcrftModel); + fltPlanArcrftRepository.save(arcrftEntity); + } + } + List deleteArcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> { + for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) { + if (arcrftModel.getPlanArcrftSno() == fltPlanArcrft.getPlanArcrftSno()) + return false; + } + return true; + }).collect(Collectors.toList()); + fltPlanArcrftRepository.deleteAll(deleteArcrftEntity); + } + } + return true; + } + + // 비행계획서 삭제 + public boolean deletePlan(Integer planSno) { + FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow(); + planEntity.setDelYn("Y"); + fltPlanBasRepository.save(planEntity); + return true; + } + + // 비행계획서 승인/미승인 + public int aprovePlan(BasFlightPlanAprovRq rq) { + int cnt = fltPlanBasRepository.updateAprvlYnByPlanSnoIn(rq.getPlanSnoList(), rq.getAprvlYn()); + return cnt; + } + + // 그룹 조종사 조회 + public List listPilotByGroup(String groupId) { + List pilotList = fltPlanQueryRepository.listPilot(groupId); + return pilotList; + } + + // 그룹 기체 조회 + public List listArcrftByGroup(String groupId) { + List arcrftEntityList = comArcrftBasRepository.findByGroupIdOrderByArcrftSnoAsc(groupId); + List arcrftModelList = BasFlightMapper.mapper.comArcrftEntityToModelArcrftList(arcrftEntityList); + return arcrftModelList; + } + +} diff --git a/src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java b/src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java index 6753f78..90bf628 100644 --- a/src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java +++ b/src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java @@ -50,8 +50,8 @@ public class FltPlanPilot { @Column(name = "QLFC_NO") private String qlfcNo; - @Column(name = "CARREA") - private String carrea; + @Column(name = "CARRER") + private String carrer; @Column(name = "CREATE_USER_ID") private String createUserId; diff --git a/src/main/java/com/palnet/biz/jpa/repository/com/ComArcrftBasRepository.java b/src/main/java/com/palnet/biz/jpa/repository/com/ComArcrftBasRepository.java index 44c8369..835e41d 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/com/ComArcrftBasRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/com/ComArcrftBasRepository.java @@ -8,8 +8,11 @@ import com.palnet.biz.jpa.entity.CtrCntrlBas; import com.palnet.biz.jpa.entity.PtyCstmrGroup; import com.palnet.biz.jpa.entity.PtyTermsBas; +import java.util.List; + @Repository public interface ComArcrftBasRepository extends JpaRepository{ + List findByGroupIdOrderByArcrftSnoAsc(String groupId); diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java index 3f7d61c..a93812e 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java @@ -1,8 +1,11 @@ package com.palnet.biz.jpa.repository.flt; import com.palnet.biz.jpa.entity.FltPlanArcrft; -import com.palnet.biz.jpa.entity.FltPlanBas; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface FltPlanArcrftRepository extends JpaRepository { + List findByPlanSnoOrderByPlanArcrftSnoAsc(Integer planSno); + } diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaCoordRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaCoordRepository.java index d8d1726..deb5888 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaCoordRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaCoordRepository.java @@ -4,5 +4,9 @@ import com.palnet.biz.jpa.entity.FltPlanAreaCoord; import com.palnet.biz.jpa.entity.FltPlanBas; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; +import java.util.Optional; + public interface FltPlanAreaCoordRepository extends JpaRepository { + List findFirstByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(Integer planAreaSno); } diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java index 04ff557..990306f 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java @@ -4,5 +4,10 @@ import com.palnet.biz.jpa.entity.FltPlanArea; import com.palnet.biz.jpa.entity.FltPlanBas; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; +import java.util.Optional; + public interface FltPlanAreaRepository extends JpaRepository { + List findByPlanSnoOrderByPlanAreaSnoAsc(Integer planSno); + } diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java index d6eba76..7ca410b 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java @@ -2,6 +2,22 @@ package com.palnet.biz.jpa.repository.flt; import com.palnet.biz.jpa.entity.FltPlanBas; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; public interface FltPlanBasRepository extends JpaRepository { + + Optional findByPlanSnoAndDelYnNot(Integer planSno, String delYn); + + @Transactional + @Modifying + @Query("update FltPlanBas f set f.aprvlYn = :aprvlYn where f.planSno in :planSno") + int updateAprvlYnByPlanSnoIn(@Param("planSno") List planSnos, @Param("aprvlYn") String aprvlYn); + } diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java index b079f85..54eae8a 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java @@ -3,5 +3,10 @@ package com.palnet.biz.jpa.repository.flt; import com.palnet.biz.jpa.entity.FltPlanPilot; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; +import java.util.Optional; + public interface FltPlanPilotRepository extends JpaRepository { + List findByPlanSnoOrderByPlanPilotSnoAsc(Integer planSno); + } diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java new file mode 100644 index 0000000..424b548 --- /dev/null +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -0,0 +1,122 @@ +package com.palnet.biz.jpa.repository.flt; + +import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel; +import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq; +import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; +import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel; +import com.palnet.biz.jpa.entity.*; +import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.group.GroupBy; +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Log4j2 +@Repository +@RequiredArgsConstructor +public class FltPlanQueryRepository { + + + private final JPAQueryFactory query; + + + // 비행계획서 목록 + // TODO 현재 모두 조회 - 권한에 따른 조회 필요 + public List listPlan(BasFlightPlanListRq rq) { + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + QFltPlanArea area = QFltPlanArea.fltPlanArea; + + BooleanBuilder builder = new BooleanBuilder(); + if (rq.getSchFltEndDt() != null) { + builder.and(bas.schFltStDt.goe(rq.getSchFltEndDt())); + } + if (rq.getSchFltStDt() != null) { + builder.and(bas.schFltEndDt.loe(rq.getSchFltStDt())); + } + if ("Y".equals(rq.getAprvlYn()) || "N".equals(rq.getAprvlYn())) { + builder.and(bas.aprvlYn.eq(rq.getAprvlYn())); + } + builder.and(bas.delYn.ne("Y")); + + List r = query + .from(bas) + .leftJoin(area) + .on(bas.planSno.eq(area.planSno)) + .where(builder) + .transform( + GroupBy.groupBy(bas.planSno) + .list(Projections.bean( + BasFlightPlanModel.class, + bas.planSno, + bas.groupId, + bas.cstmrSno, + bas.memberName, + bas.email, + bas.hpno, + bas.clncd, + bas.addr, + bas.addrDtlCn, + bas.zip, + bas.schFltStDt, + bas.schFltEndDt, + bas.fltPurpose, + bas.aprvlYn, + bas.delYn, + bas.createUserId, + bas.createDt, + bas.updateUserId, + bas.updateDt, + GroupBy.list(Projections.bean( + BasFlightPlanAreaModel.class, + area.planAreaSno, + area.planSno, + area.areaType, + area.fltMethod, + area.bufferZone, + area.fltElev, + area.createUserId, + area.createDt, + area.updateUserId, + area.updateDt + ).skipNulls()).as("area") + )) + ); + + return r; + + } + + // 조종사 조회 + public List listPilot(String groupId) { +// QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas; + QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl; + QPtyCstmrGroup group = QPtyCstmrGroup.ptyCstmrGroup; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(group.groupId.eq(groupId)); + + List r = query + .select(Projections.bean( + BasFlightPlanPilotModel.class, + dtl.cstmrSno, + dtl.memberName, + dtl.email, + dtl.hpno, + dtl.clncd, + dtl.addr, + dtl.addrDtlCn, + dtl.zip + )) + .from(dtl) + .leftJoin(group) + .on(dtl.cstmrSno.eq(group.cstmrSno)) + .where(builder) + .fetch(); + return r; + } + +} diff --git a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java index 96e6700..1cc7d53 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java @@ -1,18 +1,7 @@ package com.palnet.biz.jpa.repository.pty; -import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel; -import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel; -import com.palnet.biz.api.bas.group.model.BasGroupAprvModel; -import com.palnet.biz.api.bas.group.model.BasGroupAprvRqModel; -import com.palnet.biz.api.bas.group.model.BasGroupJoinModel; -import com.palnet.biz.api.bas.group.model.BasGroupJoinRqModel; -import com.palnet.biz.api.bas.group.model.BasGroupModel; -import com.palnet.biz.api.bas.group.model.BasGroupRqModel; -import com.palnet.biz.api.bas.group.model.BasGroupUserModel; -import com.palnet.biz.api.bas.group.model.BasGroupUserRqModel; -import com.palnet.biz.jpa.entity.PtyCrtfyhpBas; -import com.palnet.biz.jpa.entity.QPtyCrtfyhpBas; +import com.palnet.biz.api.bas.group.model.*; import com.palnet.biz.jpa.entity.QPtyCstmrBas; import com.palnet.biz.jpa.entity.QPtyCstmrDtl; import com.palnet.biz.jpa.entity.QPtyCstmrGroup; @@ -24,11 +13,9 @@ import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; - import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Repository; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List;