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

172 lines
6.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
  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. use Dcat\Admin\Layout\Content;
  16. use Dcat\Admin\Layout\Row;
  17. use Dcat\Admin\Widgets\Alert;
  18. class OrderDeliveryReportController extends AdminController
  19. {
  20. /**
  21. * 订单的配送统计
  22. */
  23. protected $GoodsActivityReport = null;
  24. protected $marketId = 0;
  25. protected $newParams = [];
  26. protected $marketList = [];
  27. protected $tools = [];
  28. /**
  29. * Make a grid builder.
  30. *
  31. * @return Grid
  32. */
  33. protected function grid()
  34. {
  35. $marketId = $this->marketId;
  36. if($marketId){
  37. $this->newParams = ['market_id'=>$marketId];
  38. $builder = new OrderDeliveryReport($this->newParams);
  39. $this->marketList = MarketModel::getMarketArray([['id','=',$marketId]]);
  40. }else{
  41. $builder = new OrderDeliveryReport($this->newParams);
  42. $this->marketList = MarketModel::getMarketArray();
  43. }
  44. return Grid::make($builder, function (Grid $grid) use($marketId){
  45. $marketList = $this->marketList;
  46. $grid->column('horseman_id','配送员ID');
  47. $grid->column('user_id','懒ID');
  48. $grid->column('avatar','微信头像')->display(function(){
  49. $userId = $this->user_id ?? 0;
  50. $item = UserModel::select('avatar')->find($userId);
  51. return $item['avatar'] ?? '';
  52. })->image('',50);
  53. $grid->column('name','姓名');
  54. $grid->column('market_id','市场')->display(function($market_id) use($marketList){
  55. return $marketList[$market_id] ?? '';
  56. });
  57. $grid->column('total_number','配送单数')
  58. ->modal(function($modal) use($marketId){
  59. $modal->title($this->name.'的配送明细');
  60. $params = [
  61. 'horseman_id' => $this->horseman_id,
  62. 'market_id' => $marketId,
  63. 'user_id' => request()->input('user_id',0),
  64. 'start_time' => request()->input('start_time', ''),
  65. 'end_time' => request()->input('end_time', ''),
  66. ];
  67. $table = OrderDeliveryById::make($params);
  68. return $table;
  69. })->help('只统计2020年10月01日之后(包括10月01日)的数据');
  70. $grid->column('total_delivery','总配送费');
  71. $grid->filter(function (Filter $filter) use($marketList,$marketId){
  72. // 更改为 panel 布局
  73. $filter->panel();
  74. $filter->equal('start_time','开始时间')->date()->width(2);
  75. $filter->equal('end_time','结束时间')->date()->width(2);
  76. // $filter->equal('horseman_id','配送员ID')->width(2);
  77. $filter->equal('user_id','懒ID')->placeholder('多个懒ID使用英文逗号隔开')->width(2);
  78. $filter->equal('name','姓名')->width(2);
  79. if(!$marketId){
  80. $filter->equal('market_id','市场')->select($marketList)->width(2);
  81. }
  82. });
  83. $grid->tools($this->tools);
  84. // 每页1条
  85. $grid->paginate(10);
  86. $grid->disableCreateButton();
  87. $grid->disableBatchActions();
  88. $grid->disableBatchDelete();
  89. $grid->toolsWithOutline();
  90. $grid->disableDeleteButton();
  91. $grid->disableEditButton();
  92. $grid->disableQuickEditButton();
  93. $grid->disableViewButton();
  94. $grid->disableActions();
  95. $grid->disableRowSelector();
  96. });
  97. }
  98. /**
  99. * 统计列表
  100. */
  101. /**
  102. * 页面
  103. */
  104. public function index(Content $content)
  105. {
  106. $this->marketId = Auth::getMarket();
  107. $this->tools = [
  108. new DataReportOption('today','delivery_report','今日'),
  109. new DataReportOption('yesterday','delivery_report','昨日'),
  110. new DataReportOption('this_week','delivery_report','本周'),
  111. new DataReportOption('last_week','delivery_report','上周'),
  112. new DataReportOption('this_month','delivery_report','本月'),
  113. new DataReportOption('last_month','delivery_report','上月')
  114. ];
  115. $startTime = request()->get('start_time');
  116. $endTime = request()->get('end_time');
  117. $user_id = request()->get('user_id');
  118. $name = request()->get('name');
  119. $marketId = request()->get('market_id');
  120. if(
  121. ($this->marketId && (empty($startTime) && empty($endTime) && empty($user_id) && empty($name))
  122. ||
  123. (empty($startTime) && empty($endTime) && empty($user_id) && empty($name) && empty($marketId))
  124. )){
  125. $content->row(Alert::make('请选择筛选条件查询!','')->removable());
  126. }else{
  127. $this->tools[] = new OrderDeliveryExport();
  128. }
  129. return $content->title('订单配送统计报表')
  130. ->body(function(Row $row){
  131. $row->column(12,$this->grid());
  132. });
  133. }
  134. /**
  135. * 数据导出
  136. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  137. */
  138. public function export(Request $request)
  139. {
  140. $this->marketId = Auth::getMarket();
  141. $params = [
  142. 'horseman_id' => request()->input('horseman_id', 0),
  143. 'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0),
  144. 'user_id' => request()->input('user_id',0),
  145. 'start_time' => request()->input('start_time', ''),
  146. 'end_time' => request()->input('end_time', ''),
  147. ];
  148. $name = date('Y-m-d-His',time());
  149. $data = new \App\Admin\Actions\Exporter\OrderDelivery($params);
  150. return Excel::download($data, $name.'.xlsx');
  151. }
  152. }