cloudroam
2025-04-03 97745e7ad15fb3d175f81dfdd2f24269e8fdfefd
app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt
@@ -10,6 +10,7 @@
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
@@ -54,8 +55,14 @@
    """)
    fun getByKeyword(keyword: String): List<Code>
    @Query("SELECT * FROM Code WHERE oneLevel = :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)
        LIMIT 1
    """)
    fun queryByTypeAndCodeAndDate(category: String, code: String, dateString: String): Code?
    @Query("update  Code set pickup = '1' ,  pickuptime = CURRENT_TIMESTAMP  where id=:id")
@@ -85,10 +92,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')
@@ -96,7 +101,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) 
@@ -165,7 +170,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
@@ -201,9 +206,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
@@ -222,7 +227,7 @@
        SELECT 
            strftime('%m', month_start) as date,
            COUNT(code.id) as count,
            month_start as weekStart
            strftime('%Y-%m-%d', 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
@@ -243,7 +248,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
@@ -256,9 +261,26 @@
    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'))
""")
    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>
}