Browse Source

비행계획서 - 작성 시 기체별 일자 중복 체크 , 일자별 중복 구역 체크

feature/auth
박재우 2 years ago
parent
commit
8421923759
  1. 16
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordQueryList.java
  2. 15
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordRq.java
  3. 212
      src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  4. 11
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java
  5. 7
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaCoordRepository.java
  6. 22
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  7. 113
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  8. 4
      src/main/java/com/palnet/comn/utils/FlightUtils.java

16
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<Coordinate> queryCoordList;
}

15
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;
}

212
src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

@ -1,22 +1,44 @@
package com.palnet.biz.api.bas.flight.service; 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.model.JwtGroupModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.flight.model.*; import com.palnet.biz.api.bas.flight.model.BasFlightAprovRq;
import com.palnet.biz.jpa.entity.*; 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.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.AreaUtils;
import com.palnet.comn.utils.EncryptUtils; import com.palnet.comn.utils.EncryptUtils;
import com.palnet.comn.utils.FlightUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; 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 @Log4j2
@ -88,7 +110,173 @@ public class BasFlightService {
// 비행계획서 등록 // 비행계획서 등록
public boolean createPlan(BasFlightPlanModel rq) { public boolean createPlan(BasFlightPlanModel rq) {
// 비행계획서 // 비행계획서 등록 시 계획일자 중복 , 비행구역 중복 체크
GeometryFactory geometryFactory = new GeometryFactory();
List<BasFlightPlanArcrftModel> arcrftModelList = rq.getArcrftList();
List<BasFlightPlanAreaModel> 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<Coordinate> coordList = new ArrayList<>();
List<Coordinate> bufferCoord = new ArrayList<>();
List<BasFlightPlanAreaCoordRq> queryList = fltPlanQueryRepository.CoordCheck(rq);
List<BasFlightPlanAreaCoordRq> 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<arcrftModelList.size(); i++) {
List<BasFlightPlanAreaCoordModel> 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<coordModelList.size(); j++) {
lat = rq.getAreaList().get(i).getCoordList().get(j).getLat();
lon = rq.getAreaList().get(i).getCoordList().get(j).getLon();
coord = new Coordinate(lon , lat);
coordList.add(coord);
}
if("POLYGON".equals(type)) {
coord = new Coordinate(rq.getAreaList().get(i).getCoordList().get(0).getLon(),rq.getAreaList().get(i).getCoordList().get(0).getLat());
coordList.add(coord);
System.out.println("POLYGON COORDS : " + coordList);
}
}
System.out.println("---------분기점1---------");
List<Coordinate> 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<Coordinate> reverseBufferList = areaUtils.transform(bufferCoord, "EPSG:5181","EPSG:4326");
System.out.println("rq 버퍼리스트 : " + reverseBufferList);
int k=0;
for(int i = 0; i<queryCount.size(); i++) {
List<Coordinate> queryBufferCoord = new ArrayList<>();
List<Coordinate> 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<Coordinate> 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<Coordinate> 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<Coordinate> rqCooCheck = new ArrayList<>();
List<Coordinate> 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(); String userId = jwtTokenUtil.getCstmrSnoByToken().toString();
FltPlanBas basEntity = BasFlightMapper.mapper.modelToEntity(rq); FltPlanBas basEntity = BasFlightMapper.mapper.modelToEntity(rq);
basEntity.setDelYn("N"); basEntity.setDelYn("N");
@ -98,7 +286,6 @@ public class BasFlightService {
FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity); FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity);
Integer planSno = rBasEntity.getPlanSno(); Integer planSno = rBasEntity.getPlanSno();
// 비행구역 // 비행구역
List<BasFlightPlanAreaModel> areaModelList = rq.getAreaList();
if (areaModelList != null && !areaModelList.isEmpty()) { if (areaModelList != null && !areaModelList.isEmpty()) {
for (BasFlightPlanAreaModel areaModel : areaModelList) { for (BasFlightPlanAreaModel areaModel : areaModelList) {
FltPlanArea areaEntity = BasFlightMapper.mapper.modelToEntity(areaModel); FltPlanArea areaEntity = BasFlightMapper.mapper.modelToEntity(areaModel);
@ -133,7 +320,6 @@ public class BasFlightService {
// 기체 // 기체
List<BasFlightPlanArcrftModel> arcrftModelList = rq.getArcrftList();
if (arcrftModelList != null && !arcrftModelList.isEmpty()) { if (arcrftModelList != null && !arcrftModelList.isEmpty()) {
for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) { for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) {
FltPlanArcrft arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel); FltPlanArcrft arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel);

11
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java

@ -1,13 +1,22 @@
package com.palnet.biz.jpa.repository.flt; package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.jpa.entity.FltPlanArcrft; 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.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List; import java.util.List;
import java.util.Optional;
public interface FltPlanArcrftRepository extends JpaRepository<FltPlanArcrft, Integer> { public interface FltPlanArcrftRepository extends JpaRepository<FltPlanArcrft, Integer> {
List<FltPlanArcrft> findByPlanSnoOrderByPlanArcrftSnoAsc(Integer planSno); List<FltPlanArcrft> findByPlanSnoOrderByPlanArcrftSnoAsc(Integer planSno);
@Query("select f from FltPlanArcrft f " +
"where f.arcrftModelNm = :arcrftModelNm ")
List<FltPlanArcrft> findByarcrftModelNm(String arcrftModelNm);
List<FltPlanArcrft> findByIdntfNumAndArcrftSnoOrderByPlanArcrftSnoAsc(String idntfNum, Integer acrftSno); List<FltPlanArcrft> findByIdntfNumAndArcrftSnoOrderByPlanArcrftSnoAsc(String idntfNum, Integer acrftSno);
} }

7
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.FltPlanAreaCoord;
import com.palnet.biz.jpa.entity.FltPlanBas; 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.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
public interface FltPlanAreaCoordRepository extends JpaRepository<FltPlanAreaCoord, Integer> { public interface FltPlanAreaCoordRepository extends JpaRepository<FltPlanAreaCoord, Integer> {
List<FltPlanAreaCoord> findByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(Integer planAreaSno); List<FltPlanAreaCoord> findByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(Integer planAreaSno);
@Query("Select lat, lon from FltPlanAreaCoord ")
Coordinate[] findCoord();
} }

22
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java

@ -1,5 +1,6 @@
package com.palnet.biz.jpa.repository.flt; package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.jpa.entity.FltPlanBas; import com.palnet.biz.jpa.entity.FltPlanBas;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
@ -13,7 +14,22 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer> { public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer> {
@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<FltPlanBas> 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<FltPlanBas> findByDate(@Param("schFltStDt") Date schFltStDt, @Param("schFltEndDt") Date schFltEndDt);
//
Optional<FltPlanBas> findByPlanSnoAndDelYnNot(Integer planSno, String delYn); Optional<FltPlanBas> findByPlanSnoAndDelYnNot(Integer planSno, String delYn);
@Query("select f from FltPlanBas f " + @Query("select f from FltPlanBas f " +
@ -24,10 +40,12 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
Optional<FltPlanBas> findByGroupFlightPlan(@Param("planSno") Integer planSno, Optional<FltPlanBas> findByGroupFlightPlan(@Param("planSno") Integer planSno,
@Param("aprvlYn") String aprvlYn, @Param("aprvlYn") String aprvlYn,
@Param("fltNowDt") Date fltNowDt); @Param("fltNowDt") Date fltNowDt);
@Transactional @Transactional
@Modifying @Modifying
@Query("update FltPlanBas f set f.aprvlYn = :aprvlYn where f.planSno in :planSno") @Query("update FltPlanBas f set f.aprvlYn = :aprvlYn where f.planSno in :planSno")
int updateAprvlYnByPlanSnoIn(@Param("planSno") List<Integer> planSnos, @Param("aprvlYn") String aprvlYn); int updateAprvlYnByPlanSnoIn(@Param("planSno") List<Integer> planSnos, @Param("aprvlYn") String aprvlYn);
} }

113
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.palnet.biz.jpa.entity.*;
import com.querydsl.core.BooleanBuilder; import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.group.GroupBy; import com.querydsl.core.group.GroupBy;
import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.Projections; import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory; import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@ -26,7 +28,7 @@ public class FltPlanQueryRepository {
public List<BasFlightPlanModel> listPlan(BasFlightPlanListRq rq) { public List<BasFlightPlanModel> listPlan(BasFlightPlanListRq rq) {
QFltPlanBas bas = QFltPlanBas.fltPlanBas; QFltPlanBas bas = QFltPlanBas.fltPlanBas;
QFltPlanArea area = QFltPlanArea.fltPlanArea; QFltPlanArea area = QFltPlanArea.fltPlanArea;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if (rq.getGroupId() != null) { if (rq.getGroupId() != null) {
@ -50,7 +52,7 @@ public class FltPlanQueryRepository {
builder.and(bas.aprvlYn.eq(rq.getAprvlYn())); builder.and(bas.aprvlYn.eq(rq.getAprvlYn()));
} }
builder.and(bas.delYn.ne("Y")); builder.and(bas.delYn.ne("Y"));
List<BasFlightPlanModel> r = query List<BasFlightPlanModel> r = query
.from(bas) .from(bas)
.leftJoin(area) .leftJoin(area)
@ -98,7 +100,110 @@ public class FltPlanQueryRepository {
return r; return r;
} }
//동일 기체 등록시 비행시간 중복여부 조회
public List<BasFlightPlanModel> arcrftCheck(BasFlightPlanModel rq, String idntfNum){
QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas bas = QFltPlanBas.fltPlanBas;
List<BasFlightPlanModel> 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<BasFlightPlanAreaCoordRq> CoordCheck(BasFlightPlanModel rq){
QFltPlanArea area = QFltPlanArea.fltPlanArea;
QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord;
QFltPlanBas bas = QFltPlanBas.fltPlanBas;
List<BasFlightPlanAreaCoordRq> 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<BasFlightPlanAreaCoordRq> CoordCount(BasFlightPlanModel rq){
QFltPlanArea area = QFltPlanArea.fltPlanArea;
QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord;
QFltPlanBas bas = QFltPlanBas.fltPlanBas;
List<BasFlightPlanAreaCoordRq> 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<BasFlightPlanPilotModel> listPilot(String groupId) { public List<BasFlightPlanPilotModel> listPilot(String groupId) {
// QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas; // QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
@ -131,7 +236,7 @@ public class FltPlanQueryRepository {
.fetch(); .fetch();
return r; return r;
} }
// 기체 조회 // 기체 조회
public List<BasFlightPlanArcrftModel> listArcrft(String groupId) { public List<BasFlightPlanArcrftModel> listArcrft(String groupId) {
QComArcrftBas arcrft = QComArcrftBas.comArcrftBas; QComArcrftBas arcrft = QComArcrftBas.comArcrftBas;

4
src/main/java/com/palnet/comn/utils/FlightUtils.java

@ -1,5 +1,7 @@
package com.palnet.comn.utils; package com.palnet.comn.utils;
import java.util.List;
import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.CoordinateSequence; import org.locationtech.jts.geom.CoordinateSequence;
import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Geometry;
@ -69,7 +71,7 @@ public class FlightUtils {
return contains; return contains;
} }
//생성된 버퍼좌표와 공역의 좌표가 충돌하는지를 판단하는 유틸 //생성된 버퍼좌표와 공역의 좌표가 충돌하는지를 판단하는 유틸
public static boolean overlaps(Coordinate[] bufferCoords, Coordinate[] overlapCoords) { public static boolean overlaps(Coordinate[] bufferCoords,Coordinate[] overlapCoords) {
GeometryFactory geometryFactory = new GeometryFactory(); GeometryFactory geometryFactory = new GeometryFactory();

Loading…
Cancel
Save