diff --git a/tracky-web/src/main/java/kernel360/trackyweb/drive/domain/provider/DriveDomainProvider.java b/tracky-web/src/main/java/kernel360/trackyweb/drive/domain/provider/DriveDomainProvider.java index b46a0353..d15b9b8c 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/drive/domain/provider/DriveDomainProvider.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/drive/domain/provider/DriveDomainProvider.java @@ -4,8 +4,6 @@ import java.util.List; import java.util.Map; -import kernel360.trackyweb.drive.application.dto.internal.NonOperatedCar; -import kernel360.trackyweb.drive.application.dto.internal.OperationTotalCount; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Component; @@ -13,7 +11,9 @@ import kernel360.trackycore.core.common.exception.ErrorCode; import kernel360.trackycore.core.common.exception.GlobalException; import kernel360.trackycore.core.domain.entity.DriveEntity; +import kernel360.trackyweb.drive.application.dto.internal.NonOperatedCar; import kernel360.trackyweb.drive.application.dto.internal.OperationCarCount; +import kernel360.trackyweb.drive.application.dto.internal.OperationTotalCount; import kernel360.trackyweb.drive.domain.DriveHistory; import kernel360.trackyweb.drive.infrastructure.repository.DriveDomainRepository; import lombok.RequiredArgsConstructor; @@ -22,58 +22,58 @@ @RequiredArgsConstructor public class DriveDomainProvider { - private final DriveDomainRepository driveDomainRepository; + private final DriveDomainRepository driveDomainRepository; - public Page searchDrivesByFilter( - String search, - String mdn, - LocalDate startDateTime, - LocalDate endDateTime, - Pageable pageable) { - return driveDomainRepository.searchByFilter(search, mdn, startDateTime, endDateTime, pageable); - } + public Page searchDrivesByFilter( + String search, + String mdn, + LocalDate startDateTime, + LocalDate endDateTime, + Pageable pageable) { + return driveDomainRepository.searchByFilter(search, mdn, startDateTime, endDateTime, pageable); + } - public Page findRunningDriveList( - String search, - Pageable pageable - ) { - return driveDomainRepository.findRunningDriveList(search, pageable); - } + public Page findRunningDriveList( + String search, + Pageable pageable + ) { + return driveDomainRepository.findRunningDriveList(search, pageable); + } - public DriveEntity findRunningDriveById(Long driveId) { - return driveDomainRepository.findRunningDriveById(driveId) - .orElseThrow(() -> GlobalException.throwError(ErrorCode.NOT_REALTIME_DRIVE)); - } + public DriveEntity findRunningDriveById(Long driveId) { + return driveDomainRepository.findRunningDriveById(driveId) + .orElseThrow(() -> GlobalException.throwError(ErrorCode.NOT_REALTIME_DRIVE)); + } - public DriveHistory findByDriveId(Long driveId) { - return driveDomainRepository.findByDriveId(driveId) - .orElseThrow(() -> GlobalException.throwError(ErrorCode.DRIVE_NOT_FOUND)); - } + public DriveHistory findByDriveId(Long driveId) { + return driveDomainRepository.findByDriveId(driveId) + .orElseThrow(() -> GlobalException.throwError(ErrorCode.DRIVE_NOT_FOUND)); + } - public List findByMdn(String mdn) { - return driveDomainRepository.findDriveListByMdn(mdn); - } + public List findByMdn(String mdn) { + return driveDomainRepository.findDriveListByMdn(mdn); + } - public Double getTotalDriveDistance() { - return driveDomainRepository.getTotalDriveDistance(); - } + public Double getTotalDriveDistance() { + return driveDomainRepository.getTotalDriveDistance(); + } - public Long getTotalDriveDurationInMinutes() { - return driveDomainRepository.getTotalDriveDurationInMinutes(); - } + public Long getTotalDriveDurationInMinutes() { + return driveDomainRepository.getTotalDriveDurationInMinutes(); + } - //일일 통계 - 당일 운행 차량 수 (distinct mdn) - public Map countDailyOperationCar(LocalDate targetDate) { - return OperationCarCount.toMap(driveDomainRepository.getDailyOperationCar(targetDate)); - } + //일일 통계 - 당일 운행 차량 수 (distinct mdn) + public Map countDailyOperationCar(LocalDate targetDate) { + return OperationCarCount.toMap(driveDomainRepository.getDailyOperationCar(targetDate)); + } - //일일 통계 - 당일 총 운행 수 - public Map countDailyTotalOperation(LocalDate targetDate) { - return OperationTotalCount.toMap(driveDomainRepository.getDailyTotalOperation(targetDate)); - } + //일일 통계 - 당일 총 운행 수 + public Map countDailyTotalOperation(LocalDate targetDate) { + return OperationTotalCount.toMap(driveDomainRepository.getDailyTotalOperation(targetDate)); + } - //월별 통계 - 미운행 차량 수 - public Map getNonOperatedCars(LocalDate targetDate) { - return NonOperatedCar.toMap(driveDomainRepository.getNonOperatedCars(targetDate)); - } + //월별 통계 - 미운행 차량 수 + public Map getNonOperatedCars(LocalDate targetDate) { + return NonOperatedCar.toMap(driveDomainRepository.getNonOperatedCars(targetDate)); + } } diff --git a/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/StatisticService.java b/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/StatisticService.java index 8d366965..60cd7e5b 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/StatisticService.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/StatisticService.java @@ -2,7 +2,6 @@ import java.time.LocalDate; import java.time.YearMonth; -import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Service; @@ -15,6 +14,7 @@ import kernel360.trackyweb.statistic.application.dto.response.MonthlyStatisticResponse; import kernel360.trackyweb.statistic.domain.provider.DailyStatisticProvider; import kernel360.trackyweb.statistic.domain.provider.MonthlyStatisticProvider; +import kernel360.trackyweb.timedistance.domain.provider.TimeDistanceDomainProvider; import lombok.RequiredArgsConstructor; @Service @@ -23,6 +23,7 @@ public class StatisticService { private final DailyStatisticProvider dailyStatisticProvider; private final MonthlyStatisticProvider monthlyStatisticProvider; + private final TimeDistanceDomainProvider timeDistanceDomainProvider; private final BizProvider bizProvider; public ApiResponse getDailyStatistic(String bizUuid, LocalDate date) { @@ -31,34 +32,30 @@ public ApiResponse getDailyStatistic(String bizUuid, Loc DailyStatisticEntity dailyStatistic = dailyStatisticProvider.getDailyStatistic(bizId, date); - List list = new ArrayList<>(); - for (int i = 0; i < 24; i++) { - list.add(1); - } - DailyStatisticResponse response = DailyStatisticResponse.from(dailyStatistic, list); + long[] hourlyDriveCounts = timeDistanceDomainProvider.getHourlyDriveCounts(bizId, date); + + DailyStatisticResponse response = DailyStatisticResponse.from(dailyStatistic, hourlyDriveCounts); return ApiResponse.success(response); } - public ApiResponse getMonthlyStatistic(String bizUuid, YearMonth date) { + public ApiResponse getMonthlyStatistic(String bizUuid, YearMonth date, + YearMonth targetDate) { + + if (targetDate == null) { + targetDate = date.minusYears(1).plusMonths(1); + } Long bizId = bizProvider.getBiz(bizUuid).getId(); - LocalDate localDate = date.atDay(1); + MonthlyStatisticEntity monthlyStatistic = monthlyStatisticProvider.getMonthlyStatistic(bizId, date.atDay(1)); - MonthlyStatisticEntity monthlyStatistic = monthlyStatisticProvider.getMonthlyStatistic(bizId, localDate); + List monthlyStats = monthlyStatisticProvider.getMonthlyDataTuples(bizId, + date.atDay(1), + targetDate.atDay(1)); - List list = new ArrayList<>(); - for (int i = 0; i < 12; i++) { - list.add(1); - } - List list2 = new ArrayList<>(); - for (int i = 0; i < 12; i++) { - list2.add(1L); - } - MonthlyStatisticResponse response = MonthlyStatisticResponse.from(monthlyStatistic, list, list2); + MonthlyStatisticResponse response = MonthlyStatisticResponse.from(monthlyStatistic, monthlyStats); return ApiResponse.success(response); } - } \ No newline at end of file diff --git a/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/dto/response/DailyStatisticResponse.java b/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/dto/response/DailyStatisticResponse.java index c8ef1b51..5f4ea46d 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/dto/response/DailyStatisticResponse.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/dto/response/DailyStatisticResponse.java @@ -1,7 +1,7 @@ package kernel360.trackyweb.statistic.application.dto.response; +import java.util.ArrayList; import java.util.List; -import java.util.stream.IntStream; import kernel360.trackycore.core.domain.entity.DailyStatisticEntity; @@ -15,22 +15,23 @@ public record Summary( double averageOperationRate, long totalDrivingSeconds, int totalDriveCount, - double totalDrivingDistanceKm // 저장 단위는 km로 가정 + double totalDrivingDistance ) { } public record HourlyStat( int hour, - int driveCount + long driveCount ) { } - public static DailyStatisticResponse from(DailyStatisticEntity e, List hourlyDriveCounts) { - List hourlyStats = IntStream.range(0, 24) - .mapToObj(i -> new DailyStatisticResponse.HourlyStat( - i, - hourlyDriveCounts.get(i) - )).toList(); + public static DailyStatisticResponse from(DailyStatisticEntity e, long[] hourlyDriveCounts) { + List hourlyStats = new ArrayList<>(); + + for (int i = 0; i < hourlyDriveCounts.length; i++) { + HourlyStat hourlyStat = new HourlyStat(i, hourlyDriveCounts[i]); + hourlyStats.add(hourlyStat); + } return new DailyStatisticResponse( new Summary( diff --git a/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/dto/response/MonthlyStatisticResponse.java b/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/dto/response/MonthlyStatisticResponse.java index 4d9bb439..bb0d0853 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/dto/response/MonthlyStatisticResponse.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/statistic/application/dto/response/MonthlyStatisticResponse.java @@ -1,13 +1,12 @@ package kernel360.trackyweb.statistic.application.dto.response; import java.util.List; -import java.util.stream.IntStream; import kernel360.trackycore.core.domain.entity.MonthlyStatisticEntity; public record MonthlyStatisticResponse( Summary summary, - List monthlyStat + List monthlyStats ) { public record Summary( int totalCarCount, @@ -15,30 +14,19 @@ public record Summary( double averageOperationRate, long totalDrivingSeconds, int totalDriveCount, - double totalDrivingDistanceKm // 저장 단위는 km로 가정 + double totalDrivingDistance ) { } - public record MonthlyStat( + public record MonthlyStats( int year, int month, int driveCount, - long driveDistance + double driveDistance ) { } - public static MonthlyStatisticResponse from(MonthlyStatisticEntity e, - List monthlyDriveCounts, - List monthlyDriveDistances - ) { - int currentMonth = e.getDate().getMonthValue(); - List monthlyStats = IntStream.range(0, currentMonth) - .mapToObj(i -> new MonthlyStat( - e.getDate().getYear(), - i + 1, - monthlyDriveCounts.get(i), - monthlyDriveDistances.get(i) - )).toList(); + public static MonthlyStatisticResponse from(MonthlyStatisticEntity e, List monthlyStats) { return new MonthlyStatisticResponse( new Summary( diff --git a/tracky-web/src/main/java/kernel360/trackyweb/statistic/domain/provider/MonthlyStatisticProvider.java b/tracky-web/src/main/java/kernel360/trackyweb/statistic/domain/provider/MonthlyStatisticProvider.java index 3b1e9813..a5d684e1 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/statistic/domain/provider/MonthlyStatisticProvider.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/statistic/domain/provider/MonthlyStatisticProvider.java @@ -10,6 +10,7 @@ import kernel360.trackycore.core.common.exception.ErrorCode; import kernel360.trackycore.core.common.exception.GlobalException; import kernel360.trackycore.core.domain.entity.MonthlyStatisticEntity; +import kernel360.trackyweb.statistic.application.dto.response.MonthlyStatisticResponse; import kernel360.trackyweb.statistic.infrastructure.repository.monthly.MonthlyStatisticDomainRepository; import lombok.RequiredArgsConstructor; @@ -42,4 +43,10 @@ public void saveMonthlyStatistic(List resultEntities) { } } } + + public List getMonthlyDataTuples(Long bizId, LocalDate localDate, + LocalDate localDate1) { + + return monthlyStatisticRepository.getMonthlyStats(bizId, localDate, localDate1); + } } diff --git a/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/daily/DailyStatisticDomainRepository.java b/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/daily/DailyStatisticDomainRepository.java index 3abc7d78..11cb4a1a 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/daily/DailyStatisticDomainRepository.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/daily/DailyStatisticDomainRepository.java @@ -9,5 +9,4 @@ public interface DailyStatisticDomainRepository extends DailyStatisticRepository, DailyStatisticRepositoryCustom { Optional findByBizIdAndDate(Long bizId, LocalDate date); - } diff --git a/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepository.java b/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepository.java index c4e61b8c..0c4c1afa 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepository.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepository.java @@ -7,8 +7,7 @@ import kernel360.trackycore.core.infrastructure.repository.MonthlyStatisticRepository; public interface MonthlyStatisticDomainRepository - extends MonthlyStatisticRepository { + extends MonthlyStatisticRepository, MonthlyStatisticDomainRepositoryCustom { Optional findByBizIdAndDate(Long bizId, LocalDate date); - } diff --git a/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepositoryCustom.java b/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepositoryCustom.java new file mode 100644 index 00000000..4b6f40e4 --- /dev/null +++ b/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepositoryCustom.java @@ -0,0 +1,12 @@ +package kernel360.trackyweb.statistic.infrastructure.repository.monthly; + +import java.time.LocalDate; +import java.util.List; + +import kernel360.trackyweb.statistic.application.dto.response.MonthlyStatisticResponse; + +public interface MonthlyStatisticDomainRepositoryCustom { + + List getMonthlyStats(Long bizId, LocalDate currentDate, + LocalDate targetDate); +} diff --git a/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepositoryImpl.java b/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepositoryImpl.java new file mode 100644 index 00000000..990ba7e8 --- /dev/null +++ b/tracky-web/src/main/java/kernel360/trackyweb/statistic/infrastructure/repository/monthly/MonthlyStatisticDomainRepositoryImpl.java @@ -0,0 +1,43 @@ +package kernel360.trackyweb.statistic.infrastructure.repository.monthly; + +import java.time.LocalDate; +import java.util.List; + +import org.springframework.stereotype.Repository; + +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import kernel360.trackycore.core.domain.entity.QMonthlyStatisticEntity; +import kernel360.trackyweb.statistic.application.dto.response.MonthlyStatisticResponse; +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class MonthlyStatisticDomainRepositoryImpl implements MonthlyStatisticDomainRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + @Override + public List getMonthlyStats(Long bizId, LocalDate currentDate, + LocalDate targetDate) { + QMonthlyStatisticEntity e = QMonthlyStatisticEntity.monthlyStatisticEntity; + + return queryFactory.select( + Projections.constructor( + MonthlyStatisticResponse.MonthlyStats.class, + e.date.year(), + e.date.month(), + e.totalDriveCount.sum(), + e.totalDriveDistance.sum() + )) + .from(e) + .where( + e.bizId.eq(bizId) + .and(e.date.between(targetDate, currentDate)) + ) + .groupBy(e.date.yearMonth()) + .orderBy(e.date.yearMonth().asc()) + .fetch(); + } +} diff --git a/tracky-web/src/main/java/kernel360/trackyweb/statistic/presentation/StatisticController.java b/tracky-web/src/main/java/kernel360/trackyweb/statistic/presentation/StatisticController.java index cd28f729..a7334af1 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/statistic/presentation/StatisticController.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/statistic/presentation/StatisticController.java @@ -40,8 +40,9 @@ public ApiResponse getDailyStatistic( public ApiResponse getMonthlyStatistic( @AuthenticationPrincipal MemberPrincipal memberPrincipal, @RequestParam(name = "date") - YearMonth date + YearMonth date, + YearMonth targetDate ) { - return statisticService.getMonthlyStatistic(memberPrincipal.bizUuid(), date); + return statisticService.getMonthlyStatistic(memberPrincipal.bizUuid(), date, targetDate); } } diff --git a/tracky-web/src/main/java/kernel360/trackyweb/timedistance/domain/provider/TimeDistanceDomainProvider.java b/tracky-web/src/main/java/kernel360/trackyweb/timedistance/domain/provider/TimeDistanceDomainProvider.java index 06c5c1c1..42af3528 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/timedistance/domain/provider/TimeDistanceDomainProvider.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/timedistance/domain/provider/TimeDistanceDomainProvider.java @@ -1,10 +1,14 @@ package kernel360.trackyweb.timedistance.domain.provider; import java.time.LocalDate; +import java.util.List; import java.util.Map; import org.springframework.stereotype.Component; +import com.querydsl.core.Tuple; + +import kernel360.trackycore.core.domain.entity.QTimeDistanceEntity; import kernel360.trackyweb.timedistance.application.dto.internal.OperationDistance; import kernel360.trackyweb.timedistance.application.dto.internal.OperationSeconds; import kernel360.trackyweb.timedistance.infrastructure.repository.TimeDistanceDomainRepository; @@ -16,6 +20,23 @@ public class TimeDistanceDomainProvider { private final TimeDistanceDomainRepository timeDistanceDomainRepository; + public long[] getHourlyDriveCounts(Long bizId, LocalDate targetDate) { + + List hourlyDriveCount = timeDistanceDomainRepository.countByBizIdAndDateGroupedByHour(bizId, targetDate); + + long[] hourlyStat = new long[24]; + + for (Tuple tuple : hourlyDriveCount) { + Integer hour = tuple.get(QTimeDistanceEntity.timeDistanceEntity.hour); + Long driveCount = tuple.get(QTimeDistanceEntity.timeDistanceEntity.count()); + + if (hour != null && driveCount != null) { + hourlyStat[hour] = driveCount; + } + } + return hourlyStat; + } + public Map calculateDailyOperationTime(LocalDate targetDate) { return OperationSeconds.toMap(timeDistanceDomainRepository.getDailyOperationTime(targetDate)); } diff --git a/tracky-web/src/main/java/kernel360/trackyweb/timedistance/infrastructure/repository/TimeDistanceDomainRepositoryCustom.java b/tracky-web/src/main/java/kernel360/trackyweb/timedistance/infrastructure/repository/TimeDistanceDomainRepositoryCustom.java index 3f48b086..cbb303fe 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/timedistance/infrastructure/repository/TimeDistanceDomainRepositoryCustom.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/timedistance/infrastructure/repository/TimeDistanceDomainRepositoryCustom.java @@ -3,6 +3,8 @@ import java.time.LocalDate; import java.util.List; +import com.querydsl.core.Tuple; + import kernel360.trackyweb.timedistance.application.dto.internal.OperationDistance; import kernel360.trackyweb.timedistance.application.dto.internal.OperationSeconds; @@ -10,4 +12,6 @@ public interface TimeDistanceDomainRepositoryCustom { List getDailyOperationTime(LocalDate targetDate); List getDailyOperationDistance(LocalDate targetDate); + + List countByBizIdAndDateGroupedByHour(Long bizId, LocalDate targetDate); } diff --git a/tracky-web/src/main/java/kernel360/trackyweb/timedistance/infrastructure/repository/TimeDistanceDomainRepositoryCustomImpl.java b/tracky-web/src/main/java/kernel360/trackyweb/timedistance/infrastructure/repository/TimeDistanceDomainRepositoryCustomImpl.java index e3b2071f..70f0f044 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/timedistance/infrastructure/repository/TimeDistanceDomainRepositoryCustomImpl.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/timedistance/infrastructure/repository/TimeDistanceDomainRepositoryCustomImpl.java @@ -1,15 +1,18 @@ package kernel360.trackyweb.timedistance.infrastructure.repository; import static kernel360.trackycore.core.domain.entity.QTimeDistanceEntity.*; + import java.time.LocalDate; import java.util.List; -import com.querydsl.core.types.Projections; -import kernel360.trackyweb.timedistance.application.dto.internal.OperationDistance; import org.springframework.stereotype.Repository; +import com.querydsl.core.Tuple; +import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; +import kernel360.trackycore.core.domain.entity.QTimeDistanceEntity; +import kernel360.trackyweb.timedistance.application.dto.internal.OperationDistance; import kernel360.trackyweb.timedistance.application.dto.internal.OperationSeconds; import lombok.RequiredArgsConstructor; @@ -19,33 +22,47 @@ public class TimeDistanceDomainRepositoryCustomImpl implements TimeDistanceDomai private final JPAQueryFactory queryFactory; + @Override + public List countByBizIdAndDateGroupedByHour(Long bizId, LocalDate targetDate) { + QTimeDistanceEntity e = QTimeDistanceEntity.timeDistanceEntity; + + return queryFactory.select(e.hour, e.count()) + .from(e) + .where(e.biz.id.eq(bizId) + .and(e.date.eq(targetDate)) + ) + .groupBy(e.hour) + .orderBy(e.hour.asc()) + .fetch(); + } + @Override public List getDailyOperationTime(LocalDate targetDate) { return queryFactory - .select(Projections.constructor( - OperationSeconds.class, - timeDistanceEntity.biz.id, - timeDistanceEntity.seconds.sum() - )) - .from(timeDistanceEntity) - .where(timeDistanceEntity.date.eq(targetDate)) - .groupBy(timeDistanceEntity.biz.id) - .fetch(); + .select(Projections.constructor( + OperationSeconds.class, + timeDistanceEntity.biz.id, + timeDistanceEntity.seconds.sum() + )) + .from(timeDistanceEntity) + .where(timeDistanceEntity.date.eq(targetDate)) + .groupBy(timeDistanceEntity.biz.id) + .fetch(); } @Override public List getDailyOperationDistance(LocalDate targetDate) { return queryFactory - .select(Projections.constructor( - OperationDistance.class, - timeDistanceEntity.biz.id, - timeDistanceEntity.distance.sum() - )) - .from(timeDistanceEntity) - .where(timeDistanceEntity.date.eq(targetDate)) - .groupBy(timeDistanceEntity.biz.id) - .fetch(); + .select(Projections.constructor( + OperationDistance.class, + timeDistanceEntity.biz.id, + timeDistanceEntity.distance.sum() + )) + .from(timeDistanceEntity) + .where(timeDistanceEntity.date.eq(targetDate)) + .groupBy(timeDistanceEntity.biz.id) + .fetch(); } }