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> <artifactId>json-simple</artifactId>
<version>1.1.1</version> <version>1.1.1</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
</dependencies> </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.text.SimpleDateFormat;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@ -23,6 +24,7 @@ import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException; import org.json.simple.parser.ParseException;
import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Coordinate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -207,6 +209,7 @@ public class CtrCntrlService {
* @param cstmrSno * @param cstmrSno
* @return * @return
*/ */
public List<CtrCntrlGroupArcrftModel> getGroupAuthInfo() { public List<CtrCntrlGroupArcrftModel> getGroupAuthInfo() {
List<CtrCntrlGroupModel> list = query.findByGroupInfo(); List<CtrCntrlGroupModel> list = query.findByGroupInfo();
@ -254,7 +257,7 @@ public class CtrCntrlService {
*/ */
@Transactional @Transactional
public List<CtrCntrlArcrftWarnModel> getArcrftWarnList(String id) { public List<CtrCntrlArcrftWarnModel> getArcrftWarnList(String id) {
Map<String, CtrCntrlArcrftWarnModel> map = new HashMap<>();
List<CtrCntrlArcrftWarnModel> result = new ArrayList<>(); List<CtrCntrlArcrftWarnModel> result = new ArrayList<>();
if ("".equals(id) || id == null) return null; if ("".equals(id) || id == null) return null;
@ -264,20 +267,19 @@ public class CtrCntrlService {
for (String cntrlId : ids) { for (String cntrlId : ids) {
CtrCntrlArcrftWarnModel model = new CtrCntrlArcrftWarnModel(); CtrCntrlArcrftWarnModel model = new CtrCntrlArcrftWarnModel();
CtrCntrlBas control = cntrlBasRepository.findById(cntrlId).orElse(null); String idntfNum = cntrlBasRepository.getIdntfNum(cntrlId);
CtrCntrlHstry hisControl = cntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(cntrlId).orElse(null); CtrCntrlHstry hisControl = query.getWarnHstryList(cntrlId);
// List<BasFlightPlanModel> flightPlan = new ArrayList<>();
// if (control != null) { int planSno = relRepository.getPlanSno(idntfNum);
// flightPlan = this.getFlightPlan(control.getIdntfNum()); FltPlanArea planAreaData = query.getPlanData(planSno);
// }
int planSno = relRepository.getPlanSno(control.getIdntfNum());
FltPlanArea planAreaData = planAreaRepository.getPlanData(planSno);
List<FltPlanAreaCoord> coordList = planCoordRepository.getCoordinate(planAreaData.getPlanAreaSno()); List<FltPlanAreaCoord> coordList = planCoordRepository.getCoordinate(planAreaData.getPlanAreaSno());
CtrCntrlSocketContainsRq containsRq = new CtrCntrlSocketContainsRq(); CtrCntrlSocketContainsRq containsRq = new CtrCntrlSocketContainsRq();
if (control != null) { if (idntfNum != null) {
containsRq.setIdntfNum(control.getIdntfNum()); containsRq.setIdntfNum(idntfNum);
model.setIdntfNum(idntfNum);
model.setCntrlId(cntrlId);
} }
if (planAreaData != null) { if (planAreaData != null) {
@ -299,8 +301,8 @@ public class CtrCntrlService {
if (model.isControlWarnCd()) { if (model.isControlWarnCd()) {
CtrCntrlWarnLog log = new CtrCntrlWarnLog(); CtrCntrlWarnLog log = new CtrCntrlWarnLog();
log.setCntrlId(control.getCntrlId()); log.setCntrlId(cntrlId);
log.setIdntfNum(control.getIdntfNum()); log.setIdntfNum(idntfNum);
log.setOccurDt(hisControl.getSrvrRcvDt()); log.setOccurDt(hisControl.getSrvrRcvDt());
log.setLat(hisControl.getLat()); log.setLat(hisControl.getLat());
log.setLon(hisControl.getLon()); log.setLon(hisControl.getLon());
@ -318,8 +320,6 @@ public class CtrCntrlService {
model.setCreateDt(warnLog.getCreateDt()); model.setCreateDt(warnLog.getCreateDt());
model.setCreateUserId(warnLog.getCreateUserId()); model.setCreateUserId(warnLog.getCreateUserId());
} }
model.setCntrlId(control.getCntrlId());
model.setIdntfNum(control.getIdntfNum());
model.setWarnCount(warnCount); model.setWarnCount(warnCount);
result.add(model); result.add(model);
@ -484,7 +484,6 @@ public class CtrCntrlService {
if (rq.getIdntfNum() != null) { if (rq.getIdntfNum() != null) {
List<Coordinate> planArea = new ArrayList<>(); List<Coordinate> planArea = new ArrayList<>();
for(FltPlanAreaCoord coord : rq.getCoordList()) { for(FltPlanAreaCoord coord : rq.getCoordList()) {
Coordinate coordinate = new Coordinate(coord.getLon(), coord.getLat()); Coordinate coordinate = new Coordinate(coord.getLon(), coord.getLat());
@ -498,7 +497,6 @@ public class CtrCntrlService {
* 2. 비정상 상황 TYPE(비행구역, 공역) 따라 구분 (미적용) * 2. 비정상 상황 TYPE(비행구역, 공역) 따라 구분 (미적용)
*/ */
boolean areaContains = true; boolean areaContains = true;
// boolean airspaceContains = false;
switch(rq.getAreaType()) { switch(rq.getAreaType()) {
case "LINE" : case "LINE" :
List<Coordinate> transPlanArea = areaUtils.transform(planArea, "EPSG:4326", "EPSG:5181"); 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"); List<Coordinate> transPlanBuffer = areaUtils.transform(planBuffer, "EPSG:5181", "EPSG:4326");
areaContains = areaUtils.contains(transPlanBuffer, targetCoord); areaContains = areaUtils.contains(transPlanBuffer, targetCoord);
// log.info("LINE CONTAINS : {}", areaContains);
break; break;
case "POLYGON" : 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.cntrlEndDt <= :cntrlEndDt " +
"and c.idntfNum = :idntfNum" ) "and c.idntfNum = :idntfNum" )
List<CtrCntrlBas> findCntrlId(@Param("cntrlStDt") Date cntrlStDt, @Param("cntrlEndDt") Date cntrlEndDt, @Param("idntfNum") String 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; 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.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 org.springframework.stereotype.Repository;
import com.palnet.biz.jpa.entity.CtrCntrlHstry; import com.palnet.biz.jpa.entity.CtrCntrlHstry;
import java.util.List;
import java.util.Optional;
@Repository @Repository
public interface CtrCntrlHstryRepository extends JpaRepository<CtrCntrlHstry, Integer>{ public interface CtrCntrlHstryRepository extends JpaRepository<CtrCntrlHstry, Integer>{
Optional<CtrCntrlHstry> findFirstByCntrlIdOrderBySrvrRcvDtDesc(String cntrlId); Optional<CtrCntrlHstry> findFirstByCntrlIdOrderBySrvrRcvDtDesc(String cntrlId);
List<CtrCntrlHstry> findByCntrlIdOrderByHstrySno(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.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.jpa.entity.ComArcrftBas; import com.palnet.biz.jpa.entity.ComArcrftBas;
import com.palnet.biz.jpa.entity.ComIdntfBas; 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.CtrCntrlHstryArea;
import com.palnet.biz.jpa.entity.FltPlanArea;
import com.palnet.biz.jpa.entity.FltPlanBas; import com.palnet.biz.jpa.entity.FltPlanBas;
import com.palnet.biz.jpa.entity.FltPlanPilot; import com.palnet.biz.jpa.entity.FltPlanPilot;
import com.palnet.biz.jpa.entity.QComArcrftBas; 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.QCtrCntrlBas;
import com.palnet.biz.jpa.entity.QCtrCntrlHstry; import com.palnet.biz.jpa.entity.QCtrCntrlHstry;
import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea; 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.QFltPlanBas;
import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel; import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel;
import com.palnet.biz.jpa.entity.QPtyCstmrBas; 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; return list;
} }
@Cacheable(value = "group-auth")
public List<CtrCntrlGroupModel> findByGroupInfo() { public List<CtrCntrlGroupModel> findByGroupInfo() {
QPtyCstmrGroup pcg = QPtyCstmrGroup.ptyCstmrGroup; QPtyCstmrGroup pcg = QPtyCstmrGroup.ptyCstmrGroup;
QPtyGroupBas pgb = QPtyGroupBas.ptyGroupBas; 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) {
// public List<CtrCntrlGroupArcrftModel> findByGroupArcrft(String groupId, String groupAuthCd) { // public List<CtrCntrlGroupArcrftModel> findByGroupArcrft(String groupId, String groupAuthCd) {
@Cacheable(value = "group-arcrft")
public List<CtrCntrlGroupArcrftModel> findByGroupArcrft(String groupId) { public List<CtrCntrlGroupArcrftModel> findByGroupArcrft(String groupId) {
QComArcrftBas arcrftBas = QComArcrftBas.comArcrftBas; QComArcrftBas arcrftBas = QComArcrftBas.comArcrftBas;
QComIdntfBas idntfBas = QComIdntfBas.comIdntfBas; QComIdntfBas idntfBas = QComIdntfBas.comIdntfBas;
@ -1569,16 +1617,16 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
} }
List<CtrCntrlGroupArcrftModel> arcrftList = query.select(Projections.bean(CtrCntrlGroupArcrftModel.class, List<CtrCntrlGroupArcrftModel> arcrftList = query.select(Projections.bean(CtrCntrlGroupArcrftModel.class,
arcrftBas.arcrftSno, // arcrftBas.arcrftSno,
arcrftBas.groupId, // arcrftBas.groupId,
idntfBas.idntfNum, idntfBas.idntfNum
idntfBas.idntfTypeCd, // idntfBas.idntfTypeCd,
idntfBas.ownerNm, // idntfBas.ownerNm,
arcrftBas.arcrftTypeCd, // arcrftBas.arcrftTypeCd,
arcrftBas.arcrftModelNm, // arcrftBas.arcrftModelNm,
arcrftBas.prdctCmpnNm, // arcrftBas.prdctCmpnNm,
idntfBas.createDt, // idntfBas.createDt,
idntfBas.updateDt // idntfBas.updateDt
)) ))
.from(arcrftBas) .from(arcrftBas)
.leftJoin(idntfBas) .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 " + @Query(value = "select f from FltPlanArea f " +
"where f.planSno = :planSno ") "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.CRSFactory;
import org.locationtech.proj4j.CoordinateReferenceSystem; import org.locationtech.proj4j.CoordinateReferenceSystem;
import org.locationtech.proj4j.ProjCoordinate; import org.locationtech.proj4j.ProjCoordinate;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -42,6 +43,7 @@ public class AreaUtils {
* @param coordList * @param coordList
* @return * @return
*/ */
@Cacheable(value = "coordTransform")
public List<Coordinate> transform(List<Coordinate> coordList, String from, String to) { public List<Coordinate> transform(List<Coordinate> coordList, String from, String to) {
CRSFactory factory = new CRSFactory(); CRSFactory factory = new CRSFactory();

Loading…
Cancel
Save