链街Dcat后台
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.

190 lines
7.3 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Admin\Controllers\v3;
  3. use App\Admin\Actions\Tools\DataReportDate;
  4. use App\Admin\Actions\Tools\DataReportOption;
  5. use App\Admin\Common\Order;
  6. use App\Admin\Extensions\Chart\Bar\OrderBar;
  7. use App\Models\ImsCjdcMarket;
  8. use App\Models\LanzuStore;
  9. use App\Models\v3\User;
  10. use Dcat\Admin\Form;
  11. use Dcat\Admin\Grid;
  12. use Dcat\Admin\Layout\Column;
  13. use Dcat\Admin\Layout\Content;
  14. use Dcat\Admin\Layout\Row;
  15. use Dcat\Admin\Widgets\Card;
  16. use http\Message\Body;
  17. use Illuminate\Support\Facades\DB;
  18. class DataReport
  19. {
  20. /**
  21. * 数据报表
  22. * @param Content $content
  23. * @return Content
  24. */
  25. protected $_amount;
  26. protected $_number;
  27. protected $_count_user;
  28. public function __construct()
  29. {
  30. $option = request()->get('option',1);
  31. $this->_amount = Order::getOrderData([
  32. 'user_type'=>'market_service',//谁取数据 user_type 用户类型
  33. 'data_type'=>'amount',//取什么数据 data_type 数据类型
  34. 'market_id'=>'',//取哪个市场数据
  35. 'condition'=>1,//取数据维度 condition
  36. 'user_ids'=>null
  37. ],$option);
  38. $this->_number = Order::getOrderData([
  39. 'user_type'=>'market_service',//谁取数据 user_type 用户类型
  40. 'data_type'=>'number',//取什么数据 data_type 数据类型
  41. 'market_id'=>'',//取哪个市场数据
  42. 'condition'=>1,//取数据维度 condition
  43. 'user_ids'=>null
  44. ],$option);
  45. $this->_count_user = Order::getOrderData([
  46. 'user_type'=>'market_service',//谁取数据 user_type 用户类型
  47. 'data_type'=>'count_user',//取什么数据 data_type 数据类型
  48. 'market_id'=>'',//取哪个市场数据
  49. 'condition'=>1,//取数据维度 condition
  50. 'user_ids'=>null
  51. ],$option);
  52. }
  53. public function index(Content $content)
  54. {
  55. return $content
  56. ->header('数据统计')
  57. ->body(function (Row $row){
  58. $row->column(4,function (Column $column){
  59. $column->row(new \App\Admin\Actions\Tools\DataReportTime('data_report'));
  60. });
  61. $row->column(2,function (Column $column){
  62. $markets = ImsCjdcMarket::getMarket();
  63. $data = [['value'=>0,'label'=>'全部市场']];
  64. foreach ($markets as $key=>$val){
  65. $item = [];
  66. $item['value'] = $key;
  67. $item['label'] = $val;
  68. $data[] = $item;
  69. }
  70. $column->row(new DataReportOption('data_report',$data));
  71. });
  72. $row->column(6,function (Column $column){
  73. $column->row(new DataReportDate('data_report'));
  74. });
  75. })->body('<hr />')
  76. ->body(function (Row $row){
  77. $row->column(2,function (Column $column){
  78. $title = "订单总额(元)";
  79. $value = $this->_amount;
  80. $card = Card::make("<span style='color: #ffffff'>{$title}</span>","<span style='color: #ffffff'>{$value}</span>");
  81. $card->style('background-color:#4e9876');
  82. $column->row($card);
  83. });
  84. $row->column(2,function (Column $column){
  85. $title = "订单数";
  86. $value = $this->_number;
  87. $card = Card::make("<span style='color: #ffffff'>{$title}</span>","<span style='color: #ffffff'>{$value}</span>");
  88. $card->style('background-color:#4e9876');
  89. $column->row($card);
  90. });
  91. $row->column(2,function (Column $column) {
  92. $title = "下单人数";
  93. $value =$this->_count_user;
  94. $card = Card::make("<span style='color: #ffffff'>{$title}</span>","<span style='color: #ffffff'>{$value}</span>");
  95. $card->style('background-color:#4e9876');
  96. $column->row($card);
  97. });
  98. $row->column(2,function (Column $column){
  99. $title = "人均单价(元)";
  100. if ($this->_amount){
  101. $value = sprintf("%.2f",$this->_amount/$this->_count_user);
  102. }else{
  103. $value=0;
  104. }
  105. $card = Card::make("<span style='color: #ffffff'>{$title}</span>","<span style='color: #ffffff'>{$value}</span>");
  106. $card->style('background-color:#4e9876');
  107. $column->row($card);
  108. });
  109. $row->column(2,function (Column $column){
  110. $title = "有效用户总数";
  111. $value = User::where('nick_name','!=','')->count();
  112. $card = Card::make("<span style='color: #ffffff'>{$title}</span>","<span style='color: #ffffff'>{$value}</span>");
  113. $card->style('background-color:#4e9876');
  114. $column->row($card);
  115. });
  116. $row->column(2,function (Column $column){
  117. $title = "佣金收入(元)";
  118. $value = 0;
  119. $card = Card::make("<span style='color: #ffffff'>{$title}</span>","<span style='color: #ffffff'>{$value}</span>");
  120. $card->style('background-color:#4e9876');
  121. $column->row($card);
  122. });
  123. })
  124. ->body(function (Row $row){
  125. $row->column(8,function (Column $column){
  126. $card = new Card();
  127. $card->title('订单图表');
  128. $card->tool(new \App\Admin\Actions\Tools\DataReportOrder('data_report'));
  129. $card->content(OrderBar::make($this->orderData(['type'=>1])));
  130. $column->row($card);
  131. });
  132. $row->column(4,function (Column $column){
  133. $card1 = Card::make('1111');
  134. $card1->style("height:162px");
  135. $column->row($card1);
  136. $card2 = Card::make('222');
  137. $card2->style("height:162px");
  138. $column->row($card2);
  139. $card3 = Card::make('222');
  140. $card3->style("height:162px");
  141. $column->row($card3);
  142. });
  143. });
  144. }
  145. /**
  146. * 订单数据
  147. * @param array $params
  148. * @return array[]|string[]
  149. */
  150. public function orderData($params=[])
  151. {
  152. $where['type'] = $params['type'];
  153. $data = DB::table('lanzu_order_main')
  154. ->select('money')
  155. ->selectRaw("FROM_UNIXTIME(created_at,'%Y-%m-%d') as add_time")
  156. ->where($where)
  157. ->get();
  158. $time = $num = $amount = [];
  159. if ($data){
  160. $data = $data->groupBy('add_time')->toArray();
  161. foreach ($data as $key=>$val){
  162. $time[] = $key;
  163. $num[] = intval(count($val));
  164. $amount[] = sprintf("%.2f",array_sum(array_column($val,'money')));
  165. }
  166. return ['time'=>$time,'num'=>$num,'amount'=>$amount];
  167. }
  168. return ['time'=>'','num'=>'','amount'=>''];
  169. }
  170. public function getOrderData()
  171. {
  172. }
  173. }