cloudroam
2025-03-04 897ffe5e29ab022d75ad948ecf894e0a3ed3b2f5
app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt
@@ -64,36 +64,40 @@
    @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
    """)
    fun getPackagesByWeek(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 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 type
        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')
        )
        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
    """)
    fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>>
    fun getDailyStatsByWeek(): 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>>
}