Просмотр исходного кода

Merge branch 'master' into zengjun

ajun 4 лет назад
Родитель
Сommit
a046621019

+ 1 - 1
app/Console/Kernel.php

@@ -73,7 +73,7 @@ class  Kernel extends ConsoleKernel
         $schedule->command('sync:order')->everyMinute();
         $schedule->command('syncOrderPackageLogisticRouteTask')->dailyAt('1:20');//同步快递信息到orderPackage
         $schedule->command('syncOrderPackageLogisticRouteTask')->dailyAt('12:01');//同步快递信息到orderPackage
-        $schedule->command('updateOrderPackageExceptionTypeCountingRecordTask')->dailyAt('2:20');//更新OrderPackageExceptionTypeCountingRecord
+//        $schedule->command('updateOrderPackageExceptionTypeCountingRecordTask')->dailyAt('2:20');//更新OrderPackageExceptionTypeCountingRecord
         $schedule->command('SyncWmsCommoditiesInformation')->everyMinute();
         $schedule->command('clear:cancelledOrder')->everyMinute();
         $schedule->command('WasSyncWmsAsnInformation')->everyMinute();

+ 15 - 13
app/Filters/OrderPackageFilters.php

@@ -16,12 +16,23 @@ class OrderPackageFilters
 {
     protected $request;
     protected $queryBuilder;
-    protected $filters = ['logistic_number', 'status', 'received_at_start',
+    protected $filters = [
+        'logistic_number',
+        'status',
+        'received_at_start',
         'default_logistics',
         'is_issue',
         'sync_routes_flag',
         'remark',
-        'received_at_end', 'is_weighed', 'logistic', 'owner', 'sent_at_start', 'sent_at_end', 'is_exception', 'exception_type', 'default_date', 'has_transfer_status'];
+        'received_at_end',
+        'is_weighed',
+        'logistic',
+        'owner',
+        'sent_at_start',
+        'sent_at_end',
+        'default_date',
+        'has_transfer_status',
+    ];
 
     protected $orderIssueQuery;
 
@@ -61,11 +72,6 @@ class OrderPackageFilters
         }
     }
 
-    private function exception_type($exception_type)
-    {
-        $exception_types = array_filter(preg_split('/[,]+/is', $exception_type));
-        $this->queryBuilder->whereIn('exception_type', $exception_types);
-    }
 
     private function has_transfer_status($has_transfer_status)
     {
@@ -78,7 +84,8 @@ class OrderPackageFilters
 
     private function status($status)
     {
-        $this->queryBuilder->where('status', $status);
+        $statuses = array_filter(preg_split('/[,, ]+/is', $status));
+        $this->queryBuilder->whereIn('status', $statuses);
     }
 
     private function received_at_start($received_at_start)
@@ -124,11 +131,6 @@ class OrderPackageFilters
         $this->queryBuilder->where('sent_at', '<=', Carbon::parse($sent_at_end)->endOfDay());
     }
 
-    private function is_exception($is_exception)
-    {
-        $this->queryBuilder->where('exception', $is_exception);
-    }
-
     public function default_date()
     {
         $this->queryBuilder->where('sent_at', '>=', now()->startOfDay()->subDays(15))->where('sent_at', '<', now()->startOfDay()->addDay());

+ 1 - 1
app/Http/ApiControllers/LoginController.php

@@ -46,7 +46,7 @@ class LoginController
         }
 
         try {
-            $response["data"] = ["token"=>$this->getJWTToken($user,$privateKey)];
+            $response["data"] = ["token"=>app("UserService")->getJWTToken($user,$privateKey)];
             return response()->json($response);
         }catch (\Exception $e){
             $response["status_code"] = 409;

+ 6 - 19
app/Http/Controllers/PackageLogisticController.php

@@ -32,15 +32,15 @@ class PackageLogisticController extends Controller
         $orderPackages = OrderPackage::query()
             ->filter($filters)
             ->with(['order.logistic',
-                'orderPackageRemarks'=>function ($query){
+                'orderPackageRemarks' => function ($query) {
                     $query->with('user')->orderByDesc('created_at');
                 },
                 'order.owner',
                 'order.issue' => function ($query) {
-                $query->with(['issueType', 'logs' => function ($query) {
-                    $query->with('user')->orderBy('created_at', 'DESC');
-                }]);
-            }])
+                    $query->with(['issueType', 'logs' => function ($query) {
+                        $query->with('user')->orderBy('created_at', 'DESC');
+                    }]);
+                }])
             ->orderByDesc('id')
             ->paginate($request->paginate ?? 50);
         $logistics = Logistic::all();
@@ -64,21 +64,9 @@ class PackageLogisticController extends Controller
 
     public function batchUpdate(Request $request)
     {
-        $data = [];
-        if (array_key_exists('exception_type', $request->all())) {
-            if ('无' == $request->input('exception_type')) {
-                $data['exception_type'] = $request->input('exception_type');
-                $data['exception'] = "否";
-            } else {
-                $data['exception_type'] = $request->input('exception_type');
-            }
-        } else if (array_key_exists('status', $request->all())) {
-            $data['status'] = $request->input('status');
-        }
+        $data['status'] = OrderPackage::switchStatus($request->input('status'));
         $logistic_numbers = $request->input('logistic_numbers');
         OrderPackage::query()->whereIn('logistic_number', $logistic_numbers)->update($data);
-        //更新统计数据
-        event(new UpdateOrderPackageExceptionListenerEvent($logistic_numbers));
     }
 
     /**
@@ -132,7 +120,6 @@ class PackageLogisticController extends Controller
                 }
             }
             $data = [
-                $orderPackage->exception_type,
                 $orderPackage->logistic_number,
                 $orderPackage->status,
                 $orderPackage->order->logistic->name,

+ 19 - 10
app/Http/Controllers/TestController.php

@@ -34,6 +34,7 @@ use App\OrderPackageCountingRecord;
 use App\RejectedBill;
 use App\Services\CacheShelfService;
 use App\Services\ForeignHaiRoboticsService;
+use App\Services\OrderPackageReceivedSyncService;
 use App\Services\OrderService;
 use App\Services\OwnerFeeTotalService;
 use App\Services\OwnerLogisticFeeReportService;
@@ -69,7 +70,8 @@ use PhpOffice\PhpSpreadsheet\Calculation\Web\Service;
 
 class TestController extends Controller
 {
-    use AsyncResponse,ErrorPush;
+    use AsyncResponse, ErrorPush;
+
     const ASNREFERENCE_2 = 'ASNREFERENCE2';
 
     public function __construct()
@@ -81,27 +83,28 @@ class TestController extends Controller
     {
         return call_user_func([$this, $method], $request);
     }
+
     public function test4()
     {
         $user = User::query()->first();
-        $b = file_get_contents(base_path().'/public.pem');
+        $b = file_get_contents(base_path() . '/public.pem');
         $decoded = JWT::decode("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJkYXRhIjp7ImZpZWxkMSI6MSwiZmllbGQyIjoic3RyaW5nIGRhdGEifSwiaXNzIjoiaHR0cDpcL1wvZXhhbXBsZS5vcmciLCJhdWQiOiJodHRwOlwvXC9leGFtcGxlLmNvbSIsImlhdCI6MTYyOTc3NDUxMywiZWF0IjoxNjI5NzgxNzEzfQ.Twl3_KPMLP4Pi4zaGZig8SKhE9M6nZlCI8bVifWjuYIWuqZtlujp35Zvv1oY0GnPIkUmq-PGJZLU96mmT-RTRDL-83sPF2l7PPTeriYMoiKP1r2rsI421BtrgLs0qP7QCPxH5BmHWXAVbwTtnwv8JagKzcZxkZJRH3Lj8blRapumnCk-tMfHz4xiXHIATfMS1I23vhJJLomC-KW4Ou3pjTu6X3HiiUGe9ZBGTu5mHfiKm25dxXO5Fm3JMg2-anLf_Gy6D6D7IQJ5pM5HFEN-HdD7FibeEMraMxbk5B_82L15OjhaoCV7b7ioXNSs2QAdlRfuRgx0XIE_toFwb_152a", $b, ['RS256']);
         $payload = [
             'data' => ['field1' => 1, 'field2' => 'string data'],
             "iss" => "http://example.org",
             "aud" => "http://example.com",
             "iat" => time(),
-            "eat" => time()+7200,
+            "eat" => time() + 7200,
         ];
         try {
             $token = JWT::encode($payload, $a, 'RS256');
-        }catch (\Exception $e){
+        } catch (\Exception $e) {
             $this->error("HTTP:409,资源异常,无法反馈");
         }
         try {
             $a = file_get_contents("test");
-        }catch (\Exception $e){
-            if (strpos($e->getMessage(),"No such file or directory")!==false)$this->error("HTTP:410,服务器异常,资源丢失");
+        } catch (\Exception $e) {
+            if (strpos($e->getMessage(), "No such file or directory") !== false) $this->error("HTTP:410,服务器异常,资源丢失");
             else $this->error("HTTP:403,访问某些资源失败");
         }
 
@@ -116,7 +119,7 @@ class TestController extends Controller
 
             "iat" => time(),
 
-            "eat" => time()+7200,
+            "eat" => time() + 7200,
 
         ];
 
@@ -126,10 +129,11 @@ class TestController extends Controller
 
         $decoded = JWT::decode($token, $b, ['RS256']);
 
-        $decoded_array = (array) $decoded;
+        $decoded_array = (array)$decoded;
 
         echo "Decoded:\n" . print_r($decoded_array, true) . "\n";
     }
+
     public function OwnerStoreFeeReportService_recordReport()
     {
         /** @var OwnerStoreFeeReportService $service */
@@ -154,7 +158,7 @@ class TestController extends Controller
 //快递
     public function OwnerLogisticFeeReportService_record()
     {
-        ini_set('max_execution_time',-1);
+        ini_set('max_execution_time', -1);
 
         /** @var OwnerLogisticFeeReportService $service */
         $service = app('OwnerLogisticFeeReportService');
@@ -163,7 +167,7 @@ class TestController extends Controller
 
     public function order_packages_sync_routes_flag_init()
     {
-        OrderPackage::query()->whereNotNull('transfer_status')->update(['sync_routes_flag'=>true]);
+        OrderPackage::query()->whereNotNull('transfer_status')->update(['sync_routes_flag' => true]);
     }
 
     public function SettlementBillReportTask()
@@ -171,4 +175,9 @@ class TestController extends Controller
         SettlementBillReportTask::dispatchNow('2021-08-01');
     }
 
+    public function init_order_packages_status()
+    {
+        OrderPackage::query()->whereNotNull('received_at')->update(['status' => 14]);
+    }
+
 }

+ 26 - 7
app/Http/Controllers/WaybillController.php

@@ -9,6 +9,7 @@ use App\Owner;
 use App\Region;
 use App\Services\CarTypeService;
 use App\Services\LogisticService;
+use App\Services\LogService;
 use App\Services\OwnerService;
 use App\Services\UnitService;
 use App\Services\WaybillPayoffService;
@@ -769,22 +770,26 @@ SQL;
     }
 
     //发运
-    public function delivering(){
+    public function delivering(Request $request){
         if (!Auth::user())return view('exception.login');
-        $waybills= Waybill::query()->where("type","专线")->whereNotNull("deliver_at")
-            ->whereNotNull("logistic_id")->whereIn("status",["已审核","待终审"])
-            ->whereNull("carrier_bill")->orderByDesc("id");
+        $waybills= Waybill::query()->where("type","专线")
+            ->whereNotNull("logistic_id")->whereNotIn("status",["未审核","待重审"])
+            ->orderByDesc("id");
         if (!Auth::user()->isSuperAdmin()){
             $carriersUsers=DB::table('logistic_user')->where('user_id',Auth::id())->get();
             $carrierIds=array_column($carriersUsers->toArray(),'logistic_id');
             if ($carrierIds)$waybills->whereIn("logistic_id",$carrierIds);
         }
+        $searchText = $request->get("searchText","");
+        if ($searchText)$waybills->where(function ($query)use($searchText){
+            $query->where("waybill_number",'like','%'.$searchText.'%')->orWhere("carrier_bill",'like','%'.$searchText.'%');
+        });
         $waybills = $waybills->get();
-        return view('transport.waybill.delivering',compact('waybills'));
+        return view('transport.waybill.delivering',compact('waybills',"searchText"));
     }
     //承运商提交
     public function storeCarrierBill(Request $request){
-        if(!Gate::allows("运输管理-承运商调度"))return ["error"=>"无权操作!"];
+        //if(!Gate::allows("运输管理-承运商调度"))return ["error"=>"无权操作!"];
         $errors=Validator::make($request->input(),[
             'id'=>'required|integer',
             'carrier_bill'=>'required',
@@ -1265,6 +1270,7 @@ SQL;
             $owner = array_unique($owner);
             if (count($owner)>1)$waybill->merge_owner = implode(',',$owner);
             $waybill->deliver_at = date("Y-m-d H:i:s");
+            if ($waybill->status=='未审核')$waybill->status = '已审核';
             $waybill->update();
             Waybill::destroy($destroys);
             WaybillAuditLog::query()->create([
@@ -1283,7 +1289,9 @@ SQL;
                 'audit_stage'=>'单独发货',
                 'user_id'=>Auth::id(),
             ]);
-            $waybill->update(["deliver_at"=>date("Y-m-d H:i:s"),"logistic"=>\request("logistic")]);
+            $update = ["deliver_at"=>date("Y-m-d H:i:s"),"logistic_id"=>\request("logistic")];
+            if ($waybill->status=='未审核')$update["status"] = '已审核';
+            $waybill->update($update);
         }
         $this->success();
     }
@@ -1344,4 +1352,15 @@ SQL;
         ]);
         $this->success();
     }
+
+    public function appendSubjoinFee()
+    {
+        $this->gate("运输管理-编辑");
+        $id = \request("id");
+        $subjoinFee = \request("subjoinFee");
+        if (!$id || !$subjoinFee)$this->error("非法参数");
+        if (Waybill::query()->where("id",$id)->update(["subjoin_fee"=>$subjoinFee]) == 0)$this->error("修改失败,运单信息发送变更");
+        LogService::log("运输附加费","调度商添加","录入人:".Auth::id()." | 修改费用{$id}为:".$subjoinFee);
+        $this->success();
+    }
 }

+ 20 - 0
app/Http/Middleware/AuthorizingApi.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+
+class AuthorizingApi
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        return $next($request);
+    }
+}

+ 216 - 146
app/OrderPackage.php

@@ -40,38 +40,85 @@ class OrderPackage extends Model
         'status',
         'sent_at',
         'received_at',
-        'exception',
         'transfer_status',
         'owner_id',
         'uploaded_to_wms',
-        'exception_type',
         'sync_routes_flag',
     ];
 
-    public function order(){
-        return $this->belongsTo('App\Order','order_id','id');
-    }
-
     protected $casts = [
         'transfer_status' => 'array',
         'sync_routes_flag' => 'boolean',
     ];
 
+    static public $enums = [
+        'status' => [
+            ''=>0,
+            '无'=>1,
+            '已称重'=>2,
+            '已揽收'=>3,
+            '揽件异常'=>4,
+            '疑似库内丢件'=>5,
+            '在途'=>6,
+            '在途异常'=>7,
+            '派送中'=>8,
+            '派送异常'=>9,
+            '返回中'=>10,
+            '返回异常'=>11,
+            '返回派件'=>12,
+            '其他异常'=>13,
+            '已收件'=>14,
+        ],
+    ];
+
+    function __construct(array $attributes = [])
+    {
+        foreach (self::$enums as &$enum) {
+            $enum=$enum+array_flip($enum);
+        }
+        parent::__construct($attributes);
+    }
+
+    public function getStatusAttribute($value)
+    {
+        if(!$value)return '';
+        return self::$enums['status'][$value];
+    }
+    public function setStatusAttribute($value)
+    {
+        if(!$value)return 0;
+        $this->attributes['status']=self::$enums['status'][$value];
+    }
+
+    public static function switchStatus($value): int
+    {
+        return self::$enums['status'][$value];
+    }
+
+    public function order()
+    {
+        return $this->belongsTo('App\Order', 'order_id', 'id');
+    }
+
+
     public function commodities(): HasMany
     {
-        return $this->hasMany('App\OrderPackageCommodities','order_package_id','id');
+        return $this->hasMany('App\OrderPackageCommodities', 'order_package_id', 'id');
     }
+
     public function paperBox(): HasOne
     {
-        return $this->hasOne('App\PaperBox','id','paper_box_id');
+        return $this->hasOne('App\PaperBox', 'id', 'paper_box_id');
     }
+
     public function measuringMachine(): HasOne
     {
-        return $this->hasOne('App\MeasuringMachine','id','measuring_machine_id');
+        return $this->hasOne('App\MeasuringMachine', 'id', 'measuring_machine_id');
     }
+
     public function WMSReflectPackage(): HasOne
     {
-        return $this->hasOne('App\WMSReflectPackage','SOReference5','logistic_number');
+        return $this->hasOne('App\WMSReflectPackage', 'SOReference5', 'logistic_number');
     }
 
     static protected $oracleOrderHeaderFields = [
@@ -87,24 +134,31 @@ class OrderPackage extends Model
         'doc_wave_header.descr',
     ];
 
-    protected $tempFields=[
-        'temOracleInfo','temOwner','temLogistic',
+    protected $tempFields = [
+        'temOracleInfo', 'temOwner', 'temLogistic',
     ];
 
-    public function setLengthAttribute($value){
-        if(empty((int)($value)))return;
+    public function setLengthAttribute($value)
+    {
+        if (empty((int)($value))) return;
         $this->attributes['length'] = $value;
     }
-    public function setWidthAttribute($value){
-        if(empty((int)($value)))return;
+
+    public function setWidthAttribute($value)
+    {
+        if (empty((int)($value))) return;
         $this->attributes['width'] = $value;
     }
-    public function setHeightAttribute($value){
-        if(empty((int)($value)))return;
+
+    public function setHeightAttribute($value)
+    {
+        if (empty((int)($value))) return;
         $this->attributes['height'] = $value;
     }
-    public function setBulkAttribute($value){
-        if(empty((int)($value)))return;
+
+    public function setBulkAttribute($value)
+    {
+        if (empty((int)($value))) return;
         $this->attributes['bulk'] = $value;
     }
 
@@ -113,196 +167,212 @@ class OrderPackage extends Model
         $this->commodities()->delete();
         return parent::delete();
     }
-    public function deleteSafe(){
+
+    public function deleteSafe()
+    {
         return parent::delete();
     }
 
-    public function isActivityBatch(){
-        return ($this['batch_rule'] && strstr($this['batch_rule'],'组合')  && $this['batch_number'] );
+    public function isActivityBatch()
+    {
+        return ($this['batch_rule'] && strstr($this['batch_rule'], '组合') && $this['batch_number']);
     }
-    public function fetchAllFromOracle(){
-        if(empty($this->oracleInfo))return null;
-/*        $this->fetchOwnerFromOracle();
-        $this->fetchLogisticFromOracle();*/
-/*        $this['recipient'] = $this->oracleInfo['consigneename'];
-        $this['order_code'] = $this->oracleInfo['orderno'];*/
+
+    public function fetchAllFromOracle()
+    {
+        if (empty($this->oracleInfo)) return null;
+        /*        $this->fetchOwnerFromOracle();
+                $this->fetchLogisticFromOracle();*/
+        /*        $this['recipient'] = $this->oracleInfo['consigneename'];
+                $this['order_code'] = $this->oracleInfo['orderno'];*/
         $this['batch_rule'] = $this->oracleInfo['descr'];
-/*        $this['recipient_mobile'] = $this->oracleInfo['c_tel2']??$this->oracleInfo['c_tel1'];
-        if(!$this['logistic_number']&&$this->oracleInfo['soreference5'])
-            $this['logistic_number'] = $this->oracleInfo['soreference5'];*/
-        $this['batch_number'] = $this->oracleInfo['waveno']??null;
+        /*        $this['recipient_mobile'] = $this->oracleInfo['c_tel2']??$this->oracleInfo['c_tel1'];
+                if(!$this['logistic_number']&&$this->oracleInfo['soreference5'])
+                    $this['logistic_number'] = $this->oracleInfo['soreference5'];*/
+        $this['batch_number'] = $this->oracleInfo['waveno'] ?? null;
     }
-    static public function createPackagesFromBatchCode($batchCode,$weight){
 
+    static public function createPackagesFromBatchCode($batchCode, $weight)
+    {
 
 
-        $queryBuilder=OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields);
-        $queryBuilder->where('doc_order_header.waveno',$batchCode);
-        $queryBuilder->leftJoin('act_allocation_details','act_allocation_details.orderno','doc_order_header.orderno');
-        $queryBuilder->leftJoin('doc_wave_header','doc_wave_header.waveno','doc_order_header.waveno');
-        $resultOracleObjs=$queryBuilder->get();
-        $resultOracleObjs_grouped=$resultOracleObjs->groupBy('soreference5');
+        $queryBuilder = OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields);
+        $queryBuilder->where('doc_order_header.waveno', $batchCode);
+        $queryBuilder->leftJoin('act_allocation_details', 'act_allocation_details.orderno', 'doc_order_header.orderno');
+        $queryBuilder->leftJoin('doc_wave_header', 'doc_wave_header.waveno', 'doc_order_header.waveno');
+        $resultOracleObjs = $queryBuilder->get();
+        $resultOracleObjs_grouped = $resultOracleObjs->groupBy('soreference5');
         $packages = [];
         $now = Carbon::now();
 
-        foreach($resultOracleObjs_grouped as $resultOracleObj_grouped){
+        foreach ($resultOracleObjs_grouped as $resultOracleObj_grouped) {
             $resultOracleObj = $resultOracleObj_grouped[0];
-            /** @var OrderService $orderService*/
+            /** @var OrderService $orderService */
             $orderService = app('OrderService');
             $order = $orderService->logisticNumberFirstOrCreateOrder($resultOracleObj['soreference5']);
-            if (!$order){
-                app('LogService')->log(__METHOD__,"此包裹在WMS未找到order",json_encode($resultOracleObj),Auth::user()['id']);
+            if (!$order) {
+                app('LogService')->log(__METHOD__, "此包裹在WMS未找到order", json_encode($resultOracleObj), Auth::user()['id']);
                 continue;
             }
-            array_push($packages,[
-                'batch_number'=>$batchCode??'',
+            array_push($packages, [
+                'batch_number' => $batchCode ?? '',
                 'order_id' => $order->id,
-                'logistic_number'=>$resultOracleObj['soreference5']??'',
-                'weight'=>$weight,
-                'weighed_at'=> $now,
-                'uploaded_to_wms'=>"是",
-                "created_at"=>$now,
+                'logistic_number' => $resultOracleObj['soreference5'] ?? '',
+                'weight' => $weight,
+                'weighed_at' => $now,
+                'uploaded_to_wms' => "是",
+                "created_at" => $now,
             ]);
         }
 
 
         $packagesLogisticNumbers = array_map(function ($orderPackage) {
             return $orderPackage['logistic_number'];
-        } ,$packages);
-        $existingOrderPackages=OrderPackage::whereIn('logistic_number', $packagesLogisticNumbers)->get();
-        $existingLogisticNumbers=$existingOrderPackages->map(function($orderPackage){
+        }, $packages);
+        $existingOrderPackages = OrderPackage::whereIn('logistic_number', $packagesLogisticNumbers)->get();
+        $existingLogisticNumbers = $existingOrderPackages->map(function ($orderPackage) {
             return $orderPackage['logistic_number'];
         })->toArray();
         OrderPackage::whereIn('logistic_number', $existingLogisticNumbers)->update([
-            'batch_number'=>$batchCode??'',
-            'weight'=>$weight,
-            'weighed_at'=> $now,
-            'uploaded_to_wms'=>"是",]);
-        $newPackages=$packages;
-        if($existingOrderPackages->isNotEmpty())
-            $newPackages=array_filter($packages,function ($package)use($existingLogisticNumbers){
-                return array_search($package['logistic_number'],$existingLogisticNumbers)===false;
+            'batch_number' => $batchCode ?? '',
+            'weight' => $weight,
+            'weighed_at' => $now,
+            'uploaded_to_wms' => "是",]);
+        $newPackages = $packages;
+        if ($existingOrderPackages->isNotEmpty())
+            $newPackages = array_filter($packages, function ($package) use ($existingLogisticNumbers) {
+                return array_search($package['logistic_number'], $existingLogisticNumbers) === false;
             });
-        DB::transaction(function ()use($newPackages){
+        DB::transaction(function () use ($newPackages) {
             OrderPackage::query()->insert($newPackages);
         });
 
 
-        app('LogService')->log(__METHOD__,"批量录入包裹成功",json_encode($packages),Auth::user()['id']);
+        app('LogService')->log(__METHOD__, "批量录入包裹成功", json_encode($packages), Auth::user()['id']);
     }
-    public function unifyThisMeasureUnderSameBatch(){
+
+    public function unifyThisMeasureUnderSameBatch()
+    {
         $this->fetchPaperBox();
-        $params=[];
-        !empty($this['weight'])?$params['weight']= $this['weight']:null;
-        !empty($this['length'])?$params['length']= $this['length']:null;
-        !empty($this['width'])?$params['width']= $this['width']:null;
-        !empty($this['height'])?$params['height']= $this['height']:null;
-        !empty($this['bulk'])?$params['bulk']= $this['bulk']:null;
-        !empty($this['measuring_machine_id'])?$params['measuring_machine_id']= $this['measuring_machine_id']:null;
-        !empty($this['weighed_at'])?$params['weighed_at']= $this['weighed_at']:null;
-        !empty($this['paper_box_id'])?$params['paper_box_id']= $this['paper_box_id']:null;
-        if(empty($params)||empty($this['batch_number']))return;
-        OrderPackage::query()->where(['batch_number'=>$this['batch_number']])->update($params);
+        $params = [];
+        !empty($this['weight']) ? $params['weight'] = $this['weight'] : null;
+        !empty($this['length']) ? $params['length'] = $this['length'] : null;
+        !empty($this['width']) ? $params['width'] = $this['width'] : null;
+        !empty($this['height']) ? $params['height'] = $this['height'] : null;
+        !empty($this['bulk']) ? $params['bulk'] = $this['bulk'] : null;
+        !empty($this['measuring_machine_id']) ? $params['measuring_machine_id'] = $this['measuring_machine_id'] : null;
+        !empty($this['weighed_at']) ? $params['weighed_at'] = $this['weighed_at'] : null;
+        !empty($this['paper_box_id']) ? $params['paper_box_id'] = $this['paper_box_id'] : null;
+        if (empty($params) || empty($this['batch_number'])) return;
+        OrderPackage::query()->where(['batch_number' => $this['batch_number']])->update($params);
     }
-    public function fetchLogisticFromOracle(){
-        if(empty($this->oracleInfo))return null;
-        if(Arr::exists($this->tempFields,'temLogistic'))return $this->tempFields['temLogistic'];
-        Controller::logs(__METHOD__, __FUNCTION__, "tempPackage:{$this->oracleInfo['carrierid']}||SOR:{$this->oracleInfo['SOReference5']}||sor:{$this->oracleInfo['soreference5']}||orderno:{$this['orderno']}" , null);
-        if(!$this->oracleInfo['carrierid'])return null;
-        $logistic= Logistic::query()->where('code',$this->oracleInfo['carrierid'])->first();
-        if(!$logistic){
-            $logistic=Logistic::query()->create(['code'=>$this->oracleInfo['carrierid'],'name'=>$this->oracleInfo['carrierid']]);
-            Controller::logs(__METHOD__, __FUNCTION__, "富勒下发找不到快递公司,添加{$this->oracleInfo['carrierid']}" , null);
+
+    public function fetchLogisticFromOracle()
+    {
+        if (empty($this->oracleInfo)) return null;
+        if (Arr::exists($this->tempFields, 'temLogistic')) return $this->tempFields['temLogistic'];
+        Controller::logs(__METHOD__, __FUNCTION__, "tempPackage:{$this->oracleInfo['carrierid']}||SOR:{$this->oracleInfo['SOReference5']}||sor:{$this->oracleInfo['soreference5']}||orderno:{$this['orderno']}", null);
+        if (!$this->oracleInfo['carrierid']) return null;
+        $logistic = Logistic::query()->where('code', $this->oracleInfo['carrierid'])->first();
+        if (!$logistic) {
+            $logistic = Logistic::query()->create(['code' => $this->oracleInfo['carrierid'], 'name' => $this->oracleInfo['carrierid']]);
+            Controller::logs(__METHOD__, __FUNCTION__, "富勒下发找不到快递公司,添加{$this->oracleInfo['carrierid']}", null);
         }
-        Controller::logs(__METHOD__, __FUNCTION__, "tempPackage2:{$logistic->id}" , null);
-        if(!$logistic)return null;
-        $this->tempFields['temLogistic']=$logistic;
+        Controller::logs(__METHOD__, __FUNCTION__, "tempPackage2:{$logistic->id}", null);
+        if (!$logistic) return null;
+        $this->tempFields['temLogistic'] = $logistic;
         $this['logistic_id'] = $logistic['id'];
         return $logistic;
     }
-    public function fetchOwnerFromOracle(){
-        if(empty($this->oracleInfo))return null;
-        if(Arr::exists($this->tempFields,'temOwner'))return $this->tempFields['temOwner'];
-        $owner= Owner::query()->where('code',$this->oracleInfo['customerid'])->first();
-        if(!$owner){
-            $owner=Owner::query()->create(['code'=>$this->oracleInfo['customerid'],'name'=>$this->oracleInfo['customerid']]);
-            Controller::logs(__METHOD__, __FUNCTION__, "富勒下发找不到货主,添加{$this->oracleInfo['customerid']}" , null);
+
+    public function fetchOwnerFromOracle()
+    {
+        if (empty($this->oracleInfo)) return null;
+        if (Arr::exists($this->tempFields, 'temOwner')) return $this->tempFields['temOwner'];
+        $owner = Owner::query()->where('code', $this->oracleInfo['customerid'])->first();
+        if (!$owner) {
+            $owner = Owner::query()->create(['code' => $this->oracleInfo['customerid'], 'name' => $this->oracleInfo['customerid']]);
+            Controller::logs(__METHOD__, __FUNCTION__, "富勒下发找不到货主,添加{$this->oracleInfo['customerid']}", null);
         }
-        if(!$owner)return null;
-        $this->tempFields['temOwner']=$owner;
+        if (!$owner) return null;
+        $this->tempFields['temOwner'] = $owner;
         $this['owner_id'] = $owner['id'];
         return $owner;
     }
+
     //寻找相近纸箱ID
-    public  function fetchPaperBox($max=null, $centre=null, $min=null, $owner_id=null){
-        if($this['paper_box_id'])return $this['paper_box_id'];
-        $sumDiffer=0;
-        $maxDiffer=0;
-        $paperBox_id=null;
-        if(!$max)$max=$this['length'];
-        if(!$centre)$centre=$this['width'];
-        if(!$min)$min=$this['height'];
-        if(!$owner_id) $owner_id = $this['order'] ? $this['order']['owner_id'] : null;
-        if(!$owner_id) {
+    public function fetchPaperBox($max = null, $centre = null, $min = null, $owner_id = null)
+    {
+        if ($this['paper_box_id']) return $this['paper_box_id'];
+        $sumDiffer = 0;
+        $maxDiffer = 0;
+        $paperBox_id = null;
+        if (!$max) $max = $this['length'];
+        if (!$centre) $centre = $this['width'];
+        if (!$min) $min = $this['height'];
+        if (!$owner_id) $owner_id = $this['order'] ? $this['order']['owner_id'] : null;
+        if (!$owner_id) {
             $owner = $this->fetchOwnerFromOracle();
             $owner_id = $owner['id'];
-            if(!$owner_id)return null;
+            if (!$owner_id) return null;
         }
-        $boxes=Owner::select('id')->with('paperBoxes')->find($owner_id);
-        $targetPaperBox=null;
-        foreach ($boxes->paperBoxes as $i=>$paperBox){
-            if ($paperBox->length==$max&&$paperBox->width==$centre&&$paperBox->height==$min){
-                $targetPaperBox=$paperBox;
+        $boxes = Owner::select('id')->with('paperBoxes')->find($owner_id);
+        $targetPaperBox = null;
+        foreach ($boxes->paperBoxes as $i => $paperBox) {
+            if ($paperBox->length == $max && $paperBox->width == $centre && $paperBox->height == $min) {
+                $targetPaperBox = $paperBox;
                 break;
             }
-            $lengthDiffer=abs($paperBox->length-$max);
-            $widthDiffer=abs($paperBox->width-$centre);
-            $heightDiffer=abs($paperBox->height-$min);
-            $thisMaxDiffer=($lengthDiffer>=($widthDiffer>=$heightDiffer?$widthDiffer:$heightDiffer)?$lengthDiffer:($widthDiffer>=$heightDiffer?$widthDiffer:$heightDiffer));
-            if($i==0){
-                $maxDiffer=$thisMaxDiffer;
-                $sumDiffer=$lengthDiffer+$widthDiffer+$heightDiffer;
-                $targetPaperBox=$paperBox;
+            $lengthDiffer = abs($paperBox->length - $max);
+            $widthDiffer = abs($paperBox->width - $centre);
+            $heightDiffer = abs($paperBox->height - $min);
+            $thisMaxDiffer = ($lengthDiffer >= ($widthDiffer >= $heightDiffer ? $widthDiffer : $heightDiffer) ? $lengthDiffer : ($widthDiffer >= $heightDiffer ? $widthDiffer : $heightDiffer));
+            if ($i == 0) {
+                $maxDiffer = $thisMaxDiffer;
+                $sumDiffer = $lengthDiffer + $widthDiffer + $heightDiffer;
+                $targetPaperBox = $paperBox;
             }
-            if ($thisMaxDiffer==$maxDiffer){
-                if($sumDiffer>($lengthDiffer+$widthDiffer+$heightDiffer)){
-                    $sumDiffer=$lengthDiffer+$widthDiffer+$heightDiffer;
-                    $targetPaperBox=$paperBox;
+            if ($thisMaxDiffer == $maxDiffer) {
+                if ($sumDiffer > ($lengthDiffer + $widthDiffer + $heightDiffer)) {
+                    $sumDiffer = $lengthDiffer + $widthDiffer + $heightDiffer;
+                    $targetPaperBox = $paperBox;
                 }
             }
-            if ($thisMaxDiffer<$maxDiffer){
-                $sumDiffer=$lengthDiffer+$widthDiffer+$heightDiffer;
-                $maxDiffer=$thisMaxDiffer;
-                $targetPaperBox=$paperBox;
+            if ($thisMaxDiffer < $maxDiffer) {
+                $sumDiffer = $lengthDiffer + $widthDiffer + $heightDiffer;
+                $maxDiffer = $thisMaxDiffer;
+                $targetPaperBox = $paperBox;
             }
         }
-        if($targetPaperBox)$this['paper_box_id']=$targetPaperBox['id'];
+        if ($targetPaperBox) $this['paper_box_id'] = $targetPaperBox['id'];
         return $targetPaperBox['id'];
     }
+
     public function getOracleInfoAttribute()
     {
-        if(isset($this->tempFields['temOracleInfo']))return $this->tempFields['temOracleInfo'];
-        if(empty($this['logistic_number'])&&empty($this['order_code']))return '';
-        if($this['order_code']){
-            $resultOracleObjs=OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields)->where('orderno',$this['order_code']);
-            $resultOracleObjs->leftJoin('doc_wave_header','doc_wave_header.waveno','doc_order_header.waveno');
-        }else{
-            $resultOracleObjs=OracleActAllocationDetails::query()->select(self::$oracleOrderHeaderFields);
-            $resultOracleObjs->where('picktotraceid',$this['logistic_number']);
-            $resultOracleObjs->leftJoin('DOC_Order_Header','act_allocation_details.orderno','doc_order_header.orderno');
-            $resultOracleObjs->leftJoin('doc_wave_header','doc_wave_header.waveno','doc_order_header.waveno');
+        if (isset($this->tempFields['temOracleInfo'])) return $this->tempFields['temOracleInfo'];
+        if (empty($this['logistic_number']) && empty($this['order_code'])) return '';
+        if ($this['order_code']) {
+            $resultOracleObjs = OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields)->where('orderno', $this['order_code']);
+            $resultOracleObjs->leftJoin('doc_wave_header', 'doc_wave_header.waveno', 'doc_order_header.waveno');
+        } else {
+            $resultOracleObjs = OracleActAllocationDetails::query()->select(self::$oracleOrderHeaderFields);
+            $resultOracleObjs->where('picktotraceid', $this['logistic_number']);
+            $resultOracleObjs->leftJoin('DOC_Order_Header', 'act_allocation_details.orderno', 'doc_order_header.orderno');
+            $resultOracleObjs->leftJoin('doc_wave_header', 'doc_wave_header.waveno', 'doc_order_header.waveno');
         }
-        $this->tempFields['temOracleInfo']=$resultOracleObjs->first();
-        if(empty($this->tempFields['temOracleInfo'])) {
-            $resultOracleObjs=OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields)->where('soreference5',$this['logistic_number']);
-            $resultOracleObjs->leftJoin('doc_wave_header','doc_wave_header.waveno','doc_order_header.waveno');
+        $this->tempFields['temOracleInfo'] = $resultOracleObjs->first();
+        if (empty($this->tempFields['temOracleInfo'])) {
+            $resultOracleObjs = OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields)->where('soreference5', $this['logistic_number']);
+            $resultOracleObjs->leftJoin('doc_wave_header', 'doc_wave_header.waveno', 'doc_order_header.waveno');
         }
-        $this->tempFields['temOracleInfo']=$resultOracleObjs->first();
+        $this->tempFields['temOracleInfo'] = $resultOracleObjs->first();
         return $this->tempFields['temOracleInfo'];
     }
+
     public function getLogisticNumberAttribute($val)
     {
-        if(strpos($val,'null')!==false)return '';
+        if (strpos($val, 'null') !== false) return '';
         return $val;
     }
 

+ 12 - 13
app/Providers/EventServiceProvider.php

@@ -39,19 +39,18 @@ class EventServiceProvider extends ServiceProvider
         'App\Events\GitPushedEvent' => [
             'App\Listeners\GitPushedSendEmailListener'
         ],
-
-        'App\Events\AddOrUpdateOrderIssues' => [//问题件新增或更新
-            'App\Listeners\AddOrUpdateOrderIssuesListener',//将对应的order_packages的数据的异常装变更
-        ],
-        'App\Events\OrderIssueProcessLogCreateEvent' => [//orderIssue增添日志时
-            'App\Listeners\UpdateOrderPackageExceptionListener',//将对应的order_packages的数据的异常装变更为无
-        ],
-        'App\Events\UpdateOrderPackageExceptionListenerEvent' => [//order_packages的数据的异常数据变更时
-            'App\Listeners\UpdateOrderPackageExceptionTypeCountingRecordListener',//更新OrderPackageExceptionTypeCountingRecord的统计信息
-        ],
-        'App\Events\SettlementBillCreateEvent' => [
-            'App\Listeners\SettlementBillCreateListener'
-        ],
+//        'App\Events\AddOrUpdateOrderIssues' => [//问题件新增或更新
+//            'App\Listeners\AddOrUpdateOrderIssuesListener',//将对应的order_packages的数据的异常装变更
+//        ],
+//        'App\Events\OrderIssueProcessLogCreateEvent' => [//orderIssue增添日志时
+//            'App\Listeners\UpdateOrderPackageExceptionListener',//将对应的order_packages的数据的异常装变更为无
+//        ],
+//        'App\Events\UpdateOrderPackageExceptionListenerEvent' => [//order_packages的数据的异常数据变更时
+//            'App\Listeners\UpdateOrderPackageExceptionTypeCountingRecordListener',//更新OrderPackageExceptionTypeCountingRecord的统计信息
+//        ],
+//        'App\Events\SettlementBillCreateEvent' => [
+//            'App\Listeners\SettlementBillCreateListener'
+//        ],
     ];
 
     /**

+ 0 - 11
app/Services/LogisticAliJiSuApiService.php

@@ -46,8 +46,6 @@ class LogisticAliJiSuApiService
         if (!isset($response)||($response && $response->status!=0)) {
             return [
                 'logistic_number' => $logistic_number,
-                'exception_type' => '揽件异常',
-                'exception' => '是',
             ];
         }
         else {
@@ -65,20 +63,11 @@ class LogisticAliJiSuApiService
                 $result['routes_length'] = array_key_exists('transfer_status', $result) ? count($result['transfer_status']) : 0;
                 $orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
                 $exceptionData = $orderPackageReceivedSyncService->setExceptionType($result, $lastNativeRoute ? $lastNativeRoute->time : null);
-                $result['exception_type'] = $exceptionData['exception_type'];
-                $result['exception'] = $exceptionData['exception'];
 
             } else {
                 $result['status'] = null;
                 $result['transfer_status'] = [];
             }
-            if (!array_key_exists('exception', $result)
-                && !array_key_exists('exception_type', $result)
-                && array_key_exists('transfer_status', $result)
-            ) {
-                $result['exception_type'] = '无';
-                $result['exception'] = '否';
-            }
             if (!array_key_exists('status', $result)) {
                 $result['status'] = null;
                 $result['transfer_status'] = [];

+ 0 - 23
app/Services/LogisticSFService.php

@@ -104,29 +104,10 @@ xml;
             $lastRoute = get_object_vars($routeResponse['Route'][count($routeResponse['Route']) - 1])['@attributes'];//获取最新的路由信息
             $data = $this->switchOpCodeToStatus($lastRoute, $data);
             $data['transfer_status'] = $this->transformRoutes($routeResponse['Route']);
-            if (!array_key_exists('exception', $data)) {//当顺丰返回异常时,不需要再根据时间判断是否异常,直接用顺丰的异常就好
-                $orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
-                $exceptionData = $orderPackageReceivedSyncService->setExceptionType($data, array_key_exists('accept_time',$lastRoute) ? $lastRoute['accept_time'] : null);
-                $data['exception_type'] = $exceptionData['exception_type'];
-                $data['exception'] = $exceptionData['exception'];
-            }
-            //如果没有发现额外的异常,且查询到物流轨迹,将异常置为无
-            if (!array_key_exists('exception', $data)
-                && !array_key_exists('exception_type', $data)
-                && array_key_exists('transfer_status', $data)
-            ) {
-                $data['exception_type'] = '无';
-                $data['exception'] = '否';
-            }
         } catch (Exception $e) {
             throw new WarningException("单号没有查询到快递路由信息','LogisticSFService->transformSFOneToArr->{$data['logistic_number']}");
         } finally {
             $data['routes_length'] = array_key_exists('transfer_status', $data) ? count($data['transfer_status']) : 0;
-            //如果查询不到物流轨迹 设置为揽收异常
-            if ($data['routes_length']===0) {
-                $data['exception_type'] = '揽件异常';
-                $data['exception'] = '是';
-            }
             return $data;
         }
     }
@@ -173,8 +154,6 @@ xml;
                     break;
                 case 33:
                     $data['status'] = '派送异常';
-                    $data['exception_type'] = '派件异常';
-                    $data['exception'] = '是';
                     break;
                 case 204:
                 case 44:
@@ -195,8 +174,6 @@ xml;
                     break;
                 case 70:
                     $data['status'] = '无';
-                    $data['exception'] = '是';
-                    $data['exception_type'] = '其他';
                     break;
                 default:
                     throw new WarningException("未知的丰桥状态码: {$lastRoute['opcode']}->{json_encode($lastRoute)}");

+ 0 - 12
app/Services/LogisticYDService.php

@@ -101,8 +101,6 @@ class LogisticYDService
         if (is_null($nativeResponse) || $nativeResponse->code != '0000' || empty($nativeResponse->data) ||$nativeResponse->data->result == "false") {
             return [
                 'logistic_number' => $logistic_number,
-                'exception_type' => '揽件异常',
-                'exception' => '是',
             ];
         } else {
             $nativeData = $nativeResponse->data;
@@ -123,8 +121,6 @@ class LogisticYDService
                 $result['routes_length'] = array_key_exists('transfer_status', $result) ? count($result['transfer_status']) : 0;
                 $orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
                 $exceptionData = $orderPackageReceivedSyncService->setExceptionType($result, $lastNativeRoute ? $lastNativeRoute->time : null);
-                $result['exception_type'] = $exceptionData['exception_type'];
-                $result['exception'] = $exceptionData['exception'];
 
             } else {
                 $result['status'] = null;
@@ -135,14 +131,6 @@ class LogisticYDService
                 $result['status'] = null;
                 $result['transfer_status'] = [];
             }
-            //如果没有发现额外的异常,且查询到物流轨迹,将异常置为无
-            if (!array_key_exists('exception', $result)
-                && !array_key_exists('exception_type', $result)
-                && array_key_exists('transfer_status', $result)
-            ) {
-                $result['exception_type'] = '无';
-                $result['exception'] = '否';
-            }
             return $result;
         }
     }

+ 0 - 11
app/Services/LogisticYTOService.php

@@ -47,8 +47,6 @@ class LogisticYTOService
         if (is_object($response) && $response->code=='1001') {
             return [
                 'logistic_number' => $logistic_number,
-                'exception_type' => '揽件异常',
-                'exception' => '是',
             ];
         }
         else {
@@ -58,8 +56,6 @@ class LogisticYTOService
                 LogService::log(LogisticYTOService::class, "YTO快递信息异常", $logistic_number);
                 return [
                     'logistic_number' => $logistic_number,
-                    'exception_type' => '其他',
-                    'exception' => '是',
                 ];
             }
             if (!empty($response) && is_array($response)) {
@@ -70,18 +66,11 @@ class LogisticYTOService
                 $result['routes_length'] = array_key_exists('transfer_status', $result) ? count($result['transfer_status']) : 0;
                 $orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
                 $exceptionData = $orderPackageReceivedSyncService->setExceptionType($result, $lastNativeRoute ? $lastNativeRoute->upload_Time : null);
-                $result['exception_type'] = $exceptionData['exception_type'];
-                $result['exception'] = $exceptionData['exception'];
             } else {
                 $result['status'] = null;
                 $result['transfer_status'] = [];
             }
             if (!array_key_exists('status', $result)) {$result['status'] = null;$result['transfer_status'] = [];}
-            //如果没有发现额外的异常,且查询到物流轨迹,将异常置为无
-            if (!array_key_exists('exception', $result)
-                && !array_key_exists('exception_type', $result)
-                && array_key_exists('transfer_status', $result)
-            ) {$result['exception_type'] = '无';$result['exception'] = '否';}
             return $result;
         }
     }

+ 3 - 14
app/Services/LogisticZopService.php

@@ -30,35 +30,24 @@ class LogisticZopService implements LogisticRouteInterface
 
     public function format($nativeResponse,$logistic_number)
     {
+
         $order_package = OrderPackage::query()->where('logistic_number', $logistic_number)->first();
         $result = [
             'logistic_number' => $logistic_number,
-            'exception_type' => $order_package->exception_type,
-            'exception' => $order_package->exception,
             'status' => $order_package->status,
             'transfer_status' => $order_package->transfer_status,
             'received_at' => $order_package->received_at,
         ];
-        $nativeRoutes = $nativeResponse->result??[];
-        if (empty($nativeRoutes)) {
-            $result['exception_type'] = '揽件异常';
-            $result['exception'] = '是';
+        if (empty($nativeResponse->result)|| !$nativeResponse->status || $nativeResponse->status=='P-OW005') {
             return $result;
         }
+        $nativeRoutes = $nativeResponse->result??[];
         $lastRoute = $nativeRoutes[count($nativeRoutes) - 1]??[];
         list($status, $received_at) = $this->getNormalStatusAndReceivedAt($lastRoute);
         $result['status'] = $status;
         $result['received_at'] = $received_at;
         $result['transfer_status'] = $this->getTransferStatus($nativeRoutes);
         $result['routes_length'] = count($result['transfer_status']);
-        /**
-         * @var $orderPackageReceivedSyncService OrderPackageReceivedSyncService
-         */
-        $orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
-        $lastRouteDate = Carbon::parse($lastRoute->scanDate / 1000)->addHours(8)->toDateTimeString();
-        $exceptionData = $orderPackageReceivedSyncService->setExceptionType($result, $lastRouteDate);
-        $result['exception_type'] = $exceptionData['exception_type'];
-        $result['exception'] = $exceptionData['exception'];
         return $result;
     }
 

+ 10 - 13
app/Services/OrderPackageReceivedSyncService.php

@@ -180,24 +180,21 @@ class OrderPackageReceivedSyncService
         foreach ($logisticResponses as $logisticResponse) {
             if (empty($logisticResponse)) continue;
             $orderPackage = OrderPackage::query()->where('logistic_number', $logisticResponse['logistic_number'])->first();
-            try {
-                if ($orderPackage->order && $orderPackage->order->issue) {
-                    unset($logisticResponse['exception_type']);
-                    unset($logisticResponse['exception']);
-                }
-            } catch (Exception $e) {
-                //  LogService::log(OrderPackageReceivedSyncService::class, "标记问题件不需要更新异常状态失败", $logisticResponse['logistic_number'] . '-' . json_encode($e));
-            }
-            //如果已经收货,将异常更新为正常
+            //如果已经收货,状态改为已收件
             if ($logisticResponse['received_at']??false) {
-                $logisticResponse['exception_type'] = '无';
-                $logisticResponse['exception'] = '否';
+                $logisticResponse['status'] = '已收件';
+            }
+            //未查询到路由信息改为  揽件异常
+            if (empty($logisticResponse['transfer_status'])) {
+                $logisticResponse['status'] = '揽件异常';
+                //未查询到路由信息且未称重的   疑似库内丢件
+                if (empty($orderPackage->weighed_at)) {
+                    $logisticResponse['status'] = '疑似库内丢件';
+                }
             }
             if (isset($logisticResponse['status'])) $orderPackage->status = $logisticResponse['status'];
             if (isset($logisticResponse['received_at'])) $orderPackage->received_at = $logisticResponse['received_at'];
-            if (isset($logisticResponse['exception'])) $orderPackage->exception = $logisticResponse['exception'];
             if (isset($logisticResponse['transfer_status']) && !empty($logisticResponse['transfer_status'])) $orderPackage->transfer_status = $logisticResponse['transfer_status'];
-            if (isset($logisticResponse['exception_type'])) $orderPackage->exception_type = $logisticResponse['exception_type'];
             $orderPackage->save();
         }
     }

+ 2 - 1
app/Waybill.php

@@ -73,7 +73,8 @@ class Waybill extends Model
         'express_face_list',
         'arrived_org_simple_name',
         'much_higher_delivery',
-        'station_no'
+        'station_no',
+        'subjoin_fee',//附加费
     ];
 
     public function district()

+ 60 - 0
database/migrations/2021_08_24_092216_drop_column_exception_type_and_exception_to_order_packages_table.php

@@ -0,0 +1,60 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class DropColumnExceptionTypeAndExceptionToOrderPackagesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->dropColumn('exception');
+            $table->dropColumn('exception_type');
+            $table->dropColumn('status');
+        });
+
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->integer('status')->default(1)->comment('状态');
+        });
+
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->dropIndex('order_packages_express_index');
+        });
+
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->index(['sent_at', 'order_id', 'status', 'received_at', 'sync_routes_flag'], 'order_packages_express_index');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->enum('exception', ['是', '否']);
+            $table->enum('exception_type', ['疑似库内丢件', '揽件异常', '中转异常', '疑似丢件', '派件异常', '其他', '无']);
+            $table->dropColumn('status');
+        });
+
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->enum('status', ['无', '已称重', '已揽收', '在途', '在途异常', '派送中', '派送异常', '返回中', '返回异常', '返回派件', '其他异常', '已收件']);
+        });
+
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->dropIndex('order_packages_express_index');
+        });
+
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->index(['sent_at', 'order_id', 'exception', 'exception_type', 'status', 'received_at', 'sync_routes_flag'], 'order_packages_express_index');
+        });
+    }
+}

+ 32 - 0
database/migrations/2021_08_24_143918_change_waybills_add_column_subjoin_fee.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeWaybillsAddColumnSubjoinFee extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table("waybills",function (Blueprint $table){
+            $table->decimal("subjoin_fee",10,3)->default(0)->comment("附加费");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table("waybills",function (Blueprint $table){
+            $table->dropColumn("subjoin_fee");
+        });
+    }
+}

+ 27 - 111
resources/views/package/logistic/index.blade.php

@@ -81,16 +81,6 @@
                             <a class="dropdown-item" @click="orderPackageExport(true)" href="javascript:">导出所有页</a>
                         </div>
                     </span>
-                    <span class="ml-1">
-                        <select class="form-control-sm" v-model="batchExceptionType">
-                            <option v-for="(value,index) in exception_types" :value="value"
-                                    :name="value" :key="index">@{{ value }}
-                            </option>
-                        </select>
-                        <button @click="batchExceptionTypeUpdate()" type="button"
-                                class="btn btn-sm ml-2 btn-outline-primary">批量异常状态修改
-                        </button>
-                    </span>
                     <span class="ml-1">
                         <select class="form-control-sm ml-2" v-model="batchStatus">
                             <option v-for="(value,index) in statuses" :value="value"
@@ -133,18 +123,6 @@
                                   :style="package.sync_routes_flag?'background-color:#4ed32d':'background-color:#e83939'"></span>
                         </span>
                     </td>
-                    <td>
-                        <select class="form-control-sm" v-model="package.exception_type"
-                                @change="package.showEditButton = true">
-                            <option :disabled="!exception_editable" v-for="(value,index) in exception_types"
-                                    :value="value" :name="value" :key="index">@{{ value }}
-                            </option>
-                        </select>
-                        <button class="btn btn-info btn-sm text-white mr-1" @click="updateExceptionType(package)"
-                                v-if="package.showEditButton">
-                            更新状态
-                        </button>
-                    </td>
                     <td>@{{ package.logistic_number }}</td>
                     <td>@{{ package.status }}</td>
                     <td>@{{ package.order != null ? package.order.logistic.name : '#' }}</td>
@@ -245,7 +223,7 @@
                 </div>
             </div>
         </div>
-        <textarea id="clipboardDiv hidden" style="opacity:0"></textarea>
+        <textarea id="clipboardDiv" style="opacity:0"></textarea>
     </div>
 @endsection
 
@@ -279,23 +257,11 @@
                 showList: {},
                 showRemarkList: {},
                 selectTr: 0,
-                exception_types: [
-                    '疑似库内丢件',
-                    '揽件异常',
-                    '中转异常',
-                    '疑似丢件',
-                    '派件异常',
-                    '其他',
-                    '无',
-                ],
                 statuses: [
                     '已揽收',
                     '在途',
                     '无',
                 ],
-                exception_editable: @can('包裹管理-快递-异常类型-编辑') true @else false  @endcan,
-                selectedExceptionType: '修改异常类型',
-                batchExceptionType: null,
                 batchStatus: null,
                 remarkHover: null,
                 remark: null,
@@ -324,30 +290,30 @@
                 $(".up").slideUp();
                 let data = [
                     [
-                        /*"","","","","","","","","","",""*/
                         {name: 'logistic_number', type: 'input', tip: '可支持多快递单号,糊模查找需要在右边打上%符号', placeholder: '快递单号'},
                         {name: 'remark', type: 'input', tip: '糊模查找需要在右边打上%符号', placeholder: '客服备注'},
                         {
                             name: 'status',
-                            type: 'select',
+                            type: 'select_multiple_select',
                             tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的状态'],
-                            placeholder: '状态',
-                            data: [{name: '无', value: '无'}, {name: '已称重', value: '已称重'}, {
-                                name: '已揽收',
-                                value: '已揽收'
-                            }, {name: '在途', value: '在途'}, {name: '在途异常', value: '在途异常'}, {
-                                name: '派送中',
-                                value: '派送中'
-                            }, {
-                                name: '已收件',
-                                value: '已收件'
-                            }, {name: '派送异常', value: '派送异常'}, {name: '返回中', value: '返回中'}, {
-                                name: '返回异常',
-                                value: '返回异常'
-                            }, {name: '返回派件', value: '返回派件'}, {name: '其他异常', value: '其他异常'},]
+                            placeholder: ['状态','定位或多选状态'],
+                            data: [
+                                {name: '1', value: '无'},
+                                {name: '2', value: '已称重'},
+                                {name: '3', value: '已揽收'},
+                                {name: '4', value: '揽件异常'},
+                                {name: '5', value: '疑似库内丢件'},
+                                {name: '6', value: '在途'},
+                                {name: '7', value: '在途异常'},
+                                {name: '8', value: '派送中'},
+                                {name: '9', value: '派送异常'},
+                                {name: '10', value: '返回中'},
+                                {name: '11', value: '返回异常'},
+                                {name: '12', value: '返回派件'},
+                                {name: '13', value: '其他异常'},
+                                {name: '14', value: '已收件'},
+                            ]
                         },
-
-
                         {name: 'sent_at_start', type: 'dateTime', tip: '选择显示发出时间的起始时间'},
                         {
                             name: 'is_weighed',
@@ -357,17 +323,8 @@
                             data: [{name: false, value: '无'}, {name: true, value: '已称重'}]
                         },
                         {name: 'received_at_start', type: 'dateTime', tip: '选择显示收货时间的起始时间'},
-                        {
-                            name: 'has_transfer_status',
-                            type: 'select',
-                            tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的状态'],
-                            placeholder: '是否有物流信息',
-                            data: [{name: '是', value: '是'}, {name: '否', value: '否'}]
-                        },
-
                         {name: 'default_date', type: 'checkbox', tip: '默认15天', data: [{name: 'ture', value: '默认15天'}]},
                         {name: 'default_logistics', type: 'checkbox', tip: '默认承运商', data: [{name: 'ture', value: '默认承运商'}]},
-
                     ], [
                         {
                             name: 'logistic',
@@ -383,31 +340,22 @@
                             placeholder: ['货主', '定位或多选货主'],
                             data: _this.owners
                         },
-                        {name: 'sent_at_end', type: 'dateTime', tip: '选择显示发出时间的截止时间'},
                         {
-                            name: 'is_exception',
+                            name: 'has_transfer_status',
                             type: 'select',
                             tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的状态'],
-                            placeholder: '是否有异常',
+                            placeholder: '是否有物流信息',
                             data: [{name: '是', value: '是'}, {name: '否', value: '否'}]
                         },
-                        {name: 'received_at_end', type: 'dateTime', tip: '选择显示收货时间的截止时间'},
-
+                        {name: 'sent_at_end', type: 'dateTime', tip: '选择显示发出时间的截止时间'},
                         {
-                            name: 'exception_type',
-                            type: 'select_multiple_select',
+                            name: 'sync_routes_flag',
+                            type: 'select',
                             tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的状态'],
-                            placeholder: ['异常类型', '定位或多选异常类型'],
-                            data: [
-                                {name: '疑似库内丢件', value: '疑似库内丢件'},
-                                {name: '揽件异常', value: '揽件异常'},
-                                {name: '中转异常', value: '中转异常'},
-                                {name: '疑似丢件', value: '疑似丢件'},
-                                {name: '派件异常', value: '派件异常'},
-                                {name: '其他', value: '其他'},
-                                {name: '无', value: '无'}
-                            ]
+                            placeholder: '是否有查询记录',
+                            data: [{name: true, value: '是'}, {name: false, value: '否'}]
                         },
+                        {name: 'received_at_end', type: 'dateTime', tip: '选择显示收货时间的截止时间'},
                         {
                             name: 'is_issue',
                             type: 'select',
@@ -415,14 +363,6 @@
                             placeholder: '是否为问题件',
                             data: [{name: '是', value: '是'}, {name: '否', value: '否'}]
                         },
-
-                        {
-                            name: 'sync_routes_flag',
-                            type: 'select',
-                            tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的状态'],
-                            placeholder: '是否有查询记录',
-                            data: [{name: true, value: '是'}, {name: false, value: '否'}]
-                        },
                     ]
                 ];
                 _this.form = new query({
@@ -433,7 +373,6 @@
                 _this.form.init();
                 let column = [
                     {name: 'index', value: '序号', neglect: true},
-                    {name: 'exception_type', value: '异常类型'},
                     {name: 'logistic_number', value: '单号'},
                     {name: 'status', value: '状态'},
                     {name: 'logistic_name', value: '快递公司'},
@@ -480,29 +419,6 @@
                     }
                     this.$forceUpdate();
                 },
-                updateExceptionType(orderPackages) {
-                    let url = '{{ url("package/logistic") }}' + '/' + orderPackages.id;
-                    let data = {id: orderPackages['id'], exception_type: orderPackages.exception_type}
-                    axios.patch(url, data).then((res) => {
-                        window.tempTip.showSuccess('异常状态修改成功');
-                    });
-                },
-                batchExceptionTypeUpdate() {
-                    if(!confirm('是否却认操作')) return;
-                    let _this = this;
-                    if (checkData.length === 0) {
-                        tempTip.show('没有勾选记录');
-                        return
-                    }
-                    axios.put('{{url('package/logistic/batchUpdate')}}', {
-                        exception_type: this.batchExceptionType,
-                        logistic_numbers: checkData
-                    }).then(() => {
-                        tempTip.setDuration(1000);
-                        tempTip.showSuccess('批量更新异常状态成功');
-                        location.reload();
-                    })
-                },
                 batchStatusUpdate() {
                     if(!confirm('是否却认操作')) return;
                     let _this = this;

+ 132 - 114
resources/views/transport/waybill/delivering.blade.php

@@ -2,46 +2,7 @@
 @section('title')发运-运输管理@endsection
 
 @section('content')
-    <div id="list" class=" container-fluid">
-<!--        <form method="GET" action="{{url('transport/waybill/delivering')}}" id="form">
-            计费模型  <div class="text-nowrap mb-0" style="background: #fff;">
-                <div v-if="isBeingFilterConditions">
-                    <div><div class="col" style="padding:0">
-                            <a  href="{{url('transport/waybill/delivering')}}"><span class="btn btn-warning text-dark">清除筛选</span></a>
-                        </div>
-                    </div>
-                </div>
-                <div class="row mt-2 ml-2">
-                    <div class="col-md-6 form-inline" style="max-width: 400px">
-                        <input type="date" name="created_at_start" class="form-control form-control-sm tooltipTarget" title="选择显示指定日期的起始时间"
-                               v-model="filterData.created_at_start" :class="filterData.created_at_start?'bg-warning':''">
-                        <input type="date" class="form-control form-control-sm tooltipTarget" name="created_at_end" title="选择显示指定日期的结束时间"
-                               v-model="filterData.created_at_end" :class="filterData.created_at_end?'bg-warning':''" >
-                    </div>
-                    <div class=" col-md-2 mr-0 " style="max-width: 160px">
-                        <input type="text" title="运单号:可在两侧增加百分号(%)进行模糊搜索" name="waybill_number" placeholder="运单号"
-                               class="form-control form-control-sm tooltipTarget" v-model="filterData.waybill_number" style="vertical-align: middle;width: 153px" :class="filterData.waybill_number?'bg-warning':''">
-                    </div>
-                    <div class=" col-md-2 ml-2 p-0" style="max-width: 160px">
-                        <input type="text" title="承运商单号:可在两侧增加百分号(%)进行模糊搜索"  name="carrier_bill" placeholder="承运商单号"
-                               class="form-control form-control-sm tooltipTarget" v-model="filterData.carrier_bill" style="vertical-align: middle;width: 153px" :class="filterData.carrier_bill?'bg-warning':''">
-                    </div>
-                    <input type="submit" hidden>
-                </div>
-                <div class="ml-4 mt-2">
-                    <span class="dropdown">
-                        <button type="button" class="btn  btn-sm  form-control-sm dropdown-toggle tooltipTarget"
-                                data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">
-                            导出Excel
-                        </button>
-                        <div class="dropdown-menu">
-                            <a class="dropdown-item" @click="waybillExport(false)" href="javascript:">导出勾选内容</a>
-                            <a class="dropdown-item" @click="waybillExport(true)" href="javascript:">导出所有页</a>
-                        </div>
-                    </span>
-                </div>
-            </div>
-        </form>-->
+    <div id="list" class="d-none container-fluid">
         <div class="card">
             <table class="card-body table table-sm table-hover table-striped table-bordered d-none d-sm-block p-0 text-nowrap td-min-width-80" style="width: 100%" id="table">
                 <tr v-for="(waybill,i) in waybills">
@@ -49,7 +10,7 @@
                         <input class="checkItem" type="checkbox" :value="waybill.id">
                     </td>
                     <td><span>@{{ i+1 }}</span></td>
-                    <td><span>@{{ waybill.created_at }}</span></td>
+                    <td><span>@{{ waybill.deliver_at }}</span></td>
                     <td><span>@{{ waybill.carrier_name }}</span></td>
                     <td><span>@{{ waybill.waybill_number }}</span></td>
                     <td><span>@{{ waybill.origination }}</span></td>
@@ -90,8 +51,8 @@
                     <td>
                         <span v-if="waybill.status!='已完结'">
                             <button v-if="!waybill.isBtn&&waybill.carrier_bill" @click="waybill.isBtn=true" class="btn btn-sm btn-outline-dark" >修改</button>
-                            <button v-if="!waybill.isBtn&& !waybill.carrier_bill" @click="submit(waybill.id+'PC',waybill.id);" class="btn btn-sm btn-outline-info" >录入</button>
-                            <button v-if="waybill.isBtn" @click="submit(waybill.id+'PC',waybill.id);" class="btn btn-sm btn-outline-success">确定</button>
+                            <button v-if="!waybill.isBtn&& !waybill.carrier_bill" @click="submit(waybill.isBtn,waybill.id+'PC',waybill.id);" class="btn btn-sm btn-outline-info" >录入</button>
+                            <button v-if="waybill.isBtn" @click="submit(waybill.isBtn,waybill.id+'PC',waybill.id);" class="btn btn-sm btn-outline-success">确定</button>
                             <button @click="waybill.isBtn=false" v-if="waybill.isBtn" class="btn btn-sm btn-outline-danger">取消</button>
                         </span>
                     </td>
@@ -103,11 +64,10 @@
                     <td style="filter:grayscale(30%); ">
                         <div :style="waybill.status!='已完结'?'background-color:#f6eee8':''" class="mt-3">
                             <div style="transform:scale(0.9)" class="pl-0">
-                                <span class="mr-3 text-nowrap"><span style="color:#783000">日期:</span><span style="color:#af7651">@{{ waybill.created_at }}</span></span>
+                                <span class="mr-3 text-nowrap"><span style="color:#783000">日期:</span><span style="color:#af7651">@{{ waybill.deliver_at }}</span></span>
                                 <span class="mr-3 text-nowrap"><span style="color:#783000">承运商:</span><span style="color:#af7651">@{{ waybill.carrier_name }}</span></span>
                                 <span class="mr-3 text-nowrap"><span style="color:#783000">宝时运单号:</span><span style="color:#af7651">@{{ waybill.waybill_number }}</span></span>
                                 <span class="mr-3 text-nowrap"><span style="color:#783000">提货仓:</span><span style="color:#af7651">@{{ waybill.origination }}</span></span>
-                                <span class="mr-3 text-nowrap"><span style="color:#783000">项目:</span><span style="color:#af7651">@{{ waybill.owner_name }}</span></span>
                                 <span class="mr-3 text-nowrap"><span style="color:#783000">预估重量:</span><span style="color:#af7651" v-if="waybill.warehouse_weight_other">@{{ waybill.warehouse_weight_other }} @{{ waybill.warehouse_weight_unit_other_name }}</span></span>
                                 <span class="mr-3 text-nowrap"><span style="color:#783000">预估体积:</span><span style="color:#af7651" v-if="waybill.warehouse_weight">@{{ waybill.warehouse_weight }} @{{ waybill.warehouse_weight_unit_name }}</span></span>
                             </div>
@@ -116,44 +76,76 @@
                             <div style="transform:scale(0.9)" class="pl-0 form-inline">
                                 <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">专线运单号:</span>
                                     <input :id="'carrier_bill'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?errors['_'+waybill.id].carrier_bill[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.carrier_bill"
+                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?errors['_'+waybill.id].carrier_bill[0]:''" v-if="waybill.isBtn" type="text" :value="waybill.carrier_bill"
                                            class="form-control form-control-sm " @click="enlarge($event)"  style="width: 50px">
                                     <span v-else  class="text-muted">@{{ waybill.carrier_bill }}</span>
                                 </span>
-                                <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">查&nbsp;件&nbsp;电&nbsp;话:</span>
+                                <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">查&nbsp;件&nbsp;电&nbsp;&nbsp;话:</span>
                                     <input :id="'inquire_tel'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?errors['_'+waybill.id].inquire_tel[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.inquire_tel"
+                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?errors['_'+waybill.id].inquire_tel[0]:''" v-if="waybill.isBtn" type="text" :value="waybill.inquire_tel"
                                            class="form-control form-control-sm" @click="enlarge($event)"  style="width:50px">
                                     <span v-else  class="text-muted">@{{ waybill.inquire_tel }}</span>
                                 </span>
-                                <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">件数:</span>
-                                    <input :id="'amount'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?errors['_'+waybill.id].amount[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.amount" class="form-control form-control-sm"
-                                           @click="enlarge($event)" style="width:50px">
+                                <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">数量:</span>
+                                    <span class="input-group input-group-sm" v-if="waybill.isBtn">
+                                        <input :id="'amount'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?'is-invalid tooltipTargetError':''"
+                                               :title="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?errors['_'+waybill.id].amount[0]:''" type="text" :value="waybill.amount"
+                                               class="form-control"
+                                               @click="enlarge($event)" style="width:50px">
+                                        <span class="input-group-append">
+                                          <span class="input-group-text">件</span>
+                                        </span>
+                                    </span>
                                     <span v-else class="text-muted"><span v-if="waybill.amount">@{{ waybill.amount }} @{{ waybill.amount_unit_name }}</span></span>
                                 </span>
                                 <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">重量:</span>
-                                    <input :id="'carrier_weight_other'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?errors['_'+waybill.id].carrier_weight_other[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.carrier_weight_other"
-                                           class="form-control form-control-sm" @click="enlarge($event)" style="width:50px">
+                                    <span class="input-group input-group-sm" v-if="waybill.isBtn">
+                                        <input :id="'carrier_weight_other'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?'is-invalid tooltipTargetError':''"
+                                               :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?errors['_'+waybill.id].carrier_weight_other[0]:''" type="text" :value="waybill.carrier_weight_other"
+                                               class="form-control" @click="enlarge($event)" style="width:50px">
+                                        <span class="input-group-append">
+                                          <span class="input-group-text">KG</span>
+                                        </span>
+                                    </span>
                                     <span v-else class="text-muted">@{{ waybill.carrier_weight_other }}</span>
                                 </span>
                                 <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">体积:</span>
-                                    <input :id="'carrier_weight'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?errors['_'+waybill.id].carrier_weight[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.carrier_weight"
-                                           class="form-control form-control-sm" @click="enlarge($event)" {{--@mouseleave="shrink($event)"--}} style="width:50px">
+                                    <span class="input-group input-group-sm" v-if="waybill.isBtn">
+                                        <input :id="'carrier_weight'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?'is-invalid tooltipTargetError':''"
+                                               :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?errors['_'+waybill.id].carrier_weight[0]:''" type="text" :value="waybill.carrier_weight"
+                                               class="form-control" @click="enlarge($event)" style="width:50px">
+                                        <span class="input-group-append">
+                                          <span class="input-group-text">M³</span>
+                                        </span>
+                                    </span>
                                     <span v-else class="text-muted">@{{ waybill.carrier_weight }}</span>
                                 </span>
-                                <span class="mr-3 text-nowrap" v-if="waybill.status!='已完结'">
-                                    <button v-if="waybill.isBtn==true || !waybill.carrier_bill" class="btn btn-sm btn-outline-success" @click="submit(waybill.id)">提交</button>
-                                    <button v-if="waybill.isBtn==true" class="btn btn-sm btn-outline-danger" @click="waybill.isBtn=false">取消</button>
-                                    <button v-if="waybill.isBtn==false && waybill.carrier_bill" class="btn btn-sm " @click="waybill.isBtn=true" :class="waybill.carrier_bill?'btn-outline-dark':'btn-outline-primary'">修改</button></span></div>
+                                <span class="mr-3 text-nowrap form-inline" v-if="!waybill.isBtn && (waybill.status!=='已完结' && waybill.status!=='无模型')"><span style="color:#02346a">附加费:</span>
+                                    <span class="input-group input-group-sm">
+                                        <input :id="'subjoin_fee'+waybill.id" :value="waybill.subjoin_fee" type="number" step="0.01"
+                                               class="form-control" style="width:150px">
+                                        <span class="input-group-append">
+                                          <span class="input-group-text">元</span>
+                                        </span>
+                                    </span>
+                                </span>
+                                <span class="mr-3 text-nowrap" v-if="waybill.status!=='已完结' || waybill.status!=='无模型'">
+                                    <button class="btn btn-sm btn-outline-success" @click="submit(waybill.isBtn,waybill.id)">提交</button>
+                                </span>
+                            </div>
                         </div>
                     </td>
                 </tr>
             </tbody>
             </table>
         </div>
+        <div class="bg-white w-100 row" style="position: fixed;top:0;left:0;
+            width: 100%; text-align: center; border-radius: 3px;">
+            <div class="position-relative offset-2 col-9 mt-3 mb-3">
+                <input class="form-control form-control-sm w-100 rounded-pill" @keydown.enter="searchSubmit()" v-model="searchText" type="text" placeholder="运单号 物流单号"></input>
+                <a id="search" v-bind:href="'{{url('transport/waybill/delivering?searchText=')}}'+searchText"><button type="button" class="border btn btn-sm btn-primary text-white rounded-pill position-absolute" style="top: 0;right: 12px;">搜索</button></a>
+            </div>
+        </div>
     </div>
 @endsection
 
@@ -171,7 +163,7 @@
             waybills:[
                     @foreach($waybills as $waybill)
                 {id:'{{$waybill->id}}',
-                    created_at:'{{$waybill->created_at}}',
+                    deliver_at:'{{$waybill->deliver_at}}',
                     waybill_number:'{{$waybill->waybill_number}}',
                     origination:'{{$waybill->origination}}',
                     carrier_bill:'{{$waybill->carrier_bill}}',
@@ -190,7 +182,8 @@
                     carrier_weight_unit_name:'{{$waybill->carrier_weight_unit ? $waybill->carrier_weight_unit->name : ''}}',
                     warehouse_weight_unit_other_name:'{{$waybill->warehouse_weight_unit_other ? $waybill->warehouse_weight_unit_other->name : ''}}',
                     carrier_weight_unit_other_name:'{{$waybill->carrier_weight_unit_other ? $waybill->carrier_weight_unit_other->name : ''}}',
-                    isBtn:false
+                    isBtn:!!!'{{$waybill->carrier_bill}}',
+                    subjoin_fee:'{{$waybill->subjoin_fee}}',
                 },
                 @endforeach
             ],
@@ -199,6 +192,7 @@
             },
             errors:{},
             sum:{!! $waybills->count() !!},
+            searchText:"{{$searchText}}",
         },
         mounted:function(){
             let _this=this;
@@ -207,6 +201,7 @@
             if (navigator.userAgent.indexOf("Android")!==-1)this.isAndroid = true;
             this.pageInit();
             $("#list").removeClass('d-none');
+            if (this.isAndroid)return;
             let column = [
                 {name:'index',value: '序号', neglect: true},
                 {name:'created_at',value: '日期', class:"color1"},
@@ -224,16 +219,14 @@
                 {name:'carrier_weight',value: '体积', neglect: true, class:"color2"},
                 {name:'operation',value: '操作', neglect: true},
             ];
-            if (window.innerWidth > 500){
-                new Header({
-                    el: "table",
-                    name: "waybillDelivering",
-                    column: column,
-                    data: this.waybills,
-                    restorationColumn: 'id',
-                    fixedTop:($('#form_div').height())+2,
-                }).init();
-            }
+            new Header({
+                el: "table",
+                name: "waybillDelivering",
+                column: column,
+                data: this.waybills,
+                restorationColumn: 'id',
+                fixedTop:($('#form_div').height())+2,
+            }).init();
         },
         computed:{
             isBeingFilterConditions:function(){
@@ -248,6 +241,9 @@
 
         },
         methods:{
+            searchSubmit(){
+                document.getElementById("search").click();
+            },
             //页面初始化
             pageInit(){
                 if (!this.isAndroid)return;
@@ -258,8 +254,10 @@
                 element.innerHTML = element.children[0].outerHTML;
                 let e1 = document.getElementById("menu");
                 let e2 = document.getElementById("demand-div");
+                let e3 = document.getElementsByClassName("navbar");
                 if (e1)e1.remove();
                 if (e2)e2.remove();
+                if (e3.length>0)e3[0].remove();
                 element = document.getElementById("container");
                 if (element)element.style.height = (window.innerHeight-100)+"px";
             },
@@ -288,49 +286,69 @@
             shrink(e){
                 e.target.style.width="50px";
             },
-            submit(waybill_id,id=null){
-                if (!confirm('确定要提交吗?')){return;}
-                let _this=this;
-                let data={};
-                data['id'] = id ? waybill_id : '';
-                data['carrier_bill'] = $("#carrier_bill"+waybill_id).val();
-                data['inquire_tel'] = $("#inquire_tel"+waybill_id).val();
-                data['amount'] = $("#amount"+waybill_id).val();
-                data['carrier_weight'] = $("#carrier_weight"+waybill_id).val();//体积
-                data['carrier_weight_other'] = $("#carrier_weight_other"+waybill_id).val();//重量
-                if (_this.errors["_"+data['id']])_this.errors["_"+data['id']]={};
-                axios.post("{{url('transport/waybill/storeCarrierBill')}}",data)
-                    .then(function (response) {
-                        if (response.data.error){
-                            tempTip.setDuration(3000);
-                            tempTip.show(response.data.error);
-                            return
-                        }
-                        if (response.data.errors){
-                            Vue.set(_this.errors,"_"+data['id'],response.data.errors);
-                            setTimeout(function(){
-                                $(".tooltipTargetError").tooltip('show');
-                            },1);
-                            return;
+            appendSubjoinFee(waybillId){
+                let subjoinFee =  $("#subjoin_fee"+waybillId).val();
+                if (!subjoinFee)return;
+                window.tempTip.postBasicRequest("{{url('transport/waybill/appendSubjoinFee')}}",{subjoinFee:subjoinFee,id:waybillId},()=>{
+                    this.waybills.some((waybill,index)=>{
+                        if (waybill.id===waybillId){
+                            this.$set(this.waybills[index],"subjoin_fee",subjoinFee);
+                            return true;
                         }
-                        _this.waybills.some(function (waybill) {
-                            if (waybill.id===data['id']){
-                                waybill.carrier_bill=response.data.carrier_bill;
-                                waybill.inquire_tel=response.data.inquire_tel;
-                                waybill.amount=response.data.amount;
-                                waybill.amount_unit_name=response.data.amount_unit_name;
-                                waybill.carrier_weight=response.data.carrier_weight;
-                                waybill.carrier_weight_other=response.data.carrier_weight_other;
-                                waybill.isBtn=false;
-                                tempTip.setDuration(2000);
-                                tempTip.showSuccess('录入成功!');
-                                return true;
+                    });
+                    return "附加费添加成功";
+                });
+            },
+            submit(isBtn,waybillId,id=null){
+                if(!isBtn){this.appendSubjoinFee(waybillId);return;}
+                window.tempTip.confirm("确定要提交调配信息吗?",()=>{
+                    let data={
+                        id           :  id ? id : waybillId,
+                        carrier_bill :  $("#carrier_bill"+waybillId).val(),
+                        inquire_tel  :  $("#inquire_tel"+waybillId).val(),
+                        amount  :  $("#amount"+waybillId).val(),
+                        carrier_weight  :  $("#carrier_weight"+waybillId).val(),
+                        carrier_weight_other  :  $("#carrier_weight_other"+waybillId).val(),
+                    };
+                    if (!data["id"]){
+                        window.tempTip.setDuration(3000);
+                        window.tempTip.show("参数异常");
+                        return;
+                    }
+                    this.errors["_"+data['id']]={};
+                    axios.post("{{url('transport/waybill/storeCarrierBill')}}",data)
+                        .then(response=>{
+                            if (response.data.error){
+                                tempTip.setDuration(3000);
+                                tempTip.show(response.data.error);
+                                return;
+                            }
+                            if (response.data.errors){
+                                this.$set(this.errors,"_"+data['id'],response.data.errors);
+                                setTimeout(function(){
+                                    $(".tooltipTargetError").tooltip('show');
+                                },1);
+                                return;
                             }
+                            this.waybills.some(function (waybill) {
+                                if (waybill.id===data['id']){
+                                    waybill.carrier_bill=response.data.carrier_bill;
+                                    waybill.inquire_tel=response.data.inquire_tel;
+                                    waybill.amount=response.data.amount;
+                                    waybill.amount_unit_name=response.data.amount_unit_name;
+                                    waybill.carrier_weight=response.data.carrier_weight;
+                                    waybill.carrier_weight_other=response.data.carrier_weight_other;
+                                    if (waybill.carrier_bill)waybill.isBtn=false;
+                                    tempTip.setDuration(2000);
+                                    tempTip.showSuccess('录入成功!');
+                                    return true;
+                                }
+                            });
+                        }).catch(function (err) {
+                            tempTip.setDuration(3000);
+                            tempTip.show('网络异常:'+err);
                         });
-                    }).catch(function (err) {
-                    tempTip.setDuration(3000);
-                    tempTip.show('网络异常:'+err);
-                });
+                })
             }}
     });
 

+ 1 - 0
routes/web.php

@@ -391,6 +391,7 @@ Route::group(['middleware'=>'auth'],function ($route){
             Route::resource('waybillFinancialExcepted','WaybillFinancialExceptedController');
             Route::post('expressFaceList','WaybillController@expressFaceList');
             Route::post('changeExpressTag','WaybillController@changeExpressTag');
+            Route::post('appendSubjoinFee','WaybillController@appendSubjoinFee');
         });
         Route::resource('waybill','WaybillController');
     });