From e3783b167f132005c7afcc4c10f9ab167806331d Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期二, 04 三月 2025 13:22:04 +0800 Subject: [PATCH] fix: 按天统计相关逻辑 --- app/src/main/java/com/example/firstapp/model/DailyStat.kt | 7 ++- app/src/main/java/com/example/firstapp/model/CourierStat.kt | 7 ++- app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt | 15 +++---- app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt | 36 +++++++++-------- 4 files changed, 34 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt b/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt index d86d5c1..343140a 100644 --- a/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt +++ b/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>> } diff --git a/app/src/main/java/com/example/firstapp/model/CourierStat.kt b/app/src/main/java/com/example/firstapp/model/CourierStat.kt index 8abab2c..fe385fe 100644 --- a/app/src/main/java/com/example/firstapp/model/CourierStat.kt +++ b/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 -) \ No newline at end of file +) diff --git a/app/src/main/java/com/example/firstapp/model/DailyStat.kt b/app/src/main/java/com/example/firstapp/model/DailyStat.kt index 5cd26c6..f916d6f 100644 --- a/app/src/main/java/com/example/firstapp/model/DailyStat.kt +++ b/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 -) \ No newline at end of file +) \ No newline at end of file diff --git a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt index 565676c..f0e308a 100644 --- a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt +++ b/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}个" } -- Gitblit v1.9.3