From 1a281d8354622a3606360f9f9a7fe4bb7d6a2c3a Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期日, 27 四月 2025 13:22:26 +0800
Subject: [PATCH] fix 短信
---
app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt | 305 ++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 279 insertions(+), 26 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 d86d5c1..963769c 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
@@ -9,6 +9,8 @@
import com.example.firstapp.database.entity.Msg
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 +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?
@@ -34,7 +39,7 @@
@Query("SELECT * FROM Code")
fun getAllCodes(): List<Code>
- @Query("SELECT * FROM Code WHERE type = :type")
+ @Query("SELECT * FROM Code WHERE oneLevel = :type")
fun getCodesByType(type: String): List<Code>
@@ -47,53 +52,301 @@
@Query("""
SELECT * FROM Code
- WHERE type LIKE '%' || :keyword || '%'
+ WHERE oneLevel LIKE '%' || :keyword || '%'
AND pickup = '0'
- ORDER BY time DESC
+ ORDER BY createTime DESC
""")
fun getByKeyword(keyword: String): List<Code>
- @Query("SELECT * FROM Code WHERE type = :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)
+ ORDER BY createTime DESC
+ LIMIT 1
+ """)
+ fun queryByTypeAndCodeAndDate(category: String, code: String, dateString: String): Code?
@Query("update Code set pickup = '1' , pickuptime = CURRENT_TIMESTAMP where id=:id")
fun pickup(id: Long)
//查询当天包裹信息
- @Query("SELECT * FROM code WHERE date(createtime) = date(:date/1000, 'unixepoch', 'localtime') ORDER BY createtime DESC")
+ @Query("SELECT * FROM code WHERE date(createTime) = date(:date/1000, 'unixepoch', 'localtime') ORDER BY createTime DESC")
fun getNewPackagesByDay(date: Long): List<Code>
- @Query("SELECT * FROM code WHERE date(createtime/1000, 'unixepoch', 'localtime') = date(:date/1000, 'unixepoch', 'localtime') ORDER BY createtime DESC")
+ @Query("""
+ SELECT * FROM code
+ WHERE substr(createTime, 1, 10) =
+ date(:date/1000, 'unixepoch', 'localtime')
+ ORDER BY createTime DESC
+ """)
fun getPackagesByDay(date: Long): Flow<List<Code>>
@Query("""
SELECT * FROM code
- WHERE strftime('%Y-%W', createtime/1000, 'unixepoch', 'localtime') =
- strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime')
- ORDER BY createtime DESC
+ WHERE substr(createTime, 1, 10) =
+ date(:date/1000, 'unixepoch', 'localtime') and pickup = 1 and category='快递'
+ ORDER BY createTime DESC
""")
- fun getPackagesByWeek(date: Long): Flow<List<Code>>
+ fun getPackagesByDayReaded(date: Long): Flow<List<Code>>
@Query("""
- SELECT * FROM CourierStat
- WHERE EXISTS (
- SELECT 1 FROM code p
- WHERE p.category = CourierStat.category
- AND strftime('%Y-%W', p.createtime/1000, 'unixepoch', 'localtime') =
- strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime')
- )
+ SELECT oneLevel as courierName, COUNT(*) as count
+ FROM code
+ WHERE strftime('%Y-%W', substr(createTime, 1, 10)) =
+ strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime')) and category='快递'
+ GROUP BY oneLevel
+ ORDER BY count DESC
""")
fun getCourierStatsByWeek(date: Long): Flow<List<CourierStat>>
@Query("""
- SELECT * FROM DailyStat
- WHERE EXISTS (
- SELECT 1 FROM code p
- WHERE date(p.createtime/1000, 'unixepoch', 'localtime') = DailyStat.date
- AND strftime('%Y-%W', p.createtime/1000, 'unixepoch', 'localtime') =
- strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime')
- )
+ WITH RECURSIVE dates(date_value) AS (
+ SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '-21 days') as date_value
+ UNION ALL
+ SELECT date(date_value, '+7 days')
+ FROM dates
+ WHERE date_value < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '+14 days')
+ )
+ SELECT
+ strftime('%Y-%m-%d', date_value) as date,
+ COUNT(c.id) as count,
+ 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)
+ AND strftime('%Y-%m-%d', date(d.date_value, '+6 days'))
+ GROUP BY d.date_value
+ ORDER BY d.date_value ASC
+ LIMIT :weekCount
+""")
+ fun getWeeklyStats(date: Long, weekCount: Int): Flow<List<DailyStat>>
+
+ @Query("""
+ SELECT * FROM code
+ WHERE substr(createTime, 1, 10) =
+ date(:date/1000, 'unixepoch', 'localtime')
+ ORDER BY createTime DESC
""")
- fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>>
+ fun getPackagesByWeek(date: Long): Flow<List<Code>>
+
+ @Query("""
+ SELECT oneLevel as courierName, COUNT(*) as count
+ FROM code
+ WHERE strftime('%Y-%m', substr(createTime, 1, 10)) =
+ strftime('%Y-%m', datetime(:date/1000, 'unixepoch', 'localtime')) and category='快递'
+ GROUP BY oneLevel
+ ORDER BY count DESC
+ """)
+ fun getCourierStatsByMonth(date: Long): Flow<List<CourierStat>>
+
+ @Query("""
+ SELECT oneLevel as courierName, COUNT(*) as count
+ FROM code
+ WHERE strftime('%Y', substr(createTime, 1, 10)) =
+ strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) and category='快递'
+ GROUP BY oneLevel
+ ORDER BY count DESC
+ """)
+ fun getCourierStatsByYear(date: Long): Flow<List<CourierStat>>
+
+// @Query("""
+// WITH RECURSIVE months(month_start) AS (
+// SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month', '-11 months')
+// UNION ALL
+// SELECT date(month_start, '+1 month')
+// FROM months
+// WHERE date(month_start) < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month')
+// )
+// SELECT
+// strftime('%m', month_start) as date,
+// COUNT(code.id) as count,
+// month_start as week_start
+// FROM months
+// LEFT JOIN code ON strftime('%Y-%m', code.createTime) = strftime('%Y-%m', months.month_start)
+// GROUP BY months.month_start
+// ORDER BY months.month_start ASC
+// """)
+// fun getMonthlyStats(date: Long): Flow<List<DailyStat>>
+
+ @Query("""
+ WITH RECURSIVE years(year_start) AS (
+ SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year', '-4 years')
+ UNION ALL
+ SELECT date(year_start, '+1 year')
+ FROM years
+ WHERE date(year_start) < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year')
+ )
+ SELECT
+ strftime('%Y', year_start) as date,
+ COUNT(code.id) as count,
+ 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
+ ORDER BY years.year_start ASC
+ """)
+ fun getYearlyStats(date: Long): Flow<List<DailyStat>>
+
+ @Query("""
+ WITH RECURSIVE dates(date) AS (
+ SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year')
+ UNION ALL
+ SELECT date(date, '+1 day')
+ FROM dates
+ WHERE date < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year', '+1 year', '-1 day')
+ )
+ SELECT
+ CAST(strftime('%w', dates.date) AS INTEGER) as dayOfWeek,
+ CAST(strftime('%W', dates.date) AS INTEGER) as weekOfYear,
+ COUNT(code.id) as count
+ FROM dates
+ LEFT JOIN code ON date(code.createTime) = dates.date and code.category='快递'
+ GROUP BY dates.date
+ ORDER BY dates.date
+ """)
+ fun getYearlyHeatmap(date: Long): Flow<List<HeatmapStat>>
+
+ @Query("""
+ WITH RECURSIVE days(date) AS (
+ SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month')
+ UNION ALL
+ SELECT date(date, '+1 day')
+ FROM days
+ WHERE date < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month', '+1 month', '-1 day')
+ )
+ SELECT
+ strftime('%d', days.date) || '' as date,
+ COUNT(code.id) as count,
+ strftime('%Y-%m-%d', days.date) as weekStart
+ FROM days
+ LEFT JOIN code ON date(code.createTime) = days.date
+ GROUP BY days.date
+ ORDER BY days.date ASC
+ """)
+ fun getMonthlyStats(date: Long): Flow<List<DailyStat>>
+
+ @Query("""
+ WITH RECURSIVE months(month_start) AS (
+ SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of year') as month_start
+ UNION ALL
+ SELECT date(month_start, '+1 month')
+ FROM months
+ WHERE strftime('%m', month_start) < '12'
+ )
+ SELECT
+ strftime('%m', month_start) as date,
+ COUNT(c.id) as count,
+ strftime('%Y-%m-%d', month_start) as weekStart
+ FROM months m
+ LEFT JOIN code c ON strftime('%Y-%m', c.createTime) = strftime('%Y-%m', m.month_start) and c.category='快递'
+ GROUP BY m.month_start
+ ORDER BY m.month_start ASC
+ """)
+ fun getYearMonthlyStats(date: Long): Flow<List<DailyStat>>
+
+
+ // 新增当前周统计方法
+ @Query("""
+ WITH RECURSIVE days(date) AS (
+ SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0') as date
+ UNION ALL
+ SELECT date(date, '+1 day')
+ FROM days
+ WHERE date < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 6')
+ )
+ SELECT
+ strftime('%Y-%m-%d', days.date) as date,
+ COUNT(code.id) as count,
+ strftime('%Y-%m-%d', days.date) as weekStart
+ FROM days
+ LEFT JOIN code ON date(code.createTime) = days.date
+ GROUP BY days.date
+ ORDER BY days.date ASC
+""")
+ fun getCurrentWeekStats(date: Long): Flow<List<DailyStat>>
+
+ // 新增当前年统计方法
+ @Query("""
+ SELECT
+ strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) as date,
+ COUNT(id) as count,
+ 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 and c.category='快递'
+ GROUP BY d.date_value
+ ORDER BY d.date_value ASC
+""")
+ fun getWeeklyStatsChart(startDateCur: String, endDateCur: String): Flow<List<DailyStat>>
+
+
+ @Query("""
+ SELECT COUNT(1)
+ FROM code
+ WHERE date(createTime) BETWEEN date(:startDateCur) AND date(:endDateCur) and category =:type
+ """)
+ fun getDateStatsByType(startDateCur: String, endDateCur: String,type: String): Flow<Long>
}
--
Gitblit v1.9.3