cloudroam
2 天以前 9755d9eefb12f95fa45c785e526038e10c9c7115
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?
@@ -51,7 +54,7 @@
        SELECT * FROM Code 
        WHERE oneLevel LIKE '%' || :keyword || '%' 
        AND pickup = '0'
        ORDER BY time DESC
        ORDER BY createTime DESC
    """)
    fun getByKeyword(keyword: String): List<Code>
@@ -60,6 +63,8 @@
        WHERE category = :category 
        AND code = :code 
        AND substr(createTime, 1, 10) = substr(:dateString, 1, 10)
        ANd pickup = '0'
        ORDER BY createTime DESC
        LIMIT 1
    """)
    fun queryByTypeAndCodeAndDate(category: String, code: String, dateString: String): Code?
@@ -75,16 +80,24 @@
    @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 and category='快递'
        ORDER BY createTime DESC
    """)
    fun getPackagesByDayReaded(date: Long): Flow<List<Code>>
    @Query("""
        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'))
              strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime'))  and category='快递'
        GROUP BY oneLevel
        ORDER BY count DESC
    """)
@@ -92,10 +105,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 +114,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) 
@@ -126,7 +137,7 @@
        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'))
              strftime('%Y-%m', datetime(:date/1000, 'unixepoch', 'localtime')) and category='快递'
        GROUP BY oneLevel
        ORDER BY count DESC
    """)
@@ -136,7 +147,7 @@
        SELECT oneLevel as courierName, COUNT(*) as count 
        FROM code 
        WHERE strftime('%Y', substr(createTime, 1, 10)) = 
              strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime'))
              strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) and category='快递'
        GROUP BY oneLevel
        ORDER BY count DESC
    """)
@@ -172,7 +183,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
@@ -193,7 +204,7 @@
            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
        LEFT JOIN code ON date(code.createTime) = dates.date and code.category='快递'
        GROUP BY dates.date
        ORDER BY dates.date
    """)
@@ -208,9 +219,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
@@ -228,12 +239,12 @@
        )
        SELECT 
            strftime('%m', month_start) as date,
            COUNT(code.id) as count,
            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
        ORDER BY months.month_start ASC
            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>>
@@ -250,7 +261,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 +274,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 +296,58 @@
        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>
}