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