From c358419a2922a26d10a16daf8b129c170323790d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?qkr7828=28=EB=B0=95=EC=9E=AC=EC=9A=B0=29?= Date: Wed, 20 Sep 2023 15:15:25 +0900 Subject: [PATCH] =?UTF-8?q?=EB=93=9C=EB=A1=A0=EA=B4=80=EC=A0=9C=20-=20?= =?UTF-8?q?=EB=B9=84=ED=96=89=20=EC=A2=85=EB=A3=8C=EB=90=9C=20=EB=93=9C?= =?UTF-8?q?=EB=A1=A0=EC=97=90=20=EB=8C=80=ED=95=9C=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=A0=9C=EA=B3=B5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cntrl/controller/CtrCntrlController.java | 21 ++++ .../cntrl/model/CtrCntrlArcrftComplModel.java | 20 ++++ .../ctr/cntrl/service/CtrCntrlService.java | 95 +++++++++++++++++-- .../ctr/CtrCntrlQueryRepository.java | 29 ++++++ 4 files changed, 159 insertions(+), 6 deletions(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/model/CtrCntrlArcrftComplModel.java diff --git a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java index 1f97199..ac60e09 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java @@ -296,4 +296,25 @@ public class CtrCntrlController { } return ResponseEntity.ok().body(new SuccessResponse(result)); } + + /** + * TODO 비행 관제 기체의 비정상 상황 확인 + * + * @param cntrlId + * @return + */ + @GetMapping("/complete/{cntrlId}") + @ApiOperation(value = "TODO 비행 완료된 기체의 정보 확인") + @Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") + public ResponseEntity flightCompleteInfo(@PathVariable String cntrlId) { + CtrCntrlArcrftComplModel result = new CtrCntrlArcrftComplModel(); + try { + result = service.getComplete(cntrlId); + } 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(result)); + } } \ No newline at end of file diff --git a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/model/CtrCntrlArcrftComplModel.java b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/model/CtrCntrlArcrftComplModel.java new file mode 100644 index 0000000..3f006df --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/model/CtrCntrlArcrftComplModel.java @@ -0,0 +1,20 @@ +package com.palnet.biz.api.ctr.cntrl.model; + +import lombok.Data; + +/** + * TODO 비행 종료된 기체의 정보 + * + */ + +@Data +public class CtrCntrlArcrftComplModel { + + private Double mvDistance; // 총 비행 거리 + + private String mvTime; // 총 비행 시간 + + private Double elevAvg; // 평균 고도 + + private Double speedAvg; // 평균 속도 +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java index 5afa4e9..b0690ec 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java @@ -7,16 +7,17 @@ import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.text.SimpleDateFormat; +import java.time.Duration; import java.time.Instant; +import java.time.LocalDate; import java.time.LocalTime; +import java.time.Period; +import java.time.ZoneId; import java.util.ArrayList; -import java.util.Arrays; import java.util.Calendar; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.UUID; import org.apache.commons.lang3.StringUtils; @@ -25,7 +26,6 @@ import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.locationtech.jts.geom.Coordinate; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -36,6 +36,7 @@ import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel; import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; import com.palnet.biz.api.bas.flight.service.BasFlightMapper; import com.palnet.biz.api.comn.model.ControlGpsDataContext; +import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlArcrftComplModel; import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlArcrftWarnModel; import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlDtlModel; import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlGroupArcrftModel; @@ -43,7 +44,6 @@ import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlGroupModel; import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlPlanContainsRq; import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlPlanContainsRs; import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlSocketContainsRq; -import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlSocketDataModel; import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlWarnLogModel; import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlWeatherModel; import com.palnet.biz.jpa.entity.ComArcrftBas; @@ -68,7 +68,6 @@ 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; @@ -820,4 +819,88 @@ public class CtrCntrlService { returnCoord.setY(ny); return returnCoord; } + + /** + * TODO 비행 종료 데이터 상세 조회 + * + * @param controlId + * @return + */ + public CtrCntrlArcrftComplModel getComplete(String controlId) { + + CtrCntrlArcrftComplModel result = new CtrCntrlArcrftComplModel(); + List completeInfo = query.getCompleteInfo(controlId); + + Double mvDistanceAll = 0.0; + Duration duration = null; + + if(completeInfo.size() > 2) { + + + Instant start = completeInfo.get(0).getSrvrRcvDt(); + Instant end = completeInfo.get(completeInfo.size()-1).getSrvrRcvDt(); + + if(start != null && end != null) { + LocalDate startDate = start.atZone(ZoneId.of("Asia/Seoul")).toLocalDate(); + LocalDate endDate = end.atZone(ZoneId.of("Asia/Seoul")).toLocalDate(); + + duration = Duration.between(startDate, endDate); + } + + for (int from = 0, to = 1; from listCntrlHstry(String id){ return result; } + + public List getCompleteInfo(String cntrlId){ + + QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; + QCtrCntrlHstry qCtrCntrHstry = QCtrCntrlHstry.ctrCntrlHstry; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(qCtrCntrHstry.cntrlId.eq(cntrlId)); + builder.and(qCntrlBasEntity.statusCd.eq("99")); + + List result = query.select(Projections.bean(CtrCntrlHstry.class , + qCtrCntrHstry.lat, + qCtrCntrHstry.lon , + qCtrCntrHstry.speed , + qCtrCntrHstry.speedType , + qCtrCntrHstry.elev , + qCtrCntrHstry.elevType , + qCtrCntrHstry.mvDstnc , + qCtrCntrHstry.mvDstncType + )) + .from(qCtrCntrHstry) + .leftJoin(qCntrlBasEntity) + .on(qCntrlBasEntity.cntrlId.eq(qCtrCntrHstry.cntrlId)) + .where(builder) + .orderBy(qCtrCntrHstry.srvrRcvDt.asc()) + .fetch(); + + return result; + } }