cloudroam
2025-03-06 66c61a1451a177bbe465f763afdffa3bcfe2ce56
fix: 5
已修改5个文件
119 ■■■■ 文件已修改
app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_dashboard.xml 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>