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

Merge branch 'master' into zengjun

ajun 5 роки тому
батько
коміт
1038f6e267
100 змінених файлів з 860 додано та 300 видалено
  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. 10 0
      app/Console/Commands/stubs/model.stub
  12. 5 1
      app/Console/Kernel.php
  13. 1 1
      app/CustomField.php
  14. 11 1
      app/Customer.php
  15. 10 7
      app/CustomerLog.php
  16. 4 1
      app/CustomerLogStatus.php
  17. 12 0
      app/CustomerTag.php
  18. 1 1
      app/Depository.php
  19. 15 0
      app/Exceptions/ErrorException.php
  20. 16 0
      app/Exceptions/Exception.php
  21. 16 0
      app/Exceptions/FatalException.php
  22. 55 10
      app/Exceptions/Handler.php
  23. 16 0
      app/Exceptions/PanicException.php
  24. 16 0
      app/Exceptions/WarningException.php
  25. 1 1
      app/Feature.php
  26. 1 0
      app/Http/Controllers/Auth/LoginController.php
  27. 3 2
      app/Http/Controllers/CitiesController.php
  28. 16 4
      app/Http/Controllers/CustomerBaseController.php
  29. 5 9
      app/Http/Controllers/CustomerController.php
  30. 24 50
      app/Http/Controllers/CustomerLogController.php
  31. 50 0
      app/Http/Controllers/CustomerLogStatusController.php
  32. 60 0
      app/Http/Controllers/CustomerTagController.php
  33. 12 10
      app/Http/Controllers/LogController.php
  34. 55 0
      app/Http/Controllers/OwnerContractController.php
  35. 7 0
      app/Http/Controllers/OwnerController.php
  36. 20 46
      app/Http/Controllers/TestController.php
  37. 7 0
      app/Http/Controllers/api/thirdPart/haiq/LightController.php
  38. 125 67
      app/Http/Controllers/api/thirdPart/haiq/StorageController.php
  39. 59 0
      app/Http/Requests/ForeignHaiRobotic_taskUpdateRequest.php
  40. 25 9
      app/Imports/UpdatePickZone.php
  41. 1 1
      app/InventoryAccount.php
  42. 1 1
      app/InventoryAccountMission.php
  43. 1 1
      app/InventoryBlindReceiveExcel.php
  44. 1 1
      app/InventoryCompare.php
  45. 1 1
      app/InventoryDailyLog.php
  46. 1 1
      app/InventoryDailyLoggingOwner.php
  47. 1 1
      app/JobType.php
  48. 1 1
      app/LaborCompany.php
  49. 1 1
      app/LaborReport.php
  50. 1 1
      app/LaborReportStatus.php
  51. 15 11
      app/Log.php
  52. 1 1
      app/Logistic.php
  53. 1 1
      app/LogisticNumberFeature.php
  54. 1 1
      app/LogisticTiming.php
  55. 1 1
      app/MaterialBox.php
  56. 1 1
      app/MeasuringMachine.php
  57. 1 1
      app/Menu.php
  58. 47 0
      app/ModelExtended.php
  59. 19 0
      app/Observers/OwnerObserver.php
  60. 2 1
      app/OperatorLog.php
  61. 1 1
      app/OracleActAllocationDetails.php
  62. 1 1
      app/OracleActTransactionLog.php
  63. 2 2
      app/OracleBasCode.php
  64. 1 1
      app/OracleBasCustomer.php
  65. 1 1
      app/OracleBasSKU.php
  66. 1 1
      app/OracleDOCASNDetail.php
  67. 1 1
      app/OracleDOCASNHeader.php
  68. 1 1
      app/OracleDOCMovementDetail.php
  69. 1 1
      app/OracleDOCMovementHeader.php
  70. 1 1
      app/OracleDOCOrderDetail.php
  71. 1 1
      app/OracleDOCOrderHeader.php
  72. 1 1
      app/OracleDOCWaveDetails.php
  73. 1 1
      app/OracleDOCWaveHeader.php
  74. 1 1
      app/OracleDocOrderPackingSummary.php
  75. 1 1
      app/OracleIdxAsrsReceive.php
  76. 1 1
      app/OracleInvLotAtt.php
  77. 1 1
      app/OracleInvLotLocId.php
  78. 1 1
      app/Order.php
  79. 1 1
      app/OrderBin.php
  80. 4 1
      app/OrderCommodity.php
  81. 1 1
      app/OrderCommodityAssign.php
  82. 1 1
      app/OrderCountingRecord.php
  83. 1 1
      app/OrderIssue.php
  84. 2 2
      app/OrderIssueOnTop.php
  85. 1 1
      app/OrderIssueProcessLog.php
  86. 1 1
      app/OrderIssueType.php
  87. 1 1
      app/OrderPackage.php
  88. 1 1
      app/OrderPackageCommodities.php
  89. 1 1
      app/OrderTracking.php
  90. 1 1
      app/OrderTrackingOwner.php
  91. 6 3
      app/Owner.php
  92. 1 1
      app/OwnerAreaReport.php
  93. 1 1
      app/OwnerBillReport.php
  94. 28 0
      app/OwnerContract.php
  95. 1 1
      app/OwnerFeeDetail.php
  96. 1 1
      app/OwnerInStorageRule.php
  97. 1 1
      app/OwnerOutStorageRule.php
  98. 1 1
      app/OwnerPriceDirectLogistic.php
  99. 1 1
      app/OwnerPriceDirectLogisticCar.php
  100. 1 1
      app/OwnerPriceExpress.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';
+    }
+
+}

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

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

+ 5 - 1
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
 {
@@ -52,7 +53,7 @@ class Kernel extends ConsoleKernel
         $schedule->command('createOwnerBillReport')->monthlyOn(1);
         $schedule->command('createOwnerAreaReport')->monthlyOn(25);
         $schedule->command('sync:batch')->everyMinute();
-//        $schedule->command('sync:order')->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',

+ 11 - 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;
 
@@ -24,4 +24,14 @@ class Customer extends Model
     {
         return $this->hasMany(CustomerLog::class,'customer_id','id');
     }
+
+    public function owners()
+    {   //子项目
+        return $this->hasMany(Owner::class,"customer_id","id");
+    }
+
+    public function tags()
+    {   //标签
+        return $this->belongsToMany(CustomerTag::class,"customer_tag_customer");
+    }
 }

+ 10 - 7
app/CustomerLog.php

@@ -2,25 +2,28 @@
 
 namespace App;
 
+use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
 
-class CustomerLog extends Model
+class CustomerLog extends ModelExtended
 {
+    use ModelTimeFormat;
+
     protected $fillable = ['customer_id', 'customer_log_status_id', 'user_id', 'description'];
     protected $guarded = ['id'];
 
-    public function customerLogStatus(): BelongsTo
-    {
-        return $this->belongsTo(CustomerLogStatus::class);
+
+    public function status()
+    {   //状态
+        return $this->belongsTo(CustomerLogStatus::class,"customer_log_status_id","id");
     }
 
-    public function user(): BelongsTo
+    public function user()
     {
         return $this->belongsTo(User::class);
     }
 
-    public function customer(): BelongsTo
+    public function customer()
     {
         return $this->belongsTo(Customer::class);
     }

+ 4 - 1
app/CustomerLogStatus.php

@@ -2,10 +2,13 @@
 
 namespace App;
 
+use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-class CustomerLogStatus extends Model
+class CustomerLogStatus extends ModelExtended
 {
+    use ModelTimeFormat;
+
     protected $fillable = ['name', 'description'];
     protected $guarded = ['id'];
 }

+ 12 - 0
app/CustomerTag.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+class CustomerTag extends ModelExtended
+{
+    protected $fillable=[
+        "name","explanation"
+    ];
+}

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

+ 55 - 10
app/Exceptions/Handler.php

@@ -3,11 +3,13 @@
 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 Symfony\Component\HttpKernel\Exception\HttpException;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Throwable;
@@ -55,19 +57,62 @@ class Handler extends ExceptionHandler
      */
     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()??'')
+                        :'')
+                    .' message:'.(
+                    method_exists($exception,'getMessage')
+                        ?($exception->getMessage()??'')
+                        :'')
+                    .' trace:'.
+                    (method_exists($exception,'getTraceAsString')
+                        ?($exception->getTraceAsString()??'')
+                        :'');
+            })();
+            if(strpos($exception->getMessage(),'This action is unauthorized')!==false){
+                return response()->view('exception.unauthorized');
             }
+            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(),
+                ]);
             }
-            Controller::logS('exception',class_basename($exception),$exception->getTraceAsString().'|| ||'.json_encode($request));
-        }catch (\Exception $e){
-
+        }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('/'));  }

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

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Owner;
 use App\Services\LogService;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
@@ -13,13 +14,15 @@ class CustomerBaseController extends Controller
     /**
      * Display a listing of the resource.
      *
+     * @param Request $request
      * @return Response
      */
-    public function index()
+    public function index(Request $request)
     {
         if(!Gate::allows('客户-查询')){ return redirect('denied');  }
-        $customers = app('CustomerService')->paginate();
-        return response()->view('customer.customer.index',compact("customers"));
+        $customers = app('CustomerService')->paginate($request->input(),["owners.contracts.files"]);
+        $owners = app("OwnerService")->getIntersectPermitting(['id','name','customer_id']);
+        return response()->view('customer.customer.index',compact("customers","owners"));
     }
 
     /**
@@ -51,7 +54,7 @@ class CustomerBaseController extends Controller
             "invoice_address"=>$request->input("invoice_address"),
             "contact_man"=>$request->input("contact_man"),
             "phone"=>$request->input("phone"),
-            "comment"=>$request->input("remark"),
+            "remark"=>$request->input("remark"),
         ]);
         LogService::log(__METHOD__,"录入客户",json_encode($request->input(),JSON_UNESCAPED_UNICODE));
         return response()->redirectTo("customer/customer")->with("successTip","成功创建客户“".$request->input("name")."”");
@@ -129,4 +132,13 @@ class CustomerBaseController extends Controller
             'name'=>'客户名称',
         ]);
     }
+
+    public function relatedOwner(Request $request)
+    {
+        $ids = $request->input("ids") ?? [];
+        $id = $request->input("customer_id");
+        $row = Owner::query()->whereIn("id",$ids)->update(["customer_id"=>$id]);
+        if ($row==count($ids))return ["success"=>true];
+        return ["success"=>false,"data"=>"修改错误,影响了“".$row."”个项目"];
+    }
 }

+ 5 - 9
app/Http/Controllers/CustomerController.php

@@ -89,7 +89,7 @@ class CustomerController extends Controller
         if(!Gate::allows('客户管理-项目-查询')){ return redirect('denied');  }
         /** @var OwnerService $service */
         $service = app('OwnerService');
-        $owners = $service->paginate(['customer_id'=>true],['customer',"userOwnerGroup","ownerStoragePriceModels","ownerAreaReport"=>function($query){
+        $owners = $service->paginate(['customer_id'=>true],['customer',"contracts","userOwnerGroup","ownerStoragePriceModels","ownerAreaReport"=>function($query){
             $month = date('Y-m');
             /** @var Builder $query */
             $query->where("counting_month","like",$month."%");
@@ -102,7 +102,7 @@ class CustomerController extends Controller
         if(!Gate::allows('客户管理-项目-查询')){ return redirect('denied');  }
         /** @var OwnerService $service */
         $service = app('OwnerService');
-        $withs = ['customer',"userOwnerGroup","ownerStoragePriceModels","ownerAreaReport"=>function($query){
+        $withs = ['customer',"userOwnerGroup","contracts","ownerStoragePriceModels","ownerAreaReport"=>function($query){
             $month = date('Y-m');
             /** @var Builder $query */
             $query->where("counting_month","like",$month."%");
@@ -112,7 +112,7 @@ class CustomerController extends Controller
         if ($request->checkAllSign ?? false) unset($params['checkAllSign']);
         else $params = ["id"=>$request->data ?? ''];
         $owners = $service->get($params,$withs);
-        $column = ["客户","税率","项目","货主代码","合同号","创建日期","销售名称","公司全称","联系人","联系电话","项目小组","用仓类型","当月结算面积","月单量预警","是否激活","项目描述"];
+        $column = ["客户","税率","项目","货主代码","创建日期","合同号","销售名称","公司全称","联系人","联系电话","项目小组","用仓类型","当月结算面积","月单量预警","是否激活","项目描述"];
         $list = [];
         foreach ($owners as $owner){
             $list[] = [
@@ -120,9 +120,9 @@ class CustomerController extends Controller
                 $owner->tax_rate,
                 $owner->name,
                 $owner->code,
-                $owner->contract_number,
                 $owner->created_at,
-                $owner->salesman,
+                implode("\r\n",array_column($owner->contracts,"contract_number")),
+                implode("\r\n",array_column($owner->contracts,"salesman")),
                 $owner->customer ? $owner->customer->company_name : '',
                 $owner->linkman,
                 $owner->phone_number,
@@ -174,8 +174,6 @@ class CustomerController extends Controller
             app('OwnerService')->update($owner,[
                 "customer_id"           => $params["customer_id"],
                 "tax_rate"              => $params["tax_rate"],
-                "contract_number"       => $params["contract_number"],
-                "salesman"              => $params["salesman"],
                 "linkman"               => $params["linkman"],
                 "phone_number"          => $params["phone_number"],
                 "user_owner_group_id"   => $params["owner_group_id"],
@@ -192,8 +190,6 @@ class CustomerController extends Controller
                 "code"                  => $params["code"],
                 "customer_id"           => $params["customer_id"],
                 "tax_rate"              => $params["tax_rate"],
-                "contract_number"       => $params["contract_number"],
-                "salesman"              => $params["salesman"],
                 "linkman"               => $params["linkman"],
                 "phone_number"          => $params["phone_number"],
                 "user_owner_group_id"   => $params["owner_group_id"],

+ 24 - 50
app/Http/Controllers/CustomerLogController.php

@@ -2,67 +2,41 @@
 
 namespace App\Http\Controllers;
 
-use App\Customer;
+
 use App\CustomerLog;
-use App\CustomerLogStatus;
-use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 
 class CustomerLogController extends Controller
 {
-    public function __construct()
-    {
-        $this->middleware('auth');
-    }
-
-    public function index(Request $request)
-    {
-        $customerLog = CustomerLog::query()->with(['customerLogStatus', 'user', 'customer'])->where('id',$request->id) ->orderByDesc('updated_at')->paginate();
-        return view('customer.customerLog.index', compact('customerLog'));
-    }
-
-    public function show($customerLog_id)
-    {
-        $customerLog =CustomerLog::query()->with(['customerLogStatus', 'user', 'customer'])->where('id',$customerLog_id)->first();
-        return view('customer.customerLog.show', compact('customerLog'));
-    }
-
-    public function create(CustomerLog $customerLog)
+    public function get(Request $request)
     {
-        $customers = Customer::all();
-        $customerLogStatuses = CustomerLogStatus::all();
-        return view('customer.customerLog.createAndEdit', compact('customerLog', 'customers', 'customerLogStatuses'));
+        $customerId = $request->input("customer_id");
+        if (!$customerId)return ["success"=>false,"data"=>"非法参数"];
+        return ["success"=>true,"data"=>app("CustomerLogService")->get(["customer_id"=>$customerId],["status:id,name","user:id,name"])];
     }
 
-    public function store(Request $request): RedirectResponse
+    public function update(Request $request)
     {
-        $data = $request->all();
-        $data['user_id'] = auth()->id();
-        $customerLog = CustomerLog::query()->create($data);
-        return redirect()->route('customerLog.show', $customerLog->id)->with('message', 'Created successfully.');
+        $id = $request->input("id");
+        if (!$id) return ["success"=>false,"data"=>"非法参数"];
+        return ["success"=>true,"data"=>app("CustomerLogService")->update(["id"=>$id],["description"=>$request->input("description")])];
     }
 
-    public function edit(CustomerLog $customerLog)
+    public function store(Request $request)
     {
-        $this->authorize('update', $customerLog);
-        $customers = Customer::all();
-        $customerLogStatuses = CustomerLogStatus::all();
-        return view('customer.customerLog.createAndEdit', compact('customerLog', 'customers', 'customerLogStatuses'));
-    }
-
-    public function update(Request $request, CustomerLog $customerLog)
-    {
-        $this->authorize('update', $customerLog);
-        $customerLog->update($request->all());
-
-        return redirect()->route('customerLog.show', $customerLog->id)->with('message', 'Updated successfully.');
-    }
-
-    public function destroy(CustomerLog $customerLog)
-    {
-        $this->authorize('destroy', $customerLog);
-        $customerLog->delete();
-
-        return redirect()->route('customerLog.index')->with('message', 'Deleted successfully.');
+        $customerId = $request->input("customer_id");
+        $description = $request->input("description");
+        $customerLogStatusId = $request->input("customer_log_status_id");
+        if (!$customerId || !$description || !$customerLogStatusId)return ["success"=>false,"data"=>"检查您的输入"];
+        /** @var CustomerLog $log */
+        $log = app("CustomerLogService")->create([
+            "customer_id" => $customerId,
+            "description" => $description,
+            "customer_log_status_id" => $customerLogStatusId,
+            "user_id" => Auth::id(),
+        ]);
+        $log->load(["status:id,name","user:id,name"]);
+        return ["success"=>true,"data"=>$log];
     }
 }

+ 50 - 0
app/Http/Controllers/CustomerLogStatusController.php

@@ -3,6 +3,10 @@
 namespace App\Http\Controllers;
 
 use App\CustomerLogStatus;
+use App\Services\LogService;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Validator;
 
 
 class CustomerLogStatusController extends Controller
@@ -14,7 +18,53 @@ class CustomerLogStatusController extends Controller
 
     public function index()
     {
+        if(!Gate::allows('客户-客户状态-查询')){ return redirect(url('denied'));  }
         $customerLogStatuses = CustomerLogStatus::query()->paginate();
         return view('customer.customerLogStatus.index', compact('customerLogStatuses'));
     }
+
+    public function get()
+    {
+        return ["success"=>true,"data"=>app("CustomerLogStatusService")->getSelection()];
+    }
+
+    public function save(Request $request)
+    {
+        if(!Gate::allows('客户-客户状态-录入') || !Gate::allows('客户-客户状态-编辑')){ return ["success"=>false,"data"=>"无权操作"];  }
+        $errors = $this->validator($request->input(),$request->input("id"))->errors();
+        if (count($errors) > 0)return ["success"=>true,"data"=>["errors"=>$errors]];
+        if ($request->input("id")){
+            app("CustomerLogStatusService")->update(["id"=>$request->input("id")],
+                ["name"=>$request->input("name"),"description"=>$request->input("description")]);
+            LogService::log(__METHOD__,"修改客户状态",json_encode($request->input(),JSON_UNESCAPED_UNICODE));
+            return ["success"=>true];
+        }
+        /** @var CustomerLogStatus $model */
+        $model = app("CustomerLogStatusService")->create(["name"=>$request->input("name"),"description"=>$request->input("description")]);
+        LogService::log(__METHOD__,"录入客户状态",$model->toJson());
+        return ["success"=>true,"data"=>$model];
+    }
+
+    private function validator($params, $id)
+    {
+        return Validator::make($params,[
+            "name" => ['max:50','required',$id?"unique:customer_log_statuses,name,$id":'unique:customer_log_statuses,name']
+        ],[
+            'required'=>':attribute 为必填项',
+            'max'=>':attribute 最大为50个字符',
+            'unique'=>':attribute 已存在',
+        ],[
+            "name" => "名称"
+        ]);
+    }
+
+    public function destroy(Request $request)
+    {
+        if(!Gate::allows('客户-客户状态-删除')){ return ["success"=>false,"data"=>"无权操作"];  }
+        $id = $request->input("id");
+        if (!$id) return ["success"=>false,"data"=>"非法参数!"];
+        app("CustomerLogStatusService")->destroy($request->input("id"));
+        LogService::log(__METHOD__,"删除客户状态",$id);
+        return ["success"=>true];
+    }
 }

+ 60 - 0
app/Http/Controllers/CustomerTagController.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\CustomerTag;
+use App\Services\LogService;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Validator;
+
+class CustomerTagController extends Controller
+{
+    public function index()
+    {
+        $tags = CustomerTag::query()->orderByDesc("id")->get();
+        return view("customer.customer.tag.index",compact("tags"));
+    }
+
+    public function save(Request $request)
+    {
+        if(!Gate::allows('客户-客户标签-编辑')){ return ["success"=>false,"data"=>"无权操作!"]; }
+        $errors = $this->validator($request->input(),$request->input("id"))->errors();
+        if (count($errors) > 0)return ["success"=>true,"data"=>["errors"=>$errors]];
+        if ($request->input("id")){
+            CustomerTag::query()->where("id",$request->input("id"))->update([
+                "name"=>$request->input("name"),
+                "explanation"=>$request->input("explanation")
+            ]);
+            LogService::log(__METHOD__,"录入客户标签",json_encode($request->input(),JSON_UNESCAPED_UNICODE));
+            return ["success"=>true];
+        }
+        $model = CustomerTag::query()->create([
+            "name"=>$request->input("name"),
+            "explanation"=>$request->input("explanation")
+        ]);
+        LogService::log(__METHOD__,"录入客户标签",$model->toJson());
+        return ["success"=>true,"data"=>$model];
+    }
+
+    public function destroy($id)
+    {
+        if(!Gate::allows('客户-客户标签-删除')){ return ["success"=>false,"data"=>"无权操作!"];  }
+        CustomerTag::destroy($id);
+        LogService::log(__METHOD__,"删除客户标签",$id);
+        return ["success"=>true];
+    }
+
+    private function validator($params, $id)
+    {
+        return Validator::make($params,[
+            "name" => ['max:50','required',$id?"unique:customer_tags,name,$id":'unique:customer_tags,name']
+        ],[
+            'required'=>':attribute 为必填项',
+            'max'=>':attribute 最大为50个字符',
+            'unique'=>':attribute 已存在',
+        ],[
+            "name" => "标签名"
+        ]);
+    }
+}

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

+ 55 - 0
app/Http/Controllers/OwnerContractController.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\OwnerContract;
+use App\UploadFile;
+use Faker\Provider\Uuid;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Storage;
+
+class OwnerContractController extends Controller
+{
+    public function store(Request $request)
+    {
+        if(!Gate::allows('客户-编辑')){ return ['success'=>false,"data"=>"无权操作"];  }
+        $owner_id = $request->input("owner_id");
+        $contract_number = $request->input("contract_number");
+        if (!$owner_id || !$contract_number)return ["success"=>false,"data"=>"非法参数"];
+        $remark = $request->input("remark");
+        $contract = OwnerContract::query()->create([
+            "owner_id" => $owner_id,
+            "contract_number" => $contract_number,
+            "salesman" => Auth::user()['name'],
+            "remark" => $remark,
+        ]);
+        $files = $request->file("files");
+        if ($files){
+            $uploadFiles = [];
+            foreach ($files as $file){
+                $suffix = strtolower($file->getClientOriginalExtension());
+                $path = $file->storeAs("contract",Uuid::uuid().".".$suffix);
+                $uploadFiles[] = [
+                    "table_name"    => "contracts",
+                    "table_id"      => $contract->id,
+                    "url"           => $path,
+                    "type"          => $suffix,
+                    "file_name"     => $file->getClientOriginalName(),
+                ];
+            }
+            UploadFile::query()->insert($uploadFiles);
+        }
+        $contract->load(["owner","files"]);
+        return ["success"=>true,"data"=>$contract];
+    }
+
+    public function downFile(Request $request)
+    {
+        if(!Gate::allows('客户-查询'))return ['success'=>false,"data"=>"无权操作"];
+        $file = $request->input("file");
+        $name = $request->input("name");
+        return Storage::download($file,$name);
+    }
+}

+ 7 - 0
app/Http/Controllers/OwnerController.php

@@ -170,4 +170,11 @@ class OwnerController extends Controller
         app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
         return ['success' => 'true', 'owner' => $owner];
     }
+
+    public function get(Request $request)
+    {
+        $params = [];
+        if ($request->has("customer_id"))$params["customer_id"] = $request->input("customer_id");
+        return ["success"=>true,"data"=>app("OwnerService")->get($params,null,false)];
+    }
 }

+ 20 - 46
app/Http/Controllers/TestController.php

@@ -6,15 +6,19 @@ 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;
@@ -55,6 +59,7 @@ 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;
@@ -69,6 +74,8 @@ 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;
@@ -111,29 +118,16 @@ class TestController extends Controller
             app(BatchUpdateService::class)->batchUpdate('inventory_accounts', $updateParams);
         }
     }
+    public function zzd(Request $request)
+    {
+        Storage::download("test.jpg");
+        return 123;
+    }
 
-    public function zzd()
+    public function zzd1()
     {
-        $row = 1;
-        foreach (StoreItems::query()->with(["depository", "store"])->where("store_id", 0)->cursor() as $flight) {
-            $sql = <<<sql
- select ASNNO from DOC_ASN_DETAILS left join bas_sku on DOC_ASN_DETAILS.SKU= BAS_SKU.SKU
- WHERE asnlineno = ? AND skudescrc = ?
- AND BAS_SKU.sku = ? AND alternate_sku1 = ? AND expectedqty_each = ?
-sql;
-            $param = [$flight->asn_line_code, $flight->name, $flight->sku, $flight->barcode, $flight->amount];
-            if ($flight->depository) $sql .= " AND LOTATT05 = '" . $flight->depository->code . "' ";
-            else $sql .= "  AND LOTATT05 IS NULL";
-            $r = DB::connection("oracle")->selectOne(DB::raw($sql), $param);
-            if ($r) {
-                $store = Store::query()->where("asn_code", $r->asnno)->first();
-                if ($store) {
-                    $row = StoreItems::query()->where("id", $flight->id)->where("store_id", 0)->update(["store_id" => $store->id]);
-                }
-            }
-            $row++;
-        }
-        echo "已处理:" . $row . "<br/>";
+        echo \request()->input("name");
+        exit();
     }
 
     public function mergeCarrier()
@@ -261,29 +255,9 @@ sql;
 
     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)
@@ -1320,8 +1294,8 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
 
     public function editOrderSyncAt()
     {
-        ValueStore::query()->where('name', 'order_last_created_sync_at')->update(['value' => '2020-12-20 09:00:00']);
-        ValueStore::query()->where('name', 'order_last_updated_sync_at')->update(['value' => '2020-12-20 09:00:00']);
+        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()

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

+ 125 - 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,40 @@ 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){
+        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->throwException();
         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',
+           '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()));
+                $validator->errors()->add('data',$validator->errors()->toJson());
+            }
+
+            $errMsg=(function()use($validator){
+                if($validator->errors()->isEmpty())return '';
+                return $errMsg = '错误: '.$validator->errors()->toJson();
+            })();
+
+            LogService::log(__METHOD__,__FUNCTION__,
+                $errMsg??''
+                .'请求:'.json_encode($this->all())
+                .'调用堆栈:'.json_encode(array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS),0,3))
+            );
+        });
+    }
+}

+ 25 - 9
app/Imports/UpdatePickZone.php

@@ -81,7 +81,7 @@ class UpdatePickZone implements ToCollection,WithHeadingRow
                 $errors[] = "第“" . ($index + 2) . "”行未知订单商品";
                 continue;
             }
-            $sql = "select BAS_ZONE.DESCR,INV_LOT_LOC_ID.LOCATIONID,INV_LOT_LOC_ID.LOTNUM,BAS_LOCATION.PICKZONE,(INV_LOT_LOC_ID.QTY-INV_LOT_LOC_ID.QTYALLOCATED) AS qty from INV_LOT_ATT LEFT JOIN
+            $sql = "select BAS_ZONE.DESCR,INV_LOT_LOC_ID.LOCATIONID,INV_LOT_LOC_ID.LOTNUM,BAS_LOCATION.PICKZONE,(INV_LOT_LOC_ID.QTY-INV_LOT_LOC_ID.QTYALLOCATED-QTYONHOLD-QTYRPOUT-QTYMVOUT) AS qty from INV_LOT_ATT LEFT JOIN
                         INV_LOT_LOC_ID ON INV_LOT_ATT.LOTNUM = INV_LOT_LOC_ID.LOTNUM LEFT JOIN BAS_LOCATION ON INV_LOT_LOC_ID.LOCATIONID = BAS_LOCATION.LOCATIONID
                     LEFT JOIN BAS_ZONE ON BAS_LOCATION.PICKZONE = BAS_ZONE.ZONE 
                     where INV_LOT_ATT.LOTNUM in (select LOTNUM from INV_LOT_LOC_ID where CUSTOMERID = ? AND SKU = ? GROUP BY LOTNUM)";
@@ -103,20 +103,26 @@ class UpdatePickZone implements ToCollection,WithHeadingRow
             $result = null;
             if (count($lots) == 1)$result = $lots[0];
             else {
-                $zone = ["拣货区","存储区","虚拟库区"];
-                $zones = [];
+                $zone = ["存储","拣货","虚拟"];
+                $zones = [[],[],[]];
                 foreach ($lots as $lot){
-                    foreach ($zone as $index=>$str){
+                    foreach ($zone as $ind=>$str){
                         if (mb_strpos($lot->descr,$str) !== false){
-                            $zones[$index][] = $lot;
+                            $zones[$ind][] = $lot;
                             break;
                         }
                     }
                 }
                 foreach ($zones as $zl){
-                    $result = $this->matching($zl,$item["数量"]);
+                    $result = $this->matchingMax($zl,$item["数量"]);
                     if ($result)break;
                 }
+                if (!$result){
+                    foreach ($zones as $zl){
+                        $result = $this->matchingMin($zl,$item["数量"]);
+                        if ($result)break;
+                    }
+                }
             }
             if ($result){
                 try{
@@ -170,19 +176,29 @@ class UpdatePickZone implements ToCollection,WithHeadingRow
         Cache::put("commodityAssign",["success"=>true,"data"=>$models,"errors"=>$errors]);
     }
 
-    private function matching($lots, $amount)
+    private function matchingMax($lots, $amount)
     {
         if (!$lots) return null;
-        $min = null;
         $max = null;
         $map = [];
         foreach ($lots as $i => $l){
             $qty = (int)$l->qty;
             $map[$qty] = $i;
             if (($qty >= $amount && $qty<=$max) || $max===null)$max = $qty;
+        }
+        if ($max !== null && $max>=$amount)return $lots[$map[$max]];
+        return null;
+    }
+    private function matchingMin($lots, $amount)
+    {
+        if (!$lots) return null;
+        $min = null;
+        $map = [];
+        foreach ($lots as $i => $l){
+            $qty = (int)$l->qty;
+            $map[$qty] = $i;
             if (($qty < $amount && $qty>=$min) || $min===null)$min = $qty;
         }
-        if ($max !== null)return $lots[$map[$max]];
         if ($min !== null)return $lots[$map[$min]];
         return null;
     }

+ 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=[

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

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

+ 19 - 0
app/Observers/OwnerObserver.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Observers;
+
+use App\Owner;
+
+class OwnerObserver
+{
+    /**
+     * 监听插入事件
+     *
+     * @param  \App\Owner  $owner
+     * @return void
+     */
+    public function created(Owner $owner)
+    {
+        app("OwnerService")->syncPush($owner);
+    }
+}

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

+ 1 - 1
app/OracleDOCASNDetail.php

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

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

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

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

+ 6 - 3
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 = [
@@ -21,8 +21,6 @@ class Owner extends Model
         'deleted_at',           //删除时间
         "customer_id",          //客户ID
         "tax_rate",             //税率
-        "contract_number",      //合同号
-        "salesman",             //销售名称
         "linkman",              //联系人
         "phone_number",         //联系电话
         "user_owner_group_id",  //项目组ID
@@ -60,6 +58,11 @@ class Owner extends Model
         return $this->belongsTo(OrderTrackingOwner::class,'id','owner_id');
     }
 
+    public function contracts()
+    {   //合同
+        return $this->hasMany(OwnerContract::class,"owner_id","id");
+    }
+
     public function order(){
         return $this->hasOne(Order::class,'owner_id','id');
     }

+ 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

+ 28 - 0
app/OwnerContract.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Model;
+
+class OwnerContract extends ModelExtended
+{
+    use ModelTimeFormat;
+
+    protected $fillable=[
+        "contract_number",  //合同号
+        "salesman",         //销售名称
+        "remark",           //备注
+        "owner_id",         //外键货主
+    ];
+
+    public function files()
+    {   //合同文件
+        return $this->hasMany(UploadFile::class,"table_id","id")
+            ->where("table_name","contracts");
+    }
+    public function owner()
+    {   //货主
+        return $this->belongsTo(Owner::class,"owner_id","id");
+    }
+}

+ 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",             //名称

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