cloudroam
2025-03-05 2933603ee0940395a80a91bb23e50cbe8ba9baa5
app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt
@@ -73,29 +73,46 @@
    fun getPackagesByDay(date: Long): Flow<List<Code>>
    @Query("""
        SELECT * FROM code
        WHERE strftime('%Y-%W', substr(createtime, 1, 10)) =
              strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime'))
        ORDER BY createtime DESC
    """)
    fun getPackagesByWeek(date: Long): Flow<List<Code>>
    @Query("""
        SELECT category as courierName, COUNT(*) as count
        SELECT type as courierName, COUNT(*) as count
        FROM code 
        WHERE strftime('%Y-%W', substr(createtime, 1, 10)) = 
              strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime'))
        GROUP BY category
        GROUP BY type
        ORDER BY count DESC
    """)
    fun getCourierStatsByWeek(date: Long): Flow<List<CourierStat>>
    @Query("""
        SELECT substr(createtime, 1, 10) as date,
               COUNT(*) as count
        FROM code
        WHERE strftime('%Y-%W', substr(createtime, 1, 10)) =
              strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime'))
        GROUP BY substr(createtime, 1, 10)
        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(date: Long): Flow<List<DailyStat>>
    @Query("""
        SELECT * FROM code
        WHERE substr(createtime, 1, 10) =
              date(:date/1000, 'unixepoch', 'localtime')
        ORDER BY createtime DESC
    """)
     fun getPackagesByWeek(date: Long): Flow<List<Code>>
}