|
|
|
@ -18,6 +18,7 @@ import com.palnet.comn.exception.CustomException;
|
|
|
|
|
import com.querydsl.core.Tuple; |
|
|
|
|
|
|
|
|
|
import com.querydsl.core.BooleanBuilder; |
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
|
|
|
|
|
import org.slf4j.Logger; |
|
|
|
@ -32,47 +33,39 @@ import com.palnet.biz.jpa.repository.ctr.CtrCntrlWarnLogQueryRepository;
|
|
|
|
|
import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository; |
|
|
|
|
import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; |
|
|
|
|
|
|
|
|
|
@Service |
|
|
|
|
@Slf4j |
|
|
|
|
@Service |
|
|
|
|
@RequiredArgsConstructor |
|
|
|
|
public class MainDashService { |
|
|
|
|
|
|
|
|
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private PtyDronQueryRepository ptyDronQueryRepository; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private PtyGroupQueryRepository ptyGroupQueryRepository; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private FltPlanQueryRepository fltPlanQueryRepository; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private CtrCntrlWarnLogQueryRepository ctrCntrlWarnLogQueryRepository; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private CtrCntrlQueryRepository query; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private MainStatisticsService mainStatisticsService; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private FltPlanArcrftRepository fltPlanArcrftRepository; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private FltPlanBasRepository fltPlanBasRepository; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private JwtTokenUtil token; |
|
|
|
|
private JwtTokenUtil token; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 일별 비행횟수 통계 |
|
|
|
|
* 일별 비행건수 통계 |
|
|
|
|
* @param rq |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public List<MainDashStcsModel> mainDashStcsDay(String yyyymm){ |
|
|
|
|
|
|
|
|
|
List<MainDashStcsModel> resultList = query.mainDashStcsDay(yyyymm); |
|
|
|
|
|
|
|
|
|
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
|
|
|
|
|
String serviceType = ""; |
|
|
|
|
String userAuthByToken = token.getUserAuthByToken(); |
|
|
|
|
String cptAuthCodeByToken = token.getCptAuthCodeByToken(); |
|
|
|
|
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){ |
|
|
|
|
serviceType = cptAuthCodeByToken; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
List<MainDashStcsModel> resultList = query.mainDashStcsDay(yyyymm, serviceType); |
|
|
|
|
|
|
|
|
|
return resultList; |
|
|
|
|
} |
|
|
|
@ -83,10 +76,17 @@ public class MainDashService {
|
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public List<MainDashStcsModel> mainDashStcsArea(String yyyymm){ |
|
|
|
|
|
|
|
|
|
List<MainDashStcsModel> resultList = query.mainDashStcsArea(yyyymm); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
|
|
|
|
|
String serviceType = ""; |
|
|
|
|
String userAuthByToken = token.getUserAuthByToken(); |
|
|
|
|
String cptAuthCodeByToken = token.getCptAuthCodeByToken(); |
|
|
|
|
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){ |
|
|
|
|
serviceType = cptAuthCodeByToken; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
List<MainDashStcsModel> resultList = query.mainDashStcsArea(yyyymm, serviceType); |
|
|
|
|
|
|
|
|
|
return resultList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -108,9 +108,9 @@ public class MainDashService {
|
|
|
|
|
} |
|
|
|
|
resultList = resultList.stream().sorted((o2, o1) -> o1.get("createDt").toString().compareTo(o2.get("createDt").toString())).collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return resultList; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -158,16 +158,26 @@ public class MainDashService {
|
|
|
|
|
|
|
|
|
|
public Map<String, String> mainDashDronFlightStcs() throws Exception{ |
|
|
|
|
|
|
|
|
|
String cptAuth = token.getCptAuthCodeByToken(); |
|
|
|
|
String cptAuth = ""; |
|
|
|
|
|
|
|
|
|
cptAuth = "KAC"; // 임시 테스트용으로 KAC 권한 부여
|
|
|
|
|
// cptAuth = "KAC"; // 임시 테스트용으로 KAC 권한 부여
|
|
|
|
|
|
|
|
|
|
if(cptAuth == null) { |
|
|
|
|
|
|
|
|
|
log.error("cptAuth가 부여되지 않은 계정입니다"); |
|
|
|
|
throw new Exception(); |
|
|
|
|
|
|
|
|
|
// if(cptAuth == null) {
|
|
|
|
|
//
|
|
|
|
|
// log.error("cptAuth가 부여되지 않은 계정입니다");
|
|
|
|
|
// throw new Exception();
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
|
|
|
|
|
String userAuthByToken = token.getUserAuthByToken(); |
|
|
|
|
String cptAuthCodeByToken = token.getCptAuthCodeByToken(); |
|
|
|
|
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){ |
|
|
|
|
cptAuth = cptAuthCodeByToken; |
|
|
|
|
} else if(cptAuthCodeByToken.isEmpty()){ |
|
|
|
|
throw new CustomException(ErrorCode.AUTH_NAUTHORIZED, "cptAuthCode 권한이 없음."); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, String> resultList = new HashMap<>(); |
|
|
|
|
|
|
|
|
@ -284,16 +294,23 @@ public class MainDashService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public List<MainDashPlanNumStcsModel> currentFlightPlan(String groupId){ |
|
|
|
|
public List<MainDashPlanNumStcsModel> currentFlightPlan(String serviceType){ |
|
|
|
|
|
|
|
|
|
boolean authCheck = mainStatisticsService.authCheck(groupId); |
|
|
|
|
// boolean authCheck = mainStatisticsService.authCheck(groupId);
|
|
|
|
|
|
|
|
|
|
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
|
|
|
|
|
String userAuthByToken = token.getUserAuthByToken(); |
|
|
|
|
String cptAuthCodeByToken = token.getCptAuthCodeByToken(); |
|
|
|
|
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){ |
|
|
|
|
serviceType = cptAuthCodeByToken; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String[] dateCate = {"beforeYesterday", "yesterday", "today", "tomorrow"}; // 2일전, 전일, 금일, 명일
|
|
|
|
|
|
|
|
|
|
List<MainDashPlanNumStcsModel> result = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for(String cate : dateCate){ |
|
|
|
|
List<FltPlanBas> fltPlanBas = fltPlanQueryRepository.currentFlightStcs(groupId, authCheck, cate); |
|
|
|
|
List<FltPlanBas> fltPlanBas = fltPlanQueryRepository.currentFlightStcs(serviceType, cate); |
|
|
|
|
|
|
|
|
|
int plan = fltPlanBas.size(); |
|
|
|
|
int aprvnCount = (int)fltPlanBas.stream().filter(value -> value.getAprvlYn().equals("Y")).count(); |
|
|
|
@ -331,16 +348,22 @@ public class MainDashService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public List<MainDashWarnNumStcsModel> currentFlightWarn(String groupId){ |
|
|
|
|
boolean authCheck = mainStatisticsService.authCheck(groupId); |
|
|
|
|
|
|
|
|
|
public List<MainDashWarnNumStcsModel> currentFlightWarn(String serviceType){ |
|
|
|
|
// boolean authCheck = mainStatisticsService.authCheck(groupId);
|
|
|
|
|
|
|
|
|
|
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
|
|
|
|
|
String userAuthByToken = token.getUserAuthByToken(); |
|
|
|
|
String cptAuthCodeByToken = token.getCptAuthCodeByToken(); |
|
|
|
|
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){ |
|
|
|
|
serviceType = cptAuthCodeByToken; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String[] dateCate = {"beforeYesterday", "yesterday", "today", "tomorrow"}; // 2일전, 전일, 금일, 명일
|
|
|
|
|
|
|
|
|
|
List<MainDashWarnNumStcsModel> result = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for(String cate : dateCate){ |
|
|
|
|
List<CtrCntrlWarnLog> cntrlWarnLogs = ctrCntrlWarnLogQueryRepository.currentStcs(groupId, authCheck, cate); |
|
|
|
|
List<CtrCntrlWarnLog> cntrlWarnLogs = ctrCntrlWarnLogQueryRepository.currentStcs(serviceType, cate); |
|
|
|
|
|
|
|
|
|
int count = cntrlWarnLogs.size(); //
|
|
|
|
|
|
|
|
|
@ -380,6 +403,15 @@ public class MainDashService {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public List<MainDashFlightNumStcsModel> dailyFlightNumOfStcs(){ |
|
|
|
|
|
|
|
|
|
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
|
|
|
|
|
String userAuthByToken = token.getUserAuthByToken(); |
|
|
|
|
String cptAuthCodeByToken = token.getCptAuthCodeByToken(); |
|
|
|
|
String serviceType = ""; |
|
|
|
|
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){ |
|
|
|
|
serviceType = cptAuthCodeByToken; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 1. 전일 , 금일, 명일(내일)
|
|
|
|
|
Instant yesterdayStart = Instant.now().minus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS); |
|
|
|
|
Instant yesterdayEnd = Instant.now().truncatedTo(ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); |
|
|
|
@ -389,31 +421,47 @@ public class MainDashService {
|
|
|
|
|
Instant tomorrowEnd = Instant.now().plus(2, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); |
|
|
|
|
|
|
|
|
|
// 2. 비행계획서 승인 항목 : 비행계획서 제출기준(승인된 건수로봐도 동일)
|
|
|
|
|
int yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd); |
|
|
|
|
int todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd); |
|
|
|
|
int tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd); |
|
|
|
|
int yesterdayCount = 0; |
|
|
|
|
int todayCount = 0; |
|
|
|
|
int tomorrowCount = 0; |
|
|
|
|
if(serviceType != null && !serviceType.isEmpty()){ |
|
|
|
|
yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", yesterdayStart, yesterdayEnd, serviceType); |
|
|
|
|
todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", todayStart, todayEnd, serviceType); |
|
|
|
|
tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", tomorrowStart, tomorrowEnd, serviceType); |
|
|
|
|
} else { |
|
|
|
|
yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd); |
|
|
|
|
todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd); |
|
|
|
|
tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd); |
|
|
|
|
} |
|
|
|
|
// int yesterdayCount = serviceType != null && !serviceType.isEmpty()
|
|
|
|
|
// ? fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", yesterdayStart, yesterdayEnd, serviceType);
|
|
|
|
|
// : fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd)
|
|
|
|
|
// int todayCount = serviceType != null && !serviceType.isEmpty()
|
|
|
|
|
// ? fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", todayStart, todayEnd, serviceType);
|
|
|
|
|
// : fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd)
|
|
|
|
|
// int tomorrowCount = serviceType != null && !serviceType.isEmpty()
|
|
|
|
|
// ? fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", tomorrowStart, tomorrowEnd, serviceType);
|
|
|
|
|
// : fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd)
|
|
|
|
|
|
|
|
|
|
// 3. 비행 완료 항목 : 실제 비행이 완료된 건수
|
|
|
|
|
int yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd).size(); |
|
|
|
|
int todayCompleteCount = query.completeFlight(todayStart,todayEnd).size(); |
|
|
|
|
int tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd).size(); |
|
|
|
|
int yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd,serviceType).size(); |
|
|
|
|
int todayCompleteCount = query.completeFlight(todayStart,todayEnd,serviceType).size(); |
|
|
|
|
int tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd,serviceType).size(); |
|
|
|
|
|
|
|
|
|
// 4. 미 비행 항목 : 비행계획서는 제출했으나,실제 비행안한 건수
|
|
|
|
|
int yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd).size(); |
|
|
|
|
int todayNotFlight = query.notFlight(todayStart, todayEnd).size(); |
|
|
|
|
int tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd).size(); |
|
|
|
|
int yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd, serviceType).size(); |
|
|
|
|
int todayNotFlight = query.notFlight(todayStart, todayEnd, serviceType).size(); |
|
|
|
|
int tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd, serviceType).size(); |
|
|
|
|
|
|
|
|
|
// 5. 비고 : 비행 완료 건수를 기준으로 상승 또는 하락폭 적용
|
|
|
|
|
// ex) 오늘 기준 오늘은 어제의 비행 완료 건수를 비교해서 적용
|
|
|
|
|
// 전일(어제)은 2일전 비행 완료 건수를 비교해서 적용
|
|
|
|
|
// 명일(내일)은 오늘 비행 완료 건수를 비교해서 적용
|
|
|
|
|
int yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS)).size(); |
|
|
|
|
int yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS), serviceType).size(); |
|
|
|
|
double yesterdayNotePercent = yesterdayCompleteCount != 0 ? ((double) yesterdayNote / yesterdayCompleteCount) * 100.0 : 0.0; |
|
|
|
|
double todayNotePercent = yesterdayCompleteCount != 0 ? ((double)(todayCompleteCount - yesterdayCompleteCount) / yesterdayCompleteCount) * 100.0 : 0.0; |
|
|
|
|
double tomorrowNotePercent = todayCompleteCount != 0 ? ((double) (tomorrowCompleteCount - todayCompleteCount) / todayCompleteCount) * 100.0 : 0.0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<MainDashFlightNumStcsModel> result = new ArrayList<>(); |
|
|
|
|
result.add(createModel("yesterday", yesterdayCount,yesterdayCompleteCount,yesterdayNotFlight,yesterdayNotePercent)); |
|
|
|
|
result.add(createModel("today", todayCount,todayCompleteCount,todayNotFlight,todayNotePercent)); |
|
|
|
|