| | |
| | | @Query("SELECT * FROM code WHERE date(createtime) = date(:date/1000, 'unixepoch', 'localtime') ORDER BY createtime DESC") |
| | | fun getNewPackagesByDay(date: Long): List<Code> |
| | | |
| | | @Query("SELECT * FROM code WHERE date(createtime/1000, 'unixepoch', 'localtime') = date(:date/1000, 'unixepoch', 'localtime') ORDER BY createtime DESC") |
| | | @Query(""" |
| | | SELECT * FROM code |
| | | WHERE substr(createtime, 1, 10) = |
| | | date(:date/1000, 'unixepoch', 'localtime') |
| | | ORDER BY createtime DESC |
| | | """) |
| | | fun getPackagesByDay(date: Long): Flow<List<Code>> |
| | | |
| | | @Query(""" |
| | | SELECT * FROM code |
| | | WHERE strftime('%Y-%W', createtime/1000, 'unixepoch', 'localtime') = |
| | | strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime') |
| | | WHERE strftime('%Y-%W', substr(createtime, 1, 10)) = |
| | | strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime')) |
| | | ORDER BY createtime DESC |
| | | """) |
| | | fun getPackagesByWeek(date: Long): Flow<List<Code>> |
| | | |
| | | @Query(""" |
| | | SELECT * FROM CourierStat |
| | | WHERE EXISTS ( |
| | | SELECT 1 FROM code p |
| | | WHERE p.category = CourierStat.category |
| | | AND strftime('%Y-%W', p.createtime/1000, 'unixepoch', 'localtime') = |
| | | strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime') |
| | | ) |
| | | SELECT category as courierName, COUNT(*) as count |
| | | FROM code |
| | | WHERE strftime('%Y-%W', substr(createtime, 1, 10)) = |
| | | strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime')) |
| | | GROUP BY category |
| | | """) |
| | | fun getCourierStatsByWeek(date: Long): Flow<List<CourierStat>> |
| | | |
| | | @Query(""" |
| | | SELECT * FROM DailyStat |
| | | WHERE EXISTS ( |
| | | SELECT 1 FROM code p |
| | | WHERE date(p.createtime/1000, 'unixepoch', 'localtime') = DailyStat.date |
| | | AND strftime('%Y-%W', p.createtime/1000, 'unixepoch', 'localtime') = |
| | | strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime') |
| | | ) |
| | | SELECT substr(createtime, 1, 10) as date, |
| | | COUNT(*) as count |
| | | FROM code |
| | | WHERE strftime('%Y-%W', substr(createtime, 1, 10)) = |
| | | strftime('%Y-%W', datetime(:date/1000, 'unixepoch', 'localtime')) |
| | | GROUP BY substr(createtime, 1, 10) |
| | | """) |
| | | fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>> |
| | | } |
| | |
| | | |
| | | @DatabaseView( |
| | | """ |
| | | SELECT category, COUNT(*) as count |
| | | SELECT category as courierName, COUNT(*) as count |
| | | FROM Code |
| | | WHERE substr(createtime, 1, 10) = date('now') |
| | | GROUP BY category |
| | | """ |
| | | ) |
| | | data class CourierStat( |
| | | val category: String, |
| | | val courierName: String, |
| | | val count: Int |
| | | ) |
| | | ) |
| | |
| | | |
| | | @DatabaseView( |
| | | """ |
| | | SELECT date(createtime/1000, 'unixepoch', 'localtime') as date, |
| | | SELECT substr(createtime, 1, 10) as date, |
| | | COUNT(*) as count |
| | | FROM code |
| | | GROUP BY date(createtime/1000, 'unixepoch', 'localtime') |
| | | WHERE substr(createtime, 1, 10) = date('now') |
| | | GROUP BY substr(createtime, 1, 10) |
| | | """ |
| | | ) |
| | | data class DailyStat( |
| | | val date: String, |
| | | val count: Int |
| | | ) |
| | | ) |
| | |
| | | else -> 0 |
| | | } |
| | | updateDateDisplay() |
| | | // loadPackages() |
| | | //加载按天统计包裹数量和列表 |
| | | loadPackages() |
| | | observePackages() |
| | | } |
| | | override fun onTabUnselected(tab: TabLayout.Tab?) {} |
| | |
| | | private fun updatePieChartData() { |
| | | viewModel.getCourierStats(currentDate.timeInMillis).observe(viewLifecycleOwner) { stats -> |
| | | val entries = stats.map { stat -> |
| | | PieEntry(stat.count.toFloat(), stat.category) |
| | | PieEntry(stat.count.toFloat(), stat.courierName) |
| | | } |
| | | |
| | | val dataSet = PieDataSet(entries, "快递公司分布") |
| | |
| | | private fun loadPackages() { |
| | | // 这里应该从数据库或网络加载数据 |
| | | // 根据当前选择的日期类型传入对应参数 |
| | | val packages = when (currentDateType) { |
| | | DateType.DAY -> Core.code.getPackagesByDay(currentDate.timeInMillis) |
| | | // val packages = when (currentDateType) { |
| | | // DateType.DAY -> Core.code.getPackagesByDay(currentDate.timeInMillis) |
| | | // DateType.WEEK -> Core.code.getPackagesByWeek(currentDate.timeInMillis) |
| | | // DateType.MONTH -> Core.code.getPackagesByMonth(currentDate.timeInMillis) |
| | | // DateType.YEAR -> Core.code.getPackagesByYear(currentDate.timeInMillis) |
| | | DateType.WEEK -> TODO() |
| | | DateType.MONTH -> TODO() |
| | | DateType.YEAR -> TODO() |
| | | } |
| | | // } |
| | | val packages =Core.code.getPackagesByDay(currentDate.timeInMillis) |
| | | packageAdapter.updatePackages(packages) |
| | | binding.textPackageCount.text = "${packageAdapter.itemCount}个" |
| | | } |