链街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.

150 lines
5.7 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
  1. <?php
  2. namespace App\Admin\Controllers\v3;
  3. use App\Admin\Actions\Grid\v3\DataReportOption;
  4. use App\Admin\Actions\Tools\OrderDeliveryExport;
  5. use App\Admin\Common\Auth;
  6. use App\Admin\Renderable\OrderDeliveryById;
  7. use App\Admin\Repositories\v3\OrderDeliveryReport;
  8. use Dcat\Admin\Grid;
  9. use Dcat\Admin\Controllers\AdminController;
  10. use Dcat\Admin\Grid\Filter;
  11. use Illuminate\Http\Request;
  12. use Maatwebsite\Excel\Facades\Excel;
  13. use App\Models\v3\Market as MarketModel;
  14. use App\Models\ImsCjdcUser as UserModel;
  15. class OrderDeliveryReportController extends AdminController
  16. {
  17. /**
  18. * 订单的配送统计
  19. */
  20. protected $GoodsActivityReport = null;
  21. protected $marketId = 0;
  22. protected $newParams = [];
  23. protected $marketList = [];
  24. protected $storeList = [];
  25. public function __construct()
  26. {
  27. $this->newParams['start_time'] = date('Y-m-d',time());
  28. $this->newParams['end_time'] = date('Y-m-d',time());
  29. }
  30. /**
  31. * Make a grid builder.
  32. *
  33. * @return Grid
  34. */
  35. protected function grid()
  36. {
  37. $this->marketId = Auth::getMarket();
  38. if($this->marketId){
  39. $this->newParams = ['market_id'=>$this->marketId];
  40. $builder = new OrderDeliveryReport($this->newParams);
  41. $this->marketList = MarketModel::getMarketArray([['id','=',$this->marketId]]);
  42. }else{
  43. $builder = new OrderDeliveryReport($this->newParams);
  44. $this->marketList = MarketModel::getMarketArray();
  45. }
  46. return Grid::make($builder, function (Grid $grid) {
  47. $marketList = $this->marketList;
  48. $grid->column('horseman_id','配送员ID');
  49. $grid->column('user_id','懒ID');
  50. $grid->column('avatar','微信头像')->display(function(){
  51. $userId = $this->user_id ?? 0;
  52. $item = UserModel::select('avatar')->find($userId);
  53. return $item['avatar'] ?? '';
  54. })->image('',50);
  55. $grid->column('name','姓名');
  56. $grid->column('market_id','市场')->display(function($marketId) use($marketList){
  57. return $marketList[$marketId] ?? '';
  58. });
  59. $grid->column('total_number','配送单数')
  60. ->modal(function($modal) {
  61. $name = $this->name;
  62. $modal->title($name.'的配送明细');
  63. $params = [
  64. 'horseman_id' => $this->horseman_id,
  65. 'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0),
  66. 'user_id' => request()->input('user_id',0),
  67. 'start_time' => request()->input('start_time', ''),
  68. 'end_time' => request()->input('end_time', ''),
  69. ];
  70. $table = OrderDeliveryById::make($params);
  71. return $table;
  72. })->help('只统计2020年10月01日之后(包括10月01日)的数据');
  73. $grid->column('total_delivery','总配送费');
  74. $grid->filter(function (Filter $filter) use($marketList) {
  75. // 更改为 panel 布局
  76. $filter->panel();
  77. $filter->equal('start_time','开始时间')->date()->width(2);
  78. $filter->equal('end_time','结束时间')->date()->width(2);
  79. $filter->equal('horseman_id','配送员ID')->width(2);
  80. $filter->equal('user_id','懒ID')->width(2);
  81. $filter->equal('name','姓名')->width(2);
  82. if(!$this->marketId){
  83. $filter->equal('market_id','市场')->select($marketList)->width(2);
  84. }
  85. });
  86. $grid->tools([
  87. new DataReportOption('today','delivery_report','今日'),
  88. new DataReportOption('yesterday','delivery_report','昨日'),
  89. new DataReportOption('this_week','delivery_report','本周'),
  90. new DataReportOption('last_week','delivery_report','上周'),
  91. new DataReportOption('this_month','delivery_report','本月'),
  92. new DataReportOption('last_month','delivery_report','上月'),
  93. new OrderDeliveryExport()
  94. ]);
  95. // 每页1条
  96. $grid->paginate(10);
  97. $grid->disableCreateButton();
  98. $grid->disableBatchActions();
  99. $grid->disableBatchDelete();
  100. $grid->toolsWithOutline();
  101. $grid->disableDeleteButton();
  102. $grid->disableEditButton();
  103. $grid->disableQuickEditButton();
  104. $grid->disableViewButton();
  105. $grid->disableActions();
  106. $grid->disableRowSelector();
  107. });
  108. }
  109. /**
  110. * 数据导出
  111. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  112. */
  113. public function export(Request $request)
  114. {
  115. $this->marketId = Auth::getMarket();
  116. $params = [
  117. 'horseman_id' => request()->input('horseman_id', 0),
  118. 'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0),
  119. 'user_id' => request()->input('user_id',0),
  120. 'start_time' => request()->input('start_time', ''),
  121. 'end_time' => request()->input('end_time', ''),
  122. ];
  123. if(empty($params['start_time']) && empty($params['end_time'])){
  124. $params['start_time'] = $this->newParams['start_time'];
  125. $params['end_time'] = $this->newParams['end_time'];
  126. }
  127. $name = date('Y-m-d-His',time());
  128. $data = new \App\Admin\Actions\Exporter\OrderDelivery($params);
  129. if(empty($data)){
  130. return $this->error('没有数据!');
  131. }
  132. return Excel::download($data, $name.'.xlsx');
  133. }
  134. }