|
|
@ -3,14 +3,14 @@ package com.palnet.biz.jpa.repository.flt; |
|
|
|
import java.time.Duration; |
|
|
|
import java.time.Duration; |
|
|
|
import java.time.Instant; |
|
|
|
import java.time.Instant; |
|
|
|
import java.time.LocalDate; |
|
|
|
import java.time.LocalDate; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
|
|
|
|
import java.time.ZoneId; |
|
|
|
import java.time.ZoneId; |
|
|
|
import java.time.ZoneOffset; |
|
|
|
import java.time.ZoneOffset; |
|
|
|
import java.time.temporal.ChronoUnit; |
|
|
|
import java.time.temporal.ChronoUnit; |
|
|
|
|
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import java.util.Map; |
|
|
|
import java.util.Optional; |
|
|
|
import java.util.Optional; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
|
|
|
import org.springframework.cache.annotation.Cacheable; |
|
|
|
import org.springframework.cache.annotation.Cacheable; |
|
|
|
import org.springframework.data.domain.Page; |
|
|
|
import org.springframework.data.domain.Page; |
|
|
|
import org.springframework.data.domain.PageImpl; |
|
|
|
import org.springframework.data.domain.PageImpl; |
|
|
@ -26,7 +26,6 @@ import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq; |
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; |
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; |
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel; |
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel; |
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightScheduleRs; |
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightScheduleRs; |
|
|
|
import com.palnet.biz.api.comn.file.service.ComnFileService; |
|
|
|
|
|
|
|
import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; |
|
|
|
import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; |
|
|
|
import com.palnet.biz.api.main.dash.model.MainDashStcsModel; |
|
|
|
import com.palnet.biz.api.main.dash.model.MainDashStcsModel; |
|
|
|
import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; |
|
|
|
import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; |
|
|
@ -54,6 +53,7 @@ import com.palnet.biz.jpa.model.LaancPlanareaCoordDto; |
|
|
|
import com.palnet.comn.utils.DateUtils; |
|
|
|
import com.palnet.comn.utils.DateUtils; |
|
|
|
import com.palnet.comn.utils.InstantUtils; |
|
|
|
import com.palnet.comn.utils.InstantUtils; |
|
|
|
import com.querydsl.core.BooleanBuilder; |
|
|
|
import com.querydsl.core.BooleanBuilder; |
|
|
|
|
|
|
|
import com.querydsl.core.Tuple; |
|
|
|
import com.querydsl.core.group.GroupBy; |
|
|
|
import com.querydsl.core.group.GroupBy; |
|
|
|
import com.querydsl.core.types.ConstantImpl; |
|
|
|
import com.querydsl.core.types.ConstantImpl; |
|
|
|
import com.querydsl.core.types.Expression; |
|
|
|
import com.querydsl.core.types.Expression; |
|
|
@ -67,7 +67,6 @@ import com.querydsl.core.types.dsl.StringTemplate; |
|
|
|
import com.querydsl.jpa.JPAExpressions; |
|
|
|
import com.querydsl.jpa.JPAExpressions; |
|
|
|
import com.querydsl.jpa.impl.JPAQuery; |
|
|
|
import com.querydsl.jpa.impl.JPAQuery; |
|
|
|
import com.querydsl.jpa.impl.JPAQueryFactory; |
|
|
|
import com.querydsl.jpa.impl.JPAQueryFactory; |
|
|
|
import com.querydsl.sql.SQLExpressions; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
@ -1740,6 +1739,7 @@ public class FltPlanQueryRepository { |
|
|
|
.leftJoin(qFltPlanBas) |
|
|
|
.leftJoin(qFltPlanBas) |
|
|
|
.on(qFltPlanBas.planSno.eq(qFltPlanCtrCntrlRel.planSno)) |
|
|
|
.on(qFltPlanBas.planSno.eq(qFltPlanCtrCntrlRel.planSno)) |
|
|
|
.where(builder) |
|
|
|
.where(builder) |
|
|
|
|
|
|
|
.groupBy(qFltPlanCtrCntrlRel.idntfNum) |
|
|
|
.orderBy(qFltPlanCtrCntrlRel.planSno.countDistinct().desc()) |
|
|
|
.orderBy(qFltPlanCtrCntrlRel.planSno.countDistinct().desc()) |
|
|
|
.limit(5) |
|
|
|
.limit(5) |
|
|
|
.fetch(); |
|
|
|
.fetch(); |
|
|
@ -1917,6 +1917,68 @@ public class FltPlanQueryRepository { |
|
|
|
.orderBy(((ComparableExpressionBase<Integer>) groupOrder).desc(), cib.createDt.asc()) |
|
|
|
.orderBy(((ComparableExpressionBase<Integer>) groupOrder).desc(), cib.createDt.asc()) |
|
|
|
.fetch(); |
|
|
|
.fetch(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Map<String, String> getFlightDronStcs(String groupId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QComIdntfBas cib = QComIdntfBas.comIdntfBas; |
|
|
|
|
|
|
|
QFltPlanArcrft fpa = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
|
|
|
QFltPlanBas fpb = QFltPlanBas.fltPlanBas; |
|
|
|
|
|
|
|
QPtyGroupBas pgb = QPtyGroupBas.ptyGroupBas; |
|
|
|
|
|
|
|
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; |
|
|
|
|
|
|
|
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(!groupId.equals("all")) { |
|
|
|
|
|
|
|
builder.and(pgb.groupId.eq(groupId)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Instant now = Instant.now(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Instant todayStart = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC); |
|
|
|
|
|
|
|
Instant todayEnd = LocalDate.now().plusDays(1).atStartOfDay().toInstant(ZoneOffset.UTC); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<Tuple> res = query |
|
|
|
|
|
|
|
.select( |
|
|
|
|
|
|
|
new CaseBuilder() |
|
|
|
|
|
|
|
.when(ccb.statusCd.eq("01")).then("비행 중") |
|
|
|
|
|
|
|
.when(ccb.statusCd.eq("99")).then("비행 완료") |
|
|
|
|
|
|
|
.when(fpb.planSno.isNotNull()).then("비행 대기 중") |
|
|
|
|
|
|
|
.otherwise("비행 없음").as("status"), |
|
|
|
|
|
|
|
fpb.count() |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
.from(fpa) |
|
|
|
|
|
|
|
.leftJoin(fpb).on(fpb.planSno.eq(fpa.planSno)) |
|
|
|
|
|
|
|
.leftJoin(pgb).on(pgb.groupId.eq(fpb.groupId)) |
|
|
|
|
|
|
|
.leftJoin(cib).on(cib.idntfNum.eq(fpa.idntfNum)) |
|
|
|
|
|
|
|
.leftJoin(fpccr).on(fpccr.planSno.eq(fpb.planSno)) |
|
|
|
|
|
|
|
.leftJoin(ccb).on(ccb.cntrlId.eq(fpccr.cntrlId)) |
|
|
|
|
|
|
|
.where( |
|
|
|
|
|
|
|
builder |
|
|
|
|
|
|
|
.and(fpb.schFltStDt.between( |
|
|
|
|
|
|
|
now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).toInstant(), |
|
|
|
|
|
|
|
now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).plus(1, ChronoUnit.DAYS).toInstant() |
|
|
|
|
|
|
|
)) |
|
|
|
|
|
|
|
.and(fpb.schFltEndDt.between( |
|
|
|
|
|
|
|
now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).toInstant(), |
|
|
|
|
|
|
|
now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).plus(1, ChronoUnit.DAYS).toInstant() |
|
|
|
|
|
|
|
)) |
|
|
|
|
|
|
|
.and(fpb.planSno.isNotNull()) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
.groupBy(ccb.statusCd) |
|
|
|
|
|
|
|
.fetch(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, String> result = new HashMap<>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (Tuple tuple : res) { |
|
|
|
|
|
|
|
String status = tuple.get(0, String.class); |
|
|
|
|
|
|
|
String count = tuple.get(1, Long.class).toString(); // Assuming count is at index 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result.put(status, count); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |