cloudroam
2025-03-04 e3783b167f132005c7afcc4c10f9ab167806331d
app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt
@@ -7,7 +7,10 @@
import androidx.room.Update
import com.example.firstapp.database.entity.Code
import com.example.firstapp.database.entity.Msg
import com.example.firstapp.model.CourierStat
import com.example.firstapp.model.DailyStat
import io.reactivex.Completable
import kotlinx.coroutines.flow.Flow
@Dao
interface CodeDao {
@@ -45,7 +48,54 @@
    @Query("""
        SELECT * FROM Code 
        WHERE type LIKE '%' || :keyword || '%' 
        AND pickup = '0'
        ORDER BY time DESC
    """)
    fun getByKeyword(keyword: String): List<Code>
    @Query("SELECT * FROM Code WHERE type = :content and code= :code and createtime = :dateString LIMIT 1")
    fun queryByTypeAndCodeAndDate(content: String, code: String, dateString: String): Code
    @Query("update  Code set pickup = '1' ,  pickuptime = CURRENT_TIMESTAMP  where id=:id")
    fun pickup(id: Long)
    //查询当天包裹信息
    @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 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', 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
        FROM code
        WHERE strftime('%Y-%W', substr(createtime, 1, 10)) =
              strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime'))
        GROUP BY category
    """)
    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)
    """)
    fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>>
}