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/model/BasFlightPlanResultMessageRq.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanResultMessageRq.java new file mode 100644 index 0000000..9da2d4c --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanResultMessageRq.java @@ -0,0 +1,12 @@ +package com.palnet.biz.api.bas.flight.model; + +import lombok.Data; + +@Data +public class BasFlightPlanResultMessageRq { + + private boolean dateCheck; + private boolean areaCheck; + private boolean finalCheck; + +} 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..1e09403 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,45 @@ 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.api.bas.flight.model.BasFlightPlanResultMessageRq; +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 @@ -44,11 +67,11 @@ public class BasFlightService { // 비행계획서 상세 조회 public BasFlightPlanModel detailPlan(Integer planSno) { - BasFlightPlanModel rs = new BasFlightPlanModel(); + BasFlightPlanModel rs = new BasFlightPlanModel(); // 비행계획서 FltPlanBas planEntity = fltPlanBasRepository.findByPlanSnoAndDelYnNot(planSno, "Y").orElse(null); if(planEntity != null){ - rs = BasFlightMapper.mapper.entityToModel(planEntity); + rs = BasFlightMapper.mapper.entityToModel(planEntity); // 버퍼영역 List areaEntityList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(planSno); if (areaEntityList != null && !areaEntityList.isEmpty()) { @@ -88,7 +111,141 @@ 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) { + BasFlightPlanResultMessageRq dateCheck = new BasFlightPlanResultMessageRq(); + dateCheck.setDateCheck(false); + return false; + }else { + + } + } + 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)){ + bufferCoord = areaUtils.buffer(transCoordList, bufferZone); + } + if("CIRCLE".equals(type)) { + bufferCoord = areaUtils.createCircle(coord, bufferZone); + } + if("POLYGON".equals(type)) { + 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"); + 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(); + 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)){ + queryBufferCoord = areaUtils.buffer(transQueryCoordList, queryBufferZone); + } + if("CIRCLE".equals(queryType)) { + queryBufferCoord = areaUtils.createCircle(queryCoord, queryBufferZone); + } + if("POLYGON".equals(queryType)) { + 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)); + } + 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) { + Coordinate coo = new Coordinate(co.x , co.y); + rqCooCheck.add(coo); + } + System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ"); + for(Coordinate co : queryPoly) { + 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) { + return false; + } + } + //비행계획서 String userId = jwtTokenUtil.getCstmrSnoByToken().toString(); FltPlanBas basEntity = BasFlightMapper.mapper.modelToEntity(rq); basEntity.setDelYn("N"); @@ -98,7 +255,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 +289,6 @@ public class BasFlightService { // 기체 - List arcrftModelList = rq.getArcrftList(); if (arcrftModelList != null && !arcrftModelList.isEmpty()) { for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) { FltPlanArcrft arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel); @@ -222,7 +377,7 @@ public class BasFlightService { if(pilotEntity == null){ pilotEntity = BasFlightMapper.mapper.modelToEntity(pilotModel); pilotEntity.setUpdateUserId(userId); -// pilotEntity.setCreateUserId(userId); + pilotEntity.setCreateUserId(userId); }else { BasFlightMapper.mapper.updateEntityByModel(pilotEntity, pilotModel); @@ -248,6 +403,7 @@ public class BasFlightService { if(arcrftEntity == null){ arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel); arcrftEntity.setUpdateUserId(userId); + arcrftEntity.setCreateUserId(userId); }else { BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, 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..2cce69e 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; @@ -139,7 +244,7 @@ public class FltPlanQueryRepository { QComIdntfBas idntf = QComIdntfBas.comIdntfBas; BooleanBuilder builder = new BooleanBuilder(); - builder.and(group.groupId.eq(groupId)); + builder.and(group.groupId.eq(groupId)).and(idntf.idntfNum.isNotNull()); List models = query.select(Projections.bean( BasFlightPlanArcrftModel.class, 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();