|
|
|
@ -20,7 +20,7 @@ import com.palnet.comn.utils.AreaUtils;
|
|
|
|
|
import com.palnet.comn.utils.DateUtils; |
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
import org.locationtech.jts.geom.Coordinate; |
|
|
|
|
import org.locationtech.jts.geom.GeometryFactory; |
|
|
|
|
|
|
|
|
|
import org.slf4j.Logger; |
|
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
@ -178,9 +178,9 @@ public class CtrCntrlService {
|
|
|
|
|
*/ |
|
|
|
|
public List<CtrCntrlWarnLogModel> getWarnLog(String controlId) { |
|
|
|
|
List<CtrCntrlWarnLog> logs = warnLogRepository.findAllByCntrlId(controlId); |
|
|
|
|
List<CtrCntrlWarnLogModel> warnLog = new ArrayList<CtrCntrlWarnLogModel>(); |
|
|
|
|
List<CtrCntrlWarnLogModel> warnLog = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for(CtrCntrlWarnLog log : logs) { |
|
|
|
|
for (CtrCntrlWarnLog log : logs) { |
|
|
|
|
CtrCntrlWarnLogModel model = new CtrCntrlWarnLogModel(); |
|
|
|
|
|
|
|
|
|
model.setCntrlId(log.getCntrlId()); |
|
|
|
@ -190,27 +190,63 @@ public class CtrCntrlService {
|
|
|
|
|
|
|
|
|
|
warnLog.add(model); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return warnLog; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* TODO 기체 별 최신 비정상 로그 및 비정상 로그 전체 개수 |
|
|
|
|
* @param id |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
@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; |
|
|
|
|
if ("".equals(id) || id == null) return null; |
|
|
|
|
|
|
|
|
|
String[] ids = id.indexOf(",") > -1 ? id.split(",") : new String[] {id}; |
|
|
|
|
|
|
|
|
|
for(String cntrlId : ids) { |
|
|
|
|
for (String cntrlId : ids) { |
|
|
|
|
CtrCntrlArcrftWarnModel model = new CtrCntrlArcrftWarnModel(); |
|
|
|
|
|
|
|
|
|
CtrCntrlBas control = cntrlBasRepository.findById(cntrlId).orElse(null); |
|
|
|
|
CtrCntrlHstry hisControl = cntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(cntrlId).orElse(null); |
|
|
|
|
|
|
|
|
|
if (hisControl != null) { |
|
|
|
|
List<BasFlightPlanModel> flightPlan = this.getFlightPlan(control.getIdntfNum()); |
|
|
|
|
|
|
|
|
|
if (flightPlan != null && !flightPlan.isEmpty()) { |
|
|
|
|
CtrCntrlPlanContainsRq containsRq = new CtrCntrlPlanContainsRq(); |
|
|
|
|
containsRq.setIdntfNum(control.getIdntfNum()); |
|
|
|
|
containsRq.setLat(hisControl.getLat()); |
|
|
|
|
containsRq.setLon(hisControl.getLon()); |
|
|
|
|
containsRq.setPlanList(flightPlan); |
|
|
|
|
|
|
|
|
|
CtrCntrlPlanContainsRs ctrCntrlPlanContainsRs = this.checkPlanContains(containsRq); |
|
|
|
|
model.setControlWarnCd(ctrCntrlPlanContainsRs.isWarning()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (model.isControlWarnCd()) { |
|
|
|
|
CtrCntrlWarnLog log = new CtrCntrlWarnLog(); |
|
|
|
|
|
|
|
|
|
log.setCntrlId(control.getCntrlId()); |
|
|
|
|
log.setIdntfNum(control.getIdntfNum()); |
|
|
|
|
log.setOccurDt(hisControl.getSrvrRcvDt()); |
|
|
|
|
log.setLat(hisControl.getLat()); |
|
|
|
|
log.setLon(hisControl.getLon()); |
|
|
|
|
log.setElev(hisControl.getElev()); |
|
|
|
|
log.setCreateDt(DateUtils.nowDate()); |
|
|
|
|
log.setWarnType("PLAN"); |
|
|
|
|
warnLogRepository.save(log); |
|
|
|
|
} |
|
|
|
|
CtrCntrlWarnLog warnLog = warnLogRepository.findFirstByCntrlIdOrderByOccurDtDesc(cntrlId); |
|
|
|
|
Integer warnCount = warnLogRepository.countByCntrlId(cntrlId); |
|
|
|
|
|
|
|
|
|
if(control != null) { |
|
|
|
|
if(warnLog != null) { |
|
|
|
|
if (warnLog != null) { |
|
|
|
|
model.setWarnType(warnLog.getWarnType()); |
|
|
|
|
model.setOccurDt(warnLog.getOccurDt()); |
|
|
|
|
model.setCreateDt(warnLog.getCreateDt()); |
|
|
|
@ -220,10 +256,8 @@ public class CtrCntrlService {
|
|
|
|
|
model.setCntrlId(control.getCntrlId()); |
|
|
|
|
model.setIdntfNum(control.getIdntfNum()); |
|
|
|
|
model.setWarnCount(warnCount); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
result.add(model); |
|
|
|
|
// map.put(cntrlId, model);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
@ -244,10 +278,10 @@ public class CtrCntrlService {
|
|
|
|
|
// 기체 식별 정보 조회
|
|
|
|
|
ComIdntfBas idntfBas = idntfRepository.findById(idntfNum).orElse(null); |
|
|
|
|
|
|
|
|
|
if(idntfBas != null) { |
|
|
|
|
if (idntfBas != null) { |
|
|
|
|
ComArcrftBas arcrftBas = arcrftRepository.findById(idntfBas.getArcrftSno()).orElse(null); |
|
|
|
|
|
|
|
|
|
if(arcrftBas != null) { |
|
|
|
|
if (arcrftBas != null) { |
|
|
|
|
// 비행 계획 기체 조회
|
|
|
|
|
List<FltPlanArcrft> arcrftList = planArcrftRepository. |
|
|
|
|
findByIdntfNumAndArcrftSnoOrderByPlanArcrftSnoAsc(idntfNum, arcrftBas.getArcrftSno()); |
|
|
|
@ -322,9 +356,9 @@ public class CtrCntrlService {
|
|
|
|
|
|
|
|
|
|
int countSuccess = 0; |
|
|
|
|
|
|
|
|
|
if(rq.getIdntfNum() != null) { |
|
|
|
|
for(BasFlightPlanModel plan : rq.getPlanList()) { |
|
|
|
|
for(BasFlightPlanAreaModel area : plan.getAreaList()) { |
|
|
|
|
if (rq.getIdntfNum() != null) { |
|
|
|
|
for (BasFlightPlanModel plan : rq.getPlanList()) { |
|
|
|
|
for (BasFlightPlanAreaModel area : plan.getAreaList()) { |
|
|
|
|
List<Coordinate> planArea = areaUtils.convertCoordinates(area.getCoordList()); |
|
|
|
|
|
|
|
|
|
// 드론 위치
|
|
|
|
@ -336,33 +370,28 @@ public class CtrCntrlService {
|
|
|
|
|
*/ |
|
|
|
|
boolean areaContains = true; |
|
|
|
|
// boolean airspaceContains = false;
|
|
|
|
|
if("LINE".equals(area.getAreaType())) { |
|
|
|
|
if ("LINE".equals(area.getAreaType())) { |
|
|
|
|
List<Coordinate> transPlanArea = areaUtils.transform(planArea, "EPSG:4326", "EPSG:5181"); |
|
|
|
|
|
|
|
|
|
List<Coordinate> planBuffer = areaUtils.buffer(transPlanArea, area.getBufferZone()); |
|
|
|
|
List<Coordinate> transPlanBuffer = areaUtils.transform(planBuffer, "EPSG:5181", "EPSG:4326"); |
|
|
|
|
|
|
|
|
|
areaContains = areaUtils.contains(transPlanBuffer, targetCoord); |
|
|
|
|
log.info("LINE CONTAINS : {}", areaContains); |
|
|
|
|
// airspaceContains = areaUtils.contains(targetCoord);
|
|
|
|
|
// log.info("LINE CONTAINS : {}", areaContains);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if("POLYGON".equals(area.getAreaType())) { |
|
|
|
|
if ("POLYGON".equals(area.getAreaType())) { |
|
|
|
|
planArea.add(planArea.get(0)); |
|
|
|
|
areaContains = areaUtils.contains(planArea, targetCoord); |
|
|
|
|
// airspaceContains = areaUtils.contains(targetCoord);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if("CIRCLE".equals(area.getAreaType())) { |
|
|
|
|
if ("CIRCLE".equals(area.getAreaType())) { |
|
|
|
|
List<Coordinate> circle = areaUtils.createCircle(planArea.get(0), area.getBufferZone()); |
|
|
|
|
// List<Coordinate> transCircle = areaUtils.transform(circle, "EPSG:5181", "EPSG:4326");
|
|
|
|
|
|
|
|
|
|
areaContains = areaUtils.contains(circle, targetCoord); |
|
|
|
|
// airspaceContains = areaUtils.contains(targetCoord);
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// if(areaContains || !airspaceContains) countSuccess++;
|
|
|
|
|
if(areaContains) countSuccess++; |
|
|
|
|
if (areaContains) countSuccess++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -380,6 +409,12 @@ public class CtrCntrlService {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* TODO |
|
|
|
|
* |
|
|
|
|
* @param id |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public Map<String, String> getId(String id) { |
|
|
|
|
Map<String, String> result = new HashMap<>(); |
|
|
|
|
|
|
|
|
@ -389,14 +424,14 @@ public class CtrCntrlService {
|
|
|
|
|
|
|
|
|
|
boolean isControl = false; |
|
|
|
|
|
|
|
|
|
if(latestControl != null) { |
|
|
|
|
if (latestControl != null) { |
|
|
|
|
CtrCntrlHstry latestHistory = cntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(latestControl.getCntrlId()).orElse(null); |
|
|
|
|
|
|
|
|
|
if(latestHistory != null) { |
|
|
|
|
if (latestHistory != null) { |
|
|
|
|
long diffMinute = DateUtils.diffMinute(latestHistory.getSrvrRcvDt(), new Date()); |
|
|
|
|
log.info("DIFF MINUTE : {}", diffMinute); |
|
|
|
|
// log.info("DIFF MINUTE : {}", diffMinute);
|
|
|
|
|
|
|
|
|
|
if("01".equals(latestControl.getEndTypeCd()) || diffMinute > 5) { |
|
|
|
|
if ("01".equals(latestControl.getEndTypeCd()) || diffMinute > 5) { |
|
|
|
|
isControl = false; |
|
|
|
|
} |
|
|
|
|
if(!"01".equals(latestControl.getEndTypeCd()) && diffMinute < 5) { |
|
|
|
@ -410,7 +445,7 @@ public class CtrCntrlService {
|
|
|
|
|
isControl = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(isControl) { |
|
|
|
|
if (isControl) { |
|
|
|
|
result.put("controlId", latestControl.getCntrlId()); |
|
|
|
|
result.put("typeCd", "02"); |
|
|
|
|
result.put("areaTrnsYn", "E"); |
|
|
|
@ -433,7 +468,7 @@ public class CtrCntrlService {
|
|
|
|
|
List<BasFlightPlanModel> planList = this.getFlightPlan(id); |
|
|
|
|
|
|
|
|
|
result.put("controlWarnCd", "N"); |
|
|
|
|
if(planList != null && !planList.isEmpty()) { |
|
|
|
|
if (planList != null && !planList.isEmpty()) { |
|
|
|
|
CtrCntrlPlanContainsRq containsRq = new CtrCntrlPlanContainsRq(); |
|
|
|
|
containsRq.setIdntfNum(id); |
|
|
|
|
containsRq.setLat(lat); |
|
|
|
|