cloudroam
2025-03-04 2a117297daf83b2e1a104603e9641226d5beeba3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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>>
}