From 84219237599a2d9ec52780c79378978e5850859b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9E=AC=EC=9A=B0?= <박재우@DESKTOP-EF7ECBO> Date: Thu, 25 Aug 2022 17:34:25 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B9=84=ED=96=89=EA=B3=84=ED=9A=8D=EC=84=9C?= =?UTF-8?q?=20-=20=EC=9E=91=EC=84=B1=20=EC=8B=9C=20=EA=B8=B0=EC=B2=B4?= =?UTF-8?q?=EB=B3=84=20=EC=9D=BC=EC=9E=90=20=EC=A4=91=EB=B3=B5=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=20,=20=EC=9D=BC=EC=9E=90=EB=B3=84=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EA=B5=AC=EC=97=AD=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BasFlightPlanAreaCoordQueryList.java | 16 ++ .../model/BasFlightPlanAreaCoordRq.java | 15 ++ .../bas/flight/service/BasFlightService.java | 212 ++++++++++++++++-- .../flt/FltPlanArcrftRepository.java | 11 +- .../flt/FltPlanAreaCoordRepository.java | 7 + .../repository/flt/FltPlanBasRepository.java | 22 +- .../flt/FltPlanQueryRepository.java | 113 +++++++++- .../com/palnet/comn/utils/FlightUtils.java | 4 +- 8 files changed, 379 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordQueryList.java create mode 100644 src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordRq.java diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordQueryList.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordQueryList.java new file mode 100644 index 0000000..1ff2498 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordQueryList.java @@ -0,0 +1,16 @@ +package com.palnet.biz.api.bas.flight.model; + +import java.util.List; + +import org.locationtech.jts.geom.Coordinate; + +import lombok.Data; + +@Data +public class BasFlightPlanAreaCoordQueryList { + + private Integer planAreaCoordSno; + private Integer planAreaSno; + private List queryCoordList; + +} \ No newline at end of file diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordRq.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordRq.java new file mode 100644 index 0000000..e84567c --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordRq.java @@ -0,0 +1,15 @@ +package com.palnet.biz.api.bas.flight.model; + +import java.util.Date; + +import lombok.Data; + +@Data +public class BasFlightPlanAreaCoordRq { + private Integer planAreaSno; + private Integer bufferZone; + private double lat; + private double lon; + private String areaType; + private Integer cnt; +} 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 index 6b2f343..0207818 100644 --- 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 @@ -1,22 +1,44 @@ package com.palnet.biz.api.bas.flight.service; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.StringUtils; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.GeometryFactory; +import org.locationtech.jts.geom.Polygon; +import org.springframework.stereotype.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.api.bas.flight.model.BasFlightAprovRq; +import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; +import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordModel; +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.jpa.entity.FltPlanArcrft; +import com.palnet.biz.jpa.entity.FltPlanArea; +import com.palnet.biz.jpa.entity.FltPlanAreaCoord; +import com.palnet.biz.jpa.entity.FltPlanBas; +import com.palnet.biz.jpa.entity.FltPlanPilot; import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository; -import com.palnet.biz.jpa.repository.flt.*; +import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanAreaCoordRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanAreaRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanPilotRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; import com.palnet.comn.utils.AreaUtils; import com.palnet.comn.utils.EncryptUtils; +import com.palnet.comn.utils.FlightUtils; + import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.StringUtils; -import org.locationtech.jts.geom.Coordinate; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; @Log4j2 @@ -88,7 +110,173 @@ public class BasFlightService { // 비행계획서 등록 public boolean createPlan(BasFlightPlanModel rq) { - // 비행계획서 + // 비행계획서 등록 시 계획일자 중복 , 비행구역 중복 체크 + GeometryFactory geometryFactory = new GeometryFactory(); + List arcrftModelList = rq.getArcrftList(); + List areaModelList = rq.getAreaList(); + for(int i = 0; i < arcrftModelList.size(); i++) { + + String idntfNum = arcrftModelList.get(i).getIdntfNum(); + int size = fltPlanQueryRepository.arcrftCheck(rq, idntfNum).size(); + if( size != 0) { + System.out.println("비행계획일자 중복 오류 : " + fltPlanQueryRepository.arcrftCheck(rq, idntfNum) + "식별번호 : "+ idntfNum); + return false; + }else { + log.info(">>> 비행계획일자에 중복된 데이터가 없습니다.", ""); + } + } + List coordList = new ArrayList<>(); + List bufferCoord = new ArrayList<>(); + + List queryList = fltPlanQueryRepository.CoordCheck(rq); + List queryCount = fltPlanQueryRepository.CoordCount(rq); + + String type = null; + String queryType = null; + Integer bufferZone = null; + Integer queryBufferZone = null; + Coordinate queryCoord = null; + Coordinate coord = null; + for(int i = 0; i coordModelList = areaModelList.get(i).getCoordList(); + type = rq.getAreaList().get(i).getAreaType(); + bufferZone = rq.getAreaList().get(i).getBufferZone(); + Double lat; + Double lon; + + for(int j = 0; j transCoordList = areaUtils.transform(coordList, "EPSG:4326", "EPSG:5181"); + if("LINE".equals(type)){ + System.out.println("LINE"); + bufferCoord = areaUtils.buffer(transCoordList, bufferZone); + } + if("CIRCLE".equals(type)) { + System.out.println("CIRCLE"); + bufferCoord = areaUtils.createCircle(coord, bufferZone); + System.out.println("CIRCLE COORD : " + bufferCoord); + } + if("POLYGON".equals(type)) { + System.out.println("POLYGON"); + Polygon polygon = geometryFactory.createPolygon(coordList.toArray(new Coordinate[] {})); + Coordinate[] coords = polygon.getCoordinates(); + bufferCoord.addAll(Arrays.asList(coords)); + } + List reverseBufferList = areaUtils.transform(bufferCoord, "EPSG:5181","EPSG:4326"); + System.out.println("rq 버퍼리스트 : " + reverseBufferList); + int k=0; + for(int i = 0; i queryBufferCoord = new ArrayList<>(); + List queryCoordList = new ArrayList<>(); + queryType = queryCount.get(i).getAreaType(); + queryBufferZone = queryCount.get(i).getBufferZone(); + System.out.println(queryList); + System.out.println(">>>>>" + queryType); + + for(int j=0; j< queryCount.get(i).getCnt(); j++) { + Double lat = queryList.get(k).getLat(); + Double lon = queryList.get(k).getLon(); + System.out.println(lon + "," + lat); + k++; + queryCoord = new Coordinate(lon , lat); + queryCoordList.add(queryCoord); + } + List transQueryCoordList = areaUtils.transform(queryCoordList, "EPSG:4326", "EPSG:5181"); + + if("LINE".equals(queryType)){ + System.out.println("QUERYLINE"); + queryBufferCoord = areaUtils.buffer(transQueryCoordList, queryBufferZone); + + } + if("CIRCLE".equals(queryType)) { + System.out.println("QUERYCIRCLE"); + queryBufferCoord = areaUtils.createCircle(queryCoord, queryBufferZone); + + } + if("POLYGON".equals(queryType)) { + System.out.println("QUERYPOLYGON"); + queryCoord = new Coordinate(queryCoordList.get(0).getX(),queryCoordList.get(0).getY()); + queryCoordList.add(queryCoord); + Polygon polygon = geometryFactory.createPolygon(queryCoordList.toArray(new Coordinate[] {})); + Coordinate[] coords = polygon.getCoordinates(); + queryBufferCoord.addAll(Arrays.asList(coords)); + + } + System.out.println("---------분기점2---------"); + + List reverseQueryBufferList = areaUtils.transform(queryBufferCoord, "EPSG:5181","EPSG:4326"); + queryCoord = new Coordinate(reverseQueryBufferList.get(0).getX(),reverseQueryBufferList.get(0).getY()); + reverseQueryBufferList.add(queryCoord); + Coordinate[] rqPoly= null; + Coordinate[] queryPoly= null; + boolean rqContains = false; + boolean queryContains = false; + List rqCooCheck = new ArrayList<>(); + List queryCooCheck = new ArrayList<>(); + if("LINE".equals(type)) { + rqPoly = reverseBufferList.toArray(new Coordinate[] {}); + } else { + rqPoly = bufferCoord.toArray(new Coordinate[] {}); + } + + if("LINE".equals(queryType)) { + queryPoly = reverseQueryBufferList.toArray(new Coordinate[] {}); + } else { + queryPoly = queryBufferCoord.toArray(new Coordinate[] {}); + } + for(Coordinate co : rqPoly) { + System.out.println(co.x + "," + co.y); + Coordinate coo = new Coordinate(co.x , co.y); + rqCooCheck.add(coo); + } + System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ"); + for(Coordinate co : queryPoly) { + System.out.println(co.x + "," + co.y); + Coordinate coo = new Coordinate(co.x , co.y); + queryCooCheck.add(coo); + } + for(Coordinate co : queryPoly) { + Coordinate coo = new Coordinate(co.x , co.y); + boolean Q = areaUtils.contains(rqCooCheck, coo); + if(Q == true) { + rqContains = true; + break; + } + } + for(Coordinate co : rqPoly) { + Coordinate coo = new Coordinate(co.x , co.y); + boolean Q = areaUtils.contains(queryCooCheck, coo); + if(Q == true) { + queryContains = true; + break; + } + } + boolean check = FlightUtils.overlaps(rqPoly, queryPoly); + boolean checks = FlightUtils.overlaps(queryPoly, rqPoly); + + + if(check == true || checks == true || rqContains == true || queryContains == true) { + System.out.println("설정한 시간 내에 중복된 비행구역이 존재합니다."); + return false; + }else { + System.out.println(i + "번째 리스트에는 중복된 비행구역이 존재하지 않습니다."); + } + } + System.out.println("중복된 비행구역이 존재하지 않습니다. 비행계획서를 생성합니다."); + + + //비행계획서 String userId = jwtTokenUtil.getCstmrSnoByToken().toString(); FltPlanBas basEntity = BasFlightMapper.mapper.modelToEntity(rq); basEntity.setDelYn("N"); @@ -98,7 +286,6 @@ public class BasFlightService { FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity); Integer planSno = rBasEntity.getPlanSno(); // 비행구역 - List areaModelList = rq.getAreaList(); if (areaModelList != null && !areaModelList.isEmpty()) { for (BasFlightPlanAreaModel areaModel : areaModelList) { FltPlanArea areaEntity = BasFlightMapper.mapper.modelToEntity(areaModel); @@ -133,7 +320,6 @@ public class BasFlightService { // 기체 - List arcrftModelList = rq.getArcrftList(); if (arcrftModelList != null && !arcrftModelList.isEmpty()) { for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) { FltPlanArcrft arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel); 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 a07c0f3..fafab01 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,13 +1,22 @@ 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 org.springframework.data.jpa.repository.Query; import java.util.List; +import java.util.Optional; public interface FltPlanArcrftRepository extends JpaRepository { List findByPlanSnoOrderByPlanArcrftSnoAsc(Integer planSno); - + + @Query("select f from FltPlanArcrft f " + + "where f.arcrftModelNm = :arcrftModelNm ") + List findByarcrftModelNm(String arcrftModelNm); + + List findByIdntfNumAndArcrftSnoOrderByPlanArcrftSnoAsc(String idntfNum, Integer acrftSno); } 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 3b2a628..a78abad 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 @@ -2,11 +2,18 @@ package com.palnet.biz.jpa.repository.flt; import com.palnet.biz.jpa.entity.FltPlanAreaCoord; import com.palnet.biz.jpa.entity.FltPlanBas; + +import org.locationtech.jts.geom.Coordinate; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import java.util.List; import java.util.Optional; public interface FltPlanAreaCoordRepository extends JpaRepository { + List findByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(Integer planAreaSno); + + @Query("Select lat, lon from FltPlanAreaCoord ") + Coordinate[] findCoord(); } 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 ee8e47a..69bc74e 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 @@ -1,5 +1,6 @@ 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; @@ -13,7 +14,22 @@ import java.util.List; import java.util.Optional; public interface FltPlanBasRepository extends JpaRepository { - + @Query("select f from FltPlanBas f " + + "where ((SCH_FLT_ST_DT <= :schFltStDt and SCH_FLT_END_DT >= :schFltEndDt)" + + "or (SCH_FLT_ST_DT >= :schFltStDt and (SCH_FLT_ST_DT <= :schFltEndDt and SCH_FLT_END_DT >= :schFltEndDt ))" + + "or ((SCH_FLT_ST_DT <= :schFltStDt and SCH_FLT_END_DT >= :schFltStDt) and SCH_FLT_END_DT <= :schFltEndDt)" + + "or (SCH_FLT_ST_DT >= :schFltStDt and SCH_FLT_END_DT <= :schFltEndDt)) and DEL_YN='N'") + List findByStartEndDate(@Param("schFltStDt") Date schFltStDt,@Param("schFltEndDt") Date schFltEndDt); + +// @Query("select f from FltPlanBas f " + +// "where f.schFltStDt >= :schFltStDt " + +// "and f.schFltEndDt <= :schFltEndDt "+ +// "and f.delYn = 'N'") +// List findByDate(@Param("schFltStDt") Date schFltStDt, @Param("schFltEndDt") Date schFltEndDt); +// + + + Optional findByPlanSnoAndDelYnNot(Integer planSno, String delYn); @Query("select f from FltPlanBas f " + @@ -24,10 +40,12 @@ public interface FltPlanBasRepository extends JpaRepository Optional findByGroupFlightPlan(@Param("planSno") Integer planSno, @Param("aprvlYn") String aprvlYn, @Param("fltNowDt") Date fltNowDt); - + + @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/FltPlanQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java index 377b9b2..2545133 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -4,10 +4,12 @@ import com.palnet.biz.api.bas.flight.model.*; import com.palnet.biz.jpa.entity.*; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.group.GroupBy; +import com.querydsl.core.types.Predicate; 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; @@ -26,7 +28,7 @@ public class FltPlanQueryRepository { public List listPlan(BasFlightPlanListRq rq) { QFltPlanBas bas = QFltPlanBas.fltPlanBas; QFltPlanArea area = QFltPlanArea.fltPlanArea; - + BooleanBuilder builder = new BooleanBuilder(); if (rq.getGroupId() != null) { @@ -50,7 +52,7 @@ public class FltPlanQueryRepository { builder.and(bas.aprvlYn.eq(rq.getAprvlYn())); } builder.and(bas.delYn.ne("Y")); - + List r = query .from(bas) .leftJoin(area) @@ -98,7 +100,110 @@ public class FltPlanQueryRepository { return r; } - + //동일 기체 등록시 비행시간 중복여부 조회 + public List arcrftCheck(BasFlightPlanModel rq, String idntfNum){ + QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + + List list = query + .select(Projections.bean( + BasFlightPlanModel.class, + bas.schFltStDt, + bas.schFltEndDt, + bas.delYn + )) + .from(bas) + .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"))) + .fetch(); + return list; + + } + // 비행계획구역 설정시 같은 시간대에 구역이 중복되는지 조회 + public List CoordCheck(BasFlightPlanModel rq){ + QFltPlanArea area = QFltPlanArea.fltPlanArea; + QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord; + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + + List list = query + .select(Projections.bean( + BasFlightPlanAreaCoordRq.class, + coord.lon, + coord.lat, + area.bufferZone, + area.areaType, + area.planAreaSno + )) + .from(bas) + .leftJoin(area) + .on(bas.planSno.eq(area.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))))) + .fetch(); + return list; + } + //CoordCheck에 들어갈 count + public List CoordCount(BasFlightPlanModel rq){ + QFltPlanArea area = QFltPlanArea.fltPlanArea; + QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord; + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + + List list = query + .select(Projections.bean( + BasFlightPlanAreaCoordRq.class, + coord.lon, + coord.lat, + area.bufferZone, + area.areaType, + area.planAreaSno.count().intValue().as("cnt") + )) + .from(bas) + .leftJoin(area) + .on(bas.planSno.eq(area.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))))) + .groupBy(area.planAreaSno) + .fetch(); + return list; + } // 조종사 조회 public List listPilot(String groupId) { // QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas; @@ -131,7 +236,7 @@ public class FltPlanQueryRepository { .fetch(); return r; } - + // 기체 조회 public List listArcrft(String groupId) { QComArcrftBas arcrft = QComArcrftBas.comArcrftBas; diff --git a/src/main/java/com/palnet/comn/utils/FlightUtils.java b/src/main/java/com/palnet/comn/utils/FlightUtils.java index 7768142..3ac42ec 100644 --- a/src/main/java/com/palnet/comn/utils/FlightUtils.java +++ b/src/main/java/com/palnet/comn/utils/FlightUtils.java @@ -1,5 +1,7 @@ package com.palnet.comn.utils; +import java.util.List; + import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.CoordinateSequence; import org.locationtech.jts.geom.Geometry; @@ -69,7 +71,7 @@ public class FlightUtils { return contains; } //생성된 버퍼좌표와 공역의 좌표가 충돌하는지를 판단하는 유틸 - public static boolean overlaps(Coordinate[] bufferCoords, Coordinate[] overlapCoords) { + public static boolean overlaps(Coordinate[] bufferCoords,Coordinate[] overlapCoords) { GeometryFactory geometryFactory = new GeometryFactory();