OrderChart.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. namespace App\Admin\Controllers\Chart;
  3. use Encore\Admin\Widgets\Box;
  4. use Encore\Admin\Widgets\Echarts\Echarts;
  5. use Encore\Admin\Widgets\Form;
  6. use Encore\Admin\Layout\Row;
  7. use Encore\Admin\Layout\Column;
  8. use Encore\Admin\Widgets\Collapse;
  9. use App\Models\Order;
  10. class OrderChart
  11. {
  12. public function chart(Row $row)
  13. {
  14. $row->column(12,function (Column $column){
  15. $form = new Form();
  16. $form->disableReset();
  17. $form->disableSubmit();
  18. $ry = request('year');
  19. $rm = request('month');
  20. //是否是初始化
  21. $isb = request('b');
  22. $year = range(2000,2099);
  23. $month = range(1,12);
  24. $nowYear = date('Y');
  25. $nowMonth = date('m');
  26. //默认数据获取方式 1默认选择当前月份 2根据时间
  27. $type = 2;
  28. if(empty($ry) && empty($rm)){
  29. $type = 1;
  30. }
  31. //判断是否是初始化
  32. if(empty($isb)){
  33. $ry = $nowYear;
  34. $rm = $nowMonth;
  35. } else {
  36. $type = 2;
  37. }
  38. foreach ($year as $v){
  39. $realYear[$v]=$v;
  40. }
  41. foreach ($month as $v){
  42. $realMonth[$v]=$v;
  43. }
  44. $chartData =self::getData($ry,$rm,$type);
  45. $filter_content = new Row(function (Column $col)use ($form,$type,$realYear,$ry,$rm,$realMonth){
  46. $col->row(function (Row $row)use ($form,$type,$realYear,$ry,$rm,$realMonth){
  47. $form->method('get');
  48. $form->select('year','年份')->options($realYear)->default($ry);
  49. $form->select('month','月份')->options($realMonth)->default($rm);
  50. $form->hidden('b')->default(1);
  51. $form->html("<button type='submit' class='btn btn-success'>筛选</button><a style='margin-left: 20px;' href='/admin' class='btn btn-danger'>重置</a>");
  52. $form->action('/admin');
  53. $row->column(6,$form->render());
  54. });
  55. });
  56. $col = new Collapse();
  57. $col->add('日期筛选',$filter_content->render());
  58. $column->append($col->render());
  59. $column->row(function (Row $row)use ($chartData){
  60. $row->column(12,function (Column $column)use ($chartData){
  61. $echarts = (new Echarts('订单走势图', '','user_change'))
  62. ->setData($chartData['d'])
  63. ->bindLegend($chartData['h'])->setShowToolbox(true);
  64. return $column->append(new Box('',$echarts));
  65. });
  66. });
  67. });
  68. }
  69. public function getData($year,$month,$type)
  70. {
  71. //type 1默认选择当前月份 2根据时间+
  72. $month >10??$month = '0'.$month;
  73. if($type == 1){
  74. //查找天
  75. $data = Order::query()
  76. ->selectRaw('DATE_FORMAT(created_at,"%m-%d") as day')
  77. ->selectRaw('COUNT(*) as count')
  78. ->where('created_at', '>=', $year.'-'.$month)
  79. ->where('created_at', '<', $year.'-'.($month+1))
  80. ->groupBy('day')
  81. ->get()->toArray();
  82. $data = self::getFomateData($data,3);
  83. return $data;
  84. }
  85. if(empty($year) && empty($month)){
  86. //查找年
  87. $data = Order::query()
  88. ->selectRaw('DATE_FORMAT(created_at,"%Y") as day')
  89. ->selectRaw('COUNT(*) as count')
  90. ->where('created_at', '>', '2000-')
  91. ->where('created_at', '<', '2099-')
  92. ->groupBy('day')
  93. ->get()->toArray();
  94. $data = self::getFomateData($data,1);
  95. return $data;
  96. }
  97. if($year && $month){
  98. //查找天
  99. $data = Order::query()
  100. ->selectRaw('DATE_FORMAT(created_at,"%m-%d") as day')
  101. ->selectRaw('COUNT(*) as count')
  102. ->where('created_at', '>', $year.'-'.$month)
  103. ->where('created_at', '<', $year.'-'.($month+1))
  104. ->groupBy('day')
  105. ->get()->toArray();
  106. $data = self::getFomateData($data,3);
  107. return $data;
  108. }
  109. if($year){
  110. //查找月
  111. $data = Order::query()
  112. ->selectRaw('DATE_FORMAT(created_at,"%m") as day')
  113. ->selectRaw('COUNT(*) as count')
  114. ->where('created_at', '>=', $year.'-')
  115. ->where('created_at', '<', ($year+1).'-')
  116. ->groupBy('day')
  117. ->get()->toArray();
  118. $data = self::getFomateData($data,2);
  119. return $data;
  120. }
  121. return self::getFomateData([],3);
  122. }
  123. public static function getFomateData($data,$type)
  124. {
  125. $typeArr = [1=>'年',2=>'月',3=>'日'];
  126. $chartData['d'] = [];
  127. foreach ($data as $v){
  128. $chartData['d'][] = ['day'=>$v['day'].$typeArr[$type],'count'=>$v['count']];
  129. }
  130. $chartData['h'] = ['day'=>$typeArr[$type],'count'=>'订单数'];
  131. return $chartData;
  132. }
  133. }