From 845a2f152df6e7222a2376916ecb5c312c410704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?qkr7828=28=EB=B0=95=EC=9E=AC=EC=9A=B0=29?= Date: Mon, 15 May 2023 15:54:58 +0900 Subject: [PATCH] =?UTF-8?q?flightPlanModel=EC=97=90=20arcrftList=20set=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BasFlightController.java | 53 ++++++++++----- .../bas/flight/service/BasFlightService.java | 18 +++-- .../ctr/cntrl/service/CtrCntrlService.java | 10 ++- .../flt/FltPlanQueryRepository.java | 66 ++++++++++++------- 4 files changed, 101 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java b/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java index b8e839b..7131810 100644 --- a/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java +++ b/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java @@ -1,27 +1,23 @@ package com.palnet.biz.api.bas.flight.controller; -import java.io.*; -import java.net.HttpURLConnection; -import java.net.URL; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -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.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.BasFlightWeatherModel; -import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlWeatherModel; -import com.palnet.biz.scheduler.ctr.model.CtrTrnsLctnModel; -import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.proj4j.BasicCoordinateTransform; +import org.locationtech.proj4j.CRSFactory; +import org.locationtech.proj4j.CoordinateReferenceSystem; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.core.io.ClassPathResource; @@ -39,12 +35,22 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +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.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.BasFlightWeatherModel; import com.palnet.biz.api.bas.flight.service.BasFlightService; import com.palnet.biz.api.comn.model.ComnPagingRs; 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.biz.scheduler.ctr.service.CtrTrnsLctnService; import com.palnet.comn.exception.CustomException; +import com.palnet.comn.utils.AreaUtils; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -60,12 +66,14 @@ public class BasFlightController { private final BasFlightService basFlightService; private final Environment env; private final CtrTrnsLctnService ctrTrnsLctnService; + private final AreaUtils utils; @Autowired - public BasFlightController(BasFlightService basFlightService, Environment env, CtrTrnsLctnService ctrTrnsLctnService) { + public BasFlightController(BasFlightService basFlightService, Environment env, CtrTrnsLctnService ctrTrnsLctnService, AreaUtils AreaUtils) { this.basFlightService = basFlightService; this.env = env; this.ctrTrnsLctnService = ctrTrnsLctnService; + this.utils = AreaUtils; } @GetMapping("/area") @@ -378,4 +386,19 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse(response)); } + //test + @GetMapping("/test") + public void createCircleTest(@RequestParam double getX, @RequestParam double getY, @RequestParam double buffer) { + + Coordinate circleCoord = new Coordinate(getX, getY); + List transCoord = new ArrayList(); + transCoord.add(circleCoord); + + transCoord = utils.transform(transCoord, "EPSG:4326", "EPSG:5181"); + List coordList = utils.createCircle(transCoord.get(0), buffer); + coordList = utils.transform(coordList, "EPSG:5181", "EPSG:4326"); + for(Coordinate a : coordList) { + System.out.println(a.getX() + ", " + a.getY()); + } + } } 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 d03029c..377f3d2 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 @@ -4,7 +4,6 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; @@ -183,8 +182,19 @@ public class BasFlightService { } public void planValid(BasFlightPlanModel rq) { + boolean isEqualsFltElev = false; + List rqAreaList = rq.getAreaList(); + String rqFltElev = rqAreaList.get(0).getFltElev(); List effectivePlanList = fltPlanQueryRepository.CoordCheck(rq); + + List effectivePlanArea = new ArrayList<>(); + for(BasFlightPlanModel plan : effectivePlanList) { + effectivePlanArea.addAll(plan.getAreaList()); + } + for(BasFlightPlanAreaModel area : effectivePlanArea) { + if(rqFltElev.equals(area.getFltElev())) isEqualsFltElev = true; + } List effectivePlanCount = fltPlanQueryRepository.CoordCount(rq); for(BasFlightPlanModel i : effectivePlanList) { if(rq.getPlanSno().equals(i.getPlanSno()))return; @@ -247,18 +257,18 @@ public class BasFlightService { overlapCheck = areaUtils.overlaps(rqCoordBufferList, effectiveCoordBufferList); overlapCheck2 = areaUtils.overlaps(effectiveCoordBufferList, rqCoordBufferList); - if(overlapCheck || overlapCheck2) { + if((overlapCheck || overlapCheck2) && isEqualsFltElev) { throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); } for(Coordinate coord : effectiveCoordBufferList) { containCheck = areaUtils.contains(rqCoordBufferList, coord); - if(containCheck) { + if(containCheck && isEqualsFltElev) { throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); } } for(Coordinate coord : rqCoordBufferList) { containCheck2 = areaUtils.contains(effectiveCoordBufferList , coord); - if(containCheck2) { + if(containCheck2 && isEqualsFltElev) { throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); } } diff --git a/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java b/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java index 700fbf3..b3df3a0 100644 --- a/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java +++ b/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java @@ -29,6 +29,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; +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.BasFlightPlanAreaModel; import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; @@ -66,6 +67,7 @@ import com.palnet.biz.jpa.repository.flt.FltPlanAreaRepository; import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository; import com.palnet.biz.jpa.repository.flt.FltPlanCtrCntrlRelRepository; import com.palnet.biz.scheduler.ctr.model.CtrTrnsLctnModel; +import com.palnet.biz.scheduler.ctr.service.CtrSchedulerService; import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService; import com.palnet.comn.model.GPHistoryModel; import com.palnet.comn.utils.AreaUtils; @@ -355,7 +357,9 @@ public class CtrCntrlService { arcrftList.forEach(arcrft -> { FltPlanBas plan = planBasRepository. findByGroupFlightPlan(arcrft.getPlanSno(), "Y", fltNowDt).orElse(null); - + ListarcrftMappingList = new ArrayList<>(); + BasFlightPlanArcrftModel arcrftMapping = BasFlightMapper.mapper.entityToModel(arcrftBas); + arcrftMappingList.add(arcrftMapping); if (plan != null) { BasFlightPlanModel planMapping = BasFlightMapper.mapper.entityToModel(plan); @@ -398,8 +402,10 @@ public class CtrCntrlService { // 비행 계획서에 구역 목록 저장 planMapping.setAreaList(areaMappingList); + planMapping.setArcrftList(arcrftMappingList); + } - + rs.add(planMapping); } }); 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 af78b24..90a4e12 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 @@ -244,33 +244,11 @@ public class FltPlanQueryRepository { // 비행계획구역 설정시 같은 시간대에 구역이 중복되는지 조회 public List CoordCheck(BasFlightPlanModel rq){ QFltPlanArea area = QFltPlanArea.fltPlanArea; - QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord; QFltPlanBas bas = QFltPlanBas.fltPlanBas; List list = query - .select(Projections.bean( - BasFlightPlanModel.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 - - )) .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())) @@ -283,7 +261,45 @@ public class FltPlanQueryRepository { .and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))) .and(bas.delYn.eq("N")) .and(bas.groupId.eq(rq.getGroupId()))) - .fetch(); + .transform( + GroupBy.groupBy(bas.planSno) + .list(Projections.bean( + BasFlightPlanModel.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, + GroupBy.list(Projections.bean( + BasFlightPlanAreaModel.class, + area.planAreaSno, + area.planSno, + area.areaType, + area.fltMethod, + area.bufferZone, + area.fltElev, + area.createUserId, + area.createDt, + area.updateUserId, + area.updateDt + ).skipNulls()).as("areaList") + )) + ); + return list; } //CoordCheck에 들어갈 count