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)); return ResponseEntity.ok().body(new SuccessResponse(rs));
} }
/**
* TODO 실시간 Control ID 발급
*
* @param id
* @return
*/
@GetMapping("/id/{id}") @GetMapping("/id/{id}")
public ResponseEntity<? extends BasicResponse> getId(@PathVariable String id) { public ResponseEntity<? extends BasicResponse> getId(@PathVariable String id) {
Map<String, String> result; Map<String, String> result;
@ -212,6 +218,14 @@ public class CtrCntrlController {
return ResponseEntity.ok().body(new SuccessResponse(result)); return ResponseEntity.ok().body(new SuccessResponse(result));
} }
/**
* TODO 비행 관제 기체의 비정상 상황 확인
*
* @param id
* @param lat
* @param lon
* @return
*/
@GetMapping("/warn/{id}/{lat}/{lon}") @GetMapping("/warn/{id}/{lat}/{lon}")
public ResponseEntity<? extends BasicResponse> checkWarring(@PathVariable String id, public ResponseEntity<? extends BasicResponse> checkWarring(@PathVariable String id,
@PathVariable Double lat, @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 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 com.palnet.comn.utils.DateUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -178,9 +178,9 @@ public class CtrCntrlService {
*/ */
public List<CtrCntrlWarnLogModel> getWarnLog(String controlId) { public List<CtrCntrlWarnLogModel> getWarnLog(String controlId) {
List<CtrCntrlWarnLog> logs = warnLogRepository.findAllByCntrlId(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(); CtrCntrlWarnLogModel model = new CtrCntrlWarnLogModel();
model.setCntrlId(log.getCntrlId()); model.setCntrlId(log.getCntrlId());
@ -190,40 +190,74 @@ public class CtrCntrlService {
warnLog.add(model); warnLog.add(model);
} }
return warnLog; return warnLog;
} }
/**
* TODO 기체 최신 비정상 로그 비정상 로그 전체 개수
* @param id
* @return
*/
@Transactional
public List<CtrCntrlArcrftWarnModel> getArcrftWarnList(String id) { public List<CtrCntrlArcrftWarnModel> getArcrftWarnList(String id) {
Map<String, CtrCntrlArcrftWarnModel> map = new HashMap<>(); 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;
String[] ids = id.indexOf(",") > -1 ? id.split(",") : new String[] {id}; String[] ids = id.indexOf(",") > -1 ? id.split(",") : new String[] {id};
for(String cntrlId : ids) { for (String cntrlId : ids) {
CtrCntrlArcrftWarnModel model = new CtrCntrlArcrftWarnModel(); CtrCntrlArcrftWarnModel model = new CtrCntrlArcrftWarnModel();
CtrCntrlBas control = cntrlBasRepository.findById(cntrlId).orElse(null); CtrCntrlBas control = cntrlBasRepository.findById(cntrlId).orElse(null);
CtrCntrlWarnLog warnLog = warnLogRepository.findFirstByCntrlIdOrderByOccurDtDesc(cntrlId); CtrCntrlHstry hisControl = cntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(cntrlId).orElse(null);
Integer warnCount = warnLogRepository.countByCntrlId(cntrlId);
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) { CtrCntrlPlanContainsRs ctrCntrlPlanContainsRs = this.checkPlanContains(containsRq);
if(warnLog != null) { model.setControlWarnCd(ctrCntrlPlanContainsRs.isWarning());
model.setWarnType(warnLog.getWarnType());
model.setOccurDt(warnLog.getOccurDt());
model.setCreateDt(warnLog.getCreateDt());
model.setCreateUserId(warnLog.getCreateUserId());
} }
}
model.setCntrlId(control.getCntrlId()); if (model.isControlWarnCd()) {
model.setIdntfNum(control.getIdntfNum()); CtrCntrlWarnLog log = new CtrCntrlWarnLog();
model.setWarnCount(warnCount);
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); result.add(model);
// map.put(cntrlId, model);
} }
return result; return result;
@ -244,10 +278,10 @@ public class CtrCntrlService {
// 기체 식별 정보 조회 // 기체 식별 정보 조회
ComIdntfBas idntfBas = idntfRepository.findById(idntfNum).orElse(null); ComIdntfBas idntfBas = idntfRepository.findById(idntfNum).orElse(null);
if(idntfBas != null) { if (idntfBas != null) {
ComArcrftBas arcrftBas = arcrftRepository.findById(idntfBas.getArcrftSno()).orElse(null); ComArcrftBas arcrftBas = arcrftRepository.findById(idntfBas.getArcrftSno()).orElse(null);
if(arcrftBas != null) { if (arcrftBas != null) {
// 비행 계획 기체 조회 // 비행 계획 기체 조회
List<FltPlanArcrft> arcrftList = planArcrftRepository. List<FltPlanArcrft> arcrftList = planArcrftRepository.
findByIdntfNumAndArcrftSnoOrderByPlanArcrftSnoAsc(idntfNum, arcrftBas.getArcrftSno()); findByIdntfNumAndArcrftSnoOrderByPlanArcrftSnoAsc(idntfNum, arcrftBas.getArcrftSno());
@ -322,9 +356,9 @@ public class CtrCntrlService {
int countSuccess = 0; int countSuccess = 0;
if(rq.getIdntfNum() != null) { if (rq.getIdntfNum() != null) {
for(BasFlightPlanModel plan : rq.getPlanList()) { for (BasFlightPlanModel plan : rq.getPlanList()) {
for(BasFlightPlanAreaModel area : plan.getAreaList()) { for (BasFlightPlanAreaModel area : plan.getAreaList()) {
List<Coordinate> planArea = areaUtils.convertCoordinates(area.getCoordList()); List<Coordinate> planArea = areaUtils.convertCoordinates(area.getCoordList());
// 드론 위치 // 드론 위치
@ -336,33 +370,28 @@ public class CtrCntrlService {
*/ */
boolean areaContains = true; boolean areaContains = true;
// boolean airspaceContains = false; // 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> transPlanArea = areaUtils.transform(planArea, "EPSG:4326", "EPSG:5181");
List<Coordinate> planBuffer = areaUtils.buffer(transPlanArea, area.getBufferZone()); List<Coordinate> planBuffer = areaUtils.buffer(transPlanArea, area.getBufferZone());
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); // log.info("LINE CONTAINS : {}", areaContains);
// airspaceContains = areaUtils.contains(targetCoord);
} }
if("POLYGON".equals(area.getAreaType())) { if ("POLYGON".equals(area.getAreaType())) {
planArea.add(planArea.get(0)); planArea.add(planArea.get(0));
areaContains = areaUtils.contains(planArea, targetCoord); 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> circle = areaUtils.createCircle(planArea.get(0), area.getBufferZone());
// List<Coordinate> transCircle = areaUtils.transform(circle, "EPSG:5181", "EPSG:4326");
areaContains = areaUtils.contains(circle, targetCoord); 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) { public Map<String, String> getId(String id) {
Map<String, String> result = new HashMap<>(); Map<String, String> result = new HashMap<>();
@ -389,14 +424,14 @@ public class CtrCntrlService {
boolean isControl = false; boolean isControl = false;
if(latestControl != null) { if (latestControl != null) {
CtrCntrlHstry latestHistory = cntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(latestControl.getCntrlId()).orElse(null); CtrCntrlHstry latestHistory = cntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(latestControl.getCntrlId()).orElse(null);
if(latestHistory != null) { if (latestHistory != null) {
long diffMinute = DateUtils.diffMinute(latestHistory.getSrvrRcvDt(), new Date()); 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; isControl = false;
} }
if(!"01".equals(latestControl.getEndTypeCd()) && diffMinute < 5) { if(!"01".equals(latestControl.getEndTypeCd()) && diffMinute < 5) {
@ -410,7 +445,7 @@ public class CtrCntrlService {
isControl = false; isControl = false;
} }
if(isControl) { if (isControl) {
result.put("controlId", latestControl.getCntrlId()); result.put("controlId", latestControl.getCntrlId());
result.put("typeCd", "02"); result.put("typeCd", "02");
result.put("areaTrnsYn", "E"); result.put("areaTrnsYn", "E");
@ -433,7 +468,7 @@ public class CtrCntrlService {
List<BasFlightPlanModel> planList = this.getFlightPlan(id); List<BasFlightPlanModel> planList = this.getFlightPlan(id);
result.put("controlWarnCd", "N"); result.put("controlWarnCd", "N");
if(planList != null && !planList.isEmpty()) { if (planList != null && !planList.isEmpty()) {
CtrCntrlPlanContainsRq containsRq = new CtrCntrlPlanContainsRq(); CtrCntrlPlanContainsRq containsRq = new CtrCntrlPlanContainsRq();
containsRq.setIdntfNum(id); containsRq.setIdntfNum(id);
containsRq.setLat(lat); 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 = { private final String[] PERMITTED_URL = {
"/api/acnt/**", "/api/acnt/**",
"/api/ctr/cntrl/id/**", "/api/ctr/cntrl/id/**",
"/api/ctr/cntrl/warn/**",
/* swagger v2 */ /* swagger v2 */
"/v2/api-docs", "/v2/api-docs",
"/swagger-resources", "/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); 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; return model;
} }
@ -167,22 +137,6 @@ public class MessageServiceImpl implements MessageService {
if(model.getTypeCd().equals("01") || model.getTypeCd().equals("99")) { if(model.getTypeCd().equals("01") || model.getTypeCd().equals("99")) {
ctrCntrlJpaService.insertCtrCntrlHstryArea(dbModel, ctrCntrlHstry.getHstrySno()); 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 @Override

Loading…
Cancel
Save