@ -461,6 +461,16 @@ public class CtrCntrlQueryRepository{
return new PageImpl < > ( result , pageable , result . size ( ) ) ;
}
/ * *
* 비행 시뮬레이션할 데이터를 조건에 맞춰 데이터베이스에서 조회하는 SQL 기능 .
* @param rq
* @param pageable
* @param adminAuth
* @param idntfList
* @param basResult
* @param pilotResult
* @return
* /
public PageImpl < AnlsHstryModel > cntrlBasNormalSmltList ( AnlsHstryRqModel rq ,
Pageable pageable ,
List < JwtGroupModel > adminAuth ,
@ -483,38 +493,103 @@ public class CtrCntrlQueryRepository{
end . setTime ( Date . from ( DateUtils . stringToDate ( rq . getEndDate ( ) ) ) ) ;
end . add ( Calendar . DATE , 1 ) ;
Date endDate = end . getTime ( ) ;
/ * *
* 조건1 . 검색시작일 후
* 조건2 . 검색끝일 전
* 조건3 . 승인값이 "Y" 인지
* 조건4 . status가 값이 99인지
* /
builder . and ( qCntrlBasEntity . cntrlStDt . after ( DateUtils . stringToDate ( rq . getStDate ( ) ) ) ) ;
builder . and ( qCntrlBasEntity . cntrlEndDt . before ( endDate . toInstant ( ) ) ) ;
builder . and ( qFltPlanBasEntity . aprvlYn . eq ( "Y" ) ) ;
builder . and ( qCntrlBasEntity . statusCd . eq ( "99" ) ) ;
// adminAuth값이 있을 시[유저 권한은 USER지만 그룹내 권한이 ADMIN, MASTER 일경우 그룹전체 값 확인 가능 함.]
if ( adminAuth . size ( ) > 0 ) {
for ( JwtGroupModel list : adminAuth ) {
adminBuilder . or ( qFltPlanCtrCntrlRelEntity . groupId . eq ( list . getGroupId ( ) ) ) ;
}
}
// 회원 고유번호와 맞는 기체고유번호 조건추가
if ( idntfList . size ( ) > 0 ) {
for ( ComIdntfBas list : idntfList ) {
idntfBuilder . or ( qCntrlBasEntity . idntfNum . eq ( list . getIdntfNum ( ) ) ) ;
}
}
// 회원 고유번호와 맞는 비행계획서 고유번호 조건 추가
if ( basResult . size ( ) > 0 ) {
for ( FltPlanBas list : basResult ) {
basBuilder . or ( qFltPlanCtrCntrlRelEntity . planSno . eq ( list . getPlanSno ( ) ) ) ;
}
}
// 회원 고유번호와 맞는 파일럿번호로 조회한 비행계획서 번호 조건 추가
if ( pilotResult . size ( ) > 0 ) {
for ( FltPlanBas list : pilotResult ) {
pilotBuilder . or ( qFltPlanCtrCntrlRelEntity . planSno . eq ( list . getPlanSno ( ) ) ) ;
}
}
// 입력받은 검색 키워드 조건추가
if ( ! StringUtils . isEmpty ( rq . getSearch1 ( ) ) ) {
builder . and ( qCntrlBasEntity . idntfNum . like ( "%" + rq . getSearch1 ( ) + "%" ) ) ;
}
List < AnlsHstryModel > result = new ArrayList < > ( ) ;
/ * *
* 위 조건들과 부합한 데이터베이스 내용을 조회하는 SQL입니다 .
* SELECT
* CCB . CNTRL_ID ,
* CCB . IDNTF_NUM ,
* CCB . STATUS_CD ,
* CCB . OBJECT_TYPE_CD ,
* CCB . FLGHT_ST_DT ,
* CCB . FLGHT_END_DT ,
* CCB . CNTRL_ST_DT ,
* CCB . CNTRL_END_DT ,
* CCB . TTL_TIME ,
* CCB . TTL_TIME_TYPE ,
* CCB . TTL_DSTNC ,
* CCB . TTL_DSTNC_TYPE ,
* CCB . AVRG_SPEED ,
* CCB . AVRG_SPEED_TYPE ,
* CCB . BTTR_CNSMPTN ,
* CCB . END_TYPE_CD ,
* CCB . CREATE_DT ,
* CCB . UPDATE_DT ,
* CCHA . ACTN_TYPE ,
* CCHA . AREA1 ,
* CCHA . AREA2 ,
* CCHA . AREA3 ,
* CCHA . AREA_NM ,
* CCHA . AREA_TYPE ,
* CCHA . LAND_NM ,
* CCHA . LAND_NUM ,
* CCHA . ZIP_CD
* FROM CTR_CNTRL_BAS CCB
* LEFT OUTER JOIN CTR_CNTRL_HSTRY_AREA CCHA
* ON CCB . CNTRL_ID = CCHA . CNTRL_ID
* AND CCHA . ACTN_TYPE = ' 01 '
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON CCB . CNTRL_ID = FPCCR . CNTRL_ID
* LEFT OUTER JOIN FLT_PLAN_BAS FPB
* ON FPCCR . PLAN_SNO = FPB . PLAN_SNO
* WHERE FPCCR . GROUP_ID = # { groupId }
* AND CCB . CNTRL_ST_DT > # { stDate }
* AND CCB . CNTRL_END_DT < # { endDate }
* AND CCB . STATUS_CD = ' 99 '
* AND FPB . APRVL_YN = 'Y'
* AND CCB . IDNTF_NUM LIKE CONCAT ( '%' , # { search1 } , '%' ) ;
* AND (
* CCB . IDNTF_NUM = # { idntfNum } - - # { idntfNum } 값이 여러개 일 경우 OR연산을 붙혀 조건이 늘어남
* OR FPCCR . PLAN_SNO = # { planSno } - - # { planSno } 값이 여러개 일 경우 OR연산을 붙혀 조건이 늘어남
* OR FPCCR . PLAN_SNO = # { planSno } - - # { planSno } 값이 여러개 일 경우 OR연산을 붙혀 조건이 늘어남
* )
* /
List < AnlsHstryModel > queryList = query . select ( Projections . bean ( AnlsHstryModel . class ,
qCntrlBasEntity . cntrlId ,
qCntrlBasEntity . idntfNum ,
@ -721,7 +796,7 @@ public class CtrCntrlQueryRepository{
* 조건1 . 그룹아이디가 맞는지 ,
* 조건2 . 검색시작일 이후
* 조건3 . 검색끝일 전
* 조건4 . status가 99 [ 비행중 ] 인지
* 조건4 . status가 값이 "99" 인지
* 조건5 . 승인이 된건인지
* /
builder . and ( qFltPlanCtrCntrlRelEntity . groupId . eq ( rq . getGroupId ( ) ) ) ;
@ -1219,7 +1294,13 @@ public class CtrCntrlQueryRepository{
return result ;
}
public List < AnlsHstryDetailModel > listCntrlHstry ( String id ) {
/ * *
* 비행ID [ CNTRL_ID ] 로 비행이력을 조회하는 SQL 기능 .
* @param id
* @return
* /
public List < AnlsHstryDetailModel > listCntrlHstry ( String id ) {
QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas . ctrCntrlBas ;
QCtrCntrlHstry qCtrCntrHstry = QCtrCntrlHstry . ctrCntrlHstry ;
@ -1227,6 +1308,34 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
BooleanBuilder builder = new BooleanBuilder ( ) ;
builder . and ( qCtrCntrHstry . cntrlId . eq ( id ) ) ;
/ * *
* 비행ID [ CNTRL_ID ] 로
* SELECT
* CCH . CNTRL_ID ,
* CCH . HSTRY_SNO ,
* CCH . TRMNL_ID ,
* CCH . MSSG_TYPE_CD ,
* CCH . STATUS_CD ,
* CCH . LAT ,
* CCH . LON ,
* CCH . SPEED ,
* CCH . SPEED_TYPE ,
* CCH . HEADING ,
* CCH . ELEV ,
* CCH . ELEV_TYPE ,
* CCH . MV_DSTNC ,
* CCH . MV_DSTNC_TYPE ,
* CCH . BTTR_LVL ,
* CCH . BTTR_VLTG ,
* CCH . TRMNL_RCV_DT ,
* CCH . SRVR_RCV_DT ,
* CCB . IDNTF_NUM
* FROM CTR_CNTRL_BAS CCB
* LEFT OUTER JOIN CTR_CNTRL_HSTRY CCH
* ON CCB . CNTRL_ID = CCH . CNTRL_ID
* WHERE CCB . CNTRL_ID = # { cntrlId }
* ORDER BY CCH . SRVR_RCV_DT ASC
* /
List < AnlsHstryDetailModel > result = query . select ( Projections . bean ( AnlsHstryDetailModel . class ,
qCtrCntrHstry . cntrlId ,
qCtrCntrHstry . hstrySno ,
@ -1257,6 +1366,7 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
return result ;
}
public long listCntrlHstryCount ( String id ) {
QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas . ctrCntrlBas ;
@ -1578,17 +1688,45 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
}
/ * * *
* 시뮬레이션 상세정보 조회 쿼리
*
/ * *
* 비행관제번호 [ CNTRL_ID ] 로 시뮬레이션 상세정보 조회하는 SQL 기능 .
* @param cntrlId
* @return
* /
public AnlsSmltDetailModel anlsSmltDetail ( String cntrlId ) {
QCtrCntrlBas bas = QCtrCntrlBas . ctrCntrlBas ;
QComArcrftBas air = QComArcrftBas . comArcrftBas ;
QComIdntfBas idntf = QComIdntfBas . comIdntfBas ;
/ * *
* 비행관제번호 [ CNTRL_ID ] 로 시뮬레이션 상세정보 조회하는 SQL 입니다 .
*
* SELECT
* CCB . CNTRL_ID ,
* CCB . IDNTF_NUM ,
* CCB . FLGHT_ST_DT ,
* CCB . FLGHT_END_DT ,
* CCB . CNTRL_ST_DT ,
* CCB . CNTRL_END_DT ,
* CCB . TTL_TIME ,
* CCB . TTL_TIME_TYPE ,
* CCB . TTL_DSTNC ,
* CCB . TTL_DSTNC_TYPE ,
* CCB . AVRG_SPEED ,
* CCB . AVRG_SPEED_TYPE ,
* CCB . BTTR_CNSMPTN ,
* CAB . ARCRFT_TYPE_CD ,
* CAB . PRDCT_NUM ,
* CAB . ARCRFT_MODEL_NM ,
* CAB . IMAGE_URL
* FROM CTR_CNTRL_BAS CCB
* LEFT OUTER JOIN COM_IDNTF_BAS CIB
* ON CCB . IDNTF_NUM = CIB . IDNTF_NUM
* LEFT OUTER JOIN COM_ARCRFT_BAS CAB
* ON CIB . ARCRFT_SNO = CAB . ARCRFT_SNO
* AND CAB . USE_YN = 'Y'
* WHERE CCB . CNTRL_ID = # { cntrlId }
* /
AnlsSmltDetailModel result = query . select ( Projections . bean ( AnlsSmltDetailModel . class ,
bas . cntrlId ,
bas . idntfNum ,
@ -1623,10 +1761,9 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
}
/ * * *
* 시뮬레이션 통계
/ * *
* 비행관제 ID [ CNTRL_ID ] 로 시뮬레이션 통계내는 SQL 기능 .
* /
public List < AnlsSmltStcsModel > anlsSmltStcs ( String cntrlId ) {
QCtrCntrlHstry hstry = QCtrCntrlHstry . ctrCntrlHstry ;
@ -1643,6 +1780,22 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
, ConstantImpl . create ( "%H:%i" ) ) ;
/ * *
* 비행관제 ID [ CNTRL_ID ] 로 통계를 내는 SQL입니다 .
* SELECT
* DATE_FORMAT ( CCH . SRVR_RCV_DT , ' % H : % i ' ) AS ' timecd ' ,
* DATE_FORMAT ( CCH . SRVR_RCV_DT , ' % Y - % m - % d ' ) AS ' dateCd ' ,
* AVG ( CCH . SPEED ) AS ' avrgSpeed ' ,
* MAX ( CCH . SPEED_TYPE ) AS ' speedType ' ,
* AVG ( CCH . ELEV ) AS ' avrgElev ' ,
* MAX ( CCH . ELEV_TYPE ) AS ' elevType ' ,
* AVG ( CCH . MV_DSTNC ) AS ' avrgMvDstnc ' ,
* MAX ( CCH . MV_DSTNC_TYPE ) AS ' mvDstncType ' ,
* MAX ( CCH . BTTR_LVL ) AS ' maxBttrLvl ' ,
* MIN ( CCH . BTTR_LVL ) AS ' minBttrLvl '
* FROM CTR_CNTRL_HSTRY CCH
* WHERE CCH . CNTRL_ID = # { cntrlId }
* /
List < AnlsSmltStcsModel > result = query . select ( Projections . bean ( AnlsSmltStcsModel . class ,
formattedTime . as ( "timeCd" ) ,
formattedDate . as ( "dateCd" ) ,