diff --git a/pom.xml b/pom.xml index 02234c3..d8cf678 100644 --- a/pom.xml +++ b/pom.xml @@ -188,7 +188,10 @@ json-simple 1.1.1 - + + org.springframework.boot + spring-boot-starter-cache + 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 3d547ad..04f0255 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 @@ -9,6 +9,7 @@ import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.time.LocalTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.HashMap; @@ -23,6 +24,7 @@ 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; @@ -207,6 +209,7 @@ public class CtrCntrlService { * @param cstmrSno * @return */ + public List getGroupAuthInfo() { List list = query.findByGroupInfo(); @@ -254,7 +257,7 @@ public class CtrCntrlService { */ @Transactional public List getArcrftWarnList(String id) { - Map map = new HashMap<>(); + List result = new ArrayList<>(); if ("".equals(id) || id == null) return null; @@ -264,20 +267,19 @@ public class CtrCntrlService { for (String cntrlId : ids) { CtrCntrlArcrftWarnModel model = new CtrCntrlArcrftWarnModel(); - CtrCntrlBas control = cntrlBasRepository.findById(cntrlId).orElse(null); - CtrCntrlHstry hisControl = cntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(cntrlId).orElse(null); -// List flightPlan = new ArrayList<>(); -// if (control != null) { -// flightPlan = this.getFlightPlan(control.getIdntfNum()); -// } - int planSno = relRepository.getPlanSno(control.getIdntfNum()); - FltPlanArea planAreaData = planAreaRepository.getPlanData(planSno); + String idntfNum = cntrlBasRepository.getIdntfNum(cntrlId); + CtrCntrlHstry hisControl = query.getWarnHstryList(cntrlId); + + int planSno = relRepository.getPlanSno(idntfNum); + FltPlanArea planAreaData = query.getPlanData(planSno); List coordList = planCoordRepository.getCoordinate(planAreaData.getPlanAreaSno()); - + CtrCntrlSocketContainsRq containsRq = new CtrCntrlSocketContainsRq(); - if (control != null) { - containsRq.setIdntfNum(control.getIdntfNum()); + if (idntfNum != null) { + containsRq.setIdntfNum(idntfNum); + model.setIdntfNum(idntfNum); + model.setCntrlId(cntrlId); } if (planAreaData != null) { @@ -299,8 +301,8 @@ public class CtrCntrlService { if (model.isControlWarnCd()) { CtrCntrlWarnLog log = new CtrCntrlWarnLog(); - log.setCntrlId(control.getCntrlId()); - log.setIdntfNum(control.getIdntfNum()); + log.setCntrlId(cntrlId); + log.setIdntfNum(idntfNum); log.setOccurDt(hisControl.getSrvrRcvDt()); log.setLat(hisControl.getLat()); log.setLon(hisControl.getLon()); @@ -318,8 +320,6 @@ public class CtrCntrlService { model.setCreateDt(warnLog.getCreateDt()); model.setCreateUserId(warnLog.getCreateUserId()); } - model.setCntrlId(control.getCntrlId()); - model.setIdntfNum(control.getIdntfNum()); model.setWarnCount(warnCount); result.add(model); @@ -484,7 +484,6 @@ public class CtrCntrlService { if (rq.getIdntfNum() != null) { List planArea = new ArrayList<>(); - for(FltPlanAreaCoord coord : rq.getCoordList()) { Coordinate coordinate = new Coordinate(coord.getLon(), coord.getLat()); @@ -498,7 +497,6 @@ public class CtrCntrlService { * 2. 비정상 상황 TYPE(비행구역, 공역)에 따라 구분 (미적용) */ boolean areaContains = true; -// boolean airspaceContains = false; switch(rq.getAreaType()) { case "LINE" : List transPlanArea = areaUtils.transform(planArea, "EPSG:4326", "EPSG:5181"); @@ -506,7 +504,6 @@ public class CtrCntrlService { List transPlanBuffer = areaUtils.transform(planBuffer, "EPSG:5181", "EPSG:4326"); areaContains = areaUtils.contains(transPlanBuffer, targetCoord); -// log.info("LINE CONTAINS : {}", areaContains); break; case "POLYGON" : diff --git a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java index 4765281..f9db9bd 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java @@ -41,4 +41,8 @@ public interface CtrCntrlBasRepository extends JpaRepository findCntrlId(@Param("cntrlStDt") Date cntrlStDt, @Param("cntrlEndDt") Date cntrlEndDt, @Param("idntfNum") String idntfNum); + + @Query(value = " select IDNTF_NUM from CTR_CNTRL_BAS " + + "where CNTRL_ID = :cntrlId ", nativeQuery = true ) + String getIdntfNum(@Param("cntrlId") String cntrlId); } diff --git a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlHstryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlHstryRepository.java index 24950a1..f7dfa4a 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlHstryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlHstryRepository.java @@ -1,15 +1,22 @@ package com.palnet.biz.jpa.repository.ctr; +import java.util.List; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.palnet.biz.jpa.entity.CtrCntrlHstry; -import java.util.List; -import java.util.Optional; - @Repository public interface CtrCntrlHstryRepository extends JpaRepository{ + Optional findFirstByCntrlIdOrderBySrvrRcvDtDesc(String cntrlId); + List findByCntrlIdOrderByHstrySno(String cntrlId); + + } diff --git a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java index 2db52f7..b1b9665 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java @@ -32,7 +32,9 @@ import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlEndModel; import com.palnet.biz.api.main.dash.model.MainDashStcsModel; import com.palnet.biz.jpa.entity.ComArcrftBas; import com.palnet.biz.jpa.entity.ComIdntfBas; +import com.palnet.biz.jpa.entity.CtrCntrlHstry; import com.palnet.biz.jpa.entity.CtrCntrlHstryArea; +import com.palnet.biz.jpa.entity.FltPlanArea; import com.palnet.biz.jpa.entity.FltPlanBas; import com.palnet.biz.jpa.entity.FltPlanPilot; import com.palnet.biz.jpa.entity.QComArcrftBas; @@ -40,6 +42,7 @@ import com.palnet.biz.jpa.entity.QComIdntfBas; import com.palnet.biz.jpa.entity.QCtrCntrlBas; import com.palnet.biz.jpa.entity.QCtrCntrlHstry; import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea; +import com.palnet.biz.jpa.entity.QFltPlanArea; import com.palnet.biz.jpa.entity.QFltPlanBas; import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel; import com.palnet.biz.jpa.entity.QPtyCstmrBas; @@ -1179,6 +1182,49 @@ public List listCntrlHstry(String id){ } + public CtrCntrlHstry getWarnHstryList(String cntrlId) { + QCtrCntrlHstry qCtrCntrHstry = QCtrCntrlHstry.ctrCntrlHstry; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(qCtrCntrHstry.cntrlId.eq(cntrlId)); + + CtrCntrlHstry result = + query.select(Projections.bean(CtrCntrlHstry.class, + qCtrCntrHstry.lat, + qCtrCntrHstry.lon, + qCtrCntrHstry.srvrRcvDt, + qCtrCntrHstry.elev + )) + .from(qCtrCntrHstry) + .where(builder) + .orderBy(qCtrCntrHstry.srvrRcvDt.desc()) + .fetchFirst(); + + return result; + + } + + public FltPlanArea getPlanData(int planSno) { + QFltPlanArea qFltPlanArea = QFltPlanArea.fltPlanArea; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(qFltPlanArea.planSno.eq(planSno)); + + FltPlanArea result = + query.select(Projections.bean(FltPlanArea.class, + qFltPlanArea.planAreaSno, + qFltPlanArea.areaType, + qFltPlanArea.bufferZone + )) + .from(qFltPlanArea) + .where(builder) + .limit(1) + .fetchFirst(); + + return result; + + } + /** * 상세보기 조회 * 관제마스터 , 드론 , 드론운영자 정보 조회 @@ -1477,7 +1523,8 @@ public List listCntrlHstry(String id){ return list; } - + + @Cacheable(value = "group-auth") public List findByGroupInfo() { QPtyCstmrGroup pcg = QPtyCstmrGroup.ptyCstmrGroup; QPtyGroupBas pgb = QPtyGroupBas.ptyGroupBas; @@ -1548,6 +1595,7 @@ public List listCntrlHstry(String id){ // public List findByGroupArcrft(String groupId) { // public List findByGroupArcrft(String groupId, String groupAuthCd) { + @Cacheable(value = "group-arcrft") public List findByGroupArcrft(String groupId) { QComArcrftBas arcrftBas = QComArcrftBas.comArcrftBas; QComIdntfBas idntfBas = QComIdntfBas.comIdntfBas; @@ -1569,16 +1617,16 @@ public List listCntrlHstry(String id){ } List arcrftList = query.select(Projections.bean(CtrCntrlGroupArcrftModel.class, - arcrftBas.arcrftSno, - arcrftBas.groupId, - idntfBas.idntfNum, - idntfBas.idntfTypeCd, - idntfBas.ownerNm, - arcrftBas.arcrftTypeCd, - arcrftBas.arcrftModelNm, - arcrftBas.prdctCmpnNm, - idntfBas.createDt, - idntfBas.updateDt +// arcrftBas.arcrftSno, +// arcrftBas.groupId, + idntfBas.idntfNum +// idntfBas.idntfTypeCd, +// idntfBas.ownerNm, +// arcrftBas.arcrftTypeCd, +// arcrftBas.arcrftModelNm, +// arcrftBas.prdctCmpnNm, +// idntfBas.createDt, +// idntfBas.updateDt )) .from(arcrftBas) .leftJoin(idntfBas) diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java index ad8f5c6..98098fd 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java @@ -20,5 +20,5 @@ public interface FltPlanAreaRepository extends JpaRepository transform(List coordList, String from, String to) { CRSFactory factory = new CRSFactory();