From 2933603ee0940395a80a91bb23e50cbe8ba9baa5 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期三, 05 三月 2025 10:03:16 +0800
Subject: [PATCH] fix: 2

---
 app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt |    2 
 app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt     |   45 ++++++++++++----------
 app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt               |   31 +++++++++++----
 app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt    |    2 
 4 files changed, 49 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 00e535f..3f5d7ae 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
@@ -83,15 +83,30 @@
     fun getCourierStatsByWeek(date: Long): Flow<List<CourierStat>>
 
     @Query("""
-        SELECT strftime('%W', createtime) as date,
-               COUNT(*) as count,
-               MIN(createtime) as week_start
-        FROM code 
-        WHERE strftime('%Y', createtime) = strftime('%Y', 'now')
-        GROUP BY strftime('%W', createtime)
-        ORDER BY week_start ASC
+        WITH RECURSIVE weeks(week_start, week_end) AS (
+            -- 从选定的日期开始计算周
+            SELECT 
+                date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 1', '-28 days') as week_start,
+                date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '-28 days') as week_end
+            UNION ALL
+            SELECT 
+                date(week_start, '+7 days'),
+                date(week_end, '+7 days')
+            FROM weeks
+            WHERE date(week_start) <= date(datetime(:date/1000, 'unixepoch', 'localtime'))
+            LIMIT 5
+        )
+        SELECT 
+            CAST(strftime('%W', week_start) AS INTEGER) as date,
+            COUNT(code.id) as count,
+            week_start as week_start
+        FROM weeks 
+        LEFT JOIN code ON datetime(code.createtime) BETWEEN datetime(weeks.week_start) 
+            AND datetime(weeks.week_end, '+23 hours', '+59 minutes', '+59 seconds')
+        GROUP BY weeks.week_start
+        ORDER BY weeks.week_start ASC
     """)
-    fun getDailyStatsByWeek(): Flow<List<DailyStat>>
+    fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>>
 
     @Query("""
         SELECT * FROM code 
diff --git a/app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt b/app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt
index 7c14c1e..f187d22 100644
--- a/app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt
+++ b/app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt
@@ -43,7 +43,7 @@
 
     fun getCourierStats(date: Long) = codeDao.getCourierStatsByWeek(date)
 
-    fun getDailyStats() = codeDao.getDailyStatsByWeek()
+    fun getDailyStats(date: Long) = codeDao.getDailyStatsByWeek(date)
 
 
     @WorkerThread
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 f32868e..bfd5bb8 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
@@ -173,17 +173,8 @@
         updateBarChartData()
     }
     private fun updateBarChartData() {
-        viewModel.getDailyStats().observe(viewLifecycleOwner) { stats ->
-            // 添加调试日志
-            Log.d("DashboardFragment", "Stats size: ${stats.size}")
-            stats.forEach { stat ->
-                Log.d("DashboardFragment", "Week: ${stat.date}, Count: ${stat.count}, Start: ${stat.week_start}")
-            }
-            
-            if (stats.isEmpty()) {
-                Log.d("DashboardFragment", "No data found")
-                return@observe
-            }
+        viewModel.getDailyStats(currentDate.timeInMillis).observe(viewLifecycleOwner) { stats ->
+            if (stats.isEmpty()) return@observe
             
             val entries = stats.mapIndexed { index, stat ->
                 BarEntry(index.toFloat(), stat.count.toFloat())
@@ -202,23 +193,35 @@
                     override fun getFormattedValue(value: Float): String {
                         val position = value.toInt()
                         if (position >= 0 && position < stats.size) {
-                            val weekNum = stats[position].date.toIntOrNull() ?: 0
-                            // 获取月份信息
-                            val monthDay = stats[position].week_start?.let {
-                                SimpleDateFormat("MM-dd", Locale.getDefault()).format(
-                                    SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).parse(it)
-                                )
-                            } ?: ""
-                            return "${monthDay}\n第${weekNum}周"
+                            return "第${stats[position].date}周"
                         }
                         return ""
                     }
                 }
                 labelCount = stats.size
+                granularity = 1f
+                labelRotationAngle = -45f
+                textSize = 10f
+                setDrawGridLines(false)
             }
             
-            barChart.notifyDataSetChanged()
-            barChart.invalidate()
+            // 调整图表显示
+            barChart.apply {
+                setVisibleXRangeMaximum(5f)
+                moveViewToX(0f)
+                
+                axisLeft.apply {
+                    axisMinimum = 0f
+                    granularity = 1f
+                    setDrawGridLines(true)
+                }
+                
+                barData.barWidth = 0.6f
+                description.isEnabled = false
+                legend.isEnabled = false
+                
+                invalidate()
+            }
         }
     }
     private fun setupPieChart() {
diff --git a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt
index 4c3032e..c2c0fc9 100644
--- a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt
+++ b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt
@@ -23,7 +23,7 @@
 
     fun getCourierStats(date: Long) = repository.getCourierStats(date).asLiveData()
 
-    fun getDailyStats() = repository.getDailyStats().asLiveData()
+    fun getDailyStats(date: Long) = repository.getDailyStats(date).asLiveData()
 
     fun insert(code: Code) = viewModelScope.launch {
         repository.insert(code)

--
Gitblit v1.9.3