FinancialOrderChart.php 6.0 KB

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