Browse Source

관제 좌표계 변환부분 캐싱처리 / 관제 최적화

Test
박재우 2 years ago
parent
commit
2199c7dea2
  1. 5
      pom.xml
  2. 35
      src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java
  3. 4
      src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java
  4. 13
      src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlHstryRepository.java
  5. 70
      src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  6. 2
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java
  7. 2
      src/main/java/com/palnet/comn/utils/AreaUtils.java

5
pom.xml

@ -188,7 +188,10 @@
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
</dependencies>

35
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<CtrCntrlGroupArcrftModel> getGroupAuthInfo() {
List<CtrCntrlGroupModel> list = query.findByGroupInfo();
@ -254,7 +257,7 @@ public class CtrCntrlService {
*/
@Transactional
public List<CtrCntrlArcrftWarnModel> getArcrftWarnList(String id) {
Map<String, CtrCntrlArcrftWarnModel> map = new HashMap<>();
List<CtrCntrlArcrftWarnModel> 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<BasFlightPlanModel> 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<FltPlanAreaCoord> 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<Coordinate> 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<Coordinate> transPlanArea = areaUtils.transform(planArea, "EPSG:4326", "EPSG:5181");
@ -506,7 +504,6 @@ public class CtrCntrlService {
List<Coordinate> transPlanBuffer = areaUtils.transform(planBuffer, "EPSG:5181", "EPSG:4326");
areaContains = areaUtils.contains(transPlanBuffer, targetCoord);
// log.info("LINE CONTAINS : {}", areaContains);
break;
case "POLYGON" :

4
src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java

@ -41,4 +41,8 @@ public interface CtrCntrlBasRepository extends JpaRepository<CtrCntrlBas, String
"and c.cntrlEndDt <= :cntrlEndDt " +
"and c.idntfNum = :idntfNum" )
List<CtrCntrlBas> 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);
}

13
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<CtrCntrlHstry, Integer>{
Optional<CtrCntrlHstry> findFirstByCntrlIdOrderBySrvrRcvDtDesc(String cntrlId);
List<CtrCntrlHstry> findByCntrlIdOrderByHstrySno(String cntrlId);
}

70
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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> listCntrlHstry(String id){
return list;
}
@Cacheable(value = "group-auth")
public List<CtrCntrlGroupModel> findByGroupInfo() {
QPtyCstmrGroup pcg = QPtyCstmrGroup.ptyCstmrGroup;
QPtyGroupBas pgb = QPtyGroupBas.ptyGroupBas;
@ -1548,6 +1595,7 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
// public List<CtrCntrlGroupArcrftModel> findByGroupArcrft(String groupId) {
// public List<CtrCntrlGroupArcrftModel> findByGroupArcrft(String groupId, String groupAuthCd) {
@Cacheable(value = "group-arcrft")
public List<CtrCntrlGroupArcrftModel> findByGroupArcrft(String groupId) {
QComArcrftBas arcrftBas = QComArcrftBas.comArcrftBas;
QComIdntfBas idntfBas = QComIdntfBas.comIdntfBas;
@ -1569,16 +1617,16 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
}
List<CtrCntrlGroupArcrftModel> 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)

2
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java

@ -20,5 +20,5 @@ public interface FltPlanAreaRepository extends JpaRepository<FltPlanArea, Intege
@Query(value = "select f from FltPlanArea f " +
"where f.planSno = :planSno ")
FltPlanArea getPlanData(@Param("planSno") int planSno);
FltPlanArea getPlanAreaData(@Param("planSno") int planSno);
}

2
src/main/java/com/palnet/comn/utils/AreaUtils.java

@ -14,6 +14,7 @@ import org.locationtech.proj4j.BasicCoordinateTransform;
import org.locationtech.proj4j.CRSFactory;
import org.locationtech.proj4j.CoordinateReferenceSystem;
import org.locationtech.proj4j.ProjCoordinate;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
@ -42,6 +43,7 @@ public class AreaUtils {
* @param coordList
* @return
*/
@Cacheable(value = "coordTransform")
public List<Coordinate> transform(List<Coordinate> coordList, String from, String to) {
CRSFactory factory = new CRSFactory();

Loading…
Cancel
Save