1.2
tj
2025-04-11 27bbd0435881e408f267c99e6a253d2e17873bcc
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?
@@ -75,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 
@@ -283,4 +294,50 @@
        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>>
}