Browse Source

[메인] 일일 비행횟수 현황 - 비행완료, 미 비행, 비고 추가

pull/15/head
leehagjoon(이학준) 10 months ago
parent
commit
2aa5f84505
  1. 2
      pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java
  2. 45
      pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java
  3. 55
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

2
pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java

@ -30,6 +30,6 @@ public class MainDashFlightNumStcsModel {
private long notFlight = 0; private long notFlight = 0;
@ApiParam(value = "비고",example = "전일(어제), 금일(오늘), 명일(내일) 비고") @ApiParam(value = "비고",example = "전일(어제), 금일(오늘), 명일(내일) 비고")
private int note = 0; private double note = 0;
} }

45
pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java

@ -268,28 +268,59 @@ public class MainDashService {
Instant tomorrowStart = Instant.now().plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS); Instant tomorrowStart = Instant.now().plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
Instant tomorrowEnd = Instant.now().plus(2, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); Instant tomorrowEnd = Instant.now().plus(2, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
// 2. 비행계획서 승인 항목 : 비행계획서 제출기준(승인된 건수로봐도 동일)
long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd); long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd);
log.info("yesterdayCount: {}", yesterdayCount); log.info("yesterdayCount: {}", yesterdayCount);
long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd); long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd);
log.info("todayCount: {}", todayCount); log.info("todayCount: {}", todayCount);
long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd); long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd);
log.info("tomorrowCount: {}", tomorrowCount); log.info("tomorrowCount: {}", tomorrowCount);
// 카운트와 함께 MainDashFlightNumStcsModel 인스턴스 생성 // 3. 비행 완료 항목 : 실제 비행이 완료된 건수
long yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd).size();
log.info("yesterdayCompleteCount: {}", yesterdayCompleteCount);
long todayCompleteCount = query.completeFlight(todayStart,todayEnd).size();
log.info("todayCompleteCount: {}", todayCompleteCount);
long tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd).size();
log.info("tomorrowCompleteCount: {}", tomorrowCompleteCount);
// 4. 미 비행 항목 : 비행계획서는 제출했으나,실제 비행안한 건수
long yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd).size();
log.info("yesterdayNotFlight : {} ", yesterdayNotFlight);
long todayNotFlight = query.notFlight(todayStart, todayEnd).size();
log.info("todayNotFlight : {} ", todayNotFlight);
long tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd).size();
log.info("tomorrowNotFlight : {} ", tomorrowNotFlight);
// 5. 비고 : 비행 완료 건수를 기준으로 상승 또는 하락폭 적용
// ex) 오늘 기준 오늘은 어제의 비행 완료 건수를 비교해서 적용
// 전일(어제)은 2일전 비행 완료 건수를 비교해서 적용
// 명일(내일)은 오늘 비행 완료 건수를 비교해서 적용
long yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS)).size();
double yesterdayNotePercent = yesterdayCompleteCount != 0 ? ((double) yesterdayNote / yesterdayCompleteCount) * 100.0 : 0.0;
log.info("yesterdayNotePercent: {} ", yesterdayNotePercent);
double todayNotePercent = yesterdayCompleteCount != 0 ? ((double)(todayCompleteCount - yesterdayCompleteCount) / yesterdayCompleteCount) * 100.0 : 0.0;
log.info("todayNotePercent: {} ", todayNotePercent);
double tomorrowNotePercent = todayCompleteCount != 0 ? ((double) (tomorrowCompleteCount - todayCompleteCount) / todayCompleteCount) * 100.0 : 0.0;
log.info("tomorrowNotePercent: {} ", tomorrowNotePercent);
List<MainDashFlightNumStcsModel> result = new ArrayList<>(); List<MainDashFlightNumStcsModel> result = new ArrayList<>();
result.add(createModel("yesterday", yesterdayCount)); result.add(createModel("yesterday", yesterdayCount,yesterdayCompleteCount,yesterdayNotFlight,yesterdayNotePercent));
result.add(createModel("today", todayCount)); result.add(createModel("today", todayCount,todayCompleteCount,todayNotFlight,todayNotePercent));
result.add(createModel("tomorrow", tomorrowCount)); result.add(createModel("tomorrow", tomorrowCount,tomorrowCompleteCount,tomorrowNotFlight,tomorrowNotePercent));
return result; return result;
} }
private MainDashFlightNumStcsModel createModel(String dateType, long flightPlanCount) { private MainDashFlightNumStcsModel createModel(String dateType, long flightPlanCount, long completeCount, long notFlight, double note) {
MainDashFlightNumStcsModel model = new MainDashFlightNumStcsModel(); MainDashFlightNumStcsModel model = new MainDashFlightNumStcsModel();
model.setDateType(dateType); model.setDateType(dateType);
model.setFlightPlan(flightPlanCount); model.setFlightPlan(flightPlanCount);
model.setCompleteFlight(completeCount);
model.setNotFlight(notFlight);
model.setNote(note);
return model; return model;
} }

55
pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

@ -9,6 +9,8 @@ import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel;
import com.querydsl.core.Tuple;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
@ -2570,7 +2572,60 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
} }
public List<Tuple> completeFlight(Instant start, Instant end) {
// Tuple 여러 값을 담을 수 있는 클래스, 여러 필드를 한꺼번에 반환해야 할 때 유용하다.
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
return query
.select(
fpb.planSno,
fpb.aprvlYn,
fpb.aprvlDt,
ccb.cntrlId,
ccb.statusCd,
ccb.cntrlStDt,
ccb.cntrlEndDt
)
.from(fpb)
.leftJoin(fpccr).on(fpb.planSno.eq(fpccr.planSno))
.leftJoin(ccb).on(fpccr.cntrlId.eq(ccb.cntrlId))
.where(
fpb.aprvlYn.eq("Y"),
fpccr.planSno.isNotNull(),
ccb.statusCd.eq("99"),
ccb.cntrlEndDt.between(start,end)
)
.fetch();
}
public List<Tuple> notFlight(Instant start, Instant end){
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
return query
.select(
fpb.planSno,
fpb.aprvlYn,
fpb.aprvlDt,
ccb.cntrlId,
fpccr.cntrlId,
fpccr.planSno
)
.from(fpb)
.leftJoin(fpccr).on(fpb.planSno.eq(fpccr.planSno))
.leftJoin(ccb).on(fpccr.cntrlId.eq(ccb.cntrlId))
.where(
fpb.aprvlYn.eq("Y"),
fpccr.planSno.isNull(),
ccb.cntrlEndDt.between(start, end),
fpb.aprvlDt.between(start, end)
)
.fetch();
}
} }

Loading…
Cancel
Save