Browse Source

비정상 상황 판별 작업

feature/auth
노승철 2 years ago
parent
commit
87caad7e12
  1. 78
      src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java
  2. 21
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  3. 1
      src/main/java/com/palnet/comn/utils/AreaUtils.java

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

@ -21,6 +21,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;
@ -90,7 +91,13 @@ public class CtrCntrlService {
return filterList;
}
/**
* TODO 관제 상세 조회
*
* @param controlId
* @return
*/
public CtrCntrlDtlModel getDetail(String controlId) {
CtrCntrlDtlModel result = new CtrCntrlDtlModel();
@ -134,15 +141,33 @@ public class CtrCntrlService {
}
/**
* TODO 관제 이력 조회
*
* @param controlId
* @return
*/
public List<GPHistoryModel> getHistory(String controlId) {
return query.getDroneHistory(controlId);
}
/**
* TODO 사용자가 속한 그룹 정보 조회
*
* @param cstmrSno
* @return
*/
public List<AcntCstmrGroupModel> getGroupAuthInfo(Integer cstmrSno) {
List<AcntCstmrGroupModel> list = query.findByGroupInfo(cstmrSno);
return list;
}
/**
* TODO 비정상 상황 이력 조회
*
* @param controlId
* @return
*/
public List<CtrCntrlWarnLogModel> getWarnLog(String controlId) {
List<CtrCntrlWarnLog> logs = warnLogRepository.findAllByCntrlId(controlId);
List<CtrCntrlWarnLogModel> warnLog = new ArrayList<CtrCntrlWarnLogModel>();
@ -160,6 +185,12 @@ public class CtrCntrlService {
return warnLog;
}
/**
* TODO 식별 번호에 해당되는 비행구역 조회
*
* @param idntfNum
* @return
*/
@Transactional(readOnly = true)
public List<BasFlightPlanModel> getFlightPlan(String idntfNum) {
List<BasFlightPlanModel> rs = new ArrayList<>();
@ -209,8 +240,12 @@ public class CtrCntrlService {
// Buffer 영역 생성 저장
if("LINE".equals(area.getAreaType())) {
List<Coordinate> convertCoordinates = areaUtils.convertCoordinates(areaMapping.getCoordList());
List<Coordinate> bufferList = areaUtils.buffer(convertCoordinates, areaMapping.getBufferZone());
List<BasFlightPlanAreaCoordModel> bufferCoordList = areaUtils.convertModel(bufferList);
List<Coordinate> transCoordList = areaUtils.transform(convertCoordinates, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(transCoordList, areaMapping.getBufferZone());
List<Coordinate> transBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); // buffer 영역 좌표계 변환
List<BasFlightPlanAreaCoordModel> bufferCoordList = areaUtils.convertModel(transBufferList);
areaMapping.setBufferCoordList(bufferCoordList);
}
@ -232,6 +267,12 @@ public class CtrCntrlService {
return rs;
}
/**
* TODO 비행 관제 비정상 상황 판별
*
* @param rq
* @return
*/
public CtrCntrlPlanContainsRs checkPlanContains(CtrCntrlPlanContainsRq rq) {
CtrCntrlPlanContainsRs rs = new CtrCntrlPlanContainsRs();
@ -241,31 +282,42 @@ public class CtrCntrlService {
for(BasFlightPlanModel plan : rq.getPlanList()) {
for(BasFlightPlanAreaModel area : plan.getAreaList()) {
List<Coordinate> planArea = areaUtils.convertCoordinates(area.getCoordList());
//드론 위치
// 드론 위치
Coordinate targetCoord = new Coordinate(rq.getLon(), rq.getLat());
/**
* 1. 비행 구역에 벗어나면 모든 경우의 수는 비정상 상황으로 판단
* 2. 비정상 상황 TYPE(비행구역, 공역) 따라 구분 (미적용)
*/
boolean areaContains = true;
boolean airspaceContains = false;
// boolean airspaceContains = false;
if("LINE".equals(area.getAreaType())) {
List<Coordinate> planBuffer = areaUtils.buffer(planArea, area.getBufferZone());
List<Coordinate> transPlanArea = areaUtils.transform(planArea, "EPSG:4326", "EPSG:5181");
areaContains = areaUtils.contains(planBuffer, targetCoord);
airspaceContains = areaUtils.contains(targetCoord);
List<Coordinate> planBuffer = areaUtils.buffer(transPlanArea, area.getBufferZone());
List<Coordinate> transPlanBuffer = areaUtils.transform(planBuffer, "EPSG:5181", "EPSG:4326");
areaContains = areaUtils.contains(transPlanBuffer, targetCoord);
// airspaceContains = areaUtils.contains(targetCoord);
}
if("POLYGON".equals(area.getAreaType())) {
planArea.add(planArea.get(0));
areaContains = areaUtils.contains(planArea, targetCoord);
airspaceContains = areaUtils.contains(targetCoord);
// airspaceContains = areaUtils.contains(targetCoord);
}
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);
// airspaceContains = areaUtils.contains(targetCoord);
}
if(areaContains || !airspaceContains) countSuccess++;
// if(areaContains || !airspaceContains) countSuccess++;
if(areaContains) countSuccess++;
}
}
}

21
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java

@ -162,16 +162,17 @@ public class FltPlanQueryRepository {
))
.from(bas)
.where((((bas.schFltStDt.loe(rq.getSchFltStDt()))
.and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))
.or((bas.schFltStDt.goe(rq.getSchFltStDt()))
.and((bas.schFltStDt.loe(rq.getSchFltEndDt()))
.and(bas.schFltEndDt.goe(rq.getSchFltEndDt()))))
.or(((bas.schFltStDt.loe(rq.getSchFltStDt()))
.and(bas.schFltEndDt.goe(rq.getSchFltStDt())))
.and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))
.or((bas.schFltStDt.goe(rq.getSchFltStDt()))
.and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))))
.and(bas.delYn.eq("N")))
.and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))
.or((bas.schFltStDt.goe(rq.getSchFltStDt()))
.and((bas.schFltStDt.loe(rq.getSchFltEndDt()))
.and(bas.schFltEndDt.goe(rq.getSchFltEndDt()))))
.or(((bas.schFltStDt.loe(rq.getSchFltStDt()))
.and(bas.schFltEndDt.goe(rq.getSchFltStDt())))
.and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))
.or((bas.schFltStDt.goe(rq.getSchFltStDt()))
.and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))))
.and(bas.delYn.eq("N"))
.and(bas.groupId.eq(rq.getGroupId())))
.fetch();
return list;
}

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

@ -145,6 +145,7 @@ public class AreaUtils {
Point target = geometryFactory.createPoint(targetCoordinate);
result = plan.contains(target);
// target.contains(plan);
}
return result;

Loading…
Cancel
Save