Переглянути джерело

Merge branch 'master' into zzd

dream 5 роки тому
батько
коміт
a8e147d3bb
100 змінених файлів з 1167 додано та 625 видалено
  1. 1 1
      app/AuditLog.php
  2. 1 1
      app/Authority.php
  3. 1 1
      app/Batch.php
  4. 1 1
      app/CarType.php
  5. 1 1
      app/Carrier.php
  6. 1 1
      app/City.php
  7. 1 1
      app/Commodity.php
  8. 1 1
      app/CommodityBarcode.php
  9. 1 1
      app/Console/Commands/LogExpireDelete.php
  10. 17 0
      app/Console/Commands/ModelMakeCommand.php
  11. 1 0
      app/Console/Commands/SyncBatchTask.php
  12. 65 57
      app/Console/Commands/SyncWMSOrderTask.php
  13. 10 0
      app/Console/Commands/stubs/model.stub
  14. 6 2
      app/Console/Kernel.php
  15. 1 1
      app/CustomField.php
  16. 1 1
      app/Customer.php
  17. 1 1
      app/CustomerLog.php
  18. 1 1
      app/CustomerLogStatus.php
  19. 1 1
      app/CustomerTag.php
  20. 1 1
      app/Depository.php
  21. 15 0
      app/Exceptions/ErrorException.php
  22. 16 0
      app/Exceptions/Exception.php
  23. 16 0
      app/Exceptions/FatalException.php
  24. 65 11
      app/Exceptions/Handler.php
  25. 16 0
      app/Exceptions/PanicException.php
  26. 16 0
      app/Exceptions/WarningException.php
  27. 1 1
      app/Feature.php
  28. 1 0
      app/Http/Controllers/Auth/LoginController.php
  29. 3 2
      app/Http/Controllers/CitiesController.php
  30. 12 10
      app/Http/Controllers/LogController.php
  31. 2 2
      app/Http/Controllers/OrderIssueController.php
  32. 2 2
      app/Http/Controllers/PriceModelController.php
  33. 1 6
      app/Http/Controllers/StoreController.php
  34. 454 272
      app/Http/Controllers/TestController.php
  35. 4 2
      app/Http/Controllers/api/thirdPart/flux/SortingController.php
  36. 7 0
      app/Http/Controllers/api/thirdPart/haiq/LightController.php
  37. 126 67
      app/Http/Controllers/api/thirdPart/haiq/StorageController.php
  38. 59 0
      app/Http/Requests/ForeignHaiRobotic_taskUpdateRequest.php
  39. 6 3
      app/Imports/OrderIssueImport.php
  40. 1 1
      app/InventoryAccount.php
  41. 1 1
      app/InventoryAccountMission.php
  42. 1 1
      app/InventoryBlindReceiveExcel.php
  43. 1 1
      app/InventoryCompare.php
  44. 1 1
      app/InventoryDailyLog.php
  45. 1 1
      app/InventoryDailyLoggingOwner.php
  46. 1 1
      app/JobType.php
  47. 1 1
      app/LaborCompany.php
  48. 103 77
      app/LaborReport.php
  49. 1 1
      app/LaborReportStatus.php
  50. 15 11
      app/Log.php
  51. 1 1
      app/Logistic.php
  52. 1 1
      app/LogisticNumberFeature.php
  53. 1 1
      app/LogisticTiming.php
  54. 1 1
      app/MaterialBox.php
  55. 1 1
      app/MeasuringMachine.php
  56. 1 1
      app/Menu.php
  57. 47 0
      app/ModelExtended.php
  58. 2 1
      app/OperatorLog.php
  59. 1 1
      app/OracleActAllocationDetails.php
  60. 1 1
      app/OracleActTransactionLog.php
  61. 2 2
      app/OracleBasCode.php
  62. 1 1
      app/OracleBasCustomer.php
  63. 1 1
      app/OracleBasSKU.php
  64. 2 8
      app/OracleDOCASNDetail.php
  65. 1 1
      app/OracleDOCASNHeader.php
  66. 1 1
      app/OracleDOCMovementDetail.php
  67. 1 1
      app/OracleDOCMovementHeader.php
  68. 1 1
      app/OracleDOCOrderDetail.php
  69. 1 1
      app/OracleDOCOrderHeader.php
  70. 1 1
      app/OracleDOCWaveDetails.php
  71. 1 1
      app/OracleDOCWaveHeader.php
  72. 1 1
      app/OracleDocOrderPackingSummary.php
  73. 1 1
      app/OracleIdxAsrsReceive.php
  74. 1 1
      app/OracleInvLotAtt.php
  75. 1 1
      app/OracleInvLotLocId.php
  76. 2 19
      app/Order.php
  77. 1 1
      app/OrderBin.php
  78. 4 1
      app/OrderCommodity.php
  79. 1 1
      app/OrderCommodityAssign.php
  80. 1 1
      app/OrderCountingRecord.php
  81. 1 1
      app/OrderIssue.php
  82. 2 2
      app/OrderIssueOnTop.php
  83. 1 1
      app/OrderIssueProcessLog.php
  84. 1 1
      app/OrderIssueType.php
  85. 1 1
      app/OrderPackage.php
  86. 1 1
      app/OrderPackageCommodities.php
  87. 1 1
      app/OrderTracking.php
  88. 1 1
      app/OrderTrackingOwner.php
  89. 1 1
      app/Owner.php
  90. 1 1
      app/OwnerAreaReport.php
  91. 1 1
      app/OwnerBillReport.php
  92. 1 1
      app/OwnerContract.php
  93. 1 1
      app/OwnerFeeDetail.php
  94. 1 1
      app/OwnerInStorageRule.php
  95. 1 1
      app/OwnerOutStorageRule.php
  96. 1 1
      app/OwnerPriceDirectLogistic.php
  97. 1 1
      app/OwnerPriceDirectLogisticCar.php
  98. 1 1
      app/OwnerPriceExpress.php
  99. 1 1
      app/OwnerPriceExpressProvince.php
  100. 1 1
      app/OwnerPriceLogistic.php

+ 1 - 1
app/AuditLog.php

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
 use App\Traits\ModelTimeFormat;
 
-class AuditLog extends Model
+class AuditLog extends ModelExtended
 {
     use ModelTimeFormat;
     use SoftDeletes;

+ 1 - 1
app/Authority.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class Authority extends Model
+class Authority extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable = ['name','remark','id_parent','alias_name','type','relevance','permission'];

+ 1 - 1
app/Batch.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class Batch extends Model
+class Batch extends ModelExtended
 {
     protected $fillable = [
         'id','code','type', 'wms_type', 'status', 'wms_status', 'wms_created_at',"remark","owner_id",

+ 1 - 1
app/CarType.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class CarType extends Model
+class CarType extends ModelExtended
 {
     use ModelTimeFormat;
 

+ 1 - 1
app/Carrier.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class Carrier extends Model
+class Carrier extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 1 - 1
app/City.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class City extends Model
+class City extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 1 - 1
app/Commodity.php

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class Commodity extends Model
+class Commodity extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=['name','sku','owner_id','created_at','length','width','height','volumn',"type","pack_spec"];

+ 1 - 1
app/CommodityBarcode.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class CommodityBarcode extends Model
+class CommodityBarcode extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=['code','commodity_id','created_at'];

+ 1 - 1
app/Console/Commands/LogExpireDelete.php

@@ -46,6 +46,6 @@ class LogExpireDelete extends Command
     public function deleteLog(){
         $expire_duration=config('logging.expire_duration');//前150天
         $date=Carbon::now()->subDays($expire_duration)->format('Y-m-d');
-        DB::table('logs')->where('created_at','like',$date.'%')->delete();
+        DB::table('logs')->where('created_at','<',$date)->delete();
     }
 }

+ 17 - 0
app/Console/Commands/ModelMakeCommand.php

@@ -0,0 +1,17 @@
+<?php
+
+
+namespace App\Console\Commands;
+
+
+class ModelMakeCommand extends \Illuminate\Foundation\Console\ModelMakeCommand
+{
+    protected function getStub()
+    {
+        if ($this->option('pivot')) {
+            return parent::getStub();
+        }
+        return __DIR__ . '/stubs/model.stub';
+    }
+
+}

+ 1 - 0
app/Console/Commands/SyncBatchTask.php

@@ -34,6 +34,7 @@ class SyncBatchTask extends Command
 
     public function handle()
     {
+        sleep(rand(0,10));
         $this->disposeHeader();
         $this->disposeDetail();
     }

+ 65 - 57
app/Console/Commands/SyncWMSOrderTask.php

@@ -4,78 +4,92 @@ namespace App\Console\Commands;
 
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderService;
+use App\ValueStore;
 use Carbon\Carbon;
 use Illuminate\Console\Command;
+use Illuminate\Support\Facades\Cache;
 
 class SyncWMSOrderTask extends Command
 {
     /**
-     * The name and signature of the console command.
-     *
-     * @var string
+     * @var OrderService $service
      */
+    private $service;
     protected $signature = 'sync:order';
-
-    /**
-     * The console command description.
-     *
-     * @var string
-     */
+    private $last_start_key ;       // 上一次任务开始时间
+    private $last_end_key ;         // 上一次任务结束时间
+    private $last_err_key ;         // 上一次任务异常时间
+    private $restart;               // 重启时间
+    private $is_enabled;            // 是否开启
     protected $description = 'Command description';
-
-    /**
-     * Create a new command instance.
-     *
-     * @return void
-     */
     public function __construct()
     {
         parent::__construct();
+        $this->service = app('OrderService');
+    }
+    public function init()
+    {
+        $this->last_start_key = config('sync.order_sync.cache_prefix.last_start_at');
+        $this->last_end_key = config('sync.order_sync.cache_prefix.last_end_at');
+        $this->last_err_key = config('sync.order_sync.cache_prefix.last_err_at');
+        $this->restart = config('sync.order_sync.cache_prefix.restart');
+        $this->is_enabled= config('sync.order_sync.cache_prefix.enabled');
     }
-
-    /**
-     * Execute the console command.
-     */
     public function handle()
     {
-        $is_enabled= config('sync.order_sync.cache_prefix.enabled');
-        sleep(rand(5,10));
-        if($is_enabled=='false')return;
+        $this->init();
+        if($this->is_enabled=='false')return;
+        sleep(rand(2,3));
+        $start_time =  Cache::remember($this->last_start_key,null,function (){
+            return ValueStore::query()->firstOrCreate(['name'=>$this->last_start_key])->first()->value;
+        });
+        $end_time =  Cache::remember($this->last_end_key,null,function (){
+            return  ValueStore::query()->firstOrCreate(['name'=>$this->last_end_key])->first()->value;
+        });
+
+        $start = Carbon::now();
+        // 判断上一次任务异常了
+        // 第一次出现异常没有记录上任务结束时间
+        if(isset($start_time) && empty($end_time) && $start->diffInMinutes(Carbon::parse($start_time)) < $this->restart)return;
+        // 这次任务启动时间 距离上一次任务的一个启动时间 小于10
+        if(isset($start_time) && isset($end_time)
+            && Carbon::parse($end_time)->lt(Carbon::parse($start_time))
+            && $start->diffInMinutes(Carbon::parse($start_time)) < $this->restart)
+            return;
+
+        $start = (string)$start;
+        Cache::put($this->last_start_key,$start);
+        ValueStore::query()->where('name',$this->last_start_key)->update(['value'=>$start]);
         $this->syncCreatedOrder();
         $this->syncUpdatedOrder();
+        $end = (string)Carbon::now();
+        Cache::put($this->last_end_key,$end);
+        ValueStore::query()->where('name',$this->last_end_key)->update(['value'=>$end]);
     }
 
     public function syncCreatedOrder()
     {
         /**
-         * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
          * @var OrderService $orderService
          */
-        $newest         = config('sync.order_sync.cache_prefix.created_at');
-        $newest_list    = config('sync.order_sync.cache_prefix.newest_list');
+        $newest_key         = config('sync.order_sync.cache_prefix.created_at');
+        $newest_list_key    = config('sync.order_sync.cache_prefix.newest_list');
         $hasKey         = config('sync.order_sync.cache_prefix.newest_has');
         $prefixKey      = config('sync.order_sync.cache_prefix.newest');
         ini_set('memory_limit', '512M');
-        $orderService = app('OrderService');
-        $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
-
-        $last_date = $orderService->getOrderSyncAt($newest,'newest');                             // 获取时间点
-
-        $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($last_date);               // WMS订单
+         $last_date = $this->service->getOrderSyncAt($newest_key,'newest');                             // 获取创建时间点
+        $orderHeaders =  app('OracleDocOrderHeaderService')->getWMSOrderOnStartDate($last_date);               // WMS订单
         if($orderHeaders->count()==0)return;
-        $last_order = $orderHeaders->first();                                                           // 时间点靠后的
+        $last_order = $orderHeaders->first();                                                               // 时间点靠后的
         $newest_orders = $orderHeaders->where('addtime',$last_order->addtime);
-
-        $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$newest_list);                  // 对比缓存
-
+        $orderHeaders = $this->service->filterOrderByCache($orderHeaders,$newest_list_key);                  // 对比缓存
         if(count($newest_orders)>0 && count($orderHeaders) >0){
-
-            $orderService->syncOrder($orderHeaders);                                                //  同步订单
-            $orderService->cancelOrderCache($newest_list,$prefixKey);                                   //  清除缓存
-            $orderService->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list);              //  添加缓存
-            $orderService->setOrderSyncAt($newest,$last_order->addtime,count($orderHeaders)>0);   //  更新时间
+            $this->service->syncOrder($orderHeaders);                                                    //  同步订单
+            $this->service->cancelOrderCache($newest_list_key,$prefixKey);                                   //  清除缓存
+            $this->service->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list_key);              //  添加缓存
+            $this->service->setOrderSyncAt($newest_key,$last_order->addtime,count($orderHeaders)>0);   //  更新时间
         }
-
+        unset($orderHeaders,$newest_orders,$last_order);
     }
 
     public function syncUpdatedOrder()
@@ -84,31 +98,25 @@ class SyncWMSOrderTask extends Command
          * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
          * @var OrderService $orderService
          */
-        $renewal        = config('sync.order_sync.cache_prefix.updated_at');
-        $renewal_list   = config('sync.order_sync.cache_prefix.renewal_list');
+        $renewal_key        = config('sync.order_sync.cache_prefix.updated_at');
+        $renewal_list_key   = config('sync.order_sync.cache_prefix.renewal_list');
         $hasKey         = config('sync.order_sync.cache_prefix.renewal_has');
         $prefixKey      = config('sync.order_sync.cache_prefix.renewal');
         ini_set('memory_limit', '512M');
 
-        $orderService = app('OrderService');
-        $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
-
-        $last_date = $orderService->getOrderSyncAt($renewal,'renewal');                               // 获取时间点
-
-        $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnEditDate($last_date);                   // WMS订单
+        $last_date = $this->service->getOrderSyncAt($renewal_key,'renewal');                               // 获取更新时间点
+        $orderHeaders = app('OracleDocOrderHeaderService')->getWMSOrderOnEditDate($last_date);      // WMS订单
 
         if($orderHeaders->count()==0)return;
         $renewal_order = $orderHeaders->first();                                                            // 时间点靠后的
         $renewal_orders =  $orderHeaders->where('edittime',$renewal_order->edittime);
-
-        $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$renewal_list);                     // 对比缓存
-
+        $orderHeaders = $this->service->filterOrderByCache($orderHeaders,$renewal_list_key);                     // 对比缓存
         if(count($renewal_orders)>0 && count($orderHeaders)>0){
-
-            $orderService->syncOrder($orderHeaders);                                                    // 同步订单
-            $orderService->cancelOrderCache($renewal_list,$prefixKey);                                      // 清除缓存
-            $orderService->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list);                // 添加缓存
-            $orderService->setOrderSyncAt($renewal,$renewal_order->edittime,count($orderHeaders)>0);   // 更新时间
+            $this->service->syncOrder($orderHeaders);                                                    // 同步订单
+            $this->service->cancelOrderCache($renewal_list_key,$prefixKey);                                      // 清除缓存
+            $this->service->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list_key);                // 添加缓存
+            $this->service->setOrderSyncAt($renewal_key,$renewal_order->edittime,count($orderHeaders)>0);   // 更新时间
         }
+        unset($orderHeaders,$renewal_orders,$renewal_order);
     }
 }

+ 10 - 0
app/Console/Commands/stubs/model.stub

@@ -0,0 +1,10 @@
+<?php
+
+namespace {{ namespace }};
+
+use Illuminate\Database\Eloquent\Model;
+
+class {{ class }} extends ModelExtended
+{
+    //
+}

+ 6 - 2
app/Console/Kernel.php

@@ -14,6 +14,7 @@ use App\Console\Commands\TestTemp;
 use App\Console\Commands\WASSyncWMSOrderInformation;
 use Illuminate\Console\Scheduling\Schedule;
 use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
+use Illuminate\Foundation\Console\ModelMakeCommand;
 
 class Kernel extends ConsoleKernel
 {
@@ -51,8 +52,8 @@ class Kernel extends ConsoleKernel
         $schedule->command('createOwnerReport')->monthlyOn(1);
         $schedule->command('createOwnerBillReport')->monthlyOn(1);
         $schedule->command('createOwnerAreaReport')->monthlyOn(25);
-//        $schedule->command('sync:batch')->everyMinute();
-//        $schedule->command('sync:order')->everyMinute();
+        $schedule->command('sync:batch')->everyMinute();
+        $schedule->command('sync:order')->everyMinute();
     }
 
     /**
@@ -63,6 +64,9 @@ class Kernel extends ConsoleKernel
     protected function commands()
     {
         $this->load(__DIR__ . '/Commands');
+        $this->app->extend('command.model.make',function(ModelMakeCommand $base,$app){
+            return new \App\Console\Commands\ModelMakeCommand($app['files']);
+        });
         require base_path('routes/console.php');
     }
 }

+ 1 - 1
app/CustomField.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class CustomField extends Model
+class CustomField extends ModelExtended
 {
     protected $fillable=['table',
         'field',

+ 1 - 1
app/Customer.php

@@ -6,7 +6,7 @@ use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\HasMany;
 
-class Customer extends Model
+class Customer extends ModelExtended
 {
     use ModelTimeFormat;
 

+ 1 - 1
app/CustomerLog.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class CustomerLog extends Model
+class CustomerLog extends ModelExtended
 {
     use ModelTimeFormat;
 

+ 1 - 1
app/CustomerLogStatus.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class CustomerLogStatus extends Model
+class CustomerLogStatus extends ModelExtended
 {
     use ModelTimeFormat;
 

+ 1 - 1
app/CustomerTag.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class CustomerTag extends Model
+class CustomerTag extends ModelExtended
 {
     use ModelTimeFormat;
 

+ 1 - 1
app/Depository.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class Depository extends Model
+class Depository extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 15 - 0
app/Exceptions/ErrorException.php

@@ -0,0 +1,15 @@
+<?php
+
+
+namespace App\Exceptions;
+
+
+use Throwable;
+
+class ErrorException extends Exception
+{
+    public function __construct($message = "",  $code = 0, Throwable $previous = null)
+    {
+        parent::__construct($message,$type='error',$code, $previous);
+    }
+}

+ 16 - 0
app/Exceptions/Exception.php

@@ -0,0 +1,16 @@
+<?php
+
+
+namespace App\Exceptions;
+
+
+use Throwable;
+
+class Exception extends \Exception
+{
+        public function __construct($message = "",$type='error', $code = 0, Throwable $previous = null)
+        {
+            parent::__construct($message, $code, $previous);
+            $this['type']=$type;
+        }
+}

+ 16 - 0
app/Exceptions/FatalException.php

@@ -0,0 +1,16 @@
+<?php
+
+
+namespace App\Exceptions;
+
+
+use Throwable;
+
+class FatalException extends Exception
+{
+
+    public function __construct($message = "",  $code = 0, Throwable $previous = null)
+    {
+        parent::__construct($message,$type='fatal',$code, $previous);
+    }
+}

+ 65 - 11
app/Exceptions/Handler.php

@@ -3,11 +3,14 @@
 namespace App\Exceptions;
 
 use App\Http\Controllers\Controller;
+use App\Services\LogService;
 use Exception;
 use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
 use Illuminate\Http\Exceptions\HttpResponseException;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Validation\ValidationException;
 use Symfony\Component\HttpKernel\Exception\HttpException;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Throwable;
@@ -50,24 +53,75 @@ class Handler extends ExceptionHandler
      *
      * @param Request $request
      * @param Throwable $exception
-     * @return \Symfony\Component\HttpFoundation\Response
+     * @return \Symfony\Component\HttpFoundation\Response|void
      * @throws Throwable
      */
     public function render($request, Throwable $exception)
     {
+        $errMsg='';
         try{
-            if (method_exists($exception,'getStatusCode')) {
-            $code = $exception->getStatusCode();
-            Controller::logS('exception',$code,$exception->getTraceAsString().'|| '.$exception->getMessage().' ||'.json_encode($request));
-            switch ($code){
-                case 419:return response()->view('exception.login');
-                case 404:return response()->view('exception.404');
-                default: return response()->view('exception.default',compact('code'));
+            $type = $exception->type ?? 'error';
+            $errMsg=(function()use($exception){
+                return $errMsg=
+                    '异常: '
+                    .' code:'.(
+                    method_exists($exception,'getStatusCode')
+                        ?($exception->getStatusCode()??'')
+                        :'')
+                    .' errors:'.(
+                    method_exists($exception,'errors')
+                        ?(json_encode($exception->errors(),JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)??'')
+                        :'')
+                    .' message:'.(
+                    method_exists($exception,'getMessage')
+                        ?($exception->getMessage()??'')
+                        :'')
+                    .' trace:'.
+                    (method_exists($exception,'getTraceAsString')
+                        ?($exception->getTraceAsString()??'')
+                        :'');
+            })();
+            if($request->is("api/*")
+                && $exception instanceof ValidationException){
+                return response()->json($exception->errors(),200,[],JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
             }
+            if(strpos($exception->getMessage(),'This action is unauthorized')!==false){
+                return response()->view('exception.unauthorized');
             }
-            Controller::logS('exception',class_basename($exception),$exception->getTraceAsString().'|| ||'.json_encode($request));
-        }catch (\Exception $e){
-
+            if (method_exists($exception,'getStatusCode')) {
+                $code = $exception->getStatusCode();
+                switch ($code){
+                    case 419: $view='exception.login';break;
+                    case 404:$view='exception.404';break;
+                    default: $view='exception.default';break;
+                }
+                return response()->view($view,[
+                    'code'=> $code,
+                    'message'=>$exception->getMessage(),
+                ]);
+            }
+        }catch (\Exception $e){}finally{
+            list(
+                $className,
+                $functionName,
+                $tracesAll
+                )           =(function()use($exception){
+                $traces=method_exists($exception,'getTraceAsString')
+                    ?($exception->getTraceAsString()??'')
+                    :'';
+                if(!$traces)return '';
+                preg_match('/\#0.*?\: (.*?)-\>(.*?)\(/', $traces, $result);
+                return [$result[1]??'',$result[2]??'',$traces];
+            })();
+            LogService::log(
+                $className,
+                $functionName,
+                ($errMsg??'')
+                .'请求:'.json_encode($request->all())
+                .'调用堆栈:'.$tracesAll,
+                Auth::id()??'',
+                $type
+            );
         }
         return parent::render($request, $exception);
     }

+ 16 - 0
app/Exceptions/PanicException.php

@@ -0,0 +1,16 @@
+<?php
+
+
+namespace App\Exceptions;
+
+
+use Throwable;
+
+class PanicException extends Exception
+{
+
+    public function __construct($message = "", $code = 0, Throwable $previous = null)
+    {
+        parent::__construct($message,  $type='panic', $code,$previous = null);
+    }
+}

+ 16 - 0
app/Exceptions/WarningException.php

@@ -0,0 +1,16 @@
+<?php
+
+
+namespace App\Exceptions;
+
+
+use Throwable;
+
+class WarningException extends Exception
+{
+
+    public function __construct($message = "",  $code = 0, Throwable $previous = null)
+    {
+        parent::__construct($message,$type='warning',$code, $previous);
+    }
+}

+ 1 - 1
app/Feature.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class Feature extends Model
+class Feature extends ModelExtended
 {
     protected $fillable = [
         "type",     //类型

+ 1 - 0
app/Http/Controllers/Auth/LoginController.php

@@ -34,6 +34,7 @@ class LoginController extends Controller
      *
      * @var string
      */
+//    protected $redirectTo = '/control/panel/menu';
     protected $redirectTo = '/rejected/index/general';
 
     /**

+ 3 - 2
app/Http/Controllers/CitiesController.php

@@ -3,6 +3,8 @@
 namespace App\Http\Controllers;
 
 use App\City;
+use App\Http\Requests\ForeignHaiRobotic_taskUpdateRequest;
+use App\Http\Requests\TestAaRequest;
 use App\Province;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -11,7 +13,7 @@ use Illuminate\Support\Facades\Validator;
 
 class CitiesController extends Controller
 {
-    public function index()
+    public function index(ForeignHaiRobotic_taskUpdateRequest $request)
     {
         if(!Gate::allows('城市-查询')){ return redirect(url('/'));  }
         $cities=City::orderBy('id', 'DESC')->paginate(50);
@@ -25,7 +27,6 @@ class CitiesController extends Controller
         return view('maintenance.city.create',['provinces'=>$provinces]);
     }
 
-
     public function store(Request $request)
     {
         if(!Gate::allows('城市-录入')){ return redirect(url('/'));  }

+ 12 - 10
app/Http/Controllers/LogController.php

@@ -33,12 +33,13 @@ class LogController extends Controller
         //没有查询条件,默认展示最近50条
         if (!$request->has('created_at_start') &&
             !$request->has('created_at_end') &&
-            !$request->has('operation') &&
-            !$request->has('type') &&
+            !$request->has('class') &&
+            !$request->has('method') &&
             !$request->has('description') &&
             !$request->has("is_exception")
         ) {
             $logs = Log::query()
+                ->with('user:id,name')
                 ->orderBy('id', 'desc')
                 ->paginate(50);
             return view('maintenance.log.index', ['logs' => $logs]);
@@ -48,12 +49,12 @@ class LogController extends Controller
             session()->flash('warning', '请选择开始时间');
             return view('maintenance.log.index', ['logs' => null]);
         }
-        $query = Log::query();
-        if ($request->has('operation')) {
-            $query->where('operation', 'like', $request->operation . '%');
+        $query = Log::query()->with('user:id,name');
+        if ($request->has('class')) {
+            $query->where('class', 'like', $request['class'] . '%');
         }
-        if ($request->has('type')) {
-            $query->where('type', 'like', $request->type . '%');
+        if ($request->has('method')) {
+            $query->where('method', 'like', $request['method'] . '%');
         }
         if ($request->has('description')) {
             $str = $request->description;
@@ -69,11 +70,11 @@ class LogController extends Controller
         }
         if ($request->has("is_exception")){
             $query->where(function(Builder $query){
-                $query->where("type","like","ERROR%")->orWhere("type","like","EXCEPTION%");
+                $query->where("method","like","ERROR%")->orWhere("method","like","EXCEPTION%");
             });
         }
         $query->orderByDesc('id');
-        $logs = $query->paginate($request->paginate??50);
+        $logs = $query->with('user:id,name')->paginate($request->paginate??50);
         return view('maintenance.log.index', ['logs' => $logs]);
     }
 
@@ -81,10 +82,11 @@ class LogController extends Controller
      * Display the specified resource.
      *
      * @param Log $log
-     * @return Response
+     * @return Application|\Illuminate\Contracts\View\Factory|Response|\Illuminate\View\View
      */
     public function show(Log $log)
     {
+        $log->loadMissing('user:id,name');
         return view('maintenance.log.show', ['log' => $log]);
     }
 

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

@@ -330,8 +330,8 @@ class OrderIssueController extends Controller
         }
         $orderNos = $request->input('orderNos');
         $orderIssues =OrderIssue::query()->with('order')
-            ->whereHas('order',function($query) use ($orderNos){
-                $query->whereIn('code',$orderNos);
+            ->whereIn('order_id',function($query) use ($orderNos){
+                $query->from('orders')->select('id')->whereIn('code',$orderNos);
             })->get();
 
         if($orderIssues->count() == 0){

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

@@ -270,8 +270,8 @@ class PriceModelController extends Controller
             $service->insertRule($insert);
         }
         //录入中间表
-        /** @var OwnerPriceOperation $model */
-        if ($request->input("owner_id"))$model->ownerPriceOperationOwners()->sync($request->input("owner_id"));
+        /** @var OwnerPriceOperation $ownerPriceOperation */
+        if ($request->input("owner_id"))$ownerPriceOperation->ownerPriceOperationOwners()->sync($request->input("owner_id"));
         LogService::log(__METHOD__,"计费模型-录入作业计费",json_encode($request->input(),JSON_UNESCAPED_UNICODE));
         return response()->redirectTo("maintenance/priceModel/operation")->with("successTip","创建“".$request->input("name")."”成功");
     }

+ 1 - 6
app/Http/Controllers/StoreController.php

@@ -4,9 +4,6 @@ namespace App\Http\Controllers;
 
 use App\Depository;
 use App\Owner;
-use App\Services\LogService;
-use App\Services\OracleDocAsnDetailService;
-use App\Services\OracleDocAsnHerderService;
 use App\Services\StoreService;
 use App\Store;
 use App\StoreItems;
@@ -23,10 +20,8 @@ use Illuminate\Routing\Redirector;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Validator;
-use Illuminate\Support\Str;
 use Illuminate\View\View;
 use App\Http\Controllers\Api\thirdPart\flux\StoreController as FStoreController;
-use Ramsey\Uuid\Uuid;
 
 class StoreController extends Controller
 {
@@ -37,7 +32,7 @@ class StoreController extends Controller
         $storeService=app(StoreService::class);
         $stores=$storeService->paginate($request->input());
         $warehouses=Warehouse::query()->get();
-        $owners=Owner::query()->select('id','name')->get();
+        $owners=app("OwnerService")->getIntersectPermitting();
         return view('store.inStorage.index',compact('stores','warehouses','owners'));
     }
     /**

+ 454 - 272
app/Http/Controllers/TestController.php

@@ -6,20 +6,24 @@ namespace App\Http\Controllers;
 use App\Authority;
 use App\Batch;
 use App\Carrier;
+use App\City;
 use App\Commodity;
 use App\CommodityBarcode;
 use App\Console\Commands\SyncWMSOrderTask;
 use App\Events\CancelOrder;
+use App\Http\Requests\ForeignHaiRobotic_taskUpdateRequest;
+use App\Http\Requests\TestAaRequest;
 use App\Imports\OrderTrackingImport;
 use App\InventoryAccount;
 use App\LaborReport;
 use App\Log;
 use App\Logistic;
+use App\Menu;
 use App\OracleActAllocationDetails;
+use App\OracleBasSKU;
 use App\OracleDOCOrderHeader;
 use App\OracleDocOrderPackingSummary;
 use App\OracleDOCWaveDetails;
-use App\OracleDOCWaveHeader;
 use App\Order;
 use App\OrderBin;
 use App\OrderCommodity;
@@ -35,6 +39,7 @@ use App\ProcessStatistic;
 use App\RejectedBill;
 use App\RejectedBillItem;
 use App\Services\CacheService;
+use App\Services\CommodityService;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\Services\DocWaveHeaderService;
@@ -44,6 +49,7 @@ use App\Services\LogisticService;
 use App\Services\LogService;
 use App\Services\OracleDocAsnHerderService;
 use App\Services\OracleDOCOrderHeaderService;
+use App\Services\OrderCommodityService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
 use App\Services\OrderTrackingOwnerService;
@@ -53,21 +59,26 @@ use App\Services\ShopService;
 use App\Services\StoreService;
 use App\Services\WarehouseService;
 use App\Store;
+use App\StationTaskBatch;
 use App\StoreCheckingReceiveItem;
 use App\StoreItems;
 use App\User;
+use App\ValueStore;
 use App\Warehouse;
 use App\Waybill;
 use App\WaybillPriceModel;
 use Carbon\Carbon;
+use ChangeColumnOrderIdToOrderIssues;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Str;
 use Maatwebsite\Excel\Facades\Excel;
+use PhpMyAdmin\Server\Status\Data;
 use Ramsey\Collection\Collection;
 use Zttp\Zttp;
 
@@ -85,24 +96,26 @@ class TestController extends Controller
     {
         return call_user_func([$this, $method], $request);
     }
-    public function updateInventory(){
-        $inventoryAccounts=InventoryAccount::query()->get();
+
+    public function updateInventory()
+    {
+        $inventoryAccounts = InventoryAccount::query()->get();
         $updateParams = [[
-            'id','processed','ignored','updated_at'
+            'id', 'processed', 'ignored', 'updated_at'
         ]];
-        $updated_at=Carbon::now()->toDateTimeString();
-        foreach ($inventoryAccounts as $inventoryAccount){
-            if ($inventoryAccount->getIgnoredAmount()>0){
+        $updated_at = Carbon::now()->toDateTimeString();
+        foreach ($inventoryAccounts as $inventoryAccount) {
+            if ($inventoryAccount->getIgnoredAmount() > 0) {
                 $updateParams[] = [
-                    'id'=>$inventoryAccount->id,
-                    'processed'=>$inventoryAccount->getProcessedAmount(),
+                    'id' => $inventoryAccount->id,
+                    'processed' => $inventoryAccount->getProcessedAmount(),
                     'ignored' => $inventoryAccount->getIgnoredAmount(),
-                    'updated_at'=>$updated_at,
+                    'updated_at' => $updated_at,
                 ];
             }
         }
-        if(count($updateParams) > 1){
-            app(BatchUpdateService::class)->batchUpdate('inventory_accounts',$updateParams);
+        if (count($updateParams) > 1) {
+            app(BatchUpdateService::class)->batchUpdate('inventory_accounts', $updateParams);
         }
     }
     public function zzd(Request $request)
@@ -114,15 +127,17 @@ class TestController extends Controller
     {
         @fsockopen('127.0.0.1,"9722','');
     }
-    public function mergeCarrier(){
+
+    public function mergeCarrier()
+    {
         $carriers = Carrier::query()->get();
         $logistics = [];
         $map = [];
-        foreach ($carriers as $carrier){
+        foreach ($carriers as $carrier) {
             $map[$carrier->name] = $carrier->id;
-            $lo = Logistic::query()->where("name",$carrier->name)->first();
-            if ($lo){
-                if ($lo->type == '快递'){
+            $lo = Logistic::query()->where("name", $carrier->name)->first();
+            if ($lo) {
+                if ($lo->type == '快递') {
 //                    $lo->update(["type"=>"全部"]);$lo->save();
                 }
                 continue;
@@ -130,52 +145,54 @@ class TestController extends Controller
             $logistics[] = [
                 "name" => $carrier->name,
                 'mobile' => $carrier->mobile,
-                'delivery_fee'=> $carrier->delivery_fee,
-                'remark'=> $carrier->remark,
+                'delivery_fee' => $carrier->delivery_fee,
+                'remark' => $carrier->remark,
                 "type" => "物流"
             ];
         }
         Logistic::query()->insert($logistics);
-        $ls = Logistic::query()->where("type","物流")->get();
+        $ls = Logistic::query()->where("type", "物流")->get();
         $result = [];
-        foreach ($ls as $l)
-        {
-            if (isset($map[$l->name]))$result[$map[$l->name]] = $l->id;
+        foreach ($ls as $l) {
+            if (isset($map[$l->name])) $result[$map[$l->name]] = $l->id;
         }
-        LogService::log(__METHOD__,"同步承运商",json_encode($result));
-        foreach ($result as $tag => $val){
-            Waybill::query()->where("logistic_id",$tag)->update([
+        LogService::log(__METHOD__, "同步承运商", json_encode($result));
+        foreach ($result as $tag => $val) {
+            Waybill::query()->where("logistic_id", $tag)->update([
                 "logistic_id" => $val
             ]);
-            WaybillPriceModel::query()->where("logistic_id",$tag)->update([
+            WaybillPriceModel::query()->where("logistic_id", $tag)->update([
                 "logistic_id" => $val
             ]);
-            DB::table("logistic_user")->where("logistic_id",$tag)->update([
+            DB::table("logistic_user")->where("logistic_id", $tag)->update([
                 "logistic_id" => $val
             ]);
         }
     }
-    public function updateLaborRemark(){
-        $laborReports=LaborReport::query()->with(['remarks'=>function($query){
+
+    public function updateLaborRemark()
+    {
+        $laborReports = LaborReport::query()->with(['remarks' => function ($query) {
             return $query->whereNotNull('mark');
         }])->get();
         $updateParams = [[
-            'id','remark','updated_at'
+            'id', 'remark', 'updated_at'
         ]];
-        $updated_at=Carbon::now()->toDateTimeString();
-        foreach ($laborReports as $laborReport){
-            if ($laborReport->remarks){
+        $updated_at = Carbon::now()->toDateTimeString();
+        foreach ($laborReports as $laborReport) {
+            if ($laborReport->remarks) {
                 $updateParams[] = [
-                    'id'=>$laborReport->id,
-                    'remark'=>$laborReport->remarks->mark,
-                    'updated_at'=>$updated_at,
+                    'id' => $laborReport->id,
+                    'remark' => $laborReport->remarks->mark,
+                    'updated_at' => $updated_at,
                 ];
             }
         }
-        if(count($updateParams) > 1){
-            app(BatchUpdateService::class)->batchUpdate('labor_reports',$updateParams);
+        if (count($updateParams) > 1) {
+            app(BatchUpdateService::class)->batchUpdate('labor_reports', $updateParams);
         }
     }
+
     function packageFromLog(Request $request)
     { //x        $packagesBatch=Package::where('batch_number',$batch_number)->first();
         ini_set('max_execution_time', 2500);
@@ -202,6 +219,7 @@ class TestController extends Controller
         });
         dd($uploaded . '/' . $count);
     }
+
     function issues()
     {
         /** @var OrderPackageService $orderPackageService */
@@ -214,16 +232,19 @@ class TestController extends Controller
             $orderPackageService->createdByOrder($item);
         }
     }
+
     function tlog(Request $request)
     {
-        app('LogService')->log(__METHOD__,'cczdelme'.__FUNCTION__,json_encode($request->all()),null);
+        app('LogService')->log(__METHOD__, 'cczdelme' . __FUNCTION__, json_encode($request->all()), null);
     }
+
     function setCache(Request $request)
     {
         $today = now();
         Cache::put('storedTest', $today);
         return "cacheing:'$today'<script>localStorage.setItem('storedTest','{$today}')</script>";
     }
+
     function getCache(Request $request)
     {
         $cache = Cache::get('storedTest');
@@ -232,30 +253,11 @@ class TestController extends Controller
 
     function t1(Request $request)
     {
-        {
-            $username = config('database.connections.oracle.username');
-            $password = config('database.connections.oracle.password');
-            $host = config('database.connections.oracle.host');
-            $service_name = config('database.connections.oracle.service_name');
-            $conn = oci_connect($username, $password, $host . '/' . $service_name); //连接oracle数据库
-            $IN_WarehouseID = '';
-            $IN_TraceID = '';
-            $IN_WavenNo = '';
-            $IN_UserID = '';
-            $IN_Language = '';
-            $OUT_Return_Code = '';
-            $sql_sp = "begin SPCUS_EDI_WCS001(:IN_WarehouseID,:IN_Process_Action_C,:IN_Process_By_C,
-        :IN_WaveNO_C,:IN_OrderNO_C,:IN_OrderLineNO_C,:IN_AllocationDetailsID,:IN_Language,:IN_UserID,:OUT_Return_Code); end;";
-            $stmt = oci_parse($conn, $sql_sp);
-            oci_bind_by_name($stmt, ':IN_Warehouse', $IN_WarehouseID);
-            oci_bind_by_name($stmt, ':IN_TraceID', $IN_TraceID);
-            oci_bind_by_name($stmt, ':IN_WavenNo', $IN_WavenNo);
-            oci_bind_by_name($stmt, ':IN_Language', $IN_Language);
-            oci_bind_by_name($stmt, ':IN_UserID', $IN_UserID);
-            oci_bind_by_name($stmt, ':OUT_Return_Code', $OUT_Return_Code);
-            return oci_execute($stmt);
-        }
+        $user=City::query()->first();
+        $user['created_at'] = '2020-12-23';
+        $user->save();
     }
+
     function packageT(Request $request)
     {
         $package = Package::where('created_at', '<', '2020-07-08')->whereNotNull('logistic_number')->first();
@@ -528,56 +530,57 @@ class TestController extends Controller
         }
     }
 
-    public function test5(){
-        ini_set('max_execution_time',2500);
-        ini_set('memory_limit','1526M');
+    public function test5()
+    {
+        ini_set('max_execution_time', 2500);
+        ini_set('memory_limit', '1526M');
         //清理冗余条码
 //        $this->cleanBarcode();
 
-        while(true){
+        while (true) {
             $toDay = Carbon::now();
             $skus = DB::select(DB::raw('select sku from commodities group by sku,owner_id having count(*)>1 limit 500 '));
-            $skus = array_column($skus,'sku');
+            $skus = array_column($skus, 'sku');
 
-            $commodities = Commodity::query()->with('barcodes')->whereNotNull('owner_id')->whereIn('sku',$skus)->get();
+            $commodities = Commodity::query()->with('barcodes')->whereNotNull('owner_id')->whereIn('sku', $skus)->get();
 
 
-            if (count($commodities) < 1)return "SUCCESS";
+            if (count($commodities) < 1) return "SUCCESS";
             $commodityMap = [];
             $commodityDel = [];
             $commodityTag = [];
             $commodityBar = [];
             $createBarcodes = [];
             $logs = [];
-            foreach ($commodities as $commodity){
-                if ($commodityMap[$commodity->sku.'_'.$commodity->owner_id] ?? false){
-                    $codes = $commodity->barcodes ? array_column($commodity->barcodes->toArray(),'code') : [];
+            foreach ($commodities as $commodity) {
+                if ($commodityMap[$commodity->sku . '_' . $commodity->owner_id] ?? false) {
+                    $codes = $commodity->barcodes ? array_column($commodity->barcodes->toArray(), 'code') : [];
                     $logs[] = [
                         'id' => $commodity->id,
                         'sku' => $commodity->sku,
-                        'owner_id'=>$commodity->owner_id,
-                        'code'=>$codes,
+                        'owner_id' => $commodity->owner_id,
+                        'code' => $codes,
                     ];
                     $commodityDel[] = $commodity->id;
-                    $commodityTag[$commodity->id] = $commodityMap[$commodity->sku.'_'.$commodity->owner_id];
+                    $commodityTag[$commodity->id] = $commodityMap[$commodity->sku . '_' . $commodity->owner_id];
 
-                    $arr = array_diff($codes,$commodityBar[$commodity->sku.'_'.$commodity->owner_id]);
-                    foreach ($arr as $code){
-                        if (!$code)continue;
+                    $arr = array_diff($codes, $commodityBar[$commodity->sku . '_' . $commodity->owner_id]);
+                    foreach ($arr as $code) {
+                        if (!$code) continue;
                         $createBarcodes[] = [
                             'code' => $code,
-                            'commodity_id' => $commodityMap[$commodity->sku.'_'.$commodity->owner_id],
+                            'commodity_id' => $commodityMap[$commodity->sku . '_' . $commodity->owner_id],
                             'created_at' => $toDay,
                         ];
                     }
-                }else{
-                    $commodityMap[$commodity->sku.'_'.$commodity->owner_id] = $commodity->id;
-                    $commodityBar[$commodity->sku.'_'.$commodity->owner_id] = $commodity->barcodes ? array_column($commodity->barcodes->toArray(),'code') : [];
+                } else {
+                    $commodityMap[$commodity->sku . '_' . $commodity->owner_id] = $commodity->id;
+                    $commodityBar[$commodity->sku . '_' . $commodity->owner_id] = $commodity->barcodes ? array_column($commodity->barcodes->toArray(), 'code') : [];
                 }
             }
-            dd($commodityMap,$commodityDel,$commodityTag);
-            app('LogService')->log(__METHOD__,'清理商品',json_encode($logs,JSON_UNESCAPED_UNICODE));
-            app('LogService')->log(__METHOD__,'重新分配商品',json_encode($commodityTag,JSON_UNESCAPED_UNICODE));
+            dd($commodityMap, $commodityDel, $commodityTag);
+            app('LogService')->log(__METHOD__, '清理商品', json_encode($logs, JSON_UNESCAPED_UNICODE));
+            app('LogService')->log(__METHOD__, '重新分配商品', json_encode($commodityTag, JSON_UNESCAPED_UNICODE));
 
             app('InventoryAccountMissionService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新库存盘点任务
             app('InventoryCompareService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新库存对比
@@ -586,13 +589,14 @@ class TestController extends Controller
             app('StoreCheckingReceiveItemService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新入库盘收一体
             app('OrderPackageCommoditiesService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新订单商品
 
-            app('LogService')->log(__METHOD__,'删除商品与对应条码',json_encode($commodityDel,JSON_UNESCAPED_UNICODE));
-            CommodityBarcode::query()->whereIn('commodity_id',$commodityDel)->delete();
+            app('LogService')->log(__METHOD__, '删除商品与对应条码', json_encode($commodityDel, JSON_UNESCAPED_UNICODE));
+            CommodityBarcode::query()->whereIn('commodity_id', $commodityDel)->delete();
             Commodity::destroy($commodityDel);
         }
     }
 
-    private function cleanBarcode(){
+    private function cleanBarcode()
+    {
 
         $logCommodityBarcodes = CommodityBarcode::query()->where('code', "")->get();
         if (count($logCommodityBarcodes) > 0) app('LogService')->log(__METHOD__, "纠正商品-删除空条码", json_encode($logCommodityBarcodes, JSON_UNESCAPED_UNICODE));
@@ -613,30 +617,31 @@ where (c.code,c.commodity_id) in (select code,commodity_id from commodity_barcod
         CommodityBarcode::destroy($barcodeDelete);
     }
 
-    private function multiCodes(){
+    private function multiCodes()
+    {
 
-        $barcode='BG10B1014C002100';
-        $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
-            $query->where('code',$barcode);
-        })->where('owner_id',4)->first();
+        $barcode = 'BG10B1014C002100';
+        $commodity = Commodity::whereHas('barcodes', function (Builder $query) use ($barcode) {
+            $query->where('code', $barcode);
+        })->where('owner_id', 4)->first();
         $codes = $commodity->barcodes->map(function ($barcode) {
-            return $barcode->code??'';
+            return $barcode->code ?? '';
         });
-        foreach($codes as $code){
-            $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
-                $query->where('code',$barcode);
-            })->where('owner_id',4)->get();
+        foreach ($codes as $code) {
+            $commodity = Commodity::whereHas('barcodes', function (Builder $query) use ($barcode) {
+                $query->where('code', $barcode);
+            })->where('owner_id', 4)->get();
             dump($commodity);
         }
         die();
-        $commodityBuilder=Commodity::query();
-        $commodityBuilder->where('owner_id',4)->first();
-            $commodityBuilder->whereHas('barcodes', function (Builder $query)use($barcode,$codes){
-                foreach($codes as $code){
-                    $query->orWhere('code',$code);
-                }
-            });
-        dd($commodity, $codes,$commodityBuilder->get());
+        $commodityBuilder = Commodity::query();
+        $commodityBuilder->where('owner_id', 4)->first();
+        $commodityBuilder->whereHas('barcodes', function (Builder $query) use ($barcode, $codes) {
+            foreach ($codes as $code) {
+                $query->orWhere('code', $code);
+            }
+        });
+        dd($commodity, $codes, $commodityBuilder->get());
     }
 
     public function correctCommodity()
@@ -703,7 +708,7 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
             }
             $updateCommodities[$del->commodity_id] = $target->commodity_id;
         }
-        if (count($updateCommodities) > 0){
+        if (count($updateCommodities) > 0) {
             app('InventoryAccountMissionService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新库存盘点任务
             app('InventoryCompareService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新库存对比
             app('InventoryDailyLogService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新库存每日记录
@@ -725,6 +730,7 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
 
         Commodity::destroy($deleteCommodities);
     }
+
     /*1*/
     function socket(Request $request)
     {/**/
@@ -786,23 +792,26 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     {
         /** @var CacheService $cacheService */
         $cacheService = app('CacheService');
-        $authorities=$cacheService->getOrExecute('userxx',function (){
+        $authorities = $cacheService->getOrExecute('userxx', function () {
             return Authority::with('roles')->get();
         });
         dd($authorities);
     }
+
     public function output2()
     {
         dump(Cache::get('aa'));
         Cache::put('aa', '2223', 5);
     }
+
     public function usage()
     {
         dd(Request::all());
     }
+
     public function relating()
     {
-        dd(OrderIssue::query()->where('id',182)->paginate()->total());
+        dd(OrderIssue::query()->where('id', 182)->paginate()->total());
     }
 
     public function updateOrdersWarehouse()
@@ -818,10 +827,11 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $warehouse = Warehouse::query()->get();
         $warehouse_map = $dataHandlerService->dataHeader(['code'], $warehouse);
         for ($i = 0; $i < $count; $i += $page) {
-            $min = $i;$max = $i + $page;
+            $min = $i;
+            $max = $i + $page;
             $orders = Order::query()->where('id', '>=', $min)->where('id', '<=', $max)->get();
             $orderNos = array_diff(array_unique(data_get($orders, '*.code')), ['', ' ', '*', null]);
-            if (count($orderNos)==0) continue;
+            if (count($orderNos) == 0) continue;
             /** @var Collection $orderHeaders */
             $orderHeaders = OracleDOCOrderHeader::query()->whereIn('orderno', $orderNos)->get();
             if ($orderHeaders->count() == 0) continue;
@@ -847,87 +857,41 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     public function syncSendOrder()
     {
         $order_issues = OrderIssue::query()->whereNotNull('second_client_no')->get();
-        $client_nos = data_get($order_issues,'*.second_client_no');
-        $orderHeaders = OracleDOCOrderHeader::query()->selectRaw(implode(',',OracleDOCOrderHeaderService::$columns))
-            ->whereIn('SOReference1',$client_nos)
-            ->with(['oracleBASCustomer'=>function($query){
+        $client_nos = data_get($order_issues, '*.second_client_no');
+        $orderHeaders = OracleDOCOrderHeader::query()->selectRaw(implode(',', OracleDOCOrderHeaderService::$columns))
+            ->whereIn('SOReference1', $client_nos)
+            ->with(['oracleBASCustomer' => function ($query) {
                 $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
-            },'oracleDOCOrderDetails'=>function($query){
+            }, 'oracleDOCOrderDetails' => function ($query) {
                 $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered');
-            }, 'actAllocationDetails'=>function($query){
+            }, 'actAllocationDetails' => function ($query) {
                 $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID');
-            },'oracleBASCode'=>function($query){
+            }, 'oracleBASCode' => function ($query) {
                 $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
             }])
             ->get();
         $service = app('OrderIssueService');
         $service->updateByWmsOrders($orderHeaders);
     }
-    public function testCollectMethod()
-    {
-        $startDate=Carbon::parse('2020-11-11 23:59:59')->subSeconds(65)->format('Y-m-d H:i:s');
-        $asnHerders=app(OracleDocAsnHerderService::class)->getWmsAsnOnStartDateCreate($startDate);
-        if ($asnHerders->isEmpty())return null;
-        /**
-         * @var OwnerService $ownerService
-         * @var WarehouseService $wareHouseService
-         */
-        $ownerService = app(OwnerService::class);
-        $owners=$ownerService->getByWmsOrders($asnHerders);
-        $wareHouseService=app(WarehouseService::class);
-        $warehouses=$wareHouseService->getByWms($asnHerders);
-        foreach ($owners as $owner) {
-            $owners_code_map[$owner->code] = $owner;
-        }
-        foreach ($warehouses as $warehouse) {
-            $warehouses_code_map[$warehouse->code] = $warehouse;
-        }
-        var_dump('createStoreParam_start',Carbon::now());
-        $params=app(StoreService::class)->getParamsByAsnHeader($asnHerders,$owners_code_map,$warehouses_code_map);
-        var_dump('createStoreParam_end',Carbon::now());
-
-        var_dump('insertStore_start',Carbon::now());
-        if(count($params)> 0){
-            //app(StoreService::class)->insertStore($params);
-            DB::table('stores')->insert($params);
-        }
-        var_dump('insertStore_end',Carbon::now());
-    }
-    public function testMethodSecond(){
-        $param=[
-            "asn_code" => "ASN2011120516",
-            "warehouse_id" => 2,
-            "owner_id" => 35,
-            "stored_method" => "退货入库",
-            "status" => "订单创建",
-            "remark" => null,
-            "created_at" => "2020-11-12 14:12:42",
-            "updated_at" => "2020-11-12 14:12:42",
-            ];
-        var_dump('start',Carbon::now());
-        //Store::query()->insert($param);
-        app(StoreService::class)->insertStore($param);
-        var_dump('end',Carbon::now());
-    }
 
     public function changeOrder()
     {
         /**
          * @var OrderService $orderService
          */
-        $carbon =Carbon::now()->subMinutes(30);
-        var_dump('$orderHeader',new Carbon());
-        $orderHeader_start = OracleDOCOrderHeader::query()->selectRaw(implode(',',OracleDOCOrderHeaderService::$columns))
-            ->with(['oracleBASCustomer'=>function($query){
+        $carbon = Carbon::now()->subMinutes(30);
+        var_dump('$orderHeader', new Carbon());
+        $orderHeader_start = OracleDOCOrderHeader::query()->selectRaw(implode(',', OracleDOCOrderHeaderService::$columns))
+            ->with(['oracleBASCustomer' => function ($query) {
                 $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
-            },'oracleDOCOrderDetails'=>function($query){
+            }, 'oracleDOCOrderDetails' => function ($query) {
                 $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered');
-            }, 'actAllocationDetails'=>function($query){
+            }, 'actAllocationDetails' => function ($query) {
                 $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
-            },'oracleBASCode'=>function($query){
+            }, 'oracleBASCode' => function ($query) {
                 $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
             }])
-            ->where('DOC_Order_Header.addTime','>=',$carbon)
+            ->where('DOC_Order_Header.addTime', '>=', $carbon)
 //            ->where('DOC_Order_Header.editTime','>=',$carbon)
             ->get();
         var_dump((string)Carbon::now());
@@ -939,74 +903,79 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
 //      orderService  getCreateOrderModelsByWMSOrderHeaders
     }
 
-    public function testOrderPackages(){
+    public function testOrderPackages()
+    {
         $batch_number = 'W201114000104';
         $weight = 0.3;
-        OrderPackage::createPackagesFromBatchCode($batch_number,$weight);
+        OrderPackage::createPackagesFromBatchCode($batch_number, $weight);
     }
 
-    public function view(){
+    public function view()
+    {
         return view('test');
     }
 
-    public function cleanOrderRepeat(){
+    public function cleanOrderRepeat()
+    {
 
-        ini_set('max_execution_time',6500);
-        ini_set('memory_limit','1526M');
-        for($i=0;true;$i++){
-            $orders_repeating=Order::query()
+        ini_set('max_execution_time', 6500);
+        ini_set('memory_limit', '1526M');
+        for ($i = 0; true; $i++) {
+            $orders_repeating = Order::query()
                 ->selectRaw('count(*) as count, code, id')
                 ->whereNotNull('code')
                 ->groupBy('code')
                 ->having('count', '>', 1)
                 ->limit(100)
                 ->get();
-            if($orders_repeating->count()==0)break;
-            $orders_repeating->each(function ($order){
-                $code_repeating=$order['code'];
-                $orders_toCombine=Order::query()
-                    ->where('code',$code_repeating)
+            if ($orders_repeating->count() == 0) break;
+            $orders_repeating->each(function ($order) {
+                $code_repeating = $order['code'];
+                $orders_toCombine = Order::query()
+                    ->where('code', $code_repeating)
                     ->orderByDesc('updated_at')
                     ->get();
-                $orderId_unique=(function()use($orders_toCombine){
-                    $order_toLive=$orders_toCombine->first();
-                    foreach($orders_toCombine as $key=>$order_toEliminate){
-                        if($key==0)continue;
-                        if(!$order_toLive['batch_id'])$order_toLive['batch_id']=$order_toEliminate['batch_id'];
-                        if(!$order_toLive['owner_id'])$order_toLive['owner_id']=$order_toEliminate['owner_id'];
-                        if(!$order_toLive['status'])$order_toLive['status']=$order_toEliminate['status'];
-                        if(!$order_toLive['created_at'])$order_toLive['created_at']=$order_toEliminate['created_at'];
-                        if(!$order_toLive['code'])$order_toLive['code']=$order_toEliminate['code'];
-                        if(!$order_toLive['shop_id'])$order_toLive['shop_id']=$order_toEliminate['shop_id'];
-                        if(!$order_toLive['owner_id'])$order_toLive['owner_id']=$order_toEliminate['owner_id'];
-                        if(!$order_toLive['client_code'])$order_toLive['client_code']=$order_toEliminate['client_code'];
-                        if(!$order_toLive['logistic_id'])$order_toLive['logistic_id']=$order_toEliminate['logistic_id'];
-                        if(!$order_toLive['consignee_name'])$order_toLive['consignee_name']=$order_toEliminate['consignee_name'];
-                        if(!$order_toLive['consignee_phone'])$order_toLive['consignee_phone']=$order_toEliminate['consignee_phone'];
-                        if(!$order_toLive['province'])$order_toLive['province']=$order_toEliminate['province'];
-                        if(!$order_toLive['city'])$order_toLive['city']=$order_toEliminate['city'];
-                        if(!$order_toLive['district'])$order_toLive['district']=$order_toEliminate['district'];
-                        if(!$order_toLive['address'])$order_toLive['address']=$order_toEliminate['address'];
-                        if(!$order_toLive['wms_status'])$order_toLive['wms_status']=$order_toEliminate['wms_status'];
-                        if(!$order_toLive['status'])$order_toLive['status']=$order_toEliminate['status'];
-                        if(!$order_toLive['warehouse_id'])$order_toLive['warehouse_id']=$order_toEliminate['warehouse_id'];
-                        if(!$order_toLive['wms_edittime'])$order_toLive['wms_edittime']=$order_toEliminate['wms_edittime'];
+                $orderId_unique = (function () use ($orders_toCombine) {
+                    $order_toLive = $orders_toCombine->first();
+                    foreach ($orders_toCombine as $key => $order_toEliminate) {
+                        if ($key == 0) continue;
+                        if (!$order_toLive['batch_id']) $order_toLive['batch_id'] = $order_toEliminate['batch_id'];
+                        if (!$order_toLive['owner_id']) $order_toLive['owner_id'] = $order_toEliminate['owner_id'];
+                        if (!$order_toLive['status']) $order_toLive['status'] = $order_toEliminate['status'];
+                        if (!$order_toLive['created_at']) $order_toLive['created_at'] = $order_toEliminate['created_at'];
+                        if (!$order_toLive['code']) $order_toLive['code'] = $order_toEliminate['code'];
+                        if (!$order_toLive['shop_id']) $order_toLive['shop_id'] = $order_toEliminate['shop_id'];
+                        if (!$order_toLive['owner_id']) $order_toLive['owner_id'] = $order_toEliminate['owner_id'];
+                        if (!$order_toLive['client_code']) $order_toLive['client_code'] = $order_toEliminate['client_code'];
+                        if (!$order_toLive['logistic_id']) $order_toLive['logistic_id'] = $order_toEliminate['logistic_id'];
+                        if (!$order_toLive['consignee_name']) $order_toLive['consignee_name'] = $order_toEliminate['consignee_name'];
+                        if (!$order_toLive['consignee_phone']) $order_toLive['consignee_phone'] = $order_toEliminate['consignee_phone'];
+                        if (!$order_toLive['province']) $order_toLive['province'] = $order_toEliminate['province'];
+                        if (!$order_toLive['city']) $order_toLive['city'] = $order_toEliminate['city'];
+                        if (!$order_toLive['district']) $order_toLive['district'] = $order_toEliminate['district'];
+                        if (!$order_toLive['address']) $order_toLive['address'] = $order_toEliminate['address'];
+                        if (!$order_toLive['wms_status']) $order_toLive['wms_status'] = $order_toEliminate['wms_status'];
+                        if (!$order_toLive['status']) $order_toLive['status'] = $order_toEliminate['status'];
+                        if (!$order_toLive['warehouse_id']) $order_toLive['warehouse_id'] = $order_toEliminate['warehouse_id'];
+                        if (!$order_toLive['wms_edittime']) $order_toLive['wms_edittime'] = $order_toEliminate['wms_edittime'];
                     }
                     $order_toLive->save();
                     return $order_toLive['id'];
                 })();
-                $orderIds_toRemove=(function()use($orders_toCombine){
+                $orderIds_toRemove = (function () use ($orders_toCombine) {
                     $orders_toCombine->shift();
-                    return $orders_toCombine->map(function($order){return $order['id'];});
+                    return $orders_toCombine->map(function ($order) {
+                        return $order['id'];
+                    });
                 })();
-                OrderPackage::query()->whereIn('order_id',$orderIds_toRemove)->update(['order_id'=>$orderId_unique]);
-                OrderIssue::query()->whereIn('order_id',$orderIds_toRemove)->update(['order_id'=>$orderId_unique]);
-                OrderCommodity::query()->whereIn('order_id',$orderIds_toRemove)->update(['order_id'=>$orderId_unique]);
-                OrderBin::query()->whereIn('order_id',$orderIds_toRemove)->update(['order_id'=>$orderId_unique]);
+                OrderPackage::query()->whereIn('order_id', $orderIds_toRemove)->update(['order_id' => $orderId_unique]);
+                OrderIssue::query()->whereIn('order_id', $orderIds_toRemove)->update(['order_id' => $orderId_unique]);
+                OrderCommodity::query()->whereIn('order_id', $orderIds_toRemove)->update(['order_id' => $orderId_unique]);
+                OrderBin::query()->whereIn('order_id', $orderIds_toRemove)->update(['order_id' => $orderId_unique]);
                 Order::destroy($orderIds_toRemove);
-                app('LogService')->log(__METHOD__,__FUNCTION__,'orders_toCombine:'.json_encode($orderIds_toRemove).'|toBe OrderId: '.json_encode($orderId_unique));
+                app('LogService')->log(__METHOD__, __FUNCTION__, 'orders_toCombine:' . json_encode($orderIds_toRemove) . '|toBe OrderId: ' . json_encode($orderId_unique));
             });
-            app('LogService')->log(__METHOD__,__FUNCTION__,'orders_repeating:'.$orders_repeating->toJson());
+            app('LogService')->log(__METHOD__, __FUNCTION__, 'orders_repeating:' . $orders_repeating->toJson());
         }
         echo $i;
     }
@@ -1015,12 +984,12 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     {
         $client_no = null;
         $items = null;
-        $order=(new OrderTrackingImport())->getOrder($client_no,$items);
-        if($order['id']) echo 'yes1';
+        $order = (new OrderTrackingImport())->getOrder($client_no, $items);
+        if ($order['id']) echo 'yes1';
 
 
         $order = Order::query()->create([
-            'code'=>'null'.Str::uuid(),'client_code' => 'asdfdfdg','web_order_number' => 'sadfdsf'
+            'code' => 'null' . Str::uuid(), 'client_code' => 'asdfdfdg', 'web_order_number' => 'sadfdsf'
         ]);
         dd($order);
 //        $order=(new OrderTrackingImport())->getOrder('92024765871-SDO130000986796QX',$items);
@@ -1070,42 +1039,42 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
 
     public function reNewBatches3()
     {
-        $batches=Batch::query()->where('id','>',324)->get('code');
-//        $batchCodes = $batches->map(function($batch){
-//            return $batch['code'];
-//        })->toArray();
-        $batchCodes = ['W201201000037',
-            'W201201000038',
-            'W201201000039',
-            'W201201000040',
-            'W201201000041',
-            'W201201000052',
-            'W201201000053',
-            'W201201000054',
-            'W201201000055',
-            'W201201000056',
-            'W201201000057',
-            'W201201000071',
-            'W201201000074',
-            'W201201000075',
-            'W201201000076',];
-        $requests=[];
+        $batches = Batch::query()->where('id', 6384)->get('code');
+        $batchCodes = $batches->map(function ($batch) {
+            return $batch['code'];
+        })->toArray();
+//        $batchCodes = ['W201201000037',
+//            'W201201000038',
+//            'W201201000039',
+//            'W201201000040',
+//            'W201201000041',
+//            'W201201000052',
+//            'W201201000053',
+//            'W201201000054',
+//            'W201201000055',
+//            'W201201000056',
+//            'W201201000057',
+//            'W201201000071',
+//            'W201201000074',
+//            'W201201000075',
+//            'W201201000076',];
+        $requests = [];
 //        $logs=Log::query()->select('description')->where('CREATED_AT','>','2020-11-11')
 //            ->where('type',"issued_newBatch")
 //            ->get();
 //        dd($logs);
-        foreach($batchCodes as $code){
+        foreach ($batchCodes as $code) {
 //            $request=Cache::get('temp'.$code)['description'];
-            $request=Log::query()->select('description')->where('CREATED_AT','>','2020-12-01')
-                ->where('type',"issued_newBatch")
-                ->where('description','like',"%{$code}%")
+            $request = Log::query()->select('description')->where('CREATED_AT', '>', '2020-12-16')
+                ->where('type', "issued_newBatch")
+                ->where('description', 'like', "%{$code}%")
                 ->first();
-            if($request){
-                $response=Zttp::post('https://wcs.baoshi56.com/api/thirdPart/flux/sorting/newBatch',
+            if ($request) {
+                $response = Zttp::post('https://wcs.baoshi56.com/api/thirdPart/flux/sorting/newBatch',
                     json_decode($request['description'])
                 );
-                app('LogService')->log(__METHOD__,__FUNCTION__,$response->body());
-                $requests[]=$response->body();
+                app('LogService')->log(__METHOD__, __FUNCTION__, $response->body());
+                $requests[] = $response->body();
             }
 //            Cache::put('temp'.$code,$request);
 //            $requests[]=$request;
@@ -1121,34 +1090,39 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $orderService = app(OrderService::class);
         /*$owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();*/
         /*$startDate = \Illuminate\Support\Carbon::parse('2020-10-28 00:00:00')->toDateTimeString();*/
-        $orderNos = ['SO201205001735','SO201204003891','SO201204003706','SO201204002877','SO201203003771'];
+        $orderNos = ['SO201205001735', 'SO201204003891', 'SO201204003706', 'SO201204002877', 'SO201203003771'];
         $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode'])
-            ->whereIn('orderno',$orderNos)
+            ->whereIn('orderno', $orderNos)
             ->get();
         $orderService->updateByWmsOrders($orderHeaders);
         $orderTrackingService->createByWmsOrderHeader($orderHeaders);
     }
 
-    public function testSyncOrderTask(){
+    public function testSyncOrderTask()
+    {
         dump('hendle...');
         dump((string)Carbon::now());
+        dump(memory_get_usage() / 1024 / 1024);
         $task = new SyncWMSOrderTask();
         $task->handle();
         dump((string)Carbon::now());
-        dd('hendle...end');
+        dump('hendle...end');
+        dump(memory_get_usage() / 1024 / 1024);
+        dump(memory_get_peak_usage() / 1024 / 1024);
+        return view('test');
     }
 
     public function testSyncWaveNo()
     {
-        $waveHeader = OracleDOCWaveHeader::query()->where('waveno','W201209000024')->first();
+        $waveHeader = OracleDOCWaveHeader::query()->where('waveno', 'W201209000024')->first();
 //        Batch::query()->create([
 //            'code' => $waveHeader->waveno,
 //            'wms_created_at' => $waveHeader->addtime,
 //            'remark' => $waveHeader->descr,
 //            'wms_status' => '99',
 //        ]);
-        $waveHeaderDetails = OracleDOCWaveDetails::query()->where('waveno',$waveHeader->waveno)->get();
-        $orderNos = $waveHeaderDetails->map(function($item){
+        $waveHeaderDetails = OracleDOCWaveDetails::query()->where('waveno', $waveHeader->waveno)->get();
+        $orderNos = $waveHeaderDetails->map(function ($item) {
             return $item->orderno;
         });
         $orderHeaderService = new OracleDOCOrderHeaderService();
@@ -1157,29 +1131,237 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $orderService->syncOrderByWMSOrderHeaders($orderHeaders);
     }
 
-    public function testSyncOrderTracking(){
+    public function testSyncOrderTracking()
+    {
         $orderTrackingService = new OrderTrackingService();
-        $items = OrderTracking::query()->with('commodities.package.order')->where('created_at','>=','2020-12-01 00:00:00')->get();
-        $orderNos = $items->map(function ($orderTracking){
-            return   $orderTracking->commodities->package->order->code;
+        $items = OrderTracking::query()->with('commodities.package.order')->where('created_at', '>=', '2020-12-01 00:00:00')->get();
+        $orderNos = $items->map(function ($orderTracking) {
+            return $orderTracking->commodities->package->order->code;
         });
-        $update_params =[['id','client','order_remark']];
-        $orderHeaders = OracleDOCOrderHeader::query()->whereIn('OrderNo',$orderNos)->get();
+        $update_params = [['id', 'client', 'order_remark']];
+        $orderHeaders = OracleDOCOrderHeader::query()->whereIn('OrderNo', $orderNos)->get();
         foreach ($items as $orderTracking) {
             $order = $orderTracking->commodities->package->order;
-            $orderHeader = $orderHeaders->where('orderno',$order->code)->first();
-            if(!$orderHeader)continue;
-            if(empty($order))continue;
-            $params =  $orderTrackingService->getParamsByOrderHeaderAndOrder($orderHeader,$order);
-            if($params['client'] != $orderTracking->client || $params['order_remark'] != $orderTracking->order_remark ){
-                 $update_params[] = [
-                     'id' => $orderTracking->id,
-                     'client' => $params['client'] ,
-                     'order_remark'  =>$params['order_remark']
-                 ];
+            $orderHeader = $orderHeaders->where('orderno', $order->code)->first();
+            if (!$orderHeader) continue;
+            if (empty($order)) continue;
+            $params = $orderTrackingService->getParamsByOrderHeaderAndOrder($orderHeader, $order);
+            if ($params['client'] != $orderTracking->client || $params['order_remark'] != $orderTracking->order_remark) {
+                $update_params[] = [
+                    'id' => $orderTracking->id,
+                    'client' => $params['client'],
+                    'order_remark' => $params['order_remark']
+                ];
             }
         }
-        if(count($update_params) == 0)return ;
+        if (count($update_params) == 0) return;
         $orderTrackingService->batchUpdate($update_params);
     }
+
+    public function editOrderTracking()
+    {
+        $orderTrackingService = new OrderTrackingService();
+        $dataHandlerService = new DataHandlerService();
+        $orderTrackings = OrderTracking::query()->with('commodities.package')->where('client', 'like', '天猫%')->get();
+        $orderTracking_arr = $orderTrackings->chunk(100);
+        foreach ($orderTracking_arr as $items) {
+            $update_params = [['id', 'order_client_code']];
+            $order_nos = array_unique(data_get($items, '*.commodities.package.order.code'));
+            $orderHeaders = OracleDOCOrderHeader::query()
+                ->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode', 'oracleBASCustomer'])
+                ->whereIn('DOC_Order_Header.OrderNo', $order_nos)->get();
+            $orderHeader_map = $dataHandlerService->dataHeader(['orderno'], $orderHeaders);
+            foreach ($items as $orderTracking) {
+                $commodities = $orderTracking->commodities;
+                $orderHeader = $dataHandlerService->getKeyValue(['orderno' => $commodities->package->order->code], $orderHeader_map);
+                $order_client_code = $orderTrackingService->get_d_edit_03($orderHeader, $commodities);
+                $update_params[] = [
+                    'id' => $orderTracking->id,
+                    'order_client_code' => $order_client_code
+                ];
+            }
+            $orderTrackingService->batchUpdate($update_params);
+            unset($update_params, $orderHeaders, $orderHeader_map);
+        }
+        unset($orderTrackings, $orderTracking_arr);
+    }
+
+    public function testUpdateSkuNameBarcodeToCommodity_id()
+    {
+        $amount = 1000;
+        $storeItem = StoreItems::query()->orderByDesc('id')->first();
+        $sum = $storeItem->id;
+        $number = ceil($sum / $amount);
+        for ($i = 0; $i < $number; $i++) {
+            $storeItems = StoreItems::query()->with('store')
+                ->where('id', '>=', $i * $amount)
+                ->where('id', '<', ($i * $amount + $amount))
+                ->get();
+            if (count($storeItems) < 1) continue;
+            $owner_ids = array_diff(array_unique(data_get($storeItems, '*.store.owner_id')), ['', ' ', '*', null]);
+            $skus = array_diff(array_unique(data_get($storeItems, '*.sku')), ['', ' ', '*', null]);
+            $this->addCommodityIdToStoreItem($owner_ids, $skus, $storeItems);
+        }
+    }
+
+    private function addCommodityIdToStoreItem($owner_ids, $skus, $storeItems)
+    {
+        /**
+         * @var CommodityService $commodityService
+         * @var DataHandlerService $dataHandlerService
+         */
+        $commodityService = app(CommodityService::class);
+        $dataHandlerService = app(DataHandlerService::class);
+        $commodities = $commodityService->get_($owner_ids, $skus, [], true);
+        $commodities_map = $dataHandlerService->dataHeader(['owner_id', 'sku'], $commodities);
+        $updateParams = [[
+            'id', 'commodity_id', 'updated_at'
+        ]];
+        foreach ($storeItems as $storeItem) {
+            $commodity = $dataHandlerService
+                ->getKeyValue(['owner_id' => $storeItem->store->owner_id, 'sku' => $storeItem->sku], $commodities_map);
+            if (!$commodity) continue;
+            $updateParams[] = [
+                'id' => $storeItem->id,
+                'commodity_id' => $commodity->id,
+                'updated_at' => Carbon::now()->toDateTimeString(),
+            ];
+        }
+        if (count($updateParams) > 0) app(BatchUpdateService::class)->batchUpdate('store_items', $updateParams);
+    }
+
+    function testUpdateStores()
+    {
+        $stores = Store::query()->where('stored_method', '快速入库')->get();
+        $updated_at = Carbon::now()->toDateTimeString();
+        $updateParams = [[
+            'id', 'is_fast_stored', 'updated_at'
+        ]];
+        foreach ($stores as $store) {
+            if ($store->stored_method != '快速入库') continue;
+            $updateParams[] = [
+                'id' => $store->id,
+                'is_fast_stored' => '快速入库',
+                'updated_at' => $updated_at,
+            ];
+        }
+        if (count($updateParams) > 1) app(BatchUpdateService::class)->batchUpdate('stores', $updateParams);
+    }
+
+    public function testSyncAsn()
+    {
+        dump('start' . (string)Carbon::now());
+//       $start=ValueStore::query()->where('name','asn_last_created_sync_at')->value('value');
+//       app(OracleDocAsnHerderService::class)->getWmsAsnOnStartDateCreate($start);
+        app(StoreService::class)->storeCreateByWms();
+        app(StoreService::class)->storeUpdateByWms();
+        dump('end' . (string)Carbon::now());
+    }
+
+    public function testSyncCommodity()
+    {
+        dump('start' . (string)Carbon::now());
+        /**@var  CommodityService $commodityService */
+        $commodityService = app(CommodityService::class);
+        $commodityService->syncCommodityCreated();
+        $commodityService->syncCommodityUpdated();
+        dump('end' . (string)Carbon::now());
+    }
+
+    public function testSyncCommodityByMaps()
+    {
+//        $skus = ['5211900982001','5211900982002','5211900982003','5211900982004','5211200641701','5211200641702','5211200641703','5211200641704',
+//            '5211800945001','5211800945002','5211800945003','5211800945004','5215300281002','5215300281003','5215300281004',
+//            '5215300281005','5215300281006','5215300283102','5215300283103',];
+//        $ownerIds=['2'];
+        dump('get_start' . (string)Carbon::now());
+        $bas_skus = OracleBasSKU::query()->where('addTime', '>=', '2020-12-14 00:00:00')->select('customerid', 'sku')->get();
+
+        $ownerIds = Owner::query()->whereIn('code', data_get($bas_skus, '*.customerid'))->get()->map(function ($owner) {
+            return $owner->id;
+        })->toArray();
+        $ownerIds = array_unique($ownerIds);
+        $skus = array_unique(data_get($bas_skus, '*.sku'));
+        dump('get_end' . (string)Carbon::now());
+        /**@var  CommodityService $commodityService */
+        $commodityService = app(CommodityService::class);
+        dump('start' . (string)Carbon::now());
+        $commodities = $commodityService->get_($ownerIds, $skus, [], true);
+        dump('end' . (string)Carbon::now());
+    }
+
+    public function editOrderSyncAt()
+    {
+        ValueStore::query()->where('name','order_last_created_sync_at')->update(['value'=>'2020-12-22 09:00:00']);
+        ValueStore::query()->where('name','order_last_updated_sync_at')->update(['value'=>'2020-12-22 09:00:00']);
+    }
+
+    public function syncOrderTask()
+    {
+        $start_data = Carbon::parse('2020-12-10 00:00:00');
+        $orderHeaders = OracleDOCOrderHeader::query()->selectRaw(implode(',', OracleDOCOrderHeaderService::$columns))
+            ->with(['oracleBASCustomer' => function ($query) {
+                $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
+            }, 'oracleDOCOrderDetails' => function ($query) {
+                $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered,doc_order_details.Location');
+            }, 'actAllocationDetails' => function ($query) {
+                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku,ACT_Allocation_Details.Location');
+            }, 'oracleBASCode' => function ($query) {
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            }, 'orderType' => function ($query) {
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            }])->where('DOC_Order_Header.AddTime', '>', $start_data)
+            ->get();
+        $service = new OrderService();
+        $service->syncOrder($orderHeaders);
+    }
+    public function cleanOrderIssueRepeat()
+    {
+        ini_set('max_execution_time', 6500);
+        ini_set('memory_limit', '1526M');
+        for ($i = 0; true; $i++) {
+            $orderIssue_unique = \App\OrderIssue::withTrashed()
+                ->selectRaw('count(1) as count,id,order_id')
+                ->whereNotNull('order_id')
+                ->orderByDesc('created_at')
+                ->groupBy('order_id')
+                ->having('count', '>', 1)
+                ->limit(100)
+                ->get();
+            if ($orderIssue_unique->count() == 0) return;
+            foreach ($orderIssue_unique as $item) {
+                $orderIssue_delete = OrderIssue::withTrashed()->where('order_id', $item->order_id)->get();
+                /** @var OrderIssue $order_issue_unique */
+                $order_issue_unique = $orderIssue_delete->whereNull('deleted_at')->first();
+                if(!$order_issue_unique) $order_issue_unique = $orderIssue_delete->first();
+                $ids = [];
+                foreach ($orderIssue_delete as $key => $order_issue) {
+                    if ($order_issue->id == $order_issue_unique->id) continue;
+                    $ids[] = $order_issue->id;
+                    if ($order_issue['rejecting_status'] != '未退回') $order_issue_unique['rejecting_status'] = $order_issue['rejecting_status'];
+                    if ($order_issue['situation_explain']) $order_issue_unique['situation_explain'] = $order_issue['situation_explain'];
+                    if ($order_issue['order_issue_type_id']) $order_issue_unique['order_issue_type_id'] = $order_issue['order_issue_type_id'];
+                    if ($order_issue['second_order_id']) $order_issue_unique['second_order_id'] = $order_issue['second_order_id'];
+                    if ($order_issue['is_new_rejecting'] != '无') $order_issue_unique['is_new_rejecting'] = $order_issue['is_new_rejecting'];
+                    if ($order_issue['second_client_no']) $order_issue_unique['second_client_no'] = $order_issue['second_client_no'];
+                    if ($order_issue['final_status']) $order_issue_unique['final_status'] = $order_issue['final_status'];
+                    if ($order_issue['logistic_indemnity_money']) $order_issue_unique['logistic_indemnity_money'] = $order_issue['logistic_indemnity_money'];
+                    if ($order_issue['logistic_express_remission']) $order_issue_unique['logistic_express_remission'] = $order_issue['logistic_express_remission'];
+                    if ($order_issue['baoshi_indemnity_money']) $order_issue_unique['baoshi_indemnity_money'] = $order_issue['baoshi_indemnity_money'];
+                    if ($order_issue['baoshi_express_remission']) $order_issue_unique['baoshi_express_remission'] = $order_issue['baoshi_express_remission'];
+                    if ($order_issue['user_workgroup_id']) $order_issue_unique['user_workgroup_id'] = $order_issue['user_workgroup_id'];
+                    if ($order_issue['custom_code']) $order_issue_unique['custom_code'] = $order_issue['custom_code'];
+                    if ($order_issue['imported_status']) $order_issue_unique['imported_status'] = $order_issue['imported_status'];
+                }
+                if ($order_issue_unique['deleted_at']) $order_issue_unique['deleted_at'] = null;
+                $order_issue_unique->save();
+                $order_issue_unique->同步退单状态();
+                OrderIssue:: withTrashed()->whereIn('id', $ids)->forceDelete();
+                app('LogService')->log(__METHOD__, __FUNCTION__, 'orders_toCombine:' . json_encode($order_issue_unique) . '|toBe OrderId: ' . json_encode($order_issue_unique->id));
+                $orderIssueProcessLogs = \App\OrderIssueProcessLog::query()->whereIn('order_issue_id', $ids)->get();
+                app('LogService')->log(__METHOD__, __FUNCTION__, 'delete order_issue processLogs:' . json_encode($orderIssueProcessLogs));
+                \App\OrderIssueProcessLog::query()->whereIn('order_issue_id', $ids)->forceDelete();
+            }
+        }
+    }
 }

+ 4 - 2
app/Http/Controllers/api/thirdPart/flux/SortingController.php

@@ -43,9 +43,11 @@ class SortingController extends Controller
                 'returnDesc'=>':Failure','resultInfo'=>'','errors'=>$errors]]])->setEncodingOptions(JSON_UNESCAPED_UNICODE);
         }
         $requestBatches = $requestArr['request']?? '';
+
         foreach ($requestBatches as $requestBatch){
             $requestBatch['edittime']&&strpos(trim($requestBatch['edittime']),' ')?$editTimeFormat='Y-m-d H:i:s':$editTimeFormat='YmdHis';
             $batch=Batch::query()->firstOrCreate(['code' => $requestBatch['waveno']]);
+
             if(!$batch)$batch=new Batch();
             $batch->fill([
                     'code' => $requestBatch['waveno'],
@@ -69,7 +71,7 @@ class SortingController extends Controller
                     ]);
                     app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order'.json_encode($order));
                 }else{
-                    $order['batch_id']= $order['batch_id']??$batch['id'] ;
+                    $order['batch_id']= $batch['id'] ;
                     $order['owner_id']=$order['owner_id']??$owner['owner_id'];
                     $order['wms_status']=$order['wms_status']??$requestOrder['docstatus']??'波次下发';
                     $order['status']=$order['status']??'未处理';
@@ -184,7 +186,7 @@ class SortingController extends Controller
         try {
             $response=Zttp::post($apiUrl,$sendingData);
         }catch (\Exception $e){
-            app('LogService')->log(__METHOD__,'error_'.__FUNCTION__,'catch:'.$e->getMessage());
+            app('LogService')->log(__METHOD__,'error_'.__FUNCTION__,json_encode($sendingData).'|catch:'.$e->getMessage());
             return false;
         }
         $reJson=$response->json();

+ 7 - 0
app/Http/Controllers/api/thirdPart/haiq/LightController.php

@@ -24,4 +24,11 @@ class LightController
     public function lightOff(Request $request){
     }
 
+    public function update(Request $request){
+        $success = $request->input('success');
+        $location = $success?200:0;
+        app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->all()));
+        return ['location'=>$location,'errMsg'=>'','data'=>$request->all()];
+    }
+
 }

+ 126 - 67
app/Http/Controllers/api/thirdPart/haiq/StorageController.php

@@ -4,6 +4,7 @@
 namespace App\Http\Controllers\api\thirdPart\haiq;
 
 
+use App\Http\Requests\ForeignHaiRobotic_taskUpdateRequest;
 use App\Services\ForeignHaiRoboticsService;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Http;
@@ -37,98 +38,136 @@ class StorageController
             "bins" => [$bin],//可执行货箱任务
         ]];*/
         $this->post = [[
-            "taskMode"      => 2,
+            "taskMode"      => 1,
             "bins"=>[[
-                "taskCode"  =>"TEST-BS2011160007",
-                "binCode"   => "IDE0000001",
-//                "fromLocCode" => "BIN-IN1",
-                "toLocCode" => "BIN-OUT1",
-            ],[
-                "taskCode"  =>"TEST-BS2011160008",
-                "binCode"   => "IDE0000001",
-//                "fromLocCode" => "BIN-IN1",
+                "taskCode"  =>"TESTx1za3X14",
+                "binCode"   => "IDE0000130",
+                "fromLocCode" => "BIN-IN1",
                 "toLocCode" => "BIN-OUT1",
             ],[
-                "taskCode"  =>"TEST-BS2011160009",
-                "binCode"   => "IDE0000001",
-//                "fromLocCode" => "BIN-IN1",
+                "taskCode"  =>"TESTx2za3X43",
+                "binCode"   => "IDE0000131",
+                "fromLocCode" => "BIN-IN1",
                 "toLocCode" => "BIN-OUT1",
             ]],
-            "groupCode"     => 21,
+            "groupCode"     => 'WMxz3acX14',
             "priority"      => 20,
-            "sequenceFlag"  => -1,
+            "sequenceFlag"  => 1,
         ]];
         $this->post2 = [[
             "taskMode"      => 2,
             "bins"=>[[
-                "taskCode"  =>"TEST-BS2011160016",
-                "binCode"   => "IDE0000002",
-//                "fromLocCode" => "BIN-IN1",
+                "taskCode"  =>"TESTxx2zbaa1",
+                "binCode"   => "IDE0000034",
+                "fromLocCode" => "BIN-IN1",
+                "toLocCode" => "BIN-OUT1",
+            ],[
+                "taskCode"  =>"TESTxx3zbaa1",
+                "binCode"   => "IDE0000093",
+                "fromLocCode" => "BIN-IN1",
                 "toLocCode" => "BIN-OUT1",
             ],[
-                "taskCode"  =>"TEST-BS2011160017",
-                "binCode"   => "IDE0000009",
-//                "fromLocCode" => "BIN-IN1",
+                "taskCode"  =>"TESTxx4zbaa1",
+                "binCode"   => "IDE0000128",
+                "fromLocCode" => "BIN-IN1",
                 "toLocCode" => "BIN-OUT1",
             ],[
-                "taskCode"  =>"TEST-BS2011160018",
-                "binCode"   => "IDE0000014",
-//                "fromLocCode" => "BIN-IN1",
+                "taskCode"  =>"TESTxx5zbaa1",
+                "binCode"   => "IDE0000129",
+                "fromLocCode" => "BIN-IN1",
                 "toLocCode" => "BIN-OUT1",
             ],[
-                "taskCode"  =>"TEST-BS2011160019",
-                "binCode"   => "IDE0000016",
-//                "fromLocCode" => "BIN-IN1",
+                "taskCode"  =>"TESTxx6zbaa1",
+                "binCode"   => "IDE0000127",
+                "fromLocCode" => "BIN-IN1",
                 "toLocCode" => "BIN-OUT1",
             ]],
-            "groupCode"     => 'W12346',
+            "groupCode"     => 'WMxz64b2a1',
             "priority"      => 20,
-            "sequenceFlag"  => -1,
-        ]];
+            "sequenceFlag"  => 1,
+        ]];;
         $this->backIn = [[
             "taskMode"      => 1,
             "bins"=>[[
-                "taskCode"  =>"TESTININ-BS2011160016",
-                "binCode"   => "IDE0000052",
-                "fromLocCode" => "BIN-OUT1",
+                "taskCode"  =>"testIn1ax",
+                "binCode"   => "IDE0000007",
+                "fromLocCode" => "BIN-IN1",
+                "toLocCode" => "",
             ],[
-                "taskCode"  =>"TESTIN-BS2011160017",
-                "binCode"   => "IDE0000004",
-                "fromLocCode" => "BIN-OUT1",
+                "taskCode"  =>"testIn2ax",
+                "binCode"   => "IDE0000129",
+                "fromLocCode" => "BIN-IN1",
+                "toLocCode" => "",
+            ],],
+            "groupCode"     => 'WMx135ax',
+            "priority"      => 20,
+            "sequenceFlag"  => 1,
+        ]];
+        $this->backIn2 = [[
+            "taskMode"      => 6,
+            "bins"=>[[
+                "taskCode"  =>"testIn123",
+                "binCode"   => "IDE0000130",
+                "fromLocCode" => "HAIB2-01-03",
+                "toLocCode" => "",
             ],[
-                "taskCode"  =>"TESTIN-BS2011160018",
-                "binCode"   => "IDE0000054",
-                "fromLocCode" => "BIN-OUT1",
+                "taskCode"  =>"testIn223",
+                "binCode"   => "IDE0000034",
+                "fromLocCode" => "HAIB2-02-03",
+                "toLocCode" => "",
             ],[
-                "taskCode"  =>"TESTIN-BS2011160019",
-                "binCode"   => "IDE0005683",
-                "fromLocCode" => "BIN-OUT1",
+                "taskCode"  =>"testIn323",
+                "binCode"   => "IDE0000093",
+                "fromLocCode" => "HAIB2-03-03",
+                "toLocCode" => "",
             ]],
-            "groupCode"     => 'W12346In',
+            "groupCode"     => 'WMx14',
             "priority"      => 20,
-            "sequenceFlag"  => -1,
+            "sequenceFlag"  => 1,
         ]];
         $this->move = [[
-            "taskMode"      => 3,
+            "taskMode"      => 1,
             "bins"=>[[
-                "taskCode"  =>"TESTINM-BS2011160024",
-                "binCode"   => "IDE0000054",
-                "fromLocCode" => "",
-                "toLocCode" => "HAIB2-01-02",
+                "taskCode"  =>"testm1z6",
+                "binCode"   => "IDE0000034",
+                "fromLocCode" => "BIN-IN1",
+                "toLocCode" => "",
             ],[
-                "taskCode"  =>"TESTINM-BS2011160023",
-                "binCode"   => "IDE0000004",
-                "fromLocCode" => "",
-                "toLocCode" => "HAIB2-01-01",
+                "taskCode"  =>"testm2z6",
+                "binCode"   => "IDE0000093",
+                "fromLocCode" => "BIN-IN1",
+                "toLocCode" => "",
             ],[
-                "taskCode"  =>"TESTINM-BS2011160022",
-                "binCode"   => "IDE0005683",
-                "fromLocCode" => "",
-                "toLocCode" => "HAIB2-02-03",
-            ]],
-            "groupCode"     => 'WM12352',
+                "taskCode"  =>"testm3z6",
+                "binCode"   => "IDE0000130",
+                "fromLocCode" => "BIN-IN1",
+                "toLocCode" => "",
+            ],],
+            "groupCode"     => 'WMm1z6',
+            "priority"      => 20,
+            "sequenceFlag"  => 1,
+        ]];//128,129.127
+        $this->move2 = [[
+            "taskMode"      => 6,
+            "bins"=>[[
+                "taskCode"  =>"testm11",
+                "binCode"   => "IDE0000128",
+                "fromLocCode" => "HAIB2-01-01",
+                "toLocCode" => "",
+            ],[
+                "taskCode"  =>"testm21",
+                "binCode"   => "IDE000129",
+                "fromLocCode" => "HAIB2-02-01",
+                "toLocCode" => "",
+            ],[
+                "taskCode"  =>"testm31",
+                "binCode"   => "IDE0000127",
+                "fromLocCode" => "HAIB2-03-01",
+                "toLocCode" => "",
+            ],],
+            "groupCode"     => 'WMm2',
             "priority"      => 20,
-            "sequenceFlag"  => -1,
+            "sequenceFlag"  => 1,
         ]];
         $this->lightOn = [
             "areaCode"=> "1004",
@@ -149,10 +188,11 @@ class StorageController
                 "uomDesc01"=> "uo",
                 "uomDesc02"=> "uo"
             ],
-            "locCode"=> "1004-BZ04-01-01"
+            "locCode"=> "HAIB2-02-03"
         ];
         $this->lightOff = [
-            "locCode"=> "12G03-21",
+            "PTLAction"=> 0,
+            "locCode"=> "HAIB2-02-03"
         ];
     }
 
@@ -177,7 +217,7 @@ class StorageController
         $response = Http::post(config('api.haiq.storage.light'),$post);
         return $response->body();
     }
-    public function moveBin(Request $request){
+    public function moveBinOut(Request $request){
         return $this->relocate($request,$this->post);
     }
     public function moveBin2(Request $request){
@@ -186,22 +226,41 @@ class StorageController
     public function moveBinIn(Request $request){
         return $this->relocate($request,$this->backIn);
     }
+    public function moveBinIn2(Request $request){
+        return $this->relocate($request,$this->backIn2);
+    }
+
     public function moveBinM(Request $request){
         return $this->relocate($request,$this->move);
     }
+    public function moveBinM2(Request $request){
+        return $this->relocate($request,$this->move2);
+    }
     public function lightOn(Request $request){
         return $this->light($request,$this->lightOn);
     }
     public function lightOff(Request $request){
         return $this->light($request,$this->lightOff);
     }
-    public function taskUpdate(Request $request){
-        $this->service->taskUpdate();
-        app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->all()));
-        return ['code'=>200,'errMsg'=>'','data'=>$request->all()];
+    public function taskUpdate(ForeignHaiRobotic_taskUpdateRequest $request){
+        return $request->method();
+        try{
+            $this->service->taskUpdate(
+                $request['groupCode'],
+                $request['taskCode'],
+                $request['updateEventType'],
+                $request['status'],
+                $request['binCode'],
+                $request['kubotId'],
+                $request['description']
+            );
+            return ['code'=>200,'errMsg'=>'','data'=>$request->all()];
+        }catch (\Exception $e){
+            return ['code'=>$e->getCode(),'errMsg'=>$e->getMessage(),'data'=>$request->all()];
+        }
     }
     public function exception(Request $request){
-        $this->service->taskUpdate();
+        $this->service->excepted();
         app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->all()));
         return ['code'=>200,'errMsg'=>'','data'=>$request->all()];
     }

+ 59 - 0
app/Http/Requests/ForeignHaiRobotic_taskUpdateRequest.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace App\Http\Requests;
+
+use App\Services\LogService;
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Validation\Validator;
+
+class ForeignHaiRobotic_taskUpdateRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+           'groupCode'=>'required',
+           'taskCode'=>'required',
+           'updateEventType'=>'required',
+           'status'=>'required|in:0,1',
+           'binCode'=>'required',
+           'kubotId'=>'required',
+           'description'=>'nullable',
+        ];
+    }
+    public function withValidator(Validator $validator)
+    {
+        $validator->after(function (Validator $validator) {
+            if($validator->errors()->isNotEmpty()){
+                $validator->errors()->add('code','422');
+                $validator->errors()->add('errMsg', json_encode($validator->errors()->messages(),JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES));
+                $validator->errors()->add('data',$validator->errors()->toJson(JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES));
+            }
+
+            $errMsg=(function()use($validator){
+                if($validator->errors()->isEmpty())return '';
+                return $errMsg = '错误: '.$validator->errors()->toJson(JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
+            })();
+
+            LogService::log(__METHOD__,__FUNCTION__,
+                $errMsg??''
+                .'请求:'.json_encode($this->all())
+                .'调用堆栈:'.json_encode(array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS),0,3))
+            );
+        });
+    }
+}

+ 6 - 3
app/Imports/OrderIssueImport.php

@@ -75,17 +75,20 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
                         }
                     }
                 }
-
-                $client_no = null;
+                $client_no = null;$order_no = null;
                 if ($count) {
                     $orderHeader = OracleDOCOrderHeader::query()->where('soreference5', $logistic_number)->first();
                     $client_no = $orderHeader['soreference1'];
+                    $order_no = $orderHeader['orderno'];
                 } else if ($detailCount) {
                     $detail = OracleActAllocationDetails::query()->where('picktotraceid', $logistic_number)->first();
                     $orderHeader = OracleDOCOrderHeader::query()->where('orderno', $detail['orderno'])->first();
                     $client_no = $orderHeader['soreference1'];
+                    $order_no = $orderHeader['orderno'];
                 }
-                $order = $orderService->findOrCreateByClientCode($client_no);
+                $order = null;
+                if($order_no)$order = Order::query()->where('code',$order_no)->first();
+                if(!$order)$order = $orderService->findOrCreateByClientCode($client_no);
                 $orderIssue = OrderIssue::query()->where('order_id', $order['id'])->first();
                 $rejectedBill = $rejectedService->getRejectedByClientNo($client_no);
                 if ($orderIssue) {

+ 1 - 1
app/InventoryAccount.php

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
 use Illuminate\Support\Facades\Auth;
 
-class InventoryAccount extends Model
+class InventoryAccount extends ModelExtended
 {
     use ModelTimeFormat;
     use SoftDeletes;

+ 1 - 1
app/InventoryAccountMission.php

@@ -6,7 +6,7 @@ use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\Auth;
 
-class InventoryAccountMission extends Model
+class InventoryAccountMission extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 1 - 1
app/InventoryBlindReceiveExcel.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\Storage;
 
-class InventoryBlindReceiveExcel extends Model
+class InventoryBlindReceiveExcel extends ModelExtended
 {
     //
     protected $fillable = [

+ 1 - 1
app/InventoryCompare.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class InventoryCompare extends Model
+class InventoryCompare extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 1 - 1
app/InventoryDailyLog.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class InventoryDailyLog extends Model
+class InventoryDailyLog extends ModelExtended
 {
     public $timestamps=false;
     protected $fillable=[

+ 1 - 1
app/InventoryDailyLoggingOwner.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class InventoryDailyLoggingOwner extends Model
+class InventoryDailyLoggingOwner extends ModelExtended
 {
     protected $fillable=[
         "owner_id","status"

+ 1 - 1
app/JobType.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class JobType extends Model
+class JobType extends ModelExtended
 {
     //
 }

+ 1 - 1
app/LaborCompany.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class LaborCompany extends Model
+class LaborCompany extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 103 - 77
app/LaborReport.php

@@ -10,7 +10,7 @@ use Illuminate\Support\Arr;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
 
-class LaborReport extends Model
+class LaborReport extends ModelExtended
 {
     use ModelTimeFormat;
     use SoftDeletes;
@@ -28,6 +28,7 @@ class LaborReport extends Model
         'sequence',
         'amountOfJoined',
     ];
+    public static $withoutAppends = true;
 
     static function tokenOfBroadcastEnterAndLeave(){
         return md5('tokenOfListAll'.Carbon::now()->format('Y-m-d'));
@@ -85,58 +86,69 @@ class LaborReport extends Model
     }
     //总在线时长
     public function getTotalOnlineTimeAttribute(){
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->get();
-        $totalOnlineTime=$laborReports->reduce(function ($value,$laborReport){
-            return ($value??0)+$laborReport['thisRecordOnlineTime'];
-        });
-        return $totalOnlineTime;
+        if(self::$withoutAppends) {
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->get();
+            $totalOnlineTime = $laborReports->reduce(function ($value, $laborReport) {
+                return ($value ?? 0) + $laborReport['thisRecordOnlineTime'];
+            });
+            return $totalOnlineTime;
+        }
     }
     //总工作时长
     public function getTotalWorkingTimeAttribute(){
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->orderBy('id','asc')->get();
-        $totalWorkingTime=$laborReports->reduce(function ($value,$laborReport){
-            return ($value??0)+$laborReport['thisRecordWorkingTime'];
-        });
-        return $totalWorkingTime;
+        if(self::$withoutAppends) {
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->orderBy('id', 'asc')->get();
+            $totalWorkingTime = $laborReports->reduce(function ($value, $laborReport) {
+                return ($value ?? 0) + $laborReport['thisRecordWorkingTime'];
+            });
+            return $totalWorkingTime;
+        }
     }
     //本轮工作起始时间
     public function getThisRoundOnlineStartTimeAttribute(){
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->orderBy('id','asc')->get();
-        foreach ($laborReports as $laborReport){
-            if ($laborReport['enter_at']&&$laborReport['check_in_at'])
-                return $laborReport['check_in_at'];
+        if(self::$withoutAppends) {
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->orderBy('id', 'asc')->get();
+            foreach ($laborReports as $laborReport) {
+                if ($laborReport['enter_at'] && $laborReport['check_in_at'])
+                    return $laborReport['check_in_at'];
+            }
         }
     }
     //本轮工作结束时间
     public function getThisRoundOnlineEndTimeAttribute(){
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->get();
-        foreach ($laborReports as $laborReport){
-            if ($laborReport['exit_at']&&$laborReport['check_out_at'])
-                return $laborReport['check_out_at'];
+        if(self::$withoutAppends) {
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->get();
+            foreach ($laborReports as $laborReport) {
+                if ($laborReport['exit_at'] && $laborReport['check_out_at'])
+                    return $laborReport['check_out_at'];
+            }
         }
     }
     //本次在线时长
     public function getThisRecordOnlineTimeAttribute(){
-        if($this['enter_at']&&!$this['check_out_at']&&!$this['exit_at'])
-            return round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['enter_at']))/3600,2);
-        if ($this['enter_at']&&$this['check_out_at']&&!$this['exit_at'])
-            return round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['enter_at']))/3600,2);
-        if ($this['enter_at']&&$this['exit_at'])
-            return round(Carbon::parse($this['exit_at'])->diffInSeconds(Carbon::parse($this['enter_at']))/3600,2);
-        if ($this['check_in_at']&&!$this['enter_at']&&!$this['check_out_at']&&!$this['exit_at'])
-            return round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
-        if ($this['check_in_at']&&!$this['enter_at']&&$this['check_out_at']&&!$this['exit_at'])
-            return round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
-        if ($this['check_in_at']&&!$this['enter_at']&&$this['exit_at'])
-            return round(Carbon::parse($this['exit_at'])->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
+
+            if ($this['enter_at'] && !$this['check_out_at'] && !$this['exit_at'])
+                return round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['enter_at'])) / 3600, 2);
+            if ($this['enter_at'] && $this['check_out_at'] && !$this['exit_at'])
+                return round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['enter_at'])) / 3600, 2);
+            if ($this['enter_at'] && $this['exit_at'])
+                return round(Carbon::parse($this['exit_at'])->diffInSeconds(Carbon::parse($this['enter_at'])) / 3600, 2);
+            if ($this['check_in_at'] && !$this['enter_at'] && !$this['check_out_at'] && !$this['exit_at'])
+                return round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['check_in_at'])) / 3600, 2);
+            if ($this['check_in_at'] && !$this['enter_at'] && $this['check_out_at'] && !$this['exit_at'])
+                return round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['check_in_at'])) / 3600, 2);
+            if ($this['check_in_at'] && !$this['enter_at'] && $this['exit_at'])
+                return round(Carbon::parse($this['exit_at'])->diffInSeconds(Carbon::parse($this['check_in_at'])) / 3600, 2);
+
     }
     //本次工作时长
     public function getThisRecordWorkingTimeAttribute(){
-        if ($this['check_in_at']&&!$this['check_out_at']&&!$this['relax_time']){
-            $workingTime=round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
-            $checkInTime=Carbon::parse($this['check_in_at']);
-            $checkOutTime=Carbon::parse(Carbon::now())->format('H');
-            return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime);
+
+        if ($this['check_in_at']&&!$this['check_out_at']&&!$this['relax_time']) {
+            $workingTime = round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['check_in_at'])) / 3600, 2);
+            $checkInTime = Carbon::parse($this['check_in_at']);
+            $checkOutTime = Carbon::parse(Carbon::now())->format('H');
+            return $this->minusLunchTime($checkInTime, $checkOutTime, $workingTime);
         }
         if ($this['check_in_at']&&$this['check_out_at']&&!$this['relax_time']){
             $workingTime=round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
@@ -150,27 +162,30 @@ class LaborReport extends Model
             $checkOutTime=Carbon::parse($this['check_out_at'])->format('H');
             return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime)-$this['relax_time']/60;
         }
+
     }
     //本次取整工作时长
     public function getThisRoundRecordWorkingTimeAttribute(){
-        if ($this['round_check_in_at']&&!$this['round_check_out_at']&&!$this['relax_time']){
-            $workingTime=round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['round_check_in_at']))/3600,2);
-            $checkInTime=Carbon::parse($this['round_check_in_at']);
-            $checkOutTime=Carbon::parse(Carbon::now())->format('H');
-            return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime);
-        }
-        if ($this['round_check_in_at']&&$this['round_check_out_at']&&!$this['relax_time']){
-            $workingTime=round(Carbon::parse($this['round_check_out_at'])->diffInSeconds(Carbon::parse($this['round_check_in_at']))/3600,2);
-            $checkInTime=Carbon::parse($this['round_check_in_at']);
-            $checkOutTime=Carbon::parse($this['round_check_out_at'])->format('H');
-            return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime);
-        }
-        if ($this['round_check_in_at']&&$this['round_check_out_at']&&$this['relax_time']){
-            $workingTime=round(Carbon::parse($this['round_check_out_at'])->diffInSeconds(Carbon::parse($this['round_check_in_at']))/3600,2);
-            $checkInTime=Carbon::parse($this['round_check_in_at']);
-            $checkOutTime=Carbon::parse($this['round_check_out_at'])->format('H');
-            return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime)-$this['relax_time']/60;
-        }
+
+            if ($this['round_check_in_at'] && !$this['round_check_out_at'] && !$this['relax_time']) {
+                $workingTime = round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['round_check_in_at'])) / 3600, 2);
+                $checkInTime = Carbon::parse($this['round_check_in_at']);
+                $checkOutTime = Carbon::parse(Carbon::now())->format('H');
+                return $this->minusLunchTime($checkInTime, $checkOutTime, $workingTime);
+            }
+            if ($this['round_check_in_at'] && $this['round_check_out_at'] && !$this['relax_time']) {
+                $workingTime = round(Carbon::parse($this['round_check_out_at'])->diffInSeconds(Carbon::parse($this['round_check_in_at'])) / 3600, 2);
+                $checkInTime = Carbon::parse($this['round_check_in_at']);
+                $checkOutTime = Carbon::parse($this['round_check_out_at'])->format('H');
+                return $this->minusLunchTime($checkInTime, $checkOutTime, $workingTime);
+            }
+            if ($this['round_check_in_at'] && $this['round_check_out_at'] && $this['relax_time']) {
+                $workingTime = round(Carbon::parse($this['round_check_out_at'])->diffInSeconds(Carbon::parse($this['round_check_in_at'])) / 3600, 2);
+                $checkInTime = Carbon::parse($this['round_check_in_at']);
+                $checkOutTime = Carbon::parse($this['round_check_out_at'])->format('H');
+                return $this->minusLunchTime($checkInTime, $checkOutTime, $workingTime) - $this['relax_time'] / 60;
+            }
+
     }
 
     //工作时长减午饭休息时间
@@ -184,45 +199,54 @@ class LaborReport extends Model
     //转场序号
     public function getSequenceAttribute()
     {
-        if(Arr::has($this->tempFields,'sequence'))return $this->tempFields['sequence'];
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->orderBy('id','asc')->get();
-        foreach($laborReports as $i=>$laborReport){
-            if($laborReport['id']==$this['id']){
-                $this->tempFields['sequence']=$i+1;
-                return $this->tempFields['sequence'];
+        if(self::$withoutAppends) {
+            if (Arr::has($this->tempFields, 'sequence')) return $this->tempFields['sequence'];
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->orderBy('id', 'asc')->get();
+            foreach ($laborReports as $i => $laborReport) {
+                if ($laborReport['id'] == $this['id']) {
+                    $this->tempFields['sequence'] = $i + 1;
+                    return $this->tempFields['sequence'];
+                }
             }
         }
     }
     public function getAmountOfJoinedAttribute()
     {
-        if(Arr::has($this->tempFields,'amountOfJoined'))return $this->tempFields['amountOfJoined'];
-        $this->tempFields['amountOfJoined']=LaborReport::where('enter_number',$this['enter_number'])->orderBy('id','asc')->count();
-        return $this->tempFields['amountOfJoined'];
+        if(self::$withoutAppends) {
+            if (Arr::has($this->tempFields, 'amountOfJoined')) return $this->tempFields['amountOfJoined'];
+            $this->tempFields['amountOfJoined'] = LaborReport::where('enter_number', $this['enter_number'])->orderBy('id', 'asc')->count();
+            return $this->tempFields['amountOfJoined'];
+        }
     }
 
     //进场时间
     public function getEnterAtAttribute()
     {
-        $laborReportStatus=LaborReportStatus::where('labor_report_id',$this['id'])->where('status','未审核')->orderBy('id','desc')->first();
-        if (empty($laborReportStatus))return null;
-        return Carbon::parse($laborReportStatus['created_at'])->format('Y-m-d H:i:s');
+        if(self::$withoutAppends) {
+            $laborReportStatus = LaborReportStatus::where('labor_report_id', $this['id'])->where('status', '未审核')->orderBy('id', 'desc')->first();
+            if (empty($laborReportStatus)) return null;
+            return Carbon::parse($laborReportStatus['created_at'])->format('Y-m-d H:i:s');
+        }
     }
 
     public function getEnteringRecordAttribute()
     {
-        $laborReport=LaborReport::with(['laborReportStatus'=>function($query){
-            return $query->whereIn('status',['已入场','未审核']);
-        }])->where('user_id',$this['user_id'])->orderBy('id','desc')->first();
-        if(empty($laborReport))return null;
-        return $laborReport;
-
+        if(self::$withoutAppends) {
+            $laborReport = LaborReport::with(['laborReportStatus' => function ($query) {
+                return $query->whereIn('status', ['已入场', '未审核']);
+            }])->where('user_id', $this['user_id'])->orderBy('id', 'desc')->first();
+            if (empty($laborReport)) return null;
+            return $laborReport;
+        }
     }
 
     public function getExitAtAttribute()
     {
-        $laborReportStatus=LaborReportStatus::where('labor_report_id',$this['id'])->where('status','已退场')->orderBy('id','desc')->first();
-        if (empty($laborReportStatus))return null;
-        return Carbon::parse($laborReportStatus['created_at'])->format('Y-m-d H:i:s');
+        if(self::$withoutAppends) {
+            $laborReportStatus = LaborReportStatus::where('labor_report_id', $this['id'])->where('status', '已退场')->orderBy('id', 'desc')->first();
+            if (empty($laborReportStatus)) return null;
+            return Carbon::parse($laborReportStatus['created_at'])->format('Y-m-d H:i:s');
+        }
     }
 
     //创建或获取进场编号
@@ -236,8 +260,10 @@ class LaborReport extends Model
     }
 
     public function getIsExportAttribute(){
-        $laborReportStatus=$this->laborReportStatus()->where('labor_report_id',$this['id'])->orderBy('id','desc')->first();
-        return $laborReportStatus['status']=='已退场'?true:false;
+        if(self::$withoutAppends) {
+            $laborReportStatus = $this->laborReportStatus()->where('labor_report_id', $this['id'])->orderBy('id', 'desc')->first();
+            return $laborReportStatus['status'] == '已退场' ? true : false;
+        }
     }
     //出场更新临时工报表信息
     static function exitAndChangeLaborReport($laborReport,$userDutyCheck){

+ 1 - 1
app/LaborReportStatus.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class LaborReportStatus extends Model
+class LaborReportStatus extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 15 - 11
app/Log.php

@@ -4,26 +4,30 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Relations\HasOne;
 use Illuminate\Support\Str;
 
-class Log extends Model
+class Log extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable = [
-        'operation', 'description','type', 'operator', 'ip','id_user','created_at','updated_at'
+        'operation', 'description','method', 'class', 'ip','id_user','created_at','updated_at'
     ];
-    public function getUserNameAttribute(){
-        $idUser=$this['id_user'];
-        if($idUser){
-            $user=User::find($idUser);
-            return $user['name'];
-        }
-        return '';
+    function user(): HasOne
+    {
+        return $this->hasOne(User::class, 'id','id_user');
     }
     public function getExceptionMarkAttribute(){
-        if (Str::upper(substr($this->type,0,1)) != 'E')return 'N';
-        if (Str::upper(substr($this->type,0,5)) == 'ERROR' || Str::upper(substr($this->type,0,9)) == 'EXCEPTION')
+        if (Str::upper(substr($this->method,0,1)) != 'E')return 'N';
+        if (Str::upper(substr($this->method,0,5)) == 'ERROR' || Str::upper(substr($this->method,0,9)) == 'EXCEPTION')
             return 'Y';
         return 'N';
     }
+//    public function getDescriptionAttribute($value): string
+//    {
+//        return str_replace(
+//            ["\n","\r\n"],
+//            ' ',
+//            $value);
+//    }
 }

+ 1 - 1
app/Logistic.php

@@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Model;
  * @method static Builder orderBy(string $string, string $string1)
  */use App\Traits\ModelTimeFormat;
 
-class Logistic extends Model
+class Logistic extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable = ['name','code',"type","mobile","remark","delivery_fee"];

+ 1 - 1
app/LogisticNumberFeature.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class LogisticNumberFeature extends Model
+class LogisticNumberFeature extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=['logistic_id','name','value','weight'];

+ 1 - 1
app/LogisticTiming.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class LogisticTiming extends Model
+class LogisticTiming extends ModelExtended
 {
     //
     protected $fillable = [

+ 1 - 1
app/MaterialBox.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class MaterialBox extends Model
+class MaterialBox extends ModelExtended
 {
     protected $fillable=['code'];
 }

+ 1 - 1
app/MeasuringMachine.php

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Support\Carbon;
 
-class MeasuringMachine extends Model
+class MeasuringMachine extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 1 - 1
app/Menu.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class Menu extends Model
+class Menu extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 47 - 0
app/ModelExtended.php

@@ -0,0 +1,47 @@
+<?php
+
+
+namespace App;
+
+use App\Services\LogService;
+use Illuminate\Database\Eloquent\Model;
+
+class ModelExtended extends Model
+{
+    protected $isNotLogging=[
+        Log::class
+    ];
+    private $isShouldLog=null;
+    protected function log($input=''):bool{
+        if($this->isShouldLog===null)
+            $this->isShouldLog
+                =array_search(get_class($this),$this->isNotLogging)===false;
+        if(!$this->isShouldLog)return false;
+        $traces=json_encode(array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS),0,5));
+        preg_match('/\"function\"\:\".*?"function\"\:\"(.*?)\"\,\"class\"\:\".*?\"/', $traces, $result);
+        $methodName = $result[1]??'';
+        LogService::log(get_class($this),$methodName,
+            '对象:'.$this->toJson()
+            .'参数:'.json_encode([$input])
+            .'调用堆栈:'.$traces
+        );
+
+        return $this->isShouldLog;
+    }
+
+    function save(array $options = []): bool
+    {
+        $this->log($options);
+        return parent::save($options); // TODO: Change the autogenerated stub
+    }
+    function update(array $attributes = [], array $options = [])
+    {
+        $this->log([$attributes, $options]);
+        return parent::update($attributes, $options); // TODO: Change the autogenerated stub
+    }
+    public function delete()
+    {
+        $this->log();
+        return parent::delete(); // TODO: Change the autogenerated stub
+    }
+}

+ 2 - 1
app/OperatorLog.php

@@ -5,7 +5,7 @@ namespace App;
 use DateTimeInterface;
 use Illuminate\Database\Eloquent\Model;
 
-class OperatorLog extends Model
+class OperatorLog extends ModelExtended
 {
     const UPDATED_AT = null;
     protected $fillable=[
@@ -26,4 +26,5 @@ class OperatorLog extends Model
     {
         return $this['user']['name'] ??'';
     }
+
 }

+ 1 - 1
app/OracleActAllocationDetails.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OracleActAllocationDetails extends Model
+class OracleActAllocationDetails extends ModelExtended
 {
     protected $connection="oracle";
     protected $primaryKey="ALLOCATIONDETAILSID";

+ 1 - 1
app/OracleActTransactionLog.php

@@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Model;
  * TABLE:   ACT_TRANSACTION_LOG
  * EXPLAIN: 库存事务
  */
-class OracleActTransactionLog extends Model
+class OracleActTransactionLog extends ModelExtended
 {
     protected $connection="oracle";
     protected $table="ACT_TRANSACTION_LOG";

+ 2 - 2
app/OracleBasCode.php

@@ -9,11 +9,11 @@ use Illuminate\Database\Eloquent\Model;
  * TABLE:   BAS_Codes
  * EXPLAIN: 系统代码内容
  */
-class OracleBasCode extends Model
+class OracleBasCode extends ModelExtended
 {
     protected $connection="oracle";
     protected $table="BAS_CODES";
     /*
      * column: CodeID=>代码表ID,Code=>代码,CodeName_C=>中文描述
      * */
-}
+}

+ 1 - 1
app/OracleBasCustomer.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OracleBasCustomer extends Model
+class OracleBasCustomer extends ModelExtended
 {
     protected $connection="oracle";
     protected $table="BAS_CUSTOMER";

+ 1 - 1
app/OracleBasSKU.php

@@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Model;
  */
 use App\Traits\ModelTimeFormat;
 
-class OracleBasSKU extends Model
+class OracleBasSKU extends ModelExtended
 {
     use ModelTimeFormat;
     protected $connection="oracle";

+ 2 - 8
app/OracleDOCASNDetail.php

@@ -5,15 +5,13 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class OracleDOCASNDetail extends Model
+class OracleDOCASNDetail extends ModelExtended
 {
     use ModelTimeFormat;
     protected $connection="oracle";
     protected $table="Doc_ASN_Details";
 
-    public function sku(){
-        return OracleBasSKU::query()->where(['sku'=>$this->sku,'customerId'=>$this->customerId])->get();
-    }
+
     public function oracleDocAsnHeader(){
         return $this->belongsTo('App\OracleDOCASNHeader','asnno','asnno');
     }
@@ -27,8 +25,4 @@ class OracleDOCASNDetail extends Model
         return $this->hasOne(OracleBasCode::class,'code','lotatt08')
             ->where('codeid','QLT_STS');
     }
-    public function basSku()
-    {
-        return $this->hasOne(OracleBasSKU::class,'sku','sku');
-    }
 }

+ 1 - 1
app/OracleDOCASNHeader.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OracleDOCASNHeader extends Model
+class OracleDOCASNHeader extends ModelExtended
 {
     use ModelTimeFormat;
     protected $connection="oracle";

+ 1 - 1
app/OracleDOCMovementDetail.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class OracleDOCMovementDetail extends Model
+class OracleDOCMovementDetail extends ModelExtended
 {
     use ModelTimeFormat;
     protected $connection="oracle";

+ 1 - 1
app/OracleDOCMovementHeader.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class OracleDOCMovementHeader extends Model
+class OracleDOCMovementHeader extends ModelExtended
 {
     use ModelTimeFormat;
     protected $connection="oracle";

+ 1 - 1
app/OracleDOCOrderDetail.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OracleDOCOrderDetail extends Model
+class OracleDOCOrderDetail extends ModelExtended
 {
     protected $connection="oracle";
     protected $table="DOC_Order_Details";

+ 1 - 1
app/OracleDOCOrderHeader.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OracleDOCOrderHeader extends Model
+class OracleDOCOrderHeader extends ModelExtended
 {
 
     use ModelTimeFormat;

+ 1 - 1
app/OracleDOCWaveDetails.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OracleDOCWaveDetails extends Model
+class OracleDOCWaveDetails extends ModelExtended
 {
     protected $connection='oracle';
     protected $table='DOC_WAVE_DETAILS';

+ 1 - 1
app/OracleDOCWaveHeader.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 
-class OracleDOCWaveHeader extends Model
+class OracleDOCWaveHeader extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable=[

+ 1 - 1
app/OracleDocOrderPackingSummary.php

@@ -6,7 +6,7 @@ use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
 
-class OracleDocOrderPackingSummary extends Model
+class OracleDocOrderPackingSummary extends ModelExtended
 {
     protected $connection="oracle";
     protected $primaryKey="traceid";

+ 1 - 1
app/OracleIdxAsrsReceive.php

@@ -6,7 +6,7 @@ use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
 
-class OracleIdxAsrsReceive extends Model
+class OracleIdxAsrsReceive extends ModelExtended
 {
     protected $connection="oracle";
     protected $primaryKey="GROUPTASKID";

+ 1 - 1
app/OracleInvLotAtt.php

@@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Model;
  * TABLE:   INV_LOT_ATT
  * EXPLAIN: 批次属性
  */
-class OracleInvLotAtt extends Model
+class OracleInvLotAtt extends ModelExtended
 {
 
     protected $connection="oracle";

+ 1 - 1
app/OracleInvLotLocId.php

@@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Model;
  * TABLE:   INV_LOT_LOC_ID
  * EXPLAIN: 库存状态
  */
-class OracleInvLotLocId extends Model
+class OracleInvLotLocId extends ModelExtended
 {
     protected $connection="oracle";
     protected $table="INV_LOT_LOC_ID";

+ 2 - 19
app/Order.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class Order extends Model
+class Order extends ModelExtended
 {
     //
     use ModelTimeFormat;
@@ -134,24 +134,7 @@ class Order extends Model
 
     public function isEquals($order)
     {
-        return
-            $this['code'] == $order['code'] &&
-            $this['batch_id'] == $order['batch_id'] &&
-            $this['warehouse_id'] == $order['warehouse_id'] &&
-            $this['owner_id'] == $order['owner_id'] &&
-            $this['shop_id'] == $order['shop_id'] &&
-            $this['logistic_id'] == $order['logistic_id'] &&
-            $this['consignee_name'] == $order['consignee_name'] &&
-            $this['consignee_phone'] == $order['consignee_phone'] &&
-            $this['province'] == $order['province'] &&
-            $this['city'] == $order['city'] &&
-            $this['district'] == $order['district'] &&
-            $this['address'] == $order['address'] &&
-            $this['client_code'] = $order['client_code'] &&
-            $this['wms_status'] == $order['wms_status'] &&
-            $this['wms_edittime'] == $order['wms_edittime'] &&
-            $this['order_type'] == $order['order_type'] &&
-            (string)$this['created_at'] == (string)$order['created_at'];
+        return $this['wms_edittime'] == $order['wms_edittime'];
     }
 
     public function assignValueByOrder($order)

+ 1 - 1
app/OrderBin.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OrderBin extends Model
+class OrderBin extends ModelExtended
 {
     protected $fillable = [
         'order_id', 'number',

+ 4 - 1
app/OrderCommodity.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Http\Controllers\Controller;
 use Illuminate\Database\Eloquent\Model;
 
-class OrderCommodity extends Model
+class OrderCommodity extends ModelExtended
 {
     protected $fillable = [
         'id', 'order_id','commodity_id', 'amount','wms_ptltaskid','location'
@@ -17,6 +17,9 @@ class OrderCommodity extends Model
     public function commodity(){
         return $this->hasOne('\App\Commodity','id','commodity_id');
     }
+    public function orderBin(){
+        return $this->hasOne(OrderBin::class,'order_id','order_id');
+    }
     public function getBarcodeAttribute(){
         $commodity=$this->commodity()->first();
         if($commodity)return $commodity['barcode'];

+ 1 - 1
app/OrderCommodityAssign.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OrderCommodityAssign extends Model
+class OrderCommodityAssign extends ModelExtended
 {
     use ModelTimeFormat;
     protected $fillable = [

+ 1 - 1
app/OrderCountingRecord.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OrderCountingRecord extends Model
+class OrderCountingRecord extends ModelExtended
 {
     //
     protected $fillable = ['owner_id','shop_id' ,'warehouse_id' ,'logistic_id' ,'date_target' ,'counting_unit' ,'amount','year','month','week'];

+ 1 - 1
app/OrderIssue.php

@@ -6,7 +6,7 @@ use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
 
-class OrderIssue extends Model
+class OrderIssue extends ModelExtended
 {
     //
     use ModelTimeFormat;

+ 2 - 2
app/OrderIssueOnTop.php

@@ -5,11 +5,11 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OrderIssueOnTop extends Model
+class OrderIssueOnTop extends ModelExtended
 {
     //
     use ModelTimeFormat;
-    
+
     protected $fillable = [ 'order_issue_id','remark'];
 
     public function OrderIssue(){

+ 1 - 1
app/OrderIssueProcessLog.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OrderIssueProcessLog extends Model
+class OrderIssueProcessLog extends ModelExtended
 {
     //
     use ModelTimeFormat;

+ 1 - 1
app/OrderIssueType.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OrderIssueType extends Model
+class OrderIssueType extends ModelExtended
 {
     //
     use ModelTimeFormat;

+ 1 - 1
app/OrderPackage.php

@@ -13,7 +13,7 @@ use Illuminate\Support\Arr;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 
-class OrderPackage extends Model
+class OrderPackage extends ModelExtended
 {
     use ModelTimeFormat;
 

+ 1 - 1
app/OrderPackageCommodities.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OrderPackageCommodities extends Model
+class OrderPackageCommodities extends ModelExtended
 {
     //
     use ModelTimeFormat;

+ 1 - 1
app/OrderTracking.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OrderTracking extends Model
+class OrderTracking extends ModelExtended
 {
 
     use ModelTimeFormat;

+ 1 - 1
app/OrderTrackingOwner.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OrderTrackingOwner extends Model
+class OrderTrackingOwner extends ModelExtended
 {
     //
     use ModelTimeFormat;

+ 1 - 1
app/Owner.php

@@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Auth;
  */
 use App\Traits\ModelTimeFormat;
 
-class Owner extends Model
+class Owner extends ModelExtended
 {
     use ModelTimeFormat;
     public $fillable = [

+ 1 - 1
app/OwnerAreaReport.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OwnerAreaReport extends Model
+class OwnerAreaReport extends ModelExtended
 {
     protected $fillable = [
         "owner_id",             //货主ID

+ 1 - 1
app/OwnerBillReport.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OwnerBillReport extends Model
+class OwnerBillReport extends ModelExtended
 {
    protected $fillable = [
        "owner_id",       //项目ID

+ 1 - 1
app/OwnerContract.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class OwnerContract extends Model
+class OwnerContract extends ModelExtended
 {
     use ModelTimeFormat;
 

+ 1 - 1
app/OwnerFeeDetail.php

@@ -5,7 +5,7 @@ namespace App;
 use App\Services\ProcessMethodService;
 use Illuminate\Database\Eloquent\Model;
 
-class OwnerFeeDetail extends Model
+class OwnerFeeDetail extends ModelExtended
 {
     protected $fillable = [
         "owner_id",         //货主ID

+ 1 - 1
app/OwnerInStorageRule.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OwnerInStorageRule extends Model
+class OwnerInStorageRule extends ModelExtended
 {
     protected $fillable = [
         "owner_price_operation_id", //作业计费ID

+ 1 - 1
app/OwnerOutStorageRule.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OwnerOutStorageRule extends Model
+class OwnerOutStorageRule extends ModelExtended
 {
     protected $fillable = [
         "owner_price_operation_id",         //作业计费ID

+ 1 - 1
app/OwnerPriceDirectLogistic.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
 
-class OwnerPriceDirectLogistic extends Model
+class OwnerPriceDirectLogistic extends ModelExtended
 {
     protected $fillable = [
         "name",     //名称

+ 1 - 1
app/OwnerPriceDirectLogisticCar.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OwnerPriceDirectLogisticCar extends Model
+class OwnerPriceDirectLogisticCar extends ModelExtended
 {
     protected $fillable = [
         "owner_price_direct_logistic_id",   //直发车计费ID

+ 1 - 1
app/OwnerPriceExpress.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
 
-class OwnerPriceExpress extends Model
+class OwnerPriceExpress extends ModelExtended
 {
     protected $fillable = [
         "name",             //名称

+ 1 - 1
app/OwnerPriceExpressProvince.php

@@ -4,7 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class OwnerPriceExpressProvince extends Model
+class OwnerPriceExpressProvince extends ModelExtended
 {
     protected $fillable = [
         "owner_price_express_id",   //快递价格ID

+ 1 - 1
app/OwnerPriceLogistic.php

@@ -5,7 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
 
-class OwnerPriceLogistic extends Model
+class OwnerPriceLogistic extends ModelExtended
 {
     protected $fillable = [
         "name",             //名称

Деякі файли не було показано, через те що забагато файлів було змінено