From ca8bc638ba9cbca3f5f6a4d497d45f92e70064f3 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期三, 16 四月 2025 08:44:15 +0800
Subject: [PATCH] add: 火车票和航班处理

---
 app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt |   75 ++++++++++++++++++++++++++++++++-----
 1 files changed, 65 insertions(+), 10 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 58bcc20..d8b0118 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
@@ -29,6 +29,9 @@
     @Query("DELETE FROM Code where id=:id")
     fun delete(id: Long)
 
+    @Query("DELETE FROM Code")
+    fun deleteAll(): Completable
+
 
     @Query("SELECT * FROM Code WHERE id = :id LIMIT 1")
      fun getCodeById(id: Long): Code?
@@ -75,10 +78,18 @@
     @Query("""
         SELECT * FROM code 
         WHERE substr(createTime, 1, 10) = 
-              date(:date/1000, 'unixepoch', 'localtime')
+              date(:date/1000, 'unixepoch', 'localtime') 
         ORDER BY createTime DESC
     """)
     fun getPackagesByDay(date: Long): Flow<List<Code>>
+
+    @Query("""
+        SELECT * FROM code 
+        WHERE substr(createTime, 1, 10) = 
+              date(:date/1000, 'unixepoch', 'localtime') and pickup = 1
+        ORDER BY createTime DESC
+    """)
+    fun getPackagesByDayUnread(date: Long): Flow<List<Code>>
 
     @Query("""
         SELECT oneLevel as courierName, COUNT(*) as count 
@@ -92,10 +103,8 @@
 
     @Query("""
     WITH RECURSIVE dates(date_value) AS (
-        -- 从当前日期往前3周的周一开始
         SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '-21 days') as date_value
         UNION ALL
-        -- 每次加7天,直到后2周
         SELECT date(date_value, '+7 days')
         FROM dates
         WHERE date_value < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '+14 days')
@@ -103,7 +112,7 @@
     SELECT 
         strftime('%Y-%m-%d', date_value) as date,
         COUNT(c.id) as count,
-        date_value as weekStart
+        strftime('%Y-%m-%d', date_value) as weekStart
     FROM dates d
     LEFT JOIN code c ON strftime('%Y-%m-%d', c.createTime) BETWEEN 
         strftime('%Y-%m-%d', d.date_value) 
@@ -172,7 +181,7 @@
         SELECT 
             strftime('%Y', year_start) as date,
             COUNT(code.id) as count,
-            year_start as week_start
+            strftime('%Y-%m-%d', year_start) as weekStart
         FROM years 
         LEFT JOIN code ON strftime('%Y', code.createTime) = strftime('%Y', years.year_start)
         GROUP BY years.year_start
@@ -208,9 +217,9 @@
             WHERE date < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month', '+1 month', '-1 day')
         )
         SELECT 
-            strftime('%d', days.date) || '' as date,  -- 确保 date 不为空
+            strftime('%d', days.date) || '' as date,
             COUNT(code.id) as count,
-            days.date as week_start
+            strftime('%Y-%m-%d', days.date) as weekStart
         FROM days 
         LEFT JOIN code ON date(code.createTime) = days.date
         GROUP BY days.date
@@ -229,7 +238,7 @@
         SELECT 
             strftime('%m', month_start) as date,
             COUNT(code.id) as count,
-            month_start as weekStart
+            strftime('%Y-%m-%d', month_start) as weekStart
         FROM months 
         LEFT JOIN code ON strftime('%Y-%m', code.createTime) = strftime('%Y-%m', months.month_start)
         GROUP BY months.month_start
@@ -250,7 +259,7 @@
     SELECT 
         strftime('%Y-%m-%d', days.date) as date,
         COUNT(code.id) as count,
-        days.date as weekStart
+        strftime('%Y-%m-%d', days.date) as weekStart
     FROM days 
     LEFT JOIN code ON date(code.createTime) = days.date
     GROUP BY days.date
@@ -263,7 +272,7 @@
     SELECT 
         strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) as date,
         COUNT(id) as count,
-        datetime(:date/1000, 'unixepoch', 'localtime') as weekStart
+        strftime('%Y-%m-%d', datetime(:date/1000, 'unixepoch', 'localtime')) as weekStart
     FROM code 
     WHERE strftime('%Y', createTime) = strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime'))
 """)
@@ -285,4 +294,50 @@
         ORDER BY createTime DESC
     """)
     fun getPackagesByTypeAndStation(type: String, stationName: String): List<Code>
+
+
+    @Query("""
+        SELECT COUNT(1)
+        FROM code
+        WHERE date(createTime) BETWEEN date(:startDateCur) AND date(:endDateCur)
+    """)
+    fun getCurrentWeekStats2(startDateCur: String, endDateCur: String):  Flow<Long>
+
+//    @Query("""
+//        WITH RECURSIVE dates(date_value) AS (
+//            SELECT date('now', 'weekday 1', '-7 days')
+//            UNION ALL
+//            SELECT date(date_value, '+1 day')
+//            FROM dates
+//            WHERE date_value < date('now', 'weekday 1', '-7 days', '+6 days')
+//        )
+//        SELECT
+//            strftime('%d', date_value) AS date,
+//            COUNT(c.id) AS count,
+//            '' as weekStart
+//        FROM dates d
+//        LEFT JOIN code c ON date(c.createTime) = d.date_value
+//        GROUP BY d.date_value
+//        ORDER BY d.date_value ASC
+//
+//    """)
+
+    @Query("""
+    WITH RECURSIVE dates(date_value) AS (
+        SELECT date(:startDateCur)
+        UNION ALL
+        SELECT date(date_value, '+1 day')
+        FROM dates
+        WHERE date_value < date(:endDateCur)
+    )
+    SELECT 
+        strftime('%d', date_value) AS date,
+        COUNT(c.id) AS count,
+        '' AS weekStart
+    FROM dates d
+    LEFT JOIN code c ON date(c.createTime) = d.date_value
+    GROUP BY d.date_value
+    ORDER BY d.date_value ASC
+""")
+    fun getWeeklyStatsChart(startDateCur: String, endDateCur: String): Flow<List<DailyStat>>
 }

--
Gitblit v1.9.3