From 2933603ee0940395a80a91bb23e50cbe8ba9baa5 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期三, 05 三月 2025 10:03:16 +0800
Subject: [PATCH] fix: 2

---
 app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt |   31 +++++++++++++++++++++++--------
 1 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt b/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt
index 00e535f..3f5d7ae 100644
--- a/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt
+++ b/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt
@@ -83,15 +83,30 @@
     fun getCourierStatsByWeek(date: Long): Flow<List<CourierStat>>
 
     @Query("""
-        SELECT strftime('%W', createtime) as date,
-               COUNT(*) as count,
-               MIN(createtime) as week_start
-        FROM code 
-        WHERE strftime('%Y', createtime) = strftime('%Y', 'now')
-        GROUP BY strftime('%W', createtime)
-        ORDER BY week_start ASC
+        WITH RECURSIVE weeks(week_start, week_end) AS (
+            -- 从选定的日期开始计算周
+            SELECT 
+                date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 1', '-28 days') as week_start,
+                date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '-28 days') as week_end
+            UNION ALL
+            SELECT 
+                date(week_start, '+7 days'),
+                date(week_end, '+7 days')
+            FROM weeks
+            WHERE date(week_start) <= date(datetime(:date/1000, 'unixepoch', 'localtime'))
+            LIMIT 5
+        )
+        SELECT 
+            CAST(strftime('%W', week_start) AS INTEGER) as date,
+            COUNT(code.id) as count,
+            week_start as week_start
+        FROM weeks 
+        LEFT JOIN code ON datetime(code.createtime) BETWEEN datetime(weeks.week_start) 
+            AND datetime(weeks.week_end, '+23 hours', '+59 minutes', '+59 seconds')
+        GROUP BY weeks.week_start
+        ORDER BY weeks.week_start ASC
     """)
-    fun getDailyStatsByWeek(): Flow<List<DailyStat>>
+    fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>>
 
     @Query("""
         SELECT * FROM code 

--
Gitblit v1.9.3