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