| | |
| | | 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>> |
| | | } |
| | |
| | | |
| | | fun getYearMonthlyStats(date: Long) = codeDao.getYearMonthlyStats(date) |
| | | |
| | | |
| | | fun getCurrentWeekStats(date: Long) = codeDao.getCurrentWeekStats(date) |
| | | |
| | | fun getCurrentYearStats(date: Long) = codeDao.getCurrentYearStats(date) |
| | | |
| | | } |
| | |
| | | currentDate.timeInMillis, |
| | | currentDateType.name |
| | | ).observe(viewLifecycleOwner) { packages -> |
| | | packageAdapter.updatePackages(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) |
| | | packageAdapter.updatePackages(packages) |
| | | // binding.textPackageCount.text = "${packages.size}个" |
| | | } |
| | | } |
| | | private fun setupHeatmap() { |
| | | heatmapView.visibility = View.GONE |
| | |
| | | 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() |
| | | } |
| | |
| | | android:layout_height="wrap_content" |
| | | android:orientation="horizontal" |
| | | android:padding="16dp" |
| | | android:gravity="center_vertical"> |
| | | android:weightSum="3"> |
| | | |
| | | <LinearLayout |
| | | android:layout_width="0dp" |
| | | android:layout_height="wrap_content" |
| | | 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:layout_marginStart="16dp" |
| | | android:textSize="24sp" |
| | | android:textStyle="bold" |
| | | tools:text="4个" /> |
| | | </LinearLayout> |
| | | |
| | | </LinearLayout> |
| | | </androidx.cardview.widget.CardView> |