From 941de4002129ffc2e43afc7b1e27dd1f59fda891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Tue, 10 Oct 2023 17:57:01 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8A=B9=EC=9D=B8=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EB=B0=8F=20=EC=83=81=EC=84=B8=20=EA=B8=B0=EB=B3=B8=EC=98=AC?= =?UTF-8?q?=EB=A6=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BasLaancAprvController.java | 111 ++++ .../bas/laanc/model/BasLaancAprvListRq.java | 21 + .../api/bas/laanc/model/BasLaancAprvRs.java | 55 ++ .../bas/laanc/service/BasLaancAprvMapper.java | 36 ++ .../laanc/service/BasLaancAprvService.java | 60 ++ .../api/comn/sms/service/ComnSmsMapper.java | 1 - .../biz/jpa/model/LaancAprvSearchDto.java | 21 + .../biz/jpa/model/LaancPlanArcrftDto.java | 57 ++ .../biz/jpa/model/LaancPlanAreaDto.java | 41 ++ .../palnet/biz/jpa/model/LaancPlanDto.java | 55 ++ .../biz/jpa/model/LaancPlanPilotDto.java | 43 ++ .../biz/jpa/model/LaancPlanareaCoordDto.java | 32 + .../flt/FltPlanQueryRepository.java | 579 +++++++++++++----- .../java/com/palnet/comn/utils/PageUtils.java | 28 + .../main/resources/application-database.yml | 4 +- .../service/BasLaancAprvServiceTest.java | 37 ++ .../flt/FltPlanQueryRepositoryTest.java | 35 ++ 17 files changed, 1059 insertions(+), 157 deletions(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java create mode 100644 pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvListRq.java create mode 100644 pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvRs.java create mode 100644 pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvMapper.java create mode 100644 pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvService.java create mode 100644 pav-server/src/main/java/com/palnet/biz/jpa/model/LaancAprvSearchDto.java create mode 100644 pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanArcrftDto.java create mode 100644 pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanAreaDto.java create mode 100644 pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanDto.java create mode 100644 pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanPilotDto.java create mode 100644 pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanareaCoordDto.java create mode 100644 pav-server/src/main/java/com/palnet/comn/utils/PageUtils.java create mode 100644 pav-server/src/test/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvServiceTest.java create mode 100644 pav-server/src/test/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepositoryTest.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 new file mode 100644 index 0000000..702e5be --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java @@ -0,0 +1,111 @@ +package com.palnet.biz.api.bas.laanc.controller; + +import com.palnet.biz.api.bas.laanc.model.BasLaancAprvListRq; +import com.palnet.biz.api.bas.laanc.model.BasLaancAprvRs; +import com.palnet.biz.api.bas.laanc.service.BasLaancAprvService; +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 io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +/** + * packageName : com.palnet.biz.api.bas.laanc.controller + * fileName : BasLaancAprvController + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Slf4j +@Tag(name = "LAANC 승인", description = "LAANC 승인 관련 API") +@RequiredArgsConstructor +@RestController +@RequestMapping("/api/bas/laanc/aprv") +public class BasLaancAprvController { + + private final BasLaancAprvService basLaancAprvService; + + /** + * laanc 승인 목록 + * @param rq + * @param pageable + * @return + */ + @ApiOperation(value = "LAANC 승인 목록") + @Tag(name = "LAANC 승인", description = "LAANC 승인 관련 API") + @GetMapping("/list") + public ResponseEntity getLaancAprvList(BasLaancAprvListRq rq, Pageable pageable) { + Page rs = null; + try { + log.debug(">>> rq : {}", rq); + rs = basLaancAprvService.getLaancAprvList(rq, pageable); + + } catch (CustomException e) { + 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)); + } catch (Exception e) { + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + + if(pageable == null) { + return ResponseEntity.ok().body(new SuccessResponse<>(rs.getContent())); + } + return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + } + + /** + * laanc 승인 상세 + * @param planSno + * @return + */ + @ApiOperation(value = "LAANC 승인 상세 조회") + @Tag(name = "LAANC 승인", description = "LAANC 승인 관련 API") + @GetMapping("/detail/{planSno}") + public ResponseEntity getLaancAprvDetail(@PathVariable("planSno") String planSno) { + BasLaancAprvRs rs = null; + try { + log.debug(">>> rq : {}", planSno); + rs = basLaancAprvService.getLaancAprvDetail(planSno); + log.debug(">>> rs : {}", rs); + + } catch (CustomException e) { + 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)); + } 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<>(rs)); + } +} 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 new file mode 100644 index 0000000..5c8dacc --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvListRq.java @@ -0,0 +1,21 @@ +package com.palnet.biz.api.bas.laanc.model; + +import lombok.Builder; +import lombok.Data; + +/** + * packageName : com.palnet.biz.api.bas.laanc.model + * fileName : BasLaancAprvListRq + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Data +@Builder +public class BasLaancAprvListRq { + +} 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 new file mode 100644 index 0000000..821f428 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvRs.java @@ -0,0 +1,55 @@ +package com.palnet.biz.api.bas.laanc.model; + +import com.palnet.biz.jpa.entity.type.FltPurpose; +import com.palnet.biz.jpa.entity.type.FltType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.Instant; +import java.util.List; + +/** + * packageName : com.palnet.biz.api.bas.laanc.model + * fileName : BasLaancAprvRs + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BasLaancAprvRs { + 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 Instant schFltStDt; + private Instant schFltEndDt; + private FltPurpose fltPurpose; + private FltType fltType; + private String aprvlYn; + private Instant aprvlDt; + private String delYn; + private String createUserId; + private Instant createDt; + private String updateUserId; + private Instant updateDt; + private String serviceType; + private String corpRegYn; + private List areaList; + private List arcrftList; + private List pilotList; +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvMapper.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvMapper.java new file mode 100644 index 0000000..4575417 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvMapper.java @@ -0,0 +1,36 @@ +package com.palnet.biz.api.bas.laanc.service; + +import com.palnet.biz.api.bas.laanc.model.BasLaancAprvListRq; +import com.palnet.biz.api.bas.laanc.model.BasLaancAprvRs; +import com.palnet.biz.jpa.model.LaancAprvSearchDto; +import com.palnet.biz.jpa.model.LaancPlanDto; +import org.mapstruct.Mapper; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * packageName : com.palnet.biz.api.bas.laanc.service + * fileName : BasLaancMapper + * author : dhji + * date : 2023-09-22(022) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-09-22(022) dhji 최초 생성 + */ +@Mapper(unmappedSourcePolicy = ReportingPolicy.IGNORE, unmappedTargetPolicy = ReportingPolicy.IGNORE, nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) +public interface BasLaancAprvMapper { + BasLaancAprvMapper MAPPER = Mappers.getMapper(BasLaancAprvMapper.class); + + + LaancAprvSearchDto toDto(BasLaancAprvListRq rq); + + BasLaancAprvRs toRs(LaancPlanDto dto); + List toRsList(List dto); + +} + diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvService.java new file mode 100644 index 0000000..95d5a62 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvService.java @@ -0,0 +1,60 @@ +package com.palnet.biz.api.bas.laanc.service; + +import com.palnet.biz.api.bas.laanc.model.BasLaancAprvListRq; +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.biz.jpa.repository.flt.FltPlanQueryRepository; +import com.palnet.comn.code.ErrorCode; +import com.palnet.comn.exception.CustomException; +import com.palnet.comn.utils.PageUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +/** + * packageName : com.palnet.biz.api.bas.laanc.service + * fileName : BasLaancAprvService + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class BasLaancAprvService { + + private final FltPlanQueryRepository fltPlanQueryRepository; + + /** + * laanc 승인 목록 + * @param rq + * @param pageable + * @return + */ + public Page getLaancAprvList(BasLaancAprvListRq rq, Pageable pageable) { + LaancAprvSearchDto searchDto = BasLaancAprvMapper.MAPPER.toDto(rq); + Page result = fltPlanQueryRepository.findAllAprvListBySearch(searchDto, pageable); + Page rs = PageUtils.convert(result, BasLaancAprvMapper.MAPPER.toRsList(result.getContent())); + return rs; + } + + /** + * laanc 승인 상세 + * @param planSno + * @return + */ + public BasLaancAprvRs getLaancAprvDetail(String planSno) { + if(planSno == null) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); + LaancPlanDto result = fltPlanQueryRepository.findAprvById(Integer.parseInt(planSno)); + BasLaancAprvRs rs = BasLaancAprvMapper.MAPPER.toRs(result); + return rs; + } + +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsMapper.java b/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsMapper.java index a56f55e..97ffe82 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsMapper.java +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsMapper.java @@ -1,6 +1,5 @@ package com.palnet.biz.api.comn.sms.service; -import com.palnet.biz.api.bas.laanc.service.BasLaancMapper; import com.palnet.biz.api.comn.sms.model.ComnSmsLaancAprovModel; import com.palnet.biz.jpa.entity.SuredataEntity; import org.mapstruct.Mapper; 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 new file mode 100644 index 0000000..c9672ef --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancAprvSearchDto.java @@ -0,0 +1,21 @@ +package com.palnet.biz.jpa.model; + +import lombok.Builder; +import lombok.Data; + +/** + * packageName : com.palnet.biz.api.bas.laanc.model + * fileName : LaancAprvSearchDto + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Data +@Builder +public class LaancAprvSearchDto { + private String serach; +} diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanArcrftDto.java b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanArcrftDto.java new file mode 100644 index 0000000..57bb55a --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanArcrftDto.java @@ -0,0 +1,57 @@ +package com.palnet.biz.jpa.model; + +import com.palnet.biz.jpa.entity.type.ArcrftTypeCd; +import com.palnet.biz.jpa.entity.type.ArcrftWghtCd; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.Instant; + +/** + * packageName : com.palnet.biz.jpa.model + * fileName : LaancPlanArcrftDto + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LaancPlanArcrftDto { + private Integer planArcrftSno; + private Integer planSno; + private Integer arcrftSno; + private String idntfNum; + private String groupNm; + private String prdctNum; + private ArcrftTypeCd arcrftTypeCd; + private String arcrftModelNm; + private String prdctCmpnNm; + private Instant prdctDate; + private double arcrftLngth; + private double arcrftWdth; + private double arcrftHght; + private double arcrftWght; + private ArcrftWghtCd arcrftWghtCd; + 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 Instant createDt; + private String updateUserId; + private Instant updateDt; + private String acrftInsuranceYn; + private Instant insuranceExperiod; + private String corporationNm; +} diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanAreaDto.java b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanAreaDto.java new file mode 100644 index 0000000..ef101cb --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanAreaDto.java @@ -0,0 +1,41 @@ +package com.palnet.biz.jpa.model; + +import com.palnet.biz.jpa.entity.type.FltMethod; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.Instant; +import java.util.List; + +/** + * packageName : com.palnet.biz.jpa.model + * fileName : LaancPlanAreaDto + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LaancPlanAreaDto { + private Integer planAreaSno; + private Integer planSno; + private String areaType; + private FltMethod fltMethod; + private String fltAreaAddr; + private Integer bufferZone; + private String fltElev; + private String createUserId; + private Instant createDt; + private String updateUserId; + private Instant updateDt; + private String fltMothoeRm; + private List coordList; +} diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanDto.java b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanDto.java new file mode 100644 index 0000000..7a85d83 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanDto.java @@ -0,0 +1,55 @@ +package com.palnet.biz.jpa.model; + +import com.palnet.biz.jpa.entity.type.FltPurpose; +import com.palnet.biz.jpa.entity.type.FltType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.Instant; +import java.util.List; + +/** + * packageName : com.palnet.biz.api.bas.laanc.model + * fileName : LaancAprvDto + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LaancPlanDto { + 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 Instant schFltStDt; + private Instant schFltEndDt; + private FltPurpose fltPurpose; + private FltType fltType; + private String aprvlYn; + private Instant aprvlDt; + private String delYn; + private String createUserId; + private Instant createDt; + private String updateUserId; + private Instant updateDt; + private String serviceType; + private String corpRegYn; + private List areaList; + private List arcrftList; + private List pilotList; +} diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanPilotDto.java b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanPilotDto.java new file mode 100644 index 0000000..4974e01 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanPilotDto.java @@ -0,0 +1,43 @@ +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.jpa.model + * fileName : LaancPlanPilotDto + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LaancPlanPilotDto { + 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 Instant createDt; + private String updateUserId; + private Instant updateDt; +} diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanareaCoordDto.java b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanareaCoordDto.java new file mode 100644 index 0000000..466b680 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/model/LaancPlanareaCoordDto.java @@ -0,0 +1,32 @@ +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.jpa.model + * fileName : LaancPlanareaCoordDto + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LaancPlanareaCoordDto { + private Integer planAreaCoordSno; + private Integer planAreaSno; + private double lon; + private double lat; + private String createUserId; + private Instant createDt; +} 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 4a6e053..5bd5d97 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 @@ -1,33 +1,9 @@ package com.palnet.biz.jpa.repository.flt; -import java.time.Instant; -import java.util.List; - -import org.springframework.cache.annotation.Cacheable; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Repository; - -import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; -import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordRq; -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.api.bas.flight.model.BasFlightScheduleRs; +import com.palnet.biz.api.bas.flight.model.*; import com.palnet.biz.api.main.dash.model.MainDashStcsModel; -import com.palnet.biz.jpa.entity.FltPlanBas; -import com.palnet.biz.jpa.entity.QComArcrftBas; -import com.palnet.biz.jpa.entity.QComIdntfBas; -import com.palnet.biz.jpa.entity.QCtrCntrlBas; -import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea; -import com.palnet.biz.jpa.entity.QFltPlanArcrft; -import com.palnet.biz.jpa.entity.QFltPlanArea; -import com.palnet.biz.jpa.entity.QFltPlanAreaCoord; -import com.palnet.biz.jpa.entity.QFltPlanBas; -import com.palnet.biz.jpa.entity.QPtyCstmrDtl; -import com.palnet.biz.jpa.entity.QPtyCstmrGroup; -import com.palnet.biz.jpa.entity.QPtyGroupBas; +import com.palnet.biz.jpa.entity.*; +import com.palnet.biz.jpa.model.*; import com.palnet.comn.utils.DateUtils; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.group.GroupBy; @@ -39,12 +15,22 @@ import com.querydsl.core.types.dsl.DateTemplate; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.StringTemplate; import com.querydsl.jpa.JPAExpressions; +import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; +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 java.time.Instant; +import java.util.List; +import java.util.Optional; -@Log4j2 +@Slf4j @Repository @RequiredArgsConstructor public class FltPlanQueryRepository { @@ -58,7 +44,7 @@ public class FltPlanQueryRepository { public PageImpl listPlan(BasFlightPlanListRq rq, String masterAccount, Pageable pageable) { QFltPlanBas bas = QFltPlanBas.fltPlanBas; QFltPlanArea area = QFltPlanArea.fltPlanArea; - + BooleanBuilder builder = new BooleanBuilder(); if (rq.getGroupId() != null) { @@ -67,9 +53,9 @@ public class FltPlanQueryRepository { if (rq.getCstmrSno() != null) { // if(masterAccount.equals("USER")) { - if(masterAccount.equals("NORMAL")) { - builder.and(bas.cstmrSno.eq(rq.getCstmrSno())); - } + if (masterAccount.equals("NORMAL")) { + builder.and(bas.cstmrSno.eq(rq.getCstmrSno())); + } } // builder.and(bas.schFltStDt.goe(rq.getSchFltStDt())); @@ -82,7 +68,7 @@ public class FltPlanQueryRepository { builder.and(bas.aprvlYn.eq(rq.getAprvlYn())); } builder.and(bas.delYn.ne("Y")); - + List r = query .from(bas) .leftJoin(area) @@ -137,10 +123,11 @@ public class FltPlanQueryRepository { return new PageImpl<>(r, pageable, r.size()); } + public long listPlanCount(BasFlightPlanListRq rq, String masterAccount) { QFltPlanBas bas = QFltPlanBas.fltPlanBas; QFltPlanArea area = QFltPlanArea.fltPlanArea; - + BooleanBuilder builder = new BooleanBuilder(); if (rq.getGroupId() != null) { @@ -149,9 +136,9 @@ public class FltPlanQueryRepository { if (rq.getCstmrSno() != null) { // if(masterAccount.equals("USER")) { - if(masterAccount.equals("NORMAL")) { - builder.and(bas.cstmrSno.eq(rq.getCstmrSno())); - } + if (masterAccount.equals("NORMAL")) { + builder.and(bas.cstmrSno.eq(rq.getCstmrSno())); + } } // builder.and(bas.schFltStDt.goe(rq.getSchFltStDt())); @@ -164,7 +151,7 @@ public class FltPlanQueryRepository { builder.and(bas.aprvlYn.eq(rq.getAprvlYn())); } builder.and(bas.delYn.ne("Y")); - + List r = query .from(bas) .leftJoin(area) @@ -209,21 +196,22 @@ public class FltPlanQueryRepository { )) ); long cnt = 0; - for(BasFlightPlanModel list : r ) { - cnt++; + for (BasFlightPlanModel list : r) { + cnt++; } - + return cnt; } + //동일 기체 등록시 비행시간 중복여부 조회 - public List arcrftCheck(BasFlightPlanModel rq, String idntfNum){ - QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft; - QFltPlanBas bas = QFltPlanBas.fltPlanBas; - - List list = query + public List arcrftCheck(BasFlightPlanModel rq, String idntfNum) { + QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + + List list = query .select(Projections.bean( - BasFlightPlanModel.class, + BasFlightPlanModel.class, bas.schFltStDt, bas.schFltEndDt, bas.delYn @@ -232,39 +220,40 @@ public class FltPlanQueryRepository { .leftJoin(arcrft) .on(bas.planSno.eq(arcrft.planSno)) .where(arcrft.idntfNum.eq(idntfNum) - .and(((bas.schFltStDt.loe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltEndDt()))) - .or((bas.schFltStDt.goe(rq.getSchFltStDt())) - .and((bas.schFltStDt.loe(rq.getSchFltEndDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))) - .or(((bas.schFltStDt.loe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltStDt()))) - .and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))) - .or((bas.schFltStDt.goe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))) - .and(bas.delYn.eq("N"))) + .and(((bas.schFltStDt.loe(rq.getSchFltStDt())) + .and(bas.schFltEndDt.goe(rq.getSchFltEndDt()))) + .or((bas.schFltStDt.goe(rq.getSchFltStDt())) + .and((bas.schFltStDt.loe(rq.getSchFltEndDt())) + .and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))) + .or(((bas.schFltStDt.loe(rq.getSchFltStDt())) + .and(bas.schFltEndDt.goe(rq.getSchFltStDt()))) + .and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))) + .or((bas.schFltStDt.goe(rq.getSchFltStDt())) + .and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))) + .and(bas.delYn.eq("N"))) .fetch(); - return list; - + return list; + } + // 비행계획구역 설정시 같은 시간대에 구역이 중복되는지 조회 - public List CoordCheck(BasFlightPlanModel rq){ - QFltPlanArea area = QFltPlanArea.fltPlanArea; - QFltPlanBas bas = QFltPlanBas.fltPlanBas; - List list = query + public List CoordCheck(BasFlightPlanModel rq) { + QFltPlanArea area = QFltPlanArea.fltPlanArea; + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + List list = query .from(bas) .leftJoin(area) .on(bas.planSno.eq(area.planSno)) .where((((bas.schFltStDt.loe(rq.getSchFltStDt())) .and(bas.schFltEndDt.goe(rq.getSchFltEndDt()))) .or((bas.schFltStDt.goe(rq.getSchFltStDt())) - .and((bas.schFltStDt.loe(rq.getSchFltEndDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))) + .and((bas.schFltStDt.loe(rq.getSchFltEndDt())) + .and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))) .or(((bas.schFltStDt.loe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltStDt()))) - .and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))) + .and(bas.schFltEndDt.goe(rq.getSchFltStDt()))) + .and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))) .or((bas.schFltStDt.goe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))) + .and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))) .and(bas.delYn.eq("N")) .and(bas.groupId.eq(rq.getGroupId()))) .transform( @@ -305,18 +294,19 @@ public class FltPlanQueryRepository { ).skipNulls()).as("areaList") )) ); - - return list; + + return list; } + //CoordCheck에 들어갈 count - public List CoordCount(BasFlightPlanModel rq){ - QFltPlanArea area = QFltPlanArea.fltPlanArea; - QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord; - QFltPlanBas bas = QFltPlanBas.fltPlanBas; - QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft; - List list = query + public List CoordCount(BasFlightPlanModel rq) { + QFltPlanArea area = QFltPlanArea.fltPlanArea; + QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord; + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft; + List list = query .select(Projections.bean( - BasFlightPlanAreaCoordRq.class, + BasFlightPlanAreaCoordRq.class, area.bufferZone, area.areaType, area.planAreaSno.count().intValue().as("cnt"), @@ -329,24 +319,25 @@ public class FltPlanQueryRepository { .on(area.planSno.eq(arcrft.planSno)) .leftJoin(coord) .on(area.planAreaSno.eq(coord.planAreaSno)) - + .where((((bas.schFltStDt.loe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltEndDt()))) - .or((bas.schFltStDt.goe(rq.getSchFltStDt())) - .and((bas.schFltStDt.loe(rq.getSchFltEndDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))) - .or(((bas.schFltStDt.loe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltStDt()))) - .and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))) - .or((bas.schFltStDt.goe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))) - .and(bas.delYn.eq("N")) - .and(((coord.lon.goe(0.1)) - .and(coord.lat.goe(0.1))))) + .and(bas.schFltEndDt.goe(rq.getSchFltEndDt()))) + .or((bas.schFltStDt.goe(rq.getSchFltStDt())) + .and((bas.schFltStDt.loe(rq.getSchFltEndDt())) + .and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))) + .or(((bas.schFltStDt.loe(rq.getSchFltStDt())) + .and(bas.schFltEndDt.goe(rq.getSchFltStDt()))) + .and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))) + .or((bas.schFltStDt.goe(rq.getSchFltStDt())) + .and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))) + .and(bas.delYn.eq("N")) + .and(((coord.lon.goe(0.1)) + .and(coord.lat.goe(0.1))))) .groupBy(area.planAreaSno) .fetch(); - return list; + return list; } + // 조종사 조회 public List listPilot(String groupId) { // QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas; @@ -379,7 +370,7 @@ public class FltPlanQueryRepository { .fetch(); return r; } - + // 기체 조회 public List listArcrft(String groupId) { QComArcrftBas arcrft = QComArcrftBas.comArcrftBas; @@ -390,22 +381,22 @@ public class FltPlanQueryRepository { builder.and(group.groupId.eq(groupId)).and(idntf.idntfNum.isNotNull()); List models = query.select(Projections.bean( - BasFlightPlanArcrftModel.class, - arcrft.arcrftSno, - arcrft.arcrftModelNm, - arcrft.arcrftTypeCd, - arcrft.prdctNum, - arcrft.prdctCmpnNm, - arcrft.prdctDate, - arcrft.useYn, - arcrft.createUserId, - group.groupId, - group.groupNm, - group.groupTypeCd, - idntf.idntfNum, - idntf.ownerNm, - idntf.hpno, - idntf.idntfTypeCd + BasFlightPlanArcrftModel.class, + arcrft.arcrftSno, + arcrft.arcrftModelNm, + arcrft.arcrftTypeCd, + arcrft.prdctNum, + arcrft.prdctCmpnNm, + arcrft.prdctDate, + arcrft.useYn, + arcrft.createUserId, + group.groupId, + group.groupNm, + group.groupTypeCd, + idntf.idntfNum, + idntf.ownerNm, + idntf.hpno, + idntf.idntfTypeCd )) .from(arcrft) .leftJoin(group) @@ -423,7 +414,7 @@ public class FltPlanQueryRepository { QFltPlanArea area = QFltPlanArea.fltPlanArea; BooleanBuilder builder = new BooleanBuilder(); // if (userAccount.equals("CREATER") || userAccount.equals("ADMIN")) { - if(masterAccount != null) { + if (masterAccount != null) { if (masterAccount.equals("SPUER") || masterAccount.equals("ADMIN")) { builder.and(bas.groupId.in(rq.getGroupId())); } else { @@ -485,15 +476,16 @@ public class FltPlanQueryRepository { )) ); - return new PageImpl<>(r,pageable, r.size()); + return new PageImpl<>(r, pageable, r.size()); } + public long aprvCount(BasFlightPlanListRq rq, String masterAccount) { QFltPlanBas bas = QFltPlanBas.fltPlanBas; QFltPlanArea area = QFltPlanArea.fltPlanArea; BooleanBuilder builder = new BooleanBuilder(); // if (userAccount.equals("CREATER") || userAccount.equals("ADMIN")) { - if(masterAccount != null) { + if (masterAccount != null) { if (masterAccount.equals("SUPER") || masterAccount.equals("ADMIN")) { builder.and(bas.groupId.in(rq.getGroupId())); } else { @@ -553,12 +545,13 @@ public class FltPlanQueryRepository { )) ); long cnt = 0; - for(BasFlightPlanModel lis : list) { - cnt++; + for (BasFlightPlanModel lis : list) { + cnt++; } return cnt; } + @Cacheable(value = "schedule") public List findSchedule(String searchDate) { QFltPlanBas fltPlanBas = QFltPlanBas.fltPlanBas; @@ -570,10 +563,10 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); DateTemplate flightStartDate = Expressions.dateTemplate( - Instant.class,"DATE({0})", fltPlanBas.schFltStDt); + Instant.class, "DATE({0})", fltPlanBas.schFltStDt); DateTemplate flightEndDate = Expressions.dateTemplate( - Instant.class,"DATE({0})", fltPlanBas.schFltEndDt); + Instant.class, "DATE({0})", fltPlanBas.schFltEndDt); builder.and(flightStartDate.loe(DateUtils.stringToDate(searchDate))) .and(flightEndDate.goe(DateUtils.stringToDate(searchDate))) @@ -584,36 +577,36 @@ public class FltPlanQueryRepository { BasFlightScheduleRs.class, fltPlanBas.groupId, ExpressionUtils.as( - JPAExpressions.select(groupBas.groupNm) - .from(groupBas) - .where(groupBas.groupId.eq(fltPlanBas.groupId)),"groupNm" + JPAExpressions.select(groupBas.groupNm) + .from(groupBas) + .where(groupBas.groupId.eq(fltPlanBas.groupId)), "groupNm" ), fltPlanArcrft.ownerNm, fltPlanArcrft.idntfNum, ExpressionUtils.as( JPAExpressions.select( - cntrlHstryArea.area1.concat(" ") - .concat(cntrlHstryArea.area2).concat(" ") - .concat(cntrlHstryArea.area3).concat(" ") - .concat(cntrlHstryArea.landNm).concat(" ") - .concat(cntrlHstryArea.landNum) - ) - .from(cntrlHstryArea) - .where(cntrlHstryArea.cntrlId.eq(cntrlBas.cntrlId) - .and(cntrlHstryArea.actnType.eq("01"))), + cntrlHstryArea.area1.concat(" ") + .concat(cntrlHstryArea.area2).concat(" ") + .concat(cntrlHstryArea.area3).concat(" ") + .concat(cntrlHstryArea.landNm).concat(" ") + .concat(cntrlHstryArea.landNum) + ) + .from(cntrlHstryArea) + .where(cntrlHstryArea.cntrlId.eq(cntrlBas.cntrlId) + .and(cntrlHstryArea.actnType.eq("01"))), "startAddress" ), ExpressionUtils.as( JPAExpressions.select( - cntrlHstryArea.area1.concat(" ") - .concat(cntrlHstryArea.area2).concat(" ") - .concat(cntrlHstryArea.area3).concat(" ") - .concat(cntrlHstryArea.landNm).concat(" ") - .concat(cntrlHstryArea.landNum) + cntrlHstryArea.area1.concat(" ") + .concat(cntrlHstryArea.area2).concat(" ") + .concat(cntrlHstryArea.area3).concat(" ") + .concat(cntrlHstryArea.landNm).concat(" ") + .concat(cntrlHstryArea.landNum) ) .from(cntrlHstryArea) .where(cntrlHstryArea.cntrlId.eq(cntrlBas.cntrlId) - .and(cntrlHstryArea.actnType.eq("99"))), + .and(cntrlHstryArea.actnType.eq("99"))), "endAddress" ), fltPlanBas.schFltStDt, @@ -622,9 +615,9 @@ public class FltPlanQueryRepository { cntrlBas.cntrlStDt, cntrlBas.cntrlEndDt, new CaseBuilder() - .when(cntrlBas.statusCd.eq("01")).then("F") - .when(cntrlBas.statusCd.eq("99")).then("S") - .otherwise("B").as("statusCd") + .when(cntrlBas.statusCd.eq("01")).then("F") + .when(cntrlBas.statusCd.eq("99")).then("S") + .otherwise("B").as("statusCd") ) ) .from(fltPlanBas) @@ -648,10 +641,10 @@ public class FltPlanQueryRepository { BooleanBuilder parameter = new BooleanBuilder(); DateTemplate flightStartDate = Expressions.dateTemplate( - Instant.class,"DATE({0})", fltPlanBas.schFltStDt); + Instant.class, "DATE({0})", fltPlanBas.schFltStDt); DateTemplate flightEndDate = Expressions.dateTemplate( - Instant.class,"DATE({0})", fltPlanBas.schFltEndDt); + Instant.class, "DATE({0})", fltPlanBas.schFltEndDt); parameter.and(flightStartDate.loe(DateUtils.stringToDatetime(serverReceiveDate))) .and(flightEndDate.goe(DateUtils.stringToDatetime(serverReceiveDate))) @@ -669,18 +662,19 @@ public class FltPlanQueryRepository { /** * 김포공항, 비행승인 통계 API + * * @param date * @return - */ - public List mainStcsPlanAllow(String date, String[] formatParam){ - + */ + public List mainStcsPlanAllow(String date, String[] formatParam) { + QFltPlanBas bas = QFltPlanBas.fltPlanBas; - + StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" , bas.aprvlDt , ConstantImpl.create(formatParam[0])); - + StringTemplate formattedDate2 = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" , bas.aprvlDt @@ -688,22 +682,22 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.aprvlYn.eq("Y")); - if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if (date != null && date.length() > 0) builder.and(formattedDate.eq(date)); List result = query .select( - Projections.bean( - MainDashStcsModel.class , - formattedDate2.as("typeCd"), - bas.count().as("count") - ) + Projections.bean( + MainDashStcsModel.class, + formattedDate2.as("typeCd"), + bas.count().as("count") + ) ) .from(bas) .where(builder) .groupBy(formattedDate2) - .fetch(); + .fetch(); - if(result.size() <= 0){ + if (result.size() <= 0) { MainDashStcsModel node = new MainDashStcsModel(); node.setCount(0); @@ -715,4 +709,281 @@ public class FltPlanQueryRepository { return result; } + // laanc 승인 목록 + public Page findAllAprvListBySearch(LaancAprvSearchDto serach, Pageable pageable) { + + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + QFltPlanArea area = QFltPlanArea.fltPlanArea; + QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft; + + // TODO serach + BooleanBuilder builder = new BooleanBuilder(); + + + JPAQuery jpaQuery = query.from(bas) + .leftJoin(area) + .on(bas.planSno.eq(area.planSno)) + .leftJoin(arcrft) + .on(bas.planSno.eq(arcrft.planSno)) + .where(builder); + + JPAQuery countQuery = jpaQuery.clone(); + + + if (pageable != null) { + jpaQuery.offset(pageable.getOffset()); + jpaQuery.limit(pageable.getPageSize()); + } + + List list = jpaQuery.transform( + GroupBy.groupBy(bas.planSno) + .list(Projections.bean( + LaancPlanDto.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, + bas.corpRegYn, + bas.serviceType, + GroupBy.list(Projections.bean( + LaancPlanAreaDto.class, + area.planAreaSno, + area.planSno, + area.areaType, + area.fltMethod, + area.fltAreaAddr, + area.bufferZone, + area.fltElev, + area.createUserId, + area.createDt, + area.updateUserId, + area.updateDt, + area.fltMothoeRm + ).skipNulls()).as("areaList"), + GroupBy.list(Projections.bean( + LaancPlanArcrftDto.class, + arcrft.planArcrftSno, + arcrft.planSno, + arcrft.arcrftSno, + arcrft.idntfNum, + arcrft.groupNm, + arcrft.prdctNum, + arcrft.arcrftTypeCd, + arcrft.arcrftModelNm, + arcrft.prdctCmpnNm, + arcrft.prdctDate, + arcrft.arcrftLngth, + arcrft.arcrftWdth, + arcrft.arcrftHght, + arcrft.arcrftWght, + arcrft.arcrftWghtCd, + arcrft.wghtTypeCd, + arcrft.imageUrl, + arcrft.takeoffWght, + arcrft.useYn, + arcrft.cameraYn, + arcrft.insrncYn, + arcrft.ownerNm, + arcrft.createUserId, + arcrft.createDt, + arcrft.updateUserId, + arcrft.updateDt, + arcrft.acrftInsuranceYn, + arcrft.insuranceExperiod, + arcrft.corporationNm + ).skipNulls()).as("arcrftList") + ).skipNulls()) + ); + + // 카운트 쿼리 + int size = countQuery.fetch().size(); + + if (pageable == null) { + pageable = Pageable.unpaged(); + } + + Page laancPlanDtos = new PageImpl<>(list, pageable, size); + + return laancPlanDtos; + } + + // laanc 승인 상세 + public LaancPlanDto findAprvById(Integer planSno) { + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + QFltPlanArea area = QFltPlanArea.fltPlanArea; + QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord; + QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft; + QFltPlanPilot pilot = QFltPlanPilot.fltPlanPilot; + + + List list = query.from(bas) +// .leftJoin(area) +// .on(bas.planSno.eq(area.planSno)) +// .leftJoin(coord) +// .on(area.planAreaSno.eq(coord.planAreaSno)) + .leftJoin(arcrft) + .on(bas.planSno.eq(arcrft.planSno)) + .leftJoin(pilot) + .on(bas.planSno.eq(pilot.planSno)) + .where(bas.planSno.eq(planSno)) + .transform( + GroupBy.groupBy(bas.planSno) + .list(Projections.bean( + LaancPlanDto.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, + bas.corpRegYn, + bas.serviceType, +// GroupBy.list(Projections.bean( +// LaancPlanAreaDto.class, +// area.planAreaSno, +// area.planSno, +// area.areaType, +// area.fltMethod, +// area.fltAreaAddr, +// area.bufferZone, +// area.fltElev, +// area.createUserId, +// area.createDt, +// area.updateUserId, +// area.updateDt, +// area.fltMothoeRm +//// GroupBy.list(Projections.bean( +//// LaancPlanareaCoordDto.class, +//// coord.planAreaCoordSno, +//// coord.planAreaSno, +//// coord.lon, +//// coord.lat, +//// coord.createUserId, +//// coord.createDt +//// ).skipNulls()).as("coordList") +// ).skipNulls()).as("areaList"), + GroupBy.list(Projections.bean( + LaancPlanArcrftDto.class, + arcrft.planArcrftSno, + arcrft.planSno, + arcrft.arcrftSno, + arcrft.idntfNum, + arcrft.groupNm, + arcrft.prdctNum, + arcrft.arcrftTypeCd, + arcrft.arcrftModelNm, + arcrft.prdctCmpnNm, + arcrft.prdctDate, + arcrft.arcrftLngth, + arcrft.arcrftWdth, + arcrft.arcrftHght, + arcrft.arcrftWght, + arcrft.arcrftWghtCd, + arcrft.wghtTypeCd, + arcrft.imageUrl, + arcrft.takeoffWght, + arcrft.useYn, + arcrft.cameraYn, + arcrft.insrncYn, + arcrft.ownerNm, + arcrft.createUserId, + arcrft.createDt, + arcrft.updateUserId, + arcrft.updateDt, + arcrft.acrftInsuranceYn, + arcrft.insuranceExperiod, + arcrft.corporationNm + ).skipNulls()).as("arcrftList"), + GroupBy.list(Projections.bean( + LaancPlanPilotDto.class, + pilot.planPilotSno, + pilot.planSno, + pilot.cstmrSno, + pilot.groupNm, + pilot.memberName, + pilot.email, + pilot.hpno, + pilot.clncd, + pilot.addr, + pilot.addrDtlCn, + pilot.zip, + pilot.qlfcNo, + pilot.carrer, + pilot.createUserId, + pilot.createDt, + pilot.updateUserId, + pilot.updateDt + ).skipNulls()).as("pilotList") + ).skipNulls()) + ); + + Optional first = list.stream().findFirst(); + if (first.isEmpty()) { + return null; + } + LaancPlanDto result = first.get(); + + List areaList = query.from(area) + .leftJoin(coord) + .on(area.planAreaSno.eq(coord.planAreaSno)) + .where(area.planSno.eq(planSno)) + .transform( + GroupBy.groupBy(area.planAreaSno).list(Projections.bean( + LaancPlanAreaDto.class, + area.planAreaSno, + area.planSno, + area.areaType, + area.fltMethod, + area.fltAreaAddr, + area.bufferZone, + area.fltElev, + area.createUserId, + area.createDt, + area.updateUserId, + area.updateDt, + area.fltMothoeRm, + GroupBy.list(Projections.bean( + LaancPlanareaCoordDto.class, + coord.planAreaCoordSno, + coord.planAreaSno, + coord.lon, + coord.lat, + coord.createUserId, + coord.createDt + ).skipNulls()).as("coordList") + )) + ); + + result.setAreaList(areaList); + return result; + } + } \ No newline at end of file diff --git a/pav-server/src/main/java/com/palnet/comn/utils/PageUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/PageUtils.java new file mode 100644 index 0000000..a92c4ef --- /dev/null +++ b/pav-server/src/main/java/com/palnet/comn/utils/PageUtils.java @@ -0,0 +1,28 @@ +package com.palnet.comn.utils; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +/** + * packageName : com.palnet.comn.utils + * fileName : PageUtils + * author : dhji + * date : 2023-10-10(010) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-10(010) dhji 최초 생성 + */ +public class PageUtils { + public static Page convert(Page sourcePage, List contentList) { + Pageable pageable = sourcePage.getPageable(); + long totalElements = sourcePage.getTotalElements(); + + return new PageImpl<>(contentList, pageable, totalElements); + } + +} diff --git a/pav-server/src/main/resources/application-database.yml b/pav-server/src/main/resources/application-database.yml index cb2fcb0..5bbec65 100644 --- a/pav-server/src/main/resources/application-database.yml +++ b/pav-server/src/main/resources/application-database.yml @@ -9,8 +9,8 @@ spring: jdbc-url: jdbc:log4jdbc:mysql://43.200.235.135:3306/PAV_KAC?characterEncoding=UTF-8&autoReconnect=true&useSSL=false username: pav-kac password: palnet!234 -# minimumidle: 5 - maximumpoolsize: 1 + minimumidle: 5 + maximumpoolsize: 5 idletimeout: 60000 maxlifetime: 300000 connectiontimeout: 30000 diff --git a/pav-server/src/test/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvServiceTest.java b/pav-server/src/test/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvServiceTest.java new file mode 100644 index 0000000..f2d17cb --- /dev/null +++ b/pav-server/src/test/java/com/palnet/biz/api/bas/laanc/service/BasLaancAprvServiceTest.java @@ -0,0 +1,37 @@ +package com.palnet.biz.api.bas.laanc.service; + +import com.palnet.biz.api.bas.laanc.model.BasLaancAprvRs; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.test.context.ActiveProfiles; + +@Slf4j +@ActiveProfiles("local") +@SpringBootTest +class BasLaancAprvServiceTest { + + @Autowired + private BasLaancAprvService basLaancAprvService; + + @Test + void getLaancAprvList() { + Page laancAprvList = basLaancAprvService.getLaancAprvList(null, null); + log.info(">>> pageable is null : {}::{}::{}",laancAprvList.getTotalElements(), laancAprvList.getContent().size(), laancAprvList); + Pageable pageable = PageRequest.of(0, 2); + Page laancAprvList1 = basLaancAprvService.getLaancAprvList(null, pageable); + log.info(">>> pageable is not null : {}::{}::{}",laancAprvList1.getTotalElements(), laancAprvList1.getContent().size(), laancAprvList1); + } + + @Test + void getLaancAprvDetail() { + BasLaancAprvRs rs1 = basLaancAprvService.getLaancAprvDetail("92"); + log.info(">>> rs1 : {}", rs1); +// BasLaancAprvRs rs2 = basLaancAprvService.getLaancAprvDetail("91"); +// log.info(">>> rs2 : {}", rs2); + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..6cc9165 --- /dev/null +++ b/pav-server/src/test/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepositoryTest.java @@ -0,0 +1,35 @@ +package com.palnet.biz.jpa.repository.flt; + +import com.palnet.biz.api.bas.laanc.model.BasLaancAprvRs; +import com.palnet.biz.jpa.model.LaancPlanDto; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.test.context.ActiveProfiles; + +@Slf4j +@ActiveProfiles("local") +@SpringBootTest +class FltPlanQueryRepositoryTest { + + @Autowired + private FltPlanQueryRepository fltPlanQueryRepository; + + @Test + void findAllAprvListBySearch() { + 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); + + } + + @Test + void findAprvById() { + BasLaancAprvRs rs = new BasLaancAprvRs(); + } +} \ No newline at end of file