ANG YU 5 سال پیش
والد
کامیت
c6e6be549a

+ 94 - 0
app/Filters/OrderPackageFilters.php

@@ -0,0 +1,94 @@
+<?php
+
+
+namespace App\Filters;
+
+use App\Order;
+use Illuminate\Http\Request;
+use phpDocumentor\Reflection\Types\Boolean;
+
+class OrderPackageFilters
+{
+    protected $request;
+    protected $queryBuilder;
+    protected $filters = ['logistic_number', 'status', 'received_at_start',
+        'received_at_end', 'is_weighed', 'logistic_id', 'owner_id', 'sent_at_start', 'sent_at_end', 'is_exception'];
+
+    public function __construct(Request $request)
+    {
+        $this->request = $request;
+    }
+
+    public function apply($builder)
+    {
+        $this->queryBuilder = $builder;
+        $filters = array_filter($this->request->only($this->filters));
+        foreach ($filters as $filter => $value) {
+            if (method_exists($this, $filter)) {
+                $this->$filter($value, $this->queryBuilder);
+            }
+        }
+        return $this->queryBuilder;
+    }
+
+
+    private function logistic_number($logistic_number)
+    {
+        $this->queryBuilder->where('logistic_number', $logistic_number);
+    }
+
+    private function status($status)
+    {
+        $this->queryBuilder->where('status', $status);
+    }
+
+    private function received_at_start($received_at_start)
+    {
+        $this->queryBuilder->where('received_at', '>=', $received_at_start);
+    }
+
+    private function received_at_end($received_at_end)
+    {
+        $this->queryBuilder->where('received_at', '<=', $received_at_end);
+    }
+
+    private function is_weighed($is_weighed)
+    {
+        if ($is_weighed == 'true') {
+            $this->queryBuilder->whereNotNull('weighed_at');
+        } else {
+            $this->queryBuilder->whereNull('weighed_at');
+        }
+    }
+
+    private function logistic_id($logistic_id)
+    {
+        $logistic_ids = array_filter(preg_split('/[,, ]+/is', $logistic_id));
+        $this->queryBuilder->whereIn('order_id',function($query)use($logistic_ids){
+            $query->from('orders')->select('id')->whereIn('logistic_id',$logistic_ids);
+        });
+    }
+
+    private function owner_id($owner_id)
+    {
+        $owner_ids = array_filter(preg_split('/[,, ]+/is', $owner_id));
+        $this->queryBuilder->whereIn('order_id',function($query)use($owner_ids){
+            $query->from('orders')->select('id')->whereIn('owner_id',$owner_ids);
+        });
+    }
+
+    private function sent_at_start($sent_at_start)
+    {
+        $this->queryBuilder->where('sent_at', '>=', $sent_at_start);
+    }
+
+    private function sent_at_end($sent_at_end)
+    {
+        $this->queryBuilder->where('sent_at', '<=', $sent_at_end);
+    }
+
+    private function is_exception($is_exception)
+    {
+        $this->queryBuilder->where('exception', $is_exception);
+    }
+}

+ 8 - 4
app/Http/Controllers/PackageLogisticController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Filters\OrderPackageFilters;
 use App\Logistic;
 use App\OrderPackage;
 use App\Owner;
@@ -20,13 +21,16 @@ class PackageLogisticController extends Controller
         $this->middleware('auth');
     }
 
-    public function index()
+    public function index(OrderPackageFilters $filters)
     {
-        $orderPackages = OrderPackage::query()->with(['order' => function ($query) {
-            $query->with(['logistic','owner','packages.commodities']);
+        $orderPackages = OrderPackage::query()->filter($filters)->with(['order' => function ($query) {
+            $query->with(['logistic', 'owner', 'packages.commodities']);
         }])->orderByDesc('id')->paginate(50);
+//        $orderPackages = OrderPackage::query()->with(['order' => function ($query) {
+//            $query->with(['logistic','owner','packages.commodities']);
+//        }]) ->orderByDesc('id')->paginate(50);
         $logistics = Logistic::all();
         $owners = Owner::all();
-        return view('package.logistic.index', compact('orderPackages','logistics','owners'));
+        return view('package.logistic.index', compact('orderPackages', 'logistics', 'owners'));
     }
 }

+ 5 - 0
app/OrderPackage.php

@@ -268,4 +268,9 @@ class OrderPackage extends Model
         if(strpos($val,'null')!==false)return '';
         return $val;
     }
+
+    public function scopeFilter($query, $filters)
+    {
+        return $filters->apply($query);
+    }
 }

+ 2 - 2
resources/views/package/logistic/index.blade.php

@@ -69,7 +69,7 @@
                         /*"","","","","","","","","","",""*/
                         {name: 'logistic_number', type: 'input', tip: '可支持多快递单号,糊模查找需要在左边打上%符号', placeholder: '快递单号'},
                         {
-                            name: 'logistic_number',
+                            name: 'status',
                             type: 'select',
                             tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的状态'],
                             placeholder: '状态',
@@ -119,7 +119,7 @@
                             type: 'select',
                             tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的状态'],
                             placeholder: '是否有异常',
-                            data: [{name: false, value: '无'}, {name: true, value: '有异常'}]
+                            data: [{name: '是', value: '是'}, {name: '否', value: '否'}]
                         },
                     ]
                 ];