Selaa lähdekoodia

Merge branch 'zengjun' of ssh://was.baoshi56.com:10022/var/git/bswas into zzd

LD 5 vuotta sitten
vanhempi
commit
dfb412434b
36 muutettua tiedostoa jossa 1912 lisäystä ja 700 poistoa
  1. 85 0
      app/Http/Controllers/LogisticTimingController.php
  2. 51 20
      app/Http/Controllers/OrderIssueController.php
  3. 16 4
      app/Http/Controllers/OrderIssuePerformanceController.php
  4. 21 15
      app/Http/Controllers/OrderTrackingController.php
  5. 189 221
      app/Http/Controllers/TestController.php
  6. 2 1
      app/Http/Controllers/api/thirdPart/flux/StoreController.php
  7. 2 0
      app/Imports/StoreCheckingReceiveImport.php
  8. 28 0
      app/LogisticTiming.php
  9. 10 8
      app/OrderIssue.php
  10. 5 0
      app/Owner.php
  11. 23 0
      app/Services/CityService.php
  12. 4 4
      app/Services/CommodityBarcodeService.php
  13. 40 0
      app/Services/LogisticTimingService.php
  14. 36 72
      app/Services/OrderIssuePerformanceService.php
  15. 14 5
      app/Services/OrderIssueService.php
  16. 488 134
      app/Services/OrderPackageCommoditiesService.php
  17. 48 1
      app/Services/OrderPackageService.php
  18. 74 3
      app/Services/OrderService.php
  19. 69 90
      app/Services/OrderTrackingService.php
  20. 34 0
      app/Services/ProvinceService.php
  21. 5 1
      app/Services/RejectedService.php
  22. 12 0
      database/factories/LogisticTimingFactory.php
  23. 42 0
      database/migrations/2020_10_14_112825_add_order_issue_second_client_no.php
  24. 388 0
      database/migrations/2020_10_19_113042_create_logistic_timings_table.php
  25. 16 0
      database/seeds/LogisticTimingSeeder.php
  26. 35 0
      public/css/app.css
  27. 0 24
      public/t.php
  28. 1 1
      resources/sass/layout.scss
  29. 7 2
      resources/views/order/index/delivering.blade.php
  30. 31 35
      resources/views/order/issue/edit.blade.php
  31. 101 42
      resources/views/order/issue/index.blade.php
  32. 7 7
      resources/views/order/issue/performance.blade.php
  33. 19 8
      resources/views/order/tracking/index.blade.php
  34. 1 1
      resources/views/rejected/search/general.blade.php
  35. 6 1
      resources/views/test.blade.php
  36. 2 0
      routes/apiLocal.php

+ 85 - 0
app/Http/Controllers/LogisticTimingController.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\LogisticTiming;
+use Illuminate\Http\Request;
+
+class LogisticTimingController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\LogisticTiming  $logisticTiming
+     * @return \Illuminate\Http\Response
+     */
+    public function show(LogisticTiming $logisticTiming)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  \App\LogisticTiming  $logisticTiming
+     * @return \Illuminate\Http\Response
+     */
+    public function edit(LogisticTiming $logisticTiming)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\LogisticTiming  $logisticTiming
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, LogisticTiming $logisticTiming)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\LogisticTiming  $logisticTiming
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(LogisticTiming $logisticTiming)
+    {
+        //
+    }
+}

+ 51 - 20
app/Http/Controllers/OrderIssueController.php

@@ -15,6 +15,8 @@ use App\RejectedBill;
 use App\Services\LogService;
 use App\Services\OrderIssueProcessLogService;
 use App\Services\OrderIssueService;
+use App\Services\OrderPackageService;
+use App\Services\OrderService;
 use App\Services\OwnerService;
 use App\Shop;
 use App\UserWorkgroup;
@@ -81,17 +83,9 @@ class OrderIssueController extends Controller
         if (!Gate::allows('订单管理-问题件-编辑')) {
             return redirect(url('/'));
         }
-        $orderIssue = OrderIssue::query()->where('id', $id)->first();
-        $order = Order::query()->with(['packages' => function ($query) {
-            return $query->with(['commodities' => function ($query) {
-                return $query->with('commodity');
-            }]);
-        }])->where('id', $orderIssue->order_id)->first();
-        $secondOrder = Order::with(['packages' => function ($query) {
-            return $query->with(['commodities' => function ($query) {
-                return $query->with(['commodity']);
-            }]);
-        }])->where('id', $orderIssue->second_order_id)->first();
+        $orderIssue = OrderIssue::query()->with(['order','secondOrder.packages.commodities.commodity'])->where('id', $id)->first();
+        $order = $orderIssue->order;
+        $secondOrder = $orderIssue->secondOrder;
         $rejectedBill = RejectedBill::query()->where('id', $orderIssue->rejected_bill_id)->first();
         $userWorkgroup = UserWorkgroup::all();
         $orderIssueType = OrderIssueType::all();
@@ -198,7 +192,7 @@ class OrderIssueController extends Controller
         }
         try {
             $data =  $request->only([
-                'order_issue_type_id','owner_id','logistic_id', 'logistic_number_return','result_explain','final_status','second_order_id',
+                'order_issue_type_id','owner_id','logistic_id', 'logistic_number_return','result_explain','final_status','second_order_id','second_client_no',
                 'logistic_indemnity_money','logistic_express_remission','baoshi_indemnity_money','baoshi_express_remission','user_workgroup_id'
             ]);
             $orderIssue = OrderIssue::query()->find($request->id);
@@ -208,7 +202,7 @@ class OrderIssueController extends Controller
             return  ['success' => true];
         } catch (Exception $e) {
             LogService::log(__METHOD__,__FUNCTION__,json_encode($request)."||".$e->getMessage().'||'.$e->getTraceAsString());
-            return  ['success' => true ,'fail_info' => $e->getMessage()];
+            return  ['success' => false ,'fail_info' => $e->getMessage()];
         }
     }
 
@@ -259,12 +253,12 @@ class OrderIssueController extends Controller
         if (!$request->filled('clientNo')) {
             return ['success' => false, 'fail_info' => '缺失WMS订单参数无法查询'];
         }
-        $orderService = app('orderService');
-        $orderInfo = $orderService->findOrCreateByClientCode($request->input('clientNo'));
+        $orderInfo = app(OrderService::class)->findOrCreateByClientCode($request->input('clientNo'));
         if (!$orderInfo) {
-            return ['success' => false, 'fail_info' => '没有对应的WMS订单信息'];
+            return ['success' => true, 'message' => '没有对应的订单信息'];
+        }else{
+            return ['success' => true, 'data' => $orderInfo];
         }
-        return ['success' => true, 'data' => $orderInfo];
     }
 
     public function apiOrderIssueHasClientCode(Request $request)
@@ -378,16 +372,17 @@ class OrderIssueController extends Controller
         try {
             /** @var OrderIssue $orderIssue */
             $orderIssue = OrderIssue::query()->where('id',$request->input('id'))->first();
-            $orderIssue->update(['logistic_number_return' => $request->input('logisticNumberReturn')]);
-            $orderIssue->同步退单状态();
             $rejectedBill = RejectedBill::query()
                 ->with('items')
                 ->where('logistic_number_return',$request->input('logisticNumberReturn'))
                 ->first();
             LogService::log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
             if(!$rejectedBill){
+                $orderIssue->update(['logistic_number_return' => $request->input('logisticNumberReturn')]);
                 return ['success' => false, 'message' => '退回单号已修改,退回单号没有相应退件信息'];
             }else{
+                $orderIssue->update(['logistic_number_return' => $request->input('logisticNumberReturn'),'is_new_rejecting' => '有']);
+                $orderIssue->同步退单状态();
                 return ['success' => true, 'rejectedBill' => $rejectedBill,'rejectingStatus' =>$orderIssue->rejecting_status];
             }
         } catch (Exception $e) {
@@ -432,7 +427,6 @@ class OrderIssueController extends Controller
         ]);
     }
 
-
     public function endOrderIssuesApi(Request $request)
     {
         if (!Gate::allows('订单管理-问题件-编辑')) {
@@ -447,4 +441,41 @@ class OrderIssueController extends Controller
         $logs = app(OrderIssueProcessLogService::class)->create($params);
         return ['success'=>true,'logs'=>$logs];
     }
+
+    public function editSecondClientNoApi(Request $request)
+    {
+        if(!Gate::allows('订单管理-问题件-编辑')){
+            return ['success'=>false,'fail_info'=>'没有对应权限'];
+        }
+        $secondClientNo = $request->input('secondClientNo');
+        try {
+            app(OrderIssueService::class)->editOrderIssueSecondClientNo($request->id,$secondClientNo);
+            $order = Order::query()->with('packages.commodities.commodity')->where('client_code',$secondClientNo)->first();
+            if (!$order) {
+                return ['success' => true, 'message' => '二次客户单号已修改,没有对应的订单信息'];
+            } else {
+               return ['success' => true, 'order' => $secondClientNo =='' ? null : $order];
+            }
+        } catch (Exception $e) {
+            LogService::log(__METHOD__, __FUNCTION__, json_encode($request->getContent()).$e->getMessage().$e->getTraceAsString());
+            return  ['success' =>false ,'fail_info' => $e->getMessage()];
+        }
+    }
+
+    public function secondOrderAddOrderPackageApi(Request $request)
+    {
+        if(!Gate::allows('订单管理-问题件-编辑')){
+            return ['success'=>false,'fail_info'=>'没有对应权限'];
+        }
+        try {
+            $array = app(OrderPackageService::class)->createByLogisticNumberAndOrderClientNo( $request->input('client_code'),$request->input('logistic_number'));
+            if(!isset($array['orderPackage']))return ['success'=>false,'fail_info'=>'创建失败'];
+            return ['success'=>true,'orderPackage'=>$array['orderPackage'],'order'=>$array['order']];
+        } catch (Exception $e) {
+            LogService::log(__METHOD__,__FUNCTION__.'ERROR','问题件 根据二次客户单号和快递单创建OrderPakcage'.json_encode($request->getContent()).$e->getMessage());
+            return ['success'=>false, 'fail_info' => $e->getMessage()];
+        }
+
+    }
+
 }

+ 16 - 4
app/Http/Controllers/OrderIssuePerformanceController.php

@@ -2,12 +2,12 @@
 
 namespace App\Http\Controllers;
 
-use App\Owner;
 use App\Services\OrderIssuePerformanceService;
 use App\Services\OrderIssueWorkLoadService;
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
+use Exception;
 use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Http;
 
 class OrderIssuePerformanceController extends Controller
 {
@@ -32,8 +32,20 @@ class OrderIssuePerformanceController extends Controller
 
     public function export(Request $request)
     {
-        $service = app('orderIssuePerformanceService');
-        return $service->exportPerformance($request->all());
+        /** @var OrderIssuePerformanceService  $orderIssuePerformanceService */
+        $orderIssuePerformanceService = app(OrderIssuePerformanceService::class);
+        $sql = $orderIssuePerformanceService->getSql($request->all());
+        $row = ['客服','客户','创建数','处理数','完结数','总数'];
+        $column = ['userName','ownerName','created','process','end','sumNumber'];
+        $post = Http::post(config('go.export.url'),['type'=>'unify','sql'=>$sql, 'connection'=>'mysql',
+            'row'=>json_encode($row,JSON_UNESCAPED_UNICODE), 'column'=>json_encode($column)]);
+        if ($post->status() == 500){
+            throw new Exception($post->header("Msg"));
+        }
+        return response($post,200, [
+            "Content-type"=>"application/octet-stream",
+            "Content-Disposition"=>"attachment; filename=客服绩效-".date('ymdHis').'.xlsx',
+        ]);
     }
 
     public function workLoadPage(Request $request)

+ 21 - 15
app/Http/Controllers/OrderTrackingController.php

@@ -3,20 +3,13 @@
 namespace App\Http\Controllers;
 
 use App\Logistic;
-use App\OracleActAllocationDetails;
-use App\OracleBasCustomer;
-use App\OracleDOCOrderHeader;
-use App\Order;
-use App\OrderTracking;
-use App\OrderTrackingOwner;
-use App\Owner;
-use App\Services\CommodityService;
 use App\Services\LogService;
 use App\Services\OrderTrackingService;
 use App\Services\OwnerService;
+use Exception;
 use Illuminate\Http\Request;
-use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Http;
 
 class OrderTrackingController extends Controller
 {
@@ -65,12 +58,25 @@ class OrderTrackingController extends Controller
     {
         if (!Gate::allows('订单管理-跟踪'))
             return redirect(url('/'));
-        $service = app('orderTrackingService');
-        if($request->filled('data')){
-            $request['ids'] = $request->input('data');
-            $request['data'] = null;
+        /** @var OrderTrackingService $service */
+        $service = app(OrderTrackingService::class);
+        $sql = $service->getSql($request->input());
+        $row = ['公司','订单号','WEB+订单号','提货日期','销售','客户','SKU','物料描述','数量','订单备注','重量','体积',
+            '托盘合计','运输方式','运输单号','到达城市','应送达时间','是否赶上卡班','到货情况','签收日期','签收单情况','备注'];
+        $column = ['owners_name','order_client_code','web_order_number','pick_up_at','sale','client','sku','sku_name','amount','order_remark',
+            'gross_weight','bulk','pallet_total','logistic_name','logistic_number','city','planning_sent_at','is_on_duty_shift','is_arrival','signed_at','receive_bill_status','remark'];
+        $mergeColumn = ['M'];
+        $rule = ["pick_up_at"=> "mysqlDate"];
+        $post = Http::post(config('go.export.url'),['type'=>'unify','sql'=>$sql, 'connection'=>'mysql','rule' => json_encode($rule),
+            'row'=>json_encode($row,JSON_UNESCAPED_UNICODE), 'column'=>json_encode($column),
+            'mergeColumn'=>json_encode($mergeColumn),'datum'=>'pick_up_at','createFormat'=>'merge']);
+        if ($post->status() == 500){
+            throw new Exception($post->header("Msg"));
         }
-        return $service->export($request->input());
-    }
+        return response($post,200, [
+            "Content-type"=>"application/octet-stream",
+            "Content-Disposition"=>"attachment; filename=订单跟踪件-".date('ymdHis').'.xlsx',
+        ]);
 
+    }
 }

+ 189 - 221
app/Http/Controllers/TestController.php

@@ -11,6 +11,7 @@ use App\CommodityBarcode;
 use App\Events\CancelOrder;
 use App\Log;
 use App\Logistic;
+use App\LogisticTiming;
 use App\OracleActAllocationDetails;
 use App\OracleBasCode;
 use App\OracleBasSKU;
@@ -21,6 +22,7 @@ use App\OracleDOCWaveDetails;
 use App\Order;
 use App\OrderIssue;
 use App\OrderPackage;
+use App\OrderPackageCommodities;
 use App\OrderTracking;
 use App\OrderTrackingOwner;
 use App\Owner;
@@ -28,14 +30,20 @@ use App\Package;
 use App\Process;
 use App\ProcessDaily;
 use App\ProcessStatistic;
+use App\Province;
 use App\RejectedBill;
 use App\RejectedBillItem;
+use App\Services\CityService;
+use App\Services\CommodityService;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\Services\InventoryCompareService;
 use App\Services\LogService;
+use App\Services\OracleActAllocationDetailService;
 use App\Services\OracleDOCOrderHeaderService;
+use App\Services\OrderIssuePerformanceService;
 use App\Services\OrderIssueService;
+use App\Services\OrderPackageCommoditiesService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
 use App\Services\OrderTrackingOwnerService;
@@ -100,10 +108,10 @@ class TestController extends Controller
     {
         /** @var OrderPackageService $orderPackageService */
         $orderPackageService = app('orderPackageService');
-        $ids = [741,739,738,736,735,733,732,731,730,729,728,725,724,723,721,720,719,718,717,715,714,713,712,711,710,705,703,702,701,700,699,698,696,694,693,692,691,690];
-        $orderIssues = OrderIssue::query()->whereIn('id',$ids)->get();
-        $order_ids = data_get($orderIssues,'*.order_id');
-        $orders = Order::query()->whereIn('id',$order_ids)->get();
+        $ids = [741, 739, 738, 736, 735, 733, 732, 731, 730, 729, 728, 725, 724, 723, 721, 720, 719, 718, 717, 715, 714, 713, 712, 711, 710, 705, 703, 702, 701, 700, 699, 698, 696, 694, 693, 692, 691, 690];
+        $orderIssues = OrderIssue::query()->whereIn('id', $ids)->get();
+        $order_ids = data_get($orderIssues, '*.order_id');
+        $orders = Order::query()->whereIn('id', $order_ids)->get();
         foreach ($orders as $item) {
             $orderPackageService->createdByOrder($item);
         }
@@ -126,34 +134,36 @@ class TestController extends Controller
         Cache::put('storedTest', $today);
         return "cacheing:'$today'<script>localStorage.setItem('storedTest','{$today}')</script>";
     }
+
     function getCache(Request $request)
     {
-        $cache=Cache::get('storedTest');
+        $cache = Cache::get('storedTest');
         return "cacheing get:'$cache'<script>document.write('<br>localStorage:'+localStorage.getItem('storedTest'))</script>";
     }
+
     function t1(Request $request)
     {
         {
-            $username=config('database.connections.oracle.username');
-            $password=config('database.connections.oracle.password');
-            $host=config('database.connections.oracle.host');
-            $service_name=config('database.connections.oracle.service_name');
-            $conn=oci_connect($username,$password,$host.'/'.$service_name); //连接oracle数据库
-            $IN_WarehouseID='';
-            $IN_TraceID='' ;
-            $IN_WavenNo='';
-            $IN_UserID='';
-            $IN_Language='';
-            $OUT_Return_Code='';
-            $sql_sp="begin SPCUS_EDI_WCS001(:IN_WarehouseID,:IN_Process_Action_C,:IN_Process_By_C,
+            $username = config('database.connections.oracle.username');
+            $password = config('database.connections.oracle.password');
+            $host = config('database.connections.oracle.host');
+            $service_name = config('database.connections.oracle.service_name');
+            $conn = oci_connect($username, $password, $host . '/' . $service_name); //连接oracle数据库
+            $IN_WarehouseID = '';
+            $IN_TraceID = '';
+            $IN_WavenNo = '';
+            $IN_UserID = '';
+            $IN_Language = '';
+            $OUT_Return_Code = '';
+            $sql_sp = "begin SPCUS_EDI_WCS001(:IN_WarehouseID,:IN_Process_Action_C,:IN_Process_By_C,
         :IN_WaveNO_C,:IN_OrderNO_C,:IN_OrderLineNO_C,:IN_AllocationDetailsID,:IN_Language,:IN_UserID,:OUT_Return_Code); end;";
             $stmt = oci_parse($conn, $sql_sp);
-            oci_bind_by_name($stmt,':IN_Warehouse',$IN_WarehouseID);
-            oci_bind_by_name($stmt,':IN_TraceID',$IN_TraceID);
-            oci_bind_by_name($stmt,':IN_WavenNo',$IN_WavenNo);
-            oci_bind_by_name($stmt,':IN_Language',$IN_Language);
-            oci_bind_by_name($stmt,':IN_UserID',$IN_UserID);
-            oci_bind_by_name($stmt,':OUT_Return_Code',$OUT_Return_Code);
+            oci_bind_by_name($stmt, ':IN_Warehouse', $IN_WarehouseID);
+            oci_bind_by_name($stmt, ':IN_TraceID', $IN_TraceID);
+            oci_bind_by_name($stmt, ':IN_WavenNo', $IN_WavenNo);
+            oci_bind_by_name($stmt, ':IN_Language', $IN_Language);
+            oci_bind_by_name($stmt, ':IN_UserID', $IN_UserID);
+            oci_bind_by_name($stmt, ':OUT_Return_Code', $OUT_Return_Code);
             return oci_execute($stmt);
 
         }
@@ -164,7 +174,7 @@ class TestController extends Controller
 
     function packageT(Request $request)
     {
-        $package=Package::where('created_at','<','2020-07-08')->whereNotNull('logistic_number')->first();
+        $package = Package::where('created_at', '<', '2020-07-08')->whereNotNull('logistic_number')->first();
         $package->fetchLogistic();
     }
 
@@ -178,27 +188,29 @@ class TestController extends Controller
 
     public function tj2(Request $request)
     {
-        $numbersesOfBatch=OracleDOCWaveDetails::select('picktotraceid as logistic_number','act_allocation_details.orderno')->where('doc_wave_details.waveno','W190630000042')
-            ->leftJoin('act_allocation_details','doc_wave_details.orderno','act_allocation_details.orderno')->get();
-
-        $oneIdxAsrsReceive=OracleDocOrderPackingSummary::where('traceid',$numbersesOfBatch[0]['logistic_number'])->first();
-        if(!$oneIdxAsrsReceive){
-            $inserts='';
-            $values=[];
-            foreach($numbersesOfBatch as $numbers){
+        $numbersesOfBatch = OracleDOCWaveDetails::select('picktotraceid as logistic_number', 'act_allocation_details.orderno')->where('doc_wave_details.waveno', 'W190630000042')
+            ->leftJoin('act_allocation_details', 'doc_wave_details.orderno', 'act_allocation_details.orderno')->get();
+
+        $oneIdxAsrsReceive = OracleDocOrderPackingSummary::where('traceid', $numbersesOfBatch[0]['logistic_number'])->first();
+        if (!$oneIdxAsrsReceive) {
+            $inserts = '';
+            $values = [];
+            foreach ($numbersesOfBatch as $numbers) {
                 $inserts .= " into doc_order_packing_summary (traceid,orderno,grossweight,addwho,addtime,editwho,edittime)values(?,?,?,?,?,?,?) ";
-                $values[] = $numbers['logistic_number']??'';
-                $values[] = $numbers['orderno']??'';
+                $values[] = $numbers['logistic_number'] ?? '';
+                $values[] = $numbers['orderno'] ?? '';
                 $values[] = 12;
                 $values[] = 'WAS';
                 $values[] = Carbon::now();
                 $values[] = 'WAS';
                 $values[] = Carbon::now();
             }
-            DB::connection('oracle')->insert("insert all {$inserts} select * from dual",$values);
-        }else{
-            $logisticNumbers=$numbersesOfBatch->map(function($numbers){return $numbers['logistic_number'];});
-            OracleDocOrderPackingSummary::whereIn('traceid',$logisticNumbers)->update(['grossweight'=>32]);
+            DB::connection('oracle')->insert("insert all {$inserts} select * from dual", $values);
+        } else {
+            $logisticNumbers = $numbersesOfBatch->map(function ($numbers) {
+                return $numbers['logistic_number'];
+            });
+            OracleDocOrderPackingSummary::whereIn('traceid', $logisticNumbers)->update(['grossweight' => 32]);
         }
     }
 
@@ -213,49 +225,50 @@ class TestController extends Controller
             'doc_order_header.customerid',
             'doc_order_header.Consigneename'
         ];
-        if(''){
-            $resultOracleObj=OracleDOCOrderHeader::select($fields)->where('orderno','SO200603004708');
-        }else{
-            $resultOracleObj=OracleActAllocationDetails::select($fields);
-            $resultOracleObj->where('picktotraceid','546152742096');
-            $resultOracleObj->leftJoin('DOC_Order_Header','act_allocation_details.orderno','doc_order_header.orderno');
+        if ('') {
+            $resultOracleObj = OracleDOCOrderHeader::select($fields)->where('orderno', 'SO200603004708');
+        } else {
+            $resultOracleObj = OracleActAllocationDetails::select($fields);
+            $resultOracleObj->where('picktotraceid', '546152742096');
+            $resultOracleObj->leftJoin('DOC_Order_Header', 'act_allocation_details.orderno', 'doc_order_header.orderno');
         }
-        $_temOracleInfo=$resultOracleObj->first();
+        $_temOracleInfo = $resultOracleObj->first();
 
         dd($_temOracleInfo);
     }
 
-    public function mergerPackageData(){
-        ini_set('max_execution_time',36000);
-        ini_set('memory_limit','1526M');
+    public function mergerPackageData()
+    {
+        ini_set('max_execution_time', 36000);
+        ini_set('memory_limit', '1526M');
         $number = 3000;
         $start_at = 1;
-        $sum = Package::query()->where('id','>', $start_at)->count();
+        $sum = Package::query()->where('id', '>', $start_at)->count();
         $len = ceil($sum / $number);
         $id = $start_at;
-        for ($i = 1;$i <= $len; $i++){
-            $packages = Package::query()->orderBy('id')->where('id','>',$id)->limit($number)->get();
+        for ($i = 1; $i <= $len; $i++) {
+            $packages = Package::query()->orderBy('id')->where('id', '>', $id)->limit($number)->get();
             $error = [];
-            foreach ($packages as $package){
+            foreach ($packages as $package) {
                 /** @var $service OrderPackageService */
                 $service = app('orderPackageService');
-                $orderPackage =  $service->firstOrCreate($package->logistic_number,
-                    ['batch_number'=>$package->batch_number,
-                        'batch_rule'=>$package->batch_rule,
-                        'bulk'=>$package->bulk,
-                        'weight'=>$package->weight,
-                        'length'=>$package->length,
-                        'width'=>$package->width,
-                        'height'=>$package->height,
-                        'paper_box_id'=>$package->paper_box_id,
-                        'measuring_machine_id'=>$package->measuring_machine_id,
-                        'weighed_at'=>$package->weighed_at,
-                        'status'=>$package->status]);
-                if (!$orderPackage)array_push($error,$package->id);
+                $orderPackage = $service->firstOrCreate($package->logistic_number,
+                    ['batch_number' => $package->batch_number,
+                        'batch_rule' => $package->batch_rule,
+                        'bulk' => $package->bulk,
+                        'weight' => $package->weight,
+                        'length' => $package->length,
+                        'width' => $package->width,
+                        'height' => $package->height,
+                        'paper_box_id' => $package->paper_box_id,
+                        'measuring_machine_id' => $package->measuring_machine_id,
+                        'weighed_at' => $package->weighed_at,
+                        'status' => $package->status]);
+                if (!$orderPackage) array_push($error, $package->id);
             }
-            LogService::log(__METHOD__,"同步时WMS中未找到这些订单",json_encode($error));
-            $id = $packages[count($packages)-1]->id;
-            echo $number.' a bunch done at:'.now()->toFormattedDateString().'<br>';
+            LogService::log(__METHOD__, "同步时WMS中未找到这些订单", json_encode($error));
+            $id = $packages[count($packages) - 1]->id;
+            echo $number . ' a bunch done at:' . now()->toFormattedDateString() . '<br>';
         }
     }
 
@@ -330,112 +343,117 @@ class TestController extends Controller
         });
     }
 
-    function test(){
+    function test()
+    {
         $ids = [];
-        $logs = Log::query()->select('description')->where('type','同步时WMS中未找到这些订单')->get();
-        foreach ($logs as $log){
+        $logs = Log::query()->select('description')->where('type', '同步时WMS中未找到这些订单')->get();
+        foreach ($logs as $log) {
             $arr = [];
-            eval("\$arr = ".$log->description.'; ');
-            if (count($arr) < 1)continue;
-            $ids = array_merge($ids,$arr);
+            eval("\$arr = " . $log->description . '; ');
+            if (count($arr) < 1) continue;
+            $ids = array_merge($ids, $arr);
         }
         $ids = array_unique($ids);
         $error = [];
-        foreach($ids as $id){
+        foreach ($ids as $id) {
             $package = Package::query()->find($id);
             /** @var OrderPackageService */
-            $orderPackage =  app('orderPackageService')->firstOrCreate($package->logistic_number,
-                ['batch_number'=>$package->batch_number,
-                    'batch_rule'=>$package->batch_rule,
-                    'bulk'=>$package->bulk,
-                    'weight'=>$package->weight,
-                    'length'=>$package->length,
-                    'width'=>$package->width,
-                    'height'=>$package->height,
-                    'paper_box_id'=>$package->paper_box_id,
-                    'measuring_machine_id'=>$package->measuring_machine_id,
-                    'weighed_at'=>$package->weighed_at,
-                    'status'=>$package->status]);
-            if (!$orderPackage)array_push($error,$package->id);
+            $orderPackage = app('orderPackageService')->firstOrCreate($package->logistic_number,
+                ['batch_number' => $package->batch_number,
+                    'batch_rule' => $package->batch_rule,
+                    'bulk' => $package->bulk,
+                    'weight' => $package->weight,
+                    'length' => $package->length,
+                    'width' => $package->width,
+                    'height' => $package->height,
+                    'paper_box_id' => $package->paper_box_id,
+                    'measuring_machine_id' => $package->measuring_machine_id,
+                    'weighed_at' => $package->weighed_at,
+                    'status' => $package->status]);
+            if (!$orderPackage) array_push($error, $package->id);
         }
-        if (count($error) > 0)LogService::log(__METHOD__,"同步时WMS中未找到这些订单_two",json_encode($error));
+        if (count($error) > 0) LogService::log(__METHOD__, "同步时WMS中未找到这些订单_two", json_encode($error));
     }
 
-    function test1(){
+    function test1()
+    {
         $statistics = ProcessStatistic::query()->whereNull('revenue')->get();
-        $id = array_column($statistics->toArray(),'process_id');
-        $processes = Process::query()->where(function (Builder $query){
-            $query->where('status','待交接')->orWhere('status','交接完成');
-        })->whereIn('id',$id)->get();
+        $id = array_column($statistics->toArray(), 'process_id');
+        $processes = Process::query()->where(function (Builder $query) {
+            $query->where('status', '待交接')->orWhere('status', '交接完成');
+        })->whereIn('id', $id)->get();
         $sign_end = true;
-        foreach ($processes as $process){
-            if (count($process->processDailies)>0){
-                $completed_amount=0;
-                foreach ($process->processDailies as $processDaily){
-                    $completed_amount=$completed_amount+($processDaily->output);
+        foreach ($processes as $process) {
+            if (count($process->processDailies) > 0) {
+                $completed_amount = 0;
+                foreach ($process->processDailies as $processDaily) {
+                    $completed_amount = $completed_amount + ($processDaily->output);
                 }
-                $process->completed_amount=$completed_amount;
+                $process->completed_amount = $completed_amount;
             }
             //统计:
-            $revenue=($process->unit_price)*($process->completed_amount);   //收入合计
-            $processDailies=ProcessDaily::with('processDailyParticipants')->where('process_id',$process->id)->where('output','>',0)->get();
-            $duration_days=count($processDailies);      //完成天数
-            $duration_man_hours=0;      //总工时
-            $total_cost=0;              //合计成本
-            foreach ($processDailies as $processDailyOne){
-                foreach ($processDailyOne->processDailyParticipants as $processDailyParticipant){
+            $revenue = ($process->unit_price) * ($process->completed_amount);   //收入合计
+            $processDailies = ProcessDaily::with('processDailyParticipants')->where('process_id', $process->id)->where('output', '>', 0)->get();
+            $duration_days = count($processDailies);      //完成天数
+            $duration_man_hours = 0;      //总工时
+            $total_cost = 0;              //合计成本
+            foreach ($processDailies as $processDailyOne) {
+                foreach ($processDailyOne->processDailyParticipants as $processDailyParticipant) {
                     if (!$processDailyParticipant->unit_price && !$processDailyParticipant->hour_price) continue;
                     $duration_man_hours += $processDailyParticipant->hour_count;
-                    if ($processDailyParticipant->unit_count){
-                        $total_cost += ($processDailyParticipant->unit_count)*($processDailyParticipant->unit_price);
+                    if ($processDailyParticipant->unit_count) {
+                        $total_cost += ($processDailyParticipant->unit_count) * ($processDailyParticipant->unit_price);
                         continue;
                     }
-                    $total_cost += ($processDailyParticipant->hour_count)*($processDailyParticipant->hour_price);
+                    $total_cost += ($processDailyParticipant->hour_count) * ($processDailyParticipant->hour_price);
                 }
             };
-            $processStatistic=ProcessStatistic::query()->find($process->id);
-            $processStatistic->revenue=$revenue;
-            $processStatistic->duration_days=$duration_days;
-            $processStatistic->duration_man_hours=$duration_man_hours;
+            $processStatistic = ProcessStatistic::query()->find($process->id);
+            $processStatistic->revenue = $revenue;
+            $processStatistic->duration_days = $duration_days;
+            $processStatistic->duration_man_hours = $duration_man_hours;
             if ($sign_end) $processStatistic->ended_at = date('Y-m-d H:i:s');
-            if (!$revenue || !$total_cost){
+            if (!$revenue || !$total_cost) {
                 $processStatistic->update();
                 continue;
             }
-            $gross_profit=$revenue-$total_cost; //毛利润
-            if ($gross_profit!=0)$gross_profit_rate=$gross_profit/$revenue;  //毛利率;
-            else $gross_profit_rate=0;
-            $processStatistic->total_cost=$total_cost;
-            $processStatistic->gross_profit=$gross_profit;
-            $processStatistic->gross_profit_rate=$gross_profit_rate;
+            $gross_profit = $revenue - $total_cost; //毛利润
+            if ($gross_profit != 0) $gross_profit_rate = $gross_profit / $revenue;  //毛利率;
+            else $gross_profit_rate = 0;
+            $processStatistic->total_cost = $total_cost;
+            $processStatistic->gross_profit = $gross_profit;
+            $processStatistic->gross_profit_rate = $gross_profit_rate;
             $processStatistic->update();
-            $this->log(__METHOD__,"修改二次加工单统计单_".__FUNCTION__,json_encode($processStatistic),Auth::user()['id']);
+            $this->log(__METHOD__, "修改二次加工单统计单_" . __FUNCTION__, json_encode($processStatistic), Auth::user()['id']);
         }
     }
 
-    private function cleanBarcode(){
+    private function cleanBarcode()
+    {
 
-        $logCommodityBarcodes = CommodityBarcode::query()->where('code',"")->get();
-        if (count($logCommodityBarcodes) > 0)LogService::log(__METHOD__,"纠正商品-删除空条码",json_encode($logCommodityBarcodes,JSON_UNESCAPED_UNICODE));
+        $logCommodityBarcodes = CommodityBarcode::query()->where('code', "")->get();
+        if (count($logCommodityBarcodes) > 0) LogService::log(__METHOD__, "纠正商品-删除空条码", json_encode($logCommodityBarcodes, JSON_UNESCAPED_UNICODE));
 
-        CommodityBarcode::query()->where('code',"")->delete();
+        CommodityBarcode::query()->where('code', "")->delete();
         $barcodes = DB::select(DB::raw('select * from commodity_barcodes c
 where (c.code,c.commodity_id) in (select code,commodity_id from commodity_barcodes group by code,commodity_id having count(*) > 1) order by commodity_id'));
         $barcodeMap = [];
         $barcodeDelete = [];
-        foreach ($barcodes as $barcode){
-            if (isset($barcodeMap[$barcode->code.'_'.$barcode->commodity_id]))$barcodeDelete[] = $barcode->id;
-            else $barcodeMap[$barcode->code.'_'.$barcode->commodity_id] = $barcode->id;
+        foreach ($barcodes as $barcode) {
+            if (isset($barcodeMap[$barcode->code . '_' . $barcode->commodity_id])) $barcodeDelete[] = $barcode->id;
+            else $barcodeMap[$barcode->code . '_' . $barcode->commodity_id] = $barcode->id;
         }
 
-        $logCommodityBarcodes = CommodityBarcode::query()->whereIn('id',$barcodeDelete)->get();
-        if (count($logCommodityBarcodes) > 0)LogService::log(__METHOD__,"纠正商品-删除重复条码",json_encode($logCommodityBarcodes,JSON_UNESCAPED_UNICODE));
+        $logCommodityBarcodes = CommodityBarcode::query()->whereIn('id', $barcodeDelete)->get();
+        if (count($logCommodityBarcodes) > 0) LogService::log(__METHOD__, "纠正商品-删除重复条码", json_encode($logCommodityBarcodes, JSON_UNESCAPED_UNICODE));
 
         CommodityBarcode::destroy($barcodeDelete);
     }
-    public function correctCommodity(){
-        ini_set('max_execution_time',2500);
-        ini_set('memory_limit','1526M');
+
+    public function correctCommodity()
+    {
+        ini_set('max_execution_time', 2500);
+        ini_set('memory_limit', '1526M');
         //清理冗余条码
         $this->cleanBarcode();
 
@@ -447,58 +465,58 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $commodityMap = [];
         //需要删除项
         $commodityDelete = [];
-        foreach ($commodities as $index => $commodity){
-            $commodity->barcode_code=strtolower(trim($commodity->barcode_code));
+        foreach ($commodities as $index => $commodity) {
+            $commodity->barcode_code = strtolower(trim($commodity->barcode_code));
             //货主+条码 为唯一key值 设想正常数据下同货主不应该有同条码
-            $key = $commodity->owner_id.'_'.$commodity->barcode_code;
+            $key = $commodity->owner_id . '_' . $commodity->barcode_code;
             //使用map池对比为重复数据
-            if(isset($commodityMap[$key])){
+            if (isset($commodityMap[$key])) {
                 //获取下标指针指向的源数据
                 $c = $commodities[$commodityMap[$key]];
                 //源数据不符合规范,当前数据替换掉它
-                if (($c->sku == null || $c->sku == "") && ($commodity->sku != null && $commodity->sku != "")){
+                if (($c->sku == null || $c->sku == "") && ($commodity->sku != null && $commodity->sku != "")) {
                     $commodityDelete[] = $commodityMap[$key];
                     $commodityMap[$key] = $index;
-                }else{
+                } else {
                     //当前数据比源数据更符合预期,替换掉
-                    if (($c->sku == $commodity->sku) && (strlen($c->name) < strlen($commodity->name))){
+                    if (($c->sku == $commodity->sku) && (strlen($c->name) < strlen($commodity->name))) {
                         $commodityDelete[] = $commodityMap[$key];
                         $commodityMap[$key] = $index;
-                    }else{
+                    } else {
                         //扔进处理池
                         $commodityDelete[] = $index;
                     }
                 }
-            //第一次出现的新数据,val为下标,当作指针指向源数据
-            }else $commodityMap[$key] = $index;
+                //第一次出现的新数据,val为下标,当作指针指向源数据
+            } else $commodityMap[$key] = $index;
         }
         $createBarcodes = []; //批量生成条码
         $deleteCommodities = []; //批量删除商品及商品条码
 
         $updateCommodities = [];
-        foreach ($commodityDelete as $index){
+        foreach ($commodityDelete as $index) {
             //获取到被处理数据 与 目标数据
             $del = $commodities[$index];
-            $target = $commodities[$commodityMap[$del->owner_id.'_'.$del->barcode_code]];
+            $target = $commodities[$commodityMap[$del->owner_id . '_' . $del->barcode_code]];
 
             //记录ID删除商品与条码
             $deleteCommodities[] = $del->commodity_id;
 
             //有效条码合并
             $barcodes = DB::select(DB::raw("select * from
-            (select * from commodity_barcodes where commodity_id = ".$del->commodity_id.")a
+            (select * from commodity_barcodes where commodity_id = " . $del->commodity_id . ")a
             where (select count(1) as num from commodity_barcodes b
-            where commodity_id = ".$target->commodity_id." and b.code = a.code) = 0"));
-            if (count($barcodes) > 0){
-                foreach ($barcodes as $barcode){
-                    $createBarcodes[] = ['code'=>$barcode->code, 'commodity_id'=>$target->commodity_id];
+            where commodity_id = " . $target->commodity_id . " and b.code = a.code) = 0"));
+            if (count($barcodes) > 0) {
+                foreach ($barcodes as $barcode) {
+                    $createBarcodes[] = ['code' => $barcode->code, 'commodity_id' => $target->commodity_id];
                 }
             }
             $updateCommodities[$del->commodity_id] = $target->commodity_id;
         }
-        if (count($updateCommodities) > 0){
-            $targets=array_chunk($updateCommodities,1000);
-            foreach($targets as $targetCommodities){
+        if (count($updateCommodities) > 0) {
+            $targets = array_chunk($updateCommodities, 1000);
+            foreach ($targets as $targetCommodities) {
                 app('inventoryAccountMissionService')->batchUpdateItself('commodity_id', $targetCommodities);//批量更新库存盘点任务
                 app('inventoryCompareService')->batchUpdateItself('commodity_id', $targetCommodities);//批量更新库存对比
                 app('inventoryDailyLogService')->batchUpdateItself('commodity_id', $targetCommodities);//批量更新库存每日记录
@@ -508,16 +526,16 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
             }
         }
 
-        if (count($createBarcodes) > 0)LogService::log(__METHOD__,"纠正商品-录入合并条码",json_encode(data_get($createBarcodes,'*.id'),JSON_UNESCAPED_UNICODE));
+        if (count($createBarcodes) > 0) LogService::log(__METHOD__, "纠正商品-录入合并条码", json_encode(data_get($createBarcodes, '*.id'), JSON_UNESCAPED_UNICODE));
 
         CommodityBarcode::query()->insert($createBarcodes);
-        $logCommodityBarcodes = CommodityBarcode::query()->whereIn('commodity_id',$deleteCommodities)->get();
-        if (count($logCommodityBarcodes) > 0)LogService::log(__METHOD__,"纠正商品-删除无用商品条码",json_encode(data_get($logCommodityBarcodes,'*.id'),JSON_UNESCAPED_UNICODE));
+        $logCommodityBarcodes = CommodityBarcode::query()->whereIn('commodity_id', $deleteCommodities)->get();
+        if (count($logCommodityBarcodes) > 0) LogService::log(__METHOD__, "纠正商品-删除无用商品条码", json_encode(data_get($logCommodityBarcodes, '*.id'), JSON_UNESCAPED_UNICODE));
 
-        CommodityBarcode::query()->whereIn('commodity_id',$deleteCommodities)->delete();
+        CommodityBarcode::query()->whereIn('commodity_id', $deleteCommodities)->delete();
 
 //        $logCommodities = Commodity::query()->whereIn('id',$deleteCommodities)->get();
-        if (count($deleteCommodities) > 0)LogService::log(__METHOD__,"纠正商品-删除无用商品",json_encode($deleteCommodities,JSON_UNESCAPED_UNICODE));
+        if (count($deleteCommodities) > 0) LogService::log(__METHOD__, "纠正商品-删除无用商品", json_encode($deleteCommodities, JSON_UNESCAPED_UNICODE));
 
         Commodity::destroy($deleteCommodities);
     }
@@ -562,7 +580,7 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
         if ($socket < 0) {
             echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
-        }else {
+        } else {
             echo "OK.\n";
         }
 
@@ -570,15 +588,15 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $result = socket_connect($socket, $ip, $port);
         if ($result < 0) {
             echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
-        }else {
+        } else {
             echo "连接OK\n";
         }
         $b = microtime(true);
-        echo "连接耗时:".($b-$a)."\n";
+        echo "连接耗时:" . ($b - $a) . "\n";
         $content = Commodity::query()->limit(200)->get();
 
-        $c= microtime(true);
-        echo "查询数据耗时:".($c-$b)."\n";
+        $c = microtime(true);
+        echo "查询数据耗时:" . ($c - $b) . "\n";
         $content->toArray();
         /*$chunks=$content->chunk(100);
         foreach ($chunks as $chunk){
@@ -586,11 +604,11 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
             var_dump(mb_strlen($chunk->toJson()));
             //socket_write($socket, $chunk->toJson(), mb_strlen($chunk->toJson()));
         }*/
-        $d= microtime(true);
-        echo "发送数据耗时:".($d-$c)."\n";
+        $d = microtime(true);
+        echo "发送数据耗时:" . ($d - $c) . "\n";
         socket_close($socket);
-        $e= microtime(true);
-        echo "共耗时:".($e-$a)."\n";
+        $e = microtime(true);
+        echo "共耗时:" . ($e - $a) . "\n";
     }
 
 
@@ -601,68 +619,18 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         /** @var OrderService $orderService */
         $orderService = app(OrderService::class);
         $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
-        $startDate = \Illuminate\Support\Carbon::parse('2020-09-30 00:00:00')->toDateTimeString();
+        $startDate = \Illuminate\Support\Carbon::parse('2020-10-10 00:00:00')->toDateTimeString();
         $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode'])
             ->where('addTime', '>=', $startDate)
             ->whereIn('customerID', data_get($owners, '*.code'))
             ->get();
-        $orderService->createByWmsOrder($orderHeaders);
-        $orderTrackingService->createByWmsOrderHeader($orderHeaders);
         $orderService->updateByWmsOrders($orderHeaders);
         $orderTrackingService->updateByWmsOrderHeaders($orderHeaders);
     }
 
-    public function usage(){
-        dd(Request::all());
-        $users=User::query();
-    }
-
-    public function orderTrckingOwnerAll(){
-        $owners = Owner::all();
-        foreach ($owners as $owner) {
-            $orderTrackingOwner =  OrderTrackingOwner::query()->where('owner_id',$owner->id)->first();
-            if($orderTrackingOwner == null){
-                OrderTrackingOwner::query()->create(['owner_id'=>$owner->id,'status'=>'启用']);
-            }else{
-                if($orderTrackingOwner->status == '禁用'){
-                    $orderTrackingOwner->status = '启用';
-                }
-            }
-        }
-    }
-
-    public function updateOrderTracking(){
-        $orderTrackings = OrderTracking::query()->with('commodities.package.order')->get();
-        foreach ($orderTrackings as $orderTracking) {
-            $order = $orderTracking->commodities->package->order;
-            $order_code = $order->client_code;
-            $orderTracking->update(['order_client_code'=>$order_code]);
-        }
-    }
-
-    public function deleteWmsOrderIsCancel()
-    {
-        $startDate = \Illuminate\Support\Carbon::parse('2020-09-01 00:00:00')->toDateTimeString();
-        $endDate = \Illuminate\Support\Carbon::parse('2020-10-13 00:00:00')->toDateTimeString();
-        $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
-        $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
-            ->where('addTime','>=',$startDate)
-            ->where('addTime','<=',$endDate)
-            ->whereIn('customerID',data_get($owners,'*.code'))
-            ->get();
-        app(OrderTrackingService::class)->删除订单追踪_订单取消($orderHeaders);
-    }
-
-    public function deleteRedundantOrderTrackingAndOrderInfo()
+    public function usage()
     {
-        $startDate = \Illuminate\Support\Carbon::parse('2020-10-01 00:00:00')->toDateTimeString();
-        $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
-        $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
-            ->where('addTime','>=',$startDate)
-            ->whereIn('customerID',data_get($owners,'*.code'))
-            ->get();
-        app(OrderPackageService::class)->删除多余的订单包裹_根据WMS订单($orderHeaders);
+        dd(Request::all());
     }
 
-
 }

+ 2 - 1
app/Http/Controllers/api/thirdPart/flux/StoreController.php

@@ -94,10 +94,11 @@ class StoreController extends Controller
             $sendingJson = json_decode($json,true);
             $url=url(config('api.flux.receive.new'));
 //            (new Controller())->log($METHOD,$FUNCTION,$store['asn_code'].'||' .json_encode($sendingJson));
+            Controller::logS(__METHOD__, __FUNCTION__, '快递入库请求WMS接口开始:' . $store['asn_code']);
             $response = Zttp::post($url, $sendingJson);
+            Controller::logS(__METHOD__, __FUNCTION__, '快递入库请求WMS接口结束:' . $store['asn_code'].'||'.$response->body());
             $noIssues=true;
             $json = $response->json();
-            (new Controller())->log($METHOD,$FUNCTION,$response->body());
             if(!$json||!isset($json['Response'])||!$json['Response']['return']['returnFlag']=='1'){
                 $noIssues=false;
             }

+ 2 - 0
app/Imports/StoreCheckingReceiveImport.php

@@ -7,6 +7,7 @@ use App\Services\CommodityBarcodeService;
 use App\Services\CommodityService;
 use App\Services\LogService;
 use Carbon\Carbon;
+use Illuminate\Support\Arr;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Cache;
 use Maatwebsite\Excel\Concerns\ToCollection;
@@ -121,6 +122,7 @@ class StoreCheckingReceiveImport implements ToCollection,WithHeadingRow
         $commodityBarcodeService = app('commodityBarcodeService');
         $commodityBarCodes = $commodityBarcodeService->getCommodities($barcodes, $owner->id);
         foreach ($commodityBarCodes as $barcode){
+            if(!isset($commodities[$barcode->code]))continue;
             foreach ($commodities[$barcode->code] as $index){
                 $items[$index]["commodity_id"] = $barcode->commodity_id;
                 unset($items[$index]["SKU"]);

+ 28 - 0
app/LogisticTiming.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+class LogisticTiming extends Model
+{
+    //
+    protected $fillable = [
+        'logistic_id','to_province_id','to_city_id','days_at_working'
+    ];
+
+    public function logistic()
+    {
+        return $this->belongsTo(Logistic::class);
+    }
+
+    public function province()
+    {
+        return $this->belongsTo(Province::class,'to_province_id','id');
+    }
+
+    public function city()
+    {
+        return $this->belongsTo(City::class,'to_city_id','id');
+    }
+}

+ 10 - 8
app/OrderIssue.php

@@ -12,7 +12,7 @@ class OrderIssue extends Model
 
     protected $fillable = [
         'order_id', 'created_at', 'rejected_bill_id', 'rejecting_status', 'result_explain','logistic_number_return',
-        'situation_explain', 'order_issue_type_id', 'second_order_id', 'is_new_rejecting',
+        'situation_explain', 'order_issue_type_id', 'second_order_id', 'is_new_rejecting','second_client_no',
         'final_status', 'logistic_indemnity_money', 'logistic_express_remission', 'baoshi_indemnity_money', 'baoshi_express_remission', 'user_workgroup_id'];
 
     protected $appends = [
@@ -56,7 +56,7 @@ class OrderIssue extends Model
 
     public function secondOrder()
     {
-        return $this->belongsTo('App\Order', 'second_order_id', 'id');
+        return $this->hasOne('App\Order', 'client_code', 'second_client_no');
     }
 
     public function getSecondLogisticNumberAttribute()
@@ -106,22 +106,24 @@ class OrderIssue extends Model
                 ->whereHas('rejectedBill.orderIssue', function ($query) use ($orderIssueId) {
                     $query->where('id',$orderIssueId);
                 })->get();
-            $barcode_goods = data_get($rejectedBillItems,'*.barcode_goods');
-
             if($rejectedBillItems->where('quality.name','残次')->count() > 0){
                 $this->update(['rejecting_status' => '差异退回']);
                 return;
             }
-
-            $commodityBarcode = CommodityBarcode::query()->with('commodity')->whereIn('code',$barcode_goods)->get();
             if (count($rejectedBillItems) == 0) {
                 $this->update(['rejecting_status' => '未退回']);
                 return;
             }
+            $barcodeGoods = data_get($rejectedBillItems,'*.barcode_goods');
+            $commodityBarcodes = CommodityBarcode::query()->with('commodity')->whereIn('code',$barcodeGoods)->get();
+            $commodities = Commodity::query()->whereIn('sku',$barcodeGoods)->get();
+
             foreach ($rejectedBillItems as $item) {
                 $barcode_goods = (string)$item->barcode_goods;
-                if($commodityBarcode->where('code',$barcode_goods)->count()){
-                    $barcode_goods = $commodityBarcode->where('code',$barcode_goods)->first()->commodity->sku;
+                $commodity = $commodities->where('sku',$barcode_goods)->first();
+                if(!$commodity){
+                    $commodityBarcode = $commodityBarcodes->where('code',$barcode_goods)->first();
+                    $barcode_goods = $commodityBarcode->commodity->sku ?? $barcode_goods;
                 }
                 if (!isset($rejectedItems[$barcode_goods])){
                     $rejectedItems[$barcode_goods] = 0;

+ 5 - 0
app/Owner.php

@@ -24,6 +24,11 @@ class Owner extends Model
         $ownerIds=$user->getPermittingOwnerIdsAttribute();
         return $query->whereIn('id',$ownerIds);
     }
+
+    /**
+     * 退货管理里,客户审核的代码,是拼音+日期+计数,计数的后缀就是checking_count
+     * @return int|mixed
+     */
     public function getIncreasedCheckingCount(){
         $this['checking_count']=$this['checking_count']+1;
         $this->update();

+ 23 - 0
app/Services/CityService.php

@@ -6,6 +6,8 @@ use App\City;
 
 Class CityService
 {
+    public static $cities = ['汕头','汕尾'];
+
     /*
      * array | string $column
      * 默认一些select字段,可传递string 或 array来指定select字段
@@ -21,4 +23,25 @@ Class CityService
         return City::query()->find($id);
     }
 
+    public function findByName($name)
+    {
+        $city = City::query()->where('name',$name)->first();
+        if(isset($city))return $city;
+        foreach (CityService::$cities as $city) {
+            if(strstr($city,$name) != null){
+               return City::query()->where('name',$city)->first();
+            }
+        }
+        if(str_ends_with($name,'自治州')){
+            $city_name = str_split($name,strpos($name,'自治州'))[0];
+            return City::query()->where('name','like',$city_name.'%')->first();
+        }
+        if(str_ends_with($name,'市')){
+            $city_name = str_split($name,strpos($name,'市'))[0];
+            return City::query()->where('name','like',$city_name.'%')->first();
+        }
+        return null;
+    }
+
+
 }

+ 4 - 4
app/Services/CommodityBarcodeService.php

@@ -1,11 +1,11 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\CommodityBarcode;
 
 Class CommodityBarcodeService
-{ 
+{
     public function getCommodities(array $codes, $owner_id){
         return CommodityBarcode::query()->whereHas('commodity',function ($query)use($owner_id){
             $query->where('owner_id',$owner_id);
@@ -44,4 +44,4 @@ Class CommodityBarcodeService
     {
         return CommodityBarcode::query()->create($params);
     }
-}
+}

+ 40 - 0
app/Services/LogisticTimingService.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Services;
+
+use App\Logistic;
+use App\LogisticTiming;
+use App\Province;
+
+Class LogisticTimingService
+{
+    /**
+     * @param string $cityName
+     * @param string $provinceName
+     * @param string $logisticName
+     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
+     */
+    public function findByParams($cityName,$provinceName,$logisticId)
+    {
+        $logistic = Logistic::query()->where('id',$logisticId)->first();
+        if( str_starts_with($logistic->name,'顺丰')){
+            $city = app(CityService::class)->findByName($cityName);
+            $province = app(ProvinceService::class)->findByName($provinceName);
+            if(isset($city) && isset($province)){
+                return $this->findByCityIdAndProvinceIdAndLogisticName($city->id,$province->id,$logisticId);
+            }
+            return null;
+        }
+        $city = app(CityService::class)->findByName($cityName);
+        $province = app(ProvinceService::class)->findByName($provinceName);
+        if($city == null|| $province==null)return null;
+        return  $this->findByCityIdAndProvinceIdAndLogisticName($city->id,$province->id,$logisticId);
+    }
+
+    public function findByCityIdAndProvinceIdAndLogisticName($cityId,$provinceId,$logisticId)
+    {
+        return LogisticTiming::query()->where('to_province_id',$provinceId)->where('to_city_id',$cityId)->where('logistic_id',$logisticId)->first();
+    }
+
+
+}

+ 36 - 72
app/Services/OrderIssuePerformanceService.php

@@ -11,59 +11,17 @@ use Carbon\Carbon;
 use Illuminate\Pagination\LengthAwarePaginator;
 use Illuminate\Pagination\Paginator;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 use Maatwebsite\Excel\Facades\Excel;
 
 
 class OrderIssuePerformanceService
 {
-    public function getQuery(array $queryParam)
-    {
-        $user_id = $queryParam['user_id'] ?? '';
-        $owner_id = $queryParam['owner_id'] ?? '';
-        $timeFrame = $queryParam['timeFrame'] ?? '';
-        unset($queryParam['owner_id'], $queryParam['user_id'], $queryParam['timeFrame'],$queryParam['_token']);
-        $user = Auth::user();
-        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
-        $orderIssueProcessLog = OrderIssueProcessLog::query()->with(['user' => function ($query) use ($user_id) {
-            if ($user_id) {
-                $query->where('id', $user_id);
-            }
-        }, 'orderIssue.order.owner' => function ($query) use ($owner_id,$owner_ids) {
-            if ($owner_id && in_array($owner_id,$owner_ids) ) {
-                 $query->where('id', $owner_id);
-            }else{
-                $query->whereIn('id',$owner_ids);
-            }
-        }]);
-        $columnQueryRules = [
-            'create_start' => ['alias' => 'created_at', 'startDate' => ' 00:00:00'],
-            'create_end' => ['alias' => 'created_at', 'endDate' => ' 23:59:59'],
-        ];
-        if ($timeFrame ?? false) {
-            if ($timeFrame == 'day') {
-                $queryParam['create_start'] = date('Y-m-d');
-                $queryParam['create_end'] = date('Y-m-d');
-            } else if ($timeFrame == 'yesterday') {
-                $queryParam['create_start'] = date('Y-m-d', strtotime('-1 day'));
-                $queryParam['create_end'] = date('Y-m-d', strtotime('-1 day'));
-            } else if ($timeFrame) {
-                $date = date('Y-m-d', strtotime('-1 weeks', strtotime('Monday')));
-                $queryParam['create_start'] = $date;
-                $queryParam['create_end'] = date('Y-m-d');
-            } else if ($timeFrame == 'month') {
-                $queryParam['create_start'] = date('Y-m-1');
-                $queryParam['create_end'] = date('Y-m-d');
-            }
-        }
-        $orderIssueProcessLog = app(QueryService::class)->query($queryParam, $orderIssueProcessLog, $columnQueryRules);
-        return $orderIssueProcessLog;
-    }
-
     public function paginate(array $params)
     {
         $paginate = $params['paginate'] ?? 50;
         $page = $params['page'] ?? 1;
-        $data = $this->getAll($params);
+        $data = $this->queryAll($params);
         $collection = collect($data);
         $list = $collection->slice(($page - 1) * $paginate, $paginate)->all();
         $option = ['path' => Paginator::resolveCurrentPath()];
@@ -71,36 +29,42 @@ class OrderIssuePerformanceService
         return $paginate;
     }
 
-    public function getAll($params)
+    public function queryAll($params)
     {
-        $query  =  OrderIssueProcessLog::query()->selectRaw('user_id')->groupBy('user_id')->get();
-        $user_ids =  $query->map(function($value){
-            return $value->user_id;
-        });
-        $owners = Owner::query()->with('order.issue')->whereHas('order.issue')->get();
-        $data = [];
-        $total = 0;
-        foreach ($user_ids as $key => $user_id) {
-            $params['user_id'] = $user_id;
-            $user = User::query()->find($user_id);
-            $orderIssueProcessLog = $this->getQuery($params)->get();
-            foreach ($owners as $owner) {
-                $createCount = $orderIssueProcessLog->where('user_id', $user_id)->where('orderIssue.order.owner.id', $owner['id'])->where('type', '创建')->count(); //创建
-                $endCount = $orderIssueProcessLog->where('user_id', $user_id)->where('orderIssue.order.owner.id', $owner['id'])->where('type', '结束')->count(); //结束
-                $treatmentCount = $orderIssueProcessLog->where('user_id', $user_id)->where('orderIssue.order.owner.id', $owner['id'])->where('type', '处理')->count(); //处理
-                $sum = $createCount + $endCount + $treatmentCount;
-                if ($sum == 0) {continue;}
-                $total++;
-                $data[] = ['id'=>$total,'user' => $user['name'], 'owner' => $owner['name'], 'createCount' => $createCount, 'endCount' => $endCount, 'treatmentCount' => $treatmentCount, 'sum' => $sum];
-            }
-        }
-        return $data;
+        $sql = $this->getSql($params);
+        return $result = DB::select($sql);
     }
 
-    public function exportPerformance(array $params)
-    {
-        $performance = $this->getAll($params);
-        $row = [['user'=>'客服','owner'=>'客户','createCount'=>'创建数','treatmentCount' =>'处理数','endCount'=>'完结数','sum'=>'总数']];
-        return  Excel::download(new Export($row,$performance),date('YmdHis', time()).'-客服绩效.xlsx');
+    public function  getSql($params){
+        $sql =" select users.name as userName,owners.name as ownerName,count(case order_issue_process_logs.type WHEN  '创建' THEN 1 end ) as created, count(case order_issue_process_logs.type WHEN  '处理' THEN 1 end ) as processed, count(case order_issue_process_logs.type WHEN  '结束' THEN 1 end ) as end,count(1) as sumNumber ";
+        $sql.=" from order_issue_process_logs inner join users on order_issue_process_logs.user_id = users.id inner join order_issues on order_issue_process_logs.order_issue_id = order_issues.id inner join orders on order_issues.order_id = orders.id inner join owners on orders.owner_id = owners.id ";
+        $sql.=" where 1=1 ";
+        if(isset($params['create_start'])){
+            $sql.= " and order_issue_process_logs.created_at >= '".$params['create_start']." 00:00:00' ";
+        }
+        if(isset($params['create_end'])){
+            $sql.= " and order_issue_process_logs.created_at <= '".$params['create_end']." 23:59:59' ";
+        }
+        if (isset($params['timeFrame'])) {
+            $create_start ='';$create_end ='';
+            if ($params['timeFrame'] == 'day') {
+                $create_start = date('Y-m-d');
+                $create_end = date('Y-m-d');
+            } else if ($params['timeFrame'] == 'yesterday') {
+                $create_start = date('Y-m-d', strtotime('-1 day'));
+                $create_end = date('Y-m-d', strtotime('-1 day'));
+            } else if ($params['timeFrame'] == 'week') {
+                $date = date('Y-m-d', strtotime('-1 weeks', strtotime('Monday')));
+                $create_start = $date;
+                $create_end = date('Y-m-d');
+            } else if ($params['timeFrame'] == 'month') {
+                $create_start = date('Y-m-01', strtotime(date("Y-m-d")));
+                $create_end = date('Y-m-d');
+            }
+            $sql.= " and order_issue_process_logs.created_at >= '".$create_start." 00:00:00' ";
+            $sql.= " and order_issue_process_logs.created_at <= '".$create_end." 23:59:59' ";
+        }
+        $sql.= "group by users.name, owners.name;";
+        return $sql;
     }
 }

+ 14 - 5
app/Services/OrderIssueService.php

@@ -263,7 +263,7 @@ class OrderIssueService
     public function orderIssueTag(array $params)
     {
         $orderNos = $params['orderNos'];
-        $meg = ['success' => false];
+        $meg = ['success' => true];
         foreach ($orderNos as $orderNo) {
             try {
                 $orderIssue = $this->createOrFindByOrderNo($orderNo);
@@ -274,9 +274,10 @@ class OrderIssueService
                 }
             } catch (\Exception $e) {
                 LogService::log(__METHOD__, __FUNCTION__, '标记订单问题件error' . json_encode($orderNo).$e->getMessage(),$e->getTraceAsString());
+                $meg['success'] = false;
+                $meg['fail_info'][]=  $orderNo.$e->getMessage();
             }
         }
-        $meg['success'] = true;
         unset($params,$orderIssues,$orderNos);
         return $meg;
     }
@@ -422,9 +423,9 @@ class OrderIssueService
 
                 $owner_id = $orderIssue['order']['owner_id'];
                 $rejectedBill = RejectedBill::query()->firstOrCreate([
-                        'id_logistic_return' => $arr['rejectedBill']['id_logistic_return'] ?? '',
-                        'id_owner' => $owner_id ?? '',
-                        'logistic_number_return' => $arr['rejectedBill']['logistic_number_return'],]
+                    'id_logistic_return' => $arr['rejectedBill']['id_logistic_return'] ?? '',
+                    'id_owner' => $owner_id ?? '',
+                    'logistic_number_return' => $arr['rejectedBill']['logistic_number_return'],]
                 );
                 $rejectedBill->save();
                 $rejectedBill->同步问题件();
@@ -469,4 +470,12 @@ class OrderIssueService
         return OrderIssue::query()->whereIn('id',$ids)->where('final_status','已解决')->count() > 0;
     }
 
+    public function editOrderIssueSecondClientNo($id,$secondClientNo,&$order = null)
+    {
+        $order = Order::query()->where('client_code',$secondClientNo)->first();
+        if(!$order){
+            $order  = app(OrderService::class)->findOrCreateByClientCode($secondClientNo);
+        }
+        return OrderIssue::query()->where('id',$id)->update(['second_client_no'=>$secondClientNo]) > 0;
+    }
 }

+ 488 - 134
app/Services/OrderPackageCommoditiesService.php

@@ -10,6 +10,7 @@ use App\OracleDOCOrderHeader;
 use App\Order;
 use App\OrderPackage;
 use App\OrderPackageCommodities;
+use App\OrderTracking;
 use App\Owner;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
@@ -149,49 +150,50 @@ class OrderPackageCommoditiesService
     public function createByWmsOrder($orderHeaders)
     {
         if(!$orderHeaders){ return [];}
-        /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService = app(DataHandlerService::class);
-
-        $order_packages = app(OrderPackageService::class)->getByWmsOrders($orderHeaders);
-        $order_packages_logistic_number_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
-
-        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
-        $commodity_owner_id_sku_map =  $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
-
-        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
-        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
-
-        $order_packages_commodities = $this->getByWmsOrder($orderHeaders);
-        $map = [];
-        foreach ($order_packages_commodities as $item) {
-            $key = ' commodity_id='.$item->commodity_id.' order_package_id'.$item->order_package_id.' amount='.$item->amount;
-            $map[$key][] = $item;
-        }
-        $insert_params = [];
-        foreach ($orderHeaders as $orderHeader) {
-            $actAllocationDetails = $orderHeader->actAllocationDetails;
-            $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['*','',null]);
-            if(count($logistic_numbers) > 0){
-                $params = $this->getParamsByActAllocationDetails($actAllocationDetails,
-                    $order_packages_logistic_number_map,
-                    $owner_code_map,
-                    $commodity_owner_id_sku_map,
-                    $logistic_numbers);
-                foreach ($params as $key =>$param) {
-                    $mapkey = ' commodity_id='.($param['commodity_id'] ?? '').' order_package_id'.($param['order_package_id'] ?? '').' amount='.($param['amount'] ?? '');
-                    if(($map[$mapkey] ?? false) && count($map[$mapkey]) >0){
-                        array_shift($map[$mapkey]);
-                        unset($params[$key]);
-                    }
-                }
-                $insert_params = array_merge($insert_params,$params);
-                unset($params);
-            }
-        }
-        if(count($insert_params) > 0){
-            $this->create($insert_params);
-        }
-        unset($orderHeaders,$order_packages,$owner_code_map,$commodities,$insert_params);
+        $this->更新OPC_根据WMS订单($orderHeaders);
+//        /** @var DataHandlerService $dataHandlerService */
+//        $dataHandlerService = app(DataHandlerService::class);
+//
+//        $order_packages = app(OrderPackageService::class)->getByWmsOrders($orderHeaders);
+//        $order_packages_logistic_number_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
+//
+//        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
+//        $commodity_owner_id_sku_map =  $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
+//
+//        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
+//        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
+//
+//        $order_packages_commodities = $this->getByWmsOrder($orderHeaders);
+//        $map = [];
+//        foreach ($order_packages_commodities as $item) {
+//            $key = ' commodity_id='.$item->commodity_id.' order_package_id'.$item->order_package_id.' amount='.$item->amount;
+//            $map[$key][] = $item;
+//        }
+//        $insert_params = [];
+//        foreach ($orderHeaders as $orderHeader) {
+//            $actAllocationDetails = $orderHeader->actAllocationDetails;
+//            $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['*','',null]);
+//            if(count($logistic_numbers) > 0){
+//                $params = $this->getParamsByActAllocationDetails($actAllocationDetails,
+//                    $order_packages_logistic_number_map,
+//                    $owner_code_map,
+//                    $commodity_owner_id_sku_map,
+//                    $logistic_numbers);
+//                foreach ($params as $key =>$param) {
+//                    $mapkey = ' commodity_id='.($param['commodity_id'] ?? '').' order_package_id'.($param['order_package_id'] ?? '').' amount='.($param['amount'] ?? '');
+//                    if(($map[$mapkey] ?? false) && count($map[$mapkey]) >0){
+//                        array_shift($map[$mapkey]);
+//                        unset($params[$key]);
+//                    }
+//                }
+//                $insert_params = array_merge($insert_params,$params);
+//                unset($params);
+//            }
+//        }
+//        if(count($insert_params) > 0){
+//            $this->create($insert_params);
+//        }
+//        unset($orderHeaders,$order_packages,$owner_code_map,$commodities,$insert_params);
     }
 
     public function getParamsByActAllocationDetails($details,array $order_packages_logistic_number_map,array $owner_code_map,array $commodity_owner_id_sku_map,array $logistic_numbers){
@@ -241,97 +243,98 @@ class OrderPackageCommoditiesService
 
     public function updateByWmsOrder($orderHeaders){
         if(!$orderHeaders){return ;}
-        /** @var DataHandlerService $dataHandlerService*/
-        $dataHandlerService = app(DataHandlerService::class);
-        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
-        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
-        $owners_id_map = $dataHandlerService->dataHeader(['id'],$owners);
-        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
-        $commodity_owner_id_sku_map = $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
-
-        $commodities_owner_code_code_map = [];
-        foreach ($commodities as $commodity) {
-            $owner = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owners_id_map);
-            $commodities_owner_code_code_map[' owner_code='.$owner->code.' code='.$commodity->code] = $commodity;
-        }
-
-        $order_nos = data_get($orderHeaders,'*.orderno');
-        $order_package_commodities = OrderPackageCommodities::query()->with('package.order','commodity')
-            ->whereHas('package.order',function($query) use ($order_nos){
-                $query->whereIn('code',$order_nos);
-            })->get();
-
-        $order_packages = OrderPackage::query()->with('order')->whereHas('order',function($query) use ($order_nos){
-            $query->whereIn('code',$order_nos);
-        })->get();
-
-        $order_package_logistic_numbers_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
-        $order_no_map = [];
-        foreach ($order_package_commodities as $order_package_commodity) {
-            $order = $order_package_commodity->package->order;
-            $order_no_map[$order->code][] = $order_package_commodity;
-        }
-
-        $insertParams = [];
-        $updateParams = [['id','order_package_id'.'commodity_id','amount','updated_at']];
-        $updated_at = Carbon::now()->toDateTimeString();
-        $created_at = Carbon::now()->toDateTimeString();
-        foreach ($orderHeaders as $orderHeader) {
-            $order_package_commodities = $order_no_map[$orderHeader->orderno] ?? false;
-            $actAllocationDetails = $orderHeader->actAllocationDetails;
-            $logistic_numbers = array_unique(array_diff(data_get($actAllocationDetails,'*.picktotraceid'),['','*',null])) ;
-            if(!$order_package_commodities){
-                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
-                foreach ($params as $param) {
-                    $insertParams[] = $param;
-                }
-                continue;
-            }
-            if($actAllocationDetails->count() > count($order_package_commodities)){
-                $deleteKey = [];
-                foreach ($actAllocationDetails as $key1=>$actAllocationDetail) {
-                    foreach ( $order_package_commodities as $key=>$item) {
-                        $commodity = $item->commodity;
-                        if($actAllocationDetail->sku == $commodity->sku && $item->amount ==  $actAllocationDetail->qty_each){
-                            unset($order_package_commodities[$key]);
-                            unset($actAllocationDetails[$key1]);
-                            $deleteKey[] = $key1;
-                            break;
-                        }else if($item ->sku == $commodity->sku && $item->amount !=  $actAllocationDetail->qty_each){
-                            $updateParams[] = [
-                                'id' => $item->id,
-                                'commodity_id' => $commodity->id,
-                                'amount' => $actAllocationDetail->qty_each,
-                                'updated_at' => $updated_at
-                            ];
-                            $deleteKey[] = $key1;
-                            unset($actAllocationDetails[$key1]);
-                        }
-                    }
-                }
-                $actAllocationDetails  =$actAllocationDetails->filter(function ($value, $key) use($deleteKey) {
-                    return !in_array($key, $deleteKey);
-                });
-                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
-                foreach ($params as $param) {
-                    $insertParams[] = $param;
-                }
-                continue;
-            }
-        }
-
-        if(count($updateParams) > 0){
-            $this->batchUpdate($updateParams);
-        }
-
-        if(count($insertParams) > 0){
-            try {
-                $this->insert($insertParams);
-                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities '. count($insertParams) .json_encode($insertParams));
-            } catch (\Exception $e) {
-                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities error'.json_encode($insertParams)."||".$e->getMessage().'||'.$e->getTraceAsString());
-            }
-        }
+        $this->更新OPC_根据WMS订单($orderHeaders);
+//        /** @var DataHandlerService $dataHandlerService*/
+//        $dataHandlerService = app(DataHandlerService::class);
+//        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
+//        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
+//        $owners_id_map = $dataHandlerService->dataHeader(['id'],$owners);
+//        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
+//        $commodity_owner_id_sku_map = $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
+//
+//        $commodities_owner_code_code_map = [];
+//        foreach ($commodities as $commodity) {
+//            $owner = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owners_id_map);
+//            $commodities_owner_code_code_map[' owner_code='.$owner->code.' code='.$commodity->code] = $commodity;
+//        }
+//
+//        $order_nos = data_get($orderHeaders,'*.orderno');
+//        $order_package_commodities = OrderPackageCommodities::query()->with('package.order','commodity')
+//            ->whereHas('package.order',function($query) use ($order_nos){
+//                $query->whereIn('code',$order_nos);
+//            })->get();
+//
+//        $order_packages = OrderPackage::query()->with('order')->whereHas('order',function($query) use ($order_nos){
+//            $query->whereIn('code',$order_nos);
+//        })->get();
+//
+//        $order_package_logistic_numbers_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
+//        $order_no_map = [];
+//        foreach ($order_package_commodities as $order_package_commodity) {
+//            $order = $order_package_commodity->package->order;
+//            $order_no_map[$order->code][] = $order_package_commodity;
+//        }
+//
+//        $insertParams = [];
+//        $updateParams = [['id','order_package_id'.'commodity_id','amount','updated_at']];
+//        $updated_at = Carbon::now()->toDateTimeString();
+//        $created_at = Carbon::now()->toDateTimeString();
+//        foreach ($orderHeaders as $orderHeader) {
+//            $order_package_commodities = $order_no_map[$orderHeader->orderno] ?? false;
+//            $actAllocationDetails = $orderHeader->actAllocationDetails;
+//            $logistic_numbers = array_unique(array_diff(data_get($actAllocationDetails,'*.picktotraceid'),['','*',null])) ;
+//            if(!$order_package_commodities){
+//                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
+//                foreach ($params as $param) {
+//                    $insertParams[] = $param;
+//                }
+//                continue;
+//            }
+//            if($actAllocationDetails->count() > count($order_package_commodities)){
+//                $deleteKey = [];
+//                foreach ($actAllocationDetails as $key1=>$actAllocationDetail) {
+//                    foreach ( $order_package_commodities as $key=>$item) {
+//                        $commodity = $item->commodity;
+//                        if($actAllocationDetail->sku == $commodity->sku && $item->amount ==  $actAllocationDetail->qty_each){
+//                            unset($order_package_commodities[$key]);
+//                            unset($actAllocationDetails[$key1]);
+//                            $deleteKey[] = $key1;
+//                            break;
+//                        }else if($item ->sku == $commodity->sku && $item->amount !=  $actAllocationDetail->qty_each){
+//                            $updateParams[] = [
+//                                'id' => $item->id,
+//                                'commodity_id' => $commodity->id,
+//                                'amount' => $actAllocationDetail->qty_each,
+//                                'updated_at' => $updated_at
+//                            ];
+//                            $deleteKey[] = $key1;
+//                            unset($actAllocationDetails[$key1]);
+//                        }
+//                    }
+//                }
+//                $actAllocationDetails  =$actAllocationDetails->filter(function ($value, $key) use($deleteKey) {
+//                    return !in_array($key, $deleteKey);
+//                });
+//                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
+//                foreach ($params as $param) {
+//                    $insertParams[] = $param;
+//                }
+//                continue;
+//            }
+//        }
+//
+//        if(count($updateParams) > 0){
+//            $this->batchUpdate($updateParams);
+//        }
+//
+//        if(count($insertParams) > 0){
+//            try {
+//                $this->insert($insertParams);
+//                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities '. count($insertParams) .json_encode($insertParams));
+//            } catch (\Exception $e) {
+//                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities error'.json_encode($insertParams)."||".$e->getMessage().'||'.$e->getTraceAsString());
+//            }
+//        }
     }
 
     public function getByWmsOrder($orderHeaders){
@@ -389,4 +392,355 @@ class OrderPackageCommoditiesService
     {
         return $this->getByOrderNos(data_get($orders,'*.code'));
     }
+
+    /**
+     * @param OracleDOCOrderHeader $orderHeader
+     * @param Order $order
+     * @return array|Collection|\Tightenco\Collect\Support\Collection
+     */
+    public function 返回创建数组($orderHeader)
+    {
+        if($orderHeader->sostatus == 90){return [];}
+        $actAllocationDetails = $orderHeader->actAllocationDetails->collect();
+        $innerParams = collect();
+        $actAllocationDetails->each(function($detail)use(&$innerParams){
+            $sku =  $detail->sku;
+            $amount =  $detail->qty_each;
+            $logistic_number = $detail->picktotraceid;
+            $params = [
+                'ownerCode' => $detail->customerid,
+                'orderNo' => $detail->orderno,
+                'sku' => $sku,
+                'amount' => $amount,
+                'logistic_number' => $logistic_number,
+            ];
+
+            $innerParam = $innerParams->where('logistic_number',$logistic_number)->where('sku',$sku)->first();
+            if($innerParam ?? false){
+                $bool = false;
+                $innerParams = $innerParams->map(function($param)use($innerParam,$amount,&$bool){
+                    if($innerParam['logistic_number'] == $param['logistic_number'] &&
+                        $innerParam['sku'] == $param['sku'] && !$bool){
+                        $param['amount'] += $amount;
+                        $bool = !$bool;
+                    }
+                    return $param;
+                });
+            }else{
+                $innerParams->push($params);
+            }
+        });
+        return $innerParams;
+    }
+
+    public function 返回创建数组_WMS订单($orderHeaders)
+    {
+        $innerParams = [];
+        foreach ($orderHeaders as $orderHeader) {
+            $innerParam = $this->返回创建数组($orderHeader);
+            foreach ($innerParam as $param) {
+                $innerParams[] = $param;
+            }
+        }
+        return $innerParams;
+    }
+    /**
+     * @param array $innerParams
+     * @return array
+     */
+    public function 生成OrderPackageCommodities_基于创建数组($innerParams)
+    {
+        if(!$innerParams){return [];}
+        if(is_array($innerParams) && count($innerParams) == 0){return [];}
+        $commodity_map = $this->返回Commodity数组_根据数组中sku($innerParams);
+        $orderPackages_map = app(OrderPackageService::class)->返回OrderPackage数组_根据数组中的快递单号($innerParams);
+        $createParams = [];
+        $dataTime = Carbon::now()->format('Y-m-d H:i:s');
+        foreach ($innerParams as $innerParam) {
+            $key = ' ownerCode='.($innerParam['ownerCode'] ?? '').' sku='.($innerParam['sku'] ?? '');
+            $commodity = $commodity_map[$key] ?? null;
+            $orderPackage = $orderPackages_map[$innerParam['logistic_number']] ?? '';
+            $createParams[] = [
+                'order_package_id' => $orderPackage->id ?? '',
+                'commodity_id' => $commodity->id ?? null,
+                'amount' => $innerParam['amount'],
+                'created_at' => $dataTime,
+                'updated_at' => $dataTime,
+            ];
+        }
+        return $createParams;
+    }
+
+    public function createByOrderHeader($orderHeaders)
+    {
+        $orderPackageCommodities = $this->getByWmsOrder($orderHeaders);
+        $OPCCollects = $this->将orderPackageCommodity抽象成数组($orderPackageCommodities);
+        $creatParams = $this->返回创建数组_WMS订单($orderHeaders);
+        $this->数据重组($OPCCollects,$creatParams);
+        $collect = $this->删选需要修改的OrderPackageCommodities($OPCCollect,$creatParam);
+        $ids = $this->删选出删除的OrderPackageCommodities($OPCCollect,$creatParam);
+        $insertParam = $this->删选出需要添加的OrderPackageCommodities($OPCCollect,$creatParam);
+        $updateParams = [];
+        foreach ($collect as $item) {
+            $updateParams[] = $item;
+        }
+        $this->根据更新数组进行更新($updateParams);
+        $this->删除OPC以及对应的追踪件($ids);
+        $creatParams = $this->生成OrderPackageCommodities_基于创建数组($insertParam);
+        $this->create($creatParams);
+    }
+
+
+    /**
+     * @param $orderHeaders
+     */
+    public function 更新OPC_根据WMS订单($orderHeaders)
+    {
+        if(!$orderHeaders){return ;}
+        if(count($orderHeaders) == 0){return ;}
+        $orderPackageCommodities = $this->getByWmsOrder($orderHeaders);
+        $OPCCollects = $this->将orderPackageCommodity抽象成数组($orderPackageCommodities);
+        $creatParams = $this->返回创建数组_WMS订单($orderHeaders);
+        $orderNos = $this->数据重组($OPCCollects,$creatParams);
+        $updateParams= collect();$deleteIds = [];$insertParams =[];
+        foreach ($orderNos as $orderNo) {
+            $OPCCollect = $OPCCollects[$orderNo] ?? null;
+            $creatParam = $creatParams[$orderNo];
+            $retain[] = $this->删选可以保留的OrderPackageCommodities($OPCCollect,$creatParam);
+
+            $collect = $this->删选需要修改的OrderPackageCommodities($OPCCollect,$creatParam);
+
+            $ids = $this->删选出删除的OrderPackageCommodities($OPCCollect,$creatParam);
+
+            $insertParam = $this->删选出需要添加的OrderPackageCommodities($OPCCollect,$creatParam);
+
+            $deleteIds = array_merge($deleteIds,$ids);
+
+            foreach ($collect as $item) {
+                $updateParams->push($item);
+            }
+            foreach ($insertParam as $item) {
+                $insertParams[]= $item;
+            }
+
+        }
+        $this->根据更新数组进行更新($updateParams);
+        $this->删除OPC以及对应的追踪件($deleteIds);
+        $creatParams = $this->生成OrderPackageCommodities_基于创建数组($insertParams);
+        $this->create($creatParams);
+    }
+
+    /**
+     * @param Collection $orderPackageCommodities
+     * @return Collection|\Tightenco\Collect\Support\Collection
+     */
+    public function 将orderPackageCommodity抽象成数组($orderPackageCommodities)
+    {
+        /** @var DataHandlerService $dataHandlerService */
+        $dataHandlerService = app(DataHandlerService::class);
+        $collect = collect();
+        $ownerIds = array_unique(data_get($orderPackageCommodities,'*.commodity.owner_id'));
+        $owners = Owner::query()->whereIn('id',$ownerIds)->get();
+        $owner_id_map = $dataHandlerService->dataHeader(['id'],$owners);
+        foreach ($orderPackageCommodities as $orderPackageCommodity) {
+            $owner = $dataHandlerService->getKeyValue(['id'=>$orderPackageCommodity->commodity->owner_id ?? ''],$owner_id_map);
+            $params = [
+                'id' => $orderPackageCommodity->id,
+                'ownerCode' => $owner->code,
+                'orderNo' => $orderPackageCommodity->package->order->code,
+                'sku' => $orderPackageCommodity->commodity->sku,
+                'amount' => $orderPackageCommodity->amount,
+                'logistic_number' => $orderPackageCommodity->package->logistic_number,
+            ];
+            $collect->push($params);
+        }
+        return $collect;
+    }
+
+    public function 数据重组(&$OPCCollects,&$params)
+    {
+        $collect_map = [];$params_map = [];$order_no_map = [];
+
+        foreach ($OPCCollects as $item) {
+            $orderNo = $item['orderNo'];
+            if(!isset($collect_map[$orderNo])){$collect_map[$orderNo] = collect();}
+            $collect_map[$orderNo]->push($item);
+        }
+
+        foreach ($params as $param) {
+            $orderNo =  $param['orderNo'];
+            if(!isset($params_map[$orderNo])){$params_map[$orderNo] = collect();}
+            $order_no_map[] = $orderNo;
+            $params_map[$orderNo]->push($param);
+        }
+        $order_no_map = array_unique($order_no_map);
+        $OPCCollects = $collect_map;
+        $params = $params_map;
+        return $order_no_map;
+    }
+
+
+    public function 删选可以保留的OrderPackageCommodities(&$OPCCollect,&$params)
+    {
+        $retain = collect();
+        if($OPCCollect == null){return $retain;}
+        $map = [];
+        foreach ($params as $param) {
+            $key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'].' amount='.$param['amount'];
+            if(! isset($map[$key])){
+                $map[$key] = [];
+            }
+            $map[$key][] = $param;
+        }
+
+        foreach ($OPCCollect as $item) {
+            $key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'].' amount='.$item['amount'];
+            if(isset($map[$key]) && count($map[$key]) > 0){
+                $value = $map[$key][0];
+                array_shift($map[$key]);
+                $params->filter(function($param)use($value){
+                    return count(array_diff_assoc($param,$value)) != 0 ;
+                });
+                $retain->push($value);
+            }
+        }
+
+        return $retain;
+    }
+
+    public function 删选出需要添加的OrderPackageCommodities(&$OPCCollect,&$params)
+    {
+        $innerParam = [];
+        $OPCmap = [];
+        if($OPCCollect == null){return $params;}
+        foreach ($OPCCollect as $item) {
+            $key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'].' amount='.$item['amount'];
+            if(!isset($OPCmap[$key])){
+                $OPCmap[$key][] = [];
+            }
+            $OPCmap[$key][] = $item;
+        }
+        $paramsMap = [];
+        foreach ($params as $param) {
+            $key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'].' amount='.$param['amount'];
+            if(!isset($OPCmap[$key])){
+                $paramsMap[$key][] = [];
+            }
+            $paramsMap[$key][] = $param;
+        }
+        $paramsCopy = $params->collect();
+        foreach ($paramsCopy as $param) {
+            $key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'].' amount='.$param['amount'];
+            if(!(isset($OPCmap[$key]) && count($OPCmap[$key]) == 0)){
+                $innerParam[] = $param;
+                $OPCCollect->filter(function($item)use($param){
+                    return !($item['logistic_number'] == $param['logistic_number'] &&$item['sku'] == $param['sku'] &&$item['amount'] == $param['amount'])  ;
+                });
+            }
+        }
+        return $innerParam;
+    }
+
+
+    public function 删选需要修改的OrderPackageCommodities(&$OPCCollect,&$params)
+    {
+        $update = collect();
+        $map = [];
+        if($OPCCollect == null){return $update;}
+        foreach ($OPCCollect as $item) {
+            $key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'];
+            if(!isset($map[$key])){$map[$key] = [];}
+            $map[$key][] = $item;
+        }
+        $paramsCopy = $params->collect();
+        foreach ($paramsCopy as $param) {
+            $key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'];
+            if(!isset($map[$key])){continue;}
+            $item = array_shift($map[$key]);
+            $params = $params->filter(function($value)use($item){
+                return !($value['logistic_number'] == $item['logistic_number'] && $value['sku'] == $item['sku'])  ;
+            });
+            $OPCCollect  = $OPCCollect->filter(function($opc)use($item){
+                return !($opc['logistic_number'] == $item['logistic_number'] && $opc['sku'] == $item['sku'] && $opc['amount'] == $item['amount'] && $item['id'] == $opc['id']);
+            });
+            if($item['amount']!= $param['amount']){
+                $param['id'] = $item['id'];
+                $update->push($param);
+            }
+        }
+
+        return $update;
+    }
+
+    public function 删选出删除的OrderPackageCommodities(&$OPCCollect,&$params)
+    {
+        $deleteIds = [];
+        $map = [];
+        if($OPCCollect == null){return $deleteIds;}
+        foreach ($params as $item) {
+            $key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'].' amount='.$item['amount'];
+            if(!isset($map[$key])){
+                $map[$key] = [];
+            }
+            $map[$key][] = $item;
+        }
+        foreach ($OPCCollect as $opc) {
+            $key = ' logistic_number='.$opc['logistic_number'].' sku='.$opc['sku'].' amount='.$opc['amount'];
+            if(!isset($map[$key]) || count($map[$key])==0){
+                $deleteIds[] = $opc['id'];
+            }
+        }
+
+        return $deleteIds;
+    }
+
+    public function 删除OPC以及对应的追踪件($ids)
+    {
+        if(!$ids){return;}
+        $OPCs = OrderPackageCommodities::query()->whereIn('id', $ids)->get();
+        if($OPCs->count() == 0){return;}
+        try {
+            OrderPackageCommodities::query()->whereIn('id', $ids)->delete();
+            LogService::log(__METHOD__, __FUNCTION__, '删除OrderPackageCommodities ' . count($ids) . json_encode($OPCs));
+            $orderTracking = OrderTracking::query()->whereIn('order_package_commodity_id',$ids)->get();
+            app(OrderTrackingService::class)->deleteOrderTracings($orderTracking);
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__, __FUNCTION__, '删除OrderPackageCommodities ' . count($ids) . json_encode($OPCs).$e->getMessage().$e->getTraceAsString());
+        }
+    }
+
+    public function 根据更新数组进行更新($updateParams)
+    {
+        if(!isset($updateParams)){return;}
+        if(is_array($updateParams) && count($updateParams)==0){return;}
+        $commodity_map = $this->返回Commodity数组_根据数组中sku($updateParams);
+        $orderPackages_map = app(OrderPackageService::class)->返回OrderPackage数组_根据数组中的快递单号($updateParams);
+        $dataTime = Carbon::now()->format('Y-m-d H:i:s');
+        $update_params = [['id','commodity_id','order_package_id','amount','updated_at']];
+        foreach ($updateParams as $updateParam) {
+            $commodity_key = ' ownerCode='.($updateParam['ownerCode'] ?? '').' sku='.($updateParam['sku'] ?? '');
+            $commodity = $commodity_map[$commodity_key] ?? '';
+            $orderPackage = $orderPackages_map[$updateParam['logistic_number']] ?? '';
+            $update_params[] = [
+                'id' => $updateParam['id'],
+                'commodity_id' => $commodity->id ?? '',
+                'order_package_id' => $orderPackage->id ?? '',
+                'amount' => $updateParam['amount'],
+                'updated_at' => $dataTime
+            ];
+        }
+        $this->batchUpdate($update_params);
+    }
+
+    private function 返回Commodity数组_根据数组中sku($params)
+    {
+        $skus = array_unique(data_get($params,'*.sku'));
+        $commodities = Commodity::query()->with('owner')->whereIn('sku',$skus)->get();
+        $commodity_map = [];
+        foreach ($commodities as $commodity) {
+            $key = ' ownerCode='.($commodity->owner->code ?? '').' sku='.$commodity->sku;
+            $commodity_map[$key] = $commodity;
+        }
+        return $commodity_map;
+    }
 }

+ 48 - 1
app/Services/OrderPackageService.php

@@ -12,6 +12,7 @@ use App\OrderTracking;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
+use Illuminate\Support\Collection;
 
 class OrderPackageService
 {
@@ -148,7 +149,6 @@ class OrderPackageService
         $package = OrderPackage::query()->where('logistic_number',$logistic_number)->first();
         if ($package)return $package;
 
-        $order = app('orderService')->first();
         /** @var OrderService */
         $order = app('orderService')->logisticNumberFirstOrCreateOrder($logistic_number);
         if ($order) $values["order_id"] = $order->id;
@@ -340,5 +340,52 @@ class OrderPackageService
         }
     }
 
+    /**
+     * @param array  $orderNos
+     * @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
+     */
+    public function getByOrderNos($orderNos)
+    {
+        return OrderPackage::query()->with('order')
+            ->whereHas('order',function($query)use($orderNos){
+                $query->whereIn('code',$orderNos);
+            })->get();
+    }
+
+    /**
+     * @param Collection $orders
+     * @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
+     */
+    public function getByOrders($orders)
+    {
+        return $this->getByOrderNos(data_get($orders,'*.code'));
+    }
+
+    public function 返回OrderPackage数组_根据数组中的快递单号($params)
+    {
+        $map = [];
+        $orderPackages = OrderPackage::query()->whereIn('logistic_number',data_get($params,'*.logistic_number'))->get();
+        if($orderPackages->count() == 0){return $map;}
+        foreach ($orderPackages as $orderPackage) {
+            $map[$orderPackage->logistic_number] = $orderPackage;
+        }
+        return  $map;
+    }
 
+    /**
+     * @param string $orderClientNo
+     * @param string $logisticNumber
+     * @return array|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object
+     */
+    public function createByLogisticNumberAndOrderClientNo($orderClientNo,$logisticNumber)
+    {
+        $order = Order::query()->with('packages.commodities.commodity')->where('client_code',$orderClientNo)->first();
+        if(!$order){
+            $order = Order::query()->create(['client_code'=>$orderClientNo]);
+        }
+        $orderPackage = OrderPackage::query()->where('logistic_number',$logisticNumber)->first();
+        if($orderPackage){return $orderPackage;}
+        $orderPackage = OrderPackage::query()->create(['order_id'=>$order->id,'logistic_number'=>$logisticNumber]);
+        return  compact('orderPackage','order');
+    }
 }

+ 74 - 3
app/Services/OrderService.php

@@ -18,6 +18,7 @@ use App\Services\common\DataHandlerService;
 use App\Shop;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\App;
 use Illuminate\Support\Facades\DB;
 
 class OrderService
@@ -320,6 +321,7 @@ class OrderService
         /** @var OrderPackageService $orderPackageService */
         $orderPackageService = app('orderPackageService');
         $order = Order::query()->where('client_code', $clientCode)->first();
+
         $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
 
         if ($orderHeader == null) {
@@ -350,7 +352,6 @@ class OrderService
                 $logistics_id = $logistics['id'];
             } else {
                 try {
-
                     $logistics = Logistic::query()->create(['name' => $orderHeadAttr['carriername'], 'code' => $orderHeadAttr['userdefine1']]);
                     $logistics_id = $logistics['id'];
                     LogService::log(__METHOD__,__FUNCTION__,'创建承运商'.json_encode($logistics));
@@ -375,6 +376,8 @@ class OrderService
             ];
             $order = Order::query()->create($arr);
             unset($arr,$orderHeadAttr,$owner);
+        }else{
+            $this->updateOrderByOrderHeader($order,$orderHeader);
         }
         $orderPackageService->createdByOrder($order);unset($order);
         return Order::with('packages.commodities.commodity')->where('client_code', $clientCode)->first();
@@ -436,7 +439,7 @@ class OrderService
 
         if ($orderHeader == null) return null;
 
-        $order = $this->first(['code',$orderHeader->orderno]);
+        $order = $this->first(['code'=>$orderHeader->orderno]);
         if ($order) return $order;
 
         /** @var OwnerService */
@@ -652,7 +655,7 @@ class OrderService
 
     public function 返回有问题件的订单号($orders)
     {
-        if(!isset($orders)){return ;}
+        if(!isset($orders)){return [];}
         $orderNo =  data_get($orders,'*.orderno');
         $orderIssues = OrderIssue::query()->with('order')
             ->whereHas('order',function($query)use($orderNo){
@@ -663,4 +666,72 @@ class OrderService
             return $orderIssue->order->code;
         });
     }
+
+    public function getOrderInfoByCodes($orderNos)
+    {
+        return Order::query()->with('packages.commodities.commodity')->whereIn('code',$orderNos)->get();
+    }
+
+    public function getOrderInfoByWmsOrder($orderHeaders)
+    {
+        return $this->getOrderInfoByCodes(data_get($orderHeaders,'*.orderno'));
+    }
+
+    public function getParamByOrderHeader($orderHeader)
+    {
+        if($orderHeader->userdefine1 == 'ZT'){
+            $logistic = Logistic::query()->where('code','XJWL')->first();
+
+        }else{
+            $logistic = Logistic::query()->where('code',$orderHeader->userdefine1)->first();
+        }
+        $owner = Owner::query()->where('code',$orderHeader->customerid ?? '')->first();
+        $shop = Shop::query()->where('name',$orderHeader->issuepartyname)->where('owner_id',$owner->id)->first();
+        return [
+            'code' =>$orderHeader->orderno,
+            'owner_id' =>$owner->id,
+            'shop_id' =>$shop->id,
+            'logistic_id' => $logistic->id,
+            'consignee_name' =>  $orderHeader->c_contact,
+            'consignee_phone' =>  $orderHeader->c_tel2,
+            'province' =>$orderHeader->c_province,
+            'city' => $orderHeader->c_city,
+            'district' =>$orderHeader->c_district,
+            'address' =>$orderHeader->c_address1,
+            'client_code' =>$orderHeader->soreference1,
+            'wms_edittime' => $orderHeader->edittime,
+            'wms_status' => $orderHeader->oracleBASCode_codename_c ?? '',
+            'update_at' => Carbon::now()->format('Y-m-d H:i:s')
+        ];
+    }
+
+    /**
+     * @param App/Order $order
+     * @param App/OracleDOCOrderHeader $orderHeader
+     */
+    public function updateOrderByOrderHeader($order,$orderHeader)
+    {
+        $params = $this->getParamByOrderHeader($orderHeader);
+        if($params['client_code']!= $order->client_code){
+            return ;
+        }else{
+            if($params['code'] == $order->code){
+                return ;
+            }
+            $data = [
+                'code'=>$order->code ?? $params['code'],
+                'owner_id'=>$order->code ?? $params['owner_id'],
+                'shop_id'=>$order->code ?? $params['shop_id'],
+                'logistic_id'=>$order->code ?? $params['logistic_id'],
+                'consignee_name'=>$order->code ?? $params['consignee_name'],
+                'province'=>$order->code ?? $params['province'],
+                'city'=>$order->code ?? $params['city'],
+                'district'=>$order->code ?? $params['district'],
+                'address'=>$order->code ?? $params['address'],
+                'wms_edittime'=>$order->code ?? $params['wms_edittime'],
+                'wms_status'=>$order->code ?? $params['wms_status'],
+            ];
+            Order::query()->where('id',$order->id)->update($data);
+        }
+    }
 }

+ 69 - 90
app/Services/OrderTrackingService.php

@@ -4,6 +4,7 @@ namespace App\Services;
 
 use App\Exports\Export;
 use App\OracleDOCOrderHeader;
+use App\Order;
 use App\OrderPackageCommodities;
 use App\OrderTracking;
 use App\Services\common\BatchUpdateService;
@@ -36,7 +37,8 @@ class OrderTrackingService
             $query->with(['commodity', 'package.order.logistic']);
         },])->whereHas('owner', function ($query) use ($owner_ids) {
             $query->whereIn('id', $owner_ids); //货主
-        })->orderByDesc('created_at');
+        })->orderByDesc('order_trackings.created_at')
+        ->orderBy('order_trackings.order_client_code');
 
         $queryParam = [
             'start_at' => ['alias' => 'pick_up_at', 'startDate' => ' 00:00:00'],
@@ -92,9 +94,8 @@ class OrderTrackingService
 
         if ($params['ids'] ?? false) {
             $ids = explode(',', $params['ids']);
-            $query->whereIn('id', $ids);
+            $query->whereIn('order_trackings.id', $ids);
         }
-
         return $query;
     }
 
@@ -103,57 +104,29 @@ class OrderTrackingService
         return $this->getConditionQuery($params)->paginate($params['paginate'] ?? 50);
     }
 
-    public function export($params)
-    {
-        if ($params['data'] ?? false) { // 按id
-            $trackOrders = $this->getConditionQuery($params);
-        } else {
-            $trackOrders = $this->getConditionQuery($params);
-        }
-        return $this->downLoadAsExec($trackOrders->get());
-    }
-
-    private function downLoadAsExec($trackOrders)
+    public function getSql($params)
     {
-        $row = [[
-            'owner_name' => '公司', 'order_client_code' => '订单号', 'web_order_number' => 'WEB+订单号', 'pick_up_at' => '提货日期', 'sale' => '销售',
-            'client' => '客户', 'sku' => 'sku', 'sku_name' => '物料描述', 'sku_amount' => '数量', 'order_remark' => '订单备注',
-            'package_weight' => '重量', 'package_bulk' => '体积', 'pallet_total' => '托盘合计', 'package_logistic' => '运输方式', 'package_logistic_number' => '运输单号',
-            'order_city' => '到达城市', 'planning_sent_at' => '应送达时间', 'is_on_duty_shift' => '是否赶上卡班', 'is_arrival' => '到货情况', 'signed_at' => '签收日期',
-            'receive_bill_status' => '签收单情况', 'remark' => '备注']];
-
-        $list = [];
-        $i = 0;
-
-        foreach ($trackOrders as $trackOrder) {
-            $list[$i]['owner_name'] = $trackOrder['owner']['name'] ?? '';
-            $list[$i]['order_client_code'] = $trackOrder['commodities']['package']['order']['client_code'] ?? '';
-            $list[$i]['web_order_number'] = $trackOrder['web_order_number'] ?? '';
-            $list[$i]['pick_up_at'] = $trackOrder['pick_up_at'] ?? '';
-            $list[$i]['sale'] = $trackOrder['sale'] ?? '';
-            $list[$i]['client'] = $trackOrder['client'] ?? '';
-            $list[$i]['sku'] = $trackOrder['commodities']['commodity']['sku'];
-            $list[$i]['sku_name'] = $trackOrder['commodities']['commodity']['name'];
-            $list[$i]['sku_amount'] = $trackOrder['commodities']['amount'];
-            $list[$i]['order_remark'] = $trackOrder['order_remark'];
-            $list[$i]['package_weight'] = $trackOrder['commodities']['package']['weight'];
-            $list[$i]['package_bulk'] = $trackOrder['commodities']['package']['bulk'];
-            $list[$i]['pallet_total'] = $trackOrder['commodities']['package']['pallet_total'];
-            $list[$i]['package_logistic'] = $trackOrder['commodities']['package']['order']['logistic']['name'];
-            $list[$i]['package_logistic_number'] = $trackOrder['commodities']['package']['logistic_number'];
-            $list[$i]['order_city'] = $trackOrder['commodities']['package']['order']['city'];
-            $list[$i]['planning_sent_at'] = $trackOrder['planning_sent_at'];
-            $list[$i]['is_on_duty_shift'] = $trackOrder['is_on_duty_shift'];
-            $list[$i]['is_arrival'] = $trackOrder['is_arrival'];
-            $list[$i]['signed_at'] = $trackOrder['signed_at'];
-            $list[$i]['receive_bill_status'] = $trackOrder['receive_bill_status'];
-            $list[$i]['remark'] = $trackOrder['remark'];
-            $i++;
+        if($params['data'] ?? false){
+            $params['ids'] = $params['data'];
         }
-
-        return Excel::download(new Export($row, $list), date('YmdHis', time()) . '-订单跟踪.xlsx');
+        $order_tracking_colnums = "case order_trackings.order_client_code when  order_trackings.web_order_number then '' when order_trackings.order_client_code then  order_trackings.order_client_code end order_client_code,";
+        $order_tracking_colnums .= 'order_trackings.web_order_number,order_trackings.pick_up_at,order_trackings.sale,order_trackings.client,order_trackings.order_remark,order_trackings.gross_weight,order_trackings.bulk,';
+        $order_tracking_colnums .= 'order_trackings.pallet_total,order_trackings.planning_sent_at,order_trackings.is_on_duty_shift,order_trackings.is_arrival,order_trackings.signed_at,order_trackings.receive_bill_status,order_trackings.remark';
+        return  $this->getConditionQuery($params)->selectRaw($order_tracking_colnums)
+            ->leftJoin('order_package_commodities','order_trackings.order_package_commodity_id','order_package_commodities.id')
+                ->selectRaw('order_package_commodities.amount amount')
+            ->leftJoin('order_packages','order_package_commodities.order_package_id','order_packages.id')
+                ->selectRaw('order_packages.logistic_number logistic_number')
+            ->leftJoin('orders','order_packages.order_id','orders.id')
+                ->selectRaw('orders.city city')
+            ->leftJoin('logistics','orders.logistic_id','logistics.id')
+                ->selectRaw("case logistics.code when 'ZT' then '新杰物流' else  logistics.name end  logistic_name")
+            ->leftJoin('commodities','order_package_commodities.commodity_id','commodities.id')
+                ->selectRaw('commodities.sku sku,commodities.name sku_name')
+            ->leftJoin('owners','orders.owner_id','owners.id')
+               ->selectRaw('owners.name owners_name')
+            ->sql();
     }
-
     /**
      * @param $startData
      */
@@ -181,17 +154,28 @@ class OrderTrackingService
     }
 
     public function updateOrderTracingAndSyc($id,$param,$value){
-        $order_tracking = OrderTracking::query()
-            ->with('commodities.package.order')
-            ->where('id', $id)
-            ->first();
+        $order_tracking = OrderTracking::query()->with('commodities.package.order')->where('id', $id)->first();
         $order_id = $order_tracking->commodities->package->order->id ?? false;
-        if(!$order_id){return ['success'=> false];}
-        $bool= OrderTracking::query()
-            ->whereHas('commodities.package.order', function ($query) use ($order_id) {
-                $query->where('id', $order_id);
-            })->update([$param=>$value]);
-        return ['success'=> $bool > 0];
+        if(!isset($order_id)){ return ['success'=> false];}
+        return $this->updateOrderTracingsByOrderIds($order_id,$param,$value);
+    }
+
+    public function updateOrderTracingsByOrderIds($orderId,$param,$value)
+    {
+        $bool = null;
+        try {
+            $update = [$param => $value];
+            if($param == 'planning_sent_at'){
+                $update= [$param => $value, 'signed_at' => $value,'is_arrival'=>'是','is_on_duty_shift'=>'是'];
+            }
+            $bool = OrderTracking::query()->whereHas('commodities.package.order', function ($query) use ($orderId) {
+                $query->where('id', $orderId);
+            })->update($update);
+            return['success'=> $bool > 0];
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__,__FUNCTION__,'修改追踪件'.json_encode($orderId,$param,$value).$e->getMessage().$e->getTraceAsString());
+            return['success'=> false,'fail_info'=>$e->getMessage()];
+        }
     }
 
     public function createByWmsOrderHeader($orderHeaders)
@@ -269,7 +253,7 @@ class OrderTrackingService
 
         try {
             if (count($params) > 0) {
-                OrderTracking::query()->insert($params);
+                $this->insert($params);
                 LogService::log(__METHOD__, __FUNCTION__, '批量添加 orderTracking' . json_encode($params),null);
             }
         } catch (\Exception $e) {
@@ -340,7 +324,8 @@ class OrderTrackingService
                         'order_remark' => $params['order_remark'],
                         'web_order_number' => $params['web_order_number'],
                         'gross_weight'  => $gross_weight,
-                        'bulk' => $bulk
+                        'bulk' => $bulk,
+                        'planning_sent_at' => $params['web_order_number']??'planning_sent_at'
                     ];
                 }
             }
@@ -357,35 +342,15 @@ class OrderTrackingService
                 if(!$order_tracking){
                     $order = $order_code_map[$orderHeader->orderno] ?? false;
                     if(!$order) continue;
-                    $client = null;
-                    $order_remark = null;
-                    if ($orderHeader['notes'] ?? false) {
-                        $notes = $orderHeader->notes;
-                        if (strpos($notes, '[')) {
-                            $arr= str_split($notes,strpos($notes,'['));
-                            $client = $arr[0] ?? '';
-                            $order_remark = str_replace(['[',']'],'', $arr[1] ?? '');
-                        }
-                    }
-                    $web_order_number = null;
-                    if(preg_match('/^O[\d]/',$orderHeader['soreference1'])){
-                        $web_order_number = $orderHeader['soreference1'];
-                    }
                     $basSkU = $dataService->getKeyValue(['customerid'=>$orderHeader->customerid,'sku'=>$item->commodity->sku],$BasSKUs_code_sku_map);
                     $gross_weight = round($basSkU->grossweight * $item->amount, 2);
                     $bulk = round($basSkU->cube * $item->amount, 2);
-                    $insert_params[] =[
-                        'order_package_commodity_id' => $item->id,
-                        'owner_id' => $order->owner_id,
-                        'order_client_code' => $order->client_code,
-                        'client' => $client,
-                        'created_at' => $order->created_at,
-                        'order_remark' => $order_remark,
-                        'pick_up_at' => $orderHeader->lastshipmenttime, // 提货时间,
-                        'web_order_number' => $web_order_number,
-                        'gross_weight' => $gross_weight,
-                        'bulk' => $bulk
-                    ];
+                    $pararm = $this->getParamsByOrderHeaderAndOrder($orderHeader,$order);
+                    $pararm['order_package_commodity_id'] =$item->id;
+                    $pararm['order_client_code'] = $order->client_code;
+                    $pararm['gross_weight'] = $gross_weight;
+                    $pararm['bulk'] = $bulk;
+                    $insert_params[] =$pararm;
                 }
             }
         }
@@ -400,6 +365,11 @@ class OrderTrackingService
         $this->删除订单追踪_订单取消($orderHeaders);
     }
 
+    /**
+     * @param OracleDOCOrderHeader $orderHeader
+     * @param Order $order
+     * @return array
+     */
     public function getParamsByOrderHeaderAndOrder($orderHeader,$order){
 
         $client = null;
@@ -418,13 +388,21 @@ class OrderTrackingService
         if(preg_match('/^O[\d]/',$orderHeader['soreference1'] ?? '') > 0){
             $web_order_number = $orderHeader['soreference1'];
         }
+        $planning_sent_at = $orderHeader->lastshipmenttime ?? null;
+        if(isset($planning_sent_at)){
+             $logisticTiming = app(LogisticTimingService::class)->findByParams($orderHeader['c_city']??'',$orderHeader['c_province']??'',$order->logistic_id);
+             if($logisticTiming){
+                 $planning_sent_at = Carbon::create($planning_sent_at)->addDays($logisticTiming->days_at_working);
+             }
+        }
         return [
             'owner_id' => $order->owner_id,
             'client' => $client,
             'created_at' => $order->created_at,
             'order_remark' => $order_remark,
             'pick_up_at' => $orderHeader->lastshipmenttime, // 提货时间
-            'web_order_number' =>$web_order_number
+            'web_order_number' =>$web_order_number,
+            'planning_sent_at' => $planning_sent_at
         ];
     }
 
@@ -465,4 +443,5 @@ class OrderTrackingService
             LogService::log(__METHOD__,__FUNCTION__,'删除订单取消的OrderTracking error'.$orderTracking->count().json_encode($orderTracking).$e->getMessage().$e->getTraceAsString(),null);
         }
     }
+
 }

+ 34 - 0
app/Services/ProvinceService.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Services;
+
+use App\Province;
+
+Class ProvinceService
+{
+    public static $provinces = ['青海','新疆','内蒙古','广西','西藏','宁夏','北京','上海','重庆','天津'];
+
+    /**
+     * @param string $name
+     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
+     */
+    public function findByName($name)
+    {
+        $province = Province::query()->where('name',$name)->first();
+        if(isset($province))return $province;
+        foreach (ProvinceService::$provinces as $province) {
+            if(strstr($province,$name) != null){
+                return Province::query()->where('name',$province)->first();
+            }
+        }
+        if(str_ends_with($name,'市')){
+            $province_name = str_split(strpos($name,'市'))[0];
+            return   Province::query()->where('name','like',$province_name.'%')->first();
+        }
+        if(str_ends_with($name,'省')){
+            $province_name = str_split(strpos($name,'省'))[0];
+            return   Province::query()->where('name','like',$province_name.'%')->first();
+        }
+        return null;
+    }
+}

+ 5 - 1
app/Services/RejectedService.php

@@ -80,7 +80,11 @@ class RejectedService
             }
         }
         if(isset($param['is_issue'])){
-            $rejectedBills->whereHas('orderIssue');
+            if($param['is_issue'] == 'true'){
+                $rejectedBills->whereHas('orderIssue');
+            }else{
+                $rejectedBills->doesntHave('orderIssue');
+            }
             unset($param['is_issue']);
         }
         $rejectedBills = app(QueryService::class)->query($param, $rejectedBills, $columnQueryRules,"rejected_bills");

+ 12 - 0
database/factories/LogisticTimingFactory.php

@@ -0,0 +1,12 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use App\LogisticTiming;
+use Faker\Generator as Faker;
+
+$factory->define(LogisticTiming::class, function (Faker $faker) {
+    return [
+        //
+    ];
+});

+ 42 - 0
database/migrations/2020_10_14_112825_add_order_issue_second_client_no.php

@@ -0,0 +1,42 @@
+<?php
+
+use App\RejectedBill;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddOrderIssueSecondClientNo extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        //
+        Schema::table('order_issues', function (Blueprint $table) {
+            $table->string('second_client_no')->index()->nullable()->comment('二次客户订单号')->after('second_order_id');
+        });
+        $orderIssues = \App\OrderIssue::query()->whereNotNull('second_order_id')->get();
+        foreach ($orderIssues as $orderIssue) {
+            $order = $orderIssue->hasOne('App\Order', 'id', 'second_order_id')->first();
+            if($order ?? false){
+                $orderIssue->update(['second_client_no'=>$order->client_code ?? null]);
+            }
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //
+        Schema::table('order_issues',function(Blueprint $table){
+            $table->dropColumn('second_client_no');
+        });
+    }
+}

+ 388 - 0
database/migrations/2020_10_19_113042_create_logistic_timings_table.php

@@ -0,0 +1,388 @@
+<?php
+
+use App\City;
+use App\Logistic;
+use App\LogisticTiming;
+use App\Province;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateLogisticTimingsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('logistic_timings', function (Blueprint $table) {
+            $table->id();
+            $table->integer('logistic_id')->index()->comment('承运商');
+            $table->integer('to_province_id')->index()->comment('目的省');
+            $table->integer('to_city_id')->index()->nullable()->comment('目的市');
+            $table->integer('days_at_working')->nullable()->comment('工作日用日');
+            $table->timestamps();
+        });
+        $this->addLogisticTiming();
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('logistic_timings');
+    }
+
+    public function addLogisticTiming()
+    {
+        $create_array = [];
+        $map = $this->getMap();
+        $logistic = Logistic::query()->where('name','顺丰特惠')->first();
+        $time = \Carbon\Carbon::now()->format('Y-m-d H:i:s');
+        foreach ($map as $item) {
+            $provinceName = $item[0];
+            $cityName = $item[1];
+            $days_at_working = $item[2];
+            $province =  Province::query()->firstOrCreate(['name'=>$provinceName]);
+            $city = City::query()->firstOrCreate(['province_id'=>$province->id,'name'=>$cityName] );
+            $logisticTiming = LogisticTiming::query()->where('to_province_id',$province->id)->where('to_city_id',$city->id)->count();
+            if($logisticTiming>0){continue;}
+            $create_array[] = [
+                'logistic_id' => $logistic->id,
+                'to_province_id' => $province->id,
+                'to_city_id' => $city->id,
+                'days_at_working' => $days_at_working,
+                'created_at' => $time,
+                'updated_at' => $time
+            ];
+        }
+        LogisticTiming::query()->insert($create_array);
+    }
+
+    public function getMap()
+    {
+        return [['北京','北京','4','5'],
+            ['广东','广州','4','5'],
+            ['上海','上海','2','3'],
+            ['天津','天津','4','5'],
+            ['重庆','重庆','4','5'],
+            ['辽宁','沈阳','4','5'],
+            ['江苏','南京','2','3'],
+            ['湖北','武汉','4','5'],
+            ['四川','成都','5','6'],
+            ['陕西','西安','4','5'],
+            ['贵州','遵义','5','6'],
+            ['贵州','安顺','5','6'],
+            ['云南','泸水','5','6'],
+            ['云南','丽江','5','6'],
+            ['河北','邯郸','4','5'],
+            ['河北','石家庄','4','5'],
+            ['河北','保定','4','5'],
+            ['河北','张家口','4','5'],
+            ['河北','承德','4','5'],
+            ['河北','唐山','4','5'],
+            ['河北','廊坊','4','5'],
+            ['河北','沧州','4','5'],
+            ['河北','衡水','5','6'],
+            ['河北','邢台','4','5'],
+            ['河北','秦皇岛','4','5'],
+            ['山西','朔州','5','6'],
+            ['山西','忻州','4','5'],
+            ['山西','太原','4','5'],
+            ['山西','大同','4','5'],
+            ['山西','阳泉','4','5'],
+            ['山西','晋中','4','5'],
+            ['山西','长治','4','5'],
+            ['山西','晋城','4','5'],
+            ['山西','临汾','5','6'],
+            ['山西','吕梁','4','5'],
+            ['山西','运城','4','5'],
+            ['河南','商丘','3','4'],
+            ['河南','郑州','4','5'],
+            ['河南','安阳','4','5'],
+            ['河南','新乡','4','5'],
+            ['河南','许昌','4','5'],
+            ['河南','平顶山','4','5'],
+            ['河南','信阳','3','4'],
+            ['河南','南阳','4','5'],
+            ['河南','开封','4','5'],
+            ['河南','洛阳','4','5'],
+            ['河南','焦作','4','5'],
+            ['河南','鹤壁','4','5'],
+            ['河南','濮阳','4','5'],
+            ['河南','周口','3','4'],
+            ['河南','漯河','4','5'],
+            ['河南','驻马店','4','5'],
+            ['河南','三门峡','4','5'],
+            ['辽宁','大连','4','5'],
+            ['辽宁','鞍山','5','6'],
+            ['辽宁','本溪','5','6'],
+            ['辽宁','丹东','5','6'],
+            ['辽宁','锦州','4','5'],
+            ['辽宁','营口','5','6'],
+            ['辽宁','阜新','6','7'],
+            ['辽宁','辽阳','4','5'],
+            ['辽宁','朝阳','5','6'],
+            ['辽宁','盘锦','5','6'],
+            ['辽宁','葫芦岛','4','5'],
+            ['吉林','长春','4','5'],
+            ['吉林','吉林','5','6'],
+            ['吉林','延吉','5','6'],
+            ['吉林','四平','5','6'],
+            ['吉林','通化','5','6'],
+            ['吉林','白城','5','6'],
+            ['吉林','辽源','5','6'],
+            ['吉林','松原','5','6'],
+            ['吉林','白山','5','6'],
+            ['黑龙江','哈尔滨','5','6'],
+            ['黑龙江','齐齐哈尔','5','6'],
+            ['黑龙江','牡丹江','5','6'],
+            ['黑龙江','佳木斯','5','6'],
+            ['黑龙江','绥化','5','6'],
+            ['黑龙江','黑河','6','7'],
+            ['黑龙江','大兴安岭','6','7'],
+            ['黑龙江','伊春','5','6'],
+            ['黑龙江','大庆','5','6'],
+            ['黑龙江','七台河','5','6'],
+            ['黑龙江','鸡西','6','7'],
+            ['黑龙江','鹤岗','6','7'],
+            ['黑龙江','双鸭山','6','7'],
+            ['内蒙古','呼伦贝尔','6','7'],
+            ['内蒙古','呼和浩特','5','6'],
+            ['内蒙古','包头','5','6'],
+            ['内蒙古','乌海','5','6'],
+            ['内蒙古','乌兰察布','5','6'],
+            ['内蒙古','通辽','5','6'],
+            ['内蒙古','赤峰','4','5'],
+            ['内蒙古','鄂尔多斯','5','6'],
+            ['内蒙古','巴彦淖尔','5','6'],
+            ['内蒙古','锡林浩特','5','6'],
+            ['内蒙古','乌兰浩特','5','6'],
+            ['内蒙古','阿拉善','4','5'],
+            ['江苏','无锡','2','3'],
+            ['江苏','镇江','2','3'],
+            ['江苏','苏州','2','3'],
+            ['江苏','南通','2','3'],
+            ['江苏','扬州','2','3'],
+            ['江苏','盐城','2','3'],
+            ['江苏','徐州','2','3'],
+            ['江苏','淮安','2','3'],
+            ['江苏','连云港','2','3'],
+            ['江苏','常州','2','3'],
+            ['江苏','泰州','2','3'],
+            ['江苏','宿迁','2','3'],
+            ['山东','菏泽','4','5'],
+            ['山东','济南','4','5'],
+            ['山东','青岛','3','4'],
+            ['山东','淄博','4','5'],
+            ['山东','德州','4','5'],
+            ['山东','烟台','4','5'],
+            ['山东','潍坊','4','5'],
+            ['山东','济宁','3','4'],
+            ['山东','泰安','3','4'],
+            ['山东','临沂','3','4'],
+            ['山东','滨州','4','5'],
+            ['山东','东营','4','5'],
+            ['安徽','滁州','3','4'],
+            ['安徽','合肥','3','4'],
+            ['安徽','蚌埠','3','4'],
+            ['安徽','芜湖','3','4'],
+            ['安徽','淮南','3','4'],
+            ['安徽','马鞍山','3','4'],
+            ['安徽','安庆','3','4'],
+            ['安徽','宿州','3','4'],
+            ['安徽','阜阳','3','4'],
+            ['安徽','黄山','3','4'],
+            ['安徽','淮北','3','4'],
+            ['安徽','铜陵','3','4'],
+            ['安徽','宣城','3','4'],
+            ['安徽','六安','3','4'],
+            ['安徽','池州','3','4'],
+            ['浙江','衢州','2','3'],
+            ['浙江','杭州','2','3'],
+            ['浙江','湖州','2','3'],
+            ['浙江','嘉兴','2','3'],
+            ['浙江','宁波','2','3'],
+            ['浙江','绍兴','2','3'],
+            ['浙江','台州','2','3'],
+            ['浙江','温州','2','3'],
+            ['浙江','丽水','2','3'],
+            ['浙江','金华','2','3'],
+            ['浙江','舟山','2','3'],
+            ['福建','福州','3','4'],
+            ['福建','厦门','4','5'],
+            ['福建','宁德','3','4'],
+            ['福建','莆田','4','5'],
+            ['福建','泉州','4','5'],
+            ['福建','漳州','4','5'],
+            ['福建','龙岩','4','5'],
+            ['福建','三明','4','5'],
+            ['福建','南平','3','4'],
+            ['山东','威海','4','5'],
+            ['山东','枣庄','3','4'],
+            ['山东','日照','3','4'],
+            ['山东','聊城','4','5'],
+            ['广东','汕尾','4','5'],
+            ['广东','阳江','4','5'],
+            ['广东','揭阳','4','5'],
+            ['广东','茂名','6','7'],
+            ['云南','景洪','5','6'],
+            ['云南','瑞丽','6','7'],
+            ['江西','鹰潭','3','4'],
+            ['湖北','襄阳','4','5'],
+            ['湖北','鄂州','3','4'],
+            ['湖北','孝感','4','5'],
+            ['湖北','黄冈','3','4'],
+            ['湖北','黄石','3','4'],
+            ['湖北','咸宁','4','5'],
+            ['湖北','荆州','4','5'],
+            ['湖北','宜昌','4','5'],
+            ['湖北','恩施','4','5'],
+            ['湖北','十堰','4','5'],
+            ['湖北','随州','4','5'],
+            ['湖北','荆门','4','5'],
+            ['湖北','仙桃','4','5'],
+            ['湖南','岳阳','4','5'],
+            ['湖南','长沙','4','5'],
+            ['湖南','湘潭','4','5'],
+            ['湖南','株洲','4','5'],
+            ['湖南','衡阳','4','5'],
+            ['湖南','郴州','4','5'],
+            ['湖南','常德','4','5'],
+            ['湖南','益阳','4','5'],
+            ['湖南','娄底','4','5'],
+            ['湖南','邵阳','4','5'],
+            ['湖南','吉首','4','5'],
+            ['湖南','张家界','4','5'],
+            ['湖南','怀化','4','5'],
+            ['湖南','永州','4','5'],
+            ['广东','江门','4','5'],
+            ['广东','韶关','4','5'],
+            ['广东','惠州','4','5'],
+            ['广东','梅州','5','6'],
+            ['广东','汕头/汕尾','4','5'],
+            ['广东','深圳','4','5'],
+            ['广东','珠海','4','5'],
+            ['广东','佛山','4','5'],
+            ['广东','肇庆','4','5'],
+            ['广东','湛江','5','6'],
+            ['广东','中山','4','5'],
+            ['广东','河源','4','5'],
+            ['广东','清远','4','5'],
+            ['广东','云浮','4','5'],
+            ['广东','潮州','4','5'],
+            ['广东','东莞','4','5'],
+            ['广西','防城港','5','6'],
+            ['广西','南宁','5','6'],
+            ['广西','来宾','5','6'],
+            ['广西','桂林','5','6'],
+            ['广西','贺州','5','6'],
+            ['广西','贵港','5','6'],
+            ['广西','百色','5','6'],
+            ['广西','钦州','5','6'],
+            ['广西','河池','4','5'],
+            ['广西','北海','5','6'],
+            ['江西','新余','4','5'],
+            ['江西','南昌','3','4'],
+            ['江西','九江','3','4'],
+            ['江西','上饶','3','4'],
+            ['江西','抚州','3','4'],
+            ['江西','宜春','4','5'],
+            ['江西','吉安','4','5'],
+            ['江西','赣州','4','5'],
+            ['江西','景德镇','3','4'],
+            ['江西','萍乡','4','5'],
+            ['四川','攀枝花','5','6'],
+            ['四川','自贡','5','6'],
+            ['四川','绵阳','5','6'],
+            ['四川','南充','5','6'],
+            ['四川','达州','4','5'],
+            ['四川','遂宁','5','6'],
+            ['四川','广安','5','6'],
+            ['四川','巴中','5','6'],
+            ['四川','泸州','5','6'],
+            ['四川','宜宾','5','6'],
+            ['四川','内江','5','6'],
+            ['四川','乐山','5','6'],
+            ['四川','西昌','5','6'],
+            ['四川','雅安','5','6'],
+            ['四川','康定','4','5'],
+            ['四川','阿坝藏族羌族州','5','6'],
+            ['四川','德阳','5','6'],
+            ['四川','广元','5','6'],
+            ['贵州','贵阳','4','5'],
+            ['贵州','都匀','4','5'],
+            ['贵州','凯里','4','5'],
+            ['贵州','铜仁','5','6'],
+            ['贵州','毕节','5','6'],
+            ['贵州','六盘水','5','6'],
+            ['贵州','兴义','5','6'],
+            ['云南','昭通','5','6'],
+            ['云南','昆明','5','6'],
+            ['云南','大理','5','6'],
+            ['云南','红河哈尼族彝族州','5','6'],
+            ['云南','曲靖','5','6'],
+            ['云南','保山','5','6'],
+            ['云南','文山','5','6'],
+            ['云南','玉溪','5','6'],
+            ['云南','楚雄','5','6'],
+            ['云南','普洱','5','6'],
+            ['云南','临沧','5','6'],
+            ['云南','香格里拉','5','6'],
+            ['海南','海口','5','6'],
+            ['新疆','乌苏','6','7'],
+            ['新疆','哈密','6','7'],
+            ['新疆','和田市','6','7'],
+            ['新疆','阿勒泰市','6','7'],
+            ['新疆','阿图什市','6','7'],
+            ['新疆','博尔塔拉蒙古州','6','7'],
+            ['陕西','延安','4','5'],
+            ['陕西','榆林','4','5'],
+            ['陕西','渭南','4','5'],
+            ['陕西','商洛','4','5'],
+            ['陕西','安康','4','5'],
+            ['陕西','汉中','4','5'],
+            ['陕西','宝鸡','4','5'],
+            ['陕西','铜川','4','5'],
+            ['甘肃','临夏','4','5'],
+            ['甘肃','兰州','5','6'],
+            ['甘肃','定西','5','6'],
+            ['甘肃','平凉','5','6'],
+            ['甘肃','庆阳','4','5'],
+            ['甘肃','武威','5','6'],
+            ['甘肃','张掖','5','6'],
+            ['甘肃','酒泉','5','6'],
+            ['甘肃','天水','4','5'],
+            ['甘肃','陇南','5','6'],
+            ['甘肃','合作','5','6'],
+            ['甘肃','白银','5','6'],
+            ['宁夏','银川','5','6'],
+            ['宁夏','石嘴山','5','6'],
+            ['宁夏','吴忠','5','6'],
+            ['宁夏','固原','5','6'],
+            ['宁夏','中卫','5','6'],
+            ['青海','海北藏族自治州','5','6'],
+            ['青海','西宁','5','6'],
+            ['青海','海东','5','6'],
+            ['青海','同仁县','5','6'],
+            ['青海','共和县','5','6'],
+            ['青海','玛訫县','5','6'],
+            ['青海','德令哈','5','6'],
+            ['青海','格尔木','5','6'],
+            ['新疆','克拉玛依','6','7'],
+            ['新疆','乌鲁木齐','6','7'],
+            ['新疆','奎屯','6','7'],
+            ['新疆','石河子','6','7'],
+            ['新疆','昌吉州','6','7'],
+            ['新疆','吐鲁番','6','7'],
+            ['新疆','库尔勒','6','7'],
+            ['新疆','阿克苏市','6','7'],
+            ['新疆','喀什市','6','7'],
+            ['新疆','伊犁哈萨克州','6','7']];
+    }
+}

+ 16 - 0
database/seeds/LogisticTimingSeeder.php

@@ -0,0 +1,16 @@
+<?php
+
+use Illuminate\Database\Seeder;
+
+class LogisticTimingSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        //
+    }
+}

+ 35 - 0
public/css/app.css

@@ -228,6 +228,41 @@ table.table-striped tbody tr:hover.td-yellow {
   background: #fdf3db;
 }
 
+table .table-striped > tr.focusing,
+table tr.focusing > td,
+table.table-striped tbody .table-striped > tr.focusing,
+table.table-striped tbody tr.focusing > td {
+  background: #d5aba1;
+}
+
+table .table-striped > tr.focusing.td-warm,
+table tr.focusing > td.td-warm,
+table.table-striped tbody .table-striped > tr.focusing.td-warm,
+table.table-striped tbody tr.focusing > td.td-warm {
+  background: #e7ae80;
+}
+
+table .table-striped > tr.focusing.td-cool,
+table tr.focusing > td.td-cool,
+table.table-striped tbody .table-striped > tr.focusing.td-cool,
+table.table-striped tbody tr.focusing > td.td-cool {
+  background: #5f8fcd;
+}
+
+table .table-striped > tr.focusing.td-helpful,
+table tr.focusing > td.td-helpful,
+table.table-striped tbody .table-striped > tr.focusing.td-helpful,
+table.table-striped tbody tr.focusing > td.td-helpful {
+  background: #69cb9c;
+}
+
+table .table-striped > tr.focusing.td-yellow,
+table tr.focusing > td.td-yellow,
+table.table-striped tbody .table-striped > tr.focusing.td-yellow,
+table.table-striped tbody tr.focusing > td.td-yellow {
+  background: #d9c290;
+}
+
 .row-even {
   background-color: rgba(0, 0, 0, 0.05);
 }

+ 0 - 24
public/t.php

@@ -1,26 +1,2 @@
 <?php
 
-//
-//ini_set('max_execution_time',2500);
-//ini_set('memory_limit','2526M');
-//
-//$file=fopen('logs.txt','r');
-//
-//$adding=fread($file,filesize('logs.txt'));
-////$adding=fread($file,20000);
-//$re=[];
-//preg_match_all("/(批量更新失败 SQL\:\(.*?\) 堆栈)*/",$adding,$re);
-//$str='';
-//$fileToWrite=fopen('logSql.txt','a+');
-//foreach ($re[1] as $str) {
-//    fwrite($fileToWrite,$str);
-//}
-
-
-$arr=[];
-$arr['abc']=123;
-$arr['abcd']=22;
-$arr['bb']=22;
-$arr['bbc']=33;
-
-var_dump(array_chunk($arr,2));

+ 1 - 1
resources/sass/layout.scss

@@ -109,7 +109,7 @@ table,table.table-striped tbody{
             background: #fdf3db;
         }
     }
-    tr.focusing td,{
+    .table-striped>tr.focusing,tr.focusing>td{
         background: #d5aba1;
         &.td-warm{
             background: rgb(231, 174, 128);

+ 7 - 2
resources/views/order/index/delivering.blade.php

@@ -627,6 +627,7 @@
                         $("#result_explain #result_explain").removeClass('is-invalid');
                         $("#exampleModal").modal('hide');
                     }
+                    let _this = this;
                     tempTip.setDuration(99999);
                     tempTip.waitingTip('处理中,请稍候');
                     let data = {orderNos:this.checkData,typeId: this.typeId,result_explain:this.result_explain};
@@ -634,8 +635,12 @@
                         tempTip.setDuration(5000)
                         tempTip.cancelWaitingTip();
                         if(res.data.success){
-                            tempTip.setDuration(3000);
-                            tempTip.showSuccess('已标记为问题件');
+                            tempTip.setDuration(3000)
+                            tempTip.showSuccess('已标记为问题件')
+                            _this.checkData.forEach(function(orderNo){
+                                _this.orderIssueNos.push(orderNo)
+                            })
+                            _this.checkData = []
                         }else{
                             tempTip.setDuration(4000);
                             tempTip.show(res.data.fail_info);

+ 31 - 35
resources/views/order/issue/edit.blade.php

@@ -7,11 +7,6 @@
     <div class="container-fluid d-none" id="editOrderIssue">
         <div class="card col-md-8 offset-md-2 ">
             <div class="card-header">问题件修改</div>
-            <input type="hidden" name="order_id" v-model="orderIssues.order_id">
-            <input type="hidden" name="id" v-model="orderIssues.id">
-            <input type="hidden" name="rejected_bill_id" v-model="orderIssues.rejected_bill_id">
-            <input type="hidden" name="order_issue_type_id" v-model="orderIssues.order_issue_type_id">
-            <input type="hidden" name="second_order_id" v-model="orderIssues.second_order_id">
             <div class="card-body">
                 <div class="form-group row">
                     <label for="name" class="col-2 col-form-label text-right">原始客户订单号</label>
@@ -55,24 +50,26 @@
                 <div class="form-group row">
                     <label class="col-2 col-form-label text-right">二次客户订单号</label>
                     <div class="col-8">
-                        <input type="text" name="second_order_id" class="form-control" v-model="secondOrder.client_code" @blur="getSecondOrder($event)" id="order_id">
+                        <input type="text" name="second_order_id" class="form-control" v-model="orderIssues.second_client_no" @change="getSecondOrder($event)" id="order_id">
                     </div>
                 </div>
                 <div class="form-group row">
-                    <label class="col-2 col-form-label text-right">二次订单商品详情</label>
-                    <div class="col-8">
-                        <div class="alert alert-success" v-if="secondOrder.packages">二次订单商品详情已填充</div>
+                    <label class="col-2 col-form-label text-right">二次订单商品详情</label>
+                    <div class="col-8" >
+                        <div class="alert alert-success" v-if="secondOrder">二次订单商品详情已填充</div>
                         <div class="alert alert-secondary" v-else>二次订单商品详情</div>
-                        <table class="table" v-if="secondOrder.packages">
-                            <tr><th>条码</th><th>商品名</th><th>数量</th></tr>
-                            <template v-for="package in secondOrder.packages">
-                                <tr v-for="commodity in package.commodities">
-                                    <td>@{{ commodity.commodity.sku }}</td>
-                                    <td>@{{ commodity.commodity.name }}</td>
-                                    <td>@{{ commodity.amount }}</td>
-                                </tr>
-                            </template>
-                        </table>
+                        <div v-if="secondOrder">
+                            <table class="table" v-if="secondOrder.packages">
+                                <tr><th>条码</th><th>商品名</th><th>数量</th></tr>
+                                <template v-for="package in secondOrder.packages">
+                                    <tr v-for="commodity in package.commodities">
+                                        <td>@{{ commodity.commodity.sku }}</td>
+                                        <td>@{{ commodity.commodity.name }}</td>
+                                        <td>@{{ commodity.amount }}</td>
+                                    </tr>
+                                </template>
+                            </table>
+                        </div>
                     </div>
                 </div>
                 <div class="form-group row">
@@ -155,7 +152,7 @@
             data: {
                 orderIssues: {!! $orderIssue!!},
                 order: @if($order){!! $order !!}@else {id:null,owner_id:null}@endif,
-                secondOrder: @if($secondOrder){!! $secondOrder !!}@else {client_code:''}@endif,
+                secondOrder: @if($secondOrder){!! $secondOrder !!}@else null @endif,
                 rejectedBill: @if($rejectedBill){!! $rejectedBill !!}@else {logistic_number_return:''}@endif,
                 create_RejectedBill:'',
                 owners:{!! $owners  !!},
@@ -173,33 +170,27 @@
             mounted: function () {
                 $("#editOrderIssue").removeClass('d-none');
             },
-            watch:{
-                secondOrder:{
-                    handler:function(value){
-                        if(value.code === ''){
-                            this.secondOrder.packages = '';
-                        }
-                    },
-                    deep:true,
-                },
-            },
             methods: {
                 submitFake(){
                     let _this = this;
                     let p= new Promise(function (resolve) {
-                        let client_code = _this.secondOrder.client_code;
+                        let client_code = _this.orderIssues.second_client_no;
                         if(client_code){
                             let data = {clientNo:client_code};
+                            tempTip.setDuration(99999);
+                            tempTip.waitingTip('提交中');
                             axios.post("{{url('apiLocal/order/issue/getOrderInfoByClientNo')}}",data).then(function(res){
+                                tempTip.setDuration(2000);
+                                tempTip.cancelWaitingTip();
                                 if(res.data.success){
                                     _this.secondOrder = res.data.data;
-                                    _this.orderIssues.second_order_id = res.data.data.id;
                                     resolve();
                                 } else {
                                     tempTip.setDuration(4000);
                                     tempTip.show('查询订单信息出现异常:' + res.data.fail_info);
                                 }
                             }).catch(function(err){
+                                tempTip.cancelWaitingTip();
                                 tempTip.setDuration(4000);
                                 tempTip.show('网络异常:' + err);
                             });
@@ -244,7 +235,7 @@
                 },
                 getSecondOrder(){
                     let _this = this;
-                    let client_code = this.secondOrder.client_code;
+                    let client_code = this.orderIssues.second_client_no;
                     if(!client_code){
                         _this.secondOrder = '';
                         _this.orderIssues.second_order_id = null;
@@ -254,8 +245,13 @@
                         let data = {clientNo:client_code};
                         axios.post("{{url('apiLocal/order/issue/getOrderInfoByClientNo')}}",data).then(function(res){
                             if(res.data.success){
-                                _this.secondOrder = res.data.data;
-                                _this.orderIssues.second_order_id = res.data.data.id;
+                                if(res.data.message){
+                                    tempTip.setDuration(2000);
+                                    tempTip.okWindow(res.data.message,'确认')
+                                    _this.secondOrder = null;
+                                }else{
+                                    _this.secondOrder = res.data.data;
+                                }
                             } else {
                                 tempTip.setDuration(4000);
                                 tempTip.show('查询订单信息出现异常:' + res.data.fail_info);

+ 101 - 42
resources/views/order/issue/index.blade.php

@@ -4,7 +4,7 @@
 @section('content')
     @component("order.issue.menu")@endcomponent
     <div class="container-fluid" id="issue_div">
-        <div style="min-width: 3300px;" >
+        <div style="@cannot('订单管理-问题件-客户不可见')min-width: 3000px;@else min-width: 1990px; @endcannot">
             <div id="list" class="d-none container-fluid">
                 <div id="form_div" style="min-width: 2250px;"></div>
                 <div class="form-inline mt-1" id = "btn">
@@ -45,8 +45,8 @@
                         </button>
                     </span>
                 </div>
-                <table class="table table-sm table-striped table-bordered table-hover card-body p-0 m-0" style="background: #fff;min-width: 3000px;">
-                    <tr class="tr-yellow" align="center">
+                <table class="table table-sm table-striped table-bordered table-hover card-body p-0 m-0" style="background: #fff;@cannot('订单管理-问题件-客户不可见')min-width: 3000px;@else min-width: 1990px; @endcannot">
+                    <tr class="tr-yellow" align="center" >
                         <th class=" font-weight-bolder header-1" ></th>
                         <th class="td-yellow  font-weight-bolder original-class table-head-warning  header-2">
                             <span>原始运单号</span>
@@ -258,7 +258,7 @@
                                 <table  class="table table-sm m-0" v-if="orderIssue.order.packages"
                                         :class="orderIssue.order.commodityPackages > 1? 'collapse' : ''" :id="'order'+orderIssue.id">
                                     <template v-for="packages in orderIssue.order.packages">
-                                        <tr v-for="item in packages.commodities" class="text-center" :data-value="orderIssue.orderCount += 1" align="center" v-if="item.commodity">
+                                        <tr v-for="item in packages.commodities" class="text-center" :data-value="orderIssue.orderCount += 1" align="center" v-if="item.commodity" @click="removeFocusing($event)">
                                             <td >@{{ item.commodity.sku }}</td>
                                             <td>
                                                 <p class="text-truncate text-primary m-0 p-0 tooltipTarget" style="width: 100px;cursor:pointer;text-decoration: underline" title="双击展开"  @dblclick="nowrapText($event)">@{{ item.commodity.name }}</p>
@@ -290,7 +290,7 @@
                             <div v-if="orderIssue.rejected_bill" class="m-0 p-0">
                                 <table v-if="orderIssue.rejected_bill.items" class="table table-sm  m-0" :class="orderIssue.rejected_bill.items.length > 1 ? 'collapse' : '' " :id="'rejectedBill'+orderIssue.id"
                                        :data-value="orderIssue.rejectedCount = 0">
-                                    <tr v-for="item in orderIssue.rejected_bill.items"
+                                    <tr v-for="item in orderIssue.rejected_bill.items" @click="removeFocusing($event)"
                                         :data-value="orderIssue.rejected_bill.sum += item.amount" align="center">
                                         <td style="min-width: 75px" >@{{ item.barcode_goods }}</td>
                                         <td style="min-width: 100px" >
@@ -315,11 +315,9 @@
                                 <select class="form-control form-control-sm" :value="orderIssue.order_issue_type_id" @change="updateOrderIssue(orderIssue,'order_issue_type_id',$event)">
                                     <option value></option>
                                     <option v-for="type in orderIssueType" :value="type.name" >@{{ type.value }}</option>
-                                    <select>
-                                        @else
-                                            <span v-if="orderIssue.issue_type">
-                                @{{ orderIssue.issue_type.name}}
-                            </span>
+                                <select>
+                            @else
+                                <span v-if="orderIssue.issue_type">@{{ orderIssue.issue_type.name}}</span>
                             @endcan
                         </td>
 
@@ -345,6 +343,7 @@
                                 <table class="table table-sm p-0 m-0 " :id="'logs'+orderIssue.id" :data-value="orderIssue.logShow = true">
                                     <tr style="position:static" align="center" v-for="(log,index) in orderIssue.logs"
                                         :class="(index > 1 && orderIssue.logShow) ? 'd-none':''"
+                                        @click="removeFocusing($event)"
                                         v-on:mouseover="showDelBtn($event)" v-on:mouseleave="hideDelBtn($event)" >
                                         <td style="min-width: 200px">@{{ log.content }}</td>
                                         <td class="text-muted" style="min-width: 120px">@{{ log.user.name }}</td>
@@ -368,14 +367,37 @@
                                 <span class="btn btn-outline-secondary " @click="showSecondeOrder"   :style="orderIssues.length>4 ?'{height: 200px;line-height: 100px':''">展开运单列</span>
                             </td>
                             <td class="child-layer-3-hide" v-if="isShowSecondOrderInfo">
-                                <span v-if="orderIssue.second_order" class="p-0"> @{{ orderIssue.second_order.client_code }}</span>
+                                @can('订单管理-问题件-编辑')
+                                    <input class="form-control form-control-sm" @change="editSecondClientNo(orderIssue,$event)" :value="orderIssue.second_client_no">
+                                @else
+                                    @{{ orderIssue.second_client_no }}
+                                @endcan
+
                             </td>
                             <td class="child-layer-3-hide" v-if="isShowSecondOrderInfo">
-                                <span v-if="orderIssue.second_order" class="p-0"> @{{ orderIssue.second_order.logistic.name }}</span>
+                                <span v-if="orderIssue.second_order" class="p-0">
+                                    <span v-if="orderIssue.second_order.logistic">
+                                        @{{ orderIssue.second_order.logistic.name }}
+                                    </span>
+                                </span>
                             </td>
-                            <td class="p-0 child-layer-3-hide" valign="middle" align="center" v-if="isShowSecondOrderInfo">
-                                <template v-if="orderIssue.second_order">
-                                    <div class=" m-0" :id="'secondOrderNumbers'+orderIssue.id"
+                            <td class="log-td p-0 child-layer-3-hide" v-if="isShowSecondOrderInfo" v-on:mouseover="edit.orderIssue.id=orderIssue.id" v-on:mouseleave="edit.orderIssue.id = null">
+                                <div class="row position-absolute p-0 m-0" v-if="edit.orderIssue.id === orderIssue.id" :class="edit.orderIssue.id === orderIssue.id ? '':'d-none'">
+                                    <button type="button" class="btn btn-primary " style="margin-top: -35px" @click="edit.orderIssue.showId === orderIssue.id ? edit.orderIssue.showId='':edit.orderIssue.showId=orderIssue.id">
+                                        新
+                                    </button>
+                                </div>
+                                <div class="row p-0 m-0" v-if="edit.orderIssue.showId === orderIssue.id ">
+                                    <div class="form-inline">
+                                        <input class="form-control" :id="'secondLogisticNumber-'+orderIssue.id">
+                                        <button type="button" class="btn btn-sm btn-primary" @click="addSecondLogisticNumber(orderIssue)">
+                                            添加
+                                        </button>
+                                    </div>
+                                </div>
+
+                                <template v-if="orderIssue.second_order !== null">
+                                    <div class="text-center m-0" :id="'secondOrderNumbers'+orderIssue.id"
                                          :class="orderIssue.seconderCount > 1 ? 'collapse':''"
                                          :data-value="orderIssue.seconderCount = 0">
                                         <p class="m-0 p-0  text-muted " v-for="logisticNumber in orderIssue.second_order.logisticNumbers"
@@ -392,20 +414,18 @@
                                 </template>
                             </td>
                             <td class="child-layer-3-hide p-0" colspan="3" v-if="isShowSecondOrderInfo">
-                                <template v-if="orderIssue.second_order" class=" p-0">
+                                <template v-if="orderIssue.second_order!==null" class=" p-0">
                                     <div class="m-0 p-0" :class="orderIssue.secondeOrderCount > 1 ? 'collapse':''"
                                          :id="'secondOrder'+orderIssue.id">
                                         <table class="table table-sm  m-0 "
                                                :data-count="orderIssue.secondeOrderCount = 0"
                                                :data-value="orderIssue.secondeOrderItems = 0">
                                             <template v-for="packages in orderIssue.second_order.packages">
-                                                <tr v-for="item in packages.commodities" :data-value="orderIssue.secondeOrderCount += 1" v-if="item.commodity">
+                                                <tr v-for="item in packages.commodities" :data-value="orderIssue.secondeOrderCount += 1" v-if="item.commodity" >
                                                     <td >@{{ item.commodity.sku }}</td>
                                                     <td >
                                                         <div class="text-truncate text-primary tooltipTarget" style="width: 100px;cursor:pointer;text-decoration: underline" title="双击展开" @dblclick="nowrapText($event)">@{{ item.commodity.name }}</div>
                                                         <div class="text-nowrap tooltipTarget"  style="display: none;cursor:pointer" @dblclick="truncateText($event)" title="双击收起">@{{ item.commodity.name }}</div>
-                                                        {{--                                                    <p class="text-truncate text-primary m-0 p-0" style="width: 100px;cursor:pointer;text-decoration: underline"  @click="nowrapText($event)">@{{ item.commodity.name }}</p>--}}
-                                                        {{--                                                    <p class="text-nowrap m-0 p-0" style="display: none;cursor:pointer" @click="truncateText($event)" >@{{ item.commodity.name }}</p>--}}
                                                     </td>
                                                     <td :data-value="orderIssue.secondeOrderItems+=item.amount">@{{ item.amount }}</td>
                                                 </tr>
@@ -663,6 +683,8 @@
                 edit:{
                     batchStoreLogs:'',
                     isShow:[],
+                    addSendOrderIssueID:'',
+                    orderIssue: {id: null,showId:''},
                 },
             },
             mounted: function () {
@@ -675,7 +697,6 @@
                 $('.header-1').attr('colspan',countShow);
 
                 $('#list').removeClass("d-none");
-
                 let _this = this;
                 let log_content_range = [{name:'15',value:'15天内'},{name:'31',value:'近一月'},{name:'92',value:'近三月'},{name:'183',value:'近半年'},{name:'366',value:'近一年'},{name:'0',value:'不限'},];
                 let final_status = [
@@ -796,7 +817,6 @@
                 },
                 deleteOrderIssueById() {
                     let _this = this;
-
                     tempTip.setDuration(99999)
                     tempTip.waitingTip('删除中,请稍候')
                     let id = $('#deleteId').val();
@@ -952,26 +972,7 @@
                     }
                     let _this = this;
                     let ids = _this.checkData;
-                    // let data = {ids: ids};
                     this.endOrderIssues(ids)
-                    {{--axios.post('{{url('apiLocal/order/issue/endOrderIssue')}}', data).then(function (res) {--}}
-                    {{--    if (res.data.success) {--}}
-                    {{--        tempTip.setDuration(2000);--}}
-                    {{--        tempTip.showSuccess('勾选订单已变为已完结');--}}
-                    {{--        _this.orderIssues.forEach(function (item,index) {--}}
-                    {{--            if (ids.includes(item.id)) {--}}
-                    {{--                item.final_status = '已解决'--}}
-                    {{--            }--}}
-                    {{--        });--}}
-                    {{--        _this.checkData = [];--}}
-                    {{--    } else {--}}
-                    {{--        tempTip.setDuration(3000)--}}
-                    {{--        tempTip.show(res.data.fail_info)--}}
-                    {{--    }--}}
-                    {{--}).catch(function (err) {--}}
-                    {{--    tempTip.setDuration(4000);--}}
-                    {{--    tempTip.show('网络异常:' + err);--}}
-                    {{--})--}}
                 },
                 disposeOrderIssue(e,orderIssue) {
                     let _this = this;
@@ -1255,7 +1256,6 @@
                     let data = {orderIssueIds:this.checkData,content:this.edit.batchStoreLogs};
                     axios.post('{{url("apiLocal/order/issue/log/batchStore")}}',data).then(function(response){
                         if(response.data.success){
-
                             _this.edit.batchStoreLogs = ''
                             let logs = response.data.logs
                             _this.orderIssues.forEach(function(item){
@@ -1288,11 +1288,13 @@
                             orderIssue['logistic_number_return'] = logistic_number_return
                             orderIssue['rejected_bill'] = response.data.rejectedBill
                             orderIssue['rejecting_status'] = response.data.rejectingStatus
+                            orderIssue.is_new_rejecting = '有'
                             tempTip.setDuration(2000)
                             tempTip.showSuccess('修改成功')
                         }else{
                             if(response.data.message){
                                 orderIssue['logistic_number_return'] = logistic_number_return
+                                orderIssue.is_new_rejecting = '无'
                                 orderIssue.rejected_bill = null
                                 orderIssue.finalStatus = '未退回'
                                 tempTip.okWindow(response.data.message,'确认')
@@ -1306,6 +1308,34 @@
                         tempTip.show('修改异常:'+error)
                     })
                 },
+                editSecondClientNo(orderIssue,e){
+                    let value = $(e.target).val()
+                    let data = {id:orderIssue.id,secondClientNo:value}
+                    axios.post('{{url('apiLocal/order/issue/editSecondClientNo')}}',data).then(function(response){
+                        if(response.data.success){
+                            if(response.data.message){
+                                orderIssue.second_client_no = value
+                                orderIssue.second_order = null;
+                                tempTip.okWindow(response.data.message,'确认')
+                            }else{
+                                orderIssue.second_client_no =value
+                                if(response.data.order === null){
+                                    orderIssue.second_order = null;
+                                }else{
+                                    orderIssue.second_order = response.data.order
+                                }
+                                tempTip.setDuration(2000)
+                                tempTip.showSuccess('修改成功')
+                            }
+                        }else{
+                            tempTip.setDuration(2000)
+                            tempTip.show('修改失败:'+response.data.fail_info)
+                        }
+                    }).catch(function(error){
+                        tempTip.setDuration(3000)
+                        tempTip.show('修改异常:'+error)
+                    });
+                },
                 truncateText(e){
                     let nowrapSpan = $(e.target);
                     nowrapSpan.hide();
@@ -1317,13 +1347,42 @@
                     truncateSpan.siblings('.text-nowrap').show();
                 },
                 addShow(id){
-                    console.log(id)
                     this.edit.isShow.push(id)
                 },
                 removeShow(id){
                     let index = this.edit.isShow.indexOf(id)
                     if(index!==-1) this.edit.isShow.splice(index,1)
                 },
+                removeFocusing(e){
+                    $(e.target).parent('tr').removeClass('focusing')
+                },
+                addSecondLogisticNumber(orderIssue){
+                    let logisticNumber = $('#secondLogisticNumber-'+orderIssue.id).val()
+                    let data = {id:orderIssue.id,logistic_number:logisticNumber,client_code:orderIssue.second_client_no}
+                    let _this = this;
+                    axios.post('{{url('apiLocal/order/issue/secondOrderAddOrderPackage')}}',data).then(function(response){
+                        if(response.data.success){
+                            tempTip.setDuration(2000)
+                            tempTip.showSuccess('添加成功')
+                            if(orderIssue.second_order == null){
+                                orderIssue.second_order = response.data.order
+                            }
+                            if(orderIssue.second_order.packages==null){
+                                orderIssue.second_order.packages = []
+                            }
+                            orderIssue.second_order.packages.push(response.data.orderPackage);
+                            _this.edit.orderIssue.id = ''
+                            _this.edit.orderIssue.showId = ''
+                        }else{
+                            tempTip.setDuration(2000)
+                            tempTip.show(response.data.fail_info)
+                        }
+                    }).catch(function(error){
+                        tempTip.setDuration(2000)
+                        tempTip.show('添加失败'+error)
+                    });
+                },
+
             }
         })
         // modal 隐藏时修改 input 为空

+ 7 - 7
resources/views/order/issue/performance.blade.php

@@ -37,13 +37,13 @@
                     <td>
                         <input type="checkbox"  v-model="checkData" :value="index+1">
                     </td>
-                    <td>@{{ index+1 }}</td>
-                    <td>@{{ performance.user }}</td>
-                    <td>@{{ performance.owner }}</td>
-                    <td>@{{ performance.createCount }}</td>
-                    <td>@{{ performance.treatmentCount }}</td>
-                    <td>@{{ performance.endCount }}</td>
-                    <td>@{{ performance.sum }}</td>
+                    <td>@{{  Number(index)+1 }}</td>
+                    <td>@{{ performance.userName }}</td>
+                    <td>@{{ performance.ownerName }}</td>
+                    <td>@{{ performance.created }}</td>
+                    <td>@{{ performance.processed }}</td>
+                    <td>@{{ performance.end }}</td>
+                    <td>@{{ performance.sumNumber }}</td>
                 </tr>
             </table>
 

+ 19 - 8
resources/views/order/tracking/index.blade.php

@@ -83,7 +83,9 @@
                         <td>@{{ index+1 }}</td>
                         <td class="text-decoration-none td-warm">@{{ trackOrder.ownerName }}</td>
                         <td class="td-warm">
-                            <span v-if="trackOrder.web_order_number"></span>
+                            <span v-if="trackOrder.web_order_number">
+                                <input class="form-control form-control-sm" :value="trackOrder.order_client_code === trackOrder.web_order_number ? '' : trackOrder.order_client_code " @change="warehouseUpdate($event,'order_client_code',trackOrder)" >
+                            </span>
                             <span v-else>
                             @can('订单管理-跟踪-仓库编辑')
                                 <input class="form-control form-control-sm" :value="trackOrder.order_client_code" @change="warehouseUpdate($event,'order_client_code',trackOrder)" >
@@ -94,12 +96,10 @@
                         </td>
                         <td class="td-warm">
                             @can('订单管理-跟踪-仓库编辑')
-                                <input class="form-control form-control-sm" :value="trackOrder.web_order_number" @keydown.enter="warehouseUpdate($event,'web_order_number',trackOrder)" >
+                                <input class="form-control form-control-sm" :value="trackOrder.web_order_number" @change="warehouseUpdate($event,'web_order_number',trackOrder)" >
                             @else
                                 @{{ trackOrder.web_order_number }}
                             @endcan
-{{--                            <span v-if="trackOrder.web_order_number">@{{ trackOrder.web_order_number }} </span>--}}
-{{--                            <span v-else> @{{ trackOrder.web_order_number }}</span>--}}
                         </td>
                         <td class="td-warm">
                             @can('订单管理-跟踪-仓库编辑')
@@ -141,8 +141,15 @@
                                 @{{ trackOrder.pallet_total }}
                             @endcan
                         </td>
-                        <td class="td-yellow">@{{ trackOrder.packageLogistic }}</td>
-                        <td class="td-yellow">@{{ trackOrder.packageLogisticNumber}}</td>
+                        <td class="td-yellow"> @{{ trackOrder.packageLogistic }}</td>
+                        <td class="td-yellow">
+                            <span v-if="trackOrder.packageLogistic === '新杰物流'">
+                                @{{ trackOrder.web_order_number ? trackOrder.web_order_number : trackOrder.order_client_code}}
+                            </span>
+                            <span v-else>
+                                @{{ trackOrder.packageLogisticNumber}}
+                            </span>
+                        </td>
                         <td class="td-yellow">@{{ trackOrder.orderCity}}</td>
 
                         <td class="td-calm">
@@ -386,7 +393,7 @@
                     let _this = this
                     axios.post('{{url("apiLocal/order/tracking/warehouseUpdate")}}',data).then(function(response){
                         if(response.data.success){
-                            tempTip.setDuration(200000)
+                            tempTip.setDuration(2000)
                             tempTip.showSuccess('更新成功')
                             _this.modifyOrderTracking(param,value,trackingOrder)
                         }else{
@@ -418,11 +425,15 @@
                         tempTip.setDuration(4000)
                         tempTip.show('更新失败:'+error)
                     })
-
                 },
                 modifyOrderTracking(param,value, trackingOrder){
                     this.trackOrders.forEach(function(item){
                         if(item['orderClientNumber'] === trackingOrder['orderClientNumber']){
+                            if(param === 'planning_sent_at'){
+                                item['signed_at'] = value
+                                item['is_arrival'] = '是'
+                                item['is_on_duty_shift'] = '是'
+                            }
                             item[param] = value
                         }
                     })

+ 1 - 1
resources/views/rejected/search/general.blade.php

@@ -222,7 +222,7 @@
                         {name:'checked_numbers',type:'input',tip:'审核批次号:支持右位留空的模糊搜索',placeholder:'审核批次号'},
                         {name:'is_loaded',type:'select',placeholder: '是否入库',data:[{name:1,value:'是'},{name:0,value:'否'},
                         {name:'null',value:'无需入库'},{name:2,value:'待推单'},{name:4,value:'待确认'},{name:3,value:'交互异常'}]},
-                        {name:'is_issue',type:'checkbox',data:[{name:'true',value:'对应问题件'}]}
+                        {name:'is_issue',type:'select',data:[{name:'true',value:'有'},{name:'false',value:'无'}],tip:'问题件',placeholder:'问题件'}
                     ]
                 ];
                 this.form=new query({

+ 6 - 1
resources/views/test.blade.php

@@ -7,5 +7,10 @@
     <input name="test">
     <button type="submit">提交</button>
 </form>
+<form action="{{url('test/File')}}"  method="post" enctype="multipart/form-data"   target="_blank">
+    @csrf
+    <input type="file" class="form-control-file"  name="excelFile" required>
+    <button type="submit">提交</button>
+</form>
 </body>
-</html>
+</html>

+ 2 - 0
routes/apiLocal.php

@@ -47,7 +47,9 @@ Route::group(['prefix' => 'order'], function () {
         Route::post('getOrderInfoByClientNo', 'OrderIssueController@apiGetOrderInfoByClientNo');
         Route::post('isExistByOrderNo','OrderIssueController@isExistByOrderNoApi');
         Route::post('updateLogisticNumberReturn','OrderIssueController@updateLogisticNumberReturnApi');
+        Route::post('editSecondClientNo','OrderIssueController@editSecondClientNoApi');
         Route::post('endOrderIssues','OrderIssueController@endOrderIssuesApi');
+        Route::post('secondOrderAddOrderPackage','OrderIssueController@secondOrderAddOrderPackageApi');
 
          Route::group(['prefix'=>'onTop'],function(){
             Route::post('/store', 'OrderIssueOnTopController@apiStore');