diff --git a/src/main/java/Spring/MindStone/repository/habitRepository/HabitHistoryRepository.java b/src/main/java/Spring/MindStone/repository/habitRepository/HabitHistoryRepository.java index 1fd2d9d..fdffdc4 100644 --- a/src/main/java/Spring/MindStone/repository/habitRepository/HabitHistoryRepository.java +++ b/src/main/java/Spring/MindStone/repository/habitRepository/HabitHistoryRepository.java @@ -102,8 +102,8 @@ int countCompletedHabitsByMonth(@Param("memberId") Long memberId, @Param("year") int year, @Param("month") int month); - // 특정 주별 습관 달성 횟수 조회 (리포트) - @Query(value = "SELECT WEEK(hh.created_at), hh.habit_id, COUNT(*) " + + // 주별 습관 달성 횟수 조회 (리포트) + @Query(value = "SELECT WEEK(hh.created_at), hh.habit_id, CAST(COUNT(*) AS SIGNED) " + "FROM habit_history hh " + "WHERE hh.member_id = :memberId " + "AND YEAR(hh.created_at) = :year " + @@ -114,8 +114,8 @@ List getWeeklyHabitCounts(@Param("memberId") Long memberId, @Param("year") int year, @Param("month") int month); - // 특정 주별 활동 시간 조회 (리포트) - @Query(value = "SELECT WEEK(he.start_time), hh.habit_id, SUM(TIMESTAMPDIFF(MINUTE, he.start_time, COALESCE(he.end_time, he.start_time))) " + + // 주별 활동 시간 조회 (리포트) + @Query(value = "SELECT WEEK(he.start_time), hh.habit_id, CAST(SUM(TIMESTAMPDIFF(MINUTE, he.start_time, COALESCE(he.end_time, he.start_time))) AS SIGNED) " + "FROM habit_history hh " + "JOIN habit_execution he ON hh.id = he.habit_history_id " + "WHERE hh.member_id = :memberId " + @@ -127,6 +127,7 @@ List getWeeklyActiveTime(@Param("memberId") Long memberId, @Param("year") int year, @Param("month") int month); + // 달성률 증가율 계산 (리포트) @Query(value = "SELECT (endRate - startRate) * 100.0 / NULLIF(startRate, 0) " + "FROM (SELECT " + diff --git a/src/main/java/Spring/MindStone/service/habitService/HabitReportService.java b/src/main/java/Spring/MindStone/service/habitService/HabitReportService.java index 2e72897..1dfadec 100644 --- a/src/main/java/Spring/MindStone/service/habitService/HabitReportService.java +++ b/src/main/java/Spring/MindStone/service/habitService/HabitReportService.java @@ -38,23 +38,27 @@ public HabitReportResponseDto getHabitReport(Long memberId, int year, int month) .map(data -> new HabitReportResponseDto.WeeklyData((int) data[0], (long) data[1], (long) data[2])) .collect(Collectors.toList()); - // 주별 활동 시간 - List weeklyActiveTimeData = habitHistoryRepository.getWeeklyActiveTime(memberId, year, month); - List weeklyActiveTime = weeklyActiveTimeData.stream() - .map(data -> new HabitReportResponseDto.WeeklyData((int) data[0], (long) data[1], (long) data[2])) - .collect(Collectors.toList()); - - // 주별 활동 횟수 + // 주별 활동 횟수 조회 및 변환 List weeklyHabitCountsData = habitHistoryRepository.getWeeklyHabitCounts(memberId, year, month); List weeklyHabitCounts = weeklyHabitCountsData.stream() .map(data -> new HabitReportResponseDto.WeeklyData( - ((Number) data[0]).intValue(), - ((Number) data[1]).longValue(), - ((BigDecimal) data[2]).longValue() + ((Number) data[0]).intValue(), // 주차 + ((Number) data[1]).longValue(), // 습관 ID + ((BigDecimal) data[2]).longValue() // 활동 횟수 (BigDecimal → Long 변환) )) + .collect(Collectors.toList()); +// 주별 활동 시간 조회 및 변환 + List weeklyActiveTimeData = habitHistoryRepository.getWeeklyActiveTime(memberId, year, month); + List weeklyActiveTime = weeklyActiveTimeData.stream() + .map(data -> new HabitReportResponseDto.WeeklyData( + ((Number) data[0]).intValue(), // 주차 + ((Number) data[1]).longValue(), // 습관 ID + ((BigDecimal) data[2]).longValue() // 활동 시간 (BigDecimal → Long 변환) + )) .collect(Collectors.toList()); + return new HabitReportResponseDto(recordPercentage, achievementGrowth, topHabit, weeklyAchievementRates, weeklyActiveTime,weeklyHabitCounts); } }