From 66c61a1451a177bbe465f763afdffa3bcfe2ce56 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期四, 06 三月 2025 13:18:43 +0800
Subject: [PATCH] fix: 5

---
 app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt |    5 ++
 app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt     |   32 +++++++++++++++
 app/src/main/res/layout/fragment_dashboard.xml                               |   44 +++++++++++++++------
 app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt               |   32 ++++++++++++++++
 app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt    |    6 +++
 5 files changed, 105 insertions(+), 14 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 39d54e2..e7dc073 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
@@ -229,4 +229,36 @@
         ORDER BY months.month_start ASC
     """)
     fun getYearMonthlyStats(date: Long): Flow<List<DailyStat>>
+
+
+    // 新增当前周统计方法
+    @Query("""
+    WITH RECURSIVE days(date) AS (
+        SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0') as date
+        UNION ALL
+        SELECT date(date, '+1 day')
+        FROM days
+        WHERE date < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 6')
+    )
+    SELECT 
+        strftime('%Y-%m-%d', days.date) as date,
+        COUNT(code.id) as count,
+        days.date as weekStart
+    FROM days 
+    LEFT JOIN code ON date(code.createtime) = days.date
+    GROUP BY days.date
+    ORDER BY days.date ASC
+""")
+    fun getCurrentWeekStats(date: Long): Flow<List<DailyStat>>
+
+    // 新增当前年统计方法
+    @Query("""
+    SELECT 
+        strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) as date,
+        COUNT(id) as count,
+        datetime(:date/1000, 'unixepoch', 'localtime') as weekStart
+    FROM code 
+    WHERE strftime('%Y', createtime) = strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime'))
+""")
+    fun getCurrentYearStats(date: Long): Flow<List<DailyStat>>
 }
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 915c13d..a9352e2 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
@@ -70,4 +70,9 @@
 
     fun getYearMonthlyStats(date: Long) = codeDao.getYearMonthlyStats(date)
 
+
+    fun getCurrentWeekStats(date: Long) = codeDao.getCurrentWeekStats(date)
+
+    fun getCurrentYearStats(date: Long) = codeDao.getCurrentYearStats(date)
+
 }
\ 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 6b36837..794ece9 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
@@ -367,8 +367,38 @@
             currentDate.timeInMillis,
             currentDateType.name
         ).observe(viewLifecycleOwner) { packages ->
+            when (currentDateType) {
+                DateType.DAY -> {
+                    binding.textPackageCount.text = "${packages.size}个"
+                }
+                DateType.WEEK -> {
+                    // 获取本周统计
+                    viewModel.getCurrentWeekStats(currentDate.timeInMillis)
+                        .observe(viewLifecycleOwner) { stats ->
+                            val weekTotal = stats.sumOf { it.count }
+                            binding.textPackageCount.text = "${weekTotal}个"
+                        }
+                }
+                DateType.MONTH -> {
+                    // 获取本月统计
+                    viewModel.getMonthlyStats(currentDate.timeInMillis)
+                        .observe(viewLifecycleOwner) { stats ->
+                            val monthTotal = stats.sumOf { it.count }
+                            binding.textPackageCount.text = "${monthTotal}个"
+                        }
+                }
+                DateType.YEAR -> {
+                    // 获取本年统计
+                    viewModel.getCurrentYearStats(currentDate.timeInMillis)
+                        .observe(viewLifecycleOwner) { stats ->
+                            val yearTotal = stats.sumOf { it.count }
+                            binding.textPackageCount.text = "${yearTotal}个"
+                        }
+                }
+            }
             packageAdapter.updatePackages(packages)
-            binding.textPackageCount.text = "${packages.size}个"
+            packageAdapter.updatePackages(packages)
+//            binding.textPackageCount.text = "${packages.size}个"
         }
     }
     private fun setupHeatmap() {
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 6d8b8fe..eee2467 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
@@ -39,4 +39,10 @@
     fun insert(code: Code) = viewModelScope.launch {
         repository.insert(code)
     }
+
+    fun getCurrentWeekStats(date: Long) =
+        repository.getCurrentWeekStats(date).asLiveData()
+
+    fun getCurrentYearStats(date: Long) =
+        repository.getCurrentYearStats(date).asLiveData()
 }
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml
index 5b9b473..ad51843 100644
--- a/app/src/main/res/layout/fragment_dashboard.xml
+++ b/app/src/main/res/layout/fragment_dashboard.xml
@@ -82,21 +82,39 @@
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:padding="16dp"
-            android:gravity="center_vertical">
+            android:weightSum="3">
 
-            <ImageView
-                android:layout_width="48dp"
-                android:layout_height="48dp"
-                android:src="@drawable/resource_package" />
-
-            <TextView
-                android:id="@+id/text_package_count"
-                android:layout_width="wrap_content"
+            <LinearLayout
+                android:layout_width="0dp"
                 android:layout_height="wrap_content"
-                android:layout_marginStart="16dp"
-                android:textSize="24sp"
-                android:textStyle="bold"
-                tools:text="4个" />
+                android:layout_weight="1"
+                android:gravity="center">
+
+                <ImageView
+                    android:layout_width="48dp"
+                    android:layout_height="48dp"
+                    android:src="@drawable/resource_package" />
+            </LinearLayout>
+
+            <Space
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1" />
+
+            <LinearLayout
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:gravity="center">
+
+                <TextView
+                    android:id="@+id/text_package_count"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textSize="24sp"
+                    android:textStyle="bold"
+                    tools:text="4个" />
+            </LinearLayout>
 
         </LinearLayout>
     </androidx.cardview.widget.CardView>

--
Gitblit v1.9.3