Explorar o código

Merge branch 'master' into zengjun

# Conflicts:
#	app/Http/Controllers/RejectedBillController.php
#	app/Providers/AppServiceProvider.php
#	app/RejectedBill.php
#	app/Services/RejectedBillService.php
ajun %!s(int64=5) %!d(string=hai) anos
pai
achega
209986e727
Modificáronse 100 ficheiros con 1440 adicións e 456 borrados
  1. 1 1
      app/Batch.php
  2. 5 3
      app/Components/AsyncResponse.php
  3. 1 1
      app/Console/Commands/CreateOwnerAreaReport.php
  4. 1 1
      app/Console/Commands/CreateOwnerReport.php
  5. 1 1
      app/Console/Commands/InventoryDailyLoggingOwner.php
  6. 1 1
      app/Console/Commands/MakeModelCommand.php
  7. 18 3
      app/Console/Commands/MakeServiceCommand.php
  8. 22 2
      app/Console/Commands/MakeTestCommand.php
  9. 2 2
      app/Console/Commands/stubs/model.stub
  10. 11 1
      app/Console/Commands/stubs/test.service.stub
  11. 2 2
      app/Console/Kernel.php
  12. 1 1
      app/CustomerTag.php
  13. 0 1
      app/Exports/Export.php
  14. 1 1
      app/Http/Controllers/CitiesController.php
  15. 1 1
      app/Http/Controllers/CommodityController.php
  16. 8 4
      app/Http/Controllers/ControlPanelController.php
  17. 17 8
      app/Http/Controllers/CustomerBaseController.php
  18. 38 51
      app/Http/Controllers/CustomerController.php
  19. 4 1
      app/Http/Controllers/CustomerLogController.php
  20. 9 7
      app/Http/Controllers/LogisticController.php
  21. 34 6
      app/Http/Controllers/OwnerController.php
  22. 566 87
      app/Http/Controllers/PriceModelController.php
  23. 1 1
      app/Http/Controllers/ProcessController.php
  24. 18 6
      app/Http/Controllers/RejectedBillController.php
  25. 52 14
      app/Http/Controllers/StoreController.php
  26. 38 7
      app/Http/Controllers/TestController.php
  27. 1 0
      app/Http/Controllers/WaybillController.php
  28. 1 1
      app/Http/Controllers/api/thirdPart/flux/ProcessController.php
  29. 1 1
      app/Http/Controllers/api/thirdPart/weixin/WxController.php
  30. 46 5
      app/Imports/OwnerPriceDirectLogisticDetailImport.php
  31. 74 11
      app/Imports/OwnerPriceLogisticDetailImport.php
  32. 4 3
      app/Imports/WaybillPriceModelsImport.php
  33. 1 1
      app/MeasuringMachine.php
  34. 6 1
      app/Owner.php
  35. 3 8
      app/OwnerPriceOperation.php
  36. 2 2
      app/OwnerPriceOperationItem.php
  37. 0 25
      app/OwnerPriceOperationItemIn.php
  38. 5 0
      app/OwnerStoragePriceModel.php
  39. 12 13
      app/Providers/AppServiceProvider.php
  40. 3 0
      app/Services/AllInventoryService.php
  41. 3 0
      app/Services/AuthorityService.php
  42. 8 5
      app/Services/BatchService.php
  43. 3 0
      app/Services/CacheService.php
  44. 3 0
      app/Services/CarTypeService.php
  45. 3 0
      app/Services/CarrierService.php
  46. 6 3
      app/Services/CheckActiveMenuService.php
  47. 3 0
      app/Services/CityService.php
  48. 3 0
      app/Services/CommodityBarcodeService.php
  49. 3 2
      app/Services/CommodityService.php
  50. 7 4
      app/Services/CustomerLogService.php
  51. 7 4
      app/Services/CustomerLogStatusService.php
  52. 3 0
      app/Services/CustomerService.php
  53. 7 4
      app/Services/DepositoryService.php
  54. 7 4
      app/Services/DocWaveHeaderService.php
  55. 6 3
      app/Services/FeatureService.php
  56. 3 0
      app/Services/ForeignHaiRoboticsService.php
  57. 6 3
      app/Services/InventoryAccountMissionService.php
  58. 4 0
      app/Services/InventoryAccountService.php
  59. 3 0
      app/Services/InventoryCompareService.php
  60. 6 3
      app/Services/InventoryDailyLogService.php
  61. 3 0
      app/Services/InventoryService.php
  62. 3 0
      app/Services/LaborReportService.php
  63. 3 0
      app/Services/LaborReportsCountingRecordService.php
  64. 3 0
      app/Services/LogService.php
  65. 5 2
      app/Services/LogisticService.php
  66. 3 0
      app/Services/LogisticTimingService.php
  67. 3 0
      app/Services/MaterialBoxService.php
  68. 51 16
      app/Services/NewOrderCountingRecordService.php
  69. 6 3
      app/Services/OracleActAllocationDetailService.php
  70. 4 1
      app/Services/OracleBasCustomerService.php
  71. 3 0
      app/Services/OracleBasSkuService.php
  72. 3 0
      app/Services/OracleDOCOrderHeaderService.php
  73. 3 0
      app/Services/OracleDocAsnDetailService.php
  74. 3 0
      app/Services/OracleDocAsnHerderService.php
  75. 3 0
      app/Services/OracleDocWaveDetailService.php
  76. 7 4
      app/Services/OrderCommodityAssignService.php
  77. 4 1
      app/Services/OrderCommodityService.php
  78. 3 0
      app/Services/OrderIssuePerformanceService.php
  79. 3 0
      app/Services/OrderIssueProcessLogService.php
  80. 3 0
      app/Services/OrderIssueService.php
  81. 3 0
      app/Services/OrderIssueWorkLoadService.php
  82. 3 0
      app/Services/OrderPackageCommoditiesService.php
  83. 3 0
      app/Services/OrderPackageService.php
  84. 25 7
      app/Services/OrderService.php
  85. 3 0
      app/Services/OrderTrackingOwnerService.php
  86. 3 0
      app/Services/OrderTrackingService.php
  87. 6 3
      app/Services/OwnerAreaReportService.php
  88. 6 3
      app/Services/OwnerBillReportService.php
  89. 6 3
      app/Services/OwnerFeeDetailService.php
  90. 7 4
      app/Services/OwnerPriceDirectLogisticService.php
  91. 25 9
      app/Services/OwnerPriceExpressService.php
  92. 13 6
      app/Services/OwnerPriceLogisticService.php
  93. 27 14
      app/Services/OwnerPriceOperationItemService.php
  94. 46 45
      app/Services/OwnerPriceOperationService.php
  95. 6 3
      app/Services/OwnerReportService.php
  96. 7 4
      app/Services/OwnerService.php
  97. 9 4
      app/Services/OwnerStoragePriceModelService.php
  98. 8 1
      app/Services/PackageService.php
  99. 3 0
      app/Services/PackageStatisticsService.php
  100. 6 3
      app/Services/ProcessMethodService.php

+ 1 - 1
app/Batch.php

@@ -35,7 +35,7 @@ class Batch extends Model
         $this->orders()->each(function(Order $order){
             $order->delete();
         });
-        return parent::delete(); // TODO: Change the autogenerated stub
+        return parent::delete();
     }
     public function owner()
     {

+ 5 - 3
app/Components/AsyncResponse.php

@@ -9,7 +9,7 @@ trait AsyncResponse{
     protected function gate(string $authorityName)
     {
         if(!Gate::allows($authorityName)){
-            echo ["success"=>false,"data"=>"无权操作"];
+            echo json_encode(["success"=>false,"data"=>"无权操作"]);
             exit();
         }
     }
@@ -20,9 +20,11 @@ trait AsyncResponse{
         exit();
     }
 
-    public function success($message)
+    public function success($message = null)
     {
-        echo json_encode(["success"=>true,"data"=>$message]);
+        $result = ["success"=>true];
+        if ($message)$result["data"] = $message;
+        echo json_encode($result);
         exit();
     }
 }

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

@@ -35,7 +35,7 @@ class CreateOwnerAreaReport extends Command
     }
 
     /**
-     * TODO 25号生成盘点面积记录,记录留空由人工填写
+     * 25号生成盘点面积记录,记录留空由人工填写
      *
      * @return void
      */

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

@@ -37,7 +37,7 @@ class CreateOwnerReport extends Command
     }
 
     /**
-     * TODO 1号生成或修改上月报表  此处假设每月生成报表数 不足1000,超过此数可能在SQL执行上溢出
+     * 1号生成或修改上月报表  此处假设每月生成报表数 不足1000,超过此数可能在SQL执行上溢出
      *
      * @return void
      */

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

@@ -38,7 +38,7 @@ class InventoryDailyLoggingOwner extends Command
     /**
      * Execute the console command.
      *
-     *  TODO : 增量添加,每天都会重复去录入之前数据,没有限制去重条件. 因业务需要去查看每天同批货的变动
+     *  增量添加,每天都会重复去录入之前数据,没有限制去重条件. 因业务需要去查看每天同批货的变动
      *
      * @param CommodityService $commodityService
      * @return void

+ 1 - 1
app/Console/Commands/ModelMakeCommand.php → app/Console/Commands/MakeModelCommand.php

@@ -4,7 +4,7 @@
 namespace App\Console\Commands;
 
 
-class ModelMakeCommand extends \Illuminate\Foundation\Console\ModelMakeCommand
+class MakeModelCommand extends \Illuminate\Foundation\Console\ModelMakeCommand
 {
     protected function getStub()
     {

+ 18 - 3
app/Console/Commands/MakeServiceCommand.php

@@ -2,6 +2,7 @@
 
 namespace App\Console\Commands;
 
+use App\Traits\ServiceAppAop;
 use Illuminate\Console\Command;
 
 class MakeServiceCommand extends Command
@@ -11,8 +12,8 @@ class MakeServiceCommand extends Command
      *
      * @var string
      */
-    protected $signature = 'make:service 
-    {--provider : Register in the provider}  
+    protected $signature = 'make:service
+    {--provider : Register in the provider}
     {name : fileName}';
 
     /**
@@ -45,7 +46,21 @@ class MakeServiceCommand extends Command
         $fileName=$this->argument('name');
         if (!file_exists(base_path('app\\Services\\'.$fileName.'.php'))){
             file_put_contents(base_path('app\\Services\\'.$fileName.'.php'),
-                '<?php '.PHP_EOL.PHP_EOL.'namespace App\Services; '.PHP_EOL.PHP_EOL.'Class '.$fileName.PHP_EOL.'{ '.PHP_EOL.PHP_EOL.PHP_EOL.'}');
+                '<?php '
+                .PHP_EOL
+                .PHP_EOL
+                .'namespace App\Services;'
+                .PHP_EOL
+                .PHP_EOL
+                .'use App\Traits\ServiceAppAop;'
+                .PHP_EOL
+                .'Class '.$fileName
+                .PHP_EOL
+                .'{ '
+                .'    use ServiceAppAop;'
+                .PHP_EOL
+                .PHP_EOL.
+                '}');
         }
         else $this->error("ERROR: file exists;");
         if ($this->option("provider")){

+ 22 - 2
app/Console/Commands/TestMakeCommand.php → app/Console/Commands/MakeTestCommand.php

@@ -7,7 +7,7 @@ namespace App\Console\Commands;
 use Illuminate\Filesystem\Filesystem;
 use Symfony\Component\Console\Input\InputArgument;
 
-class TestMakeCommand extends \Illuminate\Foundation\Console\TestMakeCommand
+class MakeTestCommand extends \Illuminate\Foundation\Console\TestMakeCommand
 {
     protected $signature = 'make:test {name : The name of the class}
     {--unit : Create a unit test}
@@ -25,7 +25,7 @@ class TestMakeCommand extends \Illuminate\Foundation\Console\TestMakeCommand
         if ($this->option('services')
             ||$this->option('service')) {
             return $rootNamespace.'\Services\\'
-                .ucfirst($this->getServiceName())
+                .$this->getServiceName()
                 ;
         }
         if ($this->option('unit')) {
@@ -49,6 +49,23 @@ class TestMakeCommand extends \Illuminate\Foundation\Console\TestMakeCommand
         $input= trim($this->argument('name'));
         return ucfirst(explode(':',$input)[0]);
     }
+    protected function getModelName()
+    {
+        $input= trim($this->argument('name'));
+        return str_replace('Service','',(explode(':',$input)[0]));
+    }
+    protected function getModelNamePlural()
+    {
+        $modelName=preg_replace('/s$/','$ses',lcfirst($this->getModelName()));
+        $modelName=preg_replace('/ch$/','$ches',$modelName);
+        $modelName=preg_replace('/sh$/','$shes',$modelName);
+        $modelName=preg_replace('/y$/','ies',$modelName);
+        $modelName=preg_replace('/[cC]hild$/','children',$modelName);
+        if(preg_match('/[cC]hildren$/',$modelName)==0){
+            $modelName=preg_replace('/([^s])$/','$1s',$modelName);
+        }
+        return $modelName;
+    }
     protected function getMethodName()
     {
         $input= trim($this->argument('name'));
@@ -75,6 +92,9 @@ class TestMakeCommand extends \Illuminate\Foundation\Console\TestMakeCommand
         $class = str_replace($this->getNamespace($name).'\\', '', $this->getMethodName());
         $class = str_replace('\\', '', $class);
         $stub = str_replace(['{{ serviceName }}', '{{serviceName}}'], $this->getServiceName(), $stub);
+        $stub = str_replace(['{{ modelName }}', '{{modelName}}'], $this->getModelName(), $stub);
+        $stub = str_replace(['{{ modelNameUc }}', '{{modelNameUc}}'], ucfirst($this->getModelName()), $stub);
+        $stub = str_replace(['{{ modelNamePlural }}', '{{modelNamePlural}}'], ucfirst($this->getModelNamePlural()), $stub);
 
         return str_replace(['DummyClass', '{{ class }}', '{{class}}'], $class, $stub);
     }

+ 2 - 2
app/Console/Commands/stubs/model.stub

@@ -4,11 +4,11 @@ namespace {{ namespace }};
 
 use Illuminate\Database\Eloquent\Model;
 
-use App\Traits\LogChanging;
+use App\Traits\LogModelChanging;
 
 class {{ class }} extends Model
 {
-    use LogChanging;
+    use LogModelChanging;
 
     //
 }

+ 11 - 1
app/Console/Commands/stubs/test.service.stub

@@ -3,16 +3,23 @@
 namespace {{ namespace }};
 use App\Services\{{ serviceName }};
 use Tests\TestCase;
+use App\{{ modelNameUc }};
+use App\Traits\TestMockSubServices;
 
 class {{ class }} extends TestCase
 {
-
+    use TestMockSubServices;
     /** @var {{ serviceName }} $service */
     public $service;
+    private $data;
+    private $amount=2;
     function setUp(): void
     {
         parent::setUp();
         $this->service = app('{{ serviceName }}');
+        $this->data['{{ modelNamePlural }}']
+            = factory({{ modelNameUc }}::class, $this->amount)
+            ->create();
     }
 
     public function testReturned()
@@ -22,6 +29,9 @@ class {{ class }} extends TestCase
 
     function tearDown(): void
     {
+        {{ modelNameUc }}::query()
+            ->whereIn('id',data_get($this->data['{{ modelNamePlural }}'],'*.id')??[])
+            ->delete();
         parent::tearDown();
     }
 }

+ 2 - 2
app/Console/Kernel.php

@@ -62,7 +62,7 @@ class Kernel extends ConsoleKernel
         $schedule->command('sync:order')->everyMinute();
         $schedule->command('SyncWmsCommoditiesInformation')->everyMinute();
         $schedule->command('clear:cancelledOrder')->everyTenMinutes();
-        //$schedule->command('WasSyncWmsAsnInformation')->everyMinute();
+        $schedule->command('WasSyncWmsAsnInformation')->everyMinute();
     }
 
     /**
@@ -74,7 +74,7 @@ class Kernel extends ConsoleKernel
     {
         $this->load(__DIR__ . '/Commands');
         $this->app->extend('command.model.make',function(ModelMakeCommand $base,$app){
-            return new \App\Console\Commands\ModelMakeCommand($app['files']);
+            return new \App\Console\Commands\MakeModelCommand($app['files']);
         });
         require base_path('routes/console.php');
     }

+ 1 - 1
app/CustomerTag.php

@@ -14,6 +14,6 @@ class CustomerTag extends Model
     use ModelTimeFormat;
 
     protected $fillable=[
-        "name","explanation"
+        "name","explanation","count"
     ];
 }

+ 0 - 1
app/Exports/Export.php

@@ -56,7 +56,6 @@ class Export extends StringValueBinder implements FromCollection,
     }
     public function registerEvents(): array
     {
-        // TODO: Implement registerEvents() method.
         if ($this->mergeCell && $this->columnName){
             return [
                 AfterSheet::class => function(AfterSheet $event){

+ 1 - 1
app/Http/Controllers/CitiesController.php

@@ -83,6 +83,6 @@ class CitiesController extends Controller
     }
 
     public function get(){
-        return City::query()->select("id","name","province_id")->get();
+        return ["success"=>true,"data"=>City::query()->select("id","name","province_id")->get()];
     }
 }

+ 1 - 1
app/Http/Controllers/CommodityController.php

@@ -336,7 +336,7 @@ class CommodityController extends Controller
         }
 
         if (count($barcodes) > 0){
-            // TODO ownerBarcodeSeekCommodityGet可指定第三个参数为true 默认无差别覆盖 如若指定该布尔值true代表仅覆盖SKU空值项
+            // ownerBarcodeSeekCommodityGet可指定第三个参数为true 默认无差别覆盖 如若指定该布尔值true代表仅覆盖SKU空值项
             $commodities = $commodityService->ownerBarcodeSeekCommodityGet(['id'=>$owner_id], $barcodes);
             $updateCommodities = [];
             $updateCommodities[] = [

+ 8 - 4
app/Http/Controllers/ControlPanelController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Owner;
 use App\Services\CheckActiveMenuService;
 use App\Services\LaborReportsCountingRecordService;
 use App\Services\NewOrderCountingRecordService;
@@ -40,15 +41,16 @@ class ControlPanelController extends Controller
         $start = (new Carbon())->subMonth()->toDateString();
         $end = (new Carbon())->toDateString();
         $ownerIds = $this->getCountingOwnerIds(null);
+        $owners=Owner::query()->whereIn('id',$ownerIds)->get();
         $unit = '日';
-        $orderCountingRecords = $orderCountingRecordService->orderCountingRecords($start, $end, $unit, $ownerIds);
+        $orderCountingRecords = $orderCountingRecordService->orderCountingRecordsFromCache($start, $end, $unit, $ownerIds);
         $logisticsCountingRecords = $orderCountingRecordService->logisticsCountingRecords($start, $end, $ownerIds);
         $warehouseCountingRecords = $orderCountingRecordService->warehouseCountingRecords($start, $end, $ownerIds);
 
         $laborReportsCountingRecordService = app(LaborReportsCountingRecordService::class);
         $laborReportsCountingRecords = $laborReportsCountingRecordService->get($start, $end, $unit);
         $laborReportsUserGroupsCount = $laborReportsCountingRecordService->userGroupsCount($start, $end);
-        return view('control.panel', compact('menus', 'warehousesOrders', 'orderCountingRecords', 'logisticsCountingRecords', 'warehouseCountingRecords', 'laborReportsCountingRecords', 'laborReportsUserGroupsCount'));
+        return view('control.panel', compact('owners','menus', 'warehousesOrders', 'orderCountingRecords', 'logisticsCountingRecords', 'warehouseCountingRecords', 'laborReportsCountingRecords', 'laborReportsUserGroupsCount'));
     }
 
     public function orderCountingRecordsApi(Request $request)
@@ -59,7 +61,8 @@ class ControlPanelController extends Controller
         $orderCountingRecordService = app(NewOrderCountingRecordService::class);
         $start = Carbon::parse($request->start)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->start;
         $end = Carbon::parse($request->end)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->end;
-        $ownerIds = $this->getCountingOwnerIds(null);
+        $ownerIds=$request->owner_ids;
+        if (!$ownerIds || in_array('all',$ownerIds)) $ownerIds = $this->getCountingOwnerIds(null);
         $orderCountingRecords = $orderCountingRecordService->orderCountingRecords($start, $end, $request->unit, $ownerIds);
         return compact('orderCountingRecords');
     }
@@ -72,7 +75,8 @@ class ControlPanelController extends Controller
         $orderCountingRecordService = app(NewOrderCountingRecordService::class);
         $start = Carbon::parse($request->start)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->start;
         $end = Carbon::parse($request->end)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->end;
-        $ownerIds = $this->getCountingOwnerIds(null);
+        $ownerIds=$request->input('owner_ids');
+        if (!$ownerIds || in_array('all',$ownerIds)) $ownerIds = $this->getCountingOwnerIds(null);
         $logisticsCountingRecords = $orderCountingRecordService->logisticsCountingRecords($start, $end, $ownerIds);
         return compact('logisticsCountingRecords');
     }

+ 17 - 8
app/Http/Controllers/CustomerBaseController.php

@@ -11,6 +11,7 @@ use App\Services\LogService;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Validator;
 
@@ -31,7 +32,7 @@ class CustomerBaseController extends Controller
             $query->with(["status:id,name,created_at","user:id,name"])->orderByDesc('id');
         }]);
         $owners = app("OwnerService")->getIntersectPermitting(['id','name','customer_id']);
-        $tags = CustomerTag::query()->get(["id","name"]);
+        $tags = CustomerTag::query()->orderByDesc('count')->get(["id","name"]);
         return response()->view('customer.customer.index',compact("customers","owners","tags"));
     }
 
@@ -154,14 +155,22 @@ class CustomerBaseController extends Controller
 
     public function addTag(Request $request)
     {
-        $tags = $request->input("tags");
+        $tag = $request->input("tag");
         $id = $request->input("id");
-        /** @var Customer $customer */
-        $customer = app("CustomerService")->find($id);
-        if (!$customer)return ["success"=>false,"data"=>"客户不存在"];
-        $customer->tags()->sync($tags);
-        $customer->load("tags");
-        return ["success"=>true,"data"=>$customer->tags];
+        DB::transaction(function ()use ($id,$tag){
+            DB::insert(DB::raw("INSERT INTO customer_tag_customer VALUES (?,?)"),[$id,$tag]);
+            CustomerTag::query()->where("id",$tag)->increment("count");
+            DB::commit();
+        });
+        return ["success"=>true];
+    }
+
+    public function delTag(Request $request)
+    {
+        $tag = $request->input("tag");
+        $id = $request->input("id");
+        DB::delete(DB::raw("DELETE FROM customer_tag_customer WHERE customer_id = ? AND customer_tag_id = ?"),[$id,$tag]);
+        return ["success"=>true];
     }
 
     public function destroyLog(Request $request)

+ 38 - 51
app/Http/Controllers/CustomerController.php

@@ -151,50 +151,32 @@ class CustomerController extends Controller
         if(!Gate::allows('客户管理-项目-录入')){ return redirect('denied');  }
         $customers = app('CustomerService')->getSelection();
         $ownerGroups = app('UserOwnerGroupService')->getSelection();
-        $storagePriceModels = app('OwnerStoragePriceModelService')->getSelection(["id","counting_type","using_type","minimum_area","price","unit_id"],["unit"=>function($query){$query->select("id","name");}]);
+        $warehouses = app('WarehouseService')->getSelection();
         $owner = null;
-        return response()->view('customer.project.create',compact("customers","ownerGroups","storagePriceModels","owner"));
+        return response()->view('customer.project.create',compact("customers","ownerGroups","owner","warehouses"));
     }
 
-    public function projectStore(Request $request)
+    public function projectUpdate()
     {
-        if(!Gate::allows('客户管理-项目-录入')){ return redirect('denied');  }
-        $this->validator($request->input())->validate();
-        $params = $request->input();
-        if ($params["id"]){
-            /** @var Owner $owner */
-            $owner = app('OwnerService')->find($params["id"]);
-            app('OwnerService')->update($owner,[
-                "customer_id"           => $params["customer_id"],
-                "tax_rate"              => $params["tax_rate"],
-                "linkman"               => $params["linkman"],
-                "phone_number"          => $params["phone_number"],
-                "user_owner_group_id"   => $params["owner_group_id"],
-                "waring_line_on"        => $params["waring_line_on"],
-                "description"           => $params["description"],
-            ],[
-                "ownerStoragePriceModels" => explode(',',$params["owner_storage_price_model_id"])
-            ]);
-            $msg = "成功更新“".$owner->name."”的信息!";
-            LogService::log(__METHOD__,"客户管理-修改货主",json_encode($params,JSON_UNESCAPED_UNICODE));
-        }else{
-            $owner = app('OwnerService')->create([
-                "name"                  => $params["name"],
-                "code"                  => $params["code"],
-                "customer_id"           => $params["customer_id"],
-                "tax_rate"              => $params["tax_rate"],
-                "linkman"               => $params["linkman"],
-                "phone_number"          => $params["phone_number"],
-                "user_owner_group_id"   => $params["owner_group_id"],
-                "waring_line_on"        => $params["waring_line_on"],
-                "description"           => $params["description"],
-            ],[
-                "ownerStoragePriceModels" => explode(',',$params["owner_storage_price_model_id"])
-            ]);
-            $msg = "成功创建“".$owner->name."”项目!";
-            LogService::log(__METHOD__,"客户管理-增加货主",json_encode($params,JSON_UNESCAPED_UNICODE));
-        }
-        return response()->redirectTo('customer/project/index')->with('successTip',$msg);
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("项目不存在,无法补充详细信息");
+        $errors = $this->validator(request()->input())->errors();
+        if (count($errors)>0)$this->success(["errors"=>$errors]);
+
+        /** @var Owner $owner */
+        $owner = app('OwnerService')->find(request("id"));
+        if (!$owner)$this->error("项目已被删除,无法操作");
+        $owner = app('OwnerService')->update($owner,[
+            "customer_id"           => request("customer_id"),
+            "warehouse_id"          => request("warehouse_id"),
+            "tax_rate"              => request("tax_rate"),
+            "linkman"               => request("linkman"),
+            "phone_number"          => request("phone_number"),
+            "user_owner_group_id"   => request("owner_group_id"),
+            "waring_line_on"        => request("waring_line_on"),
+            "description"           => request("description"),
+        ]);
+        $this->success($owner);
     }
 
     //获取货主下所有相关计费模型
@@ -214,10 +196,17 @@ class CustomerController extends Controller
         if(!Gate::allows('客户管理-项目-编辑')){ return redirect('denied');  }
         /** @var Owner $owner */
         $owner = app('OwnerService')->find($id);
+        $owner->loadCount(["ownerStoragePriceModels","ownerPriceOperations","ownerPriceExpresses","ownerPriceLogistics","ownerPriceDirectLogistics"]);
+        $isExist = false;
+        if($owner->owner_storage_price_models_count ||
+            $owner->owner_price_operations_count ||
+            $owner->owner_price_expresses_count ||
+            $owner->owner_price_logistics_count ||
+            $owner->owner_price_direct_logistics_count) $isExist = true;
         $customers = app('CustomerService')->getSelection();
         $ownerGroups = app('UserOwnerGroupService')->getSelection();
-        $storagePriceModels = app('OwnerStoragePriceModelService')->getSelection(["id","counting_type","using_type","minimum_area","price","unit_id"],["unit:id,name"]);
-        return response()->view('customer.project.create',compact("customers","ownerGroups","storagePriceModels",'owner'));
+        $warehouses = app('WarehouseService')->getSelection();
+        return response()->view('customer.project.create',compact("customers","ownerGroups","warehouses",'owner',"isExist"));
     }
 
     public function projectArea(Request $request)
@@ -400,23 +389,21 @@ class CustomerController extends Controller
     }
 
     private function validator(array $params){
-        $id = $params['id'] ?? null;
         $validator=Validator::make($params,[
-            'id' => ['sometimes','required_without_all:code,name'],
-            'code'=>['sometimes','required','max:50',$id ? "unique:owners,code,$id":'unique:owners,code'],
-            'name'=>['sometimes','required','max:50'],
-            'customer_id'=>['sometimes','required'],
-            'owner_group_id'=>['sometimes','required'],
-            'tax_rate' => ['sometimes',"nullable",'numeric'],
-            'waring_line_on' => ['sometimes',"nullable",'integer'],
+            'id' => ['required'],
+            'customer_id'=>['required'],
+            'owner_group_id'=>['required'],
+            'warehouse_id'=>['required'],
+            'tax_rate' => ["nullable",'numeric'],
+            'waring_line_on' => ["nullable",'integer'],
         ],[
             'required'=>':attribute 为必填项',
-            'unique'=>':attribute 已存在',
             'integer'=>':attribute 必须为整数',
             'numeric'=>':attribute 必须为数字',
         ],[
             'code'=>'项目代码',
             'name'=>'项目名称',
+            'warehouse_id'=>'仓库',
             'customer_id'=>'客户',
             'owner_group_id'=>'工作组',
             'tax_rate' => '税率',

+ 4 - 1
app/Http/Controllers/CustomerLogController.php

@@ -20,7 +20,10 @@ class CustomerLogController extends Controller
     {
         $id = $request->input("id");
         if (!$id) return ["success"=>false,"data"=>"非法参数"];
-        return ["success"=>true,"data"=>app("CustomerLogService")->update(["id"=>$id],["description"=>$request->input("description")])];
+        $params = [];
+        if ($request->has("description"))$params["description"] = $request->input("description");
+        if ($request->has("customer_log_status_id"))$params["customer_log_status_id"] = $request->input("customer_log_status_id");
+        return ["success"=>true,"data"=>app("CustomerLogService")->update(["id"=>$id],$params)];
     }
 
     public function store(Request $request)

+ 9 - 7
app/Http/Controllers/LogisticController.php

@@ -92,13 +92,6 @@ class LogisticController extends Controller
         return view('maintenance.logistic.edit',['logistic'=>$logistic]);
     }
 
-    /**
-     * Update the specified resource in storage.
-     *
-     * @param Request $request
-     * @param Logistic $logistic
-     * @return Response
-     */
     public function update(Request $request, Logistic $logistic)
     {
         if(!Gate::allows('物流公司-编辑')){ return redirect(url('/'));  }
@@ -123,4 +116,13 @@ class LogisticController extends Controller
         $re=$logistic->delete();
         return ['success'=>$re];
     }
+
+    public function get()
+    {
+        $type = \request("type");
+        $column = ['id','name'];
+        if (!$type)$column[] = "type";
+        $logistics = app("LogisticService")->getSelection($column,$type);
+        return ["success"=>true,"data"=>$logistics];
+    }
 }

+ 34 - 6
app/Http/Controllers/OwnerController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Authority;
+use App\Components\AsyncResponse;
 use App\Events\CustomerStored;
 use App\Log;
 use App\Logistic;
@@ -16,6 +17,8 @@ use Illuminate\Support\Facades\Validator;
 
 class OwnerController extends Controller
 {
+    use AsyncResponse;
+
     /**
      * Display a listing of the resource.
      *
@@ -47,12 +50,6 @@ class OwnerController extends Controller
         return view('maintenance.owner.create');
     }
 
-    /**
-     * Store a newly created resource in storage.
-     *
-     * @param Request $request
-     * @return string
-     */
     public function store(Request $request)
     {
         if (!Gate::allows('货主-录入')) {
@@ -74,11 +71,39 @@ class OwnerController extends Controller
         return redirect('maintenance/owner/create')->with('successTip', $request->input('name') ?? '');
     }
 
+    public function apiStore()
+    {
+        $this->gate("货主-录入");
+
+        if (request("id"))$errors = $this->validatorUpdate(request()->input(),request("id"))->errors();
+        else $errors = $this->validatorCreate(request()->input())->errors();
+        if (count($errors)>0)$this->success(["errors"=>$errors]);
+
+        if (request("id")){
+            $owner = app("OwnerService")->find(request("id"));
+            if (!$owner)$this->error("项目已被删除");
+            if ($owner->name == request("name") && $owner->code == request("code"))
+                $this->success($owner);
+            $owner = app("OwnerService")->update($owner,[
+                "name" => request("name"),
+                "code" => request("code"),
+            ]);
+        }else $owner = app("OwnerService")->create([
+            "name" => request("name"),
+            "code" => request("code"),
+        ]);
+
+        $this->success($owner);
+    }
+
     protected function validatorCreate(array $data)
     {
         return Validator::make($data, [
             'code' => ['required', 'string', 'max:50', "unique:owners,code"],
             'name' => ['required', 'string', 'max:50'],
+        ],[],[
+            "code" => "货主代码",
+            "name" => "货主名称",
         ]);
     }
 
@@ -87,6 +112,9 @@ class OwnerController extends Controller
         return Validator::make($data, [
             'name' => ['required', 'string', 'max:50'],
             'code' => ['required', 'string', 'max:50', "unique:owners,code,$id"]
+        ],[],[
+            "code" => "货主代码",
+            "name" => "货主名称",
         ]);
     }
 

+ 566 - 87
app/Http/Controllers/PriceModelController.php

@@ -8,21 +8,26 @@ use App\Imports\OwnerPriceDirectLogisticDetailImport;
 use App\Imports\OwnerPriceLogisticDetailImport;
 use App\Owner;
 use App\OwnerPriceDirectLogistic;
+use App\OwnerPriceDirectLogisticCar;
 use App\OwnerPriceExpress;
 use App\OwnerPriceExpressProvince;
 use App\OwnerPriceLogistic;
+use App\OwnerPriceLogisticDetail;
 use App\OwnerPriceOperation;
-use App\OwnerPriceOperationItemOut;
+use App\OwnerPriceOperationItem;
+use App\OwnerStoragePriceModel;
+use App\Services\common\BatchUpdateService;
 use App\Services\common\ExportService;
 use App\Services\LogService;
-use App\Services\OwnerOutStorageRuleService;
+use App\Services\OwnerPriceOperationItemService;
 use App\Services\OwnerPriceOperationService;
 use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Validator;
-use Illuminate\Validation\Rule;
 use Maatwebsite\Excel\Facades\Excel;
 
 class PriceModelController extends Controller
@@ -64,6 +69,7 @@ class PriceModelController extends Controller
         if(!Gate::allows('计费模型-仓储-编辑')){ return redirect('denied');  }
         app('OwnerStoragePriceModelService')->update(["id"=>$request->input("id")],[
             "counting_type" => $request->input("counting_type"),
+            "name"          => $request->input("name"),
             "using_type"    => $request->input("using_type"),
             "minimum_area"  => $request->input("minimum_area"),
             "price"         => $request->input("price"),
@@ -85,6 +91,7 @@ class PriceModelController extends Controller
     private function storageValidator(array $params)
     {
         return Validator::make($params,[
+            'name'=>['required'],
             'counting_type'=>['required'],
             'using_type'=>['required'],
             'minimum_area'=>['nullable','numeric','min:0'],
@@ -97,6 +104,7 @@ class PriceModelController extends Controller
             'min'=>':attribute 不得小于0',
             'integer'=>':attribute 未选择',
         ],[
+            'name'          =>"名称",
             'counting_type' =>"计费类型",
             'using_type'    =>"用仓类型",
             'minimum_area'  =>"最低起租面积",
@@ -111,26 +119,26 @@ class PriceModelController extends Controller
         if(!Gate::allows('计费模型-作业-查询')){ return redirect('denied');  }
         $features = app("FeatureService")->getMapArray();
         OwnerPriceOperation::$features = $features;
-        $models = app('OwnerPriceOperationService')->paginate($request->input(),["ownerPriceOperationOwners","ownerInStorageRule"=>function($query){$query->with("unit");}])->append("featureFormat");
+        $models = app('OwnerPriceOperationService')->paginate($request->input(),["ownerPriceOperationOwners","items.unit"])->append("featureFormat");
         $owners = app("OwnerService")->getIntersectPermitting();
         return response()->view('maintenance.priceModel.operation.index',compact("models","owners"));
     }
 
     /* 获取出库模型规则 */
-    public function operationGetOutStorageRule(Request $request)
+    public function getItems(Request $request)
     {
         if(!Gate::allows('计费模型-作业-查询')){ return ["success"=>false,"data"=>"无权操作"];  }
-        /** @var OwnerOutStorageRuleService $service */
-        $service = app('OwnerOutStorageRuleService');
-        $ownerOutStorageRules = $service->get(["owner_price_operation_id"=>$request->input("id")],["unit"],true)->append("featureFormat");
-        return ["success"=>true,"data"=>$ownerOutStorageRules];
+        /** @var OwnerPriceOperationItemService $service */
+        $service = app('OwnerPriceOperationItemService');
+        $items = $service->get(["owner_price_operation_id"=>$request->input("id")],["unit"],true)->append("featureFormat");
+        return ["success"=>true,"data"=>$items];
     }
-    /* 修改出库模型规则 */
-    public function updateOutStorageRule(Request $request)
+    /* 修改规则 */
+    public function updateItem(Request $request)
     {
         if(!Gate::allows('计费模型-作业-编辑')){ return ["success"=>false,"data"=>"无权操作"];  }
-        /** @var OwnerOutStorageRuleService $service */
-        $service = app('OwnerOutStorageRuleService');
+        /** @var OwnerPriceOperationItemService $service */
+        $service = app('OwnerPriceOperationItemService');
         $row = $service->update(["id"=>$request->input("id")],[
             "amount"=>$request->input("amount"),
             "unit_id"=>$request->input("unit_id"),
@@ -143,11 +151,11 @@ class PriceModelController extends Controller
         return ["success"=>false,"data"=>"受影响数据数为:".$row];
     }
 
-    public function createOutStorageRule(Request $request)
+    public function createItem(Request $request)
     {
         if(!Gate::allows('计费模型-作业-编辑')){ return ["success"=>false,"data"=>"无权操作"];  }
-        /** @var OwnerOutStorageRuleService $service */
-        $service = app('OwnerOutStorageRuleService');
+        /** @var OwnerPriceOperationItemService $service */
+        $service = app('OwnerPriceOperationItemService');
         switch ($request->input("strategy")){
             case "起步":
                 $c = $service->isExist(["owner_price_operation_id"=>$request->input("owner_price_operation_id"),"strategy"=>"起步"]);
@@ -159,7 +167,6 @@ class PriceModelController extends Controller
                 break;
         }
         $data = $service->create($request->input());
-        LogService::log(__METHOD__,"计费模型-录入出库规则",json_encode($request->input()));
         $data->load("unit");
         return ["success"=>true,"data"=>$data];
     }
@@ -186,11 +193,11 @@ class PriceModelController extends Controller
             }
         }
         if (count($stack) > 0)return ["success"=>false,"data"=>"组标记错误,起始与结束标记必须对应"];
-        $row = app('OwnerOutStorageRuleService')->update(["id"=>$id],["feature"=>$feature]);
+        $row = app('OwnerPriceOperationItemService')->update(["id"=>$id],["feature"=>$feature]);
         if ($row != 1)return ["success"=>false,"data"=>"影响了“".$row."”行"];
         LogService::log(__METHOD__,"计费模型-修改出库特征",json_encode($request->input()));
-        OwnerPriceOperationItemOut::$features = $result["map"];
-        $rule = app('OwnerOutStorageRuleService')->find($id)->append("featureFormat");
+        OwnerPriceOperationItem::$features = $result["map"];
+        $rule = app('OwnerPriceOperationItemService')->find($id)->append("featureFormat");
         return ["success"=>true,"data"=>["featureFormat"=>$rule->featureFormat,"feature"=>$feature]];
     }
 
@@ -235,7 +242,7 @@ class PriceModelController extends Controller
     public function operationStore(Request $request)
     {
         if(!Gate::allows('计费模型-作业-录入')){ return redirect('denied');  }
-        $request->offsetSet("rules",json_decode($request->input("rules"),true));
+        $request->offsetSet("items",json_decode($request->input("items"),true));
         $request->offsetSet("owner_id",explode(',',$request->input("owner_id")));
         $this->operationValidator($request->input())->validate();
 
@@ -251,27 +258,19 @@ class PriceModelController extends Controller
             "feature" => $request->input("feature"),
         ]);
         //录入子表
-        if ($request->input("operation_type") == '入库') $service->insertRule([
-            "owner_price_operation_id" => $ownerPriceOperation->id,
-            "amount" => $request->input("rules")[0]["amount"],
-            "unit_id" => $request->input("rules")[0]["unit_id"],
-            "unit_price" => $request->input("rules")[0]["unit_price"],
-        ],"入库");
-        else{
-            $insert = [];
-            foreach ($request->input("rules") as $rule){
-                $insert[] = [
-                    "owner_price_operation_id" => $ownerPriceOperation->id,
-                    "amount" => $rule["amount"],
-                    "unit_id" => $rule["unit_id"],
-                    "unit_price" => $rule["unit_price"],
-                    "strategy" => $rule["strategy"],
-                    "feature" => $rule["feature"],
-                    "priority" => $rule["priority"],
-                ];
-            }
-            $service->insertRule($insert);
+        $insert = [];
+        foreach ($request->input("items") as $rule){
+            $insert[] = [
+                "owner_price_operation_id" => $ownerPriceOperation->id,
+                "amount" => $rule["amount"],
+                "unit_id" => $rule["unit_id"],
+                "unit_price" => $rule["unit_price"],
+                "strategy" => $rule["strategy"],
+                "feature" => $rule["feature"],
+                "priority" => $rule["priority"],
+            ];
         }
+        $service->insertItem($insert);
         //录入中间表
         /** @var OwnerPriceOperation $ownerPriceOperation */
         if ($request->input("owner_id"))$ownerPriceOperation->ownerPriceOperationOwners()->sync($request->input("owner_id"));
@@ -282,7 +281,7 @@ class PriceModelController extends Controller
     public function operationEdit($id)
     {
         if(!Gate::allows('计费模型-作业-编辑')){ return redirect('denied');  }
-        $model = app('OwnerPriceOperationService')->find($id,true,["ownerPriceOperationOwners"]);
+        $model = app('OwnerPriceOperationService')->find($id,["items"]);
         $owners = app("OwnerService")->getIntersectPermitting();
         $units = app('UnitService')->getSelection();
         return response()->view('maintenance.priceModel.operation.create',compact("owners","units","model"));
@@ -291,7 +290,7 @@ class PriceModelController extends Controller
     public function operationUpdate($id,Request $request)
     {
         if(!Gate::allows('计费模型-作业-编辑')){ return redirect('denied');  }
-        $request->offsetSet("rules",json_decode($request->input("rules"),true));
+        $request->offsetSet("items",json_decode($request->input("items"),true));
         $request->offsetSet("owner_id",explode(',',$request->input("owner_id")));
         $this->operationValidator($request->input(),$id)->validate();
 
@@ -305,29 +304,21 @@ class PriceModelController extends Controller
             "remark" => $request->input("remark"),
             "feature" => $request->input("feature"),
         ]);
-        $service->destroyRule($id, $model->operation_type);
+        $service->destroyItem($id);
         //录入子表
-        if ($request->input("operation_type") == '入库') $service->insertRule([
-            "owner_price_operation_id" => $model->id,
-            "amount" => $request->input("rules")[0]["amount"],
-            "unit_id" => $request->input("rules")[0]["unit_id"],
-            "unit_price" => $request->input("rules")[0]["unit_price"],
-        ],"入库");
-        else{
-            $insert = [];
-            foreach ($request->input("rules") as $rule){
-                $insert[] = [
-                    "owner_price_operation_id" => $model->id,
-                    "amount" => $rule["amount"],
-                    "unit_id" => $rule["unit_id"],
-                    "unit_price" => $rule["unit_price"],
-                    "strategy" => $rule["strategy"],
-                    "feature" => $rule["feature"],
-                    "priority" => $rule["priority"],
-                ];
-            }
-            $service->insertRule($insert);
+        $insert = [];
+        foreach ($request->input("items") as $rule){
+            $insert[] = [
+                "owner_price_operation_id" => $model->id,
+                "amount" => $rule["amount"],
+                "unit_id" => $rule["unit_id"],
+                "unit_price" => $rule["unit_price"],
+                "strategy" => $rule["strategy"],
+                "feature" => $rule["feature"],
+                "priority" => $rule["priority"],
+            ];
         }
+        $service->insertItem($insert);
         //录入中间表
         /** @var OwnerPriceOperation $model */
         if ($request->input("owner_id"))$model->ownerPriceOperationOwners()->sync($request->input("owner_id"));
@@ -338,7 +329,6 @@ class PriceModelController extends Controller
     private function operationValidator(array $params, $id= null)
     {
         return Validator::make($params,[
-            //required_with:id
             'operation_type'=>['required'],
             'owner_id'=>[function ($attribute, $value, $fail)use($params,$id) {
                 if ($params["strategy"] == '默认'){
@@ -355,15 +345,11 @@ class PriceModelController extends Controller
             }],
             'strategy'=>['required'],
             'name'=>['required',$id?"unique:owner_price_operations,name,$id":'unique:owner_price_operations,name'],
-            'priority'=>['required','integer','min:0','max:100'],
-            'rules.*.strategy'=>['required_if:operation_type,出库'],
-            'rules.*.amount'=>[Rule::requiredIf(function () use ($params) {
-                if ("operation_type" == "入库")return true;
-                return false;
-            }),"integer"],
-            'rules.*.unit_id'=>['required','integer'],
-            'rules.*.unit_price'=>['required','numeric',"min:0"],
-            'rules.*.priority'=>['required_if:operation_type,出库','integer','min:0','max:100'],
+            'priority'=>['sometimes','required','integer','min:0','max:100'],
+            'items.*.strategy'=>['required'],
+            'items.*.amount'=>["required","integer"],
+            'items.*.unit_id'=>['required','integer'],
+            'items.*.unit_price'=>['required','numeric',"min:0"],
         ],[
             'required'=>':attribute 为必填项',
             'min'=>':attribute 不得小于0',
@@ -375,7 +361,6 @@ class PriceModelController extends Controller
             'operation_type' =>"操作类型",
             'strategy'    =>"计费策略",
             'name'  =>"名称",
-            'priority' =>"优先级",
         ]);
     }
 
@@ -511,21 +496,28 @@ class PriceModelController extends Controller
             'name'=>['required',$id?"unique:owner_price_expresses,name,$id":'unique:owner_price_expresses,name'],
             'initial_weight'=>['required','numeric','min:0'],
             'additional_weight'=>['required','numeric','min:0'],
-            'owner_id'=>[function ($attribute, $value, $fail)use($id) {
-                $owners = app("OwnerPriceExpressService")->getExistOwnerName($value,$id);
+            'owner_id'=>[function ($attribute, $value, $fail)use($id,$params) {
+                $owners = app("OwnerPriceExpressService")->getExistOwnerName($value,$params["logistic_id"] ?? [],$id);
                 if ($owners)$fail("(".implode(',',$owners).') 已经绑定计费模型');
             }],
-            'logistic_id'=>[function ($attribute, $value, $fail)use($id) {
+            /*'logistic_id'=>[function ($attribute, $value, $fail)use($id) {
                 $logistics = app("OwnerPriceExpressService")->getExistLogisticName($value,$id);
                 if ($logistics)$fail("(".implode(',',$logistics).') 已经绑定计费模型');
-            }],
+            }],*/
+            'items.*.province_id'=>['sometimes','required'],
+            'items.*.additional_weight_price'=>['sometimes','required','numeric',"min:0"],
+            'items.*.initial_weight_price'=>['sometimes','required','numeric',"min:0"],
         ],[
             'required'=>':attribute 为必填项',
             'unique' => ':attribute 已存在',
+            'min' => ':attribute 不得小于0',
         ],[
             'name' =>"名称",
             'initial_weight'  =>"首重",
             'additional_weight'  =>"续重",
+            "items.*.province_id"=>"省份",
+            "items.*.additional_weight_price"=>"首重价格",
+            "items.*.initial_weight_price"=>"续重价格",
         ]);
     }
 
@@ -659,9 +651,15 @@ class PriceModelController extends Controller
         ini_set('max_execution_time',2500);
         ini_set('memory_limit','1526M');
         $fileSuffix = ucwords($fileSuffix);
-        /** @var OwnerPriceLogistic $model */
-        $model = app('OwnerPriceLogisticService')->find($request->input("id"),["unit","otherUnit","details"]);
-        Excel::import(new OwnerPriceLogisticDetailImport($model),$request->file('file')->path(),null,$fileSuffix);
+
+        if (!$request->has("id")){
+            Excel::import(new OwnerPriceLogisticDetailImport(null),$request->file('file')->path(),null,$fileSuffix);
+        }else{
+            /** @var OwnerPriceLogistic $model */
+            $model = app('OwnerPriceLogisticService')->find($request->input("id"),["unit","otherUnit","details"]);
+            Excel::import(new OwnerPriceLogisticDetailImport($model),$request->file('file')->path(),null,$fileSuffix);
+        }
+
         if (Cache::has('logistic'))return Cache::pull('logistic');
 
         return ["success"=>false,"data"=>"导入发生错误,数据无响应"];
@@ -791,6 +789,19 @@ class PriceModelController extends Controller
                 $bool = app("OwnerPriceLogisticService")->checkRange($value);
                 if (!$bool)$fail("格式错误,值必须为连续的且最后一个值不允许封闭");
             }],
+            'owner_id'=>[function ($attribute, $value, $fail)use($id,$params) {
+                $owners = app("OwnerPriceExpressService")->getExistOwnerName($value,$params["logistic_id"] ?? [],$id,"ownerPriceLogistics");
+                if ($owners)$fail("(".implode(',',$owners).') 已经绑定计费模型');
+            }],
+            'items.*.unit_id'=>['sometimes','required'],
+            'items.*.range'=>['sometimes','required'],
+            'items.*.province_id'=>['sometimes','required'],
+            'items.*.city_id'=>['sometimes','required'],
+            'items.*.unit_price'=>['sometimes','nullable','numeric',"min:0"],
+            'items.*.delivery_fee'=>['sometimes','nullable','numeric',"min:0"],
+            'items.*.initial_fee'=>['sometimes','nullable','numeric',"min:0"],
+            'items.*.initial_amount'=>['sometimes','nullable','numeric',"min:0"],
+            'items.*.rate'=>['sometimes','nullable','numeric',"min:0"],
         ],[
             'required'=>':attribute 为必填项',
             'unique' => ':attribute 已存在',
@@ -805,6 +816,15 @@ class PriceModelController extends Controller
             'unit_range'  =>"区间值",
             'other_unit_id'  =>"单位二",
             'other_unit_range'  =>"区间值",
+            'items.*.unit_id'=>"单位",
+            'items.*.range'=>"区间",
+            'items.*.province_id'=>"省份",
+            'items.*.city_id'=>"城市",
+            'items.*.unit_price'=>"单价",
+            'items.*.delivery_fee'=>"送货费",
+            'items.*.initial_fee'=>"起始计费",
+            'items.*.initial_amount'=>"起始计数",
+            'items.*.rate'=>"费率",
         ]);
     }
 
@@ -891,12 +911,17 @@ class PriceModelController extends Controller
         ini_set('max_execution_time',2500);
         ini_set('memory_limit','1526M');
         $fileSuffix = ucwords($fileSuffix);
-        $model = new OwnerPriceDirectLogistic();
-        $model->id = $request->input("id");
-        $model->load("details");
-        Excel::import(new OwnerPriceDirectLogisticDetailImport($model),$request->file('file')->path(),null,$fileSuffix);
-        if (Cache::has('directLogistic'))return Cache::pull('directLogistic');
 
+        if (!$request->has("id")){
+            Excel::import(new OwnerPriceDirectLogisticDetailImport(null),$request->file('file')->path(),null,$fileSuffix);
+        }else{
+            $model = new OwnerPriceDirectLogistic();
+            $model->id = $request->input("id");
+            $model->load("details");
+            Excel::import(new OwnerPriceDirectLogisticDetailImport($model),$request->file('file')->path(),null,$fileSuffix);
+        }
+
+        if (Cache::has('directLogistic'))return Cache::pull('directLogistic');
         return ["success"=>false,"data"=>"导入发生错误,数据无响应"];
     }
 
@@ -958,4 +983,458 @@ class PriceModelController extends Controller
         ]);
     }
 
+    public function apiStoreStorage()
+    {
+        $this->gate("客户管理-项目-录入");
+        $errors = $this->storageValidator(request()->input())->errors();
+        if (count($errors)>0)$this->success(["errors"=>$errors]);
+
+        if (!request("owner_id"))$this->error("参数传递错误");
+        $values = [
+            "name"              => request("name"),
+            "counting_type"     => request("counting_type"),
+            "using_type"        => request("using_type"),
+            "minimum_area"      => request("minimum_area"),
+            "price"             => request("price"),
+            "discount_type"     => request("discount_type"),
+            "discount_value"    => request("discount_value"),
+            "unit_id"           => request("unit_id"),
+        ];
+        if (request("id"))app('OwnerStoragePriceModelService')->update(["id"=>request("id")],$values);
+        else{
+            DB::transaction(function ()use(&$model,$values){
+                $model = app('OwnerStoragePriceModelService')->create($values);
+                DB::insert(DB::raw("INSERT INTO owner_storage_price_model_owner VALUES(?,?)"),[$model->id,request("owner_id")]);
+                DB::commit();
+            });
+            $this->success($model->id);
+        }
+        $this->success();
+    }
+
+    public function apiStoreOperation()
+    {
+        $this->gate("客户管理-项目-录入");
+
+        $params = request()->input();
+        if (request("operation_type") == '入库'){
+            foreach ($params["items"] as $index => $it){
+                if (!$it || $it['strategy'] == '起步'){
+                    unset($params["items"][$index]);
+                    break;
+                }
+            }
+        }
+
+        $params["owner_id"] = [$params["owner_id"]];
+        $errors = $this->operationValidator($params,request("id"))->errors();
+        if (count($errors)>0)$this->success(["errors"=>$errors]);
+
+        if (!request("owner_id"))$this->error("参数传递错误");
+        if (request("id")){
+            $model = app('OwnerPriceOperationService')->find(request("id"),["items"]);
+            app('OwnerPriceOperationService')->findUpdate($model,[
+                "name"              => request("name"),
+                "operation_type"    => request("operation_type"),
+                "strategy"          => request("strategy"),
+                "feature"           => request("feature"),
+                "remark"            => request("remark"),
+            ]);
+            $delete = [];//需要删除子项
+            $update = [["id","strategy","amount","unit_id","unit_price","feature"]];//需要更新子项
+            $insert = [];//需要新增子项
+            foreach ($params["items"] as $item){
+                $obj = [
+                    "strategy"  => $item["strategy"],
+                    "amount"    => $item["amount"],
+                    "unit_id"   => $item["unit_id"],
+                    "unit_price"=> $item["unit_price"],
+                    "feature"   => $item["feature"],
+                ];
+                if (isset($item["id"])){
+                    $obj["id"] = $item["id"];
+                    $update[] = $obj;
+                    $delete[] = $item["id"];
+                } else{
+                    $obj["owner_price_operation_id"] = $model->id;
+                    $obj["feature"] = $item["feature"] ?? null;
+                    $insert[] = $obj;
+                }
+            }
+            $ids = array_column($model->items->toArray(),"id");
+            $delete = array_diff($ids,$delete);
+            if ($delete)app("OwnerPriceOperationItemService")->destroy($delete);
+            if (count($update) > 1)app(BatchUpdateService::class)->batchUpdate("owner_price_operation_items",$update);
+            if ($insert)app("OwnerPriceOperationItemService")->insert($insert);
+        }else{
+            DB::transaction(function ()use(&$model,$params){
+                $model = app('OwnerPriceOperationService')->create([
+                    "name"              => request("name"),
+                    "operation_type"    => request("operation_type"),
+                    "strategy"          => request("strategy"),
+                    "feature"           => request("feature"),
+                    "remark"            => request("remark"),
+                ]);
+                foreach ($params["items"] as &$item){
+                    $item["owner_price_operation_id"] = $model->id;
+                    if (!isset($item["feature"]))$item["feature"] = null;
+                    unset($item["features"]);
+                    unset($item["featureFormat"]);
+                }
+                app("OwnerPriceOperationItemService")->insert($params["items"]);
+                DB::insert(DB::raw("INSERT INTO owner_price_operation_owner VALUES(?,?)"),[$model->id,request("owner_id")]);
+                DB::commit();
+            });
+        }
+        /** @var OwnerPriceOperation $model */
+        $model->load("items");
+        $this->success($model);
+    }
+
+    public function apiStoreExpress()
+    {
+        $this->gate("客户管理-项目-录入");
+        $params = request()->input();
+        $params["logistic_id"] = $params["logistics"];
+        $errors = $this->expressValidator($params)->errors();
+        $exist = [];
+        foreach ($params["items"] as $index => $item){
+            if (isset($exist[$item["province_id"]]))$errors["items.".$index.".province_id"] = ["已存在"];
+            else $exist[$item["province_id"]] = true;
+        }
+        if (count($errors)>0)$this->success(["errors"=>$errors]);
+
+        DB::transaction(function ()use(&$model,$params){
+            $model = app('OwnerPriceExpressService')->create([
+                "name"              => request("name"),
+                "initial_weight"    => request("initial_weight"),
+                "additional_weight" => request("additional_weight"),
+            ]);
+            foreach ($params["items"] as &$item)$item["owner_price_express_id"] = $model->id;
+            OwnerPriceExpressProvince::query()->insert($params["items"]);
+            DB::insert(DB::raw("INSERT INTO owner_price_express_owner VALUES(?,?)"),[$model->id,request("owner_id")]);
+            /** @var OwnerPriceExpress $model */
+            $model->logistics()->syncWithoutDetaching(request("logistics"));
+            DB::commit();
+        });
+        $model->load("details");
+        $this->success($model);
+    }
+
+    public function apiStoreLogistic()
+    {
+        $this->gate("客户管理-项目-录入");
+        $params = request()->input();
+        $params["owner_id"] = [$params["owner_id"]];
+        $params["logistic_id"] = $params["logistics"];
+        $errors = $this->logisticValidator($params)->errors();
+        $exist = [];
+        foreach ($params["items"] as $index => $item){
+            $key = $item["unit_id"]."-".$item["range"]."-".$item["province_id"]."-".$item["city_id"];
+            if (isset($exist[$key]))$errors["items.".$index.".unit_id"] = ["该条已存在"];
+            else $exist[$key] = true;
+        }
+        if (count($errors)>0)$this->success(["errors"=>$errors]);
+        DB::transaction(function ()use(&$model,$params){
+            $model = app("OwnerPriceLogisticService")->create([
+                "name"              => request('name'),
+                "unit_range"        => request('unit_range'),
+                "unit_id"           => request('unit_id'),
+                "other_unit_range"  => request('other_unit_range'),
+                "other_unit_id"     => request('other_unit_id'),
+                "pick_up_price"     => request('pick_up_price'),
+                "fuel_price"        => request('fuel_price'),
+                "service_price"     => request('service_price'),
+            ]);
+            foreach ($params["items"] as &$param)$param["owner_price_logistic_id"] = $model->id;
+            OwnerPriceLogisticDetail::query()->insert($params["items"]);
+            DB::insert(DB::raw("INSERT INTO owner_price_logistic_owner VALUES(?,?)"),[$model->id,request("owner_id")]);
+            /** @var OwnerPriceLogistic $model */
+            $model->logistics()->syncWithoutDetaching(request("logistics"));
+            DB::commit();
+        });
+        $model->load("details");
+        $this->success($model);
+    }
+
+    public function apiStoreDirectLogistic()
+    {
+        $this->gate("客户管理-项目-录入");
+        $errors = $this->directLogisticValidator(request()->input())->errors();
+        $exist = [];
+        foreach (request("items") as $index=>$item){
+            if (isset($exist[$item['car_type_id']]))$errors["items.".$index.".car_type_id"] = ["已存在"];
+            else $exist[$item['car_type_id']] = true;
+        }
+        if (count($errors)>0)$this->success(["errors"=>$errors]);
+
+        $items = request()->input("items");
+        DB::transaction(function ()use(&$model,$items){
+            $model = app("OwnerPriceDirectLogisticService")->create([
+                "name"      => request("name"),
+                "base_km"   => request("base_km"),
+            ]);
+            foreach ($items as &$item)$item["owner_price_direct_logistic_id"] = $model->id;
+            OwnerPriceDirectLogisticCar::query()->insert($items);
+            DB::insert(DB::raw("INSERT INTO owner_price_direct_logistic_owner VALUES(?,?)"),[$model->id,request("owner_id")]);
+            DB::commit();
+        });
+        $model->load("details");
+        $this->success($model);
+    }
+
+    public function getPriceModel()
+    {
+        $owner = new Owner();
+        $owner->id = request("id");
+        $owner->load(["ownerStoragePriceModels","ownerPriceOperations.items","ownerPriceExpresses"=>function($query){
+            /** @var Builder $query */
+            $query->with(["details","logistics"]);
+        },"ownerPriceLogistics"=>function($query){
+            /** @var Builder $query */
+            $query->with(["details","logistics"]);
+        },"ownerPriceDirectLogistics.details"]);
+        $features = app("FeatureService")->getMapArray();
+        OwnerPriceOperation::$features = $features;
+        OwnerPriceOperationItem::$features = $features;
+        foreach ($owner->ownerPriceOperations as &$operation){
+            $operation["featureFormat"] = $operation->featureFormat;
+            foreach ($operation->items as &$item){
+                $item["featureFormat"] = $item->featureFormat;
+            }
+        }
+        $this->success($owner);
+    }
+
+    public function apiGetStorage()
+    {
+        $this->gate("客户管理-项目-录入");
+        $models = OwnerStoragePriceModel::query();
+        if (request("customer_id")){
+            $customerId = request("customer_id");
+            $models->whereHas("owners",function ($query)use($customerId){
+                /** @var Builder $query */
+                $query->where("customer_id",$customerId);
+            });
+        }
+        if (request("owner_id")){
+            $ownerId = request("owner_id");
+            $models->whereHas("owners",function ($query)use($ownerId){
+                /** @var Builder $query */
+                $query->where("id",$ownerId);
+            });
+        }
+        if (request("name")){
+            $models->where("name","like","%".request("name")."%");
+        }
+        $this->success($models->get());
+    }
+    public function apiGetOperation()
+    {
+        $this->gate("客户管理-项目-录入");
+        $models = OwnerPriceOperation::query()->with("items");
+        if (request("customer_id")){
+            $customerId = request("customer_id");
+            $models->whereHas("ownerPriceOperationOwners",function ($query)use($customerId){
+                /** @var Builder $query */
+                $query->where("customer_id",$customerId);
+            });
+        }
+        if (request("owner_id")){
+            $ownerId = request("owner_id");
+            $models->whereHas("ownerPriceOperationOwners",function ($query)use($ownerId){
+                /** @var Builder $query */
+                $query->where("id",$ownerId);
+            });
+        }
+        if (request("name")){
+            $models->where("name","like","%".request("name")."%");
+        }
+        $features = app("FeatureService")->getMapArray();
+        OwnerPriceOperation::$features = $features;
+        OwnerPriceOperationItem::$features = $features;
+        $models = $models->get();
+        foreach ($models as &$operation){
+            $operation["featureFormat"] = $operation->featureFormat;
+            $items = [[],[]];
+            foreach ($operation->items as $item){
+                $obj = [
+                    "strategy" => $item["strategy"],
+                    "amount" => $item["amount"],
+                    "unit_id" => $item["unit_id"],
+                    "unit_price" => $item["unit_price"],
+                    "feature" => $item["feature"],
+                    "featureFormat" => $item->featureFormat,
+                ];
+                if ($item["strategy"] == '起步')$items[0] = $obj;
+                if ($item["strategy"] == '默认')$items[1] = $obj;
+                if ($item["strategy"] == '特征')$items[] = $obj;
+            }
+            if (!$items[0])$items[0] = [
+                "strategy" => "起步",
+                "amount" => "",
+                "unit_id" => "",
+                "unit_price" => "",
+                "feature" => "",
+            ];
+            if (!$items[1])$items[1] = [
+                "strategy" => "默认",
+                "amount" => "",
+                "unit_id" => "",
+                "unit_price" => "",
+                "feature" => "",
+            ];
+            unset($operation["items"]);
+            $operation["items"] = $items;
+        }
+        $this->success($models);
+    }
+    public function apiGetExpress()
+    {
+        $this->gate("客户管理-项目-录入");
+        $models = OwnerPriceExpress::query()->with(["details","logistics:id"]);
+        if (request("customer_id")){
+            $customerId = request("customer_id");
+            $models->whereHas("owners",function ($query)use($customerId){
+                /** @var Builder $query */
+                $query->where("customer_id",$customerId);
+            });
+        }
+        if (request("owner_id")){
+            $ownerId = request("owner_id");
+            $models->whereHas("owners",function ($query)use($ownerId){
+                /** @var Builder $query */
+                $query->where("id",$ownerId);
+            });
+        }
+        if (request("logistic_id")){
+            $logisticId = request("logistic_id");
+            $models->whereHas("logistics",function ($query)use($logisticId){
+                /** @var Builder $query */
+                $query->where("id",$logisticId);
+            });
+        }
+        if (request("name")){
+            $models->where("name","like","%".request("name")."%");
+        }
+        $this->success($models->get());
+    }
+    public function apiGetLogistic()
+    {
+        $this->gate("客户管理-项目-录入");
+        $models = OwnerPriceLogistic::query()->with(["details","logistics"]);
+        if (request("customer_id")){
+            $customerId = request("customer_id");
+            $models->whereHas("owners",function ($query)use($customerId){
+                /** @var Builder $query */
+                $query->where("customer_id",$customerId);
+            });
+        }
+        if (request("owner_id")){
+            $ownerId = request("owner_id");
+            $models->whereHas("owners",function ($query)use($ownerId){
+                /** @var Builder $query */
+                $query->where("id",$ownerId);
+            });
+        }
+        if (request("logistic_id")){
+            $logisticId = request("logistic_id");
+            $models->whereHas("logistics",function ($query)use($logisticId){
+                /** @var Builder $query */
+                $query->where("id",$logisticId);
+            });
+        }
+        if (request("name")){
+            $models->where("name","like","%".request("name")."%");
+        }
+        $this->success($models->get());
+    }
+    public function apiGetDirectLogistic()
+    {
+        $this->gate("客户管理-项目-录入");
+        $models = OwnerPriceDirectLogistic::query()->with("details");
+        if (request("customer_id")){
+            $customerId = request("customer_id");
+            $models->whereHas("owners",function ($query)use($customerId){
+                /** @var Builder $query */
+                $query->where("customer_id",$customerId);
+            });
+        }
+        if (request("owner_id")){
+            $ownerId = request("owner_id");
+            $models->whereHas("owners",function ($query)use($ownerId){
+                /** @var Builder $query */
+                $query->where("id",$ownerId);
+            });
+        }
+        if (request("name")){
+            $models->where("name","like","%".request("name")."%");
+        }
+        $this->success($models->get());
+    }
+
+    public function apiDelStorage()
+    {
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("非法参数");
+        app("OwnerStoragePriceModelService")->destroy(request("id"));
+        $this->success();
+    }
+    public function apiDelOperation()
+    {
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("非法参数");
+        app("OwnerPriceOperationService")->destroy(request("id"));
+        $this->success();
+    }
+    public function apiDelOperationItem()
+    {
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("非法参数");
+        app("OwnerPriceOperationItemService")->destroy(request("id"));
+        $this->success();
+    }
+    public function apiDelExpress()
+    {
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("非法参数");
+        app("OwnerPriceExpressService")->destroy(request("id"));
+        $this->success();
+    }
+    public function apiDelExpressItem()
+    {
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("非法参数");
+        app("OwnerPriceExpressService")->destroyDetail(request("id"));
+        $this->success();
+    }
+    public function apiDelLogistic()
+    {
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("非法参数");
+        app("OwnerPriceLogisticService")->destroy(request("id"));
+        $this->success();
+    }
+    public function apiDelLogisticItem()
+    {
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("非法参数");
+        app("OwnerPriceLogisticService")->destroyDetail(request("id"));
+        $this->success();
+    }
+    public function apiDelDirectLogistic()
+    {
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("非法参数");
+        app("OwnerPriceDirectLogisticService")->destroy(request("id"));
+        $this->success();
+    }
+    public function apiDelDirectLogisticItem()
+    {
+        $this->gate("客户管理-项目-录入");
+        if (!request("id"))$this->error("非法参数");
+        app("OwnerPriceDirectLogisticService")->destroyDetail(request("id"));
+        $this->success();
+    }
+
 }

+ 1 - 1
app/Http/Controllers/ProcessController.php

@@ -1050,7 +1050,7 @@ class ProcessController extends Controller
                     app('LogService')->log(__METHOD__,"二次加工单录入导入商品数据时添加货主".__FUNCTION__,json_encode($owner),Auth::user()['id']);
                 }
             }
-            $goods = Commodity::query()->with('barcodes')->where('owner_id',$owner->id)//->whereNull('owner_id') TODO 保留,暂时不知为何限定货主为空
+            $goods = Commodity::query()->with('barcodes')->where('owner_id',$owner->id)//->whereNull('owner_id')  保留,暂时不知为何限定货主为空
                 ->where('sku',$commodityData['sku'])->first();
             $commodity_barcodes = [];
             if (!$goods){

+ 18 - 6
app/Http/Controllers/RejectedBillController.php

@@ -96,8 +96,14 @@ class RejectedBillController extends Controller
         $rejectedBill=new RejectedBill($request->all());
         $rejectedBill['id_operator'] = Auth::user()['id'];
         $rejectedBill->save();
-        $rejectedBill->syncOrderIssue();
-        app(RejectedBillService::class)->syncOrderIssue($rejectedBill);
+        /**
+         * @var RejectedBillService $rejectedBillService
+         */
+        $rejectedBillService=app(RejectedBillService::class);
+        $rejectedBillService->syncOrderIssue($rejectedBill);
+        $rejectedBillService->updateCheckedStatusByWms($request->input('logistic_number_return'));
+//        $rejectedBill->同步问题件退件状态();
+
         app('LogService')->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>'true','id'=>$rejectedBill['id']];
     }
@@ -117,7 +123,14 @@ class RejectedBillController extends Controller
         $rejectedBill=RejectedBill::find($request->input('id'));
         $rejectedBill->fill($request->all());
         $rejectedBill->save();
-        $rejectedBill->syncOrderIssue();
+        /**
+         * @var RejectedBillService $rejectedBillService
+         */
+        $rejectedBillService=app(RejectedBillService::class);
+        $rejectedBillService->syncOrderIssue($rejectedBill);
+        $rejectedBillService->updateCheckedStatusByWms($rejectedBill->logistic_number_return);
+//        $rejectedBill->同步问题件退件状态();
+
         app('LogService')->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>'true'];
     }
@@ -403,9 +416,8 @@ class RejectedBillController extends Controller
                 $rejectedBillItemService->insert($inner_items_params);
                 LogService::log(__METHOD__, "批量生成退货单详情", json_encode($inner_items_params), Auth::user()['id']);
             }
-            $rejectedBill_collect->each(function ($rejectedBill){
-                /** @var RejectedBill $rejectedBill */
-                $rejectedBill->syncOrderIssue();
+            $rejectedBill_collect->each(function ($rejectedBill)use($service){
+                $service->syncOrderIssue($rejectedBill);
             });
             return ['success'=>true];
         } catch (\Exception $e) {

+ 52 - 14
app/Http/Controllers/StoreController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Depository;
 use App\Owner;
+use App\Services\common\BatchUpdateService;
 use App\Services\StoreService;
 use App\Store;
 use App\StoreItems;
@@ -29,11 +30,12 @@ class StoreController extends Controller
     {
         if(!Gate::allows('入库管理-入库-查询')){ return redirect(url('/'));  }
         /** @var StoreService $storeService */
+        $paginateParams=$request->input();
         $storeService=app(StoreService::class);
         $stores=$storeService->paginate($request->input());
         $warehouses=Warehouse::query()->get();
         $owners=app("OwnerService")->getIntersectPermitting();
-        return view('store.inStorage.index',compact('stores','warehouses','owners'));
+        return view('store.inStorage.index',compact('stores','warehouses','owners','paginateParams'));
     }
     /**
      * Display a listing of the resource.
@@ -241,20 +243,56 @@ class StoreController extends Controller
         oci_close($conn);
         $warehouse = app('WarehouseService')->firstOrCreate(["code"=>$asn->warehouseid],["code"=>$asn->warehouseid,"name"=>$asn->warehouseid]);
         $owner = app('OwnerService')->firstOrCreate(['code'=>$asn->customerid],['code'=>$asn->customerid,"name"=>$asn->customerid]);
-        $store = app('StoreService')->create([
-            'asn_code'=>$asnno,
-            'warehouse_id'=>$warehouse->id,
-            'owner_id'=>$owner->id,
-            'stored_method'=>'快速入库',
-            'status'=>'已入库',
-            'remark'=>$asn->notes,
-        ]);
-        app('LogService')->log(__METHOD__,"快速入库",json_encode($store));
-        foreach ($items as &$item){
-            $item["store_id"] = $store->id;
+        $store = Store::query()->with("storeItems")->where("asn_code",$asnno)->first();
+        if (!$store){
+            $store = app('StoreService')->create([
+                'asn_code'=>$asnno,
+                'warehouse_id'=>$warehouse->id,
+                'owner_id'=>$owner->id,
+                'stored_method'=>'快速入库',
+                'status'=>'已入库',
+                'remark'=>$asn->notes,
+            ]);
+            app('LogService')->log(__METHOD__,"快速入库",json_encode($store));
+            foreach ($items as &$item){
+                $item["store_id"] = $store->id;
+            }
+            app('StoreItemService')->insert($items);
+            app('LogService')->log(__METHOD__,"快速录入子项",json_encode($items));
+        }else{
+            $store->update([
+                'asn_code'=>$asnno,
+                'warehouse_id'=>$warehouse->id,
+                'owner_id'=>$owner->id,
+                'stored_method'=>'快速入库',
+                'status'=>'已入库',
+                'remark'=>$asn->notes,
+            ]);
+            $insertItem = [];
+            if ($store->storeItems){
+                $updateItem = [["id","asn_line_code","name","sku","barcode","amount","quality","status"]];
+                $existItem = [];
+                $store->storeItems->each(function ($item)use(&$existItem){
+                    $existItem[$item->asn_line_code] = $item->id;
+                });
+                foreach ($items as $item){
+                    if (isset($existItem[$item['asn_line_code']])){
+                        $item["id"] = $existItem[$item['asn_line_code']];
+                        $updateItem[] = $item;
+                    }else {
+                        $item["store_id"] = $store->id;
+                        $insertItem[] = $item;
+                    }
+                }
+                if (count($updateItem) > 1) app(BatchUpdateService::class)->batchUpdate("store_items",$updateItem);
+            }else{
+                foreach ($items as $item){
+                    $item["store_id"] = $store->id;
+                    $insertItem[] = $item;
+                }
+            }
+            if ($insertItem)app('StoreItemService')->insert($items);
         }
-        app('StoreItemService')->insert($items);
-        app('LogService')->log(__METHOD__,"快速录入子项",json_encode($items));
         return ['success'=>true,"data"=>"已成功将“".$asnno."”入库"];
     }
 

+ 38 - 7
app/Http/Controllers/TestController.php

@@ -15,9 +15,6 @@ use App\Console\Commands\CreateOwnerReport;
 use App\Console\Commands\SyncWmsCommoditiesInformation;
 use App\Console\Commands\SyncWMSOrderTask;
 use App\Console\Commands\WasSyncWmsAsnInformation;
-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;
@@ -88,6 +85,7 @@ use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Facades\Http;
+use Illuminate\Support\Facades\Redis;
 use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Str;
 use Maatwebsite\Excel\Facades\Excel;
@@ -158,7 +156,9 @@ sql;
     }
     public function zzd()
     {
-        $this->disposeDetail();
+        $a = [1,2,3,4,5];
+        $c = [1,2,3,5,6];
+        dd(array_diff($c,$a));
     }
 
     public function zzd1()
@@ -281,9 +281,40 @@ sql;
 
     function t1(Request $request)
     {
-        $user=City::query()->firstx();
-        $user['created_at'] = '2020-12-23';
-        $user->save();
+        $times=12345;
+        $start_at = microtime(true);
+        for($i=0;$i<$times;$i++){
+            Cache::put(md5('k_delme'.$i), 'a');
+        }
+        echo microtime(true)-$start_at, '<br>';
+
+        $start_at = microtime(true);
+        for($i=0;$i<$times;$i++){
+            Cache::get(md5('k_delme'.$i));
+        }
+        echo microtime(true)-$start_at, '<br>';
+
+        $start_at = microtime(true);
+        for($i=0;$i<$times;$i++){
+            Cache::pull(md5('k_delme'.$i));
+        }
+        echo microtime(true)-$start_at, '<br>';
+        for($i=0;$i<$times;$i++){
+            Redis::set(md5('k_delme'.$i), 'a');
+        }
+        echo microtime(true)-$start_at, '<br>';
+
+        $start_at = microtime(true);
+        for($i=0;$i<$times;$i++){
+            Redis::get(md5('k_delme'.$i));
+        }
+        echo microtime(true)-$start_at, '<br>';
+
+        $start_at = microtime(true);
+        for($i=0;$i<$times;$i++){
+            Redis::del(md5('k_delme'.$i));
+        }
+        echo microtime(true)-$start_at, '<br>';
     }
 
     function packageT(Request $request)

+ 1 - 0
app/Http/Controllers/WaybillController.php

@@ -88,6 +88,7 @@ class WaybillController extends Controller
         if(!Gate::allows('运输管理-编辑')){ return redirect(url('/'));  }
         /** @var WaybillService */
         $waybill = app('waybillService')->find($id);
+        if (!$waybill)return view("exception.default",["code"=>"500","message"=>"数据已被删除或丢失"]);
         if ($waybill->deliver_at){
             $waybill->deliver_at_date=Carbon::parse($waybill->deliver_at)->format('Y-m-d');
             $waybill->deliver_at_time=Carbon::parse($waybill->deliver_at)->format('H:i:s');

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

@@ -177,7 +177,7 @@ class ProcessController extends Controller
             array_push($commoditiesTem['owner_id'],$owners[$oracleBasSkus[$i]->customerid]);
             if ($oracleBasSkus[$i]->alternate_sku1)$commodityBarCodeData[$oracleBasSkus[$i]->sku."_".$owners[$oracleBasSkus[$i]->customerid]]=["code"=>$oracleBasSkus[$i]->alternate_sku1,"commodity_id"=>'','created_at'=>Carbon::now()];
         }
-        //TODO 保留:根据条码与货主批量二次查找商品
+        //保留:根据条码与货主批量二次查找商品
         if (count($commoditiesData) > 0){
             app('CommodityService')->insert($commoditiesData);
             app('LogService')->log(__METHOD__, 'FLUX二次加工单接口录入商品__' . __FUNCTION__, json_encode($commoditiesData), Auth::user()['id']);

+ 1 - 1
app/Http/Controllers/api/thirdPart/weixin/WxController.php

@@ -2,7 +2,7 @@
 
 namespace App\Http\Controllers\Api\thirdPart\weixin;
 /**
- * TODO::接口路径(微信线上)的需要修改,因为route文件和路径都改成了新的标准
+ * 接口路径(微信线上)的需要修改,因为route文件和路径都改成了新的标准
  */
 use App\Unit;
 use App\User;

+ 46 - 5
app/Imports/OwnerPriceDirectLogisticDetailImport.php

@@ -18,7 +18,7 @@ class OwnerPriceDirectLogisticDetailImport implements ToCollection,WithHeadingRo
 {
     protected $model;
 
-    public function __construct(OwnerPriceDirectLogistic $model)
+    public function __construct($model)
     {
         $this->model = $model;
     }
@@ -29,10 +29,6 @@ class OwnerPriceDirectLogisticDetailImport implements ToCollection,WithHeadingRo
     */
     public function collection(Collection $collection)
     {
-        if (!$this->model){
-            Cache::put("directLogistic",["success"=>false, "data"=>"不存在父级"],86400);
-            return false;
-        }
         $row = $collection->first();
         $additional = "续费";
 
@@ -61,6 +57,10 @@ class OwnerPriceDirectLogisticDetailImport implements ToCollection,WithHeadingRo
             $map[$carType->name] = $carType->id;
         }
 
+        if (!$this->model){
+            return $this->readonly($collection, $map, $additional);
+        }
+
         //已存在的计费
         $existDetails = [];
         foreach ($this->model->details as $detail){
@@ -133,4 +133,45 @@ class OwnerPriceDirectLogisticDetailImport implements ToCollection,WithHeadingRo
         Cache::put("directLogistic",["success"=>true,"data"=>$this->model->details,"errors"=>$errors],86400);
         return true;
     }
+
+    private function readonly(Collection $collection, array $map, $additional)
+    {
+        $errors = [];
+        $data = [];
+        $existInsert = [];
+        foreach ($collection as $index => $item){
+            /* 数据校验 */
+            if (!$item["车型"]){
+                $errors[] = "第“".($index+2)."”行车型为空";
+                continue;
+            }else{
+                if (!isset($map[$item["车型"]])){
+                    $errors[] = "第“".($index+2)."”行未知车型";
+                    continue;
+                }
+                $item["车型"] = $map[$item["车型"]];
+            }
+            if (!$item["起步费"] || !is_numeric($item["起步费"]) || $item["起步费"] <= 0){
+                $errors[] = "第“".($index+2)."”行非法起步费";
+                continue;
+            }
+            if (!$item[$additional] || !is_numeric($item[$additional]) || $item[$additional] <= 0){
+                $errors[] = "第“".($index+2)."”行非法续费";
+                continue;
+            }
+
+            if (isset($existInsert[$item["车型"]])){
+                $errors[] = "第“".($index+2)."”行与第“".$existInsert[$item["车型"]]."”行重复";
+                continue;
+            }
+            $data[] = [
+                "car_type_id" => $item["车型"],
+                "base_fee" => $item["起步费"],
+                "additional_fee" => $item[$additional],
+            ];
+            $existInsert[$item["车型"]] = $index+2;
+        }
+        Cache::put("directLogistic",["success"=>true,"data"=>$data,"errors"=>$errors],86400);
+        return true;
+    }
 }

+ 74 - 11
app/Imports/OwnerPriceLogisticDetailImport.php

@@ -3,7 +3,6 @@
 namespace App\Imports;
 
 use App\City;
-use App\OwnerPriceLogistic;
 use App\OwnerPriceLogisticDetail;
 use App\Province;
 use App\Services\common\BatchUpdateService;
@@ -19,7 +18,7 @@ HeadingRowFormatter::default('none');
 class OwnerPriceLogisticDetailImport implements ToCollection,WithHeadingRow
 {
     protected $logistic;
-    public function __construct(OwnerPriceLogistic $logistic)
+    public function __construct($logistic)
     {
         $this->logistic = $logistic;
     }
@@ -30,10 +29,6 @@ class OwnerPriceLogisticDetailImport implements ToCollection,WithHeadingRow
     */
     public function collection(Collection $collection)
     {
-        if (!$this->logistic){
-            Cache::put("logistic",["success"=>false, "data"=>"不存在父级"],86400);
-            return false;
-        }
         $row = $collection->first();
         $header = [
             "计数单位","计数区间","省份","市","单价","送货费","起始计费","起始计数","费率"
@@ -61,6 +56,9 @@ class OwnerPriceLogisticDetailImport implements ToCollection,WithHeadingRow
             $cityMappingProvince[$city->id] = $city->province_id;
         }
 
+        if (!$this->logistic)
+            return $this->readonly($collection, $map, $cityMap, $cityMappingProvince);
+
         //对比单位
         $unit = $this->logistic->unit ? strtoupper($this->logistic->unit->name) : '';
         $otherUnit = $this->logistic->otherUnit ? strtoupper($this->logistic->otherUnit->name) : '';
@@ -99,14 +97,10 @@ class OwnerPriceLogisticDetailImport implements ToCollection,WithHeadingRow
                 if (isset($map[mb_substr($item["省份"], 0,-1)]))$item["省份"] = mb_substr($item["省份"], 0,-1);
             }
             if (!$item["计数单位"] || (strtoupper($item["计数单位"]) != $unit && strtoupper($item["计数单位"]) != $otherUnit)){
-                //$errors[] = "第“".($index+2)."”行单位不符合";
-                //continue;
                 Cache::put("logistic",["success"=>false, "data"=>"第“".($index+2)."”行单位不符合"],86400);
                 return false;
             }
             if (!$item["计数区间"] || array_search($item["计数区间"],$range[strtoupper($item["计数单位"])]) === false){
-                //$errors[] = "第“".($index+2)."”行非法首重价格";
-                //continue;
                 Cache::put("logistic",["success"=>false, "data"=>"第“".($index+2)."”行区间不符合"],86400);
                 return false;
             }
@@ -135,8 +129,8 @@ class OwnerPriceLogisticDetailImport implements ToCollection,WithHeadingRow
                 continue;
             }
             $item["省份"] = $map[$item["省份"]];
-            $item["计数单位"] = strtoupper($item["计数单位"]) == $unit ? $this->logistic->unit_id : $this->logistic->other_unit_id;
             $item["市"] = $cityMap[$item["市"]];
+            $item["计数单位"] = strtoupper($item["计数单位"]) == $unit ? $this->logistic->unit_id : $this->logistic->other_unit_id;
             $key = $item["计数单位"]."_".$item["计数区间"]."_".$item["省份"]."_".$item["市"];
             if (isset($existInsert[$key])){
                 $errors[] = "第“".($index+2)."”行与第“".$existInsert[$key]."”行重复";
@@ -183,4 +177,73 @@ class OwnerPriceLogisticDetailImport implements ToCollection,WithHeadingRow
         Cache::put("logistic",["success"=>true,"data"=>$this->logistic->details,"errors"=>$errors],86400);
         return true;
     }
+
+    public function readonly(Collection $collection, array $map, array $cityMap, array $cityMappingProvince)
+    {
+        //生成列表内的重复条目
+        $existInsert = [];
+        //符合数据
+        $data = [];
+        //错误信息
+        $errors = [];
+        foreach ($collection as $index => $item){
+            /* 数据校验 */
+            if (!$item["省份"]){
+                $errors[] = "第“".($index+2)."”行省份为空";
+                continue;
+            }else{
+                if ((!isset($map[$item["省份"]]) && !isset($map[mb_substr($item["省份"], 0,-1)]))){
+                    $errors[] = "第“".($index+2)."”行未知省份";
+                    continue;
+                }
+                if (isset($map[mb_substr($item["省份"], 0,-1)]))$item["省份"] = mb_substr($item["省份"], 0,-1);
+            }
+            if (!isset($cityMap[$item["市"]])){
+                $errors[] = "第“".($index+2)."”行未知城市";
+                continue;
+            }
+            if (!$item["单价"] || !is_numeric($item["单价"]) || $item["单价"] <= 0){
+                $errors[] = "第“".($index+2)."”行非法单价";
+                continue;
+            }
+            $numeric = ["送货费","起始计费","起始计数","费率"];
+            $sign = false;
+            foreach ($numeric as $column){
+                if ($item[$column] && (!is_numeric($item[$column]) || $item[$column] <= 0)){
+                    $errors[] = "第“".($index+2)."”行非法".$column;
+                    $sign = true;
+                    break;
+                }
+            }
+            if ($sign)continue;
+
+            /* 数据转换及存在校验 */
+            if ($cityMappingProvince[$cityMap[$item["市"]]] != $map[$item["省份"]]){
+                $errors[] = "第“".($index+2)."”行城市不属于该省份";
+                continue;
+            }
+            $item["省份"] = $map[$item["省份"]];
+            $item["市"] = $cityMap[$item["市"]];
+            $key = $item["计数单位"]."_".$item["计数区间"]."_".$item["省份"]."_".$item["市"];
+            if (isset($existInsert[$key])){
+                $errors[] = "第“".($index+2)."”行与第“".$existInsert[$key]."”行重复";
+                continue;
+            }
+
+            $data[] = [
+                "unit_id" => $item["计数单位"],
+                "range" => $item["计数区间"],
+                "province_id" => $item["省份"],
+                "city_id" => $item["市"],
+                "unit_price" => $item["单价"],
+                "delivery_fee" => $item["送货费"],
+                "initial_fee" => $item["起始计费"],
+                "initial_amount" => $item["起始计数"],
+                "rate" => $item["费率"],
+            ];
+            $existInsert[$key] = $index+2;
+        }
+        Cache::put("logistic",["success"=>true,"data"=>$data,"errors"=>$errors],86400);
+        return true;
+    }
 }

+ 4 - 3
app/Imports/WaybillPriceModelsImport.php

@@ -41,7 +41,7 @@ class WaybillPriceModelsImport implements ToCollection,WithHeadingRow
         $sum=2;
         if ($endIs) {
             foreach ($collection as $row) {
-                if ($row['承运商'] && $row['计数单位'] && $row['省份'] && $row['单价']) {
+                if ($row['承运商'] && $row['计数单位'] && $row['省份'] && $row['单价']!=='') {
                     if (strstr($row['省份'], '省')){$row['省份']=str_replace('省','',$row['省份']);};
                     $logistic = Logistic::query()->where('name', $row['承运商'])->first();
                     $unit = Unit::query()->where('name', $row['计数单位'])->first();
@@ -52,7 +52,8 @@ class WaybillPriceModelsImport implements ToCollection,WithHeadingRow
                         $billing = $billing->where('unit_id', $unit->id);
                         $billing = $billing->where('province_id', $province->id);
                         if ($row['市']) {
-                            $billing = $billing->where('city_id', $city->id);
+                            if ($city) $billing = $billing->where('city_id', $city->id);
+                            else $billing->whereNull("city_id");
                         }
                         if ($row['计数区间'] && !strstr($row['计数区间'], '∞')) {
                             $str = explode('-', $row['计数区间']);
@@ -63,7 +64,7 @@ class WaybillPriceModelsImport implements ToCollection,WithHeadingRow
                         }
                         $billing = $billing->first();
                         if (!$billing) {
-                            if (isset($waybillPriceModel['city_id'])){
+                            if ($row['市']){
                                 $waybillPriceModelProvince=WaybillPriceModel::query()->whereRaw('logistic_id = ? AND province_id = ? AND city_id IS NULL',[$logistic->id,$province->id])->first();
                                 if ($waybillPriceModelProvince){
                                     $cityIs=false;

+ 1 - 1
app/MeasuringMachine.php

@@ -19,7 +19,7 @@ class MeasuringMachine extends Model
     ];
 
 
-    //TODO 上线下线
+    //上线下线
     public function turnOn(){
         if($this['status']=='在线')return;
         $this['status']='在线';

+ 6 - 1
app/Owner.php

@@ -29,7 +29,8 @@ class Owner extends Model
         "phone_number",         //联系电话
         "user_owner_group_id",  //项目组ID
         "waring_line_on",       //月单量预警
-        "description"           //描述
+        "description",          //描述
+        "warehouse_id"          //仓库ID
     ];
 
     public static function filterAuthorities(){
@@ -102,4 +103,8 @@ class Owner extends Model
     {   //直发车计费
         return $this->belongsToMany(OwnerPriceDirectLogistic::class,"owner_price_direct_logistic_owner","owner_id","owner_price_direct_logistic_id");
     }
+    public function warehouse()
+    {   //仓库
+        return $this->belongsTo(Warehouse::class,"warehouse_id","id");
+    }
 }

+ 3 - 8
app/OwnerPriceOperation.php

@@ -21,17 +21,12 @@ class OwnerPriceOperation extends Model
     public static $features = null;
     public static $columnMapping = null;
 
-
-    public function ownerInStorageRule()
-    {   //入库规则
-        return $this->hasOne(OwnerInStorageRule::class,"owner_price_operation_id","id");
-    }
-    public function ownerOutStorageRules()
+    public function items()
     {   //出库规则
-        return $this->hasMany(OwnerOutStorageRule::class,"owner_price_operation_id","id");
+        return $this->hasMany(OwnerPriceOperationItem::class,"owner_price_operation_id","id");
     }
     public function ownerPriceOperationOwners()
-    {   //货主中间表
+    {   //货主
         return $this->belongsToMany(Owner::class,"owner_price_operation_owner","owner_price_operation_id","owner_id");
     }
 

+ 2 - 2
app/OwnerPriceOperationItemOut.php → app/OwnerPriceOperationItem.php

@@ -6,13 +6,13 @@ use Illuminate\Database\Eloquent\Model;
 
 use App\Traits\LogModelChanging;
 
-class OwnerPriceOperationItemOut extends Model
+class OwnerPriceOperationItem extends Model
 {
     use LogModelChanging;
 
     protected $fillable = [
         "owner_price_operation_id",         //作业计费ID
-        "strategy",                         //出库策略
+        "strategy",                         //策略
         "amount",                           //起步数
         "unit_id",                          //单位ID
         "unit_price",                       //单价

+ 0 - 25
app/OwnerPriceOperationItemIn.php

@@ -1,25 +0,0 @@
-<?php
-
-namespace App;
-
-use Illuminate\Database\Eloquent\Model;
-
-use App\Traits\LogModelChanging;
-
-class OwnerPriceOperationItemIn extends Model
-{
-    use LogModelChanging;
-
-    protected $fillable = [
-        "owner_price_operation_id", //作业计费ID
-        "amount",                   //计量
-        "unit_id",                  //单位ID
-        "unit_price",               //单价
-    ];
-    public $timestamps=false;
-
-    public function unit()
-    {   //单位
-        return $this->hasOne(Unit::class,"id","unit_id");
-    }
-}

+ 5 - 0
app/OwnerStoragePriceModel.php

@@ -11,6 +11,7 @@ class OwnerStoragePriceModel extends Model
     use LogModelChanging;
 
     protected $fillable = [
+        "name",             //名称
         "counting_type",    //计费类型
         "using_type",       //用仓类型
         "minimum_area",     //最低起租面积
@@ -24,4 +25,8 @@ class OwnerStoragePriceModel extends Model
     {   //单位
         return $this->hasOne(Unit::class,"id","unit_id");
     }
+    public function owners()
+    {   //货主
+        return $this->belongsToMany(Owner::class,"owner_storage_price_model_owner","owner_storage_price_model_id","owner_id");
+    }
 }

+ 12 - 13
app/Providers/AppServiceProvider.php

@@ -43,10 +43,10 @@ use App\Services\OrderTrackingService;
 use App\Services\OwnerAreaReportService;
 use App\Services\OwnerBillReportService;
 use App\Services\OwnerFeeDetailService;
-use App\Services\OwnerOutStorageRuleService;
 use App\Services\OwnerPriceDirectLogisticService;
 use App\Services\OwnerPriceExpressService;
 use App\Services\OwnerPriceLogisticService;
+use App\Services\OwnerPriceOperationItemService;
 use App\Services\OwnerPriceOperationService;
 use App\Services\OwnerReportService;
 use App\Services\OwnerService;
@@ -76,7 +76,6 @@ use App\Services\UserService;
 use App\Services\WarehouseService;
 use App\Services\WaybillFinancialService;
 use App\Services\WeighExceptedService;
-use Illuminate\Foundation\Console\ModelMakeCommand;
 use Illuminate\Queue\Events\JobFailed;
 use Illuminate\Support\Facades\Queue;
 use Illuminate\Support\Facades\Schema;
@@ -135,14 +134,16 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('CheckActiveMenuService',CheckActiveMenuService::class);
         app()->singleton('CommodityBarcodeService',CommodityBarcodeService::class);
         app()->singleton('CommodityService', CommodityService::class);
+        app()->singleton('CustomerLogService',CustomerLogService::class);
+        app()->singleton('CustomerLogStatusService',CustomerLogStatusService::class);
         app()->singleton('CustomerService',CustomerService::class);
         app()->singleton('DataHandlerService',DataHandlerService::class);
         app()->singleton('DepositoryService',DepositoryService::class);
         app()->singleton('FeatureService',FeatureService::class);
         app()->singleton('ForeignHaiRoboticsService',ForeignHaiRoboticsService::class);
-        app()->singleton('InventoryDailyLogService',InventoryDailyLogService::class);
         app()->singleton('InventoryAccountMissionService',InventoryAccountMissionService::class);
         app()->singleton('InventoryCompareService',InventoryCompareService::class);
+        app()->singleton('InventoryDailyLogService',InventoryDailyLogService::class);
         app()->singleton('LaborReportsCountingRecordService',LaborReportsCountingRecordService::class);
         app()->singleton('LogService',LogService::class);
         app()->singleton('LogisticService',LogisticService::class);
@@ -152,11 +153,11 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('OracleDocAsnDetailService',OracleDocAsnDetailService::class);
         app()->singleton('OracleDocOrderHeaderService',OracleDOCOrderHeaderService::class);
         app()->singleton('OracleDocWaveDetailService',OracleDocWaveDetailService::class);
-        app()->singleton('OrderIssueProcessLogService',OrderIssueProcessLogService::class);
-        app()->singleton('OrderCommodityService',OrderCommodityService::class);
         app()->singleton('OrderCommodityAssignService',OrderCommodityAssignService::class);
+        app()->singleton('OrderCommodityService',OrderCommodityService::class);
         app()->singleton('OrderIssueRejectedBillService',OrderIssueRejectedBillService::class);
         app()->singleton('OrderIssuePerformanceService',OrderIssuePerformanceService::class);
+        app()->singleton('OrderIssueProcessLogService',OrderIssueProcessLogService::class);
         app()->singleton('OrderIssueService',OrderIssueService::class);
         app()->singleton('OrderIssueWorkLoadService',OrderIssueWorkLoadService::class);
         app()->singleton('OrderPackageCommoditiesService',OrderPackageCommoditiesService::class);
@@ -166,20 +167,20 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('OwnerAreaReportService',OwnerAreaReportService::class);
         app()->singleton('OwnerBillReportService',OwnerBillReportService::class);
         app()->singleton('OwnerFeeDetailService',OwnerFeeDetailService::class);
-        app()->singleton('OwnerOutStorageRuleService',OwnerOutStorageRuleService::class);
+        app()->singleton('OwnerPriceDirectLogisticService',OwnerPriceDirectLogisticService::class);
         app()->singleton('OwnerPriceExpressService',OwnerPriceExpressService::class);
         app()->singleton('OwnerPriceLogisticService',OwnerPriceLogisticService::class);
-        app()->singleton('OwnerPriceDirectLogisticService',OwnerPriceDirectLogisticService::class);
+        app()->singleton('OwnerPriceOperationItemService',OwnerPriceOperationItemService::class);
         app()->singleton('OwnerPriceOperationService',OwnerPriceOperationService::class);
         app()->singleton('OwnerReportService',OwnerReportService::class);
         app()->singleton('OwnerService',OwnerService::class);
         app()->singleton('OwnerStoragePriceModelService',OwnerStoragePriceModelService::class);
-        app()->singleton('PackageStatisticsService',PackageStatisticsService::class);
         app()->singleton('PackageService',PackageService::class);
-        app()->singleton('ProcessesContentService',ProcessesContentService::class);
+        app()->singleton('PackageStatisticsService',PackageStatisticsService::class);
         app()->singleton('ProcessMethodService',ProcessMethodService::class);
         app()->singleton('ProcessService',ProcessService::class);
         app()->singleton('ProcessStatisticService',ProcessStatisticService::class);
+        app()->singleton('ProcessesContentService',ProcessesContentService::class);
         app()->singleton('RealtimePendingOrdersService',RealtimePendingOrdersService::class);
         app()->singleton('RejectedBillItemService',RejectedBillItemService::class);
         app()->singleton('RejectedBillService',RejectedBillService::class);
@@ -188,18 +189,16 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('StationService',StationService::class);
         app()->singleton('StationTaskBatchService',StationTaskBatchService::class);
         app()->singleton('StationTaskBatchTypeService',StationTaskBatchTypeService::class);
-        app()->singleton('StoreCheckingReceiveService',StoreCheckingReceiveService::class);
         app()->singleton('StoreCheckingReceiveItemService',StoreCheckingReceiveItemService::class);
+        app()->singleton('StoreCheckingReceiveService',StoreCheckingReceiveService::class);
         app()->singleton('StoreItemService',StoreItemService::class);
         app()->singleton('StoreService',StoreService::class);
         app()->singleton('UnitService',UnitService::class);
-        app()->singleton('UserService',UserService::class);
         app()->singleton('UserOwnerGroupService',UserOwnerGroupService::class);
+        app()->singleton('UserService',UserService::class);
         app()->singleton('WarehouseService',WarehouseService::class);
         app()->singleton('WaybillFinancialService',WaybillFinancialService::class);
         app()->singleton('WeighExceptedService',WeighExceptedService::class);
-        app()->singleton('CustomerLogService',CustomerLogService::class);
-        app()->singleton('CustomerLogStatusService',CustomerLogStatusService::class);
     }
 
 

+ 3 - 0
app/Services/AllInventoryService.php

@@ -4,9 +4,12 @@ namespace App\Services;
 
 use App\Owner;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 Class AllInventoryService
 {
+    use ServiceAppAop;
     public function getSql(array $params, $page=null, $paginate=null){
         $ownerCodes=Owner::filterAuthorities()->select('code')->get();
         $date_start=$params['date_start'] ?? null;

+ 3 - 0
app/Services/AuthorityService.php

@@ -8,9 +8,12 @@ use App\Authority;
 use App\Role;
 use Exception;
 use Illuminate\Support\Facades\Cache;
+use App\Traits\ServiceAppAop;
+
 
 class AuthorityService
 {
+    use ServiceAppAop;
 //    /**
 //     * @return Authority[]
 //     */

+ 8 - 5
app/Services/BatchService.php

@@ -4,9 +4,12 @@ namespace App\Services;
 
 use App\Batch;
 use Exception;
+use App\Traits\ServiceAppAop;
+
 
 Class BatchService
 {
+    use ServiceAppAop;
     /** @var StationTaskBatchService $stationTaskBatchService */
     private $stationTaskBatchService;
     /** @var StationRuleBatchService $stationRuleBatchService */
@@ -53,11 +56,11 @@ Class BatchService
      */
     public function assignTasks(array $batches)
     {
-        $this->stationTaskBatchService=app('StationTaskBatchService');
-        $this->stationRuleBatchService=app('StationRuleBatchService');
-        $this->stationTaskService=app('StationTaskService');
-        $this->stationTaskCommodityService=app('StationTaskCommodityService');
-        $this->stationTaskMaterialBoxService=app('StationTaskMaterialBoxService');
+        $this->instant($this->stationTaskBatchService,'StationTaskBatchService');
+        $this->instant($this->stationRuleBatchService,'StationRuleBatchService');
+        $this->instant($this->stationTaskService,'StationTaskService');
+        $this->instant($this->stationTaskCommodityService,'StationTaskCommodityService');
+        $this->instant($this->stationTaskMaterialBoxService,'StationTaskMaterialBoxService');
 
         $batches_canProcess = $this->stationRuleBatchService->getBatches_canProcess($batches); //按规则过滤需要的波次
         if($batches_canProcess->isEmpty()) return;

+ 3 - 0
app/Services/CacheService.php

@@ -5,9 +5,12 @@ namespace App\Services;
 
 
 use Illuminate\Support\Facades\Cache;
+use App\Traits\ServiceAppAop;
+
 
 class CacheService
 {
+    use ServiceAppAop;
     function getOrExecute(String $key, $func, $expiration=null){
         if(!$expiration) $expiration=config('cache.expirations.default');
         return Cache::remember($key, $expiration, $func);

+ 3 - 0
app/Services/CarTypeService.php

@@ -3,9 +3,12 @@
 namespace App\Services;
 
 use App\CarType;
+use App\Traits\ServiceAppAop;
+
 
 Class CarTypeService
 {
+    use ServiceAppAop;
     /*
      * array | string $column
      * 默认一些select字段,可传递string 或 array来指定select字段

+ 3 - 0
app/Services/CarrierService.php

@@ -3,9 +3,12 @@
 namespace App\Services;
 
 use App\Carrier;
+use App\Traits\ServiceAppAop;
+
 
 Class CarrierService
 {
+    use ServiceAppAop;
     public function getSelection(){
         return Carrier::query()->select('id','name')->get();
     }

+ 6 - 3
app/Services/CheckActiveMenuService.php

@@ -13,9 +13,12 @@ use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Redis;
+use App\Traits\ServiceAppAop;
+
 
 class CheckActiveMenuService
 {
+    use ServiceAppAop;
     /**
      *同步数据到数据库并且将L1转移到L2
      */
@@ -26,7 +29,7 @@ class CheckActiveMenuService
             self::syncToDB();
             self::switchL1ToL2();
         } catch (\Exception $e) {
-            // TODO 同步异常的处理策略
+            // 同步异常的处理策略
             return;
         }
     }
@@ -59,7 +62,7 @@ class CheckActiveMenuService
                     //菜单点击入缓存
                     Redis::LPUSH('UserVisitMenuLogsL1', $userVisitMenuLog);
                 } catch (\Exception $e) {
-                    // TODO 缓存异常的处理策略
+                    //缓存异常的处理策略
                     $userVisitMenuLog->save();
                 }
             }
@@ -83,7 +86,7 @@ class CheckActiveMenuService
                 $result= self::getFromDB($user_id);
             }
         } catch (\Exception $e) {
-            // TODO 缓存异常的处理策略
+            //缓存异常的处理策略
             $result=self::getFromDB($user_id);
         }
 

+ 3 - 0
app/Services/CityService.php

@@ -4,9 +4,12 @@ namespace App\Services;
 
 use App\City;
 use Illuminate\Support\Str;
+use App\Traits\ServiceAppAop;
+
 
 Class CityService
 {
+    use ServiceAppAop;
     public static $cities = ['汕头','汕尾'];
 
     /*

+ 3 - 0
app/Services/CommodityBarcodeService.php

@@ -7,9 +7,12 @@ use App\CommodityBarcode;
 use App\Services\common\DataHandlerService;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Cache;
+use App\Traits\ServiceAppAop;
+
 
 Class CommodityBarcodeService
 {
+    use ServiceAppAop;
     public function getCommodities(array $codes, $owner_id){
         return CommodityBarcode::query()->whereHas('commodity',function ($query)use($owner_id){
             $query->where('owner_id',$owner_id);

+ 3 - 2
app/Services/CommodityService.php

@@ -14,9 +14,12 @@ use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Support\Facades\Cache;
+use App\Traits\ServiceAppAop;
+
 
 Class CommodityService
 {
+    use ServiceAppAop;
 
     /**
      * @var CacheService $cacheService
@@ -721,8 +724,6 @@ Class CommodityService
         if(count($commodities)>0) $this->pushToCache($commodities);
     }
 
-    // TODO
-
     /**
      * @param array $ownerIds
      * @param array $skus

+ 7 - 4
app/Services/CustomerLogService.php

@@ -1,11 +1,14 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\CustomerLog;
+use App\Traits\ServiceAppAop;
+
 
 Class CustomerLogService
-{ 
+{
+    use ServiceAppAop;
     public function get(array $params, array $withs=[])
     {
         $query = CustomerLog::query()->with($withs)->orderByDesc('id');
@@ -31,4 +34,4 @@ Class CustomerLogService
         return CustomerLog::query()->create($values);
     }
 
-}
+}

+ 7 - 4
app/Services/CustomerLogStatusService.php

@@ -1,11 +1,14 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\CustomerLogStatus;
+use App\Traits\ServiceAppAop;
+
 
 Class CustomerLogStatusService
-{ 
+{
+    use ServiceAppAop;
     public function update(array $params, array $values)
     {
         $query = CustomerLogStatus::query();
@@ -30,4 +33,4 @@ Class CustomerLogStatusService
     {
         return CustomerLogStatus::query()->get($column);
     }
-}
+}

+ 3 - 0
app/Services/CustomerService.php

@@ -5,9 +5,12 @@ namespace App\Services;
 use App\Customer;
 use App\Services\common\QueryService;
 use Illuminate\Database\Eloquent\Builder;
+use App\Traits\ServiceAppAop;
+
 
 Class CustomerService
 {
+    use ServiceAppAop;
     public function getSelection($column = ['id', 'name'])
     {
         return Customer::query()->select($column)->get();

+ 7 - 4
app/Services/DepositoryService.php

@@ -1,13 +1,16 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\Depository;
+use App\Traits\ServiceAppAop;
+
 
 Class DepositoryService
-{ 
+{
+    use ServiceAppAop;
     public function firstOrCreate(array $params, array $values = null){
         if (!$values) $values = $params;
         return Depository::query()->firstOrCreate($params, $values);
     }
-}
+}

+ 7 - 4
app/Services/DocWaveHeaderService.php

@@ -1,15 +1,18 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\ValueStore;
 use Carbon\Carbon;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 use Yajra\Oci8\Query\OracleBuilder;
+use App\Traits\ServiceAppAop;
+
 
 Class DocWaveHeaderService
-{ 
+{
+    use ServiceAppAop;
 
     public function get(array $params, $rule = [])
     {
@@ -52,4 +55,4 @@ Class DocWaveHeaderService
         $valueStore = ValueStore::query()->where("name","wave_last_sync_date");
         return $valueStore->update(["value"=>$value]);
     }
-}
+}

+ 6 - 3
app/Services/FeatureService.php

@@ -1,11 +1,14 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\Feature;
+use App\Traits\ServiceAppAop;
+
 
 Class FeatureService
 {
+    use ServiceAppAop;
     public function getMapArray()
     {
         $features = Feature::query()->get();
@@ -289,4 +292,4 @@ Class FeatureService
         return "false";
     }
 
-}
+}

+ 3 - 0
app/Services/ForeignHaiRoboticsService.php

@@ -12,9 +12,12 @@ use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use Illuminate\Support\Facades\Http;
 use Ramsey\Collection\Collection;
+use App\Traits\ServiceAppAop;
+
 
 class ForeignHaiRoboticsService
 {
+    use ServiceAppAop;
     /**
      * @param string $modeName '输送线入立架'|'立架出至输送线'|'移动立架内位置'|'缓存架入立架'|'立架出至缓存架'
      * @param string $fromLocation

+ 6 - 3
app/Services/InventoryAccountMissionService.php

@@ -1,14 +1,17 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\Services\common\BatchUpdateService;
+use App\Traits\ServiceAppAop;
+
 
 Class InventoryAccountMissionService
 {
+    use ServiceAppAop;
 
     public function batchUpdateItself($column, array $params)
     {
         return app(BatchUpdateService::class)->batchUpdateItself('inventory_account_missions', $column, $params);
     }
-}
+}

+ 4 - 0
app/Services/InventoryAccountService.php

@@ -20,9 +20,12 @@ use Carbon\Carbon;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use function GuzzleHttp\Psr7\_parse_message;
+use App\Traits\ServiceAppAop;
+
 
 class InventoryAccountService
 {
+    use ServiceAppAop;
     private function conditionQueryInventoryAccountMission(array $params){
         $inventoryAccountMissions=InventoryAccountMission::with(['commodity.barcodes','stockInventoryPersons'])->orderBy('difference_amount','desc');
         $columnQueryRules=[];
@@ -44,6 +47,7 @@ class InventoryAccountService
         $inventories=InventoryAccount::query()->with(['owner','creator'])->orderBy('id','desc')->whereIn('owner_id',$ownerIds);
         $columnQueryRules=[
             'owner_id' => ['multi' => ','],
+            'type' => ['multi' => ','],
             'date_start' => ['alias' => 'created_at' , 'startDate' => ' 00:00:00'],
             'date_end' => ['alias' => 'created_at' , 'endDate' => ' 23:59:59'],
         ];

+ 3 - 0
app/Services/InventoryCompareService.php

@@ -15,9 +15,12 @@ use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 use Overtrue\Pinyin\Pinyin;
 use Ramsey\Uuid\Uuid;
+use App\Traits\ServiceAppAop;
+
 
 class InventoryCompareService
 {
+    use ServiceAppAop;
     static private $missionCode;
     public function getCreatingMissionCode($ownerName=''){
         if(self::$missionCode)return self::$missionCode;

+ 6 - 3
app/Services/InventoryDailyLogService.php

@@ -1,14 +1,17 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\InventoryDailyLog;
 use App\InventoryDailyLoggingOwner;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\QueryService;
+use App\Traits\ServiceAppAop;
+
 
 Class InventoryDailyLogService
 {
+    use ServiceAppAop;
     //库存体积条件
     function conditionQuery(array $param){
         $inventoryDailyLogs = InventoryDailyLog::query()->with(['depository','owner','commodity'=>function($query){
@@ -62,4 +65,4 @@ Class InventoryDailyLogService
         return app(BatchUpdateService::class)->batchUpdateItself('inventory_daily_logs', $column, $params);
     }
 
-}
+}

+ 3 - 0
app/Services/InventoryService.php

@@ -8,9 +8,12 @@ use App\InventoryDailyLoggingOwner;
 use App\Owner;
 use App\Services\common\QueryService;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 class InventoryService
 {
+    use ServiceAppAop;
     public function getSql(array $params,$page=null,$paginate=null){
         $ownerCodes=Owner::filterAuthorities()->select('code')->get();
         $date_start=$params['date_start'] ?? null;

+ 3 - 0
app/Services/LaborReportService.php

@@ -22,9 +22,12 @@ use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 
+use App\Traits\ServiceAppAop;
+
 
 class LaborReportService
 {
+    use ServiceAppAop;
     private function conditionQuery(array $params){
         $user=Auth::user();
         $laborReports=LaborReport::query()

+ 3 - 0
app/Services/LaborReportsCountingRecordService.php

@@ -11,9 +11,12 @@ use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Str;
 use Ramsey\Uuid\Type\Integer;
+use App\Traits\ServiceAppAop;
+
 
 class LaborReportsCountingRecordService
 {
+    use ServiceAppAop;
     public function __construct(LaborReport $laborReport)
     {
         $laborReport::$withoutAppends = false;

+ 3 - 0
app/Services/LogService.php

@@ -7,9 +7,12 @@ namespace App\Services;
 use App\Log;
 use Exception;
 use Illuminate\Support\Facades\Redis;
+use App\Traits\ServiceAppAop;
+
 
 class LogService
 {
+    use ServiceAppAop;
     static public function log($class, $method, $description, $id_user = null,$type='log')
     {
         if (!$id_user) {

+ 5 - 2
app/Services/LogisticService.php

@@ -10,16 +10,19 @@ use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Str;
+use App\Traits\ServiceAppAop;
+
 
 Class LogisticService
 {
+    use ServiceAppAop;
     /** @var CacheService $cacheService */
     private $cacheService;
     function __construct(){
-        $this->cacheService=app('CacheService');
+        $this->instant($this->cacheService,'CacheService');
     }
     public function getSelection($column = ['id','name'], $type = '快递'){
-        return $this->cacheService->getOrExecute('LogisticAll_idName'.Str::studly($type),function()use($column,$type){
+        return $this->cacheService->getOrExecute('LogisticAll_'.implode("",$column).Str::studly($type),function()use($column,$type){
             $query = Logistic::query()->select($column);
             if ($type)$query->where(function ($query)use($type){
                 /** @var Builder $query */

+ 3 - 0
app/Services/LogisticTimingService.php

@@ -5,9 +5,12 @@ namespace App\Services;
 use App\Logistic;
 use App\LogisticTiming;
 use App\Province;
+use App\Traits\ServiceAppAop;
+
 
 Class LogisticTimingService
 {
+    use ServiceAppAop;
 
     public function findByParams($cityName,$provinceName,$logisticId)
     {

+ 3 - 0
app/Services/MaterialBoxService.php

@@ -6,9 +6,12 @@ namespace App\Services;
 
 use App\MaterialBox;
 use Illuminate\Support\Facades\Cache;
+use App\Traits\ServiceAppAop;
+
 
 class MaterialBoxService
 {
+    use ServiceAppAop;
 
     function get(array $kvPairs){
         ksort($kvPairs);

+ 51 - 16
app/Services/NewOrderCountingRecordService.php

@@ -9,10 +9,33 @@ use App\Order;
 use App\OrderCountingRecord;
 use App\Warehouse;
 use Carbon\Carbon;
+use Illuminate\Support\Arr;
+use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Cache;
+use App\Traits\ServiceAppAop;
+
 
 class NewOrderCountingRecordService
 {
+    use ServiceAppAop;
+    public function orderCountingRecordsFromCache($start, $end, $unit, $ownerIds)
+    {
+        $dataList = collect();
+        if (count($ownerIds) == 1) return $this->orderCountingRecords($start, $end, $unit, $ownerIds);//当前用户只有一个货主权限,只需执行旧方法即可
+        $queryCondition = $this->transfersToCondition($start, $end, $unit, $ownerIds);//根据条件获取查询条件
+        $md5OwnerIds = md5(join(Arr::sortRecursive($ownerIds)));//将$ownerIds排序,保证md5加密后结果一致  将当前用户拥有的ownerIds进行md5加密
+        foreach ($queryCondition['data'] as $dateStr => $ownerIds) {
+            $key = 'new_order_counting_records_' . $dateStr . '_' . $md5OwnerIds . '_' . $queryCondition['unit'];
+            $data = cache()->remember($key, $this->getTtl($dateStr, $unit), function () use ($dateStr, $unit, $ownerIds) {
+                //如果缓存不存在,则将$dateStr作为查询条件,使用之前的接口查询改日的订单量统计结果,由于接口返回collect,去其中的第一个
+                //因为查询条件仅为一天
+                return $this->orderCountingRecords($dateStr, $dateStr, $unit, $ownerIds)->first();
+            });
+            $dataList->push($data);
+        }
+        return $dataList;
+    }
+
     public function orderCountingRecords($start, $end, $unit, $ownerIds)
     {
         $orders = $this->get($start, $end, $unit, $ownerIds);
@@ -33,7 +56,7 @@ class NewOrderCountingRecordService
     public function logisticsCountingRecords($start, $end, $ownerIds)
     {
         $key = 'logisticsCountingRecords_' . $start . '_' . $end . '_' . json_encode($ownerIds);
-        return Cache::remember($key, config('cache.expirations.oftenChange'), function () use ($start, $end, $ownerIds) {
+        return Cache::remember($key, config('cache.expirations.logisticsCountingRecords'), function () use ($start, $end, $ownerIds) {
             $dataList = collect();
             $resultOrders = $this->get($start, $end, '日', $ownerIds);
             $resultOrders->groupBy('logistic_id')->each(function ($item) use (&$dataList) {
@@ -61,7 +84,7 @@ class NewOrderCountingRecordService
     public function warehouseCountingRecords($start, $end, $ownerIds)
     {
         $key = 'warehouseCountingRecords_' . $start . '_' . $end . '_' . json_encode($ownerIds);
-        return Cache::remember($key, config('cache.expirations.oftenChange'), function () use ($start, $end, $ownerIds) {
+        return Cache::remember($key, config('cache.expirations.warehouseCountingRecords'), function () use ($start, $end, $ownerIds) {
             $dataList = collect();
             $resultOrders = $this->get($start, $end, '日', $ownerIds);
             $resultOrders->groupBy('warehouse_id')->each(function ($item) use (&$dataList) {
@@ -148,6 +171,12 @@ class NewOrderCountingRecordService
         return [$orderCountingRecords_fromSelfTable, $lackingCondition];
     }
 
+    /**
+     * 根据$queryCondition从多种数据源中查询数据
+     * 并将结果插入中间表或者缓存
+     * @param $queryCondition
+     * @return Collection|mixed|\Tightenco\Collect\Support\Collection
+     */
     public function getOrderCountingRecords($queryCondition)
     {
         list($orderCountingRecords_fromCache, $lackingCondition)
@@ -167,7 +196,7 @@ class NewOrderCountingRecordService
          */
         if ($lackingCondition['unit'] != '日') {//日为最低粒度,不用进入此方法
             $orderCountingRecords_combinedByLower = $this->getFromLowerUnit($lackingCondition);
-        }else{
+        } else {
             $orderCountingRecords_FromOrder = $this->dataFromOrder($lackingCondition);
         }
         $result = collect();
@@ -207,7 +236,7 @@ class NewOrderCountingRecordService
                 $orderCountingRecords_days = $this->getOrderCountingRecords($conditionClone);
                 $orderCountingRecords_combinedByLower = $this->turnGradingUpToLow($orderCountingRecords_days, $lowUnit, 'year');
                 $this->insertIntoMiddleTable($orderCountingRecords_combinedByLower, '年');
-                $this->insertIntoCache(collect($orderCountingRecords_combinedByLower),'年');
+                $this->insertIntoCache(collect($orderCountingRecords_combinedByLower), '年');
                 break;
             case '月':
                 $lowUnit = '日';
@@ -226,7 +255,7 @@ class NewOrderCountingRecordService
                 $orderCountingRecords_days = $this->getOrderCountingRecords($conditionClone);
                 $orderCountingRecords_combinedByLower = $this->turnGradingUpToLow($orderCountingRecords_days, $lowUnit, 'month');
                 $this->insertIntoMiddleTable($orderCountingRecords_combinedByLower, '月');
-                $this->insertIntoCache(collect($orderCountingRecords_combinedByLower),'月');
+                $this->insertIntoCache(collect($orderCountingRecords_combinedByLower), '月');
 
                 break;
             case '日':
@@ -238,6 +267,7 @@ class NewOrderCountingRecordService
 
     public function transfersToCondition($start, $end, $unit, $ownerIds): array
     {
+        if (Carbon::parse($end)->gt(now())) $end = now()->toDateString();//如果$end超过当前时间,将end置为当前时间
         $condition = [
             'data' => [],
             'unit' => $unit,];
@@ -309,12 +339,7 @@ class NewOrderCountingRecordService
         });
 
         foreach ($map as $key => $orders) {
-
-            $ttl = config('cache.expirations.forever');
-            if (!$this->isNotCurrentDate($orders[0]['date_target'], $unit)) {
-                $ttl = config('cache.expirations.oftenChange');
-            }
-            Cache::put($key, collect($orders), $ttl);
+            Cache::put($key, collect($orders), $this->getTtl($orders[0]['date_target'], $unit));
         }
     }
 
@@ -411,17 +436,17 @@ class NewOrderCountingRecordService
                     break;
             }
             $item['amount'] = $amount;
-            return $result->push(new OrderCountingRecord( [
+            return $result->push(new OrderCountingRecord([
                 'owner_id' => $item->owner_id,
                 'shop_id' => $item->shop_id,
                 'warehouse_id' => $item->warehouse_id,
                 'logistic_id' => $item->logistic_id,
                 'date_target' => $item->date_target,
                 'counting_unit' => $item->counting_unit,
-                'amount'=>$item->amount,
-                'year'=>$item->year,
-                'month'=>$item->month,
-                'week'=>$item->week
+                'amount' => $item->amount,
+                'year' => $item->year,
+                'month' => $item->month,
+                'week' => $item->week
             ]));
         }
         return $result;
@@ -464,4 +489,14 @@ class NewOrderCountingRecordService
             }
         }
     }
+
+    private function getTtl($dateStr, $unit)
+    {
+        if ($this->isNotCurrentDate($dateStr, $unit)) {
+            $ttl = config('cache.expirations.forever');//非当前日期的缓存为永久
+        } else {
+            $ttl = config('cache.expirations.orderCountingRecord');//当前日期缓存为1800s
+        }
+        return $ttl;
+    }
 }

+ 6 - 3
app/Services/OracleActAllocationDetailService.php

@@ -1,4 +1,4 @@
-<?php 
+<?php
 
 namespace App\Services;
 
@@ -8,9 +8,12 @@ use Illuminate\Support\Facades\DB;
 /**
  * connection : oracle
  * table : ACT_ALLOCATION_DETAILS
- */
+ */use App\Traits\ServiceAppAop;
+
+
 Class OracleActAllocationDetailService
 {
+    use ServiceAppAop;
     private function query($sql, array $params){
         if ($params['checktime_start'] ?? false){
             $sql .= " AND checktime >= '".$params['checktime_start'].":00'";
@@ -63,4 +66,4 @@ Class OracleActAllocationDetailService
         /** @var OracleActAllocationDetails $actAllocationDetail */
         return $actAllocationDetail->first();
     }
-}
+}

+ 4 - 1
app/Services/OracleBasCustomerService.php

@@ -3,14 +3,17 @@
 namespace App\Services;
 
 use App\OracleBasCustomer;
+use App\Traits\ServiceAppAop;
+
 
 Class OracleBasCustomerService
 {
+    use ServiceAppAop;
     /** @var CacheService $cacheService */
     private $cacheService;
 
     function __construct(){
-        $this->cacheService=app('CacheService');
+        $this->instant($this->cacheService,'CacheService');
     }
 
     public function get(array $params){

+ 3 - 0
app/Services/OracleBasSkuService.php

@@ -4,9 +4,12 @@ namespace App\Services;
 
 use App\OracleBasSKU;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 Class OracleBasSkuService
 {
+    use ServiceAppAop;
     public function getOwnerCommodities(array $params){
         $query = OracleBasSKU::query();
         if ($params['code'] ?? false){

+ 3 - 0
app/Services/OracleDOCOrderHeaderService.php

@@ -8,9 +8,12 @@ use App\OracleBasCustomer;
 use App\OracleDOCOrderDetail;
 use App\OracleDOCOrderHeader;
 use App\Owner;
+use App\Traits\ServiceAppAop;
+
 
 Class OracleDOCOrderHeaderService
 {
+    use ServiceAppAop;
 
     static $columns =[
         'DOC_Order_Header.OrderNo','DOC_Order_Header.CustomerID','DOC_Order_Header.OrderTime',

+ 3 - 0
app/Services/OracleDocAsnDetailService.php

@@ -3,9 +3,12 @@
 namespace App\Services;
 
 use App\OracleDOCASNDetail;
+use App\Traits\ServiceAppAop;
+
 
 Class OracleDocAsnDetailService
 {
+    use ServiceAppAop;
     const TABLE = "DOC_ASN_DETAILS";
     public function getLeftJoinBasSku(array $params){
         $query = OracleDOCASNDetail::query();

+ 3 - 0
app/Services/OracleDocAsnHerderService.php

@@ -3,9 +3,12 @@
 namespace App\Services;
 
 use App\OracleDOCASNHeader;
+use App\Traits\ServiceAppAop;
+
 
 Class OracleDocAsnHerderService
 {
+    use ServiceAppAop;
     public function getWmsAsnOnStartDateCreate($startDate)
     {
         if (!$startDate) return null;

+ 3 - 0
app/Services/OracleDocWaveDetailService.php

@@ -7,9 +7,12 @@ use App\OracleDOCWaveDetails;
 use App\ValueStore;
 use Carbon\Carbon;
 use Illuminate\Support\Facades\Cache;
+use App\Traits\ServiceAppAop;
+
 
 class OracleDocWaveDetailService
 {
+    use ServiceAppAop;
     public function clearCancelledOrder($orderHeaders)
     {
         if (!$orderHeaders) return;

+ 7 - 4
app/Services/OrderCommodityAssignService.php

@@ -1,11 +1,14 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\OrderCommodityAssign;
+use App\Traits\ServiceAppAop;
+
 
 Class OrderCommodityAssignService
-{ 
+{
+    use ServiceAppAop;
 
     public function paginate(array $params = null)
     {
@@ -28,4 +31,4 @@ Class OrderCommodityAssignService
         return $query->get();
     }
 
-}
+}

+ 4 - 1
app/Services/OrderCommodityService.php

@@ -7,9 +7,12 @@ use App\OrderCommodity;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
+use App\Traits\ServiceAppAop;
+
 
 Class OrderCommodityService
 {
+    use ServiceAppAop;
 
     public function insert($innerParams){
         if(!$innerParams)return false;
@@ -221,7 +224,7 @@ Class OrderCommodityService
         return $inner_params;
     }
 
-    // TODO 更新后续添加进更新逻辑
+    //更新后续添加进更新逻辑
     public function getUpdateParamsByParamsAndDeleteIds(&$inner_params,&$ids)
     {
         $update_params = [['id','order_id', 'commodity_id', 'amount', 'location', 'created_at', 'updated_at']];

+ 3 - 0
app/Services/OrderIssuePerformanceService.php

@@ -14,9 +14,12 @@ use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use Maatwebsite\Excel\Facades\Excel;
 
+use App\Traits\ServiceAppAop;
+
 
 class OrderIssuePerformanceService
 {
+    use ServiceAppAop;
     public function paginate(array $params)
     {
         $paginate = $params['paginate'] ?? 50;

+ 3 - 0
app/Services/OrderIssueProcessLogService.php

@@ -5,9 +5,12 @@ namespace App\Services;
 use App\OrderIssue;
 use App\OrderIssueProcessLog;
 use Illuminate\Support\Facades\Auth;
+use App\Traits\ServiceAppAop;
+
 
 class OrderIssueProcessLogService
 {
+    use ServiceAppAop;
 
     public function batchStoreAndReturnLogs($params)
     {

+ 3 - 0
app/Services/OrderIssueService.php

@@ -17,9 +17,12 @@ use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Validator;
 use Ramsey\Uuid\Uuid;
+use App\Traits\ServiceAppAop;
+
 
 class OrderIssueService
 {
+    use ServiceAppAop;
     public function __construct()
     {
         app()->bind("orderService", OrderService::class);

+ 3 - 0
app/Services/OrderIssueWorkLoadService.php

@@ -10,9 +10,12 @@ use App\Services\common\QueryService;
 use App\User;
 use Illuminate\Support\Facades\Auth;
 use Maatwebsite\Excel\Facades\Excel;
+use App\Traits\ServiceAppAop;
+
 
 class OrderIssueWorkLoadService
 {
+    use ServiceAppAop;
     public function getQuery(array $queryParam)
     {
         $user = Auth::user();

+ 3 - 0
app/Services/OrderPackageCommoditiesService.php

@@ -14,9 +14,12 @@ use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
 use Illuminate\Support\Collection;
+use App\Traits\ServiceAppAop;
+
 
 class OrderPackageCommoditiesService
 {
+    use ServiceAppAop;
     public function insert(array $params){
         return OrderPackageCommodities::query()->insert($params);
     }

+ 3 - 0
app/Services/OrderPackageService.php

@@ -12,9 +12,12 @@ use App\OrderTracking;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
+use App\Traits\ServiceAppAop;
+
 
 class OrderPackageService
 {
+    use ServiceAppAop;
     public function batchUpdate(array $params){
         return app(BatchUpdateService::class)->batchUpdate('order_packages',$params);
     }

+ 25 - 7
app/Services/OrderService.php

@@ -22,9 +22,12 @@ use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\App;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 class OrderService
 {
+    use ServiceAppAop;
     /**
      * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
      * @var OrderPackageService $packageService
@@ -323,6 +326,7 @@ class OrderService
         $commodities=[];
         $orderNos = "(''";
         $picktotraceids=[];
+        $count = 1;
         /*
          * 第二种扁平化方式(节省空间): 使用快慢指针,因拿到数据正常为顺序数据,自下标1开始与上一条对比orderno唯一标识,不同则更新慢指针下标,
          *  相同则为指定下标map类型数组追加一个键值对属性来记录同类数量,如N条,每次追加属性时先看属性是否存在,存在+1
@@ -330,10 +334,12 @@ class OrderService
         foreach ($orders as $index=>$order){
             $key = $order->orderno;
             if (isset($commodities[$key])){
-                if (!isset($signs[$order->orderlineno]))
+                if (!isset($signs[$order->orderlineno])){
+                    $signs[$order->orderlineno] = true;
                     array_push($commodities[$key],
                         ["sku"=>$order->sku,"alternate_sku1"=>$order->alternate_sku1,"descr_c"=>$order->descr_c,"qtyordered"=>$order->qtyordered
                             ,"lotnum"=>$order->lotnum,"checktime"=>$order->checktime,"orderdetailcodename"=>$order->orderdetailcodename]);
+                }
                 unset($orders[$index]);
                 continue;
             }
@@ -342,12 +348,24 @@ class OrderService
             $commodities[$key]=[["sku"=>$order->sku,"alternate_sku1"=>$order->alternate_sku1,
                 "descr_c"=>$order->descr_c,"qtyordered"=>$order->qtyordered,"lotnum"=>$order->lotnum,"checktime"=>$order->checktime,"orderdetailcodename"=>$order->orderdetailcodename]];
             $orderNos .= ",'".$order->orderno."'";
+            if ($count % 500 == 0){
+                $orderNos .= ")";
+                $allocations = DB::connection("oracle")->select(DB::raw("SELECT DROPID,ORDERNO FROM ACT_ALLOCATION_DETAILS WHERE orderno IN ".$orderNos." GROUP BY (DROPID,ORDERNO)"));
+                foreach ($allocations as $allocation){
+                    if (isset($picktotraceids[$allocation->orderno])) $picktotraceids[$allocation->orderno][] = $allocation->dropid;
+                    else $picktotraceids[$allocation->orderno] = [$allocation->dropid];
+                }
+                $orderNos = "(''";
+            }
+            $count++;
         }
-        $orderNos .= ")";
-        $allocations = DB::connection("oracle")->select(DB::raw("SELECT DROPID,ORDERNO FROM ACT_ALLOCATION_DETAILS WHERE orderno IN ".$orderNos." GROUP BY (DROPID,ORDERNO)"));
-        foreach ($allocations as $allocation){
-            if (isset($picktotraceids[$allocation->orderno])) $picktotraceids[$allocation->orderno][] = $allocation->dropid;
-            else $picktotraceids[$allocation->orderno] = [$allocation->dropid];
+        if ($orderNos !== "(''"){
+            $orderNos .= ")";
+            $allocations = DB::connection("oracle")->select(DB::raw("SELECT DROPID,ORDERNO FROM ACT_ALLOCATION_DETAILS WHERE orderno IN ".$orderNos." GROUP BY (DROPID,ORDERNO)"));
+            foreach ($allocations as $allocation){
+                if (isset($picktotraceids[$allocation->orderno])) $picktotraceids[$allocation->orderno][] = $allocation->dropid;
+                else $picktotraceids[$allocation->orderno] = [$allocation->dropid];
+            }
         }
         $picktotraceids=json_encode($picktotraceids);
         $orders=array_values($orders);
@@ -1023,7 +1041,7 @@ class OrderService
 
         /** @var OwnerPriceOperationService $service */
         $service = app("OwnerPriceOperationService");
-        $work_fee = $service->matchRule($object,$mapping,$order->owner_id,"出库");
+        $work_fee = $service->matching($object,$mapping,$order->owner_id,"出库");
         if ($work_fee < 0)$work_fee = null;
 
        if (app("OwnerFeeDetailService")->create([

+ 3 - 0
app/Services/OrderTrackingOwnerService.php

@@ -3,9 +3,12 @@
 namespace App\Services;
 
 use App\Owner;
+use App\Traits\ServiceAppAop;
+
 
 class OrderTrackingOwnerService
 {
+    use ServiceAppAop;
 
     public function getTrackingOrderOwner()
     {

+ 3 - 0
app/Services/OrderTrackingService.php

@@ -13,9 +13,12 @@ use App\Services\common\QueryService;
 use Illuminate\Support\Carbon;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
+use App\Traits\ServiceAppAop;
+
 
 class OrderTrackingService
 {
+    use ServiceAppAop;
     public function insert($params){
         return OrderTracking::query()->insert($params);
     }

+ 6 - 3
app/Services/OwnerAreaReportService.php

@@ -1,15 +1,18 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\OwnerAreaReport;
 use App\OwnerBillReport;
 use App\Services\common\QueryService;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 Class OwnerAreaReportService
 {
+    use ServiceAppAop;
     /**
      * @param Builder $builder
      * @param array $params
@@ -93,4 +96,4 @@ Class OwnerAreaReportService
         return $query->update(["status"=>"已完成"]);
     }
 
-}
+}

+ 6 - 3
app/Services/OwnerBillReportService.php

@@ -1,13 +1,16 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\OwnerBillReport;
 use App\Services\common\QueryService;
 use Illuminate\Database\Eloquent\Builder;
+use App\Traits\ServiceAppAop;
+
 
 Class OwnerBillReportService
 {
+    use ServiceAppAop;
 
     /**
      * @param Builder $builder
@@ -64,4 +67,4 @@ Class OwnerBillReportService
         }
         return $query->first();
     }
-}
+}

+ 6 - 3
app/Services/OwnerFeeDetailService.php

@@ -1,13 +1,16 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\OwnerFeeDetail;
 use App\Services\common\QueryService;
 use Illuminate\Database\Eloquent\Builder;
+use App\Traits\ServiceAppAop;
+
 
 Class OwnerFeeDetailService
 {
+    use ServiceAppAop;
     /**
      * @param Builder $builder
      * @param array $params
@@ -75,4 +78,4 @@ Class OwnerFeeDetailService
         return $detail->update($values);
     }
 
-}
+}

+ 7 - 4
app/Services/OwnerPriceDirectLogisticService.php

@@ -1,15 +1,18 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\Owner;
 use App\OwnerPriceDirectLogistic;
 use App\OwnerPriceDirectLogisticCar;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 Class OwnerPriceDirectLogisticService
-{ 
+{
+    use ServiceAppAop;
     public function paginate($id = null)
     {
         $query = OwnerPriceDirectLogistic::query()->with("owners");
@@ -108,4 +111,4 @@ Class OwnerPriceDirectLogisticService
         $amount -= $model->base_km;
         return ($amount*$model->details[0]->additional_fee)+$initialMoney;
     }
-}
+}

+ 25 - 9
app/Services/OwnerPriceExpressService.php

@@ -1,6 +1,6 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\Logistic;
 use App\Owner;
@@ -8,9 +8,12 @@ use App\OwnerPriceExpress;
 use App\OwnerPriceExpressProvince;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 Class OwnerPriceExpressService
-{ 
+{
+    use ServiceAppAop;
 
     public function paginate($id = null)
     {
@@ -58,17 +61,30 @@ Class OwnerPriceExpressService
         return OwnerPriceExpressProvince::destroy($id);
     }
 
-    public function getExistOwnerName($owner_id, $id=null) :array
+    public function getExistOwnerName($owner_id, $logistic_id, $id=null, $type = 'ownerPriceExpresses') :array
     {
         if (!is_array($owner_id))$owner_id = [$owner_id];
-        $owners = Owner::query()->withCount(["ownerPriceExpresses"=>function($query)use($id){
+        if (!is_array($logistic_id))$logistic_id = [$logistic_id];
+        $owners = Owner::query()->with([$type=>function($query)use($id){
+            /** @var Builder $query */
             if ($id)$query->where("id","!=",$id);
+            $query->with(["logistics"]);
         }])->whereIn("id",$owner_id)->get();
-        $arr = [];
+        $result = [];
         foreach ($owners as $owner){
-            if ($owner->owner_price_expresses_count > 0)$arr[] = $owner->name;
+            $arr = [];
+            if ($owner->ownerPriceExpresses){
+                foreach ($owner->ownerPriceExpresses as $express){
+                    if ($express->logistics){
+                        foreach ($express->logistics as $logistic){
+                            if (array_search($logistic->id,$logistic_id) !== false)$arr[] = $logistic->name;
+                        }
+                    }
+                }
+            }
+            if (count($arr)>0)$result[] = "“".$owner->name."”已绑定:".implode(",",$arr);
         }
-        return $arr;
+        return $result;
     }
 
     public function getExistLogisticName($logistic_id, $id=null):array
@@ -132,4 +148,4 @@ Class OwnerPriceExpressService
         $weight -= $model->initial_weight;
         return (ceil($weight/$model->additional_weight)*$model->details[0]->additional_weight_price)+$initialMoney;
     }
-}
+}

+ 13 - 6
app/Services/OwnerPriceLogisticService.php

@@ -1,13 +1,16 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\OwnerPriceLogistic;
 use App\OwnerPriceLogisticDetail;
 use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
 
 Class OwnerPriceLogisticService
-{ 
+{
+    use ServiceAppAop;
     public function paginate($id = null)
     {
         $query = OwnerPriceLogistic::query()->with(["owners","logistics","unit","otherUnit"]);
@@ -36,8 +39,12 @@ Class OwnerPriceLogisticService
 
     public function destroy($id)
     {
-        OwnerPriceLogistic::destroy($id);
-        OwnerPriceLogisticDetail::query()->where("owner_price_logistic_id",$id)->delete();
+        DB::transaction(function ()use($id){
+            DB::table("owner_price_logistic_logistic")->where("owner_price_logistic_id",$id)->delete();
+            DB::table("owner_price_logistic_owner")->where("owner_price_logistic_id",$id)->delete();
+            OwnerPriceLogisticDetail::query()->where("owner_price_logistic_id",$id)->delete();
+            OwnerPriceLogistic::destroy($id);
+        });
     }
 
     public function updateDetail(array $params, array $values)
@@ -141,4 +148,4 @@ Class OwnerPriceLogisticService
         if ($money < $detail->initial_fee)$money = $detail->initial_fee; //小于起始计费以起始计费为准
         return $money+$detail->delivery_fee+$fee;
     }
-}
+}

+ 27 - 14
app/Services/OwnerOutStorageRuleService.php → app/Services/OwnerPriceOperationItemService.php

@@ -1,19 +1,22 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
-use App\OwnerOutStorageRule;
+use App\OwnerPriceOperationItem;
+use App\Traits\ServiceAppAop;
 
-Class OwnerOutStorageRuleService
-{ 
+
+Class OwnerPriceOperationItemService
+{
+    use ServiceAppAop;
     public function get(array $params, array $withs = [], $isTranslateFeature = false, array $translateColumn = [])
     {
         if ($isTranslateFeature){
             $features = app("FeatureService")->getMapArray();
-            OwnerOutStorageRule::$features = $features;
-            OwnerOutStorageRule::$columnMapping = $translateColumn;
+            OwnerPriceOperationItem::$features = $features;
+            OwnerPriceOperationItem::$columnMapping = $translateColumn;
         }
-        $rule = OwnerOutStorageRule::query();
+        $rule = OwnerPriceOperationItem::query();
         if ($withs)$rule->with($withs);
         foreach ($params as $column=>$param){
             $rule->where($column,$param);
@@ -23,7 +26,7 @@ Class OwnerOutStorageRuleService
 
     public function update(array $params, array $values)
     {
-        $query = OwnerOutStorageRule::query();
+        $query = OwnerPriceOperationItem::query();
         foreach ($params as $column=>$param){
             $query->where($column,$param);
         }
@@ -32,26 +35,36 @@ Class OwnerOutStorageRuleService
 
     public function create(array $params)
     {
-        return OwnerOutStorageRule::query()->create($params);
+        return OwnerPriceOperationItem::query()->create($params);
     }
 
-    public function findUpdate(OwnerOutStorageRule $rule, array $values)
+    public function findUpdate(OwnerPriceOperationItem $rule, array $values)
     {
         return $rule->update($values);
     }
 
     public function find($id)
     {
-        return OwnerOutStorageRule::query()->find($id);
+        return OwnerPriceOperationItem::query()->find($id);
+    }
+
+    public function insert($values)
+    {
+        return OwnerPriceOperationItem::query()->insert($values);
+    }
+
+    public function destroy($id)
+    {
+        return OwnerPriceOperationItem::destroy($id);
     }
 
 
     public function isExist(array $params)
     {
-        $query = OwnerOutStorageRule::query();
+        $query = OwnerPriceOperationItem::query();
         foreach ($params as $column=>$param){
             $query->where($column,$param);
         }
         return $query->count();
     }
-}
+}

+ 46 - 45
app/Services/OwnerPriceOperationService.php

@@ -1,18 +1,20 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
-use App\OwnerInStorageRule;
-use App\OwnerOutStorageRule;
 use App\OwnerPriceOperation;
+use App\OwnerPriceOperationItem;
 use App\Services\common\QueryService;
 use App\Unit;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 Class OwnerPriceOperationService
 {
+    use ServiceAppAop;
     /**
      * @param Builder $builder
      * @param array $params
@@ -47,8 +49,7 @@ Class OwnerPriceOperationService
 
     public function destroy($id)
     {
-        OwnerOutStorageRule::query()->where("owner_price_operation_id",$id)->delete();
-        OwnerInStorageRule::query()->where("owner_price_operation_id",$id)->delete();
+        OwnerPriceOperationItem::query()->where("owner_price_operation_id",$id)->delete();
         DB::table("owner_price_operation_owner")->where("owner_price_operation_id",$id)->delete();
         return OwnerPriceOperation::destroy($id);
     }
@@ -62,31 +63,20 @@ Class OwnerPriceOperationService
         return OwnerPriceOperation::query()->create($params);
     }
 
-    public function insertRule(array $params, $type = '出库')
+    public function insertItem(array $params)
     {
-        if ($type == '出库')OwnerOutStorageRule::query()->insert($params);
-        else OwnerInStorageRule::query()->insert($params);
+        OwnerPriceOperationItem::query()->insert($params);
     }
 
-    public function find($id, $isGetRule = false, $withs = [])
+    public function find($id, $withs = [])
     {
         $query = OwnerPriceOperation::query()->with($withs)->find($id);
-        if ($isGetRule){
-            if ($query->operation_type == '入库'){
-                $query->load("ownerInStorageRule");
-                $query->rules = $query->ownerInStorageRule ? json_encode([$query->ownerInStorageRule]) : null;
-            }else{
-                $query->load("ownerOutStorageRules");
-                $query->rules = json_encode($query->ownerOutStorageRules);
-            }
-        }
         return $query;
     }
 
-    public function destroyRule($id, $type)
+    public function destroyItem($id)
     {
-        if ($type=="入库")OwnerInStorageRule::query()->where("owner_price_operation_id",$id)->delete();
-        else OwnerOutStorageRule::query()->where("owner_price_operation_id",$id)->delete();
+        return OwnerPriceOperationItem::query()->where("owner_price_operation_id",$id)->delete();
     }
 
     public function findUpdate(OwnerPriceOperation $model, array $params)
@@ -106,27 +96,27 @@ Class OwnerPriceOperationService
      * @param string $type
      * @return double
      * 错误代码: -1:无匹配对象 -2:无计费模型 -3:未知单位 -4:sku为空 -5:货主未找到 -6:无箱规 -7:未匹配到计费模型
+     *
+     * 一. 2020-10-10 zzd
+     * 二. 2021-01-08 zzd
      */
-    public function matchRule($matchObject, $columnMapping, $owner_id, $type = '出库')
+    public function matching($matchObject, $columnMapping, $owner_id, $type = '出库')
     {
         $unitModels = Unit::query()->whereIn("name",["件","箱","单"])->get();
         $units = [];
         foreach ($unitModels as $unitModel)$units[$unitModel->id] = $unitModel->name;
 
-        $withs = $type=='出库' ? ['ownerOutStorageRules'=>function($query){
+        $rules = OwnerPriceOperation::query()->with(["items"=>function($query){
             /** @var Builder $query */
             $query->orderByRaw("CASE strategy  WHEN '起步' THEN 1 WHEN '默认' THEN 2 WHEN '特征' THEN 3 END DESC,priority DESC");
-        }] : ['ownerInStorageRule'] ;
-        $rules = OwnerPriceOperation::query()->with($withs)
-            ->where("operation_type",$type)
-            ->whereHas("ownerPriceOperationOwners",function ($query)use($owner_id){
+        }])->where("operation_type",$type)->whereHas("ownerPriceOperationOwners",function ($query)use($owner_id){
                 /** @var Builder $query */
                 $query->where("id",$owner_id);
-            })
-            ->orderByRaw("strategy desc,priority desc")->get(); //货主下的全部规则
+        })->orderByRaw("strategy desc,priority desc")->get(); //货主下的全部规则
+
         if (!$rules)return -2;
 
-        if ($type == '入库'){
+        /*if ($type == '入库'){
             $amountColumn = $columnMapping["amount"] ?? "amount";
             $packageColumn = $columnMapping["packages"] ?? "packages";
             $packages = $matchObject[$packageColumn] ?? false;
@@ -137,12 +127,12 @@ Class OwnerPriceOperationService
             if (!$amount)return -1;
             foreach ($rules as $rule){
                 $sum = $amount;
-                if (!$rule->ownerInStorageRule)continue;
+                if (!$rule->in)continue;
                 if ($rule->strategy == '特征'){
                     $bool = app("FeatureService")->matchFeature($rule->feature,$columnMapping,$matchObject);
                     if ($bool === true){
-                        if (!isset($units[$rule->ownerInStorageRule->unit_id])) return -3;
-                        if ($units[$rule->ownerInStorageRule->unit_id] == '箱'){ //为箱时同步商品寻找箱规
+                        if (!isset($units[$rule->in->unit_id])) return -3;
+                        if ($units[$rule->in->unit_id] == '箱'){ //为箱时同步商品寻找箱规
                             $sumTemp = 0;
                             $packageColumn = $columnMapping["packages"] ?? "packages";
                             foreach ($matchObject[$packageColumn] as $commodity){
@@ -151,12 +141,12 @@ Class OwnerPriceOperationService
                             $sum = $sumTemp;
                             if ($sum<0)return $sum;
                         }
-                        if ($units[$rule->ownerInStorageRule->unit_id] == '单')$sum = 1; //为单时数量设为1;
-                        return ceil($sum/$rule->ownerInStorageRule->amount)*$rule->ownerInStorageRule->unit_price;
+                        if ($units[$rule->in->unit_id] == '单')$sum = 1; //为单时数量设为1;
+                        return ceil($sum/$rule->in->amount)*$rule->in->unit_price;
                     };
                 }else{
-                    if (!isset($units[$rule->ownerInStorageRule->unit_id])) return -3;
-                    if ($units[$rule->ownerInStorageRule->unit_id] == '箱'){ //为箱时同步商品寻找箱规
+                    if (!isset($units[$rule->in->unit_id])) return -3;
+                    if ($units[$rule->in->unit_id] == '箱'){ //为箱时同步商品寻找箱规
                         $sumTemp = 0;
                         $packageColumn = $columnMapping["packages"] ?? "packages";
                         foreach ($matchObject[$packageColumn] as $commodity){
@@ -165,23 +155,23 @@ Class OwnerPriceOperationService
                         $sum = $sumTemp;
                         if ($sum<0)return $sum;
                     }
-                    if ($units[$rule->ownerInStorageRule->unit_id] == '单')$sum = 1; //为单时数量设为1;
-                    return ceil($sum/$rule->ownerInStorageRule->amount)*$rule->ownerInStorageRule->unit_price;
+                    if ($units[$rule->in->unit_id] == '单')$sum = 1; //为单时数量设为1;
+                    return ceil($sum/$rule->in->amount)*$rule->in->unit_price;
                 };
             }
             return -7;
-        }
+        }*/
         //出库
         foreach ($rules as $rule){
             if (!$rule->ownerOutStorageRules)continue;
             if ($rule->strategy == '特征'){
                 $bool = app("FeatureService")->matchFeature($rule->feature,$columnMapping,$matchObject);//匹配特征
                 if ($bool === true){
-                    $money = $this->matchOutStorage($rule->ownerOutStorageRules,$columnMapping,$matchObject,$units,$owner_id);
+                    $money = $this->matchItem($rule->ownerOutStorageRules,$columnMapping,$matchObject,$units,$owner_id,$type=='入库' ? true : false);
                     if ($money>0)return $money;
                 };
             }else{
-                $money = $this->matchOutStorage($rule->ownerOutStorageRules,$columnMapping,$matchObject,$units,$owner_id);
+                $money = $this->matchItem($rule->ownerOutStorageRules,$columnMapping,$matchObject,$units,$owner_id,$type=='入库' ? true : false);
                 if ($money>0)return $money;
             };
         }
@@ -195,7 +185,7 @@ Class OwnerPriceOperationService
         return ceil($amount/$pack);
     }
 
-    private function matchOutStorage($rules, $columnMapping, $matchObject, $units, $owner_id)
+    private function matchItem($rules, $columnMapping, $matchObject, $units, $owner_id, $isIn)
     {
         $amountColumn = $columnMapping["amount"] ?? "amount";
         $packageColumn = $columnMapping["packages"] ?? "packages";
@@ -207,6 +197,7 @@ Class OwnerPriceOperationService
         foreach ($rules as $rule){
             switch ($rule->strategy){
                 case "特征":
+                    $inMoney = 0;
                     foreach ($packages as &$package){
                         if ($package["price"] ?? false)continue;
                         if (!app("FeatureService")->matchFeature($rule->feature,["商品名称"=>$commodityColumn],["commodity"=>$package[$commodityColumn] ?? ''])) continue;
@@ -228,9 +219,14 @@ Class OwnerPriceOperationService
                             if ($amount<0)return $amount;
                             $package[$amountColumn] = $amount;
                         }
+                        $inMoney += $package[$amountColumn] * $package["price"];
+                    }
+                    if ($isIn && $inMoney !== 0){
+                        return $inMoney;
                     }
                     break;
                 case "默认":
+                    $inMoney = 0;
                     foreach ($packages as &$package){
                         if ($package["price"] ?? false)continue; //校验是否已匹配到
                         if (!$unitName)$unitName = $units[$rule->unit_id]; //校验单位是否一致
@@ -251,9 +247,14 @@ Class OwnerPriceOperationService
                             if ($amount<0)return $amount;
                             $package[$amountColumn] = $amount;
                         }
+                        $inMoney += $package[$amountColumn] * $package["price"];
+                    }
+                    if ($isIn && $inMoney !== 0){
+                        return $inMoney;
                     }
                     break;
                 default:
+                    if ($isIn)continue;
                     if ($unitName && $unitName != $units[$rule->unit_id])return -3; //校验单位是否一致
 
                     $money = $rule->amount * $rule->unit_price;
@@ -293,4 +294,4 @@ Class OwnerPriceOperationService
             $this->settingCount($packages,$amountColumn,$startNumber);
         }
     }
-}
+}

+ 6 - 3
app/Services/OwnerReportService.php

@@ -1,13 +1,16 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\OwnerReport;
 use App\Services\common\QueryService;
 use Illuminate\Database\Eloquent\Builder;
+use App\Traits\ServiceAppAop;
+
 
 Class OwnerReportService
 {
+    use ServiceAppAop;
     /**
      * @param Builder $builder
      * @param array $params
@@ -59,4 +62,4 @@ Class OwnerReportService
         return $this->query($query,$params)->paginate($params["paginate"] ?? 50);
     }
 
-}
+}

+ 7 - 4
app/Services/OwnerService.php

@@ -11,13 +11,16 @@ use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 Class OwnerService
 {
+    use ServiceAppAop;
     /** @var CacheService $cacheService */
     private $cacheService;
     function __construct(){
-        $this->cacheService=app('CacheService');
+        $this->instant($this->cacheService,'CacheService');
     }
     /*
      * array | string $column
@@ -90,9 +93,9 @@ Class OwnerService
         },config('cache.expirations.rarelyChange'));
     }
 
-    public function find($id)
+    public function find($id, $with = [])
     {
-        return Owner::query()->find($id);
+        return Owner::query()->with($with)->find($id);
     }
 
     public function update(Owner $owner, array $values, array $related = [])
@@ -294,7 +297,7 @@ sql
             if (!$owner)return false;
         }
         $sql = DB::raw(<<<sql
-    update BAS_CUSTOMER set ACTIVE_FLAG = ?,EDITTIME = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),EDITWHO = ? where CUSTOMERID = ? and CUSTOMER_TYPE = ? 
+    update BAS_CUSTOMER set ACTIVE_FLAG = ?,EDITTIME = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),EDITWHO = ? where CUSTOMERID = ? and CUSTOMER_TYPE = ?
 sql
         );
         $date = date('Y-m-d H:i:s');

+ 9 - 4
app/Services/OwnerStoragePriceModelService.php

@@ -1,12 +1,16 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\OwnerReport;
 use App\OwnerStoragePriceModel;
+use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 Class OwnerStoragePriceModelService
-{ 
+{
+    use ServiceAppAop;
     public function getSelection(array $columns = ["counting_type","using_type"], array $withs = [])
     {
         return OwnerStoragePriceModel::query()->select($columns)->with($withs)->get();
@@ -39,6 +43,7 @@ Class OwnerStoragePriceModelService
     }
     public function destroy($id)
     {
+        DB::delete(DB::raw("DELETE FROM owner_storage_price_model_owner WHERE owner_storage_price_model_id = ?"),[$id]);
         return OwnerStoragePriceModel::destroy($id);
     }
 
@@ -63,4 +68,4 @@ Class OwnerStoragePriceModelService
         }
         return $money;
     }
-}
+}

+ 8 - 1
app/Services/PackageService.php

@@ -4,15 +4,22 @@ namespace App\Services;
 
 use App\OrderPackage;
 use App\Services\common\QueryService;
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 
 const TABLE = "order_packages.";
+use App\Traits\ServiceAppAop;
+
 
 Class PackageService
 {
+    use ServiceAppAop;
     private function conditionQuery($params){
         $packages = OrderPackage::query()->with(['order'=>function($query){
-            $query->with('owner','logistic');
+            /** @var Builder $query */
+            $ownerIds=app('UserService')->getPermittingOwnerIds(Auth::user());
+            $query->with('owner','logistic')->whereIn("owner_id",$ownerIds ?? []);
         },'paperBox','measuringMachine'])->orderBy(TABLE.'id','DESC');
         if ($params['owner_id'] ?? false){
             $owner_id = explode(',',$params['owner_id']);

+ 3 - 0
app/Services/PackageStatisticsService.php

@@ -7,9 +7,12 @@ use App\Services\common\QueryService;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
+use App\Traits\ServiceAppAop;
+
 
 Class PackageStatisticsService
 {
+    use ServiceAppAop;
     /**
      * @param array $params
      * @return Builder

+ 6 - 3
app/Services/ProcessMethodService.php

@@ -1,12 +1,15 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 
 use App\ProcessMethod;
+use App\Traits\ServiceAppAop;
+
 
 Class ProcessMethodService
 {
+    use ServiceAppAop;
     public function getSelection($column = ['id','name']){
         return ProcessMethod::query()->select($column)->get();
     }
@@ -41,4 +44,4 @@ Class ProcessMethodService
         return ProcessMethod::destroy($id);
     }
 
-}
+}

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio