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

107 lines
3.9 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
  1. <?php
  2. namespace App\Admin\Repositories\v3;
  3. use App\Models\ImsCjdcOrderMain as Model;
  4. use Dcat\Admin\Grid\Model as GridModel;
  5. use Dcat\Admin\Repositories\EloquentRepository;
  6. use Illuminate\Support\Facades\DB;
  7. use App\Models\v3\LanzuEmployees as EmployeesModel;
  8. class OrderDeliveryReport extends EloquentRepository
  9. {
  10. public $params = [];
  11. /**
  12. * Model.
  13. *
  14. * @var string
  15. */
  16. protected $eloquentClass = Model::class;
  17. public function __construct($params = [])
  18. {
  19. $this->params = $params;
  20. }
  21. /**
  22. * 获取统计列表数据
  23. */
  24. public function get(GridModel $model)
  25. {
  26. // 获取当前页数
  27. $currentPage = $model->getCurrentPage();
  28. // 获取每页显示行数
  29. $perPage = $model->getPerPage();
  30. $where = [];
  31. if(!empty($this->params) && isset($this->params['market_id']) && !empty($this->params['market_id'])){
  32. $where['market_id'] = $this->params['market_id'];
  33. }
  34. if(
  35. empty($model->filter()->input('start_time'))
  36. &&
  37. empty($model->filter()->input('end_time'))
  38. &&
  39. empty($model->filter()->input('user_id'))
  40. &&
  41. empty($model->filter()->input('name'))
  42. &&
  43. empty($model->filter()->input('market_id'))
  44. ){
  45. return $model->makePaginator(
  46. 0,[]
  47. );
  48. }
  49. $baseFee = config('admin.delivery.base_fee',0);
  50. $selects = 'count('.Model::$tableName.'.id) AS total_number,horseman_id,'.EmployeesModel::TABLE_NAME.'.user_id,'.EmployeesModel::TABLE_NAME.'.name,'.EmployeesModel::TABLE_NAME.'.market_id,SUM( CASE WHEN delivery_money=0 THEN '.$baseFee.' when delivery_money>0 THEN delivery_money+'.$baseFee.' ELSE 0 END) as total_delivery';
  51. $delivery = $this->getDataModel($selects,$where);
  52. $list = $delivery->groupBy('horseman_id',EmployeesModel::TABLE_NAME.'.market_id',EmployeesModel::TABLE_NAME.'.name',EmployeesModel::TABLE_NAME.'.user_id')->paginate($perPage);
  53. // ->orderBy('total_number','desc')
  54. $list = $list->toArray();
  55. return $model->makePaginator(
  56. $list['total'] ?? 0,$list['data'] ?? []
  57. );
  58. }
  59. public function getDataModel($selects,$params = [])
  60. {
  61. // 获取筛选参数
  62. $userId = $params['user_id'] ?? request()->input('user_id',0);
  63. $name = $params['name'] ?? request()->input('name', '');
  64. $marketId = $params['market_id'] ?? request()->input('market_id',0);
  65. $startTime = $params['start_time'] ?? request()->input('start_time','');
  66. $endTime = $params['end_time'] ?? request()->input('end_time','');
  67. // 外卖类型 type = 1
  68. $model = Model::select(DB::raw($selects))
  69. // ->with('employees:id,user_id,name,market_id')
  70. ->join(EmployeesModel::TABLE_NAME,EmployeesModel::TABLE_NAME.'.id','=',Model::$tableName.'.horseman_id','left')
  71. ->where(Model::$tableName.'.type', Model::ORDER_TYPE_ONLINE)
  72. ->where('shipping_type', Model::ORDER_SHIPPING_TYPE_MARKET)
  73. ->whereIn('state',Model::ORDER_STATE_FINISH)
  74. ->where(Model::$tableName.'.created_at','>=',strtotime('2020-10-01 00:00:00'));
  75. if($userId){
  76. $userId = explode(',',$userId);
  77. $model->whereIn(EmployeesModel::TABLE_NAME.'.user_id',$userId);
  78. }
  79. if($name){
  80. $model->where(EmployeesModel::TABLE_NAME.'.name','like',"%$name%");
  81. }
  82. if($marketId){
  83. $model->where(EmployeesModel::TABLE_NAME.'.market_id',$marketId);
  84. }
  85. if($startTime){
  86. $startTime = $startTime.' 00:00:00';
  87. $model->where(Model::$tableName.'.created_at','>=',strtotime($startTime));
  88. }
  89. if($endTime){
  90. $endTime = $endTime.' 23:59:59';
  91. $model->where(Model::$tableName.'.created_at','<=',strtotime($endTime));
  92. }
  93. return $model;
  94. }
  95. }