@ -73,7 +73,6 @@ public class CtrCntrlService {
private final FltPlanQueryRepository fltPlanQueryRepository ;
public List < GPHistoryModel > getListHistory ( String objectId ) {
List < GPHistoryModel > filterList = new ArrayList < GPHistoryModel > ( ) ;
@ -102,14 +101,21 @@ public class CtrCntrlService {
CtrCntrlDtlModel result ;
result = query . detailCntrl ( controlId ) ;
// result = query.detailCntrl(controlId);
result = query . detailCntrlForKac ( controlId ) ;
List < CtrCntrlHstryArea > areaList = query . detailArea ( controlId ) ;
String stAreaNm = "" ;
if ( result . getHpno ( ) = = null | | result . getHpno ( ) . isEmpty ( ) ) {
} else {
result . setHpno ( EncryptUtils . decrypt ( result . getHpno ( ) ) ) ;
if ( result . getHpno ( ) ! = null & & ! result . getHpno ( ) . isEmpty ( ) ) {
try {
String decHpno = EncryptUtils . decrypt ( result . getHpno ( ) ) ;
if ( decHpno ! = null & & ! decHpno . isEmpty ( ) ) {
result . setHpno ( decHpno ) ;
}
} catch ( Exception e ) {
log . error ( "ERROR: " , e ) ;
}
}
for ( CtrCntrlHstryArea data : areaList ) {
@ -220,7 +226,7 @@ public class CtrCntrlService {
CtrCntrlHstry hisControl = query . getWarnHstryList ( cntrlId ) ; // repo method 이름을 왜 이렇게 지었는지는 모르겠으나.. cntrlBas에 insert될 때 같이 insert되는 cntrlHstry 데이터 중 가장 마지막에 찍힌 hstry 로그를 가져옴
int planSno = relRepository . getPlanSno ( idntfNum ) . orElse ( 0 ) ; // cntrlBas insert될때 같이 insert된 mapping 테이블에서 식별번호로 planSno 가져옴
if ( query . checkPlanSno ( planSno ) < 1 ) continue ;
if ( query . checkPlanSno ( planSno ) < 1 ) continue ;
FltPlanArea planAreaData = query . getPlanData ( planSno ) ; // planSno에 맞는 비헹계획서의 비행계획경로정보 가져옴
@ -304,7 +310,7 @@ public class CtrCntrlService {
arcrftList . forEach ( arcrft - > {
FltPlanBas plan = planBasRepository .
findByGroupFlightPlan ( arcrft . getPlanSno ( ) , "Y" , fltNowDt ) . orElse ( null ) ;
List < BasFlightPlanArcrftModel > arcrftMappingList = new ArrayList < > ( ) ;
List < BasFlightPlanArcrftModel > arcrftMappingList = new ArrayList < > ( ) ;
BasFlightPlanArcrftModel arcrftMapping = BasFlightMapper . mapper . entityToModel ( arcrftBas ) ;
arcrftMapping . setIdntfNum ( idntfNum ) ;
arcrftMappingList . add ( arcrftMapping ) ;
@ -368,6 +374,7 @@ public class CtrCntrlService {
* 식별 번호에 해당되는 비행구역 조회
* KAC에서는 기초데이터를 먼저 입력하는 것이 아닌 비행계획서만 작성하므로 생략되는 로직이 있음
* 따라서 별도로 구성함
*
* @param idntfNum
* @return
* /
@ -375,13 +382,13 @@ public class CtrCntrlService {
List < BasFlightPlanModel > rs = fltPlanQueryRepository . getPlanByIdntfNum ( idntfNum ) ;
// Line일 경우 버퍼 생성
if ( rs ! = null & & ! rs . isEmpty ( ) ) {
if ( rs ! = null & & ! rs . isEmpty ( ) ) {
rs . forEach ( r - > {
List < BasFlightPlanAreaModel > areaList = r . getAreaList ( ) ;
if ( areaList ! = null & & ! areaList . isEmpty ( ) ) {
if ( areaList ! = null & & ! areaList . isEmpty ( ) ) {
areaList . forEach ( a - > {
List < BasFlightPlanAreaCoordModel > coordList = a . getCoordList ( ) ;
if ( coordList ! = null & & ! coordList . isEmpty ( ) ) {
if ( coordList ! = null & & ! coordList . isEmpty ( ) ) {
// Buffer 영역 생성 저장
if ( "LINE" . equals ( a . getAreaType ( ) ) ) {
List < Coordinate > convertCoordinates = areaUtils . convertCoordinates ( coordList ) ;
@ -480,7 +487,7 @@ public class CtrCntrlService {
if ( rq . getIdntfNum ( ) ! = null ) {
List < Coordinate > planArea = new ArrayList < > ( ) ;
for ( FltPlanAreaCoord coord : rq . getCoordList ( ) ) {
for ( FltPlanAreaCoord coord : rq . getCoordList ( ) ) {
Coordinate coordinate = new Coordinate ( coord . getLon ( ) , coord . getLat ( ) ) ;
planArea . add ( coordinate ) ;
@ -493,8 +500,8 @@ public class CtrCntrlService {
* 2 . 비정상 상황 TYPE ( 비행구역 , 공역 ) 에 따라 구분 ( 미적용 )
* /
boolean areaContains = true ;
switch ( rq . getAreaType ( ) ) {
case "LINE" :
switch ( rq . getAreaType ( ) ) {
case "LINE" :
List < Coordinate > transPlanArea = areaUtils . transform ( planArea , "EPSG:4326" , "EPSG:5181" ) ;
List < Coordinate > planBuffer = areaUtils . buffer ( transPlanArea , rq . getBufferZone ( ) ) ;
List < Coordinate > transPlanBuffer = areaUtils . transform ( planBuffer , "EPSG:5181" , "EPSG:4326" ) ;
@ -502,12 +509,12 @@ public class CtrCntrlService {
areaContains = areaUtils . contains ( transPlanBuffer , targetCoord ) ;
break ;
case "POLYGON" :
case "POLYGON" :
planArea . add ( planArea . get ( 0 ) ) ;
areaContains = areaUtils . contains ( planArea , targetCoord ) ;
break ;
case "CIRCLE" :
case "CIRCLE" :
List < Coordinate > circle = areaUtils . createCircle ( planArea . get ( 0 ) , rq . getBufferZone ( ) ) ;
areaContains = areaUtils . contains ( circle , targetCoord ) ;
break ;
@ -617,58 +624,46 @@ public class CtrCntrlService {
// 시, 분, 초 구하기
int hour = now . getHour ( ) ;
int minute = now . getMinute ( ) ;
int length = ( int ) ( Math . log10 ( minute ) + 1 ) ;
int hourlength = ( int ) ( Math . log10 ( hour ) + 1 ) ;
int length = ( int ) ( Math . log10 ( minute ) + 1 ) ;
int hourlength = ( int ) ( Math . log10 ( hour ) + 1 ) ;
String strminute = Integer . toString ( minute ) ;
String strhour = Integer . toString ( hour ) ;
String basetime = null ;
if ( length < = 1 ) {
strminute = 0 + Integer . toString ( minute ) ;
} if ( hourlength < = 1 ) {
strhour = 0 + Integer . toString ( hour ) ;
if ( length < = 1 ) {
strminute = 0 + Integer . toString ( minute ) ;
}
if ( hourlength < = 1 ) {
strhour = 0 + Integer . toString ( hour ) ;
}
// 시, 분, 초 출력
if ( ( Integer . parseInt ( strhour ) > = 2 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < = 5 ) {
if ( ( Integer . parseInt ( strhour ) > = 2 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < = 5 ) {
basetime = "0200" ;
}
else if ( ( Integer . parseInt ( strhour ) > = 5 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 8 ) {
} else if ( ( Integer . parseInt ( strhour ) > = 5 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 8 ) {
basetime = "0500" ;
}
else if ( Integer . parseInt ( strhour ) < = 8 & & Integer . parseInt ( strminute ) < 10 ) {
} else if ( Integer . parseInt ( strhour ) < = 8 & & Integer . parseInt ( strminute ) < 10 ) {
basetime = "0500" ;
}
else if ( ( Integer . parseInt ( strhour ) > = 8 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 11 ) {
} else if ( ( Integer . parseInt ( strhour ) > = 8 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 11 ) {
basetime = "0800" ;
}
else if ( Integer . parseInt ( strhour ) < = 11 & & Integer . parseInt ( strminute ) < 10 ) {
} else if ( Integer . parseInt ( strhour ) < = 11 & & Integer . parseInt ( strminute ) < 10 ) {
basetime = "0800" ;
}
else if ( ( Integer . parseInt ( strhour ) > = 11 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 14 ) {
} else if ( ( Integer . parseInt ( strhour ) > = 11 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 14 ) {
basetime = "1100" ;
}
else if ( Integer . parseInt ( strhour ) < = 14 & & Integer . parseInt ( strminute ) < 10 ) {
} else if ( Integer . parseInt ( strhour ) < = 14 & & Integer . parseInt ( strminute ) < 10 ) {
basetime = "1100" ;
}
else if ( ( Integer . parseInt ( strhour ) > = 14 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 17 ) {
} else if ( ( Integer . parseInt ( strhour ) > = 14 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 17 ) {
basetime = "1400" ;
}
else if ( Integer . parseInt ( strhour ) < = 17 & & Integer . parseInt ( strminute ) < 10 ) {
} else if ( Integer . parseInt ( strhour ) < = 17 & & Integer . parseInt ( strminute ) < 10 ) {
basetime = "1400" ;
}
else if ( ( Integer . parseInt ( strhour ) > = 17 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 20 ) {
} else if ( ( Integer . parseInt ( strhour ) > = 17 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 20 ) {
basetime = "1700" ;
}
else if ( Integer . parseInt ( strhour ) < = 20 & & Integer . parseInt ( strminute ) < 10 ) {
} else if ( Integer . parseInt ( strhour ) < = 20 & & Integer . parseInt ( strminute ) < 10 ) {
basetime = "1700" ;
}
else if ( ( Integer . parseInt ( strhour ) > = 20 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 23 ) {
} else if ( ( Integer . parseInt ( strhour ) > = 20 & & Integer . parseInt ( strminute ) > 9 ) & & Integer . parseInt ( strhour ) < 23 ) {
basetime = "2000" ;
}
else if ( Integer . parseInt ( strhour ) < = 23 & & Integer . parseInt ( strminute ) < 10 ) {
} else if ( Integer . parseInt ( strhour ) < = 23 & & Integer . parseInt ( strminute ) < 10 ) {
basetime = "2000" ;
}
else
} else
basetime = "2300" ;
@ -681,24 +676,24 @@ public class CtrCntrlService {
double nx = returnCoord . getX ( ) ;
double ny = returnCoord . getY ( ) ;
String Snx = String . format ( "%.0f" , nx ) ;
String Sny = String . format ( "%.0f" , ny ) ;
urlBuilder . append ( "?" + URLEncoder . encode ( "serviceKey" , "UTF-8" ) + weatherKey ) ;
urlBuilder . append ( "&" + URLEncoder . encode ( "pageNo" , "UTF-8" ) + "=" + URLEncoder . encode ( "1" , "UTF-8" ) ) ;
urlBuilder . append ( "&" + URLEncoder . encode ( "numOfRows" , "UTF-8" ) + "=" + URLEncoder . encode ( "14" , "UTF-8" ) ) ; /*한 페이지 결과 수*/
urlBuilder . append ( "&" + URLEncoder . encode ( "dataType" , "UTF-8" ) + "=" + URLEncoder . encode ( "JSON" , "UTF-8" ) ) ; /*요청자료형식(XML/JSON) Default: XML*/
urlBuilder . append ( "&" + URLEncoder . encode ( "base_date" , "UTF-8" ) + "=" + URLEncoder . encode ( strToday , "UTF-8" ) ) ; /*'21년 6월 28일 발표*/
urlBuilder . append ( "&" + URLEncoder . encode ( "base_time" , "UTF-8" ) + "=" + URLEncoder . encode ( basetime , "UTF-8" ) ) ; /*06시 발표(정시단위) */
urlBuilder . append ( "&" + URLEncoder . encode ( "nx" , "UTF-8" ) + "=" + URLEncoder . encode ( Snx , "UTF-8" ) ) ; /*예보지점의 X 좌표값*/
urlBuilder . append ( "&" + URLEncoder . encode ( "ny" , "UTF-8" ) + "=" + URLEncoder . encode ( Sny , "UTF-8" ) ) ; /*예보지점의 Y 좌표값*/
String Snx = String . format ( "%.0f" , nx ) ;
String Sny = String . format ( "%.0f" , ny ) ;
urlBuilder . append ( "?" + URLEncoder . encode ( "serviceKey" , "UTF-8" ) + weatherKey ) ;
urlBuilder . append ( "&" + URLEncoder . encode ( "pageNo" , "UTF-8" ) + "=" + URLEncoder . encode ( "1" , "UTF-8" ) ) ;
urlBuilder . append ( "&" + URLEncoder . encode ( "numOfRows" , "UTF-8" ) + "=" + URLEncoder . encode ( "14" , "UTF-8" ) ) ; /*한 페이지 결과 수*/
urlBuilder . append ( "&" + URLEncoder . encode ( "dataType" , "UTF-8" ) + "=" + URLEncoder . encode ( "JSON" , "UTF-8" ) ) ; /*요청자료형식(XML/JSON) Default: XML*/
urlBuilder . append ( "&" + URLEncoder . encode ( "base_date" , "UTF-8" ) + "=" + URLEncoder . encode ( strToday , "UTF-8" ) ) ; /*'21년 6월 28일 발표*/
urlBuilder . append ( "&" + URLEncoder . encode ( "base_time" , "UTF-8" ) + "=" + URLEncoder . encode ( basetime , "UTF-8" ) ) ; /*06시 발표(정시단위) */
urlBuilder . append ( "&" + URLEncoder . encode ( "nx" , "UTF-8" ) + "=" + URLEncoder . encode ( Snx , "UTF-8" ) ) ; /*예보지점의 X 좌표값*/
urlBuilder . append ( "&" + URLEncoder . encode ( "ny" , "UTF-8" ) + "=" + URLEncoder . encode ( Sny , "UTF-8" ) ) ; /*예보지점의 Y 좌표값*/
URL url = new URL ( urlBuilder . toString ( ) ) ;
HttpURLConnection conn = ( HttpURLConnection ) url . openConnection ( ) ;
conn . setRequestMethod ( "GET" ) ;
conn . setRequestProperty ( "Content-type" , "application/json" ) ;
log . info ( "Response code: " + conn . getResponseCode ( ) ) ;
BufferedReader rd ;
if ( conn . getResponseCode ( ) > = 200 & & conn . getResponseCode ( ) < = 300 ) {
if ( conn . getResponseCode ( ) > = 200 & & conn . getResponseCode ( ) < = 300 ) {
rd = new BufferedReader ( new InputStreamReader ( conn . getInputStream ( ) ) ) ;
} else {
rd = new BufferedReader ( new InputStreamReader ( conn . getErrorStream ( ) ) ) ;
@ -708,18 +703,18 @@ public class CtrCntrlService {
while ( ( line = rd . readLine ( ) ) ! = null ) {
sb . append ( line ) ;
}
CtrTrnsLctnModel weatherResult = ctrTrnsLctnService . convertLatlonToAddress ( rq . getNx ( ) , rq . getNy ( ) ) ;
CtrTrnsLctnModel weatherResult = ctrTrnsLctnService . convertLatlonToAddress ( rq . getNx ( ) , rq . getNy ( ) ) ;
log . info ( "weatherResult >>>> : {}" , weatherResult ) ;
String str = sb . toString ( ) ;
JSONParser parser = new JSONParser ( ) ;
JSONObject jsonObject = ( JSONObject ) parser . parse ( str ) ;
if ( weatherResult ! = null ) {
jsonObject . put ( "area1" , weatherResult . getArea1 ( ) ) ;
jsonObject . put ( "area2" , weatherResult . getArea2 ( ) ) ;
jsonObject . put ( "area3" , weatherResult . getArea3 ( ) ) ;
jsonObject . put ( "landNm" , weatherResult . getLandNm ( ) ) ;
jsonObject . put ( "landNum" , weatherResult . getLandNum ( ) ) ;
if ( weatherResult ! = null ) {
jsonObject . put ( "area1" , weatherResult . getArea1 ( ) ) ;
jsonObject . put ( "area2" , weatherResult . getArea2 ( ) ) ;
jsonObject . put ( "area3" , weatherResult . getArea3 ( ) ) ;
jsonObject . put ( "landNm" , weatherResult . getLandNm ( ) ) ;
jsonObject . put ( "landNum" , weatherResult . getLandNum ( ) ) ;
}
rd . close ( ) ;
conn . disconnect ( ) ;
@ -727,6 +722,7 @@ public class CtrCntrlService {
return jsonObject ;
}
public Coordinate wheather ( Coordinate coord ) {
double nx ;
double ny ;
@ -821,20 +817,20 @@ public class CtrCntrlService {
Double mvDistanceAll = 0 . 0 ;
Duration duration = null ;
if ( completeInfo . size ( ) > 2 ) {
if ( completeInfo . size ( ) > 2 ) {
Instant start = completeInfo . get ( 0 ) . getSrvrRcvDt ( ) ;
Instant end = completeInfo . get ( completeInfo . size ( ) - 1 ) . getSrvrRcvDt ( ) ;
Instant end = completeInfo . get ( completeInfo . size ( ) - 1 ) . getSrvrRcvDt ( ) ;
if ( start ! = null & & end ! = null ) {
if ( start ! = null & & end ! = null ) {
LocalDate startDate = start . atZone ( ZoneId . of ( "Asia/Seoul" ) ) . toLocalDate ( ) ;
LocalDate endDate = end . atZone ( ZoneId . of ( "Asia/Seoul" ) ) . toLocalDate ( ) ;
duration = Duration . between ( startDate , endDate ) ;
}
for ( int from = 0 , to = 1 ; from < completeInfo . size ( ) - 2 ; from + + , to + + ) {
for ( int from = 0 , to = 1 ; from < completeInfo . size ( ) - 2 ; from + + , to + + ) {
Coordinate fromCoord = new Coordinate ( ) ;
Coordinate toCoord = new Coordinate ( ) ;
@ -864,8 +860,8 @@ public class CtrCntrlService {
result . setElevAvg ( elevAvg ) ;
result . setSpeedAvg ( speedAvg ) ;
result . setMvDistance ( mvDistanceAll * 1000 ) ;
if ( duration ! = null ) result . setMvTime ( duration . toString ( ) ) ;
result . setMvDistance ( mvDistanceAll * 1000 ) ;
if ( duration ! = null ) result . setMvTime ( duration . toString ( ) ) ;
return result ;
}