package com.example.firstapp.database.dao
|
|
import androidx.room.Dao
|
import androidx.room.Delete
|
import androidx.room.Insert
|
import androidx.room.Query
|
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 {
|
|
@Insert
|
fun insert(code: Code): Long
|
|
@Update
|
fun update(code: Code)
|
|
@Delete
|
fun delete(msg: Msg): Completable
|
|
@Query("DELETE FROM Code where id=:id")
|
fun delete(id: Long)
|
|
|
@Query("SELECT * FROM Code WHERE id = :id LIMIT 1")
|
fun getCodeById(id: Long): Code?
|
|
@Query("SELECT * FROM Code")
|
fun getAllCodes(): List<Code>
|
|
@Query("SELECT * FROM Code WHERE type = :type")
|
fun getCodesByType(type: String): List<Code>
|
|
|
|
@Query("DELETE FROM Code WHERE id = :id")
|
fun deleteCodeById(id: Long)
|
|
@Query("SELECT * FROM Code order by time desc")
|
abstract fun getAllCodesDesc(): List<Code>
|
|
@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 date(createtime/1000, 'unixepoch', 'localtime') = 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')
|
)
|
""")
|
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')
|
)
|
""")
|
fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>>
|
}
|