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