海南旅游SAAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
2.9 KiB

4 years ago
4 years ago
4 years ago
  1. <?php
  2. namespace App\Admin\Metrics\Examples;
  3. use App\Common\OrderStatus;
  4. use App\Models\Agent;
  5. use App\Models\Order;
  6. use App\Models\Supplier;
  7. use App\Models\User;
  8. use Dcat\Admin\Admin;
  9. use Dcat\Admin\Widgets\ApexCharts\Chart;
  10. use Dcat\Admin\Widgets\Metrics\Bar;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Arr;
  13. use Illuminate\Support\Facades\DB;
  14. class SupplierStatistics extends Chart
  15. {
  16. public function __construct()
  17. {
  18. parent::__construct();
  19. $this->setUpOptions();
  20. }
  21. /**
  22. * 初始化图表配置
  23. */
  24. protected function setUpOptions()
  25. {
  26. $this->options([
  27. 'chart' => [
  28. //'width' => '180%',
  29. 'type' => 'bar',
  30. 'events' => [
  31. ],
  32. 'toolbar' => ['show' => false],
  33. ],
  34. 'plotOptions' => [
  35. 'bar' => [
  36. //'columnWidth' => '45%',
  37. 'distributed' => true,
  38. ]
  39. ],
  40. 'dataLabels' => [
  41. 'enabled' => false
  42. ],
  43. 'legend' => [
  44. 'show' => false
  45. ],
  46. 'xaxis' => [
  47. //'categories' =>
  48. // [75, 125, 225, 175, 125, 75, 25]
  49. //,
  50. 'labels' => [
  51. 'show' => true,
  52. 'style' => [
  53. 'fontSize' => '12px'
  54. ]
  55. ],
  56. ],
  57. 'yaxis' => [
  58. 'show' => true
  59. ],
  60. 'tooltip' => [
  61. 'x' => ['show' => true],
  62. ],
  63. ]);
  64. }
  65. /**
  66. * 处理图表数据
  67. */
  68. protected function buildData()
  69. {
  70. $query = Supplier::query()
  71. ->select('*');
  72. $dateTime = request('created_at', 0);
  73. if ($dateTime) {
  74. $query->whereBetween('created_at',[$dateTime['start'] . ' 00:00:00',$dateTime['end'].' 23:59:59']);
  75. }
  76. switch (request('time_key', 0)) {
  77. case '1':
  78. $query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"));
  79. break;
  80. case '30':
  81. $query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at)) AS statistics_time"));
  82. break;
  83. case '365':
  84. $query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at)) AS statistics_time"));
  85. break;
  86. default:
  87. $query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"));
  88. }
  89. $users = $query->groupBy('statistics_time')
  90. ->orderBy('statistics_time')
  91. ->get();
  92. $userNum = 0;
  93. $userArr = [];
  94. foreach ($users as $user) {
  95. $userNum += $user->sum_price;
  96. array_push($userArr,$userNum);
  97. }
  98. $this->withData([
  99. [
  100. 'name' => '代理商数量',
  101. 'data' => $userArr
  102. ],
  103. ]
  104. );
  105. $this->withCategories(
  106. Arr::pluck($users,'statistics_time')
  107. );
  108. }
  109. public function withData(array $data)
  110. {
  111. return $this->option('series', $data);
  112. }
  113. /**
  114. * 设置图表类别.
  115. *
  116. * @param array $data
  117. *
  118. * @return $this
  119. */
  120. public function withCategories(array $data)
  121. {
  122. return $this->option('xaxis.categories', $data);
  123. }
  124. /**
  125. * 渲染图表
  126. *
  127. * @return string
  128. */
  129. public function render()
  130. {
  131. $this->buildData();
  132. return parent::render();
  133. }
  134. }