|
|
|
@ -259,6 +259,17 @@ public class CtrCntrlQueryRepository{
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 조건들에 부합하는 비행 현황 목록을 조회하는 SQL 기능. |
|
|
|
|
* @param rq AnlsHstryGroupModel 객체로 조회 조건을 전달 |
|
|
|
|
* @param pageable 페이징 정보 |
|
|
|
|
* @param idntfList 기체 식별 기본 정보 리스트 |
|
|
|
|
* @param basResult 비행 계획 기본 정보 리스트 |
|
|
|
|
* @param pilotResult 파일럿 비행 계획 기본 정보 리스트 |
|
|
|
|
* @return 페이징된 AnlsHstryModel 목록 |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public PageImpl<AnlsHstryModel> cntrlBasNormalHstryList(AnlsHstryGroupModel rq, |
|
|
|
|
Pageable pageable, |
|
|
|
|
List<ComIdntfBas> idntfList, |
|
|
|
@ -280,33 +291,97 @@ public class CtrCntrlQueryRepository{
|
|
|
|
|
end.add(Calendar.DATE, 1); |
|
|
|
|
Date endDate = end.getTime(); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 조건1. 그룹아이디가 맞는지, |
|
|
|
|
* 조건2. 검색시작일 이후 |
|
|
|
|
* 조건3. 검색끝일 전 |
|
|
|
|
* 조건4. status가 99[비행중]인지 |
|
|
|
|
* 조건5. 승인이 된건인지 |
|
|
|
|
*/ |
|
|
|
|
builder.and(qFltPlanCtrCntrlRelEntity.groupId.eq(rq.getGroupId())); |
|
|
|
|
builder.and(qCntrlBasEntity.cntrlStDt.after(DateUtils.stringToDate(rq.getStDate()))); |
|
|
|
|
builder.and(qCntrlBasEntity.cntrlEndDt.before(endDate.toInstant())); |
|
|
|
|
builder.and(qCntrlBasEntity.statusCd.eq("99")); |
|
|
|
|
builder.and(qFltPlanBasEntity.aprvlYn.eq("Y")); |
|
|
|
|
|
|
|
|
|
// 회원 고유번호와 맞는 기체고유번호 조건추가
|
|
|
|
|
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, |
|
|
|
@ -335,8 +410,6 @@ public class CtrCntrlQueryRepository{
|
|
|
|
|
qCntrlHstryAreaEntity.landNm, |
|
|
|
|
qCntrlHstryAreaEntity.landNum, |
|
|
|
|
qCntrlHstryAreaEntity.zipCd |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
)) |
|
|
|
|
.from(qCntrlBasEntity) |
|
|
|
|
.leftJoin(qCntrlHstryAreaEntity) |
|
|
|
@ -387,6 +460,7 @@ public class CtrCntrlQueryRepository{
|
|
|
|
|
|
|
|
|
|
return new PageImpl<>(result, pageable, result.size()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public PageImpl<AnlsHstryModel> cntrlBasNormalSmltList(AnlsHstryRqModel rq, |
|
|
|
|
Pageable pageable, |
|
|
|
|
List<JwtGroupModel> adminAuth, |
|
|
|
@ -522,6 +596,7 @@ public class CtrCntrlQueryRepository{
|
|
|
|
|
|
|
|
|
|
return new PageImpl<>(result, pageable, result.size()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public List<AnlsHstryModel> cntrlBasNormalList(AnlsHstryRqModel rq, String idntfNum){ |
|
|
|
|
|
|
|
|
|
QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; |
|
|
|
@ -614,6 +689,14 @@ public class CtrCntrlQueryRepository{
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 조건들에 부합하는 비행 현황 목록 데이터의 갯수를 조회하는 SQL 기능. |
|
|
|
|
* @param rq |
|
|
|
|
* @param idntfList |
|
|
|
|
* @param basResult |
|
|
|
|
* @param pilotResult |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public long cntrlBasNormalHstryCount(AnlsHstryGroupModel rq, |
|
|
|
|
List<ComIdntfBas> idntfList, |
|
|
|
|
List<FltPlanBas> basResult, |
|
|
|
@ -634,34 +717,70 @@ public class CtrCntrlQueryRepository{
|
|
|
|
|
end.add(Calendar.DATE, 1); |
|
|
|
|
Date endDate = end.getTime(); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 조건1. 그룹아이디가 맞는지, |
|
|
|
|
* 조건2. 검색시작일 이후 |
|
|
|
|
* 조건3. 검색끝일 전 |
|
|
|
|
* 조건4. status가 99[비행중]인지 |
|
|
|
|
* 조건5. 승인이 된건인지 |
|
|
|
|
*/ |
|
|
|
|
builder.and(qFltPlanCtrCntrlRelEntity.groupId.eq(rq.getGroupId())); |
|
|
|
|
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")); |
|
|
|
|
|
|
|
|
|
// 회원 고유번호와 맞는 기체고유번호 조건추가
|
|
|
|
|
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() + "%")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 위 조건들과 부합한 데이터베이스 내용의 갯수를 조회하는 SQL입니다. |
|
|
|
|
* SELECT |
|
|
|
|
* COUNT(*) |
|
|
|
|
* 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연산을 붙혀 조건이 늘어남 |
|
|
|
|
* ) |
|
|
|
|
*/ |
|
|
|
|
long result = query.select(Projections.bean(AnlsHstryModel.class , |
|
|
|
|
qCntrlBasEntity.cntrlId, |
|
|
|
|
qCntrlBasEntity.idntfNum, |
|
|
|
@ -1031,7 +1150,7 @@ public class CtrCntrlQueryRepository{
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 비행 이력 데이터 조회 |
|
|
|
|
* 비행 이력 데이터 조회하는 SQL. |
|
|
|
|
* @param id |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
@ -1043,6 +1162,33 @@ public class CtrCntrlQueryRepository{
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qCtrCntrHstry.cntrlId.eq(id)); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 비행번호[CNTRL_ID] 로 이력현황을 조회하는 SQL입니다. |
|
|
|
|
* 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} |
|
|
|
|
*/ |
|
|
|
|
List<AnlsHstryDetailModel> result = query.select(Projections.bean(AnlsHstryDetailModel.class , |
|
|
|
|
qCtrCntrHstry.cntrlId , |
|
|
|
|
qCtrCntrHstry.hstrySno , |
|
|
|
|