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>> } 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) } 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() { 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() } 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>