WorkOrderFilters.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace App\Filters;
  3. use App\WorkOrder;
  4. use App\WorkOrderChildType;
  5. use Illuminate\Http\Request;
  6. class WorkOrderFilters
  7. {
  8. protected $request;
  9. protected $queryBuilder;
  10. protected $filters = [
  11. 'ids','creator','name','remake','created_at_start','created_at_end','review_at_start','review_at_end','reviewer','word_order_types','word_order_child_types'
  12. ];
  13. protected $array_filter;
  14. protected $params = [
  15. 'ids','creator','name','remake','created_at_start','created_at_end','review_at_start','review_at_end','reviewer','word_order_types','word_order_child_types'
  16. ];
  17. protected $workOrderTypeQuery;
  18. protected $workOrderChildQuery;
  19. public function __construct(Request $request)
  20. {
  21. $this->request = $request;
  22. $this->params = $request->all();
  23. $this->array_filter = array_filter($this->request->only($this->filters));
  24. }
  25. public function apply($builder)
  26. {
  27. $this->queryBuilder = $builder;
  28. $this->afterApply();
  29. foreach ($this->array_filter as $filter => $value) {
  30. if (method_exists($this, $filter)) {
  31. $this->$filter($value, $this->queryBuilder);
  32. }
  33. }
  34. $this->beforeApply();
  35. return $this->queryBuilder;
  36. }
  37. public function afterApply()
  38. {
  39. if(isset($this->params['data']))
  40. $this->id(explode(',',$this->params['data']));
  41. }
  42. public function beforeApply()
  43. {
  44. if($this->workOrderChildQuery)
  45. $this->queryBuilder->whereIn('work_order_type_id',$this->workOrderChildQuery);
  46. if ($this->workOrderTypeQuery)
  47. $this->queryBuilder->whereIn('work_order_child_id',$this->workOrderChildQuery);
  48. }
  49. public function id($id)
  50. {
  51. if(is_array($id))$this->queryBuilder->whereIn('work_orders.id',$id);
  52. else $this->queryBuilder->where('work_orders.id',$id);
  53. }
  54. // 创建开始时间
  55. public function created_at_start($create_at_start)
  56. {
  57. $this->queryBuilder->where('work_orders.created_at','>=',$create_at_start);
  58. }
  59. // 创建结束时间
  60. public function created_at_end($created_at_end)
  61. {
  62. $this->queryBuilder->where('work_orders.created_at','<=',$created_at_end);
  63. }
  64. // 审核开始时间
  65. public function review_at_start($review_at_start)
  66. {
  67. $this->queryBuilder->where('work_orders.review_at','>=',$review_at_start);
  68. }
  69. // 审核结束时间
  70. public function review_at_end($review_at_end)
  71. {
  72. $this->queryBuilder->where('work_orders.review_at','<=',$review_at_end);
  73. }
  74. // 创建人
  75. public function creator($id)
  76. {
  77. if (is_array($id))
  78. $this->queryBuilder->whereIn('work_orders.creator_id',$id);
  79. else
  80. $this->queryBuilder->where('work_orders.creator_id',$id);
  81. }
  82. // 审核人
  83. public function reviewer($id)
  84. {
  85. if (is_array($id))
  86. $this->queryBuilder->whereIn('work_orders.reviewer_id',$id);
  87. else
  88. $this->queryBuilder->where('work_orders.reviewer_id',$id);
  89. }
  90. // 类型
  91. public function word_order_types($word_order_types)
  92. {
  93. if(!$this->workOrderTypeQuery)
  94. $this->workOrderTypeQuery = WorkOrder::query()->select('id');
  95. if (is_array($word_order_types))
  96. $this->workOrderTypeQuery->whereIn('id',$word_order_types);
  97. else $this->workOrderTypeQuery->where('id',$word_order_types);
  98. }
  99. // 子类型
  100. public function word_order_child_types($word_order_child_types)
  101. {
  102. if(!$this->workOrderTypeQuery)
  103. $this->workOrderChildQuery = WorkOrderChildType::query()->select('id');
  104. if (is_array($word_order_child_types))
  105. $this->workOrderChildQuery->whereIn('id',$word_order_child_types);
  106. else $this->workOrderChildQuery->where('id',$word_order_child_types);
  107. }
  108. }