Browse Source

기체별 비정상 알림 수정

feature/auth
노승철 2 years ago
parent
commit
0f3d0559f6
  1. 14
      src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java
  2. 2
      src/main/java/com/palnet/biz/api/ctr/cntrl/model/CtrCntrlArcrftWarnModel.java
  3. 113
      src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java
  4. 1
      src/main/java/com/palnet/biz/config/WebSecurityConfig.java
  5. 46
      src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java

14
src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java

@ -199,6 +199,12 @@ public class CtrCntrlController {
return ResponseEntity.ok().body(new SuccessResponse(rs));
}
/**
* TODO 실시간 Control ID 발급
*
* @param id
* @return
*/
@GetMapping("/id/{id}")
public ResponseEntity<? extends BasicResponse> getId(@PathVariable String id) {
Map<String, String> result;
@ -212,6 +218,14 @@ public class CtrCntrlController {
return ResponseEntity.ok().body(new SuccessResponse(result));
}
/**
* TODO 비행 관제 기체의 비정상 상황 확인
*
* @param id
* @param lat
* @param lon
* @return
*/
@GetMapping("/warn/{id}/{lat}/{lon}")
public ResponseEntity<? extends BasicResponse> checkWarring(@PathVariable String id,
@PathVariable Double lat,

2
src/main/java/com/palnet/biz/api/ctr/cntrl/model/CtrCntrlArcrftWarnModel.java

@ -16,4 +16,6 @@ public class CtrCntrlArcrftWarnModel {
private Integer warnCount;
private boolean controlWarnCd = false;
}

113
src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java

@ -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,40 +190,74 @@ 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);
CtrCntrlWarnLog warnLog = warnLogRepository.findFirstByCntrlIdOrderByOccurDtDesc(cntrlId);
Integer warnCount = warnLogRepository.countByCntrlId(cntrlId);
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);
if(control != null) {
if(warnLog != null) {
model.setWarnType(warnLog.getWarnType());
model.setOccurDt(warnLog.getOccurDt());
model.setCreateDt(warnLog.getCreateDt());
model.setCreateUserId(warnLog.getCreateUserId());
CtrCntrlPlanContainsRs ctrCntrlPlanContainsRs = this.checkPlanContains(containsRq);
model.setControlWarnCd(ctrCntrlPlanContainsRs.isWarning());
}
}
model.setCntrlId(control.getCntrlId());
model.setIdntfNum(control.getIdntfNum());
model.setWarnCount(warnCount);
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 (warnLog != null) {
model.setWarnType(warnLog.getWarnType());
model.setOccurDt(warnLog.getOccurDt());
model.setCreateDt(warnLog.getCreateDt());
model.setCreateUserId(warnLog.getCreateUserId());
}
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);

1
src/main/java/com/palnet/biz/config/WebSecurityConfig.java

@ -38,7 +38,6 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final String[] PERMITTED_URL = {
"/api/acnt/**",
"/api/ctr/cntrl/id/**",
"/api/ctr/cntrl/warn/**",
/* swagger v2 */
"/v2/api-docs",
"/swagger-resources",

46
src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java

@ -113,36 +113,6 @@ public class MessageServiceImpl implements MessageService {
shareContext.putIdntfKey(model.getObjectId(), controlID);
}
// if(shareContext.getIndtfKey(model.getObjectId()) == null) {
// String controlID = UUID.randomUUID().toString();
//
// model.setControlId(controlID);
// model.setTypeCd("01");
// model.setAreaTrnsYn("N");
// model.setControlStartDt(DateUtils.getCurrentTime());
//
// // 기체 식별번호의 관제 ID 저장 (single ton)
// shareContext.putIdntfKey(model.getObjectId(), controlID);
// } else {
// model.setControlId(shareContext.getIndtfKey(model.getObjectId()));
// model.setTypeCd("02");
// model.setAreaTrnsYn("E");
// }
// 비행구역 Contains Check
// List<BasFlightPlanModel> planList = ctrCntrlService.getFlightPlan(model.getObjectId());
//
// if(planList != null && !planList.isEmpty()) {
// CtrCntrlPlanContainsRq containsRq = new CtrCntrlPlanContainsRq();
// containsRq.setIdntfNum(model.getObjectId());
// containsRq.setLat(model.getLat());
// containsRq.setLon(model.getLng());
// containsRq.setPlanList(planList);
//
// CtrCntrlPlanContainsRs ctrCntrlPlanContainsRs = ctrCntrlService.checkPlanContains(containsRq);
// model.setControlWarnCd(ctrCntrlPlanContainsRs.isWarning());
// }
return model;
}
@ -167,22 +137,6 @@ public class MessageServiceImpl implements MessageService {
if(model.getTypeCd().equals("01") || model.getTypeCd().equals("99")) {
ctrCntrlJpaService.insertCtrCntrlHstryArea(dbModel, ctrCntrlHstry.getHstrySno());
}
// 비정상 상황 로그 데이터 생성
if(model.isControlWarnCd()) {
CtrCntrlWarnLog log = new CtrCntrlWarnLog();
log.setCntrlId(model.getControlId());
log.setIdntfNum(model.getObjectId());
log.setOccurDt(DateUtils.stringToDatetime(model.getServerRcvDt()));
log.setLat(model.getLat());
log.setLon(model.getLng());
log.setElev(model.getElev());
log.setCreateDt(DateUtils.nowDate());
log.setWarnType("PLAN");
warnLogRepository.save(log);
}
}
@Override

Loading…
Cancel
Save