cloudroam
2025-03-04 e3783b167f132005c7afcc4c10f9ab167806331d
fix: 按天统计相关逻辑
已修改4个文件
65 ■■■■ 文件已修改
app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/model/CourierStat.kt 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/model/DailyStat.kt 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt
@@ -64,36 +64,38 @@
    @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")
    @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', createtime/1000, 'unixepoch', 'localtime') =
              strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime')
        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 * 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')
        )
        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 * 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')
        )
        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>>
}
app/src/main/java/com/example/firstapp/model/CourierStat.kt
@@ -4,12 +4,13 @@
@DatabaseView(
    """
    SELECT category, COUNT(*) as count
    SELECT category as courierName, COUNT(*) as count
    FROM Code 
    WHERE substr(createtime, 1, 10) = date('now')
    GROUP BY category
    """
)
data class CourierStat(
    val category: String,
    val courierName: String,
    val count: Int
)
)
app/src/main/java/com/example/firstapp/model/DailyStat.kt
@@ -4,13 +4,14 @@
@DatabaseView(
    """
    SELECT date(createtime/1000, 'unixepoch', 'localtime') as date,
    SELECT substr(createtime, 1, 10) as date,
           COUNT(*) as count 
    FROM code 
    GROUP BY date(createtime/1000, 'unixepoch', 'localtime')
    WHERE substr(createtime, 1, 10) = date('now')
    GROUP BY substr(createtime, 1, 10)
    """
)
data class DailyStat(
    val date: String,
    val count: Int
)
)
app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt
@@ -85,7 +85,8 @@
                    else -> 0
                }
                updateDateDisplay()
//                loadPackages()
                //加载按天统计包裹数量和列表
                loadPackages()
                observePackages()
            }
            override fun onTabUnselected(tab: TabLayout.Tab?) {}
@@ -185,7 +186,7 @@
    private fun updatePieChartData() {
        viewModel.getCourierStats(currentDate.timeInMillis).observe(viewLifecycleOwner) { stats ->
            val entries = stats.map { stat ->
                PieEntry(stat.count.toFloat(), stat.category)
                PieEntry(stat.count.toFloat(), stat.courierName)
            }
            val dataSet = PieDataSet(entries, "快递公司分布")
@@ -205,15 +206,13 @@
    private fun loadPackages() {
        // 这里应该从数据库或网络加载数据
        // 根据当前选择的日期类型传入对应参数
        val packages = when (currentDateType) {
            DateType.DAY -> Core.code.getPackagesByDay(currentDate.timeInMillis)
//        val packages = when (currentDateType) {
//            DateType.DAY -> Core.code.getPackagesByDay(currentDate.timeInMillis)
//            DateType.WEEK -> Core.code.getPackagesByWeek(currentDate.timeInMillis)
//            DateType.MONTH -> Core.code.getPackagesByMonth(currentDate.timeInMillis)
//            DateType.YEAR -> Core.code.getPackagesByYear(currentDate.timeInMillis)
            DateType.WEEK -> TODO()
            DateType.MONTH -> TODO()
            DateType.YEAR -> TODO()
        }
//        }
        val packages =Core.code.getPackagesByDay(currentDate.timeInMillis)
        packageAdapter.updatePackages(packages)
        binding.textPackageCount.text = "${packageAdapter.itemCount}个"
    }