request = $request; $this->params = $request->all(); $this->array_filter = array_filter($this->request->only($this->filters)); } public function apply($builder) { $this->queryBuilder = $builder; $this->afterApply(); foreach ($this->array_filter as $filter => $value) { if (method_exists($this, $filter)) { $this->$filter($value, $this->queryBuilder); } } $this->beforeApply(); return $this->queryBuilder; } public function afterApply() { if(isset($this->params['data'])) $this->id(explode(',',$this->params['data'])); } public function beforeApply() { if ($this->orderPackageQuery){ $this->getOrderQuery()->whereIn('id',$this->orderPackageQuery); } if ($this->orderQuery) { $this->queryBuilder->whereIn('order_id',$this->getOrderQuery()); } // 审核 默认为 待审核 if (isset($this->params['is_review'])){ $this->queryBuilder->where('status','2'); $this->queryBuilder->whereHas('orderIssue'); } else { $work_order_query = WorkOrder::query()->select('id')->where('status','2')->whereHas('orderIssue'); $this->queryBuilder->whereNotIn('id',$work_order_query); } } public function getOrderQuery(): Builder { if (!$this->orderQuery){ $this->orderQuery = Order::query()->select('id'); } return $this->orderQuery; } public function getOrderPackageQuery(): Builder { if (!$this->orderPackageQuery){ $this->orderPackageQuery = OrderPackage::query()->select('order_id'); } return $this->orderPackageQuery; } public function id($id) { if(is_array($id))$this->queryBuilder->whereIn('work_orders.id',$id); else $this->queryBuilder->where('work_orders.id',$id); } // 创建开始时间 public function created_at_start($create_at_start) { $this->queryBuilder->where('work_orders.created_at','>=',$create_at_start); } // 创建结束时间 public function created_at_end($created_at_end) { $this->queryBuilder->where('work_orders.created_at','<=',$created_at_end); } // 审核开始时间 public function review_at_start($review_at_start) { $this->queryBuilder->where('work_orders.review_at','>=',$review_at_start); } // 审核结束时间 public function review_at_end($review_at_end) { $this->queryBuilder->where('work_orders.review_at','<=',$review_at_end); } // 创建人 public function creator($creator) { $userQuery = User::query()->select('id')->where('name','like',"%{$creator}%");; $this->queryBuilder->whereIn('creator_id',$userQuery); } // 审核人 public function reviewer($id) { if (is_array($id)) $this->queryBuilder->whereIn('work_orders.reviewer_id',$id); else $this->queryBuilder->where('work_orders.reviewer_id',$id); } // 类型 public function word_order_types($word_order_types) { if(!$this->workOrderTypeQuery) $this->workOrderTypeQuery = WorkOrder::query()->select('id'); if (is_array($word_order_types)) $this->workOrderTypeQuery->whereIn('id',$word_order_types); else $this->workOrderTypeQuery->where('id',$word_order_types); } public function order_issue_type($order_issue_type) { $this->queryBuilder->where('order_issue_type_id',$order_issue_type); } // 快递单号 public function logistic_number($logistic_number) { $this->searchWay($this->getOrderPackageQuery(),$logistic_number,'order_packages.logistic_number'); } // 对应问题件 public function is_issue_order($is_issue_order) { $orderIssueQuery = OrderIssue::query()->select('order_id')->whereIn('order_id',WorkOrder::query()->select('order_id')); if($is_issue_order == 'true'){ $this->queryBuilder->whereIn('order_id',$orderIssueQuery); } else { $this->queryBuilder->whereNotIn('order_id',$orderIssueQuery); } } // 承运商 public function logistic($logistic) { $orderQuery = $this->getOrderQuery()->whereIn('id',WorkOrder::query()->select('order_id')); $this->searchWay($orderQuery,$logistic,'logistic_id'); } public function grad($grad) { $this->queryBuilder->where('grad',$grad); } }