From 667a2f3a507ff0368768be8f534ccd73e173f05c 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, 11 Oct 2023 14:49:54 +0900 Subject: [PATCH] =?UTF-8?q?laanc=20=EC=8A=B9=EC=9D=B8=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=EC=A1=B0=EA=B1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BasLaancAprvController.java | 4 +-- .../bas/laanc/model/BasLaancAprvListRq.java | 11 +++++- .../api/bas/laanc/model/BasLaancAprvRs.java | 35 ++++++++++++++++++- .../biz/api/comn/model/SwaggerPageable.java | 33 +++++++++++++++++ .../com/palnet/biz/config/SwaggerConfig.java | 3 ++ .../biz/jpa/model/LaancAprvSearchDto.java | 13 ++++++- .../flt/FltPlanQueryRepository.java | 34 ++++++++++++++++-- .../com/palnet/comn/utils/InstantUtils.java | 5 +++ .../flt/FltPlanQueryRepositoryTest.java | 28 ++++++++++++--- 9 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/comn/model/SwaggerPageable.java diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java index 702e5be6..a0bd47f0 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java @@ -59,12 +59,12 @@ public class BasLaancAprvController { rs = basLaancAprvService.getLaancAprvList(rq, pageable); } catch (CustomException e) { - Map resultMap = new HashMap(); + Map resultMap = new HashMap<>(); log.error("IGNORE : ", e); resultMap.put("result", false); resultMap.put("errorCode", e.getErrorCode()); resultMap.put("errorMessage", e.getMessage()); - return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); } catch (Exception e) { log.error("IGNORE : ", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvListRq.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvListRq.java index 5c8dacc6..20d0b7e1 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvListRq.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvListRq.java @@ -1,7 +1,13 @@ package com.palnet.biz.api.bas.laanc.model; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.palnet.biz.config.convert.InstantDateStrSerializer; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.Instant; /** * packageName : com.palnet.biz.api.bas.laanc.model @@ -16,6 +22,9 @@ import lombok.Data; */ @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class BasLaancAprvListRq { - + @JsonSerialize(using = InstantDateStrSerializer.class) + private Instant createDate; } diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvRs.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvRs.java index 821f4283..1580251b 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvRs.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvRs.java @@ -1,5 +1,8 @@ package com.palnet.biz.api.bas.laanc.model; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.palnet.biz.jpa.entity.type.ArcrftTypeCd; +import com.palnet.biz.jpa.entity.type.ArcrftWghtCd; import com.palnet.biz.jpa.entity.type.FltPurpose; import com.palnet.biz.jpa.entity.type.FltType; import lombok.AllArgsConstructor; @@ -9,6 +12,8 @@ import lombok.NoArgsConstructor; import java.time.Instant; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; /** * packageName : com.palnet.biz.api.bas.laanc.model @@ -42,14 +47,42 @@ public class BasLaancAprvRs { private FltType fltType; private String aprvlYn; private Instant aprvlDt; - private String delYn; +// private String delYn; private String createUserId; private Instant createDt; private String updateUserId; private Instant updateDt; private String serviceType; private String corpRegYn; + + // 하나의 필드로 묶어서 처리 + // 항공기 무게(기체 중량) + public String getArcrftWght() { + if (arcrftList == null || arcrftList.isEmpty()) return null; + List arcrftWghtCdList = arcrftList.stream().map(BasLaancArcrftModel::getArcrftWghtCd).distinct().filter(Objects::nonNull).collect(Collectors.toList()); + System.out.println(arcrftWghtCdList); + String ArcrftWghtType = arcrftWghtCdList.stream().map(ArcrftWghtCd::getValue).collect(Collectors.joining(",")); + return ArcrftWghtType; + } + + // 고도 + public String getElev() { + if (areaList == null || areaList.isEmpty()) return null; + List elevList = areaList.stream().map(BasLaancAreaModel::getFltElev).distinct().filter(Objects::nonNull).collect(Collectors.toList()); + String elev = String.join(",", elevList); + return elev; + } + + // 조종사 성명 + public String getPilotName() { + if (pilotList == null || pilotList.isEmpty()) return null; + List pilotNameList = pilotList.stream().map(BasLaancPilotModel::getMemberName).distinct().filter(Objects::nonNull).collect(Collectors.toList()); + String pilotName = String.join(",", pilotNameList); + return pilotName; + } + private List areaList; private List arcrftList; private List pilotList; + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/model/SwaggerPageable.java b/pav-server/src/main/java/com/palnet/biz/api/comn/model/SwaggerPageable.java new file mode 100644 index 00000000..6aa6148c --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/model/SwaggerPageable.java @@ -0,0 +1,33 @@ +package com.palnet.biz.api.comn.model; + +import io.swagger.annotations.ApiParam; +import lombok.Getter; +import org.springframework.lang.Nullable; + +/** + * packageName : com.palnet.biz.api.comn.model + * fileName : SwaggerPageable + * author : dhji + * date : 2023-10-11(011) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-11(011) dhji 최초 생성 + */ +@Getter +public class SwaggerPageable { + + @ApiParam(value = "Number of records per page", example = "0") + @Nullable + private Integer size; + + @ApiParam(value = "Results page you want to retrieve (0..N)", example = "0") + @Nullable + private Integer page; + + @ApiParam(value = "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.") + @Nullable + private String sort; + +} diff --git a/pav-server/src/main/java/com/palnet/biz/config/SwaggerConfig.java b/pav-server/src/main/java/com/palnet/biz/config/SwaggerConfig.java index 6a77d90c..70111f2e 100644 --- a/pav-server/src/main/java/com/palnet/biz/config/SwaggerConfig.java +++ b/pav-server/src/main/java/com/palnet/biz/config/SwaggerConfig.java @@ -1,8 +1,10 @@ package com.palnet.biz.config; +import com.palnet.biz.api.comn.model.SwaggerPageable; import io.swagger.v3.oas.models.parameters.Parameter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.domain.Pageable; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; @@ -39,6 +41,7 @@ public class SwaggerConfig { .directModelSubstitute(Date.class, String.class) .directModelSubstitute(LocalDate.class, String.class) .directModelSubstitute(LocalDateTime.class, String.class) + .directModelSubstitute(Pageable.class, SwaggerPageable.class) .securityContexts(Arrays.asList(securityContext())) .securitySchemes(Arrays.asList(apiKey())); } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancAprvSearchDto.java b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancAprvSearchDto.java index c9672ef5..23c1e26f 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancAprvSearchDto.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancAprvSearchDto.java @@ -1,7 +1,11 @@ package com.palnet.biz.jpa.model; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.Instant; /** * packageName : com.palnet.biz.api.bas.laanc.model @@ -16,6 +20,13 @@ import lombok.Data; */ @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class LaancAprvSearchDto { - private String serach; + private Instant createDate; + private Instant createStDate; + private Instant createEndDate; + private String memberName; + private Instant schFltStDate; + private Instant schFltEndDate; } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java index 5bd5d97a..a7df972d 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -5,6 +5,7 @@ import com.palnet.biz.api.main.dash.model.MainDashStcsModel; import com.palnet.biz.jpa.entity.*; import com.palnet.biz.jpa.model.*; import com.palnet.comn.utils.DateUtils; +import com.palnet.comn.utils.InstantUtils; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.group.GroupBy; import com.querydsl.core.types.ConstantImpl; @@ -22,10 +23,11 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; +import org.springframework.util.StringUtils; +import java.time.Duration; import java.time.Instant; import java.util.List; import java.util.Optional; @@ -710,14 +712,40 @@ public class FltPlanQueryRepository { } // laanc 승인 목록 - public Page findAllAprvListBySearch(LaancAprvSearchDto serach, Pageable pageable) { + public Page findAllAprvListBySearch(LaancAprvSearchDto search, Pageable pageable) { QFltPlanBas bas = QFltPlanBas.fltPlanBas; QFltPlanArea area = QFltPlanArea.fltPlanArea; QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft; - // TODO serach + // serach BooleanBuilder builder = new BooleanBuilder(); + if(search != null){ + if(StringUtils.hasText(search.getMemberName())){ + builder.and(bas.memberName.contains(search.getMemberName())); + } + if(search.getCreateDate() != null){ + Instant createStDate = InstantUtils.toDate(search.getCreateDate()); + Instant createEndDate = createStDate.plus(Duration.ofDays(1)); + builder.and(bas.createDt.goe(createStDate).and(bas.createDt.lt(createEndDate))); + } + if(search.getCreateStDate() != null) { + Instant createStDate = InstantUtils.toDate(search.getCreateStDate()); + builder.and(bas.createDt.goe(createStDate)); + } + if(search.getCreateEndDate() != null){ + Instant createEndDate = InstantUtils.toDate(search.getCreateEndDate()).plus(Duration.ofDays(1)); + builder.and(bas.createDt.lt(createEndDate)); + } + if(search.getSchFltStDate() != null){ + Instant schFltStDate = InstantUtils.toDate(search.getSchFltStDate()); + builder.and(bas.schFltStDt.goe(schFltStDate)); + } + if(search.getSchFltEndDate() != null){ + Instant schFltEndDate = InstantUtils.toDate(search.getSchFltEndDate()).plus(Duration.ofDays(1)); + builder.and(bas.schFltEndDt.lt(schFltEndDate)); + } + } JPAQuery jpaQuery = query.from(bas) diff --git a/pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java index f6a88c68..43b3e22b 100644 --- a/pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java +++ b/pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java @@ -106,4 +106,9 @@ public class InstantUtils { return false; // 파싱에 실패하면 유효하지 않은 형식입니다. } } + + public static Instant toDate(Instant instant) { + LocalDate localDate = LocalDate.ofInstant(instant, ZoneId.of(DEFAULT_ZONE)); + return localDate.atStartOfDay(ZoneId.of(DEFAULT_ZONE)).toInstant(); + } } diff --git a/pav-server/src/test/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepositoryTest.java b/pav-server/src/test/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepositoryTest.java index 6cc91659..ec566716 100644 --- a/pav-server/src/test/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepositoryTest.java +++ b/pav-server/src/test/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepositoryTest.java @@ -1,7 +1,9 @@ package com.palnet.biz.jpa.repository.flt; import com.palnet.biz.api.bas.laanc.model.BasLaancAprvRs; +import com.palnet.biz.jpa.model.LaancAprvSearchDto; import com.palnet.biz.jpa.model.LaancPlanDto; +import com.palnet.comn.utils.InstantUtils; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -10,6 +12,9 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.test.context.ActiveProfiles; +import java.time.Duration; +import java.time.Instant; + @Slf4j @ActiveProfiles("local") @SpringBootTest @@ -20,11 +25,25 @@ class FltPlanQueryRepositoryTest { @Test void findAllAprvListBySearch() { + Instant createDate = InstantUtils.fromDateString("2023-10-06"); + Instant createStDate = createDate.minus(Duration.ofDays(1)); + Instant createEndDate = createDate.plus(Duration.ofDays(1)); + Instant schFltStDate = InstantUtils.fromDateString("2023-10-06"); + Instant schFltEndDate = InstantUtils.fromDateString("2023-10-10"); + LaancAprvSearchDto serach = LaancAprvSearchDto.builder() +// .createDate(createDate) +// .createStDate(createStDate) +// .createEndDate(createEndDate) +// .memberName("팔네트웍스") + .schFltStDate(schFltStDate) + .schFltEndDate(schFltEndDate) + .build(); PageRequest pageRequest = PageRequest.of(0, 2); - Page list = fltPlanQueryRepository.findAllAprvListBySearch(null, pageRequest); - log.info("r : {} :: {}", list.getContent(), list); - Page list2 = fltPlanQueryRepository.findAllAprvListBySearch(null, null); - log.info("r : {} :: {}", list2.getContent(), list2); + Page list = fltPlanQueryRepository.findAllAprvListBySearch(serach, pageRequest); + log.info("r : {} :: {}", list.getContent().size(), list.getTotalElements()); + Page list2 = fltPlanQueryRepository.findAllAprvListBySearch(serach, null); + log.info("r : {} :: {}", list2.getContent().size(), list.getTotalElements()); + } @@ -32,4 +51,5 @@ class FltPlanQueryRepositoryTest { void findAprvById() { BasLaancAprvRs rs = new BasLaancAprvRs(); } + } \ No newline at end of file