From 27bbd0435881e408f267c99e6a253d2e17873bcc Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期五, 11 四月 2025 17:44:11 +0800
Subject: [PATCH] 1.2
---
app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt | 103 +++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 91 insertions(+), 12 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 f79e67a..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
@@ -10,6 +10,7 @@
import com.example.firstapp.model.CourierStat
import com.example.firstapp.model.DailyStat
import com.example.firstapp.model.HeatmapStat
+import com.example.firstapp.model.StationGroup
import io.reactivex.Completable
import kotlinx.coroutines.flow.Flow
@@ -27,6 +28,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")
@@ -54,8 +58,14 @@
""")
fun getByKeyword(keyword: String): List<Code>
- @Query("SELECT * FROM Code WHERE oneLevel = :content and code= :code and createTime = :dateString LIMIT 1")
- fun queryByTypeAndCodeAndDate(content: String, code: String, dateString: String): Code
+ @Query("""
+ SELECT * FROM Code
+ WHERE category = :category
+ AND code = :code
+ AND substr(createTime, 1, 10) = substr(:dateString, 1, 10)
+ LIMIT 1
+ """)
+ fun queryByTypeAndCodeAndDate(category: String, code: String, dateString: String): Code?
@Query("update Code set pickup = '1' , pickuptime = CURRENT_TIMESTAMP where id=:id")
@@ -68,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
@@ -85,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')
@@ -96,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)
@@ -165,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
@@ -201,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
@@ -222,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
@@ -243,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
@@ -256,9 +272,72 @@
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'))
""")
fun getCurrentYearStats(date: Long): Flow<List<DailyStat>>
+
+ @Query("""
+ SELECT oneLevel as stationName, COUNT(*) as count
+ FROM Code
+ WHERE category = :type AND pickup = '0'
+ GROUP BY oneLevel
+ ORDER BY createTime DESC
+ """)
+ fun getStationsByType(type: String): List<StationGroup>
+
+ @Query("""
+ SELECT * FROM Code
+ WHERE category = :type AND pickup = '0'
+ AND oneLevel = :stationName
+ 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