Преглед изворни кода

Merge branch 'master' into zzd

# Conflicts:
#	resources/views/weight/package/statistics.blade.php
dream пре 5 година
родитељ
комит
dce1d54328
91 измењених фајлова са 23506 додато и 1984 уклоњено
  1. 24 0
      app/Http/Controllers/InventoryAccountController.php
  2. 7 3
      app/Http/Controllers/LaborReportController.php
  3. 2 1
      app/Http/Controllers/OrderController.php
  4. 34 10
      app/Http/Controllers/OrderIssueController.php
  5. 16 4
      app/Http/Controllers/OrderIssuePerformanceController.php
  6. 2 2
      app/Http/Controllers/OrderTrackingController.php
  7. 2 1
      app/Http/Controllers/RejectedController.php
  8. 12 67
      app/Http/Controllers/TestController.php
  9. 2 1
      app/Http/Controllers/UserDutyCheckController.php
  10. 2 1
      app/Http/Controllers/api/thirdPart/flux/StoreController.php
  11. 3 3
      app/Imports/OrderIssueImport.php
  12. 2 0
      app/Imports/StoreCheckingReceiveImport.php
  13. 1 1
      app/InventoryAccount.php
  14. 15 1
      app/LaborReport.php
  15. 16 4
      app/OrderIssue.php
  16. 4 0
      app/OrderPackageCommodities.php
  17. 3 3
      app/OrderTracking.php
  18. 5 0
      app/Owner.php
  19. 4 4
      app/Services/CommodityBarcodeService.php
  20. 0 97
      app/Services/CommodityService.php
  21. 34 8
      app/Services/InventoryAccountService.php
  22. 1 0
      app/Services/LaborReportService.php
  23. 0 33
      app/Services/LogisticService.php
  24. 11 23
      app/Services/OracleDOCOrderHeaderService.php
  25. 36 72
      app/Services/OrderIssuePerformanceService.php
  26. 1 3
      app/Services/OrderIssueProcessLogService.php
  27. 14 5
      app/Services/OrderIssueService.php
  28. 528 391
      app/Services/OrderPackageCommoditiesService.php
  29. 87 193
      app/Services/OrderPackageService.php
  30. 28 332
      app/Services/OrderService.php
  31. 61 190
      app/Services/OrderTrackingService.php
  32. 10 35
      app/Services/OwnerService.php
  33. 19 0
      app/Services/RejectedService.php
  34. 3 3
      database/migrations/2020_07_29_160826_create_order_issues_table.php
  35. 33 0
      database/migrations/2020_10_12_092325_change_inventory_account_mission_checked_column_checked_to_five.php
  36. 34 0
      database/migrations/2020_10_12_105209_add_order_track_order_code.php
  37. 42 0
      database/migrations/2020_10_14_112825_add_order_issue_second_client_no.php
  38. 1 1
      package-lock.json
  39. 531 108
      public/css/app.css
  40. 21264 23
      public/js/app.js
  41. 0 24
      public/t.php
  42. 15 0
      resources/sass/layout.scss
  43. 3 3
      resources/views/inventory/statement/changeInventory.blade.php
  44. 3 3
      resources/views/inventory/statement/dailyLog.blade.php
  45. 3 3
      resources/views/inventory/statement/inventoryCompare.blade.php
  46. 284 102
      resources/views/inventory/stockInventory/inventoryMission.blade.php
  47. 3 3
      resources/views/inventory/stockInventory/mission.blade.php
  48. 3 3
      resources/views/layouts/app.blade.php
  49. 2 2
      resources/views/maintenance/role/index.blade.php
  50. 2 2
      resources/views/maintenance/tutorial/create.blade.php
  51. 2 2
      resources/views/maintenance/tutorial/edit.blade.php
  52. 2 2
      resources/views/maintenance/user/index.blade.php
  53. 1 1
      resources/views/maintenance/userLabor/index.blade.php
  54. 16 14
      resources/views/order/index/delivering.blade.php
  55. 1 1
      resources/views/order/issue/create.blade.php
  56. 27 29
      resources/views/order/issue/edit.blade.php
  57. 95 61
      resources/views/order/issue/index.blade.php
  58. 9 9
      resources/views/order/issue/performance.blade.php
  59. 3 3
      resources/views/order/issue/workload.blade.php
  60. 53 26
      resources/views/order/tracking/index.blade.php
  61. 1 1
      resources/views/order/wave/search.blade.php
  62. 2 2
      resources/views/personnel/checking-in/QRcode.blade.php
  63. 1 1
      resources/views/personnel/checking-in/clock.blade.php
  64. 1 1
      resources/views/personnel/checking-in/createUserDetail.blade.php
  65. 1 1
      resources/views/personnel/checking-in/enterGroupClock.blade.php
  66. 1 1
      resources/views/personnel/checking-in/importAndExportClock.blade.php
  67. 2 2
      resources/views/personnel/checking-in/importAndExportQRCode.blade.php
  68. 1 1
      resources/views/personnel/checking-in/importAndExportSuccess.blade.php
  69. 1 1
      resources/views/personnel/checking-in/success.blade.php
  70. 1 1
      resources/views/personnel/checking-in/updateUserLaborCompanies.blade.php
  71. 9 3
      resources/views/personnel/laborReport/index.blade.php
  72. 4 4
      resources/views/process/index.blade.php
  73. 4 4
      resources/views/process/statistic.blade.php
  74. 3 3
      resources/views/rejected/search/analyze.blade.php
  75. 8 6
      resources/views/rejected/search/general.blade.php
  76. 2 2
      resources/views/store/blindReceive/layout.blade.php
  77. 2 2
      resources/views/store/checkingReceive/mission.blade.php
  78. 2 2
      resources/views/store/checkingReceive/show.blade.php
  79. 1 1
      resources/views/store/fast/create.blade.php
  80. 1 1
      resources/views/store/fast/index.blade.php
  81. 1 1
      resources/views/store/fast/storeItem.blade.php
  82. 2 2
      resources/views/waybill/delivering.blade.php
  83. 3 3
      resources/views/waybill/index.blade.php
  84. 2 2
      resources/views/waybill/waybillFinancialSnapshot/index.blade.php
  85. 3 3
      resources/views/weight/package/index.blade.php
  86. 2 2
      resources/views/weight/package/statistics.blade.php
  87. 2 2
      resources/views/weight/weightExcepted/index.blade.php
  88. 1 0
      routes/apiLocal.php
  89. 2 0
      routes/web.php
  90. 10 8
      serves/excelExportGo/api/controller/laborReportController.go
  91. 9 5
      webpack.mix.js

+ 24 - 0
app/Http/Controllers/InventoryAccountController.php

@@ -273,6 +273,30 @@ class InventoryAccountController extends Controller
         $inventoryAccountMission=$inventoryService->跳过盘点记录($inventoryAccountMissionId,$inventoryAccountId);
         return ['success'=>true,'inventoryAccountMission'=>$inventoryAccountMission];
     }
+    public function 确认盘点差异(Request $request){
+        if(!Gate::allows('库存管理-盘点')){return['success'=>false,'data'=>'没有权限'];}
+        $inventoryAccountMissionId=$request->inventoryAccountMissionId;
+        $inventoryAccountId=$request->input('inventoryAccountId');
+        if(is_null($inventoryAccountMissionId)){return ['success'=>false,'data'=>'传入id为空'];}
+        /** @var InventoryAccountService $inventoryService */
+        $inventoryService=app('inventoryAccountService');
+        $inventoryAccountMission=$inventoryService->确认盘点差异($inventoryAccountMissionId,$inventoryAccountId);
+        return ['success'=>true,'inventoryAccountMission'=>$inventoryAccountMission];
+    }
+    public function 批量跳过或确认差异(Request $request){
+        if(!Gate::allows('库存管理-盘点')){return['success'=>false,'data'=>'没有权限'];}
+        $checkData=$request->checkData;
+        if(is_null($checkData)){return ['success'=>false,'data'=>'传入勾选盘点记录为空'];}
+        $marks=[];
+        foreach ($checkData as $inventoryMission){
+            array_push($marks,$inventoryMission['mark']);
+        }
+        if (in_array('确认差异',$marks)||in_array('跳过',$marks)||in_array('无差异',$marks)||in_array('已复盘无差异',$marks))return ['success'=>false,'data'=>'传入勾选盘点记录存在不可操作项!'];
+        /** @var InventoryAccountService $inventoryService */
+        $inventoryService=app('inventoryAccountService');
+        $inventoryAccountMissions=$inventoryService->批量跳过或确认差异($checkData);
+        return ['success'=>true,'inventoryAccountMissions'=>$inventoryAccountMissions];
+    }
     public function exportInventoryAccountMission(Request $request){
         if(!Gate::allows("库存管理-盘点")){ return redirect(url('/'));  }
         $post = Http::post(config('go.export.url'),['type'=>'inventoryAccountMission','data'=>$request->data]);

+ 7 - 3
app/Http/Controllers/LaborReportController.php

@@ -87,6 +87,8 @@ class LaborReportController extends Controller
                 "enter_at" => $laborReport->enter_at,
                 "check_in_at" => $laborReport->check_in_at,
                 "check_out_at" => $laborReport->check_out_at,
+                "round_check_in_at" => $laborReport->round_check_in_at,
+                "round_check_out_at" => $laborReport->round_check_out_at,
                 "exit_at" => $laborReport->exit_at,
                 "verify_at" => $laborReport->verify_at,
                 "group_user_id" => $laborReport->user ? $laborReport->user->name : null,
@@ -170,7 +172,8 @@ class LaborReportController extends Controller
         $check_in_at=$laborReport->check_in_at;
         $laborReport->check_out_at=$check_out_at;
         $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
-        $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration);
+        $round_time=round(Carbon::parse($laborReport->round_check_out_at)->diffInSeconds(Carbon::parse($laborReport->round_check_in_at))/3600,2);
+        $laborReport->working_duration=$this->minusLunchTime($laborReport,$round_time);
         if ($laborReport['enter_at']){
             $enter_at=$laborReport['enter_at'];
             $laborReport->online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($enter_at))/3600,2);
@@ -201,11 +204,12 @@ class LaborReportController extends Controller
         $check_in_at=$laborReport->check_in_at;
         $laborReport->check_out_at=$check_out_at;
         $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
+        $round_time=round(Carbon::parse($laborReport->round_check_out_at)->diffInSeconds(Carbon::parse($laborReport->round_check_in_at))/3600,2);
         if ($relax_time){
             $laborReport->relax_time=$relax_time;
-            $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration)-$relax_time/60;//减去晚饭时间
+            $laborReport->working_duration=$this->minusLunchTime($laborReport,$round_time)-$relax_time/60;//减去晚饭时间
         }else{
-            $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration);
+            $laborReport->working_duration=$this->minusLunchTime($laborReport,$round_time);
         }
         if ($laborReport->enter_at){
             $enter_at=$laborReport['enter_at'];

+ 2 - 1
app/Http/Controllers/OrderController.php

@@ -38,6 +38,7 @@ class OrderController extends Controller
         $result = $orderService->paginate($request);
         $picktotraceids = $result['picktotraceids'];
         $orders = $result['orders'];
+        $orderIssueNos =  $orderService->返回有问题件的订单号($orders);
         $commodities = $result['commodities'];
         $customers=OracleBasCustomer::query()->select('customerid','descr_c')
             ->where('customer_type','OW')
@@ -47,7 +48,7 @@ class OrderController extends Controller
         $page = $request["page"] ?? 1;
         $codes=DB::connection('oracle')->table('BAS_CODES')->select('code','codename_c')->where('codeid','SO_STS')->orderBy('code','asc')->get();
         $orderIssueType = OrderIssueType::all();
-        return view('order/index/delivering',compact('orders','customers','request','codes','commodities','page','picktotraceids','orderIssueType'));
+        return view('order/index/delivering',compact('orders','customers','request','codes','commodities','page','picktotraceids','orderIssueType','orderIssueNos'));
     }
 
     //导出

+ 34 - 10
app/Http/Controllers/OrderIssueController.php

@@ -15,6 +15,7 @@ use App\RejectedBill;
 use App\Services\LogService;
 use App\Services\OrderIssueProcessLogService;
 use App\Services\OrderIssueService;
+use App\Services\OrderService;
 use App\Services\OwnerService;
 use App\Shop;
 use App\UserWorkgroup;
@@ -41,8 +42,9 @@ class OrderIssueController extends Controller
         $orderIssues = $orderIssueService->paginate($request->all());
         $orderIssueType = OrderIssueType::all();
         $qualityLabel = QualityLabel::all();
+        $logistics = Logistic::all();
         $userWorkgroup = UserWorkgroup::all();
-        return view('order.issue.index', compact('owners', 'orderIssues', 'orderIssueType', 'qualityLabel','userWorkgroup'));
+        return view('order.issue.index', compact('owners', 'orderIssues', 'orderIssueType', 'qualityLabel','userWorkgroup','logistics'));
     }
 
     public function create()
@@ -258,12 +260,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)
@@ -377,16 +379,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) {
@@ -431,19 +434,40 @@ class OrderIssueController extends Controller
         ]);
     }
 
-
     public function endOrderIssuesApi(Request $request)
     {
         if (!Gate::allows('订单管理-问题件-编辑')) {
             return ['success'=>false,'fail_info' => '没有对应权限'];
         }
         $orderIssue_ids = $request->input('ids');
-        $bool = app(OrderIssueProcessLogService::class)->isExistOrderIssueTypeIsEnd($orderIssue_ids);
-        if($bool)return ['success'=>false,'fail_info'=> '需要完结的订单问题件已有完结的订单问题件'];
+        $bool = app(OrderIssueService::class)->isExistOrderIssueTypeIsEnd($orderIssue_ids);
+        if($bool)return ['success'=>false,'fail_info'=> '需要完结的订单问题件已有完结的订单问题件'];
         $bool = app(OrderIssueService::class)->endOrderIssues($orderIssue_ids);
         if($bool == 0) return ['success'=>false,'fail_info' => '操作失败'];
         $params = ['ids'=>$orderIssue_ids,'content'=>'完结订单','type'=>'结束'];
         $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 {
+            $order = Order::query()->with('packages.commodities.commodity')->where('client_code', $secondClientNo)->first();
+            OrderIssue::query()->where('id', $request->id)->update(['second_client_no'=> $secondClientNo]);
+            LogService::log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
+            if (!$order) {
+                return ['success' => true, 'message' => '二次客户单号已修改,没有对应的订单信息'];
+            } else {
+                return ['success' => true, 'order' => $order];
+            }
+        } catch (Exception $e) {
+            LogService::log(__METHOD__, __FUNCTION__, json_encode($request->getContent()).$e->getMessage().$e->getTraceAsString());
+            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)

+ 2 - 2
app/Http/Controllers/OrderTrackingController.php

@@ -40,7 +40,7 @@ class OrderTrackingController extends Controller
         try {
             $bool = app(OrderTrackingService::class)->updateOrderTracingAndSyc($request->input('id'),$request->input('param'),$request->input('value'));
             LogService::log(__METHOD__, __FUNCTION__, '更新成功' . json_encode($request->getContent()) );
-            return ['success' => $bool];
+            return $bool;
         } catch (\Exception $e) {
             LogService::log(__METHOD__, __FUNCTION__, '更新失败' . json_encode($request->getContent()) .'||'.$e->getMessage().'||'.$e->getTraceAsString());
             return ['success' => false];
@@ -54,7 +54,7 @@ class OrderTrackingController extends Controller
         try {
             $bool = app(OrderTrackingService::class)->updateOrderTracingAndSyc($request->input('id'),$request->input('param'),$request->input('value'));
             LogService::log(__METHOD__, __FUNCTION__, '更新成功' . json_encode($request->getContent()));
-            return ['success' => $bool];
+            return $bool;
         } catch (\Exception $e) {
             LogService::log(__METHOD__, __FUNCTION__, '更新失败' . json_encode($request->getContent()) .'||'.$e->getMessage().'||'.$e->getTraceAsString());
             return ['success' => false];

+ 2 - 1
app/Http/Controllers/RejectedController.php

@@ -45,11 +45,12 @@ class RejectedController extends Controller
         if(!Gate::allows('退货管理-查询')){ return redirect(url('/login'));  }
         $paginateParams = $request->input();
         $rejectedBills=app('rejectedService')->paginate($request);
+        $issueIds = app('rejectedService')->返回有问题件的ID($request);
         $owners = $ownerService->getSelection();
         $qualityLabels = $qualityLabelService->get();
         $logistics=$logisticService->getSelection();
         return view('rejected.search.general',compact('rejectedBills','owners','logistics',
-            'paginateParams','qualityLabels'));
+            'paginateParams','qualityLabels','issueIds'));
     }
     public function recycle(Request $request)
     {

+ 12 - 67
app/Http/Controllers/TestController.php

@@ -21,6 +21,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;
@@ -34,8 +35,11 @@ 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;
@@ -582,83 +586,24 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
 
     public function test3()
     {
-        /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService = app('dataHandlerService');
-        $startDate = \Illuminate\Support\Carbon::parse('2020-05-06 13:16:51')->toDateTimeString();
         /** @var OrderTrackingService $orderTrackingService */
-        $orderTrackingService  = app('orderTrackingService');
-        /** @var OrderService $orderSerivce */
+        $orderTrackingService = app('orderTrackingService');
+        /** @var OrderService $orderService */
         $orderService = app(OrderService::class);
-        /** @var OracleDOCOrderHeaderService $orderHeaderService */
-        $orderHeaderService = app(OracleDOCOrderHeaderService::class);
-        /** @var OracleDOCOrderHeader $orderHeaders */
-//        $startDate = \Illuminate\Support\Carbon::parse('2020-05-06 13:16:51')->toDateTimeString();
-        //$orderTrackingService->trackingWmsOrder($startDate);
         $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
-        $startDate = \Illuminate\Support\Carbon::parse('2020-09-30 00:00:00')->toDateTimeString();
-//        $endData = \Illuminate\Support\Carbon::parse('2020-09-29 00:00:00')->toDateTimeString();
-        $orderHeaders = OracleDOCOrderHeader::query()
-            ->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
-            ->where('addTime','>=',$startDate)
-//            ->where('addTime','<=',$endData)
-            ->whereIn('customerID',data_get($owners,'*.code'))
+        $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();
-//        dd($orderHeaders);
-//        $orderHeaders = app(OracleDOCOrderHeaderService::class)->getWmsOrderOnStartDateCreate($startData);
-        $orderService->createByWmsOrder($orderHeaders);
-        $orderTrackingService->createByWmsOrderHeader($orderHeaders);
+//        $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')
-            ->whereHas('commodities.package.order',function($query){
-                $query->where('client_code','O2009027827');
-            })
-            ->where('created_at','>','2020-09-28 00:07:06')->first();
-        $order = $orderTrackings->commodities->package->order;
-        $client_code = $order->client_code;
-        if(preg_match('/^O[\d]/',$client_code ?? '') > 0){
-            OrderTracking::query()->where('id',$orderTrackings->id)->update(['web_order_number'=>$client_code]);
-        }
-    }
-
-    public function updateOrderTrackingGrossWeightAndBulk(){
-        $orderTrackings = OrderTracking::query()->with('commodities.package.order.owner','commodities.commodity')
-            ->where('created_at','>','2020-09-17 00:00:00')->get();
-        foreach ($orderTrackings as $orderTracking) {
-            $code = $orderTracking->commodities->package->order->owner->code ?? false;
-            $amount = $orderTracking->commodities->amount;
-            if(!$code){continue;}
-            $commodity = $orderTracking->commodities->commodity;
-            $basSku =  OracleBasSKU::query()->where('CustomerID',$code)->where('SKU',$commodity->sku)->first();
-            $gross_weight = null;
-            $bulk = null;
-            $gross_weight = round($basSku->grossweight * $amount,3);
-            $bulk = round($basSku->cube * $amount,3);
-            if($orderTracking->gross_weight!= $gross_weight ||$orderTracking->bulk!= $bulk ){
-                OrderTracking::query()->where('id',$orderTracking->id)->update(['gross_weight'=>$gross_weight,'bulk'=>$bulk]);
-            }
-        }
-    }
 }

+ 2 - 1
app/Http/Controllers/UserDutyCheckController.php

@@ -192,7 +192,8 @@ class UserDutyCheckController extends Controller
         if ($userDutyCheck&& !$userDutyCheck->id) return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
         $userLaborToken = $userDetail->getDutyCheckToken(config('users.token_check_in_expire_minutes'));
         $laborReportService = app('LaborReportService');
-        $laborReportService->makeOrChangeLaborReportByUserDutyCheck($userDutyCheck, $importAndExportQRCodeType);
+        $errorMessage = $laborReportService->makeOrChangeLaborReportByUserDutyCheck($userDutyCheck, $importAndExportQRCodeType);
+        if ($errorMessage) return $errorMessage;
         $laravelEchoPrefix = config('database.redis.options.prefix');
         return response()->view('personnel/checking-in/importAndExportSuccess',['full_name'=>$userDetail->full_name,'checked_at'=>$userDutyCheck->checked_at,'type'=>$userDutyCheck->type,'laravelEchoPrefix'=>$laravelEchoPrefix])
             ->cookie('userLaborToken', $userLaborToken, config('users.token_check_in_expire_minutes'), '/');

+ 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;
             }

+ 3 - 3
app/Imports/OrderIssueImport.php

@@ -52,13 +52,13 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
                     $sum++;
                     continue;
                 }
-                $order_type = OrderIssueType::where('name', $row['问题类别'])->first();
+                $order_type = OrderIssueType::query()->where('name', $row['问题类别'])->first();
                 if (!$order_type) {
                     array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的的问题件类别不存在']);
                     continue;
                 }
-                $count = OracleDOCOrderHeader::where('soreference5', $logistic_number)->count();
-                $detailCount = OracleActAllocationDetails::where('picktotraceid', $logistic_number)->count();
+                $count = OracleDOCOrderHeader::query()->where('soreference5', $logistic_number)->count();
+                $detailCount = OracleActAllocationDetails::query()->where('picktotraceid', $logistic_number)->count();
                 if (!$count && !$detailCount) {
                     array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的WMS运单不存在']);
                     $sum++;

+ 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"]);

+ 1 - 1
app/InventoryAccount.php

@@ -33,7 +33,7 @@ class InventoryAccount extends Model
         return $this['total'] ? $this['total']-$this['processed']:0;
     }
     public function getProcessedAmount(){
-        return $this->inventoryMissions()->whereIn('checked',['是','跳过'])->where('inventory_account_id',$this['id'])->count();
+        return $this->inventoryMissions()->whereIn('checked',['是','跳过','确认差异'])->where('inventory_account_id',$this['id'])->count();
     }
     //复盘剩余数
     public function getCheckSurplusAttribute()

+ 15 - 1
app/LaborReport.php

@@ -20,7 +20,7 @@ class LaborReport extends Model
     ];
     protected $appends = [
         'is_exportGroup','is_export', 'exit_at','enter_at','sequence', 'amountOfJoined','remark','thisRecordOnlineTime','thisRecordWorkingTime',
-        'totalOnlineTime','verifyPerson','userDutyCheckVerifyUserId','isAdult',
+        'totalOnlineTime','verifyPerson','userDutyCheckVerifyUserId','isAdult','round_check_in_at','round_check_out_at'
     ];
     protected $tempFields = [
         'temEnteringRecord',
@@ -46,6 +46,20 @@ class LaborReport extends Model
     public function laborReportStatus(){
         return $this->hasMany('App\LaborReportStatus','labor_report_id','id');
     }
+    public function getRoundCheckInAtAttribute(){
+        if (!$this['check_in_at'])return null;
+        $round_check_in_at=Carbon::parse($this['check_in_at'])->format('i');
+        if ($round_check_in_at>=0&&$round_check_in_at<30) return Carbon::parse($this['check_in_at'])->clone()->setMinutes(30)->setSeconds(00)->format('Y-m-d H:i:s');
+        if ($round_check_in_at==30) return Carbon::parse($this['check_in_at'])->clone()->setMinutes(30)->setSeconds(00)->format('Y-m-d H:i:s');
+        if ($round_check_in_at>30&&$round_check_in_at<=59) return Carbon::parse($this['check_in_at'])->clone()->addHour()->setMinutes(00)->setSeconds(00)->format('Y-m-d H:i:s');
+    }
+    public function getRoundCheckOutAtAttribute(){
+        if (!$this['check_out_at'])return null;
+        $round_check_out_at=Carbon::parse($this['check_out_at'])->format('i');
+        if ($round_check_out_at>=0&&$round_check_out_at<30) return Carbon::parse($this['check_out_at'])->clone()->setMinutes(00)->setSeconds(00)->format('Y-m-d H:i:s');
+        if ($round_check_out_at==30) return Carbon::parse($this['check_out_at'])->clone()->setMinutes(30)->setSeconds(00)->format('Y-m-d H:i:s');
+        if ($round_check_out_at>30&&$round_check_out_at<=59) return Carbon::parse($this['check_out_at'])->clone()->setMinutes(30)->setSeconds(00)->format('Y-m-d H:i:s');
+    }
     public function getRemarkAttribute(){
         return $this->hasOne('App\Sign','signable_id','id')
             ->where('field','remark')->where('signable_type','labor_reports')->value('mark');

+ 16 - 4
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()
@@ -102,16 +102,29 @@ class OrderIssue extends Model
         $orderItems = [];
         $orderIssueId = $this['id'];
         if ($this->logistic_number_return ?? false) {
-            $rejectedBillItems = RejectedBillItem::query()
+            $rejectedBillItems = RejectedBillItem::query()->with('quality')
                 ->whereHas('rejectedBill.orderIssue', function ($query) use ($orderIssueId) {
                     $query->where('id',$orderIssueId);
                 })->get();
+            if($rejectedBillItems->where('quality.name','残次')->count() > 0){
+                $this->update(['rejecting_status' => '差异退回']);
+                return;
+            }
             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;
+                $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;
                 }
@@ -170,7 +183,6 @@ class OrderIssue extends Model
                 $isLack++;
         }
 
-        //dd($isAccord,$rejectedReview,$isLack,$isExcess,$isDiff,$rejectedExcess);
         if($isAccord == $rejectedReview && $isLack == 0 && $isExcess == 0 && $isDiff==0 && $rejectedExcess == 0 )
             $this->update(['rejecting_status' => '全部退回']);
         else if($isExcess > 0 && $isAccord ==  $rejectedReview && $isDiff == 0 && $isLack == 0)

+ 4 - 0
app/OrderPackageCommodities.php

@@ -10,8 +10,12 @@ class OrderPackageCommodities extends Model
     //
     use ModelTimeFormat;
 
+    /*
+     * amount => OracleActAllocationDetails->qty_each
+     */
     protected $fillable = ['order_package_id','commodity_id','amount'];
 
+
     public function package(){
         return $this->belongsTo('App\OrderPackage','order_package_id','id');
     }

+ 3 - 3
app/OrderTracking.php

@@ -11,13 +11,13 @@ class OrderTracking extends Model
     use ModelTimeFormat;
     protected $fillable = [
         'order_package_commodity_id','owner_id','web_order_number',
-        'pick_up_at','sale','client',
+        'pick_up_at','sale','client','order_client_code',
         'order_remark','pallet_total','planning_sent_at',
         'is_on_duty_shift','is_arrival','signed_at',
         'receive_bill_status','remark','gross_weight','bulk'];
 
     protected $appends =[
-        'ownerName','sku','packageWeight','packageBulk','orderCity','packageLogisticNumber','packageLogistic','orderClientCode'
+        'ownerName','sku','packageWeight','packageBulk','orderCity','packageLogisticNumber','packageLogistic','orderClientNumber'
     ];
 
     public function commodities(){
@@ -51,7 +51,7 @@ class OrderTracking extends Model
     public function getPackageLogisticAttribute(){
         return $this->commodities->package->order->logistic['name'] ?? '';
     }
-    public function getOrderClientCodeAttribute(){
+    public function getOrderClientNumberAttribute(){
         return $this->commodities->package->order['client_code'] ?? '';
     }
 }

+ 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();

+ 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);
     }
-}
+}

+ 0 - 97
app/Services/CommodityService.php

@@ -46,103 +46,6 @@ Class CommodityService
         return Commodity::query()->insert($params);
     }
 
-    public function getWASCommoditiesByWMSOrderHeaders($orderHeaders)
-    {
-        $skus = [];
-        $customerIDs = [];
-        $logs = [];
-        $errs = [];
-        $fillables = [];
-        $owners_list = [];
-
-        foreach ($orderHeaders as $orderHeader) {
-            $customerIDs[] = $orderHeader['customerid'];
-            $oracleDOCOrderDetails = $orderHeader['oracleDOCOrderDetails'] ?? [];
-            foreach ($oracleDOCOrderDetails as $detail) {
-                $skus[] = $detail['sku'];
-            }
-        }
-        $skus = array_unique($skus);
-        $customerIDs = array_unique($customerIDs);
-
-        $owners = Owner::query()->whereIn('code',$customerIDs)->get();
-
-        foreach ($owners as $owner) {
-            $key = 'code='.$owner->code;
-            $owners_list[$key] = $owner;
-        }
-
-        $commodities = Commodity::query()->with('owner')->whereIn('sku',$skus)->get();
-
-        if(count($skus) > $commodities->count()){ //需要更新
-            $commoditiesSku = data_get($commodities,'*.sku');
-            $diffSku = array_diff($skus,$commoditiesSku);
-            $baseSKUs = OracleBasSKU::query()->whereIn('sku',$diffSku)->whereIn('CustomerID',$customerIDs)->get();
-            foreach ($baseSKUs as $baseSKU) {
-                $key = 'code='.$baseSKU['customerid'];
-                $owner = $owners_list[$key] ?? '';
-                $fillables[] = [
-                    'name' => $baseSKU['descr_c'],
-                    'sku' => $baseSKU['sku'],
-                    'owner_id' => $owner['id'] ?? '',
-                    'length' => $baseSKU['skulength'] ?? '',
-                    'width' => $baseSKU['skuwidth'] ?? '',
-                    'height' => $baseSKU['skuhigh'] ?? '',
-                    'volumn' => $baseSKU['cube'],
-                ];
-            }
-        }
-        try {
-            if(count($fillables) > 0){
-                Commodity::query()->create($fillables);
-                LogService::log(__METHOD__,__FUNCTION__,'添加商品信息'.json_encode($fillables));
-            }
-        } catch (\Exception $e) {
-            array_push($errs,json_encode($fillables).$e->getMessage().$e->getTraceAsString());
-        }
-        unset($customerIDs,$logs,$errs,$fillables);
-        return Commodity::query()->with('owner')->whereIn('sku',$skus)->get();
-    }
-
-    public function syncCommodityAttribute($noAttributeCommodity){
-        /** @var BatchUpdateService $batchUpdateService */
-        $batchUpdateService = app('batchUpdateService');
-        $multipleData = [];
-        $multipleData[] = ['id','length','width','height','volumn'];
-
-        $noAttributeCommodity = array_unique($noAttributeCommodity);
-        if(count($noAttributeCommodity) > 1){
-            $SkuCode = data_get($noAttributeCommodity,'*.sku');
-            $BasSKUs = OracleBasSKU::query()->whereIn('sku',$SkuCode)->get();
-            foreach ($noAttributeCommodity as $commodity){
-                $BasSKU = $BasSKUs
-                    ->where('sku',$commodity['code'])
-                    ->where('CustomerID',$commodity['owner']['code'])
-                    ->first();
-                $update = [
-                    'id' => $commodity['id'],
-                    'length' =>  $BasSKU['skulength'] ?? 0,
-                    'width' => $BasSKU['skuwidth'] ?? 0,
-                    'height' => $BasSKU['skuhigh'] ?? 0,
-                    'volumn' => $BasSKU['cube'] ?? 0,
-                ];
-                if($commodity['length'] !==$update['length'] ||$commodity['width'] !==$update['width'] ||$commodity['height'] !==$update['height'] ||$commodity['volumn'] !==$update['volumn'] ){
-                    $multipleData[] = $update;
-                }
-            }
-        }
-        if(count($multipleData) > 1){
-            try {
-                $tableName = 'commodities';
-                $batchUpdateService->batchUpdate($tableName, $multipleData);
-                LogService::log(__METHOD__,__FUNCTION__,'批量更新'.count($multipleData).json_encode($multipleData));
-            } catch (\Exception $e) {
-                LogService::log(__METHOD__,__FUNCTION__,'批量更新失败'.json_encode($multipleData).$e->getMessage(),$e->getTraceAsString());
-            } finally {
-                unset($multipleData);
-            }
-        }
-    }
 
     public function getOwnerCommodities(array $params){
         $query = Commodity::query();

+ 34 - 8
app/Services/InventoryAccountService.php

@@ -64,7 +64,7 @@ class InventoryAccountService
     //动盘查询
     public function conditionPortStock($date_start,$date_end,$ownerId,$location,$barcode){
         if (!$ownerId) return null;
-        $descr_c=Owner::where('id',$ownerId)->value('name');
+        $code=Owner::where('id',$ownerId)->value('code');
         $sql='select * from (select result.*,rownum rn from (';
         $sql.=' select customer.Descr_C as 货主,stockLog.客户 客户, 库位, sku.SKU 产品编码, sku.ALTERNATE_SKU1 产品条码1, sku.ALTERNATE_SKU2 产品条码2, sku.ALTERNATE_SKU3 产品条码3, ';
         $sql.=' sku.Descr_C 商品名称, MAX(lot.LotAtt05) 属性仓, lot.LotAtt08 质量状态, lot.LotAtt02 失效日期, ';
@@ -100,7 +100,7 @@ class InventoryAccountService
         $sql.=' ,sku.Descr_C,FMLotNum,lot.LotAtt01,lot.LotAtt08,lot.LotAtt02,lot.LotAtt04 ';
         $sql.=' , storeStatus.QTY, storeStatus.QtyAllocated,stockLog.客户  ';
         $sql.=' )result where 1=1 ';
-        if ($descr_c)$sql.=" and 货主 = '".$descr_c."' ";
+        if ($code)$sql.=" and 客户 = '".$code."' ";
 //        if ($location)$sql.=" and 库位 like '".$location."%' ";
         if ($location){
             $arr=array_filter(preg_split('/[,, ]+/is', $location));
@@ -125,7 +125,7 @@ class InventoryAccountService
     }
     //全盘查询
     private function conditionTotalStock($ownerId,$location,$barcode){
-        $descr_c=Owner::where('id',$ownerId)->value('name');
+        $code=Owner::where('id',$ownerId)->value('code');
         $sql='select * from (select result.* from (';
         $sql.=' select customer.Descr_C as 货主,storeStatus.CUSTOMERID 客户,storeStatus.LocationID 库位, sku.SKU 产品编码, sku.ALTERNATE_SKU1 产品条码1, sku.ALTERNATE_SKU2 产品条码2, sku.ALTERNATE_SKU3 产品条码3, ';
         $sql.=' sku.Descr_C 商品名称, MAX(lot.LotAtt05) 属性仓, lot.LotAtt08 质量状态, lot.LotAtt02 失效日期, ';
@@ -139,7 +139,7 @@ class InventoryAccountService
         $sql.=' ,sku.Descr_C,lot.LotAtt08,lot.LotAtt02,lot.LotAtt04 ';
         $sql.=' ,storeStatus.CUSTOMERID,lot.LotAtt01 ';
         $sql.=' )result where 1=1 ';
-        if ($descr_c)$sql.=" and 货主 = '".$descr_c."' ";
+        if ($code)$sql.=" and 客户 = '".$code."' ";
         if ($location){
             $arr=array_filter(preg_split('/[,, ]+/is', $location));
             if (count($arr)==1){
@@ -400,7 +400,6 @@ class InventoryAccountService
     public function 增加系统之外的盘点记录($location,$barcode,$inventoryId,$count,$owner_code,$param){
         if($param=='商品新增'||$param=='库位和商品新增'){
             $oracleBasSku=OracleBasSKU::query()->where('ALTERNATE_SKU1',$barcode)->where('customerid',$owner_code)->first();
-            //dd($oracleBasSku);
             $ownerId=Owner::query()->where('code',$owner_code)->value('id');
             $commodity=Commodity::query()->firstOrCreate([
                 'sku'=>$oracleBasSku->sku,
@@ -560,14 +559,41 @@ class InventoryAccountService
         }
         return $inventoryAccountMission;
     }
+    public function 确认盘点差异($inventoryAccountMissionId,$inventoryAccountId){
+        $inventoryAccountMission=InventoryAccountMission::query()->find($inventoryAccountMissionId);
+        $inventoryAccountMission->checked='确认差异';
+        $inventoryAccountMission->update();
+        LogService::log(__METHOD__,"跳过盘点记录修改checked状态",json_encode($inventoryAccountMissionId));
+        return $inventoryAccountMission;
+    }
+    public function 批量跳过或确认差异($checkData){
+        $inventoryAccountMissions=[];
+        $inventoryAccountId=null;
+        foreach ($checkData as $inventoryMission){
+            $inventoryAccountMission=InventoryAccountMission::query()->find($inventoryMission['id']);
+            $inventoryAccountId=$inventoryAccountMission->inventory_account_id;
+            if ($inventoryMission['mark']==='未盘')$inventoryAccountMission['checked']='跳过';
+            if ($inventoryMission['mark']==='未复盘有差异'||$inventoryMission['mark']==='已复盘无差异')$inventoryAccountMission['checked']='确认差异';
+            $inventoryAccountMission->update();
+            array_push($inventoryAccountMissions,$inventoryAccountMission);
+        }
+        LogService::log(__METHOD__,"批量跳过或确认差异",json_encode($checkData));
+        $inventoryAccount=InventoryAccount::query()->find($inventoryAccountId);
+        $inventoryAccount->processed=$inventoryAccount->getProcessedAmount();//已盘点数
+        $inventoryAccount->difference=$inventoryAccount->getDifferenceAmount();//盘点差异数
+        $inventoryAccount->returned=$inventoryAccount->getReturnedAmount(); //复盘归位数
+        $inventoryAccount->update();
+        Controller::logS(__METHOD__,'批量跳过或确认差异修改盘点任务信息'.__FUNCTION__,json_encode($inventoryAccountId));
+        return $inventoryAccountMissions;
+    }
     public function searchCommodityByBarcode($barcode,$owner_code){
         $oracleBasSku=OracleBasSKU::query()
             ->where('ALTERNATE_SKU1',$barcode)
             ->orWhere('ALTERNATE_SKU2',$barcode)
             ->orWhere('ALTERNATE_SKU3',$barcode)
             ->where('customerid',$owner_code)->first();
-            if (!$oracleBasSku)return null;
-            return $oracleBasSku;
+        if (!$oracleBasSku)return null;
+        return $oracleBasSku;
     }
     public function baseOnBlindReceive($location,$owner_code,$goodses,$inventoryId){
         $request=[
@@ -598,7 +624,7 @@ class InventoryAccountService
             array_push($inventoryAccountMissions,$inventoryAccountMission);
         }
         if (count($inventoryAccountMissions)<1) return null;
-            return $inventoryAccountMissions;
+        return $inventoryAccountMissions;
     }
 
 }

+ 1 - 0
app/Services/LaborReportService.php

@@ -66,6 +66,7 @@ class LaborReportService
         return $this->conditionQuery($params)->paginate($params['paginate'] ?? 50);
     }
     public function get(array $params){
+//        dd($this->conditionQuery($params)->without("userDutyCheck")->toSql());
         return $this->conditionQuery($params)->without("userDutyCheck")->get();
     }
 

+ 0 - 33
app/Services/LogisticService.php

@@ -13,39 +13,6 @@ Class LogisticService
         return Logistic::query()->select($column)->get();
     }
 
-
-    public function getWASLogisticsByWMSOrderHeaders($WMSOrderHeaders){
-        $carrierIds = [];
-        foreach ($WMSOrderHeaders as $WMSOrderHeader) {
-            $carrierIds [] = $WMSOrderHeader->carrierid;
-        }
-        $carrierIds = array_unique($carrierIds);
-        $carrierIds = array_diff($carrierIds,['*','',null]);
-        $logistics = Logistic::query()->whereIn('code',$carrierIds)->get();
-        $insert_params = [];
-        if(count($carrierIds) > count($logistics)){
-            $logistics_fillter= data_get($logistics,'*.code');
-            $logisticDiff = array_diff($carrierIds, $logistics_fillter);
-            $basCustomers = OracleBasCustomer::query()->where('Customer_Type','CA')->whereIn('CustomerID',$logisticDiff)->get();
-            foreach ($basCustomers as $basCustomer){
-                $fillable = ['name' => $basCustomer['descr_c'], 'code' => $basCustomer['customerid']];
-                array_push($insert_params,$fillable);
-            }
-        }
-        try {
-            if(count($insert_params) > 0){
-                Logistic::query()->insert($insert_params);
-                LogService::log(__METHOD__,__FUNCTION__,'批量创建 logistic'.count($insert_params).json_encode($insert_params));
-            }
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__,__FUNCTION__,'创建失败 logistic error' .json_encode($insert_params). $e->getMessage().$e->getTraceAsString());
-        } finally {
-           return  $logistics = Logistic::query()->whereIn('code',$carrierIds)->get();
-        }
-    }
-
-
-
     public function firstOrCreate(array $params, array $values = null){
         $logistic = Logistic::query();
         if ($values)return $logistic->firstOrCreate($params, $values);

+ 11 - 23
app/Services/OracleDOCOrderHeaderService.php

@@ -16,30 +16,7 @@ Class OracleDOCOrderHeaderService
         }
         return $order->first();
     }
-    public function 根据时间获取在这段时间内创建的WMS订单($startDate){
-        /** @var OwnerService $ownerService */
-        $ownerService = app('ownerService');
-        $owners = $ownerService->获取订单跟踪的货主();
-        $ownerIds = data_get($owners, '*.code');
-        return OracleDOCOrderHeader::query()
-            ->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
-            ->where('addtime', '>=', $startDate)
-            ->whereIn('customerID', $ownerIds)
-            ->get();
-    }
 
-    public function 根据时间获取在这段时间内更新的WMS订单($startDate){
-        /** @var OwnerService $ownerService */
-        $ownerService = app('ownerService');
-        $owners = $ownerService->获取订单跟踪的货主();
-        $ownerIds = data_get($owners, '*.code');
-        return OracleDOCOrderHeader::query()
-            ->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
-            ->where('EditTime','>=',$startDate)
-            ->whereColumn('EditTime','<>','addtime')
-            ->whereIn('customerID', $ownerIds)
-            ->get();
-    }
 
     public function getWmsOrderOnStartDateCreate($startDate){
         /** @var Owner $owners */
@@ -62,4 +39,15 @@ Class OracleDOCOrderHeaderService
             ->get();
     }
 
+    /**
+     * @param OracleDOCOrderHeader $orderHeader
+     * @return array|mixed
+     */
+    public function getLogisticNumbers($orderHeader)
+    {
+        if(!$orderHeader ?? false){return [];}
+        $actAllocationDetails = $orderHeader->actAllocationDetails ?? [];
+        return array_diff(data_get($actAllocationDetails,'*.picktotraceid'),['','*',null]) ;
+    }
+
 }

+ 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 left join users on order_issue_process_logs.user_id = users.id left join order_issues on order_issue_process_logs.order_issue_id = order_issues.id left join orders on order_issues.order_id = orders.id left 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;
     }
 }

+ 1 - 3
app/Services/OrderIssueProcessLogService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\OrderIssue;
 use App\OrderIssueProcessLog;
 use Illuminate\Support\Facades\Auth;
 
@@ -33,8 +34,5 @@ class OrderIssueProcessLogService
         return OrderIssueProcessLog::query()->with('user')->whereIn('id',data_get($logs,'*.id'))->get();
     }
 
-    public function isExistOrderIssueTypeIsEnd($ids){
-        return OrderIssueProcessLog::query()->whereIn('order_issue_id',$ids)->where('type','结束')->count() > 0;
-    }
 
 }

+ 14 - 5
app/Services/OrderIssueService.php

@@ -55,10 +55,17 @@ class OrderIssueService
                 }
             });
         }
+
         if(isset($arr['is_new_rejecting'])){
             $query->where('is_new_rejecting','=',$arr['is_new_rejecting']);
         }
 
+        if(isset($arr['logistic_id'])){
+            $query->whereHas('order',function($query) use($arr){
+                $query->where('logistic_id',$arr['logistic_id']);
+            });
+        }
+
         $query->selectRaw('order_issues.* ,order_issue_on_tops.id top_id ,order_issue_on_tops.remark,order_issue_on_tops.updated_at top_update')
             ->leftJoin('order_issue_on_tops', 'order_issue_on_tops.order_issue_id', '=', 'order_issues.id')
             ->whereNull('order_issue_on_tops.deleted_at')
@@ -261,9 +268,6 @@ class OrderIssueService
             try {
                 $orderIssue = $this->createOrFindByOrderNo($orderNo);
                 if($orderIssue != null){
-
-
-
                     OrderIssue::query()->where('id', $orderIssue['id'])->update(['order_issue_type_id' => $params['typeId'], 'result_explain' => $params['result_explain']]);
                     OrderIssueProcessLog::query()->create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => '', 'type' => '创建']);
                     LogService::log(__METHOD__, __FUNCTION__, '标记订单问题件' . json_encode($orderNo).json_encode($orderIssue));
@@ -353,9 +357,9 @@ class OrderIssueService
 
     public function create(array $arr)
     {
-        $orderIssue = OrderIssue::create($arr);
+        $orderIssue = OrderIssue::query()->create($arr);
         if (!$arr['order_id']) {
-            $order = Order::create($arr);
+            $order = Order::query()->create($arr);
             $orderIssue->order_id = $order['id'];
             $orderIssue->save();
         }
@@ -460,4 +464,9 @@ class OrderIssueService
     {
         return OrderIssue::query()->whereIn('id',$ids)->update(['final_status'=>'已解决']);
     }
+
+    public function isExistOrderIssueTypeIsEnd($ids){
+        return OrderIssue::query()->whereIn('id',$ids)->where('final_status','已解决')->count() > 0;
+    }
+
 }

+ 528 - 391
app/Services/OrderPackageCommoditiesService.php

@@ -10,10 +10,12 @@ 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;
 use Carbon\Carbon;
+use Illuminate\Support\Collection;
 
 class OrderPackageCommoditiesService
 {
@@ -37,7 +39,7 @@ class OrderPackageCommoditiesService
     public function basedOnActAllocationDetailsStoreByOrderNo($orderNo,$orderPackage){
         $details = OracleActAllocationDetails::query()->where('orderno', $orderNo)->get();
         $orderPackageCommodities =  OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
-        $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
+        $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty_each');
         unset($details,$orderPackageCommodities);
     }
 
@@ -103,7 +105,7 @@ class OrderPackageCommoditiesService
     {
         $details = OracleActAllocationDetails::query()->where('picktotraceid', $orderPackage->logistic_number)->get();
         $orderPackageCommodities =  OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
-        $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
+        $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty_each');
         unset($details,$orderPackageCommodities);
     }
 
@@ -133,9 +135,9 @@ class OrderPackageCommoditiesService
             $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
         }
         try {
-            $count  = OrderPackageCommodities::query()->where(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']])->count();
+            $count  = OrderPackageCommodities::query()->where(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty_each']])->count();
             if($count == 0){
-                $orderPackageCommodities = OrderPackageCommodities::query()->firstOrCreate(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]);
+                $orderPackageCommodities = OrderPackageCommodities::query()->firstOrCreate(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty_each']]);
                 LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹详情'.json_encode($orderPackageCommodities));
             }
         } catch (\Exception $e) {
@@ -145,311 +147,53 @@ class OrderPackageCommoditiesService
         }
     }
 
-    public function getOrderPackageCommoditiesByOrderId($orderId)
-    {
-        $order = Order::query()->where('id', $orderId)->first();
-        if (!$order) {
-            return null;
-        }
-        $orderPackageIds = OrderPackage::query()->select('id')->where('order_id', $order['id'])->get();
-        if (!$orderPackageIds) {
-            return null;
-        }
-        return OrderPackageCommodities::query()->with('commodity')->whereIn('order_package_id', $orderPackageIds)->get();
-    }
-
-    public function createByOrderDetail(OracleDOCOrderDetail $detail, OrderPackage $orderPackage)
-    {
-        $owner = Owner::query()->where('code', $detail['customerid'])->first();      // 货主
-        $sku = $detail->sku;    // sku
-        $owner_id = $owner->id; // 货主id
-        $commodity = Commodity::query()->where('sku', $sku)->where('owner_id', $owner_id)->first(); // 商品
-        if ($commodity == null) {
-            $basSku = OracleBasSKU::query()->where('sku', $sku)->where('customerid' , $detail->customerid)->first();   // 没有找到对应的商品信息
-            $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
-        }
-        return OrderPackageCommodities::query()->create(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]);
-    }
-
-    public function 根据WMS订单信息创建WAS订单包裹商品($orderHeaders,$oracleDOCOrderDetails,$actAllocationDetails,$orders)
-    {
-        /** @var CommodityService $commodityService */
-        $commodityService = app('commodityService');
-        $commodities = $commodityService->getWASCommoditiesByWMSOrderHeaders($orderHeaders); // 商品
-
-        $orderPackages = [];
-        $orderList = [];
-        foreach ($orders as $order) {
-            $orderList[$order['id']] = $order;
-            $packages = $order['packages'] ?? [];
-            foreach ($packages as $package) {
-                $orderPackages[$package['logistic_number']]  = $package;
-            }
-        }
-        $fillables = [];
-        foreach ($orderPackages as $key=>$orderPackage) {
-            $logistic_number = $key;
-            $order = $orderList[$orderPackage['order_id']];
-            $details1 =  $actAllocationDetails[strval($logistic_number)] ?? [];
-            $details2 = [];
-            if(count($details1)== 0){
-                $details2 = $actAllocationDetails[$order['code']] ?? [];
-            }
-            if(count($details1) > 0 ||  count($details2) > 0){
-                $items = $this->根据订单分配详情返回创建数组($details1,$orderPackage,$commodities,$order);
-                foreach ($items as $item){
-                    $fillables[] = $item;
-                }
-                $items = $this->根据订单分配详情返回创建数组($details2,$orderPackage,$commodities,$order);
-                foreach ($items as $item){
-                    $fillables[] = $item;
-                }
-                continue;
-             }
-            $details =  $oracleDOCOrderDetails[$order['code']] ?? [];
-            if($details->count() >0){
-                $items = $this->根据订单详情返回创建数组($details,$orderPackage,$commodities,$order);
-                foreach ($items as $item){
-                    $fillables[] = $item;
-                }
-            }
-        }
-        try {
-            if(count($fillables) > 0){
-                OrderPackageCommodities::query()->insert($fillables);
-                LogService::log(__METHOD__,__FUNCTION__,'批量创建 OrderPackageCommodities'.count($fillables).json_encode($fillables));
-            }
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__,__FUNCTION__,'批量创建异常 OrderPackageCommodities error '.json_encode($fillables).$e->getMessage().$e->getTraceAsString());
-        } finally {
-            $orderIds = data_get($orders,'*.id');
-            return Order::query()->with('packages.commodities')->whereIn('id',$orderIds)->get();
-        }
-    }
-
-    // XXX 逻辑优化 删除不存在未完成
-    public function 更新WAS订单快递打包商品信息($orderHeaders,$orders,$commodities)
-    {
-        $newItems = $this->获取WMS订单打包信息($orderHeaders,$commodities,$orders);
-        $orderPackagesCommodities = $this->basedOrdersReturnOrderPackageCommodities($orders);
-
-        $multipleData = [['id','order_package_id','commodity_id']];
-        $packageCommodity_list_amount = [];
-        $packageCommodity_list = [];
-
-        foreach ($orderPackagesCommodities as $item) {
-            $key = 'order_package_id='.$item['order_package_id'].' commodity_id='.$item['commodity_id'].' amount='.$item['amount'];
-            if(!($packageCommodity_list_amount[$key] ?? false)){
-                $packageCommodity_list_amount[$key] = [];
-            }
-            $packageCommodity_list_amount[$key][] = $item;
-            $key2 = 'order_package_id'.$item['order_package_id'].' commodity_id='.$item['commodity_id'];
-            if($packageCommodity_list[$key2] ?? false){
-                $packageCommodity_list[$key2] = [];
-            }
-            $packageCommodity_list[$key2][] = $item;
-        }
-        foreach ($newItems as $key=>$newItem) {
-            $key1 = 'order_package_id='.$newItem['order_package_id'].' commodity_id='.$newItem['commodity_id'].' amount='.$newItem['amount'];
-            $packageCommodity = $packageCommodity_list_amount[$key1][0] ?? false;
-            if($packageCommodity ?? false){
-                unset($newItems[$key]);
-                array_shift($packageCommodity_list_amount[$key1]);
-            }else{
-                $key2 = 'order_package_id'.$newItem['order_package_id'].' commodity_id='.$newItem['commodity_id'];
-                $packageCommodity = $packageCommodity_list[$key2][0] ?? false;
-                if($packageCommodity ?? false) {
-                    $amount = intval($newItem['amount']);
-                    if($packageCommodity['amount'] !== $amount){
-                        $data = [
-                            'order_package_id' => $packageCommodity['order_package_id'],
-                            'commodity_id' => $packageCommodity['commodity_id'],
-                            'amount' => $amount,
-                        ];
-                        $multipleData[]  = $data;
-                    }
-                    array_shift($packageCommodity_list[$key2]);
-                    unset($newItems[$key]);
-                }
-            }
-        }
-        try {
-            if (count($newItems) > 0) {
-                OrderPackageCommodities::query()->insert($newItems);
-                LogService::log(__METHOD__, __FUNCTION__, '添加打包信息' . json_encode($newItems));
-            }
-        }catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__, '添加打包信息失败' . json_encode($newItems).$e->getMessage().$e->getTraceAsString());
-        }
-
-        if(count($multipleData) > 1){
-            try {
-                /** @var BatchUpdateService $batchUpdateService */
-                $batchUpdateService = app('batchUpdateService');
-                $batchUpdateService->batchUpdate('order_package_commodities', $multipleData);
-                LogService::log(__METHOD__,__FUNCTION__,'批量更新'.count($multipleData).json_encode($multipleData));
-            } catch (\Exception $e) {
-                LogService::log(__METHOD__,__FUNCTION__,'批量更新失败'.json_encode($multipleData).$e->getMessage(),$e->getTraceAsString());
-            } finally {
-                unset($multipleData);
-            }
-        }
-    }
-
-    private function 获取WMS订单打包信息($orderHeaders,$commodities,$orders){
-        $newItems = [];
-
-        $commodities_list = [];
-        foreach ($commodities as $commodity) {
-            $key = 'sku='.$commodity['sku'].' owner_id='.$commodity['owner_id'];
-            $commodities_list[$key] = $commodity;
-        }
-        foreach ($orderHeaders as $orderHeader) {
-            $order = $orders[$orderHeader['orderno']] ?? null;
-            if(!isset($order)){
-                continue;
-            }
-            $orderPackages = $order['packages'];
-            $oracleDOCOrderDetails = $orderHeader['oracleDOCOrderDetails'] ?? [];
-            $actAllocationDetails = $orderHeader['actAllocationDetails'] ?? [];
-
-            if($actAllocationDetails->count() > 0){
-                foreach ($orderPackages as $orderPackage) {
-                    $details = [];
-                    if($orderPackage['logistic_number'] == $orderHeader['soreference5'] ){
-                        foreach ($actAllocationDetails as $detail) {
-                            if($detail['picktotraceid'] == '*' || $detail['picktotraceid'] == $orderHeader['soreference5'])
-                                $details[] = $detail;
-                        }
-                    }else{
-                        $logistic_number = $orderPackage['logistic_number'];
-                        foreach ($actAllocationDetails as $detail) {
-                            if($detail['picktotraceid'] == $logistic_number)
-                                $details[] = $detail;
-                        }
-                    }
-                    $addArr = $this->basedDetailsReturnFillables($details,$orderPackage,$commodities_list,$order,'qty');
-                    $newItems = array_merge($newItems,$addArr);
-                }
-            }elseif($oracleDOCOrderDetails->count() > 0){
-                foreach ($orderPackages as $orderPackage) {
-                    $details = [];
-                    $logistic_number = $orderPackage['logistic_number'];
-                    foreach ($actAllocationDetails as $detail) {
-                        if($detail['dropid'] == $logistic_number){
-                            array_push($details,$detail);
-                        }
-                    }
-                    $addArr = $this->basedDetailsReturnFillables($details,$orderPackage,$commodities_list,$order,'qtyordered');
-                    $newItems = array_merge($newItems,$addArr);
-                }
-            }
-        }
-        return $newItems;
-    }
-
-    public function 根据订单详情返回创建数组($details,$orderPackage,$commodities,$order){
-        $orderPackagerCommodities = [];
-        foreach ($details as $detail) {
-            $commodity = $commodities->where('sku', $detail['sku'])->where('owner_id', $order['owner_id'])->first();
-            $fillable = [
-                'order_package_id' => $orderPackage['id'] ?? '',
-                'commodity_id' => $commodity['id'] ?? '',
-                'amount' => $detail['qtyordered'],
-            ];
-            $orderPackagerCommodities[] = $fillable;
-        }
-        return $orderPackagerCommodities;
-    }
-
-    public function 根据订单分配详情返回创建数组($details,$orderPackage,$commodities,$order){
-        $orderPackagerCommodities = [];
-        foreach ($details as $detail) {
-
-            $commodity = $commodities->where('sku', $detail['sku'])->where('owner_id', $order['owner_id'])->first();
-            $fillable = [
-                'order_package_id' => $orderPackage['id'] ?? '',
-                'commodity_id' => $commodity['id'] ?? '',
-                'amount' => $detail['qty'] ?? '',
-            ];
-            array_push($orderPackagerCommodities,$fillable);
-        }
-        return $orderPackagerCommodities;
-    }
-
-    public function basedOrdersReturnOrderPackageCommodities($orders){
-        $orderPackageCommodities = [];
-        foreach ($orders as $order) {
-            foreach ($order['packages'] as $package) {
-                foreach ($package['commodities'] as $commodity) {
-                    $orderPackageCommodities[] = $commodity;
-                }
-            }
-        }
-        return $orderPackageCommodities;
-    }
-
-    public function basedDetailsReturnFillables($details,$orderPackage,$commoditiesMap,$order,$column){
-        $orderPackagerCommodities = [];
-        foreach ($details as $detail) {
-            $key = 'sku='.$detail['sku'].' owner_id='.$order['owner_id'];
-            $commodity = $commoditiesMap[$key] ?? '';
-            $fillable = [
-                'order_package_id' => $orderPackage['id'] ?? '',
-                'commodity_id' => $commodity['id'] ?? '',
-                'amount' => $detail[$column] ?? '',
-            ];
-            array_push($orderPackagerCommodities,$fillable);
-        }
-        return $orderPackagerCommodities;
-    }
-
     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){
@@ -471,7 +215,7 @@ class OrderPackageCommoditiesService
                 $params[] = [
                     'commodity_id' =>$commodity->id,
                     'order_package_id' =>$orderPackage->id,
-                    'amount' => $actAllocationDetail->qty,
+                    'amount' => $actAllocationDetail->qty_each,
                     'created_at' => $create_at
                 ];
             }
@@ -480,7 +224,6 @@ class OrderPackageCommoditiesService
         return $params;
     }
 
-
     public function create(array $params){
         if(!$params){return [];}
         try {
@@ -500,110 +243,504 @@ 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;
-        }
+        $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());
+//            }
+//        }
+    }
 
-        $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);
+    public function getByWmsOrder($orderHeaders){
+        $order_no =  data_get($orderHeaders,'*.orderno');
+        return OrderPackageCommodities::query()
+            ->with('package.order')
+            ->whereHas('package.order',function($query) use ($order_no){
+                $query->whereIn('code',$order_no);
             })->get();
+    }
+
+    public function batchUpdateItself($column, array $params)
+    {
+        return app(BatchUpdateService::class)->batchUpdateItself('order_package_commodities', $column, $params);
+    }
 
-        $order_packages = OrderPackage::query()->with('order')->whereHas('order',function($query) use ($order_nos){
-            $query->whereIn('code',$order_nos);
+    /**
+     * @param array $logistic_numbers
+     * @return array|mixed
+     */
+    public function 删除包裹商品信息_根据快递单号($logistic_numbers)
+    {
+        $orderPackageCommodities = OrderPackageCommodities::query()->with('package')->whereHas('package',function($query)use($logistic_numbers){
+            $query->whereIn('logistic_number',$logistic_numbers);
         })->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;
+        $ids = data_get($orderPackageCommodities, '*.id');
+        if(count($ids) == 0){return [];}
+        try {
+            OrderPackageCommodities::query()->whereIn('id', $ids)->delete();
+            LogService::log(__METHOD__,__FUNCTION__,'删除多余OrderPackageCommodities '.$orderPackageCommodities->count().json_encode($orderPackageCommodities),null);
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__,__FUNCTION__,'删除多余OrderPackageCommodities error'.$orderPackageCommodities->count().json_encode($orderPackageCommodities).$e->getMessage().$e->getTraceAsString(),null);
+            return [];
         }
+        return $ids;
+    }
+
+    /**
+     * @param array $orderNos
+     * @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
+     */
+    public function getByOrderNos($orderNos)
+    {
+        return OrderPackageCommodities::query()->with('package.order','commodity')
+            ->whereHas('package.order',function($query) use ($orderNos){
+                $query->whereIn('code',$orderNos);
+            })->get();
+    }
 
-        $insertParams = [];
-        $updateParams = [['id','order_package_id'.'commodity_id','amount','updated_at']];
-        $updated_at = Carbon::now()->toDateTimeString();
-        $created_at = Carbon::now()->toDateTimeString();
+    /**
+     * @param Collection $orders
+     * @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
+     */
+    public function getByOrders($orders)
+    {
+        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) {
-            $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;
+            $innerParam = $this->返回创建数组($orderHeader);
+            foreach ($innerParam as $param) {
+                $innerParams[] = $param;
             }
-            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){
-                            unset($order_package_commodities[$key]);
-                            unset($actAllocationDetails[$key1]);
-                            $deleteKey[] = $key1;
-                            break;
-                        }else if($item ->sku == $commodity->sku && $item->amount !=  $actAllocationDetail->qty){
-                            $updateParams[] = [
-                                'id' => $item->id,
-                                'commodity_id' => $commodity->id,
-                                'amount' => $actAllocationDetail->qty,
-                                'updated_at' => $updated_at
-                            ];
-                            $deleteKey[] = $key1;
-                            unset($actAllocationDetails[$key1]);
-                        }
-                    }
-                }
-                $actAllocationDetails  =$actAllocationDetails->filter(function ($value, $key) use($deleteKey) {
-                    return !in_array($key, $deleteKey);
+        }
+        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 ;
                 });
-                $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;
+                $retain->push($value);
             }
         }
 
-        if(count($updateParams) > 0){
-            $this->batchUpdate($updateParams);
+        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;
+    }
 
-        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 删选需要修改的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 getByWmsOrder($orderHeaders){
-        $order_no =  data_get($orderHeaders,'*.orderno');
-        return OrderPackageCommodities::query()
-            ->with('package.order')
-            ->whereHas('package.order',function($query) use ($order_no){
-                $query->whereIn('code',$order_no);
-            })->get();
+    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 batchUpdateItself($column, array $params)
+    public function 根据更新数组进行更新($updateParams)
     {
-        return app(BatchUpdateService::class)->batchUpdateItself('order_package_commodities', $column, $params);
+        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;
     }
 }

+ 87 - 193
app/Services/OrderPackageService.php

@@ -8,9 +8,11 @@ use App\OracleDOCOrderHeader;
 use App\Order;
 use App\OrderPackage;
 use App\OrderPackageCommodities;
+use App\OrderTracking;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
+use Illuminate\Support\Collection;
 
 class OrderPackageService
 {
@@ -173,180 +175,6 @@ class OrderPackageService
             ->paginate($paginate);
     }
 
-
-    public function 根据WMS订单创建WAS包裹($orderHeaders, $orders)
-    {
-        $orderPackagesFillables = [];
-        foreach ($orders as $order) {
-            $orderHeader = $orderHeaders[strval($order['code'])] ?? false;
-            if(!$orderHeader){
-                continue;
-            }
-            $fillables = $this->根据WMS订单生成包裹信息($orderHeader, $order);
-            foreach ($fillables as $fillable) {
-                $orderPackagesFillables[] = $fillable;
-            }
-        }
-        try {
-            if(count($orderPackagesFillables) > 0){
-                OrderPackage::query()->insert($orderPackagesFillables);
-                LogService::log(__METHOD__, __FUNCTION__, '批量订单包裹信息' .count($orderPackagesFillables). json_encode($orderPackagesFillables) );
-            }
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__, '批量订单包裹信息 error' .json_encode($orderPackagesFillables) .  $e->getMessage().$e->getTraceAsString());
-        } finally {
-            $order_ids = data_get($orders,'*.id');
-            unset($orderPackagesFillables,$orders,$fillables);
-            return Order::query()->with('packages')->whereIn('id',$order_ids)->get();
-        }
-    }
-
-    public function 根据WMS订单生成包裹信息($orderHeader, $order)
-    {
-
-        $soReference5 = $orderHeader['soreference5'];
-        $orderPackages= [];
-        $logistic_numbers = [];
-
-        foreach ($orderHeader['actAllocationDetails'] as $actAllocationDetail) {
-            $logistic_numbers[]  =$actAllocationDetail->picktotraceid;
-            array_push($logistic_numbers,$actAllocationDetail['picktotraceid']);
-        }
-
-        $logistic_numbers = array_unique($logistic_numbers);
-        $logistic_numbers = array_diff($logistic_numbers,['','*',null]);
-
-        $logistic_numbers = count($logistic_numbers) == 0 ? ($soReference5 != '*' ? [$soReference5] : []) : $logistic_numbers;
-        $logistic_numbers = array_diff($logistic_numbers,['','*',null]);
-
-        if(count($logistic_numbers) == 0 ){ return  [];}
-
-        if (count($logistic_numbers) != 0) {
-            foreach ($logistic_numbers as $logistic_number) {
-                $fillable = [
-                    'order_id' => $order['id'],
-                    'logistic_number' => $logistic_number,
-                ];
-                $orderPackages[] = $fillable;
-            }
-        }
-        return $orderPackages;
-    }
-
-    public function 更新WAS订单的包裹的重量和体积($orderHeaders,$orderPackages)
-    {
-
-        /** @var CommodityService $commodityService */
-        $commodityService = app('commodityService');
-        $commodities = $commodityService->getWASCommoditiesByWMSOrderHeaders($orderHeaders); // 商品
-
-
-        $multipleData = [['id','weight','bulk']];
-        $noAttributeCommodity = [];
-
-        $commodity_map = [];
-        foreach ($commodities as $commodity) {
-            $key = ' id='.$commodity->id;
-            $commodity_map[$key] = $commodity;
-        }
-        foreach ($orderPackages as $packages) {
-            foreach ($packages as $package) {
-
-                if($package == null){
-                    continue;
-                }
-                $orderPackageCommodities = $package['commodities'] ?? [];
-                $updateArr = [
-                    'id' => $package['id'],
-                    'weight' => 0,
-                    'bulk' => 0,
-                ];
-                foreach ($orderPackageCommodities as $packageCommodity) {
-                    $commodity =  $commodity_map[' id='.$packageCommodity->commodity_id];
-                    if($commodity['weight'] == 0  || !$commodity['bulk'] == 0 ){
-                        array_push($noAttributeCommodity,$commodity);
-                    }
-//                    $updateArr['weight'] += bcmul($commodity['weight'], $packageCommodity['amount'],5);
-//                    $updateArr['bulk'] += bcmul($commodity['bulk'], $packageCommodity['amount'],5);
-//                    $updateArr['weight'] += round($commodity['weight']*$packageCommodity['amount'],5);
-                    $updateArr['bulk'] += round($commodity['bulk']*$packageCommodity['amount'],5);
-                    //$updateArr['weight'] +=(intval($commodity['weight'] ?? 0) )  * ( intval($packageCommodity['amount'] ?? 0) );
-                    //$updateArr['bulk'] += (intval($commodity['bulk']  ?? 0)) * (intval($packageCommodity['amount'] ?? 0) );
-                }
-                if($package['weight'] == $updateArr['weight'] && $package['bulk'] == $updateArr['bulk']){
-                    continue;
-                }
-                // 订单同步步时 重量 体积不覆盖已有值
-                if($packages['weight'] ?? false){
-                    $updateArr['weight'] = $packages['weight'];
-                }
-                if($packages['bulk'] ?? false){
-                    $updateArr['bulk'] = $packages['bulk'];
-                }
-                $multipleData[] = $updateArr;
-            }
-        }
-        if(count($multipleData) > 1){
-            /** @var BatchUpdateService $batchUpdateService */
-            $batchUpdateService = app('batchUpdateService');
-            $batchUpdateService->batchUpdate('order_packages',$multipleData);
-        }
-        array_unique($noAttributeCommodity);
-        if(count($noAttributeCommodity) > 1){
-            $commodityService->syncCommodityAttribute($noAttributeCommodity);
-        }
-        unset($multipleData,$noAttributeCommodity,$commodities);
-    }
-
-    public function 更新WAS订单快递单号信息($orderHeaders,$orders)
-    {
-
-        $fillables = [];
-        $orders_map = [];
-        $orders_package_map = [];
-        foreach ($orders as $order){
-            $key = $order['code'];
-            $orders_map[$key] = $order;
-            foreach ($order['packages'] as $package) {
-                $logistic_numbers = $package['logistic_number'];
-                $orders_package_map[$key][$logistic_numbers] =$package;
-            }
-        }
-
-        foreach ($orderHeaders as $key=>$orderHeader) {
-            $order = $orders[$key] ?? false;
-            if(!$order){
-                continue;
-            }
-            $packages = $orders_package_map[$key] ?? false;
-            $pickToTraceIds = [];
-            foreach ($orderHeader->actAllocationDetails as $actAllocationDetail) {
-                $pickToTraceIds[] = $actAllocationDetail['picktotraceid'];
-            }
-            $pickToTraceIds = array_unique(array_diff($pickToTraceIds,['','*',null]));
-
-            foreach ($pickToTraceIds as $pickToTraceId) {
-                if(!$packages || !($orders_package_map[$key][$pickToTraceId] ?? false)){
-                    $fillables[] = [
-                        'order_id' => $order->id,
-                        'logistic_number' => $pickToTraceId
-                    ];
-                }
-            }
-        }
-
-        try {
-            if(count($fillables)>0){
-                OrderPackage::query()->insert($fillables);
-                LogService::log(__METHOD__,__FUNCTION__,'创建orderPackage:'.json_encode($fillables));
-            }
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__,__FUNCTION__,'创建orderPackage 失败:'.json_encode($fillables).$e->getMessage().$e->getTraceAsString());
-        } finally {
-            unset($fillables);
-        }
-    }
-
     public function createByWmsOrder($orderHeaders)
     {
         if(!$orderHeaders ){return ;}
@@ -365,6 +193,7 @@ class OrderPackageService
         foreach ($orders as $order) {
             $orderHeader =  $dataHandlerService->getKeyValue(['orderno'=>$order->code],$order_headers_orderNo_map);
             if(!$orderHeader){ continue;}
+            if(!$orderHeader->sostatus == 90){ continue;}
             $params = $this->getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map);
             if(!$params){continue;}
             foreach ($params as $param) {
@@ -387,17 +216,17 @@ class OrderPackageService
         unset($orderHeaders);
     }
 
-
-
-    public function getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map){
+    public function getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map)
+    {
         /** @var DataHandlerService $dataHandlerService */
         $dataHandlerService = app(DataHandlerService::class);
         $actAllocationDetails = $orderHeader->actAllocationDetails;
         $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['','*',null]);
         $params = [];
-        $created_at = Carbon::now()->format('Y-m-d H:i:s');;
-        $updated_at = Carbon::now()->format('Y-m-d H:i:s');;
+        $created_at = Carbon::now()->format('Y-m-d H:i:s');
+        $updated_at = Carbon::now()->format('Y-m-d H:i:s');
         foreach ($logistic_numbers as $logistic_number) {
+            if($logistic_number == $orderHeader->orderno)continue;
             $key  = ['order_id'=>$order->id,'logistic_number'=>$logistic_number];
             $orderPackage = $dataHandlerService->getKeyValue($key,$order_packages_logistic_number_map);
             if(isset($orderPackage)){ continue;}
@@ -408,6 +237,26 @@ class OrderPackageService
         return $params;
     }
 
+    public function getUpdateParamsByOrderHeader($orderHeader,$order,$orderPackages)
+    {
+        $updated_at = Carbon::now()->format('Y-m-d H:i:s');
+        /** @var DataHandlerService $dataHandlerService */
+        $dataHandlerService = app(DataHandlerService::class);
+        $wms_logistic_number =  app(OracleDOCOrderHeaderService::class)->getLogisticNumbers($orderHeader);
+        $order_packages  = $orderPackages->where('order_id',$order->id)->get();
+        $was__logistic_number = data_get($order_packages,'*.logistic_number');
+        $arr1=  array_diff($was__logistic_number,$wms_logistic_number);
+        $arr2=  array_diff($wms_logistic_number,$was__logistic_number);
+        if(count($arr2) > 0 && count($arr1) == 0){
+            return [
+                'id'=>$order_packages->first()->id,
+                'logistic_number' => $arr1[0],
+                'updated_at'=> $updated_at,
+            ];
+        }
+        return null;
+    }
+
     public function updateOrderPackageByWmsOrder($orderHeaders){
         /** @var OrderPackageCommoditiesService $orderPackageCommoditiesService */
         $orderPackageCommoditiesService =  app(OrderPackageCommoditiesService::class);
@@ -425,7 +274,7 @@ class OrderPackageService
         foreach ($orderHeaders as $orderHeader) {
             $order = $dataHandlerService->getKeyValue(['code'=>$orderHeader->orderno ?? ''],$orders_code_map);
             if(!$order){continue;}
-            $order_packages = $order->packages;
+            $order_packages = $order->packages ?? null;
             if(!$order_packages){continue;}
             $params =$this->getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map);
             if(count($params) > 0){
@@ -441,19 +290,7 @@ class OrderPackageService
             $this->create($insertParams);
         }
         $orderPackageCommoditiesService->updateByWmsOrder($orderHeaders);
-    }
-
-    public function getLogisticNumbersByOrderHeader($orderHeader){
-       $oracleDOCOrderDetails =  $orderHeader->oracleDOCOrderDetails;
-       $actAllocationDetails = $orderHeader->actAllocationDetails;
-       if($actAllocationDetails){
-            $logistic_numbers = data_get($actAllocationDetails,'*.picktotraceid');
-            return array_diff(array_unique($logistic_numbers),['','*',null]);
-       }
-       if($oracleDOCOrderDetails){
-           return [$orderHeader->soreference5];
-       }
-       return [];
+        $this->删除多余的订单包裹_根据WMS订单($orderHeaders);
     }
 
     public function getByWmsOrders($orderHeaders){
@@ -478,4 +315,61 @@ class OrderPackageService
             return OrderPackage::query()->whereIn('logistic_number',$logistic_numbers)->get();
         }
     }
+
+    /**
+     * @param OracleDOCOrderHeader $orderHeaders
+     */
+    public function 删除多余的订单包裹_根据WMS订单($orderHeaders)
+    {
+        if(!isset($orderHeaders)){return;}
+        if(is_array($orderHeaders) && count($orderHeaders) == 0){return;}
+        $orderPackages = $this->getByWmsOrders($orderHeaders);
+        $Was_logistic_number = data_get($orderPackages,'*.logistic_number');
+        $Wms_logistic_number = array_unique(data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid'));
+        $delete_logistic_number = array_diff($Was_logistic_number,$Wms_logistic_number);
+        if(count($delete_logistic_number) == 0){return;}
+        $delete_orderPackages = OrderPackage::query()->wherein('logistic_number',$delete_logistic_number)->get();
+        $delete_ids = app(OrderPackageCommoditiesService::class)->删除包裹商品信息_根据快递单号($delete_logistic_number);
+        try {
+            OrderPackage::query()->whereIn('logistic_number', $delete_logistic_number)->delete();
+            LogService::log(__METHOD__,__FUNCTION__,'删除多余OrderPackage '.$delete_orderPackages->count().json_encode($delete_orderPackages),null);
+            $orderTracking = OrderTracking::query()->whereIn('order_package_commodity_id', $delete_ids)->get();
+            app(OrderTrackingService::class)->deleteOrderTracings($orderTracking);
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__,__FUNCTION__,'删除多余OrderPackage error'.$delete_orderPackages->count().json_encode($delete_orderPackages).$e->getMessage().$e->getTraceAsString(),null);
+        }
+    }
+
+    /**
+     * @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;
+    }
+
 }

+ 28 - 332
app/Services/OrderService.php

@@ -8,6 +8,7 @@ use App\OracleBasCustomer;
 use App\OracleDOCASNHeader;
 use App\OracleDOCOrderHeader;
 use App\Order;
+use App\OrderIssue;
 use App\OrderPackage;
 use App\OrderPackageCommodities;
 use App\Owner;
@@ -319,6 +320,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) {
@@ -349,7 +351,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));
@@ -405,335 +406,6 @@ class OrderService
         return $this->findOrCreateByClientCode($orderHeader['soreference1']);
     }
 
-    public function 根据设置从WMS获取跟踪的订单($startDate)
-    {
-
-        /** @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService */
-        $oracleDOCOrderHeaderService = app('oracleDOCOrderHeaderService');
-        $orderHeadersResult = $oracleDOCOrderHeaderService->根据时间获取在这段时间内创建的WMS订单($startDate);
-
-//        LogService::log('111','111',json_encode($orderHeadersResult));
-        if ($orderHeadersResult->count() == 0) {
-            return null;
-        }
-
-        $orderHeaders_map = [];
-        $oracleDOCOrderDetails = [];
-        $actAllocationDetails = [];
-
-        foreach ($orderHeadersResult as $key=>$orderHeader) {
-            $orderHeaders_map[$orderHeader['orderno']] = $orderHeader;
-            $oracleDOCOrderDetails[$orderHeader['orderno']] = $orderHeader['oracleDOCOrderDetails'];
-            $details = $orderHeader['actAllocationDetails'];
-            $orderno = strval($orderHeader['orderno']);
-            foreach ($details as $detail) {
-                $picktotraceid = strval($detail['picktotraceid']);
-                if ($picktotraceid == '*') {
-                    if (!($actAllocationDetails[$orderno] ?? false)) {
-                        $actAllocationDetails[$orderno] = [];
-                    }
-                    array_push($actAllocationDetails[$orderno], $detail);
-                    continue;
-                }
-                if (!($actAllocationDetails[$picktotraceid] ?? false)) {
-                    $actAllocationDetails[$picktotraceid] = [];
-                }
-                $actAllocationDetails[$picktotraceid][] =$detail;
-            }
-        }
-        unset($orderHeadersResult);
-
-        return $this->根据WMS订单生成WAS订单($orderHeaders_map, $oracleDOCOrderDetails, $actAllocationDetails);
-    }
-
-    public function 根据设置从WMS同步该时间段内更新的订单($startDate)
-    {
-        /** @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService */
-        $oracleDOCOrderHeaderService = app('oracleDOCOrderHeaderService');
-        $editedOrderHeaders = $oracleDOCOrderHeaderService->根据时间获取在这段时间内更新的WMS订单($startDate);
-
-        $orderHeaders_map = [];
-        foreach ($editedOrderHeaders as $editedOrderHeader) {
-            $orderHeaders_map[$editedOrderHeader['orderno']] = $editedOrderHeader;
-        }
-
-        $orderNos = array_keys($orderHeaders_map);
-
-        $orders = Order::query()
-            ->with('packages.commodities')
-            ->whereIn('code', $orderNos)
-            ->get();
-
-        if ($orders->count() == 0) {
-            return ['orderPackageCommodities'=> null, 'orderHeaders'=>null];
-        }
-
-        $ordersList =[];
-        foreach ($orders as $order) {
-            $ordersList[$order['code']] = $order;
-        }
-        $orderHeaders_map = $this->filterNoCorrespondingOrder($orderHeaders_map,$ordersList);
-
-        $this->将WMS订单对应的WAS订单信息更新($orderHeaders_map,$ordersList);
-
-        $orderPackageCommodities = OrderPackageCommodities::query()
-            ->with('package.order')
-            ->whereHas('package.order', function ($query) use ($orderNos) {
-                $query->whereIn('code',$orderNos);
-            })->get();
-        $orderHeaders = $orderHeaders_map;
-        return compact('orderPackageCommodities', 'orderHeaders');
-    }
-
-
-    public function 根据WMS订单生成WAS订单($orderHeaders, $oracleDOCOrderDetails, $actAllocationDetails)
-    {
-
-        /** @var OrderPackageService $orderPackageService */
-        $orderPackageService = app('orderPackageService');
-        /** @var OrderPackageCommoditiesService $orderCommoditiesService */
-        $orderCommoditiesService = app('orderPackageCommoditiesService');
-
-        if (count($orderHeaders) === 0) {
-            return [];
-        }
-        $params = $this->根据WMS订单信息返回创建WAS订单需要信息($orderHeaders);
-        $owners = $params['owners'];
-        $shops = $params['shops'];
-        $logistics = $params['logistics'];
-        $orderHeaders = $this->过滤已有的WAS订单($orderHeaders);
-        $this->根据WMS订单创建WAS订单($orderHeaders, $owners, $shops, $logistics);
-        $orderNos = array_keys($orderHeaders);
-        $orders = Order::query()->whereIn('code',$orderNos)->get();
-        $orders = $orderPackageService->根据WMS订单创建WAS包裹($orderHeaders, $orders);
-        $orders = $orderCommoditiesService->根据WMS订单信息创建WAS订单包裹商品($orderHeaders, $oracleDOCOrderDetails, $actAllocationDetails, $orders);
-
-        $orderPackages = [];
-        foreach ($orders as $order) {
-            $orderPackages[] = $order['packages'];
-           $packages =  $order['packages'] ?? null;
-            $orderPackages[] =  $packages;
-//           array_push($orderPackages,$packages);
-        }
-        $orderPackageService->更新WAS订单的包裹的重量和体积($orderHeaders,$orderPackages);
-        return compact('orders', 'orderHeaders', 'actAllocationDetails', 'oracleDOCOrderDetails');
-    }
-
-    public function 过滤已有的WAS订单($orderHeaders,$orders_map = [])
-    {
-
-        if(count($orders_map) == 0){
-            $orderNos = array_keys($orderHeaders);
-            $orders = Order::query()->whereIn('code', $orderNos)->get();
-            foreach ($orders as $order) {
-                $orders_map[$order['code']] = $order;
-            }
-        }
-        if(count($orders_map) !== 0){
-            foreach ($orders_map as $key=>$orderHeader) {
-                unset($orderHeaders[$key]);
-            }
-        }
-        return $orderHeaders;
-    }
-
-    public function filterNoCorrespondingOrder($orderHeaders_map,$orders_map = []){
-        if(count($orders_map) == 0){
-            $orderNos = array_keys($orderHeaders_map);
-            $orders = Order::query()->whereIn('code', $orderNos)->get();
-            foreach ($orders as $order) {
-                $orders_map[$order['code']] = $order;
-            }
-        }
-        if(count($orders_map) !== 0){
-            foreach ($orderHeaders_map as $key=>$orderHeader) {
-                if(!($orders_map[$key] ?? false)){
-                    unset($orderHeaders_map[$key]);
-                }
-            }
-        }
-        return $orderHeaders_map;
-
-    }
-
-    private function 根据WMS订单信息返回创建WAS订单需要信息($orderHeaders)
-    {
-        /** @var ShopService $shopService */
-        $shopService = app('shopService');
-        /** @var LogisticService $logisticService */
-        $logisticService = app('logisticService');
-        /** @var OwnerService $ownerService */
-        $ownerService = app('ownerService');
-        $owners = $ownerService->获取订单跟踪的货主();    // 监听的货主
-        $shops = $shopService->根据追踪的WMS订单返回商铺($orderHeaders);     // 商铺
-        $logistics = $logisticService->getWASLogisticsByWMSOrderHeaders($orderHeaders); // 承运商
-        return compact('owners', 'shops', 'logistics');
-    }
-
-    public function 根据WMS订单创建WAS订单($orderHeaders, $owners, $shops, $logistics)
-    {
-        if(!$orderHeaders){return [];}
-        $fillables = [];
-        $owners_map = [];
-        $shop_map = [];
-        $logistics_map = [];
-        foreach ($owners as $owner) {
-            $key = 'code='.$owner->code;
-            $owners_map[$key] = $owner;
-        }
-
-        foreach ($shops as $shop) {
-            $key = 'name='.$shop->name.' owner_id='.$shop->owner_id;
-            $shop_map[$key] =  $shop;
-        }
-
-        foreach ($logistics as $logistic) {
-            $key = 'code='.$logistic->code;
-            $logistics_map[$key] =  $logistic;
-        }
-
-        $logistic_change = Logistic::query()->where('name','自提')->first();
-        $owner_change = Owner::query()->where('name','安桥主品')->first();
-        $logistic_an_jie = Logistic::query()->where('name','新杰物流')->first();
-
-        // XXX 循环 300 个元素 3s-5s
-        foreach ($orderHeaders as $orderHeader) {
-            $owner_key = 'code='.$orderHeader->customerid;
-            $owner = $owners_map[$owner_key] ?? '';
-
-            $shop_key = 'name='.$orderHeader->issuepartyname.' owner_id='.$owner->owner_id ?? '';
-            $shop = $shop_map[$shop_key] ?? '';
-
-            $logistic_key = 'code='. $orderHeader->userdefine1;
-            $logistic = $logistics_map[$logistic_key] ?? '';
-
-            // change logistic to 新杰物流
-            // $logistic 自提 and $owner 安桥主品
-            if($logistic_change->id == $logistic->id ??'' && $owner_change->id == $owner->id ?? ''){
-                $logistic = $logistic_an_jie;
-            }
-
-            $fillables[] = [
-                'code' => $orderHeader->orderno ,
-                'owner_id' => $owner->id ?? '',
-                'wms_status' => $orderHeader->oracleBASCode_codename_c,
-                'created_at' => $orderHeader->addtime,
-                'logistic_id' => $logistic->id ?? '',
-                'shop_id' => $shop->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,
-            ];
-
-        }
-        try {
-            if (count($fillables) > 0) {
-                Order::query()->insert($fillables);
-                LogService::log(__METHOD__, __FUNCTION__, '批量创建Order' . count($fillables) . json_encode($fillables));
-            }
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__, $e->getMessage(), $e->getTraceAsString() . json_encode($fillables));
-        } finally {
-            unset($owners_map,$shop_map,$logistics_map,$fillables);
-        }
-    }
-
-    // XXX 业务逻辑待修改完善
-    public function 将WMS订单对应的WAS订单信息更新($orderHeaders,$ordersList)
-    {
-        /** @var CommodityService $commodityService */
-        $commodityService = app('commodityService');
-        /** @var OrderPackageService $orderPackageService */
-        $orderPackageService = app('orderPackageService');
-        /** @var OrderPackageCommoditiesService $orderPackageCommoditiesService */
-        $orderPackageCommoditiesService = app('orderPackageCommoditiesService');
-        if (count($orderHeaders) == 0) {
-            return [];
-        }
-        $commodities = $commodityService->getWASCommoditiesByWMSOrderHeaders($orderHeaders);     // 商品信息
-
-        $this->更新WMS订单对应的的WAS订单($orderHeaders, $ordersList);
-
-        $orderPackageService->更新WAS订单快递单号信息($orderHeaders, $ordersList);
-
-        $orderPackageCommoditiesService->更新WAS订单快递打包商品信息($orderHeaders, $ordersList, $commodities);
-
-        $orderNos = data_get($ordersList,'*.code');
-/*        $orderPackages = OrderPackage::query()
-            ->with('commodities','order')
-            ->whereHas('order', function ($query) use ($orderNos) {
-                $query->whereIn('code', $orderNos);
-            })
-            ->get();*/
-        $orders = Order::query()
-            ->with('packages.commodities')
-            ->whereIn('code',$orderNos)
-            ->get();
-        $orderPackages = [];
-        foreach ($orders as $order) {
-            $packages =  $order['packages'] ?? null;
-            $orderPackages[] =  $packages;
-        }
-        unset($orderNos);
-        $orderPackageService->更新WAS订单的包裹的重量和体积($orderHeaders,$orderPackages);    // 同步包裹重量和体积
-    }
-
-    public function  更新WMS订单对应的的WAS订单($orderHeaders, $orders)
-    {
-        $multipleData = [[
-            'id', 'wms_status', 'consignee_name', 'consignee_phone', 'province', 'city', 'district', 'wms_edittime', 'address', 'client_code'
-        ]];
-        // XXX 循环 300个元素 3s - 5s
-            /** @var Order $order */
-        foreach ($orders as $key=>$order) {
-            $orderHeader = $orderHeaders[$key] ?? false;
-            if ($orderHeader) {
-
-                if($order->wms_status != $orderHeader->oracleBASCode_codename_c ||
-                    $order->consignee_name != $orderHeader->c_contact ||
-                    $order->consignee_phone != $orderHeader->c_tel2 ||
-                    $order->province != $orderHeader->c_province ||
-                    $order->city != $orderHeader->c_city ||
-                    $order->district != $orderHeader->c_district ||
-                    $order->wms_edittime != $orderHeader->edittime ||
-                    $order->address != $orderHeader->c_address1 ||
-                    $order->client_code != $orderHeader->soreference1 ){
-
-                    $multipleData[] =[
-                        'id' =>$order->id,
-                        'wms_status' => $orderHeader->oracleBASCode_codename_c,
-                        'consignee_name' => $orderHeader->c_contact,
-                        'consignee_phone' => $orderHeader->c_tel2,
-                        'province' => $orderHeader->c_province,
-                        'city' => $orderHeader->c_city,
-                        'district' => $orderHeader->c_district,
-                        'wms_edittime' => $orderHeader->edittime,
-                        'address' => $orderHeader->c_address1,
-                        'client_code' => $orderHeader->soreference1,
-                    ];
-                }
-            }
-        }
-
-        if(count($multipleData)  > 1){
-            try {
-                /** @var BatchUpdateService $batchUpdateService */
-                $batchUpdateService = app('batchUpdateService');
-                $batchUpdateService->batchUpdate('orders', $multipleData);
-                LogService::log(__METHOD__,__FUNCTION__,'批量更新'.count($multipleData).json_encode($multipleData));
-            } catch (\Exception $e) {
-                LogService::log(__METHOD__,__FUNCTION__,'批量更新失败'.json_encode($multipleData).$e->getMessage(),$e->getTraceAsString());
-            } finally {
-                unset($multipleData);
-            }
-        }
-    }
-
     public function first(array $params)
     {
         $order = Order::query();
@@ -764,7 +436,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 */
@@ -855,7 +527,7 @@ class OrderService
         }
         $logistic_XJWL = Logistic::query()->where('code' ,'XJWL')->first();
         foreach ($orderHeaders_map as $orderHeader) {
-            if($order_code_map[$orderHeader->orderno] ?? false)continue;
+             if($order_code_map[$orderHeader->orderno] ?? false)continue;
             $owner = $owners_code_map[$orderHeader->customerid] ?? null;
             $logistic =  $logistics_code_map[$orderHeader->userdefine1] ?? null;
             $shop = $shop_name_map[' _owner_code'.$orderHeader->customerid.' name='.$orderHeader->issuepartyname] ?? '';
@@ -978,4 +650,28 @@ class OrderService
         return Order::query()->whereIn('code',$order_nos)->get();
     }
 
+    public function 返回有问题件的订单号($orders)
+    {
+        if(!isset($orders)){return [];}
+        $orderNo =  data_get($orders,'*.orderno');
+        $orderIssues = OrderIssue::query()->with('order')
+            ->whereHas('order',function($query)use($orderNo){
+                $query->whereIn('code',$orderNo);
+            })->get();
+
+        return $orderIssues->map(function($orderIssue){
+            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'));
+    }
+
 }

+ 61 - 190
app/Services/OrderTrackingService.php

@@ -9,6 +9,8 @@ use App\OrderTracking;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\Services\common\QueryService;
+use Illuminate\Support\Carbon;
+use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
 use Maatwebsite\Excel\Facades\Excel;
 
@@ -79,6 +81,15 @@ class OrderTrackingService
             });
         }// 运输单号(快递单号)
 
+        if(isset($params['remark'])){
+            $query->where('remark','like','%'.$params['remark'].'%');
+            if(isset($params['remark_addtime'])){
+                $query->where('created_at','>',Carbon::now()->subDays($params['remark_addtime']));
+            }else{
+                $query->where('created_at','>=',Carbon::now()->subDays(15));
+            }
+        }
+
         if ($params['ids'] ?? false) {
             $ids = explode(',', $params['ids']);
             $query->whereIn('id', $ids);
@@ -102,130 +113,12 @@ class OrderTrackingService
         return $this->downLoadAsExec($trackOrders->get());
     }
 
-    public function 根据设置从WMS同步追踪货主的订单($startDate)
-    {
-        $this->根据设置从WMS追踪货主的生成订单($startDate);
-        $this->根据设置从该时间段内获取WMS更新的订单($startDate);
-
-    }
-
-    public function 根据设置从WMS追踪货主的生成订单($startDate)
-    {
-        /** @var OrderService $orderService */
-        $orderService = app('orderService');
-        $params = $orderService->根据设置从WMS获取跟踪的订单($startDate);
-        $orders = $params['orders'];
-        $orderHeaders = $params['orderHeaders'];
-        $this->根据订单生成订单跟踪($orderHeaders, $orders);
-
-    }
-
-    public function 根据设置从该时间段内获取WMS更新的订单($startDate)
-    {
-        /** @var OrderService $orderService */
-        $orderService = app('orderService');
-        $params = $orderService->根据设置从WMS同步该时间段内更新的订单($startDate);
-        $orderPackageCommodities = $params['orderPackageCommodities'];
-        $orderHeaders = $params['orderHeaders'];
-        $this->更新创建的WAS订单商品跟踪($orderPackageCommodities, $orderHeaders);
-    }
-
-    //  XXX 代码逻辑有待纠正
-    public function 更新创建的WAS订单商品跟踪($updateOrderPackageCommodities, $updateOrderHeader)
-    {
-        if ($updateOrderPackageCommodities == null || $updateOrderPackageCommodities->count() == 0) {
-            return;
-        }
-        if ($updateOrderHeader == null || count($updateOrderHeader) == 0) {
-            return;
-        }
-        $ids = data_get($updateOrderPackageCommodities, '*.id');
-
-        $orderTrackings = OrderTracking::query()->whereIn('order_package_commodity_id', $ids)->get();
-
-
-        $this->updateOrderTracking($orderTrackings, $updateOrderPackageCommodities); // 更新
-
-        unset($updateOrderPackageCommodities, $updateOrderHeader);
-    }
-
-    public function 根据订单生成订单跟踪($orderHeaders, $orders)
-
-    {
-        $orderPackages = [];
-        $orderPackageCommodities = [];
-        $ordersList = [];
-        $fillables = [];
-        if($orders == null){
-            return;
-        }else if($orderHeaders == null){
-            return ;
-        }
-
-        foreach ($orders as $order) {
-            $ordersList[$order['id']] = $order;
-            foreach ($order['packages'] as $packages) {
-                $orderPackages[$packages['id']] = $packages;
-                foreach ($packages['commodities'] as $item) {
-                    $orderPackageCommodities[] = $item;
-                }
-            }
-        }
-        if (count($orderPackageCommodities) == 0) {
-            return;
-        }
-
-        foreach ($orderPackageCommodities as $key=>$orderPackageCommodity) {
-            $order_package_id = $orderPackageCommodity['order_package_id'];
-            $orderPackage = $orderPackages[$order_package_id];
-            $order_id = $orderPackage['order_id'] ?? '';
-            $order = $ordersList[$order_id] ?? '';
-            $orderHeader = $orderHeaders[$order['code']];
-            $pick_up_at = $orderHeader['lastshipmenttime'] ?? null; // 提货时间
-
-            $client = null;
-            $order_remark = null;
-
-            if ($orderHeader['notes'] ?? false) {
-                $notes = $orderHeader['notes'];
-//                $notes = str_replace('【','[',$notes);
-                if (strpos($notes, '[')) {
-                    $arr= str_split($notes,strpos($notes,'['));
-                    $client = $arr[0] ?? '';
-                    $order_remark = $arr[1] ?? '';
-                    $order_remark = str_replace(['[',']'],'',$order_remark);
-                }
-            }
-
-            $fillable = [
-                'order_package_commodity_id' => $orderPackageCommodity['id'],
-                'owner_id' => $order['owner_id'],
-                'client' => $client,
-                'created_at' => $order['created_at'],
-                'order_remark' => $order_remark,
-                'pick_up_at' => $pick_up_at, // 提货时间
-            ];
-
-            $fillables[] = $fillable;
-         }
-        try {
-            if (count($fillables) > 0) {
-                OrderTracking::query()->insert($fillables);
-                LogService::log(__METHOD__, __FUNCTION__, '批量创建订单跟踪成功' . count($fillables) . json_encode($fillables));
-            }
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__, '批量创建订单跟踪失败' . $e->getMessage() . $e->getTraceAsString());
-        } finally {
-            unset($fillables, $orderHeaders, $orders,$orderPackageCommodities);
-        }
-    }
-
     private function downLoadAsExec($trackOrders)
     {
         $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' => '运输单号',
+            'gross_weight' => '重量', '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' => '备注']];
 
@@ -233,8 +126,10 @@ class OrderTrackingService
         $i = 0;
 
         foreach ($trackOrders as $trackOrder) {
+            $logisticName = $trackOrder['commodities']['package']['order']['logistic']['name'];
+            $logistic_number = $trackOrder['commodities']['package']['logistic_number'];
             $list[$i]['owner_name'] = $trackOrder['owner']['name'] ?? '';
-            $list[$i]['order_client_code'] = $trackOrder['commodities']['package']['order']['client_code'] ?? '';
+            $list[$i]['order_client_code'] = $trackOrder['web_order_number'] ? '' : $trackOrder['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'] ?? '';
@@ -243,11 +138,11 @@ class OrderTrackingService
             $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]['gross_weight'] = $trackOrder['gross_weight'];
+            $list[$i]['bulk'] = $trackOrder['bulk'];
+            $list[$i]['pallet_total'] = $trackOrder['pallet_total'];
             $list[$i]['package_logistic'] = $trackOrder['commodities']['package']['order']['logistic']['name'];
-            $list[$i]['package_logistic_number'] = $trackOrder['commodities']['package']['logistic_number'];
+            $list[$i]['package_logistic_number'] = $logisticName  == '新杰物流' ?   ( $trackOrder['web_order_number'] ? $trackOrder['web_order_number'] : $trackOrder['order_client_code']) : $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'];
@@ -261,69 +156,6 @@ class OrderTrackingService
         return Excel::download(new Export($row, $list), date('YmdHis', time()) . '-订单跟踪.xlsx');
     }
 
-    private function updateOrderTracking($orderTrackings, $orderPackagesCommodities)
-    {
-        $multipleData = [['id', 'owner_id', 'client', 'pick_up_at','web_order_number']];
-        $orderTrackings_list = [];
-
-        foreach ($orderPackagesCommodities as $item) {
-            $orderTrackings_list[$item['order_package_commodity_id']] = $item;
-        }
-
-        foreach ($orderTrackings as $orderTracking) {
-            $Commodities = $orderTrackings_list[$orderTracking['order_package_commodity_id']] ?? false;
-            $order = $Commodities['package']['order'] ?? '';
-
-            if ($order ?? false) {
-                $code = $order['code'];
-                $orderHeader = $orderPackagesCommodities[$code] ?? '';
-                $pick_up_at = $orderHeader['lastshipmenttime'] ?? null; // 提货时间
-
-                $client = null;
-                $order_remark = null;
-
-                if ($orderHeader['notes'] ?? false) {
-                    $notes = $orderHeader['notes'];
-//                $notes = str_replace('【','[',$notes);
-                    if (strpos($notes, '[')) {
-                        $arr= str_split($notes,strpos($notes,'['));
-                        $client = $arr[0] ?? '';
-                        $order_remark = $arr[1] ?? '';
-                        $order_remark = str_replace(['[',']'],'',$order_remark);
-                    }
-                }
-                $web_order_number = null;
-                if(preg_match('/^O[\d]/',$orderHeader['orderno'] ?? '') > 0){
-                    $web_order_number = $orderHeader['soreference1'];
-                }
-                $data = [
-                    'id' => $orderTracking['id'],
-                    'owner_id' => $order['owner_id'] ?? '',
-                    'client' => $client,
-                    'pick_up_at' => $pick_up_at ?? null, // 提货时间
-                    'order_remark' => $order_remark,
-                    'web_order_number' => $web_order_number,
-                ];
-
-                if ($data['owner_id'] !== $orderTracking['owner_id'] ||
-                    $data['client'] !== $orderTracking['client'] ||
-                    $data['pick_up_at'] !== $orderTracking['pick_up_at'] ||
-                    $data['order_remark'] !== $orderTracking['order_remark'] ||
-                    $data['web_order_number'] !==  $orderTracking['web_order_number']
-                ) {
-                    $multipleData[] = $data;
-                }
-            }
-        }
-
-        if (count($multipleData) > 1) {
-            /** @var BatchUpdateService $batchUpdateService */
-            $batchUpdateService = app('batchUpdateService');
-            $batchUpdateService->batchUpdate('order_trackings', $multipleData);
-        }
-    }
-
-
     /**
      * @param $startData
      */
@@ -361,7 +193,7 @@ class OrderTrackingService
             ->whereHas('commodities.package.order', function ($query) use ($order_id) {
                 $query->where('id', $order_id);
             })->update([$param=>$value]);
-        return ['success'=> $bool];
+        return ['success'=> $bool > 0];
     }
 
     public function createByWmsOrderHeader($orderHeaders)
@@ -403,7 +235,7 @@ class OrderTrackingService
             if(!$order){continue ;}
             $order_header = $order_headers_map[$order->code];
             if(!$order_header){continue ;}
-
+            if($order_header->sostatus == 90){continue;}
             $client = null;
             $order_remark = null;
             if ($order_header['notes'] ?? false) {
@@ -411,7 +243,6 @@ class OrderTrackingService
                 if (strpos($notes, '[')) {
                     $arr= str_split($notes,strpos($notes,'['));
                     $client = $arr[0] ?? '';
-//                    $order_remark = $arr[1] ?? '';
                     $order_remark = str_replace(['[',']'],'', $arr[1] ?? '');
                 }
             }
@@ -427,6 +258,7 @@ class OrderTrackingService
             $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,
@@ -482,6 +314,7 @@ class OrderTrackingService
         $update_params = [];
         $update_params[0] =['id','client','pick_up_at','order_remark','gross_weight','bulk'];
         foreach ($orderHeaders as $orderHeader) {
+            if($orderHeader->sostatus == '90'){continue;}
             $order_package_commodity_list = $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
 
             if(!$order_package_commodity_list){continue;}
@@ -546,6 +379,7 @@ class OrderTrackingService
                     $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,
@@ -565,6 +399,7 @@ class OrderTrackingService
                 LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderTracking error'.json_encode($insert_params) .'||'.$e->getMessage(),'||'.$e->getTraceAsString());
             }
         }
+        $this->删除订单追踪_订单取消($orderHeaders);
     }
 
     public function getParamsByOrderHeaderAndOrder($orderHeader,$order){
@@ -595,5 +430,41 @@ class OrderTrackingService
         ];
     }
 
+    /**
+     * @param Collection $orderHeaders
+     */
+    public function 删除订单追踪_订单取消($orderHeaders)
+    {
+        $cancelledOrderHeaders = $orderHeaders->where('sostatus','90');
+        $orderTracking = $this->getOrderTracingByWmsOrder($cancelledOrderHeaders);
+        $this->deleteOrderTracings($orderTracking);
+    }
+
+    /**
+     * @param Collection $orderHeaders
+     * @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|Collection|\Tightenco\Collect\Support\Collection
+     */
+    public function getOrderTracingByWmsOrder($orderHeaders)
+    {
+        if($orderHeaders->count() == 0){return  collect();}
+        $orderNos = data_get($orderHeaders,'*.orderno');
+        return OrderTracking::query()->with('commodities.package.order')
+            ->whereHas('commodities.package.order',function($query)use($orderNos){
+                $query->whereIn('code',$orderNos);
+            })->get();
+    }
 
+    /**
+     * @param Collection $orderTracking
+     */
+    public function deleteOrderTracings($orderTracking)
+    {
+        if($orderTracking->count() == 0){return;}
+        try {
+            OrderTracking::query()->whereIn('id', data_get($orderTracking,'*.id'))->delete();
+            LogService::log(__METHOD__,__FUNCTION__,'删除订单取消的OrderTracking '.$orderTracking->count().json_encode($orderTracking),null);
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__,__FUNCTION__,'删除订单取消的OrderTracking error'.$orderTracking->count().json_encode($orderTracking).$e->getMessage().$e->getTraceAsString(),null);
+        }
+    }
 }

+ 10 - 35
app/Services/OwnerService.php

@@ -32,16 +32,23 @@ Class OwnerService
             ->where('DESCR_C', 'not like', '%退仓%')
             ->where('CUSTOMER_TYPE', 'OW')
             ->get();
-        $ownerCount = Owner::count();
+        $ownerCount = Owner::query()->count();
         if (count($basCustomers) == $ownerCount) return null;
         foreach ($basCustomers as $basCustomer) {
-            $owner = Owner::where('code', $basCustomer['customerid'])->first();
-            if (!isset($owner))
+            $owner = Owner::query()->where('code', $basCustomer['customerid'])->first();
+            if (!isset($owner)){
                 Owner::query()->create([
                     'code' => $basCustomer['customerid'],
                     'name' => $basCustomer['descr_c'],
                     'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
                 ]);
+            }
+            if ($owner['name']!=$basCustomer['descr_c']){
+                $owner->update([
+                    'code' => $basCustomer['customerid'],
+                    'name' => $basCustomer['descr_c'],
+                ]);
+            }
         }
         $owners = Owner::query()->select('id', 'name')->get();
         return $owners;
@@ -65,36 +72,6 @@ Class OwnerService
         return Owner::query()->firstOrCreate($params,$values);
     }
 
-    //  XXX 代码逻辑有待纠正
-    public function 获取WMS订单列中对应的WAS货主列($WMSOrderHeaders)
-    {
-        $customerIds =  array_unique(data_get($WMSOrderHeaders, '*.customerid'));
-        $owners = Owner::query()->whereIn('code', $customerIds)->get();
-        $codes = data_get($owners, '*.code');
-        $codeDiff = array_diff($customerIds, $codes);
-        $logs = [];
-        $errs = [];
-
-        if (count($codes) > count($customerIds)) {
-            $basCustomer = OracleBasCustomer::query()->whereIn('customerid', $codeDiff)->get();
-            foreach ($basCustomer as $customer) {
-                if($customer['descr_c'] ?? false && $customer['customerid'] && false){
-                    try {
-                        $owner = Owner::query()->create(['name' => $customer['descr_c'], 'code' => $customer['customerid']]);
-                        $owners->push($owner);
-                        array_push($logs, ['info' => '创建「' . json_encode($owner) . '」']);
-                    } catch (\Exception $e) {
-                        array_push($errs, ['info' => '创建「' . json_encode($errs) . '」']);
-                    }
-                }
-            }
-        }
-        if(count($logs)>0)
-            LogService::log(__METHOD__, __FUNCTION__, '批量创建客户「:' . json_encode($logs) . '」', Auth::user()['id']);
-        if(count($errs)>0)
-            LogService::log(__METHOD__, __FUNCTION__, '批量创建客户失败「:' . json_encode($errs) . '」', Auth::user()['id']);
-        return $owners;
-    }
 
     public function 获取订单跟踪的货主(){
         return Owner::query()->with('orderTrackingOwner')->whereHas('orderTrackingOwner',function($query){
@@ -148,8 +125,6 @@ Class OwnerService
         return Owner::query()->insert($fillables);
     }
 
-
-
     public function getAuthorizedOwners(){
         $user = Auth::user();
         return Owner::query()->whereIn('id',$user->getPermittingOwnerIdsAttribute()??[])->get();

+ 19 - 0
app/Services/RejectedService.php

@@ -56,6 +56,7 @@ class RejectedService
             }
             unset($param["is_checked"]);
         }
+
         if (isset($param["is_loaded"])) {
             $is_loaded = $param["is_loaded"];
             if ($is_loaded == 'null') $is_loaded = null;
@@ -78,7 +79,16 @@ class RejectedService
                 $columnQueryRules['logistic_number_return'] = ['timeLimit' => 15];
             }
         }
+        if(isset($param['is_issue'])){
+            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");
+
         return $rejectedBills;
     }
 
@@ -155,4 +165,13 @@ class RejectedService
         }
         return RejectedBill::with('items')->where('logistic_number_return',$ASNHeader->asnrefernce3)->first();
     }
+
+    public function 返回有问题件的ID($rejectedBill)
+    {
+        if(!isset($rejectedBill)){return ;}
+        $rejectedBills =  RejectedBill::query()->with('orderIssue')->whereHas('orderIssue')->get();
+        return $rejectedBills->map(function($rejectedBill){
+            return $rejectedBill->id;
+        });
+    }
 }

+ 3 - 3
database/migrations/2020_07_29_160826_create_order_issues_table.php

@@ -22,15 +22,15 @@ class CreateOrderIssuesTable extends Migration
             $table->string('send_back_number')->nullable()->index()->comment('退回单号');
             $table->enum('is_new_rejecting',['无','有','已处理'])->default('无')->index()->comment('有新退件');
             $table->integer('rejected_bill_id')->index()->nullable()->comment('退回单');
-            $table->enum('rejecting_status', ['无', '未退回', '全部退回', '部分退回', '差异退回', '超量退回', '全部退回'])->default('无')->index()->comment('退回状态');
+            $table->enum('rejecting_status', ['无', '未退回', '全部退回', '部分退回', '差异退回', '超量退回', '全部退回',])->default('无')->index()->comment('退回状态');
             $table->string('order_issue_type_id')->nullable()->comment('问题类别');
             $table->string('result_explain')->nullable()->comment('处理结果说明');
             $table->integer('second_order_id')->nullable()->comment('二次订单号');
             $table->enum('final_status', ['已解决', '待退回', '退回中'])->index()->nullable()->comment('最终状态');
             $table->decimal('logistic_indemnity_money')->index()->nullable()->comment('承运商赔偿金额');
-            $table->enum('logistic_express_remission', ['原单减免', '部分减免', '全部减免'])->index()->nullable()->comment('承运商快递减免');
+            $table->enum('logistic_express_remission', ['原单减免', '补发减免', '全部减免'])->index()->nullable()->comment('承运商快递减免');
             $table->decimal('baoshi_indemnity_money')->index()->nullable()->comment('宝时赔偿金额');
-            $table->enum('baoshi_express_remission', ['原单减免', '部分减免', '全部减免'])->index()->nullable()->comment('宝时快递减免');
+            $table->enum('baoshi_express_remission', ['原单减免', '补发减免', '全部减免'])->index()->nullable()->comment('宝时快递减免');
             $table->integer('user_workgroup_id')->index()->nullable()->comment('事故责任方');
 
 

+ 33 - 0
database/migrations/2020_10_12_092325_change_inventory_account_mission_checked_column_checked_to_five.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeInventoryAccountMissionCheckedColumnCheckedToFive extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        DB::statement("ALTER TABLE inventory_account_missions MODIFY COLUMN checked enum ('是','否','已复核','跳过','确认差异') default '否'");
+        Schema::table('inventory_account_missions', function (Blueprint $table) {
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        DB::statement("ALTER TABLE inventory_account_missions MODIFY COLUMN checked enum ('是','否','已复核','跳过') default '否'");
+        Schema::table('inventory_account_missions', function (Blueprint $table) {
+        });
+    }
+}

+ 34 - 0
database/migrations/2020_10_12_105209_add_order_track_order_code.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddOrderTrackOrderCode extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        //
+        Schema::table('order_trackings', function (Blueprint $table) {
+            $table->string('order_client_code')->index()->comment('订单号')->after('web_order_number');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //
+        Schema::table('order_trackings', function (Blueprint $table) {
+            $table->dropColumn('order_client_code');
+        });
+    }
+}

+ 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');
+        });
+    }
+}

+ 1 - 1
package-lock.json

@@ -8763,7 +8763,7 @@
         },
         "socket.io-client": {
             "version": "2.3.0",
-            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz",
+            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-client%2Fdownload%2Fsocket.io-client-2.3.0.tgz",
             "integrity": "sha1-FNW6LgC5vNFFrkQ6uWs/hsvMG7Q=",
             "requires": {
                 "backo2": "1.0.2",

Разлика између датотеке није приказан због своје велике величине
+ 531 - 108
public/css/app.css


Разлика између датотеке није приказан због своје велике величине
+ 21264 - 23
public/js/app.js


+ 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));

+ 15 - 0
resources/sass/layout.scss

@@ -109,6 +109,21 @@ table,table.table-striped tbody{
             background: #fdf3db;
         }
     }
+    tr.focusing td,{
+        background: #d5aba1;
+        &.td-warm{
+            background: rgb(231, 174, 128);
+        }
+        &.td-cool{
+            background: #5f8fcd;
+        }
+        &.td-helpful{
+            background: #69cb9c;
+        }
+        &.td-yellow{
+            background: #d9c290;
+        }
+    }
 }
 .row-even{
     background-color: rgba(0, 0, 0, .05)

+ 3 - 3
resources/views/inventory/statement/changeInventory.blade.php

@@ -53,9 +53,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue=new Vue({
             el:"#list",

+ 3 - 3
resources/views/inventory/statement/dailyLog.blade.php

@@ -81,9 +81,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#container",

+ 3 - 3
resources/views/inventory/statement/inventoryCompare.blade.php

@@ -133,9 +133,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#container",

+ 284 - 102
resources/views/inventory/stockInventory/inventoryMission.blade.php

@@ -39,6 +39,12 @@
             <button class="btn btn-sm" @click="盲收()" :class="listMode?'btn-dark':'btn-outline-dark'" v-if="!listMode&&!blindReceive">盲收</button>
                 <button class="btn btn-sm" @click="正常盘点()" :class="blindReceive?'btn-dark':'btn-outline-dark'" v-if="blindReceive">正常盘点</button>
             </span>
+            <span>
+                <button class="btn btn-outline-dark btn-sm form-control-sm tooltipTarget"
+                        @click="批量跳过或确认差异()"  title="勾选指定盘点记录行,进行批量跳过或批量确认差异">
+                    批量跳过
+                </button>
+            </span>
 
 
             <span class="form-group  mb-5">
@@ -85,12 +91,12 @@
         </span>
         </div>
 
-        <div v-if="blindReceive" class="container">
+        <div v-if="blindReceive">
             <audio src="{{asset('sound/warning_otherBarcode.mp3')}}" controls="controls" preload id="soundWarning" hidden>
             </audio>
             <audio src="{{asset('sound/ding.mp3')}}" controls="controls" preload id="soundDing" hidden>
             </audio>
-            <div class="row mt-2">
+            <div class="row mt-2 mb-2 rounded" style="border:solid 3px #999999;">
                 <div class="col-12" id="scanColumn">
                     <div class="card" :class="borderByMode">
                         <div class="card-body">
@@ -121,7 +127,7 @@
                                         <div class="btn btn-sm btn-outline-danger"
                                              @click="changeToScanInputBarcode" v-if="isManualInputtingBarcode">扫描输入</div>
                                     </div>
-                                    <input type="text" id="barcode" class="form-control" :disabled="status.barcodeDisable" placeholder="扫入条码" @focusin="focusOutDocument" @focusout="focusDocument" v-model="inputting.barcode">
+                                    <input type="text" id="barcode" class="form-control" :disabled="status.barcodeDisable" placeholder="扫入条码" @focusin="focusOutDocument" @focusout="focusDocument" v-model="inputting.barcode" autocomplete="off">
                                     <div v-if="inputMode=='regular'">
                                         <div class="card-title">
                                             生产日期:
@@ -144,13 +150,13 @@
                                                v-model="inputting.amount" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter"
                                                style='height: 40px;font-size: 1.6em;color:blue;font-weight: bolder;padding: 3px;text-align: center'>
                                     </div>
-{{--                                    <div class="card-title">--}}
-{{--                                        格口号:--}}
-{{--                                    </div>--}}
-{{--                                    <input type="number" id="bin" class="form-control mt-n2 mb-2"--}}
-{{--                                           v-model="inputting.bin"--}}
-{{--                                           :disabled="status.binDisable" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter"--}}
-{{--                                           style='height: 80px;font-size: 5em;color:red;font-weight: bolder;padding: 3px;text-align: center'>--}}
+                                    {{--                                    <div class="card-title">--}}
+                                    {{--                                        格口号:--}}
+                                    {{--                                    </div>--}}
+                                    {{--                                    <input type="number" id="bin" class="form-control mt-n2 mb-2"--}}
+                                    {{--                                           v-model="inputting.bin"--}}
+                                    {{--                                           :disabled="status.binDisable" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter"--}}
+                                    {{--                                           style='height: 80px;font-size: 5em;color:red;font-weight: bolder;padding: 3px;text-align: center'>--}}
                                     <div v-if="inputMode=='regular'">
                                         <div class="card-title">
                                             批次号:
@@ -168,7 +174,7 @@
                             <hr>
                             <table class="table table-sm  table-striped" v-if="goodses.length>0">
                                 <tr>
-{{--                                    <th>隔口号</th>--}}
+                                    {{--                                    <th>隔口号</th>--}}
                                     <th>数量</th>
                                     <th>条码</th>
                                     <th>生产日期</th>
@@ -177,7 +183,7 @@
                                     <th>操作</th>
                                 </tr>
                                 <tr v-for="goods in goodses">
-{{--                                    <td>@{{ goods.bin }}</td>--}}
+                                    {{--                                    <td>@{{ goods.bin }}</td>--}}
                                     <td>@{{ goods.amount }}</td>
                                     <td>@{{ goods.barcode }}</td>
                                     <td>@{{ goods.produce_date }}</td>
@@ -193,16 +199,16 @@
                 </div>
             </div>
         </div>
-        <div v-if="!blindReceive">
         <form id="form">
-            <div class="mt-3 form-inline " v-if="!listMode" :class="inventory.status=='盘点中' ||inventory.status=='待盘点'?'row-cols-3':'row-cols-5'">
+            <div v-if="!blindReceive">
+                <div class="mt-3 form-inline " v-if="!listMode" :class="inventory.status=='盘点中' ||inventory.status=='待盘点'?'row-cols-3':'row-cols-5'">
         <span class="form-group">
             <label for="location" class="text-secondary font-weight-bold">请输库位</label>
             <input id="locationInput"  @keypress="locationPress($event)"
                    @change="locationChange($event)"
                    name="location" type="text" class="form-control  input"  autocomplete="off" value="@if(old('location')){{old('location')}}@endif">
         </span>
-                <span class="form-group ml-4">
+                    <span class="form-group ml-4">
             <label for="barcode" class="text-secondary font-weight-bold">请输产品条码</label>
                 <input id="barcodeInput" name="barcode"  @keypress="barcodePress($event)"
                        @change="barcodeChange($event)"
@@ -210,17 +216,18 @@
 
         </span>
 
-                <span class="form-group ml-4" v-if="dataExtraStatus.addingNew" id="countBlock">
+                    <span class="form-group ml-4" v-if="dataExtraStatus.addingNew" id="countBlock">
                         <label for="count" class="text-secondary font-weight-bold">请输盘点数</label>
                         <input type="text" id="amountInput"  @keypress="amountPress($event)"
                                name="count" class="form-control input" value="@if(old('count')){{old('count')}}@endif"  autocomplete="off">
                     </span>
+                </div>
             </div>
             <!--相同库位和条码 pc端-->
 
             <div class="row d-none d-xl-block">
                 <div class="col-12 col-md-12 col-sm-12 showBlueTable d-none">
-                    <table class="table table-sm table-bordered table-info mt-2" v-if="!listMode" id="blueTablePc">
+                    <table class="table table-sm table-bordered table-info mt-2" {{--v-if="!listMode"--}} :class="!listMode?'':'d-none'" id="blueTablePc">
                         <tr>
                             <td class="font-weight-bold">输入盘点数</td>
                             <td>操作</td>
@@ -262,7 +269,7 @@
             </div>
             <!--相同库位和条码 移动端-->
             <div class="showBlueTable d-none">
-                <table class="table table-striped table-sm table-bordered table-hover p-0 d-table  d-xl-none mt-2" style="background: rgb(179, 214, 245);" v-if="!listMode"  id="blueTable">
+                <table class="table table-striped table-sm table-bordered table-hover p-0 d-xl-none mt-2" style="background: rgb(179, 214, 245);" {{--v-if="!listMode"--}} :class="!listMode?'':'d-none'" id="blueTable">
                     <tr class="selectingRow移动端" id="blueTr">
                         <td style="filter:grayscale(30%); ">
                             <div class="mt-3">
@@ -305,13 +312,14 @@
             </label>
             <table class="table table-sm table-bordered d-none text-nowrap " id="headerRoll"></table>
             <table class="table table-sm table-striped d-none d-xl-block p-0 text-nowrap table-bordered"
-                   id="headerParent">
+                   id="headerParent" ref="boxPc">
                 <tr class="p-0" id="header"></tr>
-                <tr v-for="(inventoryMission,i) in inventoryMissions"
-                    :style="{'opacity': inventoryMission.mark==='跳过'?'0.7':''}" :class="[
+                <tr {{--v-for="(inventoryMission,i) in inventoryMissions"--}} v-for="(inventoryMission, i) in 显示记录列" :key="i"
+                    :style="{'opacity': inventoryMission.mark==='跳过'?'0.7':'','opacity': inventoryMission.mark==='确认差异'?'0.7':''}" :class="[
                     inventoryMission.mark==='已复盘有差异'?'td-cool':'',
                     inventoryMission.mark==='已复盘无差异'?'td-cool text-muted':'',
                     inventoryMission.mark==='未复盘有差异'?'td-warm font-weight-bold':'',
+                    inventoryMission.mark==='确认差异'?'td-warm font-weight-bold':'',
                     inventoryMission.mark==='无差异'?'text-muted':'',
                     inventoryMission.mark==='未盘'?'td-yellow':'',
                     inventoryMission.mark==='跳过'?'text-muted':'',
@@ -323,11 +331,11 @@
                     <td>@{{ i+1 }}</td>
                     <td>@{{ inventoryMission.location }}</td>
                     <td v-if="inventoryMission.commodity"><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.commodity.name }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.commodity.name }}</span>
                     </td>
                     <td>
                         <span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
                         <span
                             v-if="inventoryMission.commodity_barcodes && inventoryMission.commodity_barcodes.length>0">
                             <span v-if="inventoryMission.commodity_barcodes.length==1">
@@ -342,22 +350,22 @@
                     </td>
 
                     <td v-if="inventoryMission.commodity"><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.commodity.sku }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.commodity.sku }}</span>
                     </td>
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.produced_at }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.produced_at }}</span>
                     </td>
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.valid_at }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.valid_at }}</span>
                     </td>
                     <td class="text-muted"><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.batch_number }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.batch_number }}</span>
                     </td>
 
                     <td v-if="inventoryMission.stockInventoryPersons" class="text-muted"
                         :rowspan="inventoryMission.is_multi_row?2:''">
                         <span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
                         <a href="#" v-if="inventoryMission.stockInventoryPersons.length>0" class="dropdown-toggle"
                            data-toggle="dropdown">
                             @{{ inventoryMission.stockInventoryPersons[0].mark }}<b class="caret"></b>
@@ -380,10 +388,10 @@
                     </td>
 
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.erp_type_position }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.erp_type_position }}</span>
                     </td>
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
                         <span v-if="listMode">@{{ inventoryMission.quality }}</span>
                         <select v-else class="form-control-sm" name="quality" id="quality"
                                 v-model="inventoryMission.quality"
@@ -394,28 +402,31 @@
                         </span>
                     </td>
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.stored_amount }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.stored_amount }}</span>
                     </td>
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.valid_amount }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.valid_amount }}</span>
                     </td>
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.verified_amount }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.verified_amount }}
+                            <span v-if="inventoryMission.checked==='跳过'" class="badge badge-pill badge-secondary">跳过</span></span>
                     </td>
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.re_checked_amount }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.re_checked_amount }}</span>
                     </td>
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.difference_amount }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.difference_amount }}</span>
                     </td>
                     <td><span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.occupied_amount }}</span>
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.occupied_amount }}</span>
                     </td>
                     @can('库存管理-盘点')
                         <td>
-{{--                            <span class="btn  btn-sm btn-outline-danger" @click="删除盘点记录(inventoryMission.id,inventory.id,inventoryMission.commodity.name)">删除</span>--}}
+                            {{--                            <span class="btn  btn-sm btn-outline-danger" @click="删除盘点记录(inventoryMission.id,inventory.id,inventoryMission.commodity.name)">删除</span>--}}
                             <span class="btn  btn-sm btn-outline-secondary" v-if="inventoryMission.checked==='否'"
                                   @click="跳过盘点记录(inventoryMission.id,inventory.id,inventoryMission.commodity.name)">跳过</span>
+                            <span class="btn  btn-sm btn-outline-secondary" v-if="inventoryMission.mark==='已复盘有差异'||inventoryMission.mark==='未复盘有差异'"
+                                  @click="确认盘点差异(inventoryMission.id,inventory.id,inventoryMission.commodity.name)">跳过</span>
                             <span class="btn  btn-sm btn-outline-secondary"
                                   v-if="inventory.type=='动盘'&& inventoryMission.mark=='未盘' &&!listMode"
                                   @click="选中盘点起始位置(inventoryMission.id,inventoryMission.location)">以此为起点</span>
@@ -426,14 +437,15 @@
         </div>
         <!--盘点记录移动端-->
         <table id="listOnPad" class="table table-striped table-sm table-bordered table-hover p-0 d-table  d-xl-none"
-               style="background: rgb(255, 255, 255);">
+               style="background: rgb(255, 255, 255);" ref="box">
             <tbody>
-            <tr v-for="(inventoryMission,i) in inventoryMissions"
-                :style="{'opacity': inventoryMission.mark==='跳过'?'0.7':''}"
+            <tr {{--v-for="(inventoryMission,i) in 显示记录列"--}} v-for="(inventoryMission, i) in 显示记录列" :key="i"
+                :style="{'opacity': inventoryMission.mark==='跳过'?'0.7':'','opacity': inventoryMission.mark==='确认差异'?'0.7':''}"
                 :class="[
                     inventoryMission.mark==='已复盘有差异'?'td-cool':'',
                     inventoryMission.mark==='已复盘无差异'?'td-cool text-muted':'',
                     inventoryMission.mark==='未复盘有差异'?'td-warm font-weight-bold':'',
+                    inventoryMission.mark==='确认差异'?'td-warm font-weight-bold':'',
                     inventoryMission.mark==='无差异'?'text-muted':'',
                     inventoryMission.mark==='未盘'?'td-yellow':'',
                     inventoryMission.mark==='跳过'?'text-muted':'',
@@ -447,12 +459,12 @@
                                     style="color:#af7651">
                                     @{{ inventoryMission.location }}</span></span>
                             <span class="mr-3 text-nowrap"
-                                  v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode"><span
+                                  v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode"><span
                                     class="font-weight-bold">产品名称:</span><span style="color:#af7651"
                                                                                v-if="inventoryMission.commodity">
                                     @{{ inventoryMission.commodity.name }}</span></span>
                             <span class="mr-3 text-nowrap"
-                                  v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
+                                  v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
                                 <span class="font-weight-bold">质量状态:</span>
                                 <span v-if="listMode">@{{ inventoryMission.quality }}</span>
                         <select v-else class="form-control-sm" name="quality" id="quality"
@@ -463,11 +475,11 @@
                          </select>
                             </span>
                             <span class="mr-3 text-nowrap"
-                                  v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
+                                  v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
                                 <span class="font-weight-bold">产品条码:</span>
 
                         <span
-                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
+                            v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">
                         <span
                             v-if="inventoryMission.commodity_barcodes && inventoryMission.commodity_barcodes.length>0">
                             <span v-if="inventoryMission.commodity_barcodes.length==1">
@@ -497,6 +509,8 @@
 {{--                                <span class="btn  btn-sm btn-outline-danger" @click="删除盘点记录(inventoryMission.id,inventory.id,inventoryMission.commodity.name)">删除</span>--}}
                                 <span class="btn  btn-sm btn-outline-secondary" v-if="inventoryMission.checked==='否'"
                                       @click="跳过盘点记录(inventoryMission.id,inventory.id,inventoryMission.commodity.name)">跳过</span>
+                                     <span class="btn  btn-sm btn-outline-secondary" v-if="inventoryMission.mark==='已复盘有差异'||inventoryMission.mark==='未复盘有差异'"
+                                           @click="确认盘点差异(inventoryMission.id,inventory.id,inventoryMission.commodity.name)">跳过</span>
                                     <span class="btn  btn-sm btn-outline-secondary"
                                           v-if="inventory.type=='动盘'&& inventoryMission.mark=='未盘' &&!listMode"
                                           @click="选中盘点起始位置(inventoryMission.id,inventoryMission.location)">以此为起点</span>
@@ -560,15 +574,14 @@
                 </div>
             </div>
         </div>
-        </div>
     </div>
 
 
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let hideHeaderTitle = function () {
             let $listOnPad = $('#listOnPad');
@@ -657,6 +670,7 @@
                 listMode:false,
                 blindReceive:false,
                 分割位置id:null,
+                显示记录列:[],
 
                 focusing:'document',
                 commitButtonVisible:false,
@@ -672,9 +686,12 @@
                     scanEndInputted:false,binDisable:false,barcodeDisable:true,amountDisable:false,
                 },
                 goodses:[],//{barcode,amount,bin,produce_date,valid_date,batch_number}
+                // 加载后盒子底部位置:'',
+                // 加载前盒子底部位置:'',
             },
             beforeMount: function () {
                 this.重排序并标记全列表类型();
+                this.加载下方数据并置空上方数据()//初始化先调用一次
             },
             watch: {
                 checkData: {
@@ -690,6 +707,9 @@
                     deep: true
                 }
             },
+            destroyed() {
+                window.removeEventListener('scroll', this.lazy)
+            },
             updated: function () {
                 $barcodeInput=$('#barcodeInput');
                 $locationInput=$('#locationInput');
@@ -697,6 +717,8 @@
             },
             mounted: function () {
                 let _this = this;
+                _this.lazy();
+                window.addEventListener('scroll', this.lazy);
                 (function 显示渲染后页面(){
                     $('#loadingPage').remove();
                     $('#list').removeClass('d-none');
@@ -742,6 +764,7 @@
                     {name: '跳过', value: '操作', neglect: true},
                 ];
                 setTimeout(function () {
+                    let _this=this;
                     let header = new Header({
                         el: "#header",
                         column: column,
@@ -755,6 +778,92 @@
                 _this.建立记录索引();
             },
             methods:{
+                lazy(){
+                    //可视区域高度(浏览器页面的高度)
+                    let height=window.innerHeight;
+                    //滚动区域高度
+                    let scrollHeight = document.documentElement.scrollTop || document.body.scrollTop;
+                    let _this=this;
+                    // 可视区域+滚动条距离顶部位置 = 浏览器窗口底部的位置
+                    const count = height + scrollHeight;
+                    //懒加载盒子高度+懒加载盒子距离顶部位置=计算出盒子底部的距离
+                    const box_bottom = _this.$refs.box.offsetHeight + _this.$refs.box.offsetTop-500;//移动
+                    const box_bottomPc = _this.$refs.boxPc.offsetHeight + _this.$refs.boxPc.offsetTop;//pc
+                    if (box_bottom===-500&&count >= box_bottomPc) {//pc端下划加载
+                        if (_this.显示记录列.length < _this.inventoryMissions.length) {
+                            _this.加载下方数据并置空上方数据();
+                        }
+                    }
+                    if (box_bottomPc===0&&count >= box_bottom) {//移动端下划加载
+                        if (_this.显示记录列.length < _this.inventoryMissions.length) {
+                            _this.加载下方数据并置空上方数据()
+                        }
+                    }
+                    // 窗口高,滚动条位置,页面长度,追加数据长度
+                    // 滚动条位置+窗口高度=当前显示中的页面底部Y
+                    // 页面长度-当前显示中的页面底部Y=(隐藏的高度!!!!+行高)->求出隐藏了多少行
+                    // 隐藏的高度- (func(去掉10行)=去掉后的隐藏高度)=10行去掉了高
+                    // 10行去掉了高/10=每行实际多高
+                    // 隐藏的高度/每行实际多高=去掉多少行可以把下方都清理干净
+                },
+                加载上方数据(){
+                    //1.找到显示中第一条ID
+                    let _this=this;
+                    let 去除空对象的显示数据列=[];
+                    let 空对象数据列=[];
+                    _this.显示记录列.forEach(function (inventoryMission) {
+                        if (!($.isEmptyObject(inventoryMission))){
+                            去除空对象的显示数据列.push(inventoryMission);
+                        }
+                        if (($.isEmptyObject(inventoryMission))){
+                            空对象数据列.push(inventoryMission);
+                        }
+                    })
+                    let 初条显示数据=去除空对象的显示数据列[0];
+                    let 末条显示数据=去除空对象的显示数据列[去除空对象的显示数据列.length-1];
+                    let 空对象条数=空对象数据列.length;
+                    //_this.清理下方数据(去除空对象的显示数据列);
+                    console.log(去除空对象的显示数据列)
+                    console.log(空对象条数)
+                    //console.log(_this.显示记录列)
+                    //2.以1的ID从总列表网上倒退找到N条(N=10)
+                    //2.5, 计算有空行到第几行
+                    //3.将显示中的列表从头清理N行,的2.5的结果下标后插入2的结果
+                },
+                // 清理上方数据(){
+                //
+                // },
+                // 清理下方数据(去除空对象的显示数据列){
+                //     let _this=this;
+                //     let index;
+                //     _this.显示记录列.forEach(function (inventoryMission,i) {
+                //         if (inventoryMission.id===去除空对象的显示数据列[去除空对象的显示数据列.length-6].id) index=i;
+                //         if (i>index) _this.显示记录列.splice(i,1);
+                //     })
+                // },
+                加载下方数据并置空上方数据(){
+                    let _this=this;
+                    const count = _this.显示记录列.length;
+                    if (count > 30) {
+                        _this.inventoryMissions.map((inventoryMission, index) => {
+                            if (_this.显示记录列.length < 5 + count) {
+                                if (_this.显示记录列.length < _this.inventoryMissions.length) {
+                                    //_this.显示记录列.splice(_this.显示记录列.length-30,1);
+                                    //_this.显示记录列.unshift({});
+                                    _this.显示记录列.push(_this.inventoryMissions[_this.显示记录列.length]);
+                                }
+                            }
+                        })
+                    } else {
+                        _this.inventoryMissions.map((inventoryMission, index) => {
+                            if (_this.显示记录列.length < 25 + count) {
+                                if (_this.显示记录列.length < _this.inventoryMissions.length) {
+                                    _this.显示记录列.push(_this.inventoryMissions[_this.显示记录列.length])
+                                }
+                            }
+                        })
+                    }
+                },
                 cloneBlueTrDom($appointInventoryList) {
                     for(let i =0;i<$appointInventoryList.length;i++){
                         let newDom= $prototype_.clone();
@@ -861,6 +970,7 @@
                     _this.selectingId=id;
                     if(e.key==='Enter'){
                         this.放置焦点光标至正确位置();
+
                         let re=true;
                         _this.提交新增并盘点().then(function(result){
                             if(!result){
@@ -1034,10 +1144,9 @@
                                         $("#lastStockInventoryRecord").modal('show');
                                         return;
                                     }
-                                    _this.盘点(选定盘点记录id,库位,条码,_this.inventory.id,盘点数);
-                                    _this.清空指定盘点记录列();
                                 }
-                                //
+                                _this.盘点(选定盘点记录id,库位,条码,_this.inventory.id,盘点数);
+                                _this.清空指定盘点记录列();
                             }
                         })
                     });
@@ -1087,6 +1196,7 @@
                     _this.已复盘有差异列 = [];
                     _this.未复盘有差异列 = [];
                     _this.已复盘无差异列 = [];
+                    _this.确认差异列=[];
                     _this.无差异列 = [];
                     _this.未盘列 = [];
                     _this.跳过列 = [];
@@ -1113,6 +1223,10 @@
                                 _this.无差异列.push(mission);
                                 mission.mark = '无差异';
                                 return;
+                            case '确认差异':
+                                _this.确认差异列.push(mission);
+                                mission.mark = '确认差异';
+                                return;
                             case '否':
                                 _this.未盘列.push(mission);
                                 mission.mark = '未盘';
@@ -1127,20 +1241,20 @@
                     _this.未复盘有差异列 = _this.按库位排序_且合并SKU一起(_this.未复盘有差异列);
                     _this.已复盘无差异列 = _this.按库位排序_且合并SKU一起(_this.已复盘无差异列);
                     _this.无差异列 = _this.按库位排序_且合并SKU一起(_this.无差异列);
-
                     _this.未盘列 = _this.按库位排序_且合并SKU一起(_this.未盘列);
                     if (_this.未盘列.length>0&&!_this.分割位置id) _this.分割位置id = _this.未盘列[0].id;
                     _this.分割位置id = _this.更新分割位置(_this.未盘分隔列2, _this.分割位置id);
                     _this.未盘分隔列 = _this.分隔_基于分割位置(_this.未盘列, _this.分割位置id);
                     _this.未盘分隔列1 = _this.按库位排序_且合并SKU一起(_this.未盘分隔列[0]);
                     _this.未盘分隔列2 = _this.按库位排序_且合并SKU一起(_this.未盘分隔列[1]);
-
+                    _this.确认差异列 = _this.按库位排序_且合并SKU一起(_this.确认差异列);
                     _this.跳过列 = _this.按库位排序_且合并SKU一起(_this.跳过列);
                     _this.inventoryMissions = [];
                     _this.重推入(_this.inventoryMissions, _this.已复盘有差异列);
                     _this.重推入(_this.inventoryMissions, _this.未复盘有差异列);
                     _this.重推入(_this.inventoryMissions, _this.未盘分隔列2);
                     _this.重推入(_this.inventoryMissions, _this.未盘分隔列1);
+                    _this.重推入(_this.inventoryMissions, _this.确认差异列);
                     _this.重推入(_this.inventoryMissions, _this.已复盘无差异列);
                     _this.重推入(_this.inventoryMissions, _this.无差异列);
                     _this.重推入(_this.inventoryMissions, _this.跳过列);
@@ -1260,9 +1374,7 @@
                 },
                 跳过盘点记录(inventoryAccountMissionId, inventoryAccountId, name) {
                     let _this = this;
-                    if (!confirm('确定要跳过商品为:“' + name + '”的盘点记录吗?')) {
-                        return ;
-                    }
+                    if (!confirm('确定要跳过商品为:“' + name + '”的盘点记录吗?')) {return ;}
                     let url = '{{url('inventory/跳过盘点记录')}}';
                     axios.post(url, {
                         inventoryAccountMissionId: inventoryAccountMissionId,
@@ -1281,7 +1393,7 @@
                                     return true
                                 });
                             }
-                            _this.重排序并标记全列表类型(_this.inventoryMissions);
+                            _this.重排序并显示();
                             tempTip.setDuration(3000);
                             tempTip.showSuccess('盘点记录:' + inventoryAccountMissionId + '跳过盘点成功!');
                         }).catch(function (err) {
@@ -1289,8 +1401,69 @@
                         tempTip.show('跳过盘点记录失败,网络链接错误!' + err);
                     });
                 },
-                完结盘点任务(id, owner_name, type) {
+                确认盘点差异(inventoryAccountMissionId, inventoryAccountId, name) {
+                    let _this = this;
+                    if (!confirm('确定提交商品为:“' + name + '”的盘点差异吗?')) {return ;}
+                    let url = '{{url('inventory/确认盘点差异')}}';
+                    axios.post(url, {
+                        inventoryAccountMissionId: inventoryAccountMissionId,
+                        inventoryAccountId: inventoryAccountId
+                    }).then(
+                        function (response) {
+                            if (!response.data.success) {
+                                tempTip.setDuration(3000);
+                                tempTip.show('盘点单号:' + inventoryAccountMissionId + '提交盘点差异失败!' + response.data.data);
+                            } else {
+                                _this.inventoryMissions.every(function (inventoryAccountMission) {
+                                    if (inventoryAccountMission.id === inventoryAccountMissionId) {
+                                        inventoryAccountMission.checked = response.data.inventoryAccountMission.checked;
+                                        return false;
+                                    }
+                                    return true
+                                });
+                            }
+                            _this.重排序并显示();
+                            tempTip.setDuration(3000);
+                            tempTip.showSuccess('盘点记录:' + inventoryAccountMissionId + '提交盘点差异成功!');
+                        }).catch(function (err) {
+                        tempTip.setDuration(3000);
+                        tempTip.show('提交盘点差异记录失败,网络链接错误!' + err);
+                    });
+                },
+                批量跳过或确认差异(){
                     let _this = this;
+                    if (!confirm('确定对勾选内容进行批量操作吗?')) {return ;}
+                    let url = '{{url('inventory/批量跳过或确认差异')}}';
+                    axios.post(url, {checkData: _this.checkData}).then(
+                        function (response) {
+                            if (!response.data.success) {
+                                tempTip.setDuration(3000);
+                                tempTip.show('批量操作失败!' + response.data.data);
+                            } else {
+                                response.data.inventoryAccountMissions.forEach(function (mission) {
+                                    _this.库位索引_记录[mission.location].forEach(function(missionInIndex){
+                                        if(parseInt(missionInIndex.id)===parseInt(mission.id)){
+                                            missionInIndex.checked=mission.checked;
+                                        }
+                                    });
+                                });
+                            }
+                            _this.重排序并显示();
+                            _this.清空checkbox();
+                            tempTip.setDuration(3000);
+                            tempTip.showSuccess('批量操作成功!');
+                        }).catch(function (err) {
+                        tempTip.setDuration(3000);
+                        tempTip.show('批量操作失败,网络链接错误!' + err);
+                    });
+                },
+                重排序并显示(){
+                    let _this=this;
+                    _this.显示记录列=[];
+                    _this.重排序并标记全列表类型(_this.inventoryMissions);
+                    _this.加载下方数据并置空上方数据();
+                },
+                完结盘点任务(id, owner_name, type) {
                     if (!confirm('确定完结货主为:“' + owner_name + '”的“' + type + '”任务吗?')) {
                         return;
                     }
@@ -1442,6 +1615,9 @@
                         this.inputs()[key]='';
                     }
                 },
+                清空checkbox(){
+                    this.checkData=[];
+                },
                 不覆盖() {
                     let _this = this;
                     _this.清空指定盘点记录列();
@@ -1468,11 +1644,11 @@
                     _this.清空指定盘点记录列();
                     let url = '{{url('inventory/盘点选中任务')}}';
                     axios.post(url, {id:id,count:count,inventoryId:inventoryId,produced_at:produced_at,valid_at:valid_at,batch_number:batch_number}).then(function (response) {
-                            if (!response.data.success) {
-                                tempTip.setDuration(2000);
-                                tempTip.show('盘点失败!' + '   ' + response.data.data);
-                                return;
-                            }else {
+                        if (!response.data.success) {
+                            tempTip.setDuration(2000);
+                            tempTip.show('盘点失败!' + '   ' + response.data.data);
+                            return;
+                        }else {
                             if (_this.inventory.id === response.data.inventory.id) {
                                 _this.inventory.processed = response.data.inventory.processed;
                                 _this.inventory.surplus = response.data.inventory.surplus;
@@ -1513,15 +1689,15 @@
                                         return false;
                                     }
                                     return true;
-                                 })
-                                }
+                                })
+                            }
                             _this.重排序并标记全列表类型(_this.inventoryMissions);
                             _this.清空inputs();
                             _this.清空指定盘点记录列();
                             tempTip.setDuration(3000);
                             tempTip.showSuccess('盘点成功!');
-                            }
-                        }).catch(function (err) {
+                        }
+                    }).catch(function (err) {
                         tempTip.setDuration(2000);
                         tempTip.show('盘点失败!' + '网络错误' + err);
                     })
@@ -1553,20 +1729,20 @@
                             delete inventoryMission.stockInventoryPersons;
                             delete inventoryMission.commodity;
                         });
-                        console.log(data);
                         let data = JSON.stringify(this.checkData);
-                        excelExport(checkAllSign,data,url,this.sum,token);
+                        //excelExport(checkAllSign,data,url,this.sum,token);
                     }
                 },
                 //盲收
                 盲收(){
-                  let _this=this;
-                  _this.blindReceive=true;
-                  _this.scanListening();
+                    let _this=this;
+                    _this.blindReceive=true;
+                    _this.scanListening();
                 },
                 正常盘点(){
-                  let _this=this;
-                  _this.blindReceive=false;
+                    let _this=this;
+                    _this.blindReceive=false;
+                    $(document).off('keypress');
                 },
                 changeToManualInputAmount:function(){
                     this.status.amountDisable=false;
@@ -1634,6 +1810,8 @@
                                 case 'increasing': data.commitGoodsOnIncreasingMode();break;
                                 case 'multiIncreasing': data.commitGoodsOnMultiIncreasingMode();break;
                             }
+                            //$('#amount').focus();
+                            //$(document).off('keypress');
                         }
                     });
                 },
@@ -1654,13 +1832,13 @@
                             data.focusOutDocument();
                             data.alertVibrate();
                             window.tempTip.setInputType('number');
-                                data.inputting.amount=1;
-                                data.goodses.unshift(JSON.parse(JSON.stringify(data.inputting)));
-                                data.status.binDisable=true;
-                                window.tempTip.setDuration(500);
-                                window.tempTip.showSuccess('保存成功');
-                                data.focusDocument();
-                                data.audioDing();
+                            data.inputting.amount=1;
+                            data.goodses.unshift(JSON.parse(JSON.stringify(data.inputting)));
+                            data.status.binDisable=true;
+                            window.tempTip.setDuration(500);
+                            window.tempTip.showSuccess('保存成功');
+                            data.focusDocument();
+                            data.audioDing();
                             // window.tempTip.inputVal('该商品第一件递增请输入隔口号:',function(bin){
                             //     if(bin===''){
                             //         window.tempTip.setDuration(1500);
@@ -1707,13 +1885,13 @@
                         data.focusOutDocument();
                         data.alertVibrate();
                         window.tempTip.setInputType('number');
-                            data.inputting.amount=1;
-                            data.goodses.unshift(JSON.parse(JSON.stringify(data.inputting)));
-                            data.status.binDisable=true;
-                            window.tempTip.setDuration(500);
-                            window.tempTip.showSuccess('保存成功');
-                            data.focusDocument();
-                            data.audioDing();
+                        data.inputting.amount=1;
+                        data.goodses.unshift(JSON.parse(JSON.stringify(data.inputting)));
+                        data.status.binDisable=true;
+                        window.tempTip.setDuration(500);
+                        window.tempTip.showSuccess('保存成功');
+                        data.focusDocument();
+                        data.audioDing();
                         // window.tempTip.inputVal('该商品第一件递增请输入隔口号:',function(bin){
                         //     if(bin===''){
                         //         window.tempTip.setDuration(1500);
@@ -1801,7 +1979,7 @@
                     window.tempTip.setDuration(3500);
                     if(!data.inputting.barcode){window.tempTip.show('请扫入条码');return;}
                     else if(!data.inputting.amount){window.tempTip.show('请输入数量');return;}
-                    else if(!data.inputting.bin){window.tempTip.show('请输入隔口号');return;}
+                    //else if(!data.inputting.bin){window.tempTip.show('请输入隔口号');return;}
                     data.recordOrPlusGoods();
                     window.tempTip.setDuration(1500);
                     window.tempTip.showSuccess('成功提交:' + data.inputting.barcode);
@@ -1850,8 +2028,13 @@
                 },
                 showCommitButton: function () {
                     let data = this;
-                    if(data.inputting.barcode && data.inputting.amount && data.inputting.bin){
+                    if(data.inputting.barcode && data.inputting.amount /*&& data.inputting.bin*/){
                         data.commitButtonVisible=true;
+                    }else{
+                        if (this.inputMode==='regular' && this.status.barcodeDisable && !this.inputting.amount && this.inputting.barcode){
+                            this.focusing = '';
+                            document.getElementById('amount').focus();
+                        }
                     }
                 },
                 submitStockInventory: function () {
@@ -1882,7 +2065,7 @@
                                         if (response.data.inventoryMissions.length >0) {
                                             response.data.inventoryMissions.forEach(function (mission) {
                                                 let isToEdit=false;
-                                               data.inventoryMissions.every(function (inventoryMission){
+                                                data.inventoryMissions.every(function (inventoryMission){
                                                     if (parseInt(inventoryMission.id) === parseInt(mission.id)){
                                                         isToEdit=true;
                                                         inventoryMission.checked = mission.checked;
@@ -1909,7 +2092,6 @@
                                     }else{
                                         window.tempTip.setDuration(1500);
                                         window.tempTip.show('盲收盘点失败:'+response.data.fail_info);
-                                        console.log(response);
                                         data.focusDocument();
                                         data.alertVibrate()
                                     }
@@ -1936,17 +2118,17 @@
 
 
 
-                // 单条排序并着色(inventoryMission){
-                //     let _this=this;
-                //     let 所在临时分类列=[];
-                //     switch(inventoryMission.mark){
-                //         case '已复盘有差异':所在临时分类列=_this.已复盘有差异列;break;
-                //         case '已复盘无差异':所在临时分类列=_this.已复盘无差异列;break;
-                //         case '未复盘有差异':所在临时分类列=_this.未复盘有差异列;break;
-                //         case '无差异':所在临时分类列=_this.无差异列;break;
-                //         case '未盘':所在临时分类列=_this.未盘列;break;
-                //     }
-                // },
+            // 单条排序并着色(inventoryMission){
+            //     let _this=this;
+            //     let 所在临时分类列=[];
+            //     switch(inventoryMission.mark){
+            //         case '已复盘有差异':所在临时分类列=_this.已复盘有差异列;break;
+            //         case '已复盘无差异':所在临时分类列=_this.已复盘无差异列;break;
+            //         case '未复盘有差异':所在临时分类列=_this.未复盘有差异列;break;
+            //         case '无差异':所在临时分类列=_this.无差异列;break;
+            //         case '未盘':所在临时分类列=_this.未盘列;break;
+            //     }
+            // },
 
         });
     </script>

+ 3 - 3
resources/views/inventory/stockInventory/mission.blade.php

@@ -94,9 +94,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue = new Vue({
             el: "#list",

+ 3 - 3
resources/views/layouts/app.blade.php

@@ -10,11 +10,11 @@
     <title>@yield('title') {{ config('app.name', '宝时WAS') }}</title>
     @yield('head')
     <!-- Styles -->
-    <link href="{{ asset('css/app200923.css') }}" rel="stylesheet">
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
 </head>
 <body>
 <div id="app">
-    <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm" style="padding: 0;" >
+    <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
         <div class="container-fluid">
             <a class="navbar-brand" href="{{ url('/') }}" title="宝时 Warehouse Assistance System" style="vertical-align: text-bottom">
                 <img src="{{asset('icon/logo100b.png')}}" alt="宝时 Warehouse Assistance System" height="30" >
@@ -32,7 +32,7 @@
 <!-- Scripts -->
 @yield('script')
 {{-- 必须在app.js前边--}}
-<script src="{{ asset('js/app201009.js') }}"></script>
+<script src="{{ mix('js/app.js') }}"></script>
 <script>
     let isActive=function (name,atSlashLevel) {
         let uriWithNoParam=location.href.split('?')[0];

+ 2 - 2
resources/views/maintenance/role/index.blade.php

@@ -50,8 +50,8 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         new Vue({
             el:"#list",

+ 2 - 2
resources/views/maintenance/tutorial/create.blade.php

@@ -1,8 +1,8 @@
 @extends('layouts.app')
 @section('title')创建教程@endsection
 @section('head')
-    <link rel="stylesheet" type="text/css" href="{{asset('css/trix.css')}}">
-    <script type="text/javascript" src="{{asset('js/trix.js')}}"></script>
+    <link rel="stylesheet" type="text/css" href="{{mix('css/trix.css')}}">
+    <script type="text/javascript" src="{{mix('js/trix.js')}}"></script>
     <script>
 
         addEventListener("trix-file-accept", function(event) {

+ 2 - 2
resources/views/maintenance/tutorial/edit.blade.php

@@ -1,8 +1,8 @@
 @extends('layouts.app')
 @section('title')修改教程@endsection
 @section('head')
-    <link rel="stylesheet" type="text/css" href="{{asset('css/trix.css')}}">
-    <script type="text/javascript" src="{{asset('js/trix.js')}}"></script>
+    <link rel="stylesheet" type="text/css" href="{{mix('css/trix.css')}}">
+    <script type="text/javascript" src="{{mix('js/trix.js')}}"></script>
     <script>
 
         addEventListener("trix-file-accept", function(event) {

+ 2 - 2
resources/views/maintenance/user/index.blade.php

@@ -53,8 +53,8 @@
     <script>
 
     </script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200825.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         new Vue({
             el:"#list",

+ 1 - 1
resources/views/maintenance/userLabor/index.blade.php

@@ -116,7 +116,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script>
         new Vue({
             el:"#list",

+ 16 - 14
resources/views/order/index/delivering.blade.php

@@ -4,7 +4,7 @@
 @section('content')
     @component('order.index.menu')@endcomponent
     <div class="container-fluid">
-        <div style="min-width: 4070px;">
+        <div style="min-width: 4120px;">{{--4070--}}
             <div id="list" class="d-none">
                 <div id="form_div"></div>
                 <div class="ml-3 form-inline">
@@ -57,7 +57,7 @@
                     </div><!-- /.modal -->
                 </div>
                 <label for="all" id="cloneCheckAll" class="d-none">
-                    <input id="all" type="checkbox" @click="checkAll($event)">全选
+                    <input id="all" type="checkbox" @click="checkAll($event)">
                 </label>
                 <table class="table table-sm table-striped table-bordered table-hover card-body mt-2 ml-3 d-none" id="headerRoll"></table>
                 <table class="table table-sm table-striped table-bordered table-hover card-body mt-2 ml-3" id="headerParent">
@@ -66,8 +66,12 @@
                         <td>
                             <input class="checkItem" type="checkbox" :value="order.orderno" v-model="checkData">
                         </td>
-                        <td>@{{ i+1 }}</td>
-                        <td class="text-dark font-weight-bold text-nowrap">@{{ order.orderno }}</td>
+                        <td class="text-nowrap">
+                            @{{ i+1 }}<span v-if="orderIssueNos.includes(order.orderno)" class="badge badge-pill badge-danger">问题件</span>
+                        </td>
+                        <td class="text-dark font-weight-bold text-nowrap">
+                            @{{ order.orderno }}
+                        </td>
                         <td class="text-muted text-nowrap">@{{ order.ordercodename }}</td>
                         <td class="text-nowrap">@{{ order.addtime }}</td>
                         <td class="text-nowrap">@{{ order.issuepartyname }}</td>
@@ -216,9 +220,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue=new Vue({
             el:"#list",
@@ -242,6 +246,7 @@
                     {name:'{{$code->code}}',value:'{{$code->codename_c}}'},
                     @endforeach
                 ],
+                orderIssueNos:{!!  $orderIssueNos!!},
                 selectedStyle:'',
                 picktotraceidMap:{!! $picktotraceids !!},
                 pagePlaceholder:"",
@@ -628,18 +633,14 @@
                     axios.post("{{url('apiLocal/order/issue/orderIssueTag')}}",data).then(function(res){
                         tempTip.setDuration(5000)
                         tempTip.cancelWaitingTip();
-                        if(res.data.success){console.log(11);
-                        tempTip.setDuration(3000);
-                            tempTip.showSuccess('已标记为问题件,稍后前往订单问题件查询页面');
-                            setTimeout(function(){
-                                window.location.href = "{{url('order/issue/index')}}";
-                            },1000);
+                        if(res.data.success){
+                            tempTip.setDuration(3000);
+                            tempTip.showSuccess('已标记为问题件');
                         }else{
                             tempTip.setDuration(4000);
                             tempTip.show(res.data.fail_info);
                         }
                     }).catch(function(err){
-                        console.log(err);
                         tempTip.setDuration(3000);
                         tempTip.cancelWaitingTip();
                         tempTip.show('网络链接异常'+err);
@@ -705,6 +706,7 @@
                 },
                 createRejectedBill() {
                     let url = '{{url('order/createRejectedBill')}}';
+
                     axios.post(url,{data:this.checkData})
                         .then(res=>{
                             if (res.data.success){

+ 1 - 1
resources/views/order/issue/create.blade.php

@@ -303,7 +303,7 @@
                 // 二次订单
                 secondOrder: {logistic_id: '', code: '',},
                 final_status: ['已解决', '待退回', '退回中'],
-                Remission: ['原单减免', '部分减免', '全部减免'],
+                Remission: ['原单减免', '补发减免', '全部减免'],
                 finalStatus: @if(old('final_status')){{old('final_status')}}@else''@endif,
                 logistic_express_remission: @if(old('logistic_express_remission')){{old('logistic_express_remission')}}@else''@endif,
                 baoshi_express_remission: @if(old('baoshi_express_remission')){{old('baoshi_express_remission')}}@else''@endif,

+ 27 - 29
resources/views/order/issue/edit.blade.php

@@ -55,24 +55,27 @@
                 <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">
@@ -165,24 +168,14 @@
                 orderIssueType:{!! $orderIssueType !!},
                 rejectingStatus: ['无', '未退回', '全部退回', '部分退回', '差异退回', '超量退回'],
                 final_status: ['已解决', '待退回', '退回中',],
-                logisticExpressRemission: ['原单减免', '部分减免', '全部减免'],
-                baoShiExpressRemission: ['原单减免', '部分减免', '全部减免'],
+                logisticExpressRemission: ['原单减免', '补发减免', '全部减免'],
+                baoShiExpressRemission: ['原单减免', '补发减免', '全部减免'],
                 logistic_number:@if($rejectedBill)'{!! $rejectedBill->logistic_number_return !!}'@else ''@endif,
                 isSubmit:false
             },
             mounted: function () {
                 $("#editOrderIssue").removeClass('d-none');
             },
-            watch:{
-                secondOrder:{
-                    handler:function(value){
-                        if(value.code === ''){
-                            this.secondOrder.packages = '';
-                        }
-                    },
-                    deep:true,
-                },
-            },
             methods: {
                 submitFake(){
                     let _this = this;
@@ -244,7 +237,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 +247,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);

+ 95 - 61
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,7 @@
                         </button>
                     </span>
                 </div>
-                {{--table table-sm  table-bordered table-hover card-body table-responsive-sm p-0 m-0 --}}
-                <table class="table table-sm table-striped table-bordered table-hover card-body p-0 m-0" style="background: #fff;min-width: 3000px;">
+                <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">
@@ -56,12 +55,9 @@
                             </button>
                         </th>
                         <th class="font-weight-bolder header-3">
-
-                            {{--                            @cannot('订单管理-问题件-客户不可见')--}}
                             <button class="btn btn-sm btn-outline-secondary float-left" v-if="isShowRejectedBill" @click="hideRejectedBill">
                                 隐藏退单列
                             </button>
-                            {{--                            @endcannot--}}
                             情况说明
                             @cannot('订单管理-问题件-客户不可见')
                                 <button class="btn btn-sm btn-outline-secondary" v-if="isShowSecondOrderInfo" @click="hideSecondOrder">
@@ -75,7 +71,6 @@
                     </tr>
 
                     <tr class="tr-yellow" align="center">
-
                         <th rowspan="2" class="align-middle one-layer">
                             <label for="all">
                                 <input id="all" type="checkbox" @click="checkAll($event)"/>
@@ -110,12 +105,9 @@
                         <th class="tow-layer align-middle td-yellow" v-if="isShowOrderInfo" rowspan="2" style="min-width: 70px">区</th>
                         <th class="tow-layer align-middle td-yellow" v-if="isShowOrderInfo" rowspan="2" style="min-width:300px">收货人地址</th>
                         <th class="tow-layer align-middle td-yellow" v-if="isShowOrderInfo" colspan="3" style="min-width:300px">原始商品明细</th>
-                        {{--                        <th class="three-layer  align-middle" rowspan="2" >退回单号</th>--}}
-                        {{--                        @cannot('订单管理-问题件-客户不可见')--}}
                         <th class="three-layer   align-middle" rowspan="2" v-if="!isShowRejectedBill" style="min-width:50px">展开</th>
                         <th class="three-layer align-middle" rowspan="2" v-if="isShowRejectedBill" style="min-width:220px">退回单号</th>
                         <th class="three-layer   align-middle" colspan="5" v-if="isShowRejectedBill" style="min-width: 450px">返回商品明细</th>
-                        {{--                        @endcannot--}}
                         <th class="three-layer bg-whit  align-middle" rowspan="2" style="min-width: 115px">情况说明</th>
                         <th class="three-layer   align-middle" rowspan="2" style="min-width: 115px">问题类别</th>
                         <th class="three-layer  align-middle" colspan="4" style="min-width: 155px">处理结果</th>
@@ -148,7 +140,6 @@
                             <th  v-if="isShowRejectedBill" style="min-width: 50px">是否正品</th>
                             <th  v-if="isShowRejectedBill" style="min-width: 100px">备注</th>
                         @endcannot
-                        <th  style="min-width: 75px">操作类型</th>
                         <th  style="min-width: 120px">说明</th>
                         <th  style="min-width: 100px">操作者</th>
                         <th  style="min-width: 170px">时间</th>
@@ -161,8 +152,8 @@
                     </tr>
 
                     <tr class="tr-yellow text-center table-body"  v-if="orderIssues" v-for="(orderIssue,index) in orderIssues"
-                        @click="selectedColor(orderIssue.id)" :class="orderIssue.remark ? 'tr_top':''" v-on:mouseover="hidetop($event)" v-on:mouseleave="showtop($event)"
-                        :style="[{'font-weight': orderIssue.id===selectedStyle?'bold':''}]">
+                        @click="selectedColor(orderIssue.id,$event)" :class="orderIssue.remark ? 'tr_top':''" v-on:mouseover="hidetop($event)" v-on:mouseleave="showtop($event)">
+{{--                        :style="[{'font-weight': orderIssue.id===selectedStyle?'bold':''}]">--}}
                         <td class="child-layer-1">
                             <div class="m-0 p-0 " :style="[{'min-height':orderIssue.remark ?'72px':'45px'}]">
                                 <input class="checkItem" type="checkbox" :value="orderIssue.id" v-model="checkData">
@@ -198,7 +189,7 @@
                                     @else
                                         @{{ orderIssue.rejecting_status }}
                                     @endcan
-                                </td>{{--退件状态--}}
+                                </td>
                             @endcan
                         @endcannot
                         <td class="child-layer-1">
@@ -210,7 +201,7 @@
                                 @{{ orderIssue.final_status }}
                             @endcan
                         </td>{{--最终状态--}}
-                        @cannot('订单管理-问题件-客户不可见')  {{--登记日期--}}
+                        @cannot('订单管理-问题件-客户不可见')
                         <td class="toptd td-yellow child-layer-2">
                             <div v-if="orderIssue.remark" class="bg-light-yellow  text-danger top text-left" data-toggle="tooltip" style="opacity: 0.1;position: absolute;z-index: 1">
                                 置顶备注:@{{ orderIssue.remark }}
@@ -219,7 +210,7 @@
                         </td>
                         @endcannot
 
-                        <td class="td-yellow child-layer-2"> {{--订单日期--}}
+                        <td class="td-yellow child-layer-2">
                             @cannot('订单管理-问题件-客户不可见')
                             @else
                                 <div v-if="orderIssue.remark" class="bg-light-yellow  text-danger top text-left" data-toggle="tooltip" style="opacity: 0.1;position: absolute;z-index: 1">
@@ -262,36 +253,26 @@
                         <td class="td-yellow child-layer-2-hide" style="width: 400px" v-if="isShowOrderInfo">
                             <span class="text-wrap m-0 p-0 " style="width: 400px">@{{ orderIssue.order.address }}</span>
                         </td>
-                        <td class="td-yellow p-0 child-layer-2-hide" :id="orderIssue.id+'items'" colspan="3"
-                            v-if="isShowOrderInfo">
+                        <td class="td-yellow p-0 child-layer-2-hide" :id="orderIssue.id+'items'" colspan="3" v-if="isShowOrderInfo" :data-value="orderIssue.orderCount = 0" :data-value1='orderIssue.orderPackagecount = 0'>
                             <div v-if="orderIssue.order">
                                 <table  class="table table-sm m-0" v-if="orderIssue.order.packages"
-                                        :class="orderIssue.orderPackagecount > 1  ? 'collapse' : ''" :id="'order'+orderIssue.id"
-                                        :data-value="orderIssue.orderCount = 0" :data-count="orderIssue.orderPackagecount = 0">
+                                        :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">
                                             <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 m-0 p-0 tooltipTarget"  style="display: none;cursor:pointer" @dblclick="truncateText($event)" title="双击收起">@{{ item.commodity.name }}</div>
-                                                {{--                                                <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>--}}
-                                                {{--                                                <p class="text-nowrap m-0 p-0 tooltipTarget" style="display: none;cursor:pointer" @dblclick="truncateText($event)" title="双击收起">@{{ item.commodity.name }}</p>--}}
+                                                <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>
+                                                <p class="text-nowrap m-0 p-0 tooltipTarget" style="display: none;cursor:pointer" @dblclick="truncateText($event)" title="双击收起">@{{ item.commodity.name }}</p>
                                             </td>
-                                            <td  :data-value="orderIssue.orderPackagecount += item.amount ">@{{ item.amount }}</td>
+                                            <td  >@{{ item.amount }}</td>
                                         </tr>
                                     </template>
                                 </table>
-                                <button v-if="orderIssue.orderCount > 1 " type="button" class="btn btn-sm btn-outline-primary mt-1"
-                                        :id="'orderBtn'+orderIssue.id"   @click="toggleOrder(orderIssue.id,orderIssue.orderPackagecount)"
-                                        data-toggle="collapse" :data-target="'#order'+orderIssue.id">
-                                    商品@{{ orderIssue.orderPackagecount}}件,点击展开
+                                <button v-if="orderIssue.order.commodityPackages > 1" type="button" class="btn btn-sm btn-outline-primary mt-1" :id="'orderBtn'+orderIssue.id"   @click="toggleOrder(orderIssue.id,orderIssue.orderIssue.order.amount)" data-toggle="collapse" :data-target="'#order'+orderIssue.id">
+                                    商品@{{ orderIssue.order.amount }}件,点击展开
                                 </button>
                             </div>
                         </td>
-                        {{--商品明细 结束--}}
-
-                        {{--退单商品明细 开始--}}
-                        {{--                        @cannot('订单管理-问题件-客户不可见')--}}
 
                         <td class="text-muted child-layer-3-hide" v-if="isShowRejectedBill">
                             @can('订单管理-问题件-编辑')
@@ -300,10 +281,11 @@
                                 @{{ orderIssue.logistic_number_return }}
                             @endcan
                         </td>
-                        {{--                        @cannot('订单管理-问题件-客户不可见')--}}
+
                         <td class="p-0 m-0 child-layer-3" v-if="!isShowRejectedBill && index === 0 " style="width:50px;" :rowspan="orderIssues.length" >
                             <span class="btn  btn-outline-secondary "  @click="showRejectedBill"  :style="orderIssues.length>4 ?'{height: 200px;line-height: 100px':''" >展开退单列</span>
                         </td>
+
                         <td class="p-0 child-layer-3-hide" :id="orderIssue.id+'rejectedBill'" valign="middle" align="center" colspan="5" v-if="isShowRejectedBill">
                             <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"
@@ -314,8 +296,6 @@
                                         <td style="min-width: 100px" >
                                             <div class="text-truncate text-primary tooltipTarget" style="width: 100px;cursor:pointer;text-decoration: underline" title="双击展开" @dblclick="nowrapText($event)">@{{ item.name_goods }}</div>
                                             <div class="text-nowrap m-0 p-0 tooltipTarget"  style="display: none;cursor:pointer" @dblclick="truncateText($event)" title="双击收起">@{{ item.name_goods }}</div>
-                                            {{--                                            <p class="text-truncate text-primary m-0 p-0 tooltipTarget" style="width: 100px;cursor:pointer;text-decoration: underline" title="双击展开"  @dblclick="nowrapText($event)" >@{{ item.name_goods }}</p>--}}
-                                            {{--                                            <p class="text-nowrap m-0 p-0 tooltipTarget" style="display: none;cursor:pointer"  title="双击收起" @dblclick="truncateText($event)" >@{{ item.name_goods }}</p>--}}
                                         </td>
                                         <td style="min-width: 50px" :data-value="orderIssue.rejectedCount += item.amount">@{{ item.amount }}</td>
                                         <td style="min-width: 50px" >@{{ item.quality_label }}</td>
@@ -328,8 +308,6 @@
                                 </button>
                             </div>
                         </td>
-                        {{--                        @endcannot--}}
-                        {{--退单商品明细 结束--}}
 
                         <td class="child-layer-3">@{{ orderIssue.result_explain}}</td>
                         <td class="child-layer-3">
@@ -337,15 +315,12 @@
                                 <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>
 
-                        {{--处理结果--}}
                         <td class=" m-0 p-0 log-td child-layer-3" valign="middle" align="center" v-on:mouseover="showAddBtn($event)" v-on:mouseleave="hideAddBtn($event)" colspan="4">
                             <div class="addLogDiv row m-0 p-0 form-group" :id="'AddLog_'+orderIssue.id" style="display: none;">
                                 <input type="hidden" name="id" :value="orderIssue.id">
@@ -365,10 +340,10 @@
                             </div>
 
                             <template v-if="orderIssue.logs && orderIssue.logs.length > 0" class="p-0 m-0 ">
-                                <table class="table table-sm p-0 m-0 " :id="'logs'+orderIssue.id" :data-value="orderIssue.logShow == null ? orderIssue.logShow=false:''">
-                                    <tr style="position:static" align="center" v-for="(log,index) in orderIssue.logs" :class="(orderIssue.logs.length <= 2 ? '' : ((index === 0 || orderIssue.logShow )  ? '' : 'd-none' )) "
+                                <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':''"
                                         v-on:mouseover="showDelBtn($event)" v-on:mouseleave="hideDelBtn($event)" >
-                                        <td style="min-width: 75px">@{{ log.type }}</td>
                                         <td style="min-width: 200px">@{{ log.content }}</td>
                                         <td class="text-muted" style="min-width: 120px">@{{ log.user.name }}</td>
                                         <td class="text-muted" style="min-width: 170px">@{{ log.created_at }}</td>
@@ -391,10 +366,19 @@
                                 <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">
@@ -427,8 +411,6 @@
                                                     <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>
@@ -638,8 +620,8 @@
             -webkit-animation-play-state: running;
         }
     </style>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script>
         let listVue = new Vue({
             el: '#issue_div ',
@@ -667,7 +649,12 @@
                     {name:'超量退回',value:'超量退回'},
                     {name:'全部退回',value:'全部退回'},
                 ],
-                expressRemission:['原单减免', '部分减免', '全部减免'],
+                logistics:[
+                    @foreach($logistics as $logistic)
+                    {name:{{$logistic->id}},value:'{{$logistic->name}}'},
+                    @endforeach
+                ],
+                expressRemission:['原单减免', '补发减免', '全部减免'],
                 checkData: [],
                 from: '',
                 finalStatus: [{value:'',name:""},{value:'已解决',name:"已解决"},{value:'待退回',name:"待退回"},{value:'退回中',name:"退回中"},],//['无','已解决', '待退回', '退回中'],
@@ -680,6 +667,7 @@
                 message:{},
                 edit:{
                     batchStoreLogs:'',
+                    isShow:[],
                 },
             },
             mounted: function () {
@@ -711,6 +699,13 @@
                     },
                     {name: 'client_code', type: 'input', tip: '原始订单号:前或后加百分号为单个模糊搜索,否则为多条件精确搜索', placeholder: '原始订单号'},
                     {name: 'logistic_number', type: 'input', tip: ['输入原始运单号:前或后加百分号为单个模糊搜索,否则为多条件精确搜索'], placeholder: '运单号'},
+                    {
+                        name: 'logistic_id',
+                        type: 'select_multiple_select',
+                        tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的承运商'],
+                        placeholder: ['承运商', '定位或多选承运商'],
+                        data: this.logistics
+                    },
                     {name: 'logistic_number_return', type: 'input', tip: '退回单号:前或后加百分号为单个模糊搜索,否则为多条件精确搜索', placeholder: '退回单号'},
                     {name: 'send_client_code', type: 'input', tip: '二次订单号:前或后加百分号为单个模糊搜索,否则为多条件精确搜索', placeholder: '二次订单号'},
 
@@ -773,7 +768,7 @@
                     let _this = this;
                     setTimeout(function(){
                         let countShow = $(tr).children('.three-layer').length;
-                        $('.header-3').attr('colspan',countShow +2+  (_this.isShowSecondOrderInfo ? 2:0) +(_this.isShowRejectedBill?4:0));
+                        $('.header-3').attr('colspan',countShow +3+  (_this.isShowSecondOrderInfo ? 2:0) +(_this.isShowRejectedBill?4:0));
                     },2);
                 },
                 isShowSecondOrderInfo(newValue){
@@ -781,17 +776,19 @@
                     let _this = this;
                     setTimeout(function(){
                         let countShow = $(tr).children('.three-layer').length;
-                        $('.header-3').attr('colspan',countShow +2+  (_this.isShowSecondOrderInfo ? 2:0) +(_this.isShowRejectedBill?4:0));
+                        $('.header-3').attr('colspan',countShow +3+  (_this.isShowSecondOrderInfo ? 2:0) +(_this.isShowRejectedBill?4:0));
                     },2);
                 },
             },
             methods: {
-                selectedColor(orderno) {
+                selectedColor(orderno,e) {
+                    $('.table-body').removeClass('focusing')
                     if (orderno === this.selectedStyle) {
                         this.selectedStyle = '';
                         return;
                     }
                     this.selectedStyle = orderno;
+                    $(e.target).parent('tr').addClass('focusing')
                 },
                 editOrderIssue($event) {
                     let id = $($event.target).attr('data-value');
@@ -804,7 +801,6 @@
                 },
                 deleteOrderIssueById() {
                     let _this = this;
-
                     tempTip.setDuration(99999)
                     tempTip.waitingTip('删除中,请稍候')
                     let id = $('#deleteId').val();
@@ -1139,9 +1135,11 @@
                 },
                 toggleLogs(orderIssue, e) {
                     if ( orderIssue.logShow  === false) {
-                        $(e.target).text('点击收起');
-                    } else {
                         $(e.target).text("记录共" + $(e.target).attr('data-value') + "条,点击展开");
+                        $('#logs'+orderIssue.id).find('tr:gt(1)').addClass('d-none');
+                    } else {
+                        $('#logs'+orderIssue.id).find('tr').removeClass('d-none');
+                        $(e.target).text('点击收起');
                     }
                     orderIssue.logShow = !orderIssue.logShow;
                 },
@@ -1294,11 +1292,15 @@
                             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,'确认')
                             }else{
                                 tempTip.setDuration(3000)
@@ -1310,6 +1312,30 @@
                         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
+                                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();
@@ -1319,7 +1345,15 @@
                     let truncateSpan = $(e.target);
                     truncateSpan.hide();
                     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)
+                },
             }
         })
         // modal 隐藏时修改 input 为空

+ 9 - 9
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>
 
@@ -65,8 +65,8 @@
 
 @endsection
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script>
         let performance_vue = new Vue({
             el:'#performance_div',

+ 3 - 3
resources/views/order/issue/workload.blade.php

@@ -74,9 +74,9 @@
 
 @endsection
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let workLoadVue = new Vue({
             el: "#workLoad_div",

+ 53 - 26
resources/views/order/tracking/index.blade.php

@@ -4,7 +4,8 @@
     @component('order.tracking.menu')@endcomponent
     <div class="container-fluid" id="tracking_div">
         <div style="min-width: 3000px">
-            <div class="d-none" id="list">
+            <div class="d-none container-fluid" id="list">
+                <div id="form_div"></div>
                 @can('订单管理-跟踪-监听')
                 <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="pasteDataTitle" aria-hidden="true">
                     <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
@@ -26,7 +27,7 @@
                     </div>
                 </div>
                 @endcan
-                <div id="form_div"></div>
+
                 <div class="form-inline mt-1 ">
                     <span class="dropdown">
                         <button type="button"
@@ -82,22 +83,27 @@
                         <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-else>  @{{ trackOrder.orderClientCode }}</span>
-{{--                            @{{ trackOrder.orderClientCode }}--}}
+                            <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)" >
+                            @else
+                                <span> @{{ trackOrder.order_client_code }}</span>
+                            @endcan
+                            </span>
                         </td>
                         <td class="td-warm">
-                            <span v-if="trackOrder.web_order_number"> @{{ trackOrder.web_order_number }}</span>
-{{--                            <span v-else> @{{ trackOrder.web_order_number }}</span>--}}
-{{--                            @can('订单管理-跟踪-仓库编辑')--}}
-{{--                                <input class="form-control form-control-sm" :value="trackOrder.web_order_number" @keydown.enter="warehouseUpdate($event,'web_order_number',trackOrder)" >--}}
-{{--                            @else--}}
-{{--                            @{{ trackOrder.web_order_number }}--}}
-{{--                            @endcan--}}
+                            @can('订单管理-跟踪-仓库编辑')
+                                <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
                         </td>
                         <td class="td-warm">
                             @can('订单管理-跟踪-仓库编辑')
-                                <input class="form-control form-control-sm" type="datetime-local" :value="trackOrder.pick_up_at " @change="warehouseUpdate($event,'pick_up_at',trackOrder)" >
+                                <input class="form-control form-control-sm" type="datetime-local" :value="trackOrder.pick_up_at | dateLocal" @change="warehouseUpdate($event,'pick_up_at',trackOrder)" >
                             @else
                                 @{{ trackOrder.pick_up_at }}
                             @endcan
@@ -135,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">
@@ -217,9 +230,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <style>
         .btn-border{
             border:1px solid rgba(108, 117, 125,0.3);
@@ -251,8 +264,15 @@
                 isArrival: ['是','否'],
             },
             mounted:function(){
-
-                let selectDate = [
+                let selectDate1 = [
+                    {name:'31',value:'近一月'},
+                    {name:'92',value:'近三月'},
+                    {name:'183',value:'近半年'},
+                    {name:'366',value:'近一年'},
+                    {name:'0',value: '不限'},
+                ];
+                let selectDate2 = [
+                    {name:'15',value:'15天内'},
                     {name:'31',value:'近一月'},
                     {name:'92',value:'近三月'},
                     {name:'183',value:'近半年'},
@@ -270,9 +290,12 @@
                         {name:'owner_id',type:'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的客户'], placeholder: ['货主', '定位或多选货主'], data: _this.owners},
                         {name:'client_code',type:'input',tip:'订单号',placeholder:'订单号'},
                         {name:['client','addtime'],type:'input_select',tip:['右侧选择查询范围,默认为一月内','查询范围,范围越短搜索越快'],placeholder: ['客户',''],
-                            data:selectDate, rules:[{son:{addtime:{default:'31',required_without_all_if:['orderdate_start','orderdate_end']}}},
-                                {date_relevance:{date:['start_at','end_at'],relevance:'addtime',killing:'date',default:[31,92,183,366]}}]},
-                    ],
+                            data:selectDate1, rules:[{son:{addtime:{default:'31',required_without_all_if:['start_at','end_at']}}},
+                                {date_relevance:{date:['start_at','end_at'],relevance:'addtime',killing:'date',default:[15,31,92,183,366]}}]},
+                        {name:['remark','remark_addtime'],type:'input_select',tip:['右侧选择查询范围,默认为15天内','查询范围,范围越短搜索越快'],placeholder: ['订单备注',''],
+                            data:selectDate2, rules:[{son:{remark_addtime:{default:'15',required_without_all_if:['start_at','end_at']}}},
+                                {date_relevance:{date:['start_at','end_at'],relevance:'remark_addtime',killing:'date',default:[15,31,92,183,366]}}]},
+                     ],
                     [
                         {name:'end_at',type:'dateTime',tip:'结束日期',placeholder: '结束日期'},
                         {name:'logistic_number',type:'input',tip:'运输单号',placeholder:'运输单号'},
@@ -364,7 +387,7 @@
                 warehouseUpdate(e,param,trackingOrder){
                     let value = $(e.target).val();
                     if(trackingOrder[param] === value ){
-                        return
+                        return;
                     }
                     let data = {id:trackingOrder.id,param:param,value:value}
                     let _this = this
@@ -406,7 +429,7 @@
                 },
                 modifyOrderTracking(param,value, trackingOrder){
                     this.trackOrders.forEach(function(item){
-                        if(item['orderClientCode'] === trackingOrder['orderClientCode']){
+                        if(item['orderClientNumber'] === trackingOrder['orderClientNumber']){
                             item[param] = value
                         }
                     })
@@ -425,7 +448,7 @@
                     this.trackOrders.forEach(function(trackOrder){
                         if(parseInt(data['id']) === trackOrder['id'] ){
                             trackOrder[data['param']] = data['value'];
-                            return
+                            return;
                         }
                     });
                 },
@@ -462,6 +485,10 @@
                     }
                     return value
                 },
+                dateLocal:function(value) {
+                    if (value !== null) {return value.replace(' ', 'T')}
+                    return value
+                },
                 number:function(value){
                     var toFixedNum = Number(value).toFixed(3);
                     var realVal = toFixedNum.substring(0, toFixedNum.toString().length - 1);

+ 1 - 1
resources/views/order/wave/search.blade.php

@@ -82,7 +82,7 @@
 @endsection
 
 @section("lastScript")
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script>
         let vueList = new Vue({
             el: "#wave_div",

+ 2 - 2
resources/views/personnel/checking-in/QRcode.blade.php

@@ -8,7 +8,7 @@
     <meta name="csrf-token" content="{{ csrf_token() }}">
     <title>显示二维码 BsWAS</title>
     <!-- Styles -->
-    <link href="{{ asset('css/app200519b.css') }}" rel="stylesheet">
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
 </head>
 <body>
     <div class="container-fluid " id="page">
@@ -37,7 +37,7 @@
     </div>
 
 
-    <script src="{{ asset('js/app.js?202002111414') }}"></script>
+    <script src="{{ asset('js/app201009.js') }}"></script>
     <script>
         new Vue({
             el:"#page",

+ 1 - 1
resources/views/personnel/checking-in/clock.blade.php

@@ -3,7 +3,7 @@
 <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
 </head>
 <body>
 <div class="card col-md-8 offset-md-2 mt-5">

+ 1 - 1
resources/views/personnel/checking-in/createUserDetail.blade.php

@@ -3,7 +3,7 @@
 <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
 </head>
 <body>
 <div class="card col-md-8 offset-md-2 mt-5">

+ 1 - 1
resources/views/personnel/checking-in/enterGroupClock.blade.php

@@ -3,7 +3,7 @@
     <head>
         <meta charset="utf-8">
         <meta name="viewport" content="width=device-width, initial-scale=1">
-        <link href="{{ asset('css/app.css') }}" rel="stylesheet">
+        <link href="{{ mix('css/app.css') }}" rel="stylesheet">
     </head>
     <body>
         <div class="card col-md-8 offset-md-2 mt-5">

+ 1 - 1
resources/views/personnel/checking-in/importAndExportClock.blade.php

@@ -3,7 +3,7 @@
     <head>
         <meta charset="utf-8">
         <meta name="viewport" content="width=device-width, initial-scale=1">
-        <link href="{{ asset('css/app.css') }}" rel="stylesheet">
+        <link href="{{ mix('css/app.css') }}" rel="stylesheet">
     </head>
     <body>
         <div class="card col-md-8 offset-md-2 mt-5">

+ 2 - 2
resources/views/personnel/checking-in/importAndExportQRCode.blade.php

@@ -8,7 +8,7 @@
     <meta name="csrf-token" content="{{ csrf_token() }}">
     <title>显示二维码 BsWAS</title>
     <!-- Styles -->
-    <link href="{{ asset('css/app200519b.css') }}" rel="stylesheet">
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
 </head>
 <body>
     <div class="container-fluid " id="page">
@@ -30,7 +30,7 @@
     </div>
 
 
-    <script src="{{ asset('js/app.js?202002111414') }}"></script>
+    <script src="{{ asset('js/app201009.js') }}"></script>
     <script>
         function computeDiffMicroTime_fromNow(dateComparing) {
             let now=new Date();

+ 1 - 1
resources/views/personnel/checking-in/importAndExportSuccess.blade.php

@@ -27,7 +27,7 @@
         <h5 style="margin-top: 0;color: red">下班登出成功</h5>
     @endif
 </div>
-<script src="{{ asset('js/app.js?202002111414') }}"></script>
+<script src="{{ asset('js/app201009.js') }}"></script>
 <script>
     new Vue({
         el:'#page',

+ 1 - 1
resources/views/personnel/checking-in/success.blade.php

@@ -16,7 +16,7 @@
         <h5 v-else style="margin-top: 0;color: red">等待组长确认登入,请勿关闭:<span id="_lefttime" ></span></h5>
     </div>
 </div>
-<script src="{{ asset('js/app.js?202002111414') }}"></script>
+<script src="{{ asset('js/app201009.js') }}"></script>
 <script>
     new Vue({
         el:'#page',

+ 1 - 1
resources/views/personnel/checking-in/updateUserLaborCompanies.blade.php

@@ -3,7 +3,7 @@
 <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
 </head>
 <body>
 <div class="card col-md-8 offset-md-2 mt-5">

+ 9 - 3
resources/views/personnel/laborReport/index.blade.php

@@ -74,6 +74,8 @@
                 <td class="text-muted">@{{laborReport.enter_at}}</td>
                 <td>@{{laborReport.checkInAt}}</td>
                 <td class="text-muted">@{{laborReport.checkOutAt}}</td>
+                <td class="text-muted">@{{laborReport.round_check_in_at}}</td>
+                <td class="text-muted">@{{laborReport.round_check_out_at}}</td>
                 <td >@{{ laborReport.exit_at }}</td>
                 <td class="text-muted">@{{laborReport.verifyAt}}</td>
                 <td class="text-muted"><span v-if="laborReport.verifyPerson">@{{laborReport.verifyPerson}}</span></td>
@@ -235,9 +237,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let today=(new Date());
         function isTomorrow(){
@@ -287,6 +289,7 @@
                             is_exportGroup:'{{$laborReport->is_exportGroup}}',is_export:'{{$laborReport->is_export}}',
                             verifyAt:'{{$laborReport->verify_at}}',groupUserId:'{{$laborReport->group_user_id}}',verifyPerson:'{{$laborReport->user['name']}}',
                             checkOutAt:'{{$laborReport->check_out_at}}',onlineDuration:'{{$laborReport->online_duration}}',
+                            round_check_in_at:'{{$laborReport->round_check_in_at}}',round_check_out_at:'{{$laborReport->round_check_out_at}}',
                             workingDuration:'{{$laborReport->working_duration}}', created_at:'{{$laborReport->created_at}}',
                             enter_at:'{{$laborReport->enter_at}}',exit_at:'{{$laborReport->exit_at}}',
                             thisRecordOnlineTime:'{{$laborReport->thisRecordOnlineTime}}',
@@ -385,6 +388,7 @@
                                     laborReport.thisRecordWorkingTime=labor.thisRecordWorkingTime;
                                     laborReport.is_exportGroup=labor.is_exportGroup;
                                     laborReport.checkOutAt=labor.check_out_at;
+                                    laborReport.round_check_out_at=labor.round_check_out_at;
                                     if (labor.relax_time){
                                         laborReport.relax_time=labor.relax_time;
                                     }
@@ -429,6 +433,8 @@
                         {name:'enter_at',value: '进场时间'},
                         {name:'checkInAt',value: '进组时间'},
                         {name:'checkOutAt',value: '退组时间'},
+                        {name:'round_check_in_at',value: '进组取整时间'},
+                        {name:'round_check_out_at',value: '退组取整时间'},
                         {name:'exit_at',value: '退场时间'},
                         {name:'verifyAt',value: '审核时间'},
                         {name:'verifyPerson',value: '审核人'},

+ 4 - 4
resources/views/process/index.blade.php

@@ -462,9 +462,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#process",
@@ -651,7 +651,7 @@
                 processExport(checkAllSign) {
                     let url = '{{url('process/export')}}';
                     let token='{{ csrf_token() }}';
-                    //excelExport 定义在 js/queryForm/export200918.js
+                    //excelExport 定义在 js/queryForm/export.js
                     excelExport(checkAllSign,this.checkData,url,this.sum,token);
                 },
                 //获取登记工时

+ 4 - 4
resources/views/process/statistic.blade.php

@@ -79,9 +79,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200825.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         new Vue({
             el:"#statistics",
@@ -162,7 +162,7 @@
                 processStatisticExport(checkAllSign){
                     let url = '{{url('process/statistic/export')}}';
                     let token='{{ csrf_token() }}';
-                    //excelExport 定义在 js/queryForm/export200918.js
+                    //excelExport 定义在 js/queryForm/export.js
                     excelExport(checkAllSign,this.checkData,url,this.sum,token);
                 },
             },

+ 3 - 3
resources/views/rejected/search/analyze.blade.php

@@ -60,9 +60,9 @@
 @endsection
 
 @section('lastScript')
-    <script src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script src="{{mix('js/queryForm/export.js')}}"></script>
+    <script src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#list",

+ 8 - 6
resources/views/rejected/search/general.blade.php

@@ -66,8 +66,8 @@
                         <td>
                             <input type="checkbox" v-model="rejectedBills_checkBoxes" :value="rejectedBill.id"/>
                         </td>
-                        <td class="text-muted" style="opacity:0.7">
-                            @{{ i+1 }}
+                        <td class="text-nowrap">
+                            <span class="text-muted" style="opacity:0.7">@{{ i+1 }}</span> <span v-if="issueIds.includes(rejectedBill.id)" class="badge badge-pill badge-danger">问题件</span>
                         </td>
                         <td class="text-muted">
                             <span v-if="rejectedBill.is_checked==1" class="text-success">
@@ -175,9 +175,9 @@
         let ajaxFinishAllUrl='{{url("rejected/ajaxFinishAll")}}';
         let csrfInput='@csrf';
     </script>
-    <script src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script src="{{mix('js/queryForm/export.js')}}"></script>
+    <script src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#list",
@@ -189,6 +189,7 @@
                     {name:'{{$owner->id}}',value:'{{$owner->name}}'},
                     @endforeach
                 ],
+                issueIds:{!! $issueIds !!},
                 logistics:[
                     @foreach($logistics as $logistic)
                     {name:'{{$logistic->id}}',value:'{{$logistic->name}}'},
@@ -220,7 +221,8 @@
                         {name:'mobile_sender',type:'input',tip:'寄件人手机:输入完成敲回车提交',placeholder:'寄件人手机'},
                         {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:'null',value:'无需入库'},{name:2,value:'待推单'},{name:4,value:'待确认'},{name:3,value:'交互异常'}]},
+                        {name:'is_issue',type:'select',data:[{name:'true',value:'有'},{name:'false',value:'无'}],tip:'问题件',placeholder:'问题件'}
                     ]
                 ];
                 this.form=new query({

+ 2 - 2
resources/views/store/blindReceive/layout.blade.php

@@ -12,7 +12,7 @@
     <!-- Styles -->
     <link rel="shortcut icon" href="{{asset('icon/WcsIcon_blindPack.ico')}}" />
     <link rel="bookmark" href="{{asset('icon/WcsIcon_blindPack.ico')}}" />
-    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
 </head>
 <body>
 <div id="app">
@@ -29,7 +29,7 @@
 <!-- Scripts -->
 @yield('script_before')
 {{-- 必须在app.js前边--}}
-<script src="{{ asset('js/app.js') }}"></script>
+<script src="{{ mix('js/app.js') }}"></script>
 <script>
     let isActive=function (name,atSlashLevel) {
         let uriWithNoParam=location.href.split('?')[0];

+ 2 - 2
resources/views/store/checkingReceive/mission.blade.php

@@ -77,8 +77,8 @@
 @stop
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#container",

+ 2 - 2
resources/views/store/checkingReceive/show.blade.php

@@ -211,7 +211,7 @@
 @stop
 
 @section('lastScript')
-<script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+<script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
 <script>
     new Vue({
         el:"#container",
@@ -678,4 +678,4 @@
         },
     });
 </script>
-@stop
+@stop

+ 1 - 1
resources/views/store/fast/create.blade.php

@@ -55,7 +55,7 @@
                     </div>
                     <div class="form-group row">
                         <div class="col-8 offset-2">
-                            <input type="submit" class="btn btn-success form-control">
+                            <input type="submit" class="btn btn-success form-control" onclick="tempTip.setDuration(99999999);tempTip.waitingTip('执行中……')">
                         </div>
                     </div>
                 </form>

+ 1 - 1
resources/views/store/fast/index.blade.php

@@ -35,7 +35,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue = new Vue({
             el:'#fast',

+ 1 - 1
resources/views/store/fast/storeItem.blade.php

@@ -38,7 +38,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue = new Vue({
             el:'#item',

+ 2 - 2
resources/views/waybill/delivering.blade.php

@@ -187,8 +187,8 @@
     .color1{background-color: #FFA07A}
     .color2{background-color: cornflowerblue}
 </style>
-<script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-<script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+<script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+<script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
 <script>
     new Vue({
         el:"#list",

+ 3 - 3
resources/views/waybill/index.blade.php

@@ -251,9 +251,9 @@
             -webkit-animation-play-state: running;
         }
     </style>
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
         let vue = new Vue({
             el:'#list',

+ 2 - 2
resources/views/waybill/waybillFinancialSnapshot/index.blade.php

@@ -124,8 +124,8 @@
 @stop
 
 @section('lastScript')
-<script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
-<script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
+<script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
+<script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
 <script>
     let vue = new Vue({
         el:'#editingPanel',

+ 3 - 3
resources/views/weight/package/index.blade.php

@@ -57,9 +57,9 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script>
             @if(isset($request))
         let request={!! json_encode($request) !!};

+ 2 - 2
resources/views/weight/package/statistics.blade.php

@@ -46,8 +46,8 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm201010.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/export.js')}}"></script>
     <script>
         new Vue({
             el:"#statistics",

+ 2 - 2
resources/views/weight/weightExcepted/index.blade.php

@@ -86,8 +86,8 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/export200918.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#list",

+ 1 - 0
routes/apiLocal.php

@@ -47,6 +47,7 @@ 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::group(['prefix'=>'onTop'],function(){

+ 2 - 0
routes/web.php

@@ -387,6 +387,8 @@ Route::group(['prefix'=>'inventory'],function(){
     Route::get('syncOwners','InventoryAccountController@syncOwners');
     Route::any('删除盘点记录','InventoryAccountController@删除盘点记录');
     Route::post('跳过盘点记录','InventoryAccountController@跳过盘点记录');
+    Route::post('确认盘点差异','InventoryAccountController@确认盘点差异');
+    Route::post('批量跳过或确认差异','InventoryAccountController@批量跳过或确认差异');
     Route::get('完结盘点任务/{id}','InventoryAccountController@完结盘点任务');
     Route::post('修改质量状态','InventoryAccountController@修改质量状态');
     Route::post('增加系统之外的盘点记录','InventoryAccountController@增加系统之外的盘点记录');

+ 10 - 8
serves/excelExportGo/api/controller/laborReportController.go

@@ -2,7 +2,7 @@ package controller
 
 func LaborReportFormat(data []map[string]string) ([]interface{}, [][]interface{})  {
 	row := []interface{}{
-		"进厂编号","小组","临时工","电话","身份证号","劳务所","进场时间","进组时间","退组时间",
+		"进厂编号","小组","临时工","电话","身份证号","劳务所","进场时间","进组时间","退组时间","进组取整时间","退组取整时间",
 		"退场时间","审核时间","审核人","晚饭时间(分)","在线时长","本次工作时长","备注",
 	}
 	column := map[string]int{
@@ -15,13 +15,15 @@ func LaborReportFormat(data []map[string]string) ([]interface{}, [][]interface{}
 		"enter_at" : 6,
 		"check_in_at" : 7,
 		"check_out_at" : 8,
-		"exit_at" : 9,
-		"verify_at" : 10,
-		"group_user_id" : 11,
-		"relax_time" : 12,
-		"online_duration" : 13,
-		"working_duration" : 14,
-		"remark" : 15,
+		"round_check_in_at" : 9,
+		"round_check_out_at" : 10,
+		"exit_at" : 11,
+		"verify_at" : 12,
+		"group_user_id" : 13,
+		"relax_time" : 14,
+		"online_duration" : 15,
+		"working_duration" : 16,
+		"remark" : 17,
 	}
 	list := make([][]interface{},len(data))
 	for k,v := range data{

+ 9 - 5
webpack.mix.js

@@ -11,17 +11,21 @@ const mix = require('laravel-mix');
  |
  */
 
-mix.js('resources/js/app.js', 'public/js/app201009.js')
-    .sass('resources/sass/app.scss', 'public/css/app200923.css');
+mix.js('resources/js/app.js', 'public/js/app.js')
+    .sass('resources/sass/app.scss', 'public/css/app.css');
 mix.copy('resources/sass/fonts/','public/fonts');
 mix.copy('resources/icon','public/icon');
 mix.copy('resources/images','public/images');
 mix.copy('resources/icon/faviconc.ico','public/faviconc.ico');
 mix.js('resources/js/trix.js','public/js/trix.js');
 mix.copy('resources/sass/trix.css','public/css/trix.css');
-mix.copy('resources/js/queryForm/queryForm.js','public/js/queryForm/queryForm201010.js');
-mix.copy('resources/js/queryForm/export.js','public/js/queryForm/export200918.js');
-mix.js('resources/js/queryForm/header.js','public/js/queryForm/header200826b.js');
+mix.copy('resources/js/queryForm/queryForm.js','public/js/queryForm/queryForm.js');
+mix.copy('resources/js/queryForm/export.js','public/js/queryForm/export.js');
+mix.js('resources/js/queryForm/header.js','public/js/queryForm/header.js');
 
 mix.copy('resources/sound/','public/sound');
 
+
+if (mix.inProduction()) {
+    mix.version();
+}

Неке датотеке нису приказане због велике количине промена