FarmLandLevelStatsCard.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace App\Module\Farm\AdminControllers\Metrics;
  3. use App\Module\Farm\Models\FarmDailyStats;
  4. use UCore\DcatAdmin\Metrics\Examples\NumberS;
  5. use Illuminate\Http\Request;
  6. /**
  7. * 农场土地等级数量统计卡片
  8. * 使用多行数字卡片显示各个土地类型的数量统计
  9. */
  10. class FarmLandLevelStatsCard extends NumberS
  11. {
  12. /**
  13. * 卡片标题
  14. */
  15. protected $title = '土地等级数量统计(昨天)';
  16. /**
  17. * 初始化卡片内容
  18. */
  19. protected function init()
  20. {
  21. parent::init();
  22. // 土地统计不需要时间范围选择,移除下拉选项
  23. $this->dropdown([]);
  24. }
  25. /**
  26. * 处理请求
  27. *
  28. * @param Request $request
  29. * @return mixed|void
  30. */
  31. public function handle(Request $request)
  32. {
  33. $stats = $this->getLandLevelStats();
  34. // 转换为NumberS需要的数据格式(键值对数组)
  35. $dataList = [];
  36. foreach ($stats as $stat) {
  37. $dataList[$stat['name']] = $stat['count'];
  38. }
  39. $this->withContent($dataList);
  40. }
  41. /**
  42. * 获取土地等级统计数据
  43. *
  44. * @return array
  45. */
  46. private function getLandLevelStats(): array
  47. {
  48. $latestStats = FarmDailyStats::orderBy('stats_date', 'desc')->first();
  49. if (!$latestStats) {
  50. return [];
  51. }
  52. $landTypeNames = [
  53. 1 => '普通土地',
  54. 2 => '红土地',
  55. 3 => '黑土地',
  56. 4 => '金色特殊土地',
  57. 5 => '蓝色特殊土地',
  58. 6 => '紫色特殊土地',
  59. ];
  60. $stats = [];
  61. $totalLands = 0;
  62. // 获取各个土地类型的数量
  63. for ($type = 1; $type <= 6; $type++) {
  64. $field = "land_type_{$type}";
  65. $count = $latestStats->$field ?? 0;
  66. $totalLands += $count;
  67. // 只显示有数量的土地类型
  68. if ($count > 0) {
  69. $stats[] = [
  70. 'name' => $landTypeNames[$type],
  71. 'count' => $count
  72. ];
  73. }
  74. }
  75. // 添加总计
  76. if ($totalLands > 0) {
  77. $stats[] = [
  78. 'name' => '总计',
  79. 'count' => $totalLands
  80. ];
  81. }
  82. return $stats;
  83. }
  84. }