Explorar o código

Merge branch 'master' into Haozi

# Conflicts:
#	app/Providers/AppServiceProvider.php
#	app/Services/InventoryCompareService.php
#	app/Services/WarehouseService.php
#	public/js/app.js
haozi %!s(int64=5) %!d(string=hai) anos
pai
achega
8cfca76261
Modificáronse 100 ficheiros con 2284 adicións e 1490 borrados
  1. 1 1
      app/Console/Commands/InventoryDailyLoggingOwner.php
  2. 1 1
      app/Console/Commands/WASSyncWMSOrderInformation.php
  3. 3 3
      app/Http/Controllers/CommodityController.php
  4. 88 0
      app/Http/Controllers/CustomerBaseController.php
  5. 12 0
      app/Http/Controllers/CustomerController.php
  6. 88 0
      app/Http/Controllers/FeatureController.php
  7. 11 8
      app/Http/Controllers/InventoryController.php
  8. 4 5
      app/Http/Controllers/LogController.php
  9. 10 10
      app/Http/Controllers/OrderController.php
  10. 28 11
      app/Http/Controllers/OrderIssueController.php
  11. 4 4
      app/Http/Controllers/OrderIssuePerformanceController.php
  12. 1 1
      app/Http/Controllers/OrderTrackingController.php
  13. 1 1
      app/Http/Controllers/OrderTrackingOwnerController.php
  14. 1 1
      app/Http/Controllers/OwnerController.php
  15. 10 9
      app/Http/Controllers/PackageController.php
  16. 51 0
      app/Http/Controllers/PriceModelController.php
  17. 3 3
      app/Http/Controllers/ProcessController.php
  18. 88 0
      app/Http/Controllers/ProcessMethodController.php
  19. 2 2
      app/Http/Controllers/ProcessStatisticController.php
  20. 6 3
      app/Http/Controllers/RejectedBillController.php
  21. 2 2
      app/Http/Controllers/RejectedBillItemController.php
  22. 22 11
      app/Http/Controllers/RejectedController.php
  23. 49 37
      app/Http/Controllers/StoreCheckingReceiveController.php
  24. 10 9
      app/Http/Controllers/StoreController.php
  25. 81 20
      app/Http/Controllers/TestController.php
  26. 88 0
      app/Http/Controllers/UserOwnerGroupController.php
  27. 1 1
      app/Http/Controllers/WaybillController.php
  28. 2 2
      app/Http/Controllers/WaybillFinancialSnapshotsController.php
  29. 6 6
      app/Http/Controllers/WaybillPriceModelsController.php
  30. 6 6
      app/Http/Controllers/WeighExceptedController.php
  31. 2 2
      app/Http/Controllers/api/thirdPart/flux/ProcessController.php
  32. 105 346
      app/Http/Controllers/api/thirdPart/flux/StoreController.php
  33. 284 0
      app/Http/Controllers/api/thirdPart/goodscan/PackageController.php
  34. 4 4
      app/Http/Controllers/api/thirdPart/weight/PackageController.php
  35. 1 1
      app/Http/Middleware/DecodingRequest.php
  36. 2 2
      app/Imports/OrderIssueImport.php
  37. 7 6
      app/Imports/StoreCheckingReceiveImport.php
  38. 0 2
      app/MeasuringMachine.php
  39. 19 6
      app/Order.php
  40. 2 1
      app/OrderIssue.php
  41. 2 1
      app/OrderPackage.php
  42. 1 1
      app/Owner.php
  43. 1 1
      app/Package.php
  44. 1 1
      app/Process.php
  45. 52 18
      app/Providers/AppServiceProvider.php
  46. 15 3
      app/Providers/AuthServiceProvider.php
  47. 4 0
      app/Providers/RouteServiceProvider.php
  48. 3 7
      app/RejectedBill.php
  49. 1 1
      app/RejectedBillItem.php
  50. 40 0
      app/Services/AuthorityService.php
  51. 21 0
      app/Services/CacheService.php
  52. 3 3
      app/Services/CommodityService.php
  53. 1 1
      app/Services/InventoryAccountService.php
  54. 2 2
      app/Services/InventoryCompareService.php
  55. 1 1
      app/Services/LogisticService.php
  56. 17 0
      app/Services/OracleBasCustomerService.php
  57. 17 8
      app/Services/OrderIssueService.php
  58. 2 2
      app/Services/OrderIssueWorkLoadService.php
  59. 31 165
      app/Services/OrderPackageCommoditiesService.php
  60. 55 55
      app/Services/OrderPackageService.php
  61. 46 50
      app/Services/OrderService.php
  62. 42 14
      app/Services/OrderTrackingService.php
  63. 10 3
      app/Services/OwnerService.php
  64. 1 1
      app/Services/PackageService.php
  65. 4 4
      app/Services/PackageStatisticsService.php
  66. 16 15
      app/Services/RejectedBillService.php
  67. 2 2
      app/Services/RejectedService.php
  68. 10 53
      app/Services/ShopService.php
  69. 32 0
      app/Services/UserService.php
  70. 41 0
      app/Services/WarehouseService.php
  71. 6 0
      app/Shop.php
  72. 9 8
      app/User.php
  73. 2 2
      app/Waybill.php
  74. 182 185
      composer.lock
  75. 3 0
      config/cache.php
  76. 1 0
      config/stores.php
  77. 21 1
      database/migrations/2020_10_20_134819_create_customers_table.php
  78. 12 3
      database/migrations/2020_10_26_165012_create_owner_fee_details_table.php
  79. 37 0
      database/migrations/2020_10_27_103741_create_owner_bill_reports_table.php
  80. 31 0
      database/migrations/2020_10_27_113358_add_order_issue_authority.php
  81. 38 0
      database/migrations/2020_10_27_142647_create_owner_storage_price_model_table.php
  82. 32 0
      database/migrations/2020_10_27_162056_add_column_unit_id_table_process_methods.php
  83. 36 0
      database/migrations/2020_10_27_175452_create_owner_price_operations_table.php
  84. 36 0
      database/migrations/2020_10_28_105613_create_owner_out_storage_rules_table.php
  85. 33 0
      database/migrations/2020_10_28_105639_create_owner_in_storage_rules_table.php
  86. 34 0
      database/migrations/2020_10_28_110936_create_features_table.php
  87. 31 0
      database/migrations/2020_10_28_143717_add_order_issue_colnum_imported_status.php
  88. 32 0
      database/migrations/2020_10_29_092202_add_order_table_column_warehouse_id.php
  89. 0 1
      phpunit-Current.bat
  90. 0 1
      phpunit-Inventory.bat
  91. 0 1
      phpunit-OrderIssue.bat
  92. 0 1
      phpunit-Unit.bat
  93. 1 0
      phpunit.bat
  94. 3 6
      phpunit.xml
  95. 0 329
      public/css/app.css
  96. 4 4
      public/js/app.js
  97. 4 4
      public/t.php
  98. 6 5
      resources/js/queryForm/queryForm.js
  99. 6 0
      resources/sass/layout.scss
  100. 104 0
      resources/views/customer/finance/billConfirmation.blade.php

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

@@ -126,7 +126,7 @@ class InventoryDailyLoggingOwner extends Command
 
             $depository = null;
             if ($inventoryDailyLog['depository_code']){
-                $depository = app('depositoryService')->firstOrCreate(["code"=>$inventoryDailyLog['depository_code']],[
+                $depository = app('DepositoryService')->firstOrCreate(["code"=>$inventoryDailyLog['depository_code']],[
                     "name"=>$inventoryDailyLog['depository_code'],
                     "code"=>$inventoryDailyLog['depository_code'],
                 ]);

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

@@ -48,7 +48,7 @@ class WASSyncWMSOrderInformation extends Command
     public function WasSyncWmsOrder(){
 
         /** @var OrderTrackingService $orderTrackingService */
-        $orderTrackingService  = app('orderTrackingService');
+        $orderTrackingService  = app('OrderTrackingService');
 
         $dataInterval = intval(data_get(config('sync'), 'order_tracking_import.interval')) * 60 + 5;
 

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

@@ -184,7 +184,7 @@ class CommodityController extends Controller
         if ($barcode) $params['alternate_sku1'] = $barcode;
 
         /** @var OracleBasSkuService $oracleBasSkuService */
-        $oracleBasSkuService = app('oracleBasSkuService');
+        $oracleBasSkuService = app('OracleBasSkuService');
         $amount = 1000;
         $sum = $oracleBasSkuService->count($params);
         $number = ceil($sum/$amount);
@@ -210,9 +210,9 @@ class CommodityController extends Controller
             }
         }
         /** @var CommodityService $commodityService */
-        $commodityService = app('commodityService');
+        $commodityService = app('CommodityService');
         /** @var CommodityBarcodeService $commodityBarcodeService */
-        $commodityBarcodeService = app('commodityBarcodeService');
+        $commodityBarcodeService = app('CommodityBarcodeService');
 
         $commodities = $commodityService->getOwnerCommodities(['owner_id' => $owner_id, 'sku'=>$skus]);
         $updateCommodities = [];

+ 88 - 0
app/Http/Controllers/CustomerBaseController.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Support\Facades\Gate;
+
+class CustomerBaseController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return Response
+     */
+    public function index()
+    {
+        if(!Gate::allows('客户-查询')){ return redirect('denied');  }
+        return response()->view('maintenance.customer.index');
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return Response
+     */
+    public function create()
+    {
+        if(!Gate::allows('客户-录入')){ return redirect('denied');  }
+        return response()->view('maintenance.customer.create');
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show($id)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function edit($id)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, $id)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($id)
+    {
+        //
+    }
+}

+ 12 - 0
app/Http/Controllers/CustomerController.php

@@ -36,4 +36,16 @@ class CustomerController extends Controller
         if(!Gate::allows('客户管理-项目-面积')){ return redirect('denied');  }
         return response()->view('customer.project.area');
     }
+
+    public function financeInstantBill()
+    {
+        if(!Gate::allows('客户管理-财务-即时账单')){ return redirect('denied');  }
+        return response()->view('customer.finance.instantBill');
+    }
+
+    public function financeBillConfirmation()
+    {
+        if(!Gate::allows('客户管理-财务-账单确认')){ return redirect('denied');  }
+        return response()->view('customer.finance.billConfirmation');
+    }
 }

+ 88 - 0
app/Http/Controllers/FeatureController.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Support\Facades\Gate;
+
+class FeatureController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return Response
+     */
+    public function index()
+    {
+        if(!Gate::allows('特征-查询')){ return redirect('denied');  }
+        return response()->view("maintenance.feature.index");
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return Response
+     */
+    public function create()
+    {
+        if(!Gate::allows('特征-录入')){ return redirect('denied');  }
+        return response()->view("maintenance.feature.create");
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show($id)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function edit($id)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, $id)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($id)
+    {
+        //
+    }
+}

+ 11 - 8
app/Http/Controllers/InventoryController.php

@@ -18,7 +18,7 @@ class InventoryController extends Controller
     public function __construct()
     {
         app()->singleton('inventoryService',InventoryService::class);
-        app()->singleton('allInventoryService',AllInventoryService::class);
+        app()->singleton('AllInventoryService',AllInventoryService::class);
 
     }
     //动库报表
@@ -35,7 +35,10 @@ class InventoryController extends Controller
     //全部库存
     public function allInventory(Request $request){
         if(!Gate::allows("库存管理-库存")){ return redirect(url('/'));  }
-        $oracleActTransactingLogs=app('allInventoryService')->paginate($request->input());
+
+        /** @var AllInventoryService $service */
+        $service = app('AllInventoryService');
+        $oracleActTransactingLogs= $service->paginate($request->input());
         $oracleActTransactingLogs=json_encode($oracleActTransactingLogs);
 //        $owners=OracleBasCustomer::query()->select('customerid','descr_c')->where('customer_type','OW')->where('active_flag','Y')->get();
         $owners=Owner::filterAuthorities()->select(['code', 'name'])->get();
@@ -66,7 +69,7 @@ class InventoryController extends Controller
         if ($request->checkAllSign){
             $params = $request->input();
             unset($params['checkAllSign']);
-            $sql=app('allInventoryService')->getSql($request->input());
+            $sql=app('AllInventoryService')->getSql($request->input());
             $post = Http::post(config('go.export.url'),['type'=>'allInventory','sql'=>$sql]);
         }else{
             $post = Http::post(config('go.export.url'),['type'=>'allInventory','data'=>$request->data]);
@@ -86,7 +89,7 @@ class InventoryController extends Controller
     function dailyLog(Request $request,OwnerService $ownerService){
         if (!Gate::allows('库存管理-库存体积')){return redirect(url('/')); }
         /** @var InventoryDailyLogService*/
-        $inventoryDailyLogs = app('inventoryDailyLogService')->paginate($request->input());
+        $inventoryDailyLogs = app('InventoryDailyLogService')->paginate($request->input());
         $owners = $ownerService->getSelection();
         $param = $request->input();
         return view('inventory.statement.dailyLog',compact('inventoryDailyLogs','owners','param'));
@@ -94,7 +97,7 @@ class InventoryController extends Controller
 
     //获取记录监听货主
     function getLoggingOwner(){
-        $loggingOwners = app('inventoryDailyLogService')->getInventoryDailyLoggingOwner('owner_id');
+        $loggingOwners = app('InventoryDailyLogService')->getInventoryDailyLoggingOwner('owner_id');
         return array_column($loggingOwners->toArray(),'owner_id');
     }
     //添加记录监听货主
@@ -102,7 +105,7 @@ class InventoryController extends Controller
         if (!Gate::allows('库存管理-库存体积-管理监听货主')){return redirect(url('/')); }
         $owner_id = $request->owner_id;
         if (!$owner_id || !is_numeric($owner_id))return ['success'=>false,'data'=>'传递参数错误!'];
-        $loggingOwner = app('inventoryDailyLogService')->firstOrCreate(['owner_id'=>$owner_id]);
+        $loggingOwner = app('InventoryDailyLogService')->firstOrCreate(['owner_id'=>$owner_id]);
         if (!$loggingOwner)return ['success'=>false,'data'=>'录入失败!'];
         return ['success'=>true,'data'=>$loggingOwner->owner_id];
     }
@@ -112,9 +115,9 @@ class InventoryController extends Controller
         if ($request->checkAllSign){
             $params = $request->input();
             unset($params['checkAllSign']);
-            $sql=app('inventoryDailyLogService')->getSql($params);
+            $sql=app('InventoryDailyLogService')->getSql($params);
 
-        }else $sql=app('inventoryDailyLogService')->getSql(['id'=>$request->data]);
+        }else $sql=app('InventoryDailyLogService')->getSql(['id'=>$request->data]);
 
         $row = ["货主","日期","商品名称","商品编码","商品条码","属性仓","在库数量","长","宽","高","体积","总占用体积","总毛重"];
         $column = ["owner_name", "created_at", "commodity_name", "commodity_sku", "commodity_barcode_code","depository_name",

+ 4 - 5
app/Http/Controllers/LogController.php

@@ -22,7 +22,7 @@ class LogController extends Controller
      * Display a listing of the resource.
      *
      * @param Request $request
-     * @return LengthAwarePaginator
+     * @return Application|LengthAwarePaginator|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
      */
     public function index(Request $request)
     {
@@ -46,8 +46,7 @@ class LogController extends Controller
             session()->flash('warning', '请选择开始时间');
             return view('maintenance.log.index', ['logs' => null]);
         }
-        $query = Log::query()
-            ->orderBy('id', 'desc');
+        $query = Log::query();
         if ($request->has('operation')) {
             $query->where('operation', 'like', $request->operation . '%');
         }
@@ -66,8 +65,8 @@ class LogController extends Controller
         if ($request->has('created_at_end')) {
             $query->where('created_at', '<=', $request->created_at_end);
         }
-
-        $logs = $query->paginate($request->paginate);
+        $query->orderByDesc('id');
+        $logs = $query->paginate($request->paginate??50);
         return view('maintenance.log.index', ['logs' => $logs]);
     }
 

+ 10 - 10
app/Http/Controllers/OrderController.php

@@ -20,11 +20,11 @@ use Illuminate\Support\Facades\Http;
 class OrderController extends Controller
 {
     public function delivering(Request $request){
-        if(!Gate::allows('订单管理-查询')){ return redirect('denied');  }
+        if(!Gate::allows('订单管理-查询')){ return view('order/index');  }
         /** @var OrderService $orderService */
-        $orderService = app('orderService');
+        $orderService = app('OrderService');
         $request = $request->input();
-        $owners = app('ownerService')->getSelection(['id','code']);
+        $owners = app('OwnerService')->getSelection(['id','code']);
         $codes = array_column($owners->toArray(),'code');
         if ($request['customerid'] ?? false){
             $arr = explode(',',$request['customerid']);
@@ -55,7 +55,7 @@ class OrderController extends Controller
     public function export(Request $request){
         $is_merge = $request->is_merge ?? false;
         /** @var OrderService $orderService */
-        $orderService = app('orderService');
+        $orderService = app('OrderService');
         $req = ['type'=>'order'];
         if ($is_merge && $is_merge == 'true')$req["createFormat"] = "merge";
         if ($request->data){
@@ -76,14 +76,14 @@ class OrderController extends Controller
     public function createRejectedBill(Request $request){
         if(!Gate::allows('订单管理-订单-生成退货单')){ return ['success'=>false,'data'=>'您无权操作!'];  }
         /** @var OrderService $orderService */
-        $orderService = app('orderService');
+        $orderService = app('OrderService');
         $result = $orderService->get(['data' => $request->data]);
 
         /** @var RejectedBillService $rejectedBillService */
-        $rejectedBillService = app('rejectedBillService');
+        $rejectedBillService = app('RejectedBillService');
 
         /** @var RejectedBillItemService $rejectedBillItemService */
-        $rejectedBillItemService = app('rejectedBillItemService');
+        $rejectedBillItemService = app('RejectedBillItemService');
 
         $commodities = $result['commodities'];
         $rejectedBillItems = [];
@@ -93,9 +93,9 @@ class OrderController extends Controller
             //不存在时将当前快递单号视为分箱号
             if (!($picktotraceids[$order->orderno] ?? false))$picktotraceids[$order->orderno] = [$order->soreference5];
             //获取货主与快递方
-            $owner = app('ownerService')->firstOrCreate(['name' => $order->customer_descr_c],
+            $owner = app('OwnerService')->firstOrCreate(['name' => $order->customer_descr_c],
                 ['name' => $order->customer_descr_c, 'code' => $order->customer_descr_c]);
-            $logistic = app('logisticService')->firstOrCreate(['name' => $order->carriername],
+            $logistic = app('LogisticService')->firstOrCreate(['name' => $order->carriername],
                 ['name' => $order->carriername, 'code' => $order->carriername]);
             foreach ($picktotraceids[$order->orderno] as $orderno){
                 $rejectedBill = $rejectedBillService->create([
@@ -133,7 +133,7 @@ class OrderController extends Controller
     public function isRejectedBillExist(Request $request){
         if(!Gate::allows('订单管理-订单-生成退货单')){ return redirect(url('/'));  }
         /** @var RejectedBillService $rejectedBillService */
-        $rejectedBillService = app('rejectedBillService');
+        $rejectedBillService = app('RejectedBillService');
         $rejectedBills = $rejectedBillService->get(['order_number' => $request->data]);
         if (count($rejectedBills) == 0)return ['success'=>true];
         return ['success'=>false, 'data'=>json_encode(array_column($rejectedBills->toArray(),'order_number'))];

+ 28 - 11
app/Http/Controllers/OrderIssueController.php

@@ -39,7 +39,7 @@ class OrderIssueController extends Controller
             return redirect(url('/'));
         }
         /** @var OrderIssueService $orderIssueService */
-        $orderIssueService = app('orderIssueService');
+        $orderIssueService = app('OrderIssueService');
         $owners = app(OwnerService::class)->getAuthorizedOwners();
         $orderIssues = $orderIssueService->paginate($request->all());
         $orderIssueType = OrderIssueType::all();
@@ -67,7 +67,7 @@ class OrderIssueController extends Controller
         if (!Gate::allows('订单管理-订单问题件生成')) {
             return redirect(url('/'));
         }
-        $orderIssueService = app('orderIssueService');
+        $orderIssueService = app('OrderIssueService');
         $orderIssueService->validatorCreate($request)->validate();
         $orderIssue = null;
         if ($request->filled('logistic_number_return')) {
@@ -133,9 +133,9 @@ class OrderIssueController extends Controller
         if ($request->checkAllSign){
             $params = $request->input();
             unset($params['checkAllSign']);
-            $sqlList = app('orderIssueService')->getSqlList($params);
+            $sqlList = app('OrderIssueService')->getSqlList($params);
         }else{
-            $sqlList = app('orderIssueService')->getSqlList(['id'=>$request->data]);
+            $sqlList = app('OrderIssueService')->getSqlList(['id'=>$request->data]);
         }
         $post = Http::post(config('go.export.url'),['type'=>'orderIssue','sqlList'=>json_encode($sqlList),'createFormat'=>'merge']);
         if ($post->status() == 500){
@@ -271,7 +271,7 @@ class OrderIssueController extends Controller
         if (!$request->filled('clientCode')) {
             return ['success' => false, 'fail_info' => '缺少对应的参数或条件'];
         }
-        $orderService = app('orderService');
+        $orderService = app('OrderService');
         $clientCode = $request->input('clientCode');
         $order = Order::query()->where('client_code', $clientCode)->first();
         if ($order) {
@@ -305,7 +305,7 @@ class OrderIssueController extends Controller
             if ($orderIssue) {
                 return ['success' => false, 'fail_info' => '该退回单号已有对应的问题件'];
             } else {
-                $orderService = app('orderService');
+                $orderService = app('OrderService');
                 $order = $orderService->findOrCreteByLogisticNumberReturn($logisticNumberReturn);
                 return ['success' => true, 'order' => $order, 'rejectedBill' => $rejectedBill];
             }
@@ -499,25 +499,32 @@ class OrderIssueController extends Controller
         /** @var OrderIssueService $service */
         $service =  app(OrderIssueService::class);
         foreach ($array as $i => $str) {
-            $items = explode("\t",$str);
-             $head = '第'.($i+1).'行';
+            $string= preg_replace('/[\s,\,\,]+/','*++*',$str);
+            $items = explode('*++*',$string);
+            $head = '第'.($i+1).'行';
             if(count($items)<count($rows)){
                 $errors[$head] = ['数据不完整'];
                 unset($items);
                 continue;
             }
             $map = [];
-
             foreach ($rows as $index=>$row) {
                 if($row === '原始运单号'){
                     if(!$items[$index]){
                         $errors[$head][]='快递单号为空';
                         $map =[];
                     }
-                    $exist_logistic =  $service->校验问题件是否存在_快递单号_返回存在的快递单号([$items[$index]]);
+                    $logistic_numbers = [$items[$index]];
+                    $exist_logistic =  $service->校验问题件是否存在_快递单号_返回存在的快递单号($logistic_numbers);
+                    $orderHeaders=OracleDOCOrderHeader::query()->with('actAllocationDetails')->whereHas('actAllocationDetails',function($query)use($logistic_numbers){
+                        $query->whereIn('picktotraceid',$logistic_numbers);
+                    })->get();
                     if(count($exist_logistic) > 0){
                         $errors[$head][]='快递单号存在对应的问题件';
                         $map =[];
+                    }else if($orderHeaders->count()==0){
+                        $errors[$head][]='快递单号不存在对应的发运订单';
+                        $map =[];
                     }
                     $logistic_numbers[] = $items[$index];
                     $map['logistic_number'] = $items[$index];
@@ -529,6 +536,13 @@ class OrderIssueController extends Controller
                     }
                     $map['result_explain'] = $items[$index];
                 }
+                if($row==='自定义订单号'){
+                    if(!$items[$index]){
+                        $errors[$head][]='自定义订单号为空';
+                        $map =[];
+                    }
+                    $map['custom_code'] = $items[$index];
+                }
                 if($row==='问题类别'){
                     if(!$items[$index]){
                         $errors[$head][]='问题类别为空';
@@ -546,13 +560,16 @@ class OrderIssueController extends Controller
             }
             if(count($map)!==0)$maps[] = $map;
         }
+//        if(count($errors)>0)dd($errors);
         if(count($errors)>0) return ['success'=>false,'fail_info'=>$errors];
         try {
+
             foreach ($maps as $map) {
                 $logistic_number = $map['logistic_number'];
                 $result_explain = $map['result_explain'];
                 $type = $map['type'];
-                $service->createOrderIssue($logistic_number, $type, $result_explain);
+                $custom_code = $map['custom_code'];
+                $service->createOrderIssue($logistic_number, $type, $result_explain,'导入未处理',$custom_code);
             }
             return ['success'=>true];
         } catch (Exception $e) {

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

@@ -14,7 +14,7 @@ class OrderIssuePerformanceController extends Controller
 
     public function __construct()
     {
-        app()->singleton('orderIssueWorkLoadService', OrderIssueWorkLoadService::class);
+        app()->singleton('OrderIssueWorkLoadService', OrderIssueWorkLoadService::class);
         app()->singleton('service', OrderIssuePerformanceService::class);
     }
 
@@ -24,7 +24,7 @@ class OrderIssuePerformanceController extends Controller
             return redirect(url('/'));
         }
         /** @var OrderIssuePerformanceService $service */
-        $service = app('orderIssuePerformanceService');
+        $service = app('OrderIssuePerformanceService');
         $performance = $service->paginate($request->all());
         $options = ['timeFrame' => $request->input('timeFrame'), 'create_start' => $request->input('create_start') ?? '', 'create_end' => $request->input('create_end') ?? ''];
         return view('order.issue.performance', compact('performance', 'options'));
@@ -54,7 +54,7 @@ class OrderIssuePerformanceController extends Controller
             return redirect(url('/'));
         }
         /** @var OrderIssueWorkLoadService $workLoadService */
-        $workLoadService = app('orderIssueWorkLoadService');
+        $workLoadService = app('OrderIssueWorkLoadService');
         $workLoads = $workLoadService->paginate($request->all());
         $users = $workLoadService->getUsers();
         $owners = $workLoadService->getOwners();
@@ -64,7 +64,7 @@ class OrderIssuePerformanceController extends Controller
 
     public function exportWorkLoad(Request $request)
     {
-        $workLoadService = app('orderIssueWorkLoadService');
+        $workLoadService = app('OrderIssueWorkLoadService');
         return $workLoadService->exportWorkLoad($request->all());
     }
 }

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

@@ -20,7 +20,7 @@ class OrderTrackingController extends Controller
             return redirect(url('/'));
 
         $owners =  app(OwnerService::class)->getAuthorizedOwners();
-        $service = app('orderTrackingService');
+        $service = app('OrderTrackingService');
         $trackOrders = $service->paginate($request->input());
         $logistics = Logistic::all();
         return view('order.tracking.index', compact('owners', 'trackOrders','logistics'));

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

@@ -37,7 +37,7 @@ class OrderTrackingOwnerController extends Controller
             return ['success' => false, 'fail_info' => '权限不足'];
         }
         $user = Auth::user();
-        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
+        $owner_ids = $user ? app('UserService')->getPermittingOwnerIds($user) : [];
         $owner = Owner::query()->with('orderTrackingOwner')
             ->whereIn('id',$owner_ids)
             ->whereHas('orderTrackingOwner',function ($query){$query->where('status','启用');})

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

@@ -92,7 +92,7 @@ class OwnerController extends Controller
 
     public function getOwners()
     {
-        $owners = app('ownerService')->getSelection(['id', 'code', 'name']);
+        $owners = app('OwnerService')->getSelection(['id', 'code', 'name']);
         return $owners;
     }
 

+ 10 - 9
app/Http/Controllers/PackageController.php

@@ -36,8 +36,9 @@ class PackageController extends Controller
     {
         if(!Gate::allows('称重管理-查询')){ return redirect(url('/'));  }
         $paginateParams = $request->input();
-        /** @var PackageService */
-        $packages = app('packageService')->paginate($request);
+        /** @var PackageService $application */
+        $application = app('packageService');
+        $packages = $application->paginate($request);
         return view('weight.package.index',['packages'=>$packages,'owners'=>$ownerService->getSelection(),'paginateParams'=>$paginateParams]);
     }
 
@@ -122,7 +123,7 @@ class PackageController extends Controller
 //            event(new WeighedEvent($package));
         }else{
             /** @var OrderPackageService */
-            $package = app('orderPackageService')->firstOrCreate($logistic_number,[
+            $package = app('OrderPackageService')->firstOrCreate($logistic_number,[
                 'weight'=>$weight,
                 'weighed_at'=>Carbon::now(),
                 'status'=>"已上传",
@@ -153,9 +154,9 @@ class PackageController extends Controller
      * @var OwnerService
      */
     public function statistics(Request $request){
-        $packages = app('packageStatisticsService')->get($request->input());
-        $owners=app('ownerService')->getSelection();
-        $logistics=app('logisticService')->getSelection();
+        $packages = app('PackageStatisticsService')->get($request->input());
+        $owners=app('OwnerService')->getSelection();
+        $logistics=app('LogisticService')->getSelection();
         $ownerTemp = [];
         foreach ($owners as $owner){
             $ownerTemp[$owner->id] = $owner->name;
@@ -237,7 +238,7 @@ class PackageController extends Controller
     public function statisticsExport(Request $request){
         if(!Gate::allows('称重管理-查询')){ return '没有权限';  }
         /** @var PackageStatisticsService $service */
-        $service = app('packageStatisticsService');
+        $service = app('PackageStatisticsService');
 
         if ($request->checkAllSign){
             $params = $request->input();
@@ -248,7 +249,7 @@ class PackageController extends Controller
             $data = $service->get(['owner_id'=>$request->data]);
         }
 
-        $owners=app('ownerService')->getSelection();
+        $owners=app('OwnerService')->getSelection();
         $ownerTemp = [];
         foreach ($owners as $owner){
             $ownerTemp[$owner->id] = $owner->name;
@@ -275,7 +276,7 @@ class PackageController extends Controller
         $column = ["货主","总计"];
 
         $columnMap = [];
-        $logistics=app('logisticService')->getSelection();
+        $logistics=app('LogisticService')->getSelection();
         foreach ($logistics as $index => $logistic){
             if (!($logisticsTemp[$logistic->id] ?? false))unset($logistics[$index]);
             else {

+ 51 - 0
app/Http/Controllers/PriceModelController.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Gate;
+
+class PriceModelController extends Controller
+{
+    public function storeIndex()
+    {
+        if(!Gate::allows('计费模型-仓储')){ return redirect('denied');  }
+        return response()->view('maintenance.priceModel.storage.index');
+    }
+
+    public function storeCreate()
+    {
+        if(!Gate::allows('计费模型-仓储-录入')){ return redirect('denied');  }
+        return response()->view('maintenance.priceModel.storage.create');
+    }
+
+    public function operationIndex(){
+        if(!Gate::allows('计费模型-作业-查询')){ return redirect('denied');  }
+        return response()->view('maintenance.priceModel.operation.index');
+    }
+
+    public function operationCreate(){
+        if(!Gate::allows('计费模型-作业-录入')){ return redirect('denied');  }
+        return response()->view('maintenance.priceModel.operation.create');
+    }
+
+    public function expressIndex(){
+        if(!Gate::allows('计费模型-快递-查询')){ return redirect('denied');  }
+        return response()->view('maintenance.priceModel.express.index');
+    }
+
+    public function expressCreate(){
+        if(!Gate::allows('计费模型-快递-录入')){ return redirect('denied');  }
+        return response()->view('maintenance.priceModel.express.create');
+    }
+
+    public function logisticIndex(){
+        if(!Gate::allows('计费模型-物流-查询')){ return redirect('denied');  }
+        return response()->view('maintenance.priceModel.logistic.index');
+    }
+
+    public function logisticCreate(){
+        if(!Gate::allows('计费模型-物流-录入')){ return redirect('denied');  }
+        return response()->view('maintenance.priceModel.logistic.create');
+    }
+}

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

@@ -40,7 +40,7 @@ class ProcessController extends Controller
     {
         if(!Gate::allows('二次加工管理-查询')){ return redirect(url('/'));  }
         $paginateParams = $request->input();
-        $processes = app('processService')->paginate($paginateParams);
+        $processes = app('ProcessService')->paginate($paginateParams);
         $owners=$ownerService->getSelection();
         return view('process.index',['processes'=>$processes,'owners'=>$owners,'paginateParams'=>$paginateParams]);
     }
@@ -1069,8 +1069,8 @@ class ProcessController extends Controller
         if ($request->checkAllSign){
             $params = $request->input();
             unset($params['checkAllSign']);
-            $sql = app('processService')->getSql($params);
-        }else $sql = app('processService')->getSql(["id"=>$request->data]);
+            $sql = app('ProcessService')->getSql($params);
+        }else $sql = app('ProcessService')->getSql(["id"=>$request->data]);
         $post = Http::post(config('go.export.url'),['type'=>'process','sql'=>$sql]);
         if ($post->status() == 500){
             throw new Exception($post->header("Msg"));

+ 88 - 0
app/Http/Controllers/ProcessMethodController.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Support\Facades\Gate;
+
+class ProcessMethodController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return Response
+     */
+    public function index()
+    {
+        if(!Gate::allows('作业类型-查询')){ return redirect('denied');  }
+        return response()->view("maintenance.processMethod.index");
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return Response
+     */
+    public function create()
+    {
+        if(!Gate::allows('作业类型-录入')){ return redirect('denied');  }
+        return response()->view("maintenance.processMethod.create");
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show($id)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function edit($id)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, $id)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($id)
+    {
+        //
+    }
+}

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

@@ -25,8 +25,8 @@ class ProcessStatisticController extends Controller
         if ($request->checkAllSign){
             $params = $request->input();
             unset($params['checkAllSign']);
-            $sql = app('processStatisticService')->getSql($params);
-        }else $sql = app('processStatisticService')->getSql(["process_id"=>$request->data]);
+            $sql = app('ProcessStatisticService')->getSql($params);
+        }else $sql = app('ProcessStatisticService')->getSql(["process_id"=>$request->data]);
 
         $row = ["任务号", "货主", "开始日期", "完成日期","创建日期", "单价", "预期数量", "完成数量", "收入合计",
             "完成时间(天)'", "总工时", "加工类型", "最高日产能", "最低日产能", "日均产能", "合计成本", "毛利润",

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

@@ -30,7 +30,7 @@ class RejectedBillController extends Controller
     function __construct()
     {
 
-//        app()->bind('orderPackageCommoditiesService',OrderPackageCommoditiesService::class);
+//        app()->bind('OrderPackageCommoditiesService',OrderPackageCommoditiesService::class);
     }
 
     /**
@@ -69,7 +69,7 @@ class RejectedBillController extends Controller
             return ['success'=>'false','fail_info'=>'没有权限'];}
         $user=Auth::user();
         $rejectedBills = RejectedBill::query()->orderByDesc('id')->whereIn('id_owner',
-            $user?$user->getPermittingOwnerIdsAttribute():[])->limit(20)->get();
+            $user?app('UserService')->getPermittingOwnerIds($user):[])->limit(20)->get();
         return ['success'=>'true','rejectedBills'=>$rejectedBills->toArray()];
     }
 
@@ -233,9 +233,12 @@ class RejectedBillController extends Controller
         if(!Gate::allows('退货管理-编辑')){ return redirect(url('/'));  }
         $user=Auth::user();
         $owners=Owner::all()->whereIn('id',
-            $user?$user->getPermittingOwnerIdsAttribute():[])->sortBy('name');
+            $user?app('UserService')->getPermittingOwnerIds($user):[])->sortBy('name');
         $logistics=Logistic::all()->sortBy('name');
         $qualityLabels=QualityLabel::all()->sortBy('name');
+        $rejectedBill['is_loaded'] = $rejectedBill['is_loaded_null'];
+        $rejectedBill['isEditing'] = false;
+        $rejectedBill['is_at_edit_page'] = true;
         return view('rejected.edit',compact('owners','logistics','qualityLabels','rejectedBill'));
     }
 

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

@@ -77,7 +77,7 @@ class RejectedBillItemController extends Controller
         if (!$rejectedBillItem->rejectedBill || !$rejectedBillItem->rejectedBill->owner)return ['success'=>'false','failure_info'=>'退货单或货主不存在'];
 
         /** @var CommodityService $commodityService */
-        $commodityService = app('commodityService');
+        $commodityService = app('CommodityService');
         $commodity = $commodityService->ownerBarcodeSeekCommodityFirst(['name'=>$rejectedBillItem->rejectedBill->owner->name],$rejectedBillItem->barcode_goods);
         if (!$commodity){
             $commodity = $commodityService->ownerAndBarcodeFirstOrCreate($rejectedBillItem->rejectedBill->owner,$rejectedBillItem->barcode_goods);
@@ -86,7 +86,7 @@ class RejectedBillItemController extends Controller
                     "name" => $rejectedBillItem->name_goods,
                     "owner_id" => $rejectedBillItem->rejectedBill->owner->id,
                 ]);
-                app('commodityBarcodeService')->first([
+                app('CommodityBarcodeService')->first([
                     'commodity_id' => $commodity->id,
                     'code' => $rejectedBillItem->barcode_goods,
                 ]);

+ 22 - 11
app/Http/Controllers/RejectedController.php

@@ -17,12 +17,17 @@ use App\Services\RejectedService;
 use App\Services\StoreService;
 use Carbon\Carbon;
 use Exception;
+use Illuminate\Contracts\Foundation\Application;
+use Illuminate\Contracts\View\Factory;
+use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
+use Illuminate\Routing\Redirector;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Facades\Validator;
+use Illuminate\View\View;
 use Maatwebsite\Excel\Facades\Excel;
 use function foo\func;
 
@@ -30,7 +35,7 @@ class RejectedController extends Controller
 {
     public function __construct()
     {
-        app()->singleton('rejectedService',RejectedService::class);
+        app()->singleton('RejectedService',RejectedService::class);
     }
 
     /**
@@ -39,15 +44,17 @@ class RejectedController extends Controller
      * @param OwnerService $ownerService
      * @param QualityLabelService $qualityLabelService
      * @param LogisticService $logisticService
-     * @return void
+     * @return Application|Factory|View|void
      */
     public function index(Request $request,OwnerService $ownerService,
                           QualityLabelService $qualityLabelService,LogisticService $logisticService)
     {
         if(!Gate::allows('退货管理-查询')){ return redirect(url('/login'));  }
         $paginateParams = $request->input();
-        $rejectedBills=app('rejectedService')->paginate($request);
-        $issueIds = app('rejectedService')->返回有问题件的ID($request);
+        /** @var RejectedService $application */
+        $application = app('RejectedService');
+        $rejectedBills= $application->paginate($request);
+        $issueIds = $application->返回有问题件的ID($request);
         $owners = $ownerService->getSelection();
         $qualityLabels = $qualityLabelService->get();
         $logistics=$logisticService->getSelection();
@@ -62,7 +69,7 @@ class RejectedController extends Controller
         $paginateParams = $this->packFilterParams($request);
         $paginateParams['paginate']=$paginate;
         $rejectedQuery=$this->buildFilteredQuery($paginateParams)->orderBy('id','desc')->whereIn('id_owner',
-            $user?$user->getPermittingOwnerIdsAttribute():[])->withTrashed()->whereNotNull('deleted_at');
+            $user?app('UserService')->getPermittingOwnerIds($user):[])->withTrashed()->whereNotNull('deleted_at');
         $total = $rejectedQuery->count();
         $rejectedBills=$rejectedQuery->paginate($paginate);
         return view('rejected.recycle',compact('rejectedBills','total','paginateParams'));
@@ -221,18 +228,22 @@ class RejectedController extends Controller
     /**
      * Show the form for creating a new resource.
      *
-     * @return Response
+     * @return Application|RedirectResponse|Response|Redirector
      */
     public function create()
     {
         if(!Gate::allows('退货管理-录入')){ return redirect(url('/'));}
         $user=Auth::user();
         $owners=Owner::all()->whereIn('id',
-            $user?$user->getPermittingOwnerIdsAttribute():[])->sortBy('name');
+            $user?app('UserService')->getPermittingOwnerIds($user):[])->sortBy('name');
         $logistics=Logistic::all()->sortBy('name');
         $qualityLabels=QualityLabel::all()->sortBy('name');
         $rejectedBills = RejectedBill::query()->orderByDesc('id')->whereIn('id_owner',
-            $user?$user->getPermittingOwnerIdsAttribute():[])->limit(20)->get();
+            $user?app('UserService')->getPermittingOwnerIds($user):[])->limit(20)->get();
+        foreach($rejectedBills as $bill){
+            $bill['is_loaded'] = $bill['is_loaded_null'];
+            $bill['isEditing'] = false;
+        }
         return view('rejected.create',compact('owners','logistics','qualityLabels','rejectedBills'));
     }
 
@@ -240,7 +251,7 @@ class RejectedController extends Controller
      * Store a newly created resource in storage.
      *
      * @param Request $request
-     * @return Response
+     * @return Application|RedirectResponse|Response|Redirector
      */
     public function store(Request $request)
     {
@@ -395,7 +406,7 @@ class RejectedController extends Controller
         }else{
             $param = ["id"=>$request->data];
         }
-        $sql = app('rejectedService')->getSql($param);
+        $sql = app('RejectedService')->getSql($param);
         $post = Http::post(config('go.export.url'),['type'=>'rejected','sql'=>$sql]);
         if ($post->status() == 500){
             throw new Exception($post->header("Msg"));
@@ -427,7 +438,7 @@ class RejectedController extends Controller
         $filterParams=json_decode($request->input('filterParams'),true);
         $user=Auth::user();
         $rejectedBills=$this->buildFilteredQuery($filterParams)->orderBy('id','desc')->whereIn('id_owner',
-            $user?$user->getPermittingOwnerIdsAttribute():[]);
+            $user?app('UserService')->getPermittingOwnerIds($user):[]);
         if($rejectedBills->count()>RejectedExport::$max){
             $rejectedBills->where('is_finished',false);
         }

+ 49 - 37
app/Http/Controllers/StoreCheckingReceiveController.php

@@ -20,11 +20,11 @@ class StoreCheckingReceiveController extends Controller
     public function mission(Request $request){
         if(!Gate::allows('入库管理-盘收一体-盘收-查看')){ return view('store/index');  }
         /** @var StoreCheckingReceiveService $service */
-        $service = app('storeCheckingReceiveService');
+        $service = app('StoreCheckingReceiveService');
 
         $params = $request->input();
         $storeCheckingReceives = $service->paginate($params);
-        $owners = app('ownerService')->getSelection();
+        $owners = app('OwnerService')->getSelection();
         return view('store.checkingReceive.mission',compact('storeCheckingReceives','params','owners'));
     }
 
@@ -46,7 +46,7 @@ class StoreCheckingReceiveController extends Controller
     public function show($id,Request $request){
         if(!Gate::allows('入库管理-盘收一体-盘收-查看')){ return redirect(url('/'));  }
         /** @var StoreCheckingReceiveService $service */
-        $service = app('storeCheckingReceiveService');
+        $service = app('StoreCheckingReceiveService');
         $withs = ['owner','storeCheckingReceiveItems'=>function($query){
                     $query->with(['commodity'=>function($builder) {
                         $builder->with('barcodes');
@@ -78,7 +78,7 @@ class StoreCheckingReceiveController extends Controller
                 $builder->with('barcodes');
             }]);
         }];
-        $storeCheckingReceive = app('storeCheckingReceiveService')->find($mission_id,$withs);
+        $storeCheckingReceive = app('StoreCheckingReceiveService')->find($mission_id,$withs);
         if (!$storeCheckingReceive)return ['success'=>false, 'data'=>'盘收任务不存在'];
         if ($storeCheckingReceive->status == '已收货')return ['success'=>false, 'data'=>'盘收任务已结束'];
 
@@ -117,12 +117,12 @@ class StoreCheckingReceiveController extends Controller
 
             if (isset($params['imported_diff_amount']) && $params['imported_diff_amount'] > 0)$is_receive_diff = "是";
             if (isset($params['asn_diff_amount']) && $params['asn_diff_amount'] > 0)$is_asn_diff = "是";
-            $item = app('storeCheckingReceiveItemService')->updateFind($storeCheckingReceiveItem,$params);
+            $item = app('StoreCheckingReceiveItemService')->updateFind($storeCheckingReceiveItem,$params);
             LogService::log(__METHOD__,"清点数量",json_encode($item,JSON_UNESCAPED_UNICODE));
 
             switch ($storeCheckingReceive->status){
                 case '已导入':
-                    $SCR = app('storeCheckingReceiveService')->updateFind($storeCheckingReceive,['status'=>'清点中']);
+                    $SCR = app('StoreCheckingReceiveService')->updateFind($storeCheckingReceive,['status'=>'清点中']);
                     LogService::log(__METHOD__,"修改盘收任务状态为清点中",json_encode($SCR,JSON_UNESCAPED_UNICODE));
                     break;
                 case '清点中':
@@ -138,19 +138,19 @@ class StoreCheckingReceiveController extends Controller
                         || (!$storeCheckingReceive->is_asn_diff && isset($params['asn_diff_amount'])))
                         $res['is_receive_diff'] = $is_receive_diff;
                     if (count($res) > 0){
-                        $SCR = app('storeCheckingReceiveService')->updateFind($storeCheckingReceive,$res);
+                        $SCR = app('StoreCheckingReceiveService')->updateFind($storeCheckingReceive,$res);
                         LogService::log(__METHOD__,"修改盘收任务",json_encode($SCR,JSON_UNESCAPED_UNICODE));
                     }
                     break;
             }
             return ['success'=>true, 'type'=>"update", 'data'=>$item];
         }
-        $commodity = app('commodityService')->ownerBarcodeSeekCommodityFirst(['id'=>$storeCheckingReceive->owner_id], $goods['barcode']);
+        $commodity = app('CommodityService')->ownerBarcodeSeekCommodityFirst(['id'=>$storeCheckingReceive->owner_id], $goods['barcode']);
         if (!$commodity) {
             if (!$storeCheckingReceive->owner) return ['success'=>false, 'data'=>'未找到货主'];
-            $basSku = app('oracleBasSkuService')->first(['customerid'=>$storeCheckingReceive->owner->code, "barcode"=>$goods['barcode']]);
+            $basSku = app('OracleBasSkuService')->first(['customerid'=>$storeCheckingReceive->owner->code, "barcode"=>$goods['barcode']]);
             if ($basSku){
-                $commodity = app('commodityService')->firstOrCreate(['owner_id'=>$storeCheckingReceive->owner_id, 'sku'=>$basSku->sku],[
+                $commodity = app('CommodityService')->firstOrCreate(['owner_id'=>$storeCheckingReceive->owner_id, 'sku'=>$basSku->sku],[
                     "name"=>$basSku->descr_c,
                     "sku"=>$basSku->sku,
                     "owner_id"=>$storeCheckingReceive->owner_id,
@@ -159,19 +159,19 @@ class StoreCheckingReceiveController extends Controller
                     'height' => $basSku->skuhigh,
                     'volumn' => $basSku->cube
                 ]);
-                if ($commodity) app('commodityBarcodeService')->firstOrCreate(['commodity_id'=>$commodity->id, 'code'=>$goods['barcode']]);
+                if ($commodity) app('CommodityBarcodeService')->firstOrCreate(['commodity_id'=>$commodity->id, 'code'=>$goods['barcode']]);
             }else{
-                $commodity = app('commodityService')->createTemporaryCommodity([
+                $commodity = app('CommodityService')->createTemporaryCommodity([
                     "sku"=>$goods['barcode'],
                     "owner_id"=>$storeCheckingReceive->owner_id,
                 ]);
-                app('commodityBarcodeService')->create([
+                app('CommodityBarcodeService')->create([
                     "commodity_id"=>$commodity->id,
                     "code" => $goods['barcode'],
                 ]);
             }
         };
-        $item = app('storeCheckingReceiveItemService')->create([
+        $item = app('StoreCheckingReceiveItemService')->create([
             'store_checking_receive_id' => $mission_id,
             'bin_number' => $goods['bin_number'],
             'commodity_id' => $commodity->id,
@@ -188,7 +188,7 @@ class StoreCheckingReceiveController extends Controller
         }]);
         switch ($storeCheckingReceive->status){
             case '已导入':
-                $SCR = app('storeCheckingReceiveService')->updateFind($storeCheckingReceive,['status'=>'清点中']);
+                $SCR = app('StoreCheckingReceiveService')->updateFind($storeCheckingReceive,['status'=>'清点中']);
                 LogService::log(__METHOD__,"修改盘收任务状态为清点中",json_encode($SCR,JSON_UNESCAPED_UNICODE));
                 break;
             case '清点中':
@@ -203,7 +203,7 @@ class StoreCheckingReceiveController extends Controller
                 if ($storeCheckingReceive->is_asn_diff && ($storeCheckingReceive->is_asn_diff != $is_asn_diff))
                     $res['is_receive_diff'] = $is_receive_diff;
                 if (count($res) > 0){
-                    $SCR = app('storeCheckingReceiveService')->updateFind($storeCheckingReceive,$res);
+                    $SCR = app('StoreCheckingReceiveService')->updateFind($storeCheckingReceive,$res);
                     LogService::log(__METHOD__,"修改盘收任务",json_encode($SCR,JSON_UNESCAPED_UNICODE));
                 }
                 break;
@@ -219,7 +219,7 @@ class StoreCheckingReceiveController extends Controller
                 $builder->with('barcodes');
             }]);
         }];
-        $storeCheckingReceive = app('storeCheckingReceiveService')->find($id,$withs);
+        $storeCheckingReceive = app('StoreCheckingReceiveService')->find($id,$withs);
 
         if (!$storeCheckingReceive) new \Exception('盘收任务不存在');
 
@@ -263,7 +263,7 @@ class StoreCheckingReceiveController extends Controller
         $id = $request->mission_id ?? false;
         if (!$id) return ['success'=>false, 'data'=>'盘收任务不存在'];
 
-        app('storeCheckingReceiveItemService')->update(['store_checking_receive_id'=>$id],[
+        app('StoreCheckingReceiveItemService')->update(['store_checking_receive_id'=>$id],[
             'counted_amount'=>0,
             'imported_diff_amount'=>null,
             'asn_diff_amount'=>null,
@@ -283,12 +283,12 @@ class StoreCheckingReceiveController extends Controller
                 $builder->with('barcodes');
             }]);
         }];
-        $storeCheckingReceive = app('storeCheckingReceiveService')->find($id,$withs);
+        $storeCheckingReceive = app('StoreCheckingReceiveService')->find($id,$withs);
         if (!$storeCheckingReceive) return ['success'=>false, 'data'=>'未找到此盘点任务!'];
         if ($storeCheckingReceive->status == '已收货')return ['success'=>false, 'data'=>'盘收任务已结束'];
 
         /** @var OracleDocAsnDetailService $oracleDocAsnDetailService */
-        $oracleDocAsnDetailService = app('oracleDocAsnDetailService');
+        $oracleDocAsnDetailService = app('OracleDocAsnDetailService');
         $docAsnDetails = $oracleDocAsnDetailService->get([
             'asnno'=>$asn,
             'customerid'=>$storeCheckingReceive->owner ? $storeCheckingReceive->owner->code : null],[
@@ -325,12 +325,12 @@ class StoreCheckingReceiveController extends Controller
             $diffAmount += $item->asn_diff_amount;
         }
         if (count($updateItems) > 0){
-            app('storeCheckingReceiveItemService')->batchUpdate($updateItems);
+            app('StoreCheckingReceiveItemService')->batchUpdate($updateItems);
             LogService::log(__METHOD__,"匹配ASN-批量更新ASN数量",json_encode($updateItems));
         }
 
         if (count($deleteItems) > 0){
-            app('storeCheckingReceiveItemService')->destroy($deleteItems);
+            app('StoreCheckingReceiveItemService')->destroy($deleteItems);
             LogService::log(__METHOD__,"重新匹配ASN-删除原有ASN生成数据",json_encode($updateItems));
         }
 
@@ -338,7 +338,7 @@ class StoreCheckingReceiveController extends Controller
         if (count($skus) > 0){
             $skuArr = array_keys($skus);
             /** @var CommodityService $commodityService */
-            $commodityService = app('commodityService');
+            $commodityService = app('CommodityService');
             $commodities = $commodityService->get(['owner_id'=>$storeCheckingReceive->owner ? $storeCheckingReceive->owner->id : null,'sku'=>$skuArr]);
             $createItems = [];
             foreach ($commodities as $commodity){
@@ -354,9 +354,9 @@ class StoreCheckingReceiveController extends Controller
                 $diffAmount += $skus[$commodity->sku];
             }
 
-            if (count($createItems) > 0)app('storeCheckingReceiveItemService')->insert($createItems);
+            if (count($createItems) > 0)app('StoreCheckingReceiveItemService')->insert($createItems);
         }
-        $data = app('storeCheckingReceiveService')->updateFind($storeCheckingReceive,[
+        $data = app('StoreCheckingReceiveService')->updateFind($storeCheckingReceive,[
             'asn'=>$asn,'is_asn_diff'=>$diffAmount==0 ? "否" : "是",'status'=>'已ASN入库'
         ]);
         LogService::log(__METHOD__,"修改盘收任务",json_encode($data,JSON_UNESCAPED_UNICODE));
@@ -368,7 +368,7 @@ class StoreCheckingReceiveController extends Controller
         $id = $request->id ?? false;
 
         /** @var StoreCheckingReceiveService $storeCheckingReceiveService */
-        $storeCheckingReceiveService = app('storeCheckingReceiveService');
+        $storeCheckingReceiveService = app('StoreCheckingReceiveService');
         /** @var StoreCheckingReceive $storeCheckingReceive */
         $storeCheckingReceive = $storeCheckingReceiveService->find($id);
         if (!$storeCheckingReceive)return ['success'=>false, 'data'=>'盘收任务不存在'];
@@ -390,20 +390,27 @@ class StoreCheckingReceiveController extends Controller
         $id = $request->id ?? null;
         $counted_amount = $request->counted_amount ?? null;
         if (!$id || !$counted_amount)return ['success'=>false, 'data'=>'参数传递错误!'];
-        $item = app('storeCheckingReceiveItemService')->find($id);
+        $item = app('StoreCheckingReceiveItemService')->find($id);
         if (!$item)return ['success'=>false, 'data'=>'被盘项不存在'];
         $params = ["counted_amount"=>$counted_amount];
-        if ($item->imported_amount)$params["imported_diff_amount"] = (int)$counted_amount - (int)$item->imported_amount;
-        if ($item->asn_amount)$params["asn_diff_amount"] = (int)$counted_amount - (int)$item->asn_diff_amount;
+        $data = [];
+        if ($item->imported_amount){
+            $params["imported_diff_amount"] = (int)$counted_amount - (int)$item->imported_amount;
+            $data["imported_diff_amount"] = $params["imported_diff_amount"];
+        }
+        if ($item->asn_amount){
+            $params["asn_diff_amount"] = (int)$counted_amount - (int)$item->asn_diff_amount;
+            $data["asn_diff_amount"] = $params["asn_diff_amount"];
+        }
         //修改差异状态
         if ($item->imported_amount || $item->asn_amount){
             $withs = ['storeCheckingReceiveItems'];
-            $storeCheckingReceive = app('storeCheckingReceiveService')->find($item->store_checking_receive_id,$withs);
+            $storeCheckingReceive = app('StoreCheckingReceiveService')->find($item->store_checking_receive_id,$withs);
             if ($storeCheckingReceive)$this->updateDiffStatus($storeCheckingReceive);
         }
-        app('storeCheckingReceiveItemService')->updateFind($item,$params);
+        app('StoreCheckingReceiveItemService')->updateFind($item,$params);
         LogService::log(__METHOD__,"盘点修改实盘数",'item:'.json_encode($item)."update:",$counted_amount);
-        return ['success'=>true];
+        return ['success'=>true,"data"=>$data];
     }
 
     //修改差异状态
@@ -415,11 +422,16 @@ class StoreCheckingReceiveController extends Controller
             if ($item->imported_diff_amount)$is_receive_diff = "是";
             if ($item->asn_diff_amount)$is_asn_diff = "是";
         }
-        if (($scr->is_receive_diff != $is_receive_diff) || ($scr->is_asn_diff != $is_asn_diff)){
-            $scr->update([
-                "is_receive_diff" => $is_receive_diff,
-                "is_asn_diff" => $is_asn_diff
-            ]);
+        $update = [];
+        if ($scr->is_receive_diff != $is_receive_diff){
+            $update["is_receive_diff"] = $is_receive_diff;
+        }
+        if ($scr->is_asn_diff != $is_asn_diff){
+            $update["is_asn_diff"] = $is_asn_diff;
+        }
+        if (count($update) > 0){
+            $scr->update($update);
+            LogService::log(__METHOD__,"修改差异状态",json_encode($scr,JSON_UNESCAPED_UNICODE));
         }
     }
 }

+ 10 - 9
app/Http/Controllers/StoreController.php

@@ -151,7 +151,7 @@ class StoreController extends Controller
             'depository_code'=>$depository_code,
             'follow_code'=>$store['id'],
         ]);
-        if ($result["success"]){
+        if ($result){
             $store->status='已入库';
             $store->save();
             if ($store->storeItems){
@@ -201,26 +201,27 @@ class StoreController extends Controller
                 LogService::log(__METHOD__,"快速入库-FLUX收货失败","ASNNO:".$asnno.";ERROR:".$result);
                 return ['success' => false, 'data' => $detail->asnlineno.'收货失败,错误代码:'.$result];
             }
-            if (!isset($depositories[$detail->lotatt05])){
-                $depository = app('depositoryService')->firstOrCreate(["code"=>$detail->lotatt05],["code"=>$detail->lotatt05,"name"=>$detail->lotatt05]);
+            if (!isset($depositories[$detail->lotatt05]) && $detail->lotatt05){
+                $depository = app('DepositoryService')->firstOrCreate(["code"=>$detail->lotatt05],["code"=>$detail->lotatt05,"name"=>$detail->lotatt05]);
                 $depositories[$detail->lotatt05] = $depository->id;
             }
-            $items[] = [
+            $item = [
                 "asn_line_code" => $detail->asnlineno,
                 "name" => $detail->skudescrc,
                 "sku" => $detail->sku,
                 "barcode" => $detail->alternate_sku1,
-                "depository_id" => $depositories[$detail->lotatt05],
                 "amount" => $detail->expectedqty_each,
                 "quality" => $quality == 'ZP' ? '正品' : '残次',
                 "status" => "已入库",
                 "created_at" => $toDay
             ];
+            if (isset($depositories[$detail->lotatt05]))$item["depository_id"] = $depositories[$detail->lotatt05];
+            $items[] = $item;
         }
         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([
+        $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,
@@ -232,7 +233,7 @@ class StoreController extends Controller
         foreach ($items as $item){
             $item["store_id"] = $store->id;
         }
-        app('storeItemService')->insert($items);
+        app('StoreItemService')->insert($items);
         return ['success'=>true,"data"=>"已成功将“".$asnno."”入库"];
     }
 

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

@@ -37,6 +37,7 @@ use App\ProcessStatistic;
 use App\Province;
 use App\RejectedBill;
 use App\RejectedBillItem;
+use App\Services\CacheService;
 use App\Services\CityService;
 use App\Services\CommodityService;
 use App\Services\common\BatchUpdateService;
@@ -44,6 +45,7 @@ use App\Services\common\DataHandlerService;
 use App\Services\InventoryCompareService;
 use App\Services\LogService;
 use App\Services\OracleActAllocationDetailService;
+use App\Services\OracleBasCustomerService;
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderIssuePerformanceService;
 use App\Services\OrderIssueService;
@@ -52,10 +54,12 @@ use App\Services\OrderPackageService;
 use App\Services\OrderService;
 use App\Services\OrderTrackingOwnerService;
 use App\Services\OrderTrackingService;
+use App\Services\WarehouseService;
 use App\StoreCheckingReceive;
 use App\StoreCheckingReceiveItem;
 use App\Unit;
 use App\User;
+use App\Warehouse;
 use App\Waybill;
 use Carbon\Carbon;
 use Exception;
@@ -66,6 +70,7 @@ use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Facades\Redis;
+use Ramsey\Collection\Collection;
 use Zttp\Zttp;
 
 class TestController extends Controller
@@ -106,9 +111,10 @@ class TestController extends Controller
                      'OUT_Return_Code:'.$result
                  );*/
     public function test4(){
-        $r=Redis::connection();
-        $controller = new \App\Http\Controllers\Api\thirdPart\flux\StoreController();
-        return $controller->quickStorage('JSCS202010210001');
+        $owner_name = "BAOSHI";
+        $owner = app('ownerService')->first(["code"=>$owner_name,"name"=>$owner_name],["name"=>"or"]);
+        if (!$owner) $owner = app('ownerService')->create(["name"=>$owner_name, "code"=>$owner_name]);
+        dd($owner);
     }
 
     public function test2(){
@@ -157,7 +163,7 @@ class TestController extends Controller
     function issues()
     {
         /** @var OrderPackageService $orderPackageService */
-        $orderPackageService = app('orderPackageService');
+        $orderPackageService = app('OrderPackageService');
         $ids = [741, 739, 738, 736, 735, 733, 732, 731, 730, 729, 728, 725, 724, 723, 721, 720, 719, 718, 717, 715, 714, 713, 712, 711, 710, 705, 703, 702, 701, 700, 699, 698, 696, 694, 693, 692, 691, 690];
         $orderIssues = OrderIssue::query()->whereIn('id', $ids)->get();
         $order_ids = data_get($orderIssues, '*.order_id');
@@ -301,7 +307,7 @@ class TestController extends Controller
             $error = [];
             foreach ($packages as $package) {
                 /** @var $service OrderPackageService */
-                $service = app('orderPackageService');
+                $service = app('OrderPackageService');
                 $orderPackage = $service->firstOrCreate($package->logistic_number,
                     ['batch_number' => $package->batch_number,
                         'batch_rule' => $package->batch_rule,
@@ -408,7 +414,7 @@ class TestController extends Controller
         foreach ($ids as $id) {
             $package = Package::query()->find($id);
             /** @var OrderPackageService */
-            $orderPackage = app('orderPackageService')->firstOrCreate($package->logistic_number,
+            $orderPackage = app('OrderPackageService')->firstOrCreate($package->logistic_number,
                 ['batch_number' => $package->batch_number,
                     'batch_rule' => $package->batch_rule,
                     'bulk' => $package->bulk,
@@ -529,12 +535,12 @@ class TestController extends Controller
             LogService::log(__METHOD__,'清理商品',json_encode($logs,JSON_UNESCAPED_UNICODE));
             LogService::log(__METHOD__,'重新分配商品',json_encode($commodityTag,JSON_UNESCAPED_UNICODE));
 
-            app('inventoryAccountMissionService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新库存盘点任务
+            app('InventoryAccountMissionService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新库存盘点任务
             app('inventoryCompareService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新库存对比
-            app('inventoryDailyLogService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新库存每日记录
-            app('processesContentService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新二次加工内容单
-            app('storeCheckingReceiveItemService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新入库盘收一体
-            app('orderPackageCommoditiesService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新订单商品
+            app('InventoryDailyLogService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新库存每日记录
+            app('ProcessesContentService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新二次加工内容单
+            app('StoreCheckingReceiveItemService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新入库盘收一体
+            app('OrderPackageCommoditiesService')->batchUpdateItself('commodity_id', $commodityTag);//批量更新订单商品
 
             LogService::log(__METHOD__,'删除商品与对应条码',json_encode($commodityDel,JSON_UNESCAPED_UNICODE));
             CommodityBarcode::query()->whereIn('commodity_id',$commodityDel)->delete();
@@ -628,12 +634,12 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
             $updateCommodities[$del->commodity_id] = $target->commodity_id;
         }
         if (count($updateCommodities) > 0){
-            app('inventoryAccountMissionService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新库存盘点任务
+            app('InventoryAccountMissionService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新库存盘点任务
             app('inventoryCompareService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新库存对比
-            app('inventoryDailyLogService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新库存每日记录
-            app('processesContentService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新二次加工内容单
-            app('storeCheckingReceiveItemService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新入库盘收一体
-            app('orderPackageCommoditiesService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新订单商品
+            app('InventoryDailyLogService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新库存每日记录
+            app('ProcessesContentService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新二次加工内容单
+            app('StoreCheckingReceiveItemService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新入库盘收一体
+            app('OrderPackageCommoditiesService')->batchUpdateItself('commodity_id', $updateCommodities);//批量更新订单商品
         }
 
         if (count($createBarcodes) > 0) LogService::log(__METHOD__, "纠正商品-录入合并条码", json_encode(data_get($createBarcodes, '*.id'), JSON_UNESCAPED_UNICODE));
@@ -710,11 +716,11 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     public function test3()
     {
         /** @var OrderTrackingService $orderTrackingService */
-        $orderTrackingService = app('orderTrackingService');
+        $orderTrackingService = app('OrderTrackingService');
         /** @var OrderService $orderService */
         $orderService = app(OrderService::class);
         $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
-        $startDate = \Illuminate\Support\Carbon::parse('2020-10-10 00:00:00')->toDateTimeString();
+        $startDate = \Illuminate\Support\Carbon::parse('2020-10-28 00:00:00')->toDateTimeString();
         $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode'])
             ->where('addTime', '>=', $startDate)
             ->whereIn('customerID', data_get($owners, '*.code'))
@@ -722,14 +728,69 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $orderService->updateByWmsOrders($orderHeaders);
         $orderTrackingService->updateByWmsOrderHeaders($orderHeaders);
     }
-    public function test11(){
-        $orderHeader = OracleDOCOrderHeader::query()->with('actAllocationDetails')->where('orderNo','SO201024001172')->get();
+
+    public function test11()
+    {
+        $orderHeader = OracleDOCOrderHeader::query()->with('actAllocationDetails')->where('orderNo', 'SO201024001172')->get();
         dd(app(OrderService::class)->createByWmsOrder($orderHeader));
     }
 
+    public function output()
+    {
+        /** @var CacheService $cacheService */
+        $cacheService = app('CacheService');
+        $authorities=$cacheService->getOrExecute('userxx',function (){
+            return Authority::with('roles')->get();
+        });
+        dd($authorities);
+    }
+    public function output2()
+    {
+        dump(Cache::get('aa'));
+        Cache::put('aa', '2223', 5);
+    }
     public function usage()
     {
         dd(Request::all());
     }
 
+    public function updateOrdersWarehouse()
+    {
+        /**
+         * @var DataHandlerService $dataHandlerService
+         * @var OrderService $orderService
+         */
+        $dataHandlerService = app(DataHandlerService::class);
+        $orderService = app(OrderService::class);
+        $page = 500;
+        $count = Order::query()->count();
+        $warehouse = Warehouse::query()->get();
+        $warehouse_map = $dataHandlerService->dataHeader(['code'], $warehouse);
+        for ($i = 0; $i < $count; $i += $page) {
+            $min = $i;$max = $i + $page;
+            $orders = Order::query()->where('id', '>=', $min)->where('id', '<=', $max)->get();
+            $orderNos = array_diff(array_unique(data_get($orders, '*.code')), ['', ' ', '*', null]);
+            if (count($orderNos)==0) continue;
+            /** @var Collection $orderHeaders */
+            $orderHeaders = OracleDOCOrderHeader::query()->whereIn('orderno', $orderNos)->get();
+            if ($orderHeaders->count() == 0) continue;
+            $orderHeader_map = $dataHandlerService->dataHeader(['orderno'], $orderHeaders);
+            $update_params = [];
+            $update_params[] = ['id', 'warehouse_id'];
+            foreach ($orders as $order) {
+                $orderHeader = $dataHandlerService->getKeyValue(['orderno' => $order->code], $orderHeader_map);
+                if ($orderHeader == null) continue;
+                $warehouse = $dataHandlerService->getKeyValue(['code' => $orderHeader->warehouseid], $warehouse_map);
+                if ($warehouse == null) continue;
+                $update_params[] = [
+                    'id' => $order->id,
+                    'warehouse_id' => $warehouse->id
+                ];
+            }
+            $orderService->batchUpdate($update_params);
+            unset($orders, $orderHeaders, $update_params);
+        }
+        unset($warehouse);
+    }
+
 }

+ 88 - 0
app/Http/Controllers/UserOwnerGroupController.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Support\Facades\Gate;
+
+class UserOwnerGroupController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return Response
+     */
+    public function index()
+    {
+        if(!Gate::allows('项目组-查询')){ return redirect('denied');  }
+        return response()->view("maintenance.userOwnerGroup.index");
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return Response
+     */
+    public function create()
+    {
+        if(!Gate::allows('项目组-录入')){ return redirect('denied');  }
+        return response()->view("maintenance.userOwnerGroup.create");
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show($id)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function edit($id)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, $id)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($id)
+    {
+        //
+    }
+}

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

@@ -48,7 +48,7 @@ class WaybillController extends Controller
      */
     public function index(Request $request,OwnerService $ownerService,CarrierService $carrierService)
     {
-        if(!Gate::allows('运输管理-查询')){ return redirect(url('/'));  }
+        if(!Gate::allows('运输管理-查询')){ return view("waybill.authorityMenu");  }
         $paginateParams = $request->input();
         $waybills=app('waybillService')->paginate($request->input());
         return view('waybill.index', [

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

@@ -47,9 +47,9 @@ class WaybillFinancialSnapshotsController extends Controller
         if ($request->checkAllSign){
             $param = $request->input();
             unset($param['checkAllSign']);
-            $sql = app('waybillFinancialService')->getSql($param);
+            $sql = app('WaybillFinancialService')->getSql($param);
         }else{
-            $sql = app('waybillFinancialService')->getSql(['waybill_id'=>$request->data]);
+            $sql = app('WaybillFinancialService')->getSql(['waybill_id'=>$request->data]);
         }
         $post = Http::post(config('go.export.url'),['type'=>'waybillFinancial','sql'=>$sql]);
         if ($post->status() == 500){

+ 6 - 6
app/Http/Controllers/WaybillPriceModelsController.php

@@ -34,10 +34,10 @@ class WaybillPriceModelsController extends Controller
                 $waybillPriceModels=$waybillPriceModels->where('province_id',$request->input('province_id'));
             }
             $waybillPriceModels=$waybillPriceModels->paginate($request->input('paginate')?$request->input('paginate'):50);
-            return view('maintenance.waybillPriceModel.index',['waybillPriceModels'=>$waybillPriceModels,'carriers'=>$carriers,'provinces'=>$provinces,'filterData'=>$data]);
+            return view('maintenance.priceModel.waybillPriceModel.index',['waybillPriceModels'=>$waybillPriceModels,'carriers'=>$carriers,'provinces'=>$provinces,'filterData'=>$data]);
         }else{
             $waybillPriceModels= $waybillPriceModels->paginate(50);
-            return view('maintenance.waybillPriceModel.index',['waybillPriceModels'=>$waybillPriceModels,'carriers'=>$carriers,'provinces'=>$provinces,'filterData'=>$data]);
+            return view('maintenance.priceModel.waybillPriceModel.index',['waybillPriceModels'=>$waybillPriceModels,'carriers'=>$carriers,'provinces'=>$provinces,'filterData'=>$data]);
         }
     }
 
@@ -48,7 +48,7 @@ class WaybillPriceModelsController extends Controller
         $carriers=Carrier::get();
         $provinces=Province::get();
         $units=Unit::get();
-        return view('maintenance.waybillPriceModel.create',['carriers'=>$carriers,'provinces'=>$provinces,'units'=>$units]);
+        return view('maintenance.priceModel.waybillPriceModel.create',['carriers'=>$carriers,'provinces'=>$provinces,'units'=>$units]);
     }
 
     public function getCities($province_id){
@@ -90,7 +90,7 @@ class WaybillPriceModelsController extends Controller
             $waybillPriceModel=WaybillPriceModel::create($waybillPriceModel);
             event(new WaybillPriceModelEvent($waybillPriceModel));
             $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
-            return redirect('maintenance/waybillPriceModel')->with('successTip','新计费模型录入成功');
+            return redirect('maintenance/priceModel/waybillPriceModel')->with('successTip','新计费模型录入成功');
         }else{
             return redirect()->back()->with('successTip','该计费模型已存在');
         }
@@ -106,7 +106,7 @@ class WaybillPriceModelsController extends Controller
         $provinces=Province::get();
         $cities=City::where('province_id',$waybillPriceModel->province_id)->get();
         $units=Unit::get();
-        return view('maintenance.waybillPriceModel.edit',['waybillPriceModel'=>$waybillPriceModel,'carriers'=>$carriers,'provinces'=>$provinces,'units'=>$units,'cities'=>$cities]);
+        return view('maintenance.priceModel.waybillPriceModel.edit',['waybillPriceModel'=>$waybillPriceModel,'carriers'=>$carriers,'provinces'=>$provinces,'units'=>$units,'cities'=>$cities]);
     }
 
 
@@ -122,7 +122,7 @@ class WaybillPriceModelsController extends Controller
         if ($waybillPriceModel->save()){
             event(new WaybillPriceModelEvent($waybillPriceModel));
             $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
-            return redirect('maintenance/waybillPriceModel')->with('successTip','新计费模型修改成功');
+            return redirect('maintenance/priceModel/waybillPriceModel')->with('successTip','新计费模型修改成功');
         }
     }
 

+ 6 - 6
app/Http/Controllers/WeighExceptedController.php

@@ -20,14 +20,14 @@ class WeighExceptedController extends Controller
     {
         if(!Gate::allows('称重管理-查看异常')){ return redirect(url('/'));  }
         /** @var OrderPackageService */
-        $weightExcepteds = app('orderPackageService')->createExceptionPaginate($request->paginate ?? 50);
+        $weightExcepteds = app('OrderPackageService')->createExceptionPaginate($request->paginate ?? 50);
         return view('weight.weightExcepted.index',['weightExcepteds'=>$weightExcepteds,'view'=>'indexCreate']);
     }
 
     public function indexIssued(Request $request)
     {
         if(!Gate::allows('称重管理-查看异常')){ return redirect(url('/'));  }
-        $weightExcepteds=app('orderPackageService')->issueExceptionPaginate($request->paginate ?? 50);
+        $weightExcepteds=app('OrderPackageService')->issueExceptionPaginate($request->paginate ?? 50);
         return view('weight.weightExcepted.index',['weightExcepteds'=>$weightExcepteds,'view'=>'indexIssued']);
     }
 
@@ -37,8 +37,8 @@ class WeighExceptedController extends Controller
            if ($request->checkAllSign){
                $params = $request->input();
                unset($params['checkAllSign']);
-               $sql = app('weighExceptedService')->getIssuedExceptionSql($params);
-           }else $sql=app('weighExceptedService')->getIssuedExceptionSql(['id'=>$request->data]);
+               $sql = app('WeighExceptedService')->getIssuedExceptionSql($params);
+           }else $sql=app('WeighExceptedService')->getIssuedExceptionSql(['id'=>$request->data]);
            $post = Http::post(config('go.export.url'),['type'=>'packageIssuedException','sql'=>$sql]);
            if ($post->status() == 500){
                throw new Exception($post->header("Msg"));
@@ -51,8 +51,8 @@ class WeighExceptedController extends Controller
            if ($request->checkAllSign){
                $params = $request->input();
                unset($params['checkAllSign']);
-               $sql = app('weighExceptedService')->getCreateExceptionSql($params);
-           }else $sql=app('weighExceptedService')->getCreateExceptionSql(['id'=>$request->data]);
+               $sql = app('WeighExceptedService')->getCreateExceptionSql($params);
+           }else $sql=app('WeighExceptedService')->getCreateExceptionSql(['id'=>$request->data]);
            $post = Http::post(config('go.export.url'),['type'=>'packageCreateException','sql'=>$sql]);
            if ($post->status() == 500){
                throw new Exception($post->header("Msg"));

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

@@ -179,7 +179,7 @@ class ProcessController extends Controller
         }
         //TODO 保留:根据条码与货主批量二次查找商品
         if (count($commoditiesData) > 0){
-            app('commodityService')->insert($commoditiesData);
+            app('CommodityService')->insert($commoditiesData);
             $this->log(__METHOD__, 'FLUX二次加工单接口录入商品__' . __FUNCTION__, json_encode($commoditiesData), Auth::user()['id']);
             $commodities=Commodity::query()->whereIn('sku',$commoditiesTem['sku'])->whereIn('owner_id',$commoditiesTem['owner_id'])->get();
             foreach ($commodities as $commodity){
@@ -187,7 +187,7 @@ class ProcessController extends Controller
                     $commodityBarCodeData[$commodity->sku."_".$commodity->owner_id]['commodity_id']=$commodity->id;
             }
             if (count($commodityBarCodeData) > 0){
-                app('commodityBarcodeService')->insert(array_values($commodityBarCodeData));
+                app('CommodityBarcodeService')->insert(array_values($commodityBarCodeData));
                 $this->log(__METHOD__, 'FLUX二次加工单接口录入商品条码__' . __FUNCTION__, json_encode($commodityBarCodeData), Auth::user()['id']);
             }
         }

+ 105 - 346
app/Http/Controllers/api/thirdPart/flux/StoreController.php

@@ -1,370 +1,129 @@
 <?php
 
-namespace App\Http\Controllers;
+namespace App\Http\Controllers\Api\thirdPart\flux;
 
-use App\Depository;
-use App\Owner;
-use App\Services\LogService;
+use App\Http\Controllers\Controller;
 use App\Store;
-use App\StoreItems;
-use App\Warehouse;
 use App\WMSReflectReceive;
-use Carbon\Carbon;
-use Illuminate\Contracts\Foundation\Application;
-use Illuminate\Contracts\View\Factory;
-use Illuminate\Http\RedirectResponse;
-use Illuminate\Http\Request;
-use Illuminate\Http\Response;
-use Illuminate\Routing\Redirector;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Gate;
-use Illuminate\Support\Facades\Validator;
-use Illuminate\View\View;
-use App\Http\Controllers\Api\thirdPart\flux\StoreController as FStoreController;
+use App\WMSReflectReceiveSku;
+use Zttp\Zttp;
 
 class StoreController extends Controller
 {
-    /**
-     * Display a listing of the resource.
-     *
-     * @return Application|Factory|Response|View
-     */
-    public function index()
-    {
-        if(!Gate::allows('入库管理-快速入库-查询')){ return redirect(url('/'));  }
-        $stores=Store::orderBy('id','DESC')->paginate(50);
-        return view('store.fast.index',['stores'=>$stores]);
-    }
 
-    /**
-     * Show the form for creating a new resource.
-     *
-     * @return Application|Factory|Response|View
-     */
-    public function create()
-    {
-        if(!Gate::allows('入库管理-快速入库-录入')){ return redirect(url('/'));  }
-        return view('store.fast.create');
-    }
 
     /**
-     * Store a newly created resource in storage.
-     *
-     * @param Request $request
-     * @return RedirectResponse|Response|Redirector
+     * 入库回传给WMS
+     * @param Store $store
+     * @return bool
      */
-    public function store(Request $request)
+    public function accomplishToWMS(Store $store, array $inputs)
     {
-        if(!Gate::allows('入库管理-快速入库-录入')){ return redirect(url('/'));  }
-        $this->validator($request);
-        if ($request->test)$result = $this->quickStorage($request->input('asn_code'),$request->input('quality') == '正品' ? 'ZP' : 'CC',$request->input('depository_code'));
-        else $result = $this->quickStorage_temp($request->input('asn_code'),$request->input('quality'),$request->input('depository_code'));
-        $response = redirect('store/fast/create');
-        if ($result['success'])return redirect('store/fast/create')->with('successTip',$result['data']);
-        return $response->with('successError',$result['data']);
-    }
-
-    public function quickStorage_temp($asn,$quality,$depository_code){
-        $WMSReflectReceive=WMSReflectReceive::with('skus')->where('ASNNO',$asn)->first();
-        if (!$WMSReflectReceive)return ['success'=>false, 'data'=>"ASN编号不存在!"];
-        $warehouse=Warehouse::query()->where('code',$WMSReflectReceive->WAREHOUSEID)->first();
-        if (!$warehouse&&$WMSReflectReceive->WAREHOUSEID){
-            $warehouse=new Warehouse([
-                'name'=>$WMSReflectReceive->WAREHOUSEID,
-                'code'=>$WMSReflectReceive->WAREHOUSEID
-            ]);
-            $warehouse->save();
-        }
-        $owner=Owner::query()->where('code',$WMSReflectReceive->CUSTOMERID)->first();
-        if (!$owner&&$WMSReflectReceive->CUSTOMERID){
-            $owner=new Owner([
-                'name'=>$WMSReflectReceive->CUSTOMERID,
-                'code'=>$WMSReflectReceive->CUSTOMERID
-            ]);
-            $owner->save();
+        $METHOD = __METHOD__;
+        $FUNCTION = __FUNCTION__;
+        Controller::logS(__METHOD__, __FUNCTION__, '快递入库进入WMS接口:' . $store['asn_code']);
+        $wmsReceiveds = WMSReflectReceive::query()->where('ASNNO', $store['asn_code'])->get();
+        if ($wmsReceiveds->isEmpty()) {
+            (new Controller())->log(__METHOD__, 'error_' . __FUNCTION__, '没有本地WMS入库单');
+            return false;
         }
-        $store=Store::query()->where('asn_code',$WMSReflectReceive->ASNNO)->first();
-        if(!$store){
-            $store=new Store([
-                'asn_code'=>$WMSReflectReceive->ASNNO,
-                'warehouse_id'=>$warehouse->id,
-                'owner_id'=>$owner->id,
-                'stored_method'=>'快速入库',
-                'status'=>'未入库',
-                'remark'=>$WMSReflectReceive->NOTES,
-            ]);
-            $store->save();
+        $success = true;
+        $wmsReceiveds->each(function ($wmsReceived) use (&$store, &$amountsItem, &$success, &$inputs, $METHOD, $FUNCTION) {
 
-            $customDepository=(function()use($depository_code){
-                $customDepository=Depository::query()->where('code',$depository_code)->first();
-                if($depository_code){
-                    if (!$customDepository){
-                        $depository=new Depository([
-                            'name'=>$depository_code,
-                            'code'=>$depository_code
-                        ]);
-                        $depository->save();
-                    }
-                }
-                return $customDepository;
+            $wmsSkus = $wmsReceived->skus()->get();
+            $orderNumberCode = $wmsReceived['ASNREFERENCE1'] ?? $store['order_number'];
+            $amountsSku = (function () use ($wmsSkus) {
+                $result = [];
+                $wmsSkus->each(function ($sku) use (&$result) {
+                    $result[$sku['id']] = $sku['EXPECTEDQTY_EACH'];
+                });
+                return $result;
             })();
-
-            if ($WMSReflectReceive->skus){
-                foreach ($WMSReflectReceive->skus as $sku){
-                    $depository=(function()use($sku,$customDepository){
-                        if($customDepository)return $customDepository;
-                        $depository=Depository::query()->where('code',$sku->LOTATT05)->first();
-                        if (!$depository){
-                            if (!$sku->LOTATT05)return $depository;
-                            $depository=new Depository([
-                                'name'=>$sku->LOTATT05,
-                                'code'=>$sku->LOTATT05
-                            ]);
-                            $depository->save();
+            $skuStrList = [];
+            $customerCode = $store->owner()->first()['code'];
+            $wmsSkus->each(function (WMSReflectReceiveSku $sku) use (&$skuList, &$amountsItem, &$amountsSku, &$skuStrList, $wmsReceived, $customerCode, &$inputs) {
+                $STATUS = 'ZP';
+                if (isset($inputs['quality']) && $inputs['quality']
+                    && $inputs['quality'] != '正品') {
+                    $STATUS = 'CC';
+                }
+                $repositoryCode = $sku['LOTATT05'];
+                if (isset($inputs['depository_code']) && $inputs['depository_code']) {
+                    $repositoryCode = $inputs['depository_code'];
+                }
+                $skuStr = "
+                        {
+                            \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
+                            \"ASNLINENO\": \"{$sku['ASNLINENO']}\",
+                            \"SKUCODE\": \"{$sku['SKU']}\",
+                            \"QUANTITY\": \"{$sku['EXPECTEDQTY_EACH']}\",
+                            \"LOTATT04\": \"{$sku['LOTATT04']}\",
+                            \"LOTATT05\": \"{$repositoryCode}\",
+                            \"STATUS\": \"{$STATUS}\",
+                            \"USERDEFINE1\": \"{$inputs['follow_code']}\",
+                            \"USERDEFINE2\": \"\",
+                            \"USERDEFINE3\": \"\",
+                            \"UNIQUE_CODE_LIST\": [" .
+                    "]
                         }
-                        return $depository;
-                    })();
-                    $storeItem=new StoreItems([
-                        'store_id'=>$store->id,
-                        'asn_line_code'=>$sku->ASNLINENO,
-                        'name'=>$sku->SKUDESCRC,
-                        'sku'=>$sku->SKU,
-                        'barcode'=>$sku->ALTERNATE_SKU1,
-                        'quality'=>$quality,
-                        'status'=>'未入库',
-                    ]);
-                    if ($depository)$storeItem->depository_id=$depository->id;
-                    $storeItem->save();
+                    ";
+                $skuStrList[] = $skuStr;
+            });
+            $skuStrList = implode(',', $skuStrList);
+            $json = "
+                {
+                    \"request\": [
+                        {
+                            \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
+                            \"CUSTOMERID\": \"{$wmsReceived['CUSTOMERID']}\",
+                            \"ASNTYPE\": \"{$wmsReceived['ASNTYPE']}\",
+                            \"ASNREFERENCE1\": \"{$wmsReceived['ASNREFERENCE1']}\",
+                            \"ADDWHO\": \"WCS\",
+                            \"USERDEFINE1\": \"\",
+                            \"USERDEFINE2\": \"\",
+                            \"USERDEFINE3\": \"\",
+                            \"SKU_LIST\": [{$skuStrList}]
+                        }
+                    ]
                 }
-            }
-        }
-        /** @var Store $store */
-        $store=Store::with('storeItems')->where('asn_code',$asn)->first();
-        $storeApi=new FStoreController();
-        $result=$storeApi->accomplishToWMS($store,[
-            'quality'=>$quality,
-            'depository_code'=>$depository_code,
-            'follow_code'=>$store['id'],
-        ]);
-        if ($result){
-            $store->status='已入库';
-            $store->save();
-            if ($store->storeItems){
-                $store->storeItems->each(function ($storeItem)use($quality){
-                    $storeItem->status='已入库';
-                    $storeItem->quality=$quality;
-                    $storeItem->save();
-                });
-            }
-            return ['success'=>true, 'data'=>"成功!"];
-        }
-        return ['success'=>false, 'data'=>"失败!请检查错误日志"];
-    }
+        ";
 
-    public function quickStorage($asnno,$quality,$depository_code)
-    {
-        $db = DB::connection('oracle');
-        $query = DB::raw("SELECT * FROM DOC_ASN_HEADER WHERE ASNNO = ?");
-        $asn = $db->selectOne($query,[$asnno]);
-        if (!$asn) return ['success'=>false, 'data'=>"单据号不存在"];
-        if ($asn->asnstatus != '00')return ['success'=>false, 'data'=>'单据号状态非创建订单'];
-        if (array_search($asn->customerid,array_values(config('stores.owners'))) === false)return ['success'=>false, 'data'=>"不允许该货主快速入库"];
-        if (array_search($asn->asntype,array_values(config('stores.types'))) === false)return ['success'=>false, 'data'=>"该单据类型不允许被入库"];
-        $query = DB::raw("SELECT b.ALTERNATE_SKU1,h.WAREHOUSEID,h.asnno,d.ASNLINENO,d.SKUDESCRC,h.CUSTOMERID,d.SKU,d.PACKID,d.RECEIVEDQTY_EACH,d.EXPECTEDQTY_EACH,d.LOTATT01,d.LOTATT02,d.lotatt04,".
-            "d.lotatt05,d.lotatt08,d.USERDEFINE1,d.USERDEFINE2,d.USERDEFINE3,d.USERDEFINE4,d.USERDEFINE5,d.RECEIVINGLOCATION FROM DOC_ASN_DETAILS d ".
-            " LEFT JOIN BAS_SKU b ON d.CUSTOMERID = b.CUSTOMERID AND d.SKU = b.SKU INNER JOIN DOC_ASN_HEADER h ON d.ASNNO = h.ASNNO WHERE h.ASNNO = ?");
-        $details = $db->select($query,[$asnno]);
-
-        $username = config('database.connections.oracle.username');
-        $password = config('database.connections.oracle.password');
-        $host = config('database.connections.oracle.host');
-        $service_name = config('database.connections.oracle.service_name');
-        $conn = oci_connect($username, $password, $host . '/' . $service_name,"utf8");
-        $sql_sp = "begin SPASN_Receiving_Process(:IN_Warehouse, :In_Process_Action, :In_ASNNo_C, :In_ASNLineNo_C, :In_FMTraceID_C, :In_New_TraceID_C, :In_ProductStatus," .
-            ":In_ProductStatus_Descr, :In_HoldRejectCode_C, :In_HoldRejectReason_C, :In_PONo_C, :In_CustomerID, :In_SKU, :In_ReceivedQty, :In_RejectedQty,:In_UOM, :In_PackID," .
-            " :In_ContainerID, :In_LotAtt01_C, :In_LotAtt02_C, :In_LotAtt03_C, :In_LotAtt04_C, :In_LotAtt05_C, :In_LotAtt06_C," .
-            ":In_LotAtt07_C, :In_LotAtt08_C, :In_LotAtt09_C, :In_LotAtt10_C, :In_LotAtt11_C, :In_LotAtt12_C," .
-            ":In_TotalCubic, :In_TotalGrossWeight, :In_TotalNetWeight, :In_TotalPrice, :In_UserDefine1, :In_UserDefine2,:In_UserDefine3, :In_UserDefine4, :In_UserDefine5, :In_FMLocation," .
-            ":In_TOLocation_C,:In_QC_Type_C, :In_PlanToLoc_C,:In_ReceivingTime, :In_LPN, :In_Operator, :IN_RCVModule, :IN_RCVStation, :In_Language, :In_UserID, :OUT_Return_Code); end;";
-        $items = [];
-        $toDay = Carbon::now()->toDateTimeString();
-        $depositories = [];
-        foreach ($details as $detail) {
-            $result = $this->executeSP($detail,$asnno,$depository_code,$db,$quality,$conn,$sql_sp);
-            if (substr($result, 0, 3) != '000') {
-                oci_close($conn);
-                LogService::log(__METHOD__,"快速入库-FLUX收货失败","ASNNO:".$asnno.";ERROR:".$result);
-                return ['success' => false, 'data' => $detail->asnlineno.'收货失败,错误代码:'.$result];
+            $sendingJson = json_decode($json, true);
+            $url = url(config('api.flux.receive.new'));
+//            (new Controller())->log($METHOD,$FUNCTION,$store['asn_code'].'||' .json_encode($sendingJson));
+            Controller::logS(__METHOD__, __FUNCTION__, '快递入库请求WMS接口开始:' . $store['asn_code']);
+            $response = Zttp::post($url, $sendingJson);
+            Controller::logS(__METHOD__, __FUNCTION__, '快递入库请求WMS接口结束:' . $store['asn_code'] . '||' . $response->body());
+            $noIssues = true;
+            $json = $response->json();
+            if (!$json || !isset($json['Response']) || !$json['Response']['return']['returnFlag'] == '1') {
+                $noIssues = false;
+            }
+            if ($json && isset($json['Response'])) {
+                if ($json['Response']['return']['returnFlag'] == '2') {
+                    (new Controller())->log($METHOD, 'error_' . $FUNCTION, $store['asn_code'] . '||' . $response->body());
+                    return true;
+                }
+//                if(isset($json['Response']['return']['returnDesc'])&&strpos($json['Response']['return']['returnDesc'],'唯一约束')!==false){
+//                    (new Controller())->log($METHOD,'error_'.$FUNCTION,$response->body());
+//                    return true;
+//                }
+                if (isset($json['Response']['return']['errordescr']) && strpos($json['Response']['return']['errordescr'], '已完成') !== false) {
+                    (new Controller())->log($METHOD, 'error_' . $FUNCTION, $store['asn_code'] . '||' . $response->body());
+                    return true;
+                }
             }
-            if (!isset($depositories[$detail->lotatt05])){
-                $depository = app('depositoryService')->firstOrCreate(["code"=>$detail->lotatt05],["code"=>$detail->lotatt05,"name"=>$detail->lotatt05]);
-                $depositories[$detail->lotatt05] = $depository->id;
+            if ($noIssues && $json['Response']['return']['returnFlag'] == '1') {
+                $wmsReceived['is_uploaded'] = 1;
+                $wmsReceived->save();
+                (new Controller())->log($METHOD, 'success_' . $FUNCTION, $store['asn_code'] . '||' . $response->body());
+                return true;
+            } else {
+                $success = false;
+                (new Controller())->log($METHOD, 'error_' . $FUNCTION, $store['asn_code'] . '||' . $response->body());
             }
-            $items[] = [
-                "asn_line_code" => $detail->asnlineno,
-                "name" => $detail->skudescrc,
-                "sku" => $detail->sku,
-                "barcode" => $detail->alternate_sku1,
-                "depository_id" => $depositories[$detail->lotatt05],
-                "amount" => $detail->expectedqty_each,
-                "quality" => $quality == 'ZP' ? '正品' : '残次',
-                "status" => "已入库",
-                "created_at" => $toDay
-            ];
-        }
-        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,
-        ]);
-        LogService::log(__METHOD__,"快速入库",json_encode($store));
-        foreach ($items as $item){
-            $item["store_id"] = $store->id;
-        }
-        app('storeItemService')->insert($items);
-        return ['success'=>true,"data"=>"已成功将“".$asnno."”入库"];
-    }
-
-    private function executeSP($detail, $asnno, $depository_code, $db, $quality, $conn, $sql_sp){
-        $IN_Warehouse = $detail->warehouseid ?? '';
-        $In_Process_Action = '3';
-        $In_ASNNo_C = $detail->asnno ?? '';
-        $In_ASNLineNo_C = $detail->asnlineno ?? '';
-        $In_FMTraceID_C = '';
-        $In_New_TraceID_C = '';
-        $In_ProductStatus = '00';
-        $In_ProductStatus_Descr = '正常';
-        $In_HoldRejectCode_C = 'OK';
-        $In_HoldRejectReason_C = '正常';
-        $In_PONo_C = '';
-        $In_CustomerID = $detail->customerid ?? '';
-        $In_SKU = $detail->sku ?? '';
-        $In_ReceivedQty = (string)((int)$detail->expectedqty_each - (int)$detail->receivedqty_each) ?? '';
-        $In_RejectedQty = '';
-        $In_UOM = 'EA';
-        $In_PackID = $detail->packid ?? '';
-        $In_ContainerID = '';
-        $In_LotAtt01_C = $detail->lotatt01 ?? '';
-        $In_LotAtt02_C = $detail->lotatt02 ?? '';
-        $In_LotAtt03_C = '';
-        $In_LotAtt04_C = $detail->lotatt04 ?? '';
-        $In_LotAtt05_C = $detail->lotatt05 ?? '';
-        $In_LotAtt06_C = '';
-        $In_LotAtt07_C = '';
-        $In_LotAtt08_C = $detail->lotatt08 ?? '';
-        $In_LotAtt09_C = '';
-        $In_LotAtt10_C = '';
-        $In_LotAtt11_C = '';
-        $In_LotAtt12_C = '';
-        $In_TotalCubic = '0.00';
-        $In_TotalGrossWeight = '0.00';
-        $In_TotalNetWeight = '0.00';
-        $In_TotalPrice = '0.00';
-        $In_UserDefine1 = $detail->userdefine1 ?? '';
-        $In_UserDefine2 = $detail->userdefine2 ?? '';
-        $In_UserDefine3 = $detail->userdefine3 ?? '';
-        $In_UserDefine4 = $detail->userdefine4 ?? '';
-        $In_UserDefine5 = $detail->userdefine5 ?? '';
-        $In_FMLocation = 'STAGE' . $detail->warehouseid;
-        $In_TOLocation_C = 'STAGE' . $detail->warehouseid;
-        $In_QC_Type_C = 'OK';
-        $In_PlanToLoc_C = '';
-        $In_ReceivingTime = '';
-        $In_LPN = '*';
-        $In_Operator = 'WCS';
-        $IN_RCVModule = '';
-        $IN_RCVStation = '';
-        $In_Language = 'cn';
-        $In_UserID = 'WCS';
-        $result = '';
-        if ($depository_code && (strtoupper($depository_code) != strtoupper($detail->receivinglocation))){
-            $query = DB::raw("UPDATE DOC_ASN_DETAILS SET RECEIVINGLOCATION = ?  WHERE ASNNO = ? AND ASNLINENO = ?");
-            $db->update($query,[$depository_code,$detail->asnno,$detail->asnlineno]);
-            $db->commit();
-            LogService::log(__METHOD__,"快速入库-修改FULX属性仓","ASNNO:".$asnno.";原仓:".$detail->receivinglocation.";修改为:".$depository_code);
-        }
-        if ($quality && ($quality != $detail->lotatt08)){
-            $query = DB::raw("UPDATE DOC_ASN_DETAILS SET LOTATT08 = ?  WHERE ASNNO = ? AND ASNLINENO = ?");
-            $db->update($query,[$quality,$detail->asnno,$detail->asnlineno]);
-            $db->commit();
-            LogService::log(__METHOD__,"快速入库-修改FULX质量状态","ASNNO:".$asnno.";原质量:".$detail->lotatt08.";修改为:".$quality);
-            $In_LotAtt08_C = $quality;
-        }
-        $stmt = oci_parse($conn, $sql_sp);
-        oci_bind_by_name($stmt, ':IN_Warehouse', $IN_Warehouse);
-        oci_bind_by_name($stmt, ':In_Process_Action', $In_Process_Action);
-        oci_bind_by_name($stmt, ':In_ASNNo_C', $In_ASNNo_C);
-        oci_bind_by_name($stmt, ':In_ASNLineNo_C', $In_ASNLineNo_C);
-        oci_bind_by_name($stmt, ':In_FMTraceID_C', $In_FMTraceID_C);
-        oci_bind_by_name($stmt, ':In_New_TraceID_C', $In_New_TraceID_C);
-        oci_bind_by_name($stmt, ':In_ProductStatus', $In_ProductStatus);
-        oci_bind_by_name($stmt, ':In_ProductStatus_Descr', $In_ProductStatus_Descr);
-        oci_bind_by_name($stmt, ':In_HoldRejectCode_C', $In_HoldRejectCode_C);
-        oci_bind_by_name($stmt, ':In_HoldRejectReason_C', $In_HoldRejectReason_C);
-        oci_bind_by_name($stmt, ':In_PONo_C', $In_PONo_C);
-        oci_bind_by_name($stmt, ':In_CustomerID', $In_CustomerID);
-        oci_bind_by_name($stmt, ':In_SKU', $In_SKU);
-        oci_bind_by_name($stmt, ':In_ReceivedQty', $In_ReceivedQty);
-        oci_bind_by_name($stmt, ':In_RejectedQty', $In_RejectedQty);
-        oci_bind_by_name($stmt, ':In_UOM', $In_UOM);
-        oci_bind_by_name($stmt, ':In_PackID', $In_PackID);
-        oci_bind_by_name($stmt, ':In_ContainerID', $In_ContainerID);
-        oci_bind_by_name($stmt, ':In_LotAtt01_C', $In_LotAtt01_C);
-        oci_bind_by_name($stmt, ':In_LotAtt02_C', $In_LotAtt02_C);
-        oci_bind_by_name($stmt, ':In_LotAtt03_C', $In_LotAtt03_C);
-        oci_bind_by_name($stmt, ':In_LotAtt04_C', $In_LotAtt04_C);
-        oci_bind_by_name($stmt, ':In_LotAtt05_C', $In_LotAtt05_C);
-        oci_bind_by_name($stmt, ':In_LotAtt06_C', $In_LotAtt06_C);
-        oci_bind_by_name($stmt, ':In_LotAtt07_C', $In_LotAtt07_C);
-        oci_bind_by_name($stmt, ':In_LotAtt08_C', $In_LotAtt08_C);
-        oci_bind_by_name($stmt, ':In_LotAtt09_C', $In_LotAtt09_C);
-        oci_bind_by_name($stmt, ':In_LotAtt10_C', $In_LotAtt10_C);
-        oci_bind_by_name($stmt, ':In_LotAtt11_C', $In_LotAtt11_C);
-        oci_bind_by_name($stmt, ':In_LotAtt12_C', $In_LotAtt12_C);
-        oci_bind_by_name($stmt, ':In_TotalCubic', $In_TotalCubic);
-        oci_bind_by_name($stmt, ':In_TotalGrossWeight', $In_TotalGrossWeight);
-        oci_bind_by_name($stmt, ':In_TotalNetWeight', $In_TotalNetWeight);
-        oci_bind_by_name($stmt, ':In_TotalPrice', $In_TotalPrice);
-        oci_bind_by_name($stmt, ':In_UserDefine1', $In_UserDefine1);
-        oci_bind_by_name($stmt, ':In_UserDefine2', $In_UserDefine2);
-        oci_bind_by_name($stmt, ':In_UserDefine3', $In_UserDefine3);
-        oci_bind_by_name($stmt, ':In_UserDefine4', $In_UserDefine4);
-        oci_bind_by_name($stmt, ':In_UserDefine5', $In_UserDefine5);
-        oci_bind_by_name($stmt, ':In_FMLocation', $In_FMLocation);
-        oci_bind_by_name($stmt, ':In_TOLocation_C', $In_TOLocation_C);
-        oci_bind_by_name($stmt, ':In_QC_Type_C', $In_QC_Type_C);
-        oci_bind_by_name($stmt, ':In_PlanToLoc_C', $In_PlanToLoc_C);
-        oci_bind_by_name($stmt, ':In_ReceivingTime', $In_ReceivingTime);
-        oci_bind_by_name($stmt, ':In_LPN', $In_LPN);
-        oci_bind_by_name($stmt, ':In_Operator', $In_Operator);
-        oci_bind_by_name($stmt, ':IN_RCVModule', $IN_RCVModule);
-        oci_bind_by_name($stmt, ':IN_RCVStation', $IN_RCVStation);
-        oci_bind_by_name($stmt, ':In_Language', $In_Language);
-        oci_bind_by_name($stmt, ':In_UserID', $In_UserID);
-        oci_bind_by_name($stmt, ':OUT_Return_Code', $result,300);
-        oci_execute($stmt);
-        return $result;
-    }
-
+        });
 
-    public function validator(Request $request){
-        $validator=Validator::make($request->input(),[
-            'asn_code'=>['required'],
-            'quality'=>['required'],
-            'depository_code'=>['nullable','string'],
-        ],[
-            'required'=>':attribute 为必填项',
-            'unique'=>':attribute 已存在',
-        ],[
-            'asn_code'=>'ASN编号',
-            'quality'=>'货物类型'
-        ])->validate();
-        return $validator;
+        return $success;
     }
 }

+ 284 - 0
app/Http/Controllers/api/thirdPart/goodscan/PackageController.php

@@ -0,0 +1,284 @@
+<?php
+
+
+namespace App\Http\Controllers\api\thirdPart\goodscan;
+
+use App\Events\WeighedEvent;
+use App\Http\Controllers\LogisticNumberFeatureController;
+use App\MeasuringMachine;
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\OrderPackage;
+use App\Services\LogService;
+use App\Services\OrderService;
+use App\Waybill;
+use Carbon\Carbon;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Validator;
+
+class PackageController
+{
+    public function new_(Request $request)
+    {
+        $requestInput = [];
+        foreach ($request->input() as $key=>$item) {
+            $requestInput[strtolower($key)] = $item;
+        }
+
+        $errors = $this->validatorWeight($requestInput)->errors(); // 参数校验
+        if($requestInput['weight'] == '-9.9'){   // 称重异常校验
+            LogService::log(__METHOD__,'GoodScan weightApi (Error)'.__FUNCTION__,'异方接口称重伤上传异常[异常值为-9.9,电子秤故障或未连接]');
+            return json_encode(['code'=>500,'error'=>'weight=-9.9']);
+        }
+        if(count($errors) > 0){
+            LogService::log(__METHOD__,'error'.__FUNCTION__,json_encode($request).'||'.json_encode($errors),null);
+            return json_encode(['code'=>500,'error'=>$errors]);
+        }
+
+        /**
+         * @var MeasuringMachine $measuringMachine
+         * @var OrderPackage $orderPackage
+         * @var OracleDOCOrderHeader $orderHeader
+         * @var Order $order
+         */
+
+        $measuringMachine = $this->getMeasuringMachine($requestInput['hid']); // 返回设备并启动
+        $orderPackage=$this->getOrderPackageByLogisticNumber($requestInput['code']); // 查询WAS是否有对应的包裹信息
+        if($orderPackage){
+            $request = $this->updateOrderPackage($orderPackage,$requestInput,$measuringMachine); // 更新包裹信息
+            if($request){
+                return json_encode($request);
+            }
+        }else{
+            try {
+                $orderHeader = $this->findOrderHeaderByLogisticNumber($requestInput['code']);// 查询WMS是否有对应的包裹信息
+                if (!$orderHeader) {
+                    return json_encode(['code' => 500, 'error' => '保存时发生错误(未在WMS中找到订单)!'], JSON_UNESCAPED_UNICODE);
+                }
+                $order = $this->createOrderByOrderHeader($orderHeader);
+                $orderPackage = $this->getOrderPackage($requestInput, $measuringMachine, $order);// 返回包裹对象
+                $this->syncOrderPackageLogistic($orderPackage);// 同步包裹订单的承运商
+            } catch (\Exception $e) {
+                LogService::log(__METHOD__,__FUNCTION__,'GoodScan weightApi (Error)'.json_encode($request).'||'.json_encode($orderPackage),null);
+                return json_encode(["code"=>500,"error"=>"写入WMS失败!"],JSON_UNESCAPED_UNICODE);
+            }
+        }
+        if(!empty($orderPackage->order)){
+            Waybill::setWeightByOrderCode($orderPackage->order->code,$orderPackage->weight);
+        }
+//            event(new WeighedEvent($orderPackage));
+        $response=["code"=>0,'error'=>'upload success'];
+        LogService::log(__METHOD__,__FUNCTION__,"下发写入包裹成功:".json_encode($request).'||'.json_encode($response),null);
+        return json_encode($response,JSON_UNESCAPED_UNICODE);
+    }
+
+    /**
+     * @param string $hid
+     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model
+     */
+    public function getMeasuringMachine($hid)
+    {
+        /** @var MeasuringMachine $measuringMachine */
+        $measuringMachine = MeasuringMachine::query()->firstOrCreate(['code'=>$hid]); // 称重设备
+        $measuringMachine->turnOn();
+        $measuringMachine->turnOffInMinutes(30);
+        return $measuringMachine;
+    }
+
+    public function validatorWeight(array $request)
+    {
+        return Validator::make($request, [
+            'code' => ['required', 'max:191'],
+            'l' => ['required', 'numeric', 'min:0'],
+            'w' => ['required', 'numeric', 'min:0'],
+            'h' => ['required', 'numeric', 'min:0'],
+            'weight' => ['required', 'numeric', 'min:0'],
+            'hid' => ['required', 'string', 'min:0'],
+            'picture' => ['required', 'string', 'min:0'],
+        ], [
+            'required' => ':attribute 为必填项',
+            'max' => ':attribute 字符过多或数值过大',
+            'min' => ':attribute 不得为负',
+            'numeric' => ':attribute 应为数字',
+            'string' => ':attribute 应为字符串',
+        ], []);
+    }
+
+    /**
+     * @param OrderPackage $orderPackage
+     * @param array $params
+     * @param MeasuringMachine $measuringMachine
+     * @return array
+     */
+    public function updateOrderPackage(&$orderPackage,$params,$measuringMachine) //更新包裹信息 前往处理活动波次
+    {
+        $edges=$this->getEdges($params);
+        $req_date=$params['time']??Carbon::now();
+        $orderPackage->weight=$params['weight'];
+        $orderPackage->measuring_machine_id=$measuringMachine->id;
+        $orderPackage->length=$edges[0];
+        $orderPackage->width=$edges[1];
+        $orderPackage->height=$edges[2];
+        $orderPackage->weighed_at=$req_date;
+        $orderPackage->bulk=$edges[0]*$edges[1]*$edges[2]/1000;
+        if($orderPackage->isActivityBatch()){
+            $response=$this->activityWaveNoProcessing($orderPackage);
+            if($response)return $response;
+        }
+        $orderPackage->save();
+        return[];
+    }
+
+    /**
+     * @param OrderPackage $orderPackage
+     * @return array
+     */
+    public function activityWaveNoProcessing(&$orderPackage) //处理活动波次
+    {
+//        $fluxController = new \App\Http\Controllers\Api\thirdPart\flux\PackageController();
+        if($orderPackage->isActivityBatch()){
+            LogService::log(__METHOD__,__FUNCTION__,"依波次号同步所有包裹:".json_encode($orderPackage),null);
+            $params = [
+                'weight'=>$orderPackage['weight'] ?? null,
+                'length'=>$orderPackage['length'] ?? null,
+                'width'=>$orderPackage['width'] ?? null,
+                'height'=>$orderPackage['height'] ?? null,
+                'bulk'=>$orderPackage['bulk'] ?? null,
+                'measuring_machine_id'=>$orderPackage['measuring_machine_id'] ?? null,
+                'weighed_at'=>$orderPackage['weighed_at'] ?? null,
+                'paper_box_id'=>$orderPackage['paper_box_id'] ?? null,
+            ];
+            OrderPackage::query()->where('batch_number',$orderPackage['batch_number'])->update($params);
+//            $result=$fluxController->markWMSOnBatch($orderPackage['batch_number'], $orderPackage['weight']);
+//            if(!$result['result']){
+//                $orderPackage->status="上传异常";
+//            }
+        }else{
+            LogService::log(__METHOD__,__FUNCTION__,"GoodScan 写入包裹至WMS:".json_encode($orderPackage),null);
+//            try{
+//                $result=$fluxController->accomplishToWMS($orderPackage);
+//                if ($result['result'])
+//                    $orderPackage->status="已上传";
+//                else
+//                    $orderPackage->status="上传异常";
+//            }catch (\Exception $e){
+//                $orderPackage->status="未上传";
+//            }
+        }
+        $response=$this->saveOrderPackage($orderPackage);
+        return $response??[];
+    }
+
+    /**
+     * @param OrderPackage $orderPackage
+     * @return array
+     */
+    public function saveOrderPackage(&$orderPackage) //保存修改并
+    {
+        try {
+            $logisticNumberController = new LogisticNumberFeatureController();
+            if (!$orderPackage->order) {
+                $orderPackage->order = new Order();
+            }
+            if (!$orderPackage->order->logistic) {
+                $orderPackage->order->logistic = $logisticNumberController->getLogisticByFeatures($orderPackage->logistic_number);
+            }
+            $orderPackage->save();
+            return [];
+        } catch (\Exception $e) {
+            $response=["msg"=>'称重下发修改时发生错误!',json_encode($e),'code'=>500,'data'=>null];
+            LogService::log(__METHOD__,'GoodScan weightApi (Error)'.__FUNCTION__,json_encode($orderPackage).'||'.json_encode($e),null);
+            return $response;
+        }
+    }
+
+    /**
+     * @param string $logisticNumber
+     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
+     */
+    public function getOrderPackageByLogisticNumber($logisticNumber)
+    {
+        return OrderPackage::query()
+            ->with(['order'=>function($query){
+                $query->with('owner','logistic');
+            }])
+            ->where('logistic_number',$logisticNumber)
+            ->first();
+    }
+
+    /**
+     * @param string $logisticNumber
+     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
+     */
+    public function findOrderHeaderByLogisticNumber($logisticNumber)
+    {
+        return OracleDOCOrderHeader::query()->with('actAllocationDetails','oracleBASCode')
+            ->whereHas('actAllocationDetails',function($query)use($logisticNumber){
+                $query->where('picktotraceid',$logisticNumber);
+            })->orWhere('soreference5',$logisticNumber)->first();
+    }
+
+    /**
+     * @param OracleDOCOrderHeader $orderHeader
+     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model
+     */
+    public function createOrderByOrderHeader($orderHeader)
+    {
+        /** @var OrderService $orderService */
+        $orderService=app(OrderService::class);
+        $order_create_params=$orderService->getParamByOrderHeader($orderHeader);
+        return Order::query()->create($order_create_params);
+    }
+
+    /**
+     * @param array $requestInput
+     * @param MeasuringMachine $measuringMachine
+     * @param Order $order
+     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
+     */
+    public function getOrderPackage($requestInput,$measuringMachine,$order)
+    {
+        $weighed_at =$requestInput['time']??Carbon::now();
+        $edges=$this->getEdges($requestInput);
+        OrderPackage::query()->create([
+            'order_id'=>$order->id,
+            'logistic_number'=>$requestInput['code'],
+            'measuring_machine_id'=>$measuringMachine->id,
+            'weight'=>$requestInput['weight'],
+            'length'=>$edges[0],
+            'width'=>$edges[1],
+            'height'=>$edges[2],
+            'bulk'=>$edges[0]*$edges[1]*$edges[2],
+            'weighed_at'=>$weighed_at,
+            'status'=>"无",
+        ]);
+        return $this->getOrderPackageByLogisticNumber($requestInput['code']);
+    }
+
+    /**
+     * @param array $requestInput
+     * @return array
+     */
+    public function getEdges($requestInput)
+    {
+        $edges = [$requestInput['l']??0,$requestInput['w']??0,$requestInput['h']??0];
+        rsort($edges);
+        return $edges;
+    }
+
+    /**
+     * @param $orderPackage
+     */
+    public function syncOrderPackageLogistic(&$orderPackage) // 同步订单承运商
+    {
+        $logisticNumberController = new LogisticNumberFeatureController();
+        if (!$orderPackage->order) {
+            $orderPackage->order = new Order();
+        }
+        if (!$orderPackage->order->logistic) {
+            $orderPackage->order->logistic = $logisticNumberController->getLogisticByFeatures($orderPackage->logistic_number);
+        }
+        $orderPackage->save();
+    }
+
+}

+ 4 - 4
app/Http/Controllers/api/thirdPart/weight/PackageController.php

@@ -237,7 +237,7 @@ class PackageController extends Controller
         if (!$package){
             $logisticNumber=$request['barcode'];
             /** @var $orderService OrderService */
-            $orderService = app('orderService');
+            $orderService = app('OrderService');
             $order = $orderService->logisticNumberFirstOrCreateOrder($logisticNumber);
             if (!$order) {
                 $response=["msg"=>"保存时发生错误(未在WMS找到该单)!","code"=>500,"data"=>null];
@@ -258,7 +258,6 @@ class PackageController extends Controller
             $package->fetchAllFromOracle();
             $package->fetchPaperBox();
             try{
-                $package->save();
                 $package->load(['order'=>function($query){
                     $query->with('owner','logistic');
                 },'paperBox','measuringMachine']);
@@ -269,6 +268,7 @@ class PackageController extends Controller
                 if (!$package->order->logistic){
                     $package->order->logistic = $logisticNumberController->getLogisticByFeatures($package->logistic_number);
                 }
+                $package->save();
             }catch (\Exception $e){
                 $response=["msg"=>$e->getMessage(),"code"=>500,"data"=>$e->getTraceAsString()];
                 $this->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response).'||'.$e->getTraceAsString(),null);
@@ -283,8 +283,8 @@ class PackageController extends Controller
                 return json_encode($response,JSON_UNESCAPED_UNICODE);
             }
         }
-        if(!empty($package->order_id))
-            Waybill::setWeightByOrderCode($package->order_code,$package->weight);
+        if(!empty($package->order))
+            Waybill::setWeightByOrderCode($package->order->code,$package->weight);
             event(new WeighedEvent($package));
             $response=["msg"=>"保存成功",
                 "code"=>200,

+ 1 - 1
app/Http/Middleware/DecodingRequest.php

@@ -18,7 +18,7 @@ class DecodingRequest
     {
         if ($request->method() == "GET"){
             foreach ($request->input() as $key => $value){
-                if ($value != null)$request->offsetSet($key, str_replace("%20"," ",$value));
+                if ($value != null)$request->offsetSet($key, urldecode($value));
             }
         }
         return $next($request);

+ 2 - 2
app/Imports/OrderIssueImport.php

@@ -34,7 +34,7 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
         }
         $exception = [];
         $sum = 2;
-        $orderService = app('orderService');
+        $orderService = app('OrderService');
         $rejectedService = new RejectedService();
         if ($endIS) {
             foreach ($collection as $row) {
@@ -93,7 +93,7 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
                     $sum++;
                     continue;
                 }
-                $arr = ['order_id' => $order['id'], 'order_issue_type_id' => $order_type['id'],'result_explain'=>$row['情况说明']];
+                $arr = ['order_id' => $order['id'], 'order_issue_type_id' => $order_type['id'],'result_explain'=>$row['情况说明'],'imported_status'=>'导入未处理'];
                 if ($rejectedBill) {
                     $arr['rejected_bill_id'] = $rejectedBill['id'];
                 }

+ 7 - 6
app/Imports/StoreCheckingReceiveImport.php

@@ -111,7 +111,8 @@ class StoreCheckingReceiveImport implements ToCollection,WithHeadingRow
             Cache::put("storeCheckingReceive",["success"=>false, "data"=>"货主为空,不允许录入,至少为一行标明货主!"],86400);
             return false;
         }
-        $owner = app('ownerService')->firstOrCreate(["name"=>$owner_name],["name"=>$owner_name, "code"=>$owner_name]);
+        $owner = app('ownerService')->first(["code"=>$owner_name,"name"=>$owner_name],["name"=>"or"]);
+        if (!$owner) $owner = app('ownerService')->create(["name"=>$owner_name, "code"=>$owner_name]);
 
         //使用条码同步
         $commodityController = new CommodityController();
@@ -119,7 +120,7 @@ class StoreCheckingReceiveImport implements ToCollection,WithHeadingRow
 
         //使用条码获取商品ID,筛选出需要录入条码项
         /** @var CommodityBarcodeService $commodityBarcodeService */
-        $commodityBarcodeService = app('commodityBarcodeService');
+        $commodityBarcodeService = app('CommodityBarcodeService');
         $commodityBarCodes = $commodityBarcodeService->getCommodities($barcodes, $owner->id);
         foreach ($commodityBarCodes as $barcode){
             if(!isset($commodities[$barcode->code]))continue;
@@ -152,7 +153,7 @@ class StoreCheckingReceiveImport implements ToCollection,WithHeadingRow
                     }
                 }
             }
-            $commoditiesTem = app('commodityService')->get(['owner_id'=>$owner->id, 'sku'=>$skus]);
+            $commoditiesTem = app('CommodityService')->get(['owner_id'=>$owner->id, 'sku'=>$skus]);
 
             if (count($commoditiesTem) > 0){
                 $barcodes = [];
@@ -212,7 +213,7 @@ class StoreCheckingReceiveImport implements ToCollection,WithHeadingRow
                 //录入商品
                 if (count($createCommodities) > 0){
                     /** @var CommodityService $commodityService */
-                    $commodityService = app('commodityService');
+                    $commodityService = app('CommodityService');
                     $commodityService->insert($createCommodities);
                     LogService::log(__METHOD__,"盘收录入临时商品",json_encode($createCommodities,JSON_UNESCAPED_UNICODE));
 
@@ -245,7 +246,7 @@ class StoreCheckingReceiveImport implements ToCollection,WithHeadingRow
             Cache::put("storeCheckingReceive",["success"=>false, "errors"=>$errors],86400);
             return false;
         }
-        $storeCheckingReceive = app('storeCheckingReceiveService')->create([
+        $storeCheckingReceive = app('StoreCheckingReceiveService')->create([
             "owner_id" => $owner->id,
             "created_at" => date('Y-m-d H:i:s'),
             'status' => "已导入",
@@ -257,7 +258,7 @@ class StoreCheckingReceiveImport implements ToCollection,WithHeadingRow
             $item["store_checking_receive_id"] = $storeCheckingReceive->id;
         }
 
-        app('storeCheckingReceiveItemService')->insert($items);
+        app('StoreCheckingReceiveItemService')->insert($items);
         LogService::log(__METHOD__,"导入盘收任务-批量录入盘收记录",json_encode($items,JSON_UNESCAPED_UNICODE));
 
         Cache::put("storeCheckingReceive",["success"=>true,"data"=>$storeCheckingReceive,"errors"=>$errors],86400);

+ 0 - 2
app/MeasuringMachine.php

@@ -2,8 +2,6 @@
 
 namespace App;
 
-use App\Events\WeighedEvent;
-use App\Http\Controllers\Controller;
 use App\Jobs\MeasuringMachineQueue;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;

+ 19 - 6
app/Order.php

@@ -13,7 +13,14 @@ class Order extends Model
     protected $fillable = [
         'created_at', 'code', 'shop_id', 'owner_id', 'client_code',
         'logistic_id', 'consignee_name', 'consignee_phone', 'province',
-        'city', 'district', 'address', 'wms_status'];
+        'city', 'district', 'address', 'wms_status','warehouse_id','wms_edittime'];
+
+    /*
+     * wms订单号             code=>DOC_ORDER_HEADER[orderno]
+     * wms客户订单号         client_code=>DOC_ORDER_HEADER['soreference1']
+     * wms订单状态           wms_status=>
+     * 仓库                 warehouse_id=>DOC_ORDER_HEADER['WAREHOUSEID']
+     */
 
     protected $appends = [
         'logisticNumbers',
@@ -23,27 +30,33 @@ class Order extends Model
 
     public function logistic()
     {
-        return $this->hasOne('App\Logistic', 'id', 'logistic_id');
+        return $this->hasOne(Logistic::class, 'id', 'logistic_id');
     }
 
     public function issue()
     {
-        return $this->belongsTo('App\OrderIssue', 'id', 'order_id');
+        return $this->belongsTo(OrderIssue::class, 'id', 'order_id');
     }
 
     public function shop()
     {
-        return $this->belongsTo('App\Shop', 'shop_id', 'id');
+        return $this->belongsTo(Shop::class, 'shop_id', 'id');
     }
 
     public function owner()
     {
-        return $this->hasOne('App\Owner', 'id', 'owner_id');
+        return $this->hasOne(Owner::class, 'id', 'owner_id');
     }
 
     public function packages()
     {
-        return $this->hasMany('App\OrderPackage','order_id','id');
+        return $this->hasMany(OrderPackage::class,'order_id','id');
+    }
+
+    public function warehouse()
+    {
+        return $this->hasOne(Warehouse::class, 'id', 'owner_id');
+
     }
 
     public function getLogisticNumbersAttribute()

+ 2 - 1
app/OrderIssue.php

@@ -14,7 +14,7 @@ class OrderIssue extends Model
         'order_id', 'created_at', 'rejected_bill_id', 'rejecting_status', 'result_explain','logistic_number_return',
         'situation_explain', 'order_issue_type_id', 'second_order_id', 'is_new_rejecting','second_client_no','second_logistic_number',
         'final_status', 'logistic_indemnity_money', 'logistic_express_remission', 'baoshi_indemnity_money', 'baoshi_express_remission', 'user_workgroup_id',
-        'custom_code'];
+        'custom_code','imported_status'];
     /*
      * second_client_no 二次客户订单号
      * second_logistic_number 二次运单号 【二次运单号可以单独存在,当二次客户订单号有对应的订单信息时,显示的是二次客户订单号对应的运单号,没有的话显示二次原单号】
@@ -23,6 +23,7 @@ class OrderIssue extends Model
      * final_status
      * situation_explain
      * custom_code  自定义订单号 客户客服自定义
+     * imported_status 导入处理
      */
     protected $appends = [
 //        'secondLogisticNumber',

+ 2 - 1
app/OrderPackage.php

@@ -23,6 +23,7 @@ class OrderPackage extends Model
     public function order(){
         return $this->belongsTo('App\Order','order_id','id');
     }
+
     public function commodities(){
         return $this->hasMany('App\OrderPackageCommodities','order_package_id','id');
     }
@@ -106,7 +107,7 @@ class OrderPackage extends Model
         foreach($resultOracleObjs_grouped as $resultOracleObj_grouped){
             $resultOracleObj = $resultOracleObj_grouped[0];
             /** @var OrderService */
-            $order = app('orderService')->logisticNumberFirstOrCreateOrder($resultOracleObj['soreference5']);
+            $order = app('OrderService')->logisticNumberFirstOrCreateOrder($resultOracleObj['soreference5']);
             if (!$order){
                 LogService::log(__METHOD__,"此包裹在WMS未找到order",json_encode($resultOracleObj),Auth::user()['id']);
                 continue;

+ 1 - 1
app/Owner.php

@@ -21,7 +21,7 @@ class Owner extends Model
         if(!$user){
             return $query->where('id','0');
         }
-        $ownerIds=$user->getPermittingOwnerIdsAttribute();
+        $ownerIds=app('UserService')->getPermittingOwnerIds($user);
         return $query->whereIn('id',$ownerIds);
     }
 

+ 1 - 1
app/Package.php

@@ -91,7 +91,7 @@ class Package extends Model
             array_push($packages,[
                 'batch_number'=>$batchCode??'',
                 /** @var OrderIssueService */
-                'order_id' => app('orderIssueService')->createOrFindByOrderNo($resultOracleObj['orderno']),
+                'order_id' => app('OrderIssueService')->createOrFindByOrderNo($resultOracleObj['orderno']),
                 'logistic_number'=>$resultOracleObj['SOReference5']??'',
                 'weight'=>$weight,
                 'weighed_at'=> $now,

+ 1 - 1
app/Process.php

@@ -23,7 +23,7 @@ class Process extends Model
         if(!$user){
             return (new static)->newQuery()->where('processes.owner_id','0');
         }
-        $ownerIds=$user->getPermittingOwnerIdsAttribute();
+        $ownerIds=app('UserService')->getPermittingOwnerIds($user);
         return (new static)->newQuery()->whereIn('processes.owner_id',$ownerIds);
     }
 

+ 52 - 18
app/Providers/AppServiceProvider.php

@@ -3,6 +3,8 @@
 namespace App\Providers;
 
 use App\Http\Controllers\Controller;
+use App\Services\AuthorityService;
+use App\Services\CacheService;
 use App\Services\CommodityService;
 use App\Services\common\BatchUpdateService;
 use App\Services\CommodityBarcodeService;
@@ -42,6 +44,7 @@ use App\Services\StoreItemService;
 use App\Services\StoreService;
 use App\Services\StoreStatusService;
 use App\Services\StoreTypeService;
+use App\Services\UserService;
 use App\Services\WarehouseService;
 use App\Services\WaybillFinancialService;
 use App\Services\WeighExceptedService;
@@ -63,7 +66,7 @@ class AppServiceProvider extends ServiceProvider
     public function register()
     {
         //
-        app()->singleton('orderIssuePerformanceService',OrderIssuePerformanceService::class);
+        app()->singleton('OrderIssuePerformanceService',OrderIssuePerformanceService::class);
         app()->singleton('inventoryCompareService',InventoryCompareService::class);
         app()->singleton('oracleDocAsnHerderService',OracleDocAsnHerderService::class);
     }
@@ -129,6 +132,37 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('storeTypeService',StoreTypeService::class);
         app()->singleton('warehouseService',WarehouseService::class);
         app()->singleton('storeItemService',StoreItemService::class);
+        app()->singleton('CacheService',CacheService::class);
+        app()->singleton('UserService',UserService::class);
+        app()->singleton('AuthorityService',AuthorityService::class);
+        app()->singleton('WaybillFinancialService',WaybillFinancialService::class);
+        app()->singleton('WeighExceptedService',WeighExceptedService::class);
+        app()->singleton('AllInventoryService',AllInventoryService::class);
+        app()->singleton('InventoryDailyLogService',InventoryDailyLogService::class);
+        app()->singleton('ProcessService',ProcessService::class);
+        app()->singleton('ProcessStatisticService',ProcessStatisticService::class);
+        app()->singleton('OwnerService',OwnerService::class);
+        app()->singleton('ProcessMethodService',ProcessMethodService::class);
+        app()->singleton('LogisticService',LogisticService::class);
+        app()->singleton('PackageStatisticsService',PackageStatisticsService::class);
+        app()->singleton('OracleActAllocationDetailService',OracleActAllocationDetailService::class);
+        app()->singleton('ShopService',ShopService::class);
+        app()->singleton('OrderPackageService',OrderPackageService::class);
+        app()->singleton('OrderIssueService',OrderIssueService::class);
+        app()->singleton('OrderService',OrderService::class);
+        app()->singleton('OracleDocOrderHeaderService',OracleDOCOrderHeaderService::class);
+        app()->singleton('RejectedBillService',RejectedBillService::class);
+        app()->singleton('RejectedBillItemService',RejectedBillItemService::class);
+        app()->singleton('StoreCheckingReceiveService',StoreCheckingReceiveService::class);
+        app()->singleton('StoreCheckingReceiveItemService',StoreCheckingReceiveItemService::class);
+        app()->singleton('CommodityBarcodeService',CommodityBarcodeService::class);
+        app()->singleton('OracleBasSkuService',OracleBasSkuService::class);
+        app()->singleton('OracleDocAsnDetailService',OracleDocAsnDetailService::class);
+        app()->singleton('InventoryAccountMissionService',InventoryAccountMissionService::class);
+        app()->singleton('ProcessesContentService',ProcessesContentService::class);
+        app()->singleton('StoreService',StoreService::class);
+        app()->singleton('WarehouseService',WarehouseService::class);
+        app()->singleton('StoreItemService',StoreItemService::class);
 
         $this->loadingOrderModuleService();
         $this->loadingBasedModuleService();
@@ -136,30 +170,30 @@ class AppServiceProvider extends ServiceProvider
     }
 
     private function loadingOrderModuleService(){
-        app()->singleton('orderTrackingService',OrderTrackingService::class);
-        app()->singleton('orderService',OrderService::class);
-        app()->singleton('orderPackageService',OrderPackageService::class);
-        app()->singleton('orderPackageCommoditiesService',OrderPackageCommoditiesService::class);
-        app()->singleton('orderIssueService',OrderIssueService::class);
-        app()->singleton('orderIssueWorkLoadService',OrderIssueWorkLoadService::class);
-        app()->singleton('orderIssuePerformanceService',OrderIssuePerformanceService::class);
-        app()->singleton('oracleDOCOrderHeaderService',OracleDOCOrderHeaderService::class);
-        app()->singleton('oracleActAllocationDetailService',OracleActAllocationDetailService::class);
-        app()->singleton('orderIssueProcessLogService',OrderIssueProcessLogService::class);
+        app()->singleton('OrderTrackingService',OrderTrackingService::class);
+        app()->singleton('OrderService',OrderService::class);
+        app()->singleton('OrderPackageService',OrderPackageService::class);
+        app()->singleton('OrderPackageCommoditiesService',OrderPackageCommoditiesService::class);
+        app()->singleton('OrderIssueService',OrderIssueService::class);
+        app()->singleton('OrderIssueWorkLoadService',OrderIssueWorkLoadService::class);
+        app()->singleton('OrderIssuePerformanceService',OrderIssuePerformanceService::class);
+        app()->singleton('OracleDocOrderHeaderService',OracleDOCOrderHeaderService::class);
+        app()->singleton('OracleActAllocationDetailService',OracleActAllocationDetailService::class);
+        app()->singleton('OrderIssueProcessLogService',OrderIssueProcessLogService::class);
     }
 
     private function loadingBasedModuleService(){
-        app()->singleton("shopService", ShopService::class);
+        app()->singleton("ShopService", ShopService::class);
         //app()->singleton("logisticService", LogisticService::class);
-        //app()->singleton('ownerService',OwnerService::class);
-        app()->singleton('commodityService' , CommodityService::class);
-        app()->singleton('batchUpdateService' , BatchUpdateService::class);
-        app()->singleton('dataHandlerService',DataHandlerService::class);
-        app()->singleton('depositoryService',DepositoryService::class);
+        //app()->singleton('OwnerService',OwnerService::class);
+        app()->singleton('CommodityService', CommodityService::class);
+        app()->singleton('BatchUpdateService', BatchUpdateService::class);
+        app()->singleton('DataHandlerService',DataHandlerService::class);
+        app()->singleton('DepositoryService',DepositoryService::class);
     }
 
     private function loadingRejectedModuleService(){
-        app()->singleton('rejectedService',RejectedService::class);
+        app()->singleton('RejectedService',RejectedService::class);
     }
 
 }

+ 15 - 3
app/Providers/AuthServiceProvider.php

@@ -3,6 +3,9 @@
 namespace App\Providers;
 
 use App\Authority;
+use App\Services\AuthorityService;
+use App\Services\CacheService;
+use App\Services\UserService;
 use App\User;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
@@ -32,6 +35,8 @@ class AuthServiceProvider extends ServiceProvider
 
         $isSuperAdmin = null;
         if(!Schema::hasTable('users')){return;}
+        /** @var CacheService $cacheService */
+        $cacheService = app('CacheService');
         Gate::before(function ($user)use(&$isSuperAdmin) {
             if($isSuperAdmin===null){
                 $isSuperAdmin=$user->isSuperAdmin();
@@ -43,15 +48,22 @@ class AuthServiceProvider extends ServiceProvider
             }
         });
         if(!Schema::hasTable('authorities')){return;}
-        $authorities = Authority::with('roles')->get();
+        $authorities=$cacheService->getOrExecute('authorities',function (){
+            return Authority::with('roles')->get();
+        });
         foreach($authorities as $authority) {
-            Gate::define($authority->name, function($user) use ($authority) {
+            Gate::define($authority->name, function($user) use ($authority,$cacheService) {
                 if(Cache::get('isSuperAdmin')){
                     if($authority['permission']=='允许'){
                         return true;
                     }
                 }
-                return $user->hasRole($authority->roles);
+                $authorityRoles=$cacheService->getOrExecute("authority{$authority['id']}->roles",function ()use($authority){
+                    return $authority->roles;
+                });
+                /** @var UserService $userService */
+                $userService = app('UserService');
+                return $userService->hasRoles($user,$authorityRoles);
             });
         }
     }

+ 4 - 0
app/Providers/RouteServiceProvider.php

@@ -90,5 +90,9 @@ class RouteServiceProvider extends ServiceProvider
         Route::prefix('api/thirdPart/haiq')
             ->namespace('App\Http\Controllers\api\thirdPart\haiq')
             ->group(base_path('routes/api/thirdPart/haiq.php'));
+
+        Route::prefix('api/thirdPart/goodscan')
+            ->namespace('App\Http\Controllers\api\thirdPart\goodscan')
+            ->group(base_path('routes/api/thirdPart/goodscan.php'));
     }
 }

+ 3 - 7
app/RejectedBill.php

@@ -83,14 +83,10 @@ class RejectedBill extends Model
 
 
     public function getOwnerNameAttribute(){
-        $id_owner=$this['id_owner']??0;
-        $owner=Owner::find($id_owner);
-        return $this['owner_name']=$owner['name'];
+        return $this->owner['name']??'';
     }
     public function getLogisticNameAttribute(){
-        $id_logistic=$this['id_logistic_return']??0;
-        $logistic=Logistic::find($id_logistic);
-        return $this['logistic_name']=$logistic['name'];
+        return $this->logistic['name']??'';
     }
     public function getIsLoadedStrAttribute(){
         $val=$this['is_loaded']===null?'null':$this['is_loaded'];
@@ -109,7 +105,7 @@ class RejectedBill extends Model
     }
     public function getGoodsAmountAttribute(){
         $amount=0;
-        $this->items()->get()->each(function (RejectedBillItem $item)use(&$amount){
+        $this->items->each(function (RejectedBillItem $item)use(&$amount){
             $amount+=$item['amount'];
         });
         return $amount;

+ 1 - 1
app/RejectedBillItem.php

@@ -61,7 +61,7 @@ class RejectedBillItem extends Model
         }
     }
     public function getQualityLabelAttribute(){
-        return $this['quality']['name'];
+        return $this->quality['name']??'';
     }
 
 }

+ 40 - 0
app/Services/AuthorityService.php

@@ -0,0 +1,40 @@
+<?php
+
+
+namespace App\Services;
+
+
+use App\Authority;
+use App\Role;
+use Exception;
+use Illuminate\Support\Facades\Cache;
+
+class AuthorityService
+{
+//    /**
+//     * @return Authority[]
+//     */
+//    function getAll(){
+//        $authorities = Cache::get('authorities');
+//        if(!$authorities){
+//            $authorities = Authority::with('roles')->get();
+//            Cache::put('authorities', $authorities, config('cache.expirations.authorities'));
+//        }
+//        return $authorities;
+//    }
+//
+//    /**
+//     * @param Authority $authority
+//     * @return Role[]
+//     * @throws Exception
+//     */
+//    function getRoles(Authority $authority){
+//        if(!$authority['id']??'') throw new Exception('User对象或id不能为空');
+//        $roles = Cache::get('authorityGetRoles'.$authority['id']);
+//        if(!$roles){
+//            $roles = Authority::with('roles')->get();
+//            Cache::put('authorities', $roles, config('cache.expirations.authorities'));
+//        }
+//        return $roles;
+//    }
+}

+ 21 - 0
app/Services/CacheService.php

@@ -0,0 +1,21 @@
+<?php
+
+
+namespace App\Services;
+
+
+use Illuminate\Support\Facades\Cache;
+
+class CacheService
+{
+    function getOrExecute(String $key, $func){
+        $results = Cache::get($key);
+        if(!$results){
+            if(!$func||gettype($func)!='object') throw new \Exception('执行函数类型错误');
+            $results = $func();
+            if(!$results)return null;
+            Cache::put($key, $results, config('cache.expirations.default'));
+        }
+        return $results;
+    }
+}

+ 3 - 3
app/Services/CommodityService.php

@@ -89,7 +89,7 @@ Class CommodityService
 
     /* 通过货主代码与条形码寻找FLUX商品补充至WMS 单条*/
     public function ownerAndBarcodeFirstOrCreate(Owner $owner,$barcode){
-        $wmsCommodity = app('oracleBasSkuService')->first(['customerid'=>$owner->code, 'barcode'=>$barcode]);
+        $wmsCommodity = app('OracleBasSkuService')->first(['customerid'=>$owner->code, 'barcode'=>$barcode]);
         if (!$wmsCommodity) return null;
 
         $commodity = $this->firstOrCreate(['owner_id'=>$owner->id, 'sku'=>$wmsCommodity->sku],[
@@ -101,11 +101,11 @@ Class CommodityService
             "height" => $wmsCommodity->skuhigh,
             "volumn" => $wmsCommodity->cube,
         ]);
-        if ($wmsCommodity->alternate_sku1)app('commodityBarcodeService')->first([
+        if ($wmsCommodity->alternate_sku1)app('CommodityBarcodeService')->first([
             'commodity_id' => $commodity->id,
             'code' => $wmsCommodity->alternate_sku1,
         ]);
-        if ($wmsCommodity->alternate_sku2)app('commodityBarcodeService')->first([
+        if ($wmsCommodity->alternate_sku2)app('CommodityBarcodeService')->first([
             'commodity_id' => $commodity->id,
             'code' => $wmsCommodity->alternate_sku2,
         ]);

+ 1 - 1
app/Services/InventoryAccountService.php

@@ -39,7 +39,7 @@ class InventoryAccountService
             ->sql();
     }
     private function conditionQuery($queryParam){
-        $ownerIds=app('ownerService')->getSelectionId();
+        $ownerIds=app('OwnerService')->getSelectionId();
         $inventories=InventoryAccount::query()->with(['owner','creator'])->orderBy('id','desc')->whereIn('owner_id',$ownerIds);
         $columnQueryRules=[
             'owner_id' => ['multi' => ','],

+ 2 - 2
app/Services/InventoryCompareService.php

@@ -108,7 +108,7 @@ class InventoryCompareService
             $wmsInventoryCompareDj=$query->where('属性仓',$custom_location)->where('产品编码',$sku)->where('质量状态','DJ')->first();
             $unknownQualityStatus=$query->where('属性仓',$custom_location)->where('产品编码',$sku)->whereNotIn('质量状态',['DJ','CC','ZP']);
             if (!$wmsInventoryCompareZp&&!$wmsInventoryCompareCc&&!$wmsInventoryCompareDj&&$unknownQualityStatus->isEmpty()){
-                $inventoryCompare=$this->createInventoryCompare_underImport($sku, $custom_location, $amount, $owner_id,$owner_name);
+                $this->createInventoryCompare_underImport($sku, $custom_location, $amount, $owner_id,$owner_name);
             }
             $creatingMissionCode = $this->getCreatingMissionCode($owner_name);
             $commodityId=Commodity::where('sku',$sku)->where('owner_id',$owner_id)->value('id');
@@ -147,7 +147,7 @@ class InventoryCompareService
         return $inventoryCompares;
     }
     private function conditionQueryInventoryCompare(array $param){
-        $ownerIds=app('ownerService')->getSelectionId();
+        $ownerIds=app('OwnerService')->getSelectionId();
         $differ=$param['differ']??'';
         if ($differ=='有'){
             $inventoryCompares = InventoryCompare::query()->with(['owner','commodity'=>function($query){

+ 1 - 1
app/Services/LogisticService.php

@@ -26,7 +26,7 @@ Class LogisticService
         if(!$codes){return [];}
         $logistics = Logistic::query()->whereIn('code',$codes)->get();
 
-        if($logistics->count() < $codes){
+        if($logistics->count() < count($codes)){
             $codes = array_diff($codes,data_get($logistics,'*.code'));
             $logistic_list = $this->createLogisticByCarrierIds($codes);
             $logistics = $logistics->concat($logistic_list);

+ 17 - 0
app/Services/OracleBasCustomerService.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Services;
+
+use App\OracleBasCustomer;
+
+Class OracleBasCustomerService
+{
+    public function getWareHouse($customerIDs = null)
+    {
+        if(!$customerIDs){
+            return OracleBasCustomer::query()->where('Customer_Type','WH')->get();
+        }
+        return  OracleBasCustomer::query()->where('Customer_Type','WH')->get();
+    }
+
+}

+ 17 - 8
app/Services/OrderIssueService.php

@@ -36,18 +36,22 @@ class OrderIssueService
             $condition = $arr;
         }
         $user = Auth::user();
-        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
+        $owner_ids = $user ? app('UserService')->getPermittingOwnerIds($user) : [];
         if ($condition['owner_id'] ?? false) {
             $owner_ids = explode(',', $condition['owner_id']);
         }
         $query = OrderIssue::with(['top','userWorkGroup', 'issueType', 'logs' => function ($query) use($arr) {
             $query->with('user')->orderByDesc('created_at');
         }, 'order' => function ($query) {
-            $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity']);
+            $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity'=>function($query){
+                $query->with('barcodes');
+            }]);
         }, 'rejectedBill' => function ($query) {
             $query->with(['items']);
         }, 'secondOrder' => function ($query) {
-            $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity']);
+            $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity'=>function($query){
+                $query->with('barcodes');
+            }]);
         }])->whereHas('order.owner', function ($query) use ($owner_ids) {
             $query->whereIn('id', $owner_ids);
         });
@@ -61,6 +65,9 @@ class OrderIssueService
                 }
             });
         }
+        if(isset($arr['is_imported'])){
+            $query->where('imported_status',$arr['is_imported']);
+        }
 
         if(isset($arr['is_new_rejecting'])){
             $query->where('is_new_rejecting','=',$arr['is_new_rejecting']);
@@ -277,7 +284,7 @@ class OrderIssueService
         }
     }
 
-    public function createOrderIssueByWmsOrder($orderHeaders,$order_issue_type_id,$result_explain)
+    public function createOrderIssueByWmsOrder($orderHeaders,$order_issue_type_id,$result_explain,$imported_status='正常',$custom_code=null)
     {
         /** @var OrderService $orderService */
         $orderService = app(OrderService::class);
@@ -287,7 +294,9 @@ class OrderIssueService
             $innerParams[] = [
                 'order_id'=>$order->id,
                 'order_issue_type_id' => $order_issue_type_id,
-                'result_explain'=>$result_explain
+                'result_explain'=>$result_explain,
+                'imported_status'=>$imported_status,
+                'custom_code'=>$custom_code
             ];
         }
         try {
@@ -320,7 +329,7 @@ class OrderIssueService
     public function createOrFind($clientCode)
     {
         /** @var OrderService $orderService */
-        $orderService = app('orderService');
+        $orderService = app('OrderService');
         $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
         if ($orderHeader=== null) {
             return null;
@@ -457,14 +466,14 @@ class OrderIssueService
      * @param string $type
      * @param string $result_explain
      */
-    public function createOrderIssue($logisticNumber,$type,$result_explain)
+    public function createOrderIssue($logisticNumber,$type,$result_explain,$importedStatus='正常',$custom_code=null)
     {
         $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
             ->whereHas('actAllocationDetails',function($query)use($logisticNumber){
                 $query->where('picktotraceid',$logisticNumber);
             })->get();
         $orderIssueType = OrderIssueType::query()->where('name',$type)->first();
-        $this->createOrderIssueByWmsOrder($orderHeaders,$orderIssueType->id,$result_explain);
+        return $this->createOrderIssueByWmsOrder($orderHeaders,$orderIssueType->id,$result_explain,$importedStatus,$custom_code);
     }
 
     /**

+ 2 - 2
app/Services/OrderIssueWorkLoadService.php

@@ -16,7 +16,7 @@ class OrderIssueWorkLoadService
     public function getQuery(array $queryParam)
     {
         $user = Auth::user();
-        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
+        $owner_ids = $user ? app('UserService')->getPermittingOwnerIds($user) : [];
         $query = OrderIssue::with(['logs.user','order' => function ($query) {
             $query->with(['packages', 'owner']);
         }])->whereHas('order', function ($query) use (&$queryParam, $owner_ids) {
@@ -84,7 +84,7 @@ class OrderIssueWorkLoadService
     }
 
     public function getOwners(){
-        $owner_ids = Auth::user()->getPermittingOwnerIdsAttribute()??[];
+        $owner_ids = app('UserService')->getPermittingOwnerIds($user)??[];
         return Owner::whereIn('id', $owner_ids)->get();
     }
 

+ 31 - 165
app/Services/OrderPackageCommoditiesService.php

@@ -109,7 +109,7 @@ class OrderPackageCommoditiesService
         unset($details,$orderPackageCommodities);
     }
 
-    public function basedOnActAllocationDetail(Order $order, OracleDOCOrderHeader $header, array $details)
+/*    public function basedOnActAllocationDetail(Order $order, OracleDOCOrderHeader $header, array $details)
     {
         foreach ($details as $detail) {
             $logistic_number = $details['picktotraceid'];
@@ -122,9 +122,9 @@ class OrderPackageCommoditiesService
             $orderPackage = OrderPackage::query()->firstOrCreate(['order_id'=>$order['id'],'logistic_number',$details]);
             $this->createByActAllocationDetail($detail, $orderPackage);
         }
-    }
+    }*/
 
-    private function createByActAllocationDetail($detail,$orderPackage)
+   /* private function createByActAllocationDetail($detail,$orderPackage)
     {
         $owner = Owner::query()->where(['code' => $detail->customerid])->first();      // 货主
         $sku = $detail->sku;
@@ -145,84 +145,41 @@ class OrderPackageCommoditiesService
         } finally {
             return $orderPackageCommodities ?? null;
         }
-    }
+    }*/
 
     public function createByWmsOrder($orderHeaders)
     {
         if(!$orderHeaders){ return [];}
         $this->更新OPC_根据WMS订单($orderHeaders);
-//        /** @var DataHandlerService $dataHandlerService */
-//        $dataHandlerService = app(DataHandlerService::class);
-//
-//        $order_packages = app(OrderPackageService::class)->getByWmsOrders($orderHeaders);
-//        $order_packages_logistic_number_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
-//
-//        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
-//        $commodity_owner_id_sku_map =  $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
-//
-//        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
-//        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
-//
-//        $order_packages_commodities = $this->getByWmsOrder($orderHeaders);
-//        $map = [];
-//        foreach ($order_packages_commodities as $item) {
-//            $key = ' commodity_id='.$item->commodity_id.' order_package_id'.$item->order_package_id.' amount='.$item->amount;
-//            $map[$key][] = $item;
-//        }
-//        $insert_params = [];
-//        foreach ($orderHeaders as $orderHeader) {
-//            $actAllocationDetails = $orderHeader->actAllocationDetails;
-//            $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['*','',null]);
-//            if(count($logistic_numbers) > 0){
-//                $params = $this->getParamsByActAllocationDetails($actAllocationDetails,
-//                    $order_packages_logistic_number_map,
-//                    $owner_code_map,
-//                    $commodity_owner_id_sku_map,
-//                    $logistic_numbers);
-//                foreach ($params as $key =>$param) {
-//                    $mapkey = ' commodity_id='.($param['commodity_id'] ?? '').' order_package_id'.($param['order_package_id'] ?? '').' amount='.($param['amount'] ?? '');
-//                    if(($map[$mapkey] ?? false) && count($map[$mapkey]) >0){
-//                        array_shift($map[$mapkey]);
-//                        unset($params[$key]);
-//                    }
-//                }
-//                $insert_params = array_merge($insert_params,$params);
-//                unset($params);
-//            }
-//        }
-//        if(count($insert_params) > 0){
-//            $this->create($insert_params);
-//        }
-//        unset($orderHeaders,$order_packages,$owner_code_map,$commodities,$insert_params);
     }
 
-    public function getParamsByActAllocationDetails($details,array $order_packages_logistic_number_map,array $owner_code_map,array $commodity_owner_id_sku_map,array $logistic_numbers){
-        /** @var DataHandlerService  $dataHandlerService */
-        $dataHandlerService =  app(DataHandlerService::class);
-        if(!$details)return [];
-        $params = [];
-        $create_at = Carbon::now()->format('Y-m-d H:i:s');
-        $updated_at = Carbon::now()->format('Y-m-d H:i:s');
-        foreach ($details as $actAllocationDetail) {
-            $pickToTraceID = $actAllocationDetail->picktotraceid;
-            if(in_array($pickToTraceID,$logistic_numbers)){
-                $orderPackage = $dataHandlerService->getKeyValue(['logistic_number'=>$pickToTraceID],$order_packages_logistic_number_map);
-                if(!$orderPackage)continue;
-                $owner = $dataHandlerService->getKeyValue(['code'=>$actAllocationDetail->customerid],$owner_code_map);
-                if(!$owner)continue;
-                $commodity = $dataHandlerService->getKeyValue(['owner_id'=>$owner->id,'sku'=>$actAllocationDetail->sku],$commodity_owner_id_sku_map);
-                if(!$commodity)continue;
-                $params[] = [
-                    'commodity_id' =>$commodity->id,
-                    'order_package_id' =>$orderPackage->id,
-                    'amount' => $actAllocationDetail->qty_each,
-                    'created_at' => $create_at
-                ];
-            }
-        }
-        unset($details,$order_packages_logistic_number_map,$owner_code_map,$commodity_owner_id_sku_map,$logistic_numbers);
-        return $params;
-    }
+//    public function getParamsByActAllocationDetails($details,array $order_packages_logistic_number_map,array $owner_code_map,array $commodity_owner_id_sku_map,array $logistic_numbers){
+//        /** @var DataHandlerService  $dataHandlerService */
+//        $dataHandlerService =  app(DataHandlerService::class);
+//        if(!$details)return [];
+//        $params = [];
+//        $create_at = Carbon::now()->format('Y-m-d H:i:s');
+//        $updated_at = Carbon::now()->format('Y-m-d H:i:s');
+//        foreach ($details as $actAllocationDetail) {
+//            $pickToTraceID = $actAllocationDetail->picktotraceid;
+//            if(in_array($pickToTraceID,$logistic_numbers)){
+//                $orderPackage = $dataHandlerService->getKeyValue(['logistic_number'=>$pickToTraceID],$order_packages_logistic_number_map);
+//                if(!$orderPackage)continue;
+//                $owner = $dataHandlerService->getKeyValue(['code'=>$actAllocationDetail->customerid],$owner_code_map);
+//                if(!$owner)continue;
+//                $commodity = $dataHandlerService->getKeyValue(['owner_id'=>$owner->id,'sku'=>$actAllocationDetail->sku],$commodity_owner_id_sku_map);
+//                if(!$commodity)continue;
+//                $params[] = [
+//                    'commodity_id' =>$commodity->id,
+//                    'order_package_id' =>$orderPackage->id,
+//                    'amount' => $actAllocationDetail->qty_each,
+//                    'created_at' => $create_at
+//                ];
+//            }
+//        }
+//        unset($details,$order_packages_logistic_number_map,$owner_code_map,$commodity_owner_id_sku_map,$logistic_numbers);
+//        return $params;
+//    }
 
     public function create(array $params){
         if(!$params){return [];}
@@ -244,97 +201,6 @@ class OrderPackageCommoditiesService
     public function updateByWmsOrder($orderHeaders){
         if(!$orderHeaders){return ;}
         $this->更新OPC_根据WMS订单($orderHeaders);
-//        /** @var DataHandlerService $dataHandlerService*/
-//        $dataHandlerService = app(DataHandlerService::class);
-//        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
-//        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
-//        $owners_id_map = $dataHandlerService->dataHeader(['id'],$owners);
-//        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
-//        $commodity_owner_id_sku_map = $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
-//
-//        $commodities_owner_code_code_map = [];
-//        foreach ($commodities as $commodity) {
-//            $owner = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owners_id_map);
-//            $commodities_owner_code_code_map[' owner_code='.$owner->code.' code='.$commodity->code] = $commodity;
-//        }
-//
-//        $order_nos = data_get($orderHeaders,'*.orderno');
-//        $order_package_commodities = OrderPackageCommodities::query()->with('package.order','commodity')
-//            ->whereHas('package.order',function($query) use ($order_nos){
-//                $query->whereIn('code',$order_nos);
-//            })->get();
-//
-//        $order_packages = OrderPackage::query()->with('order')->whereHas('order',function($query) use ($order_nos){
-//            $query->whereIn('code',$order_nos);
-//        })->get();
-//
-//        $order_package_logistic_numbers_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
-//        $order_no_map = [];
-//        foreach ($order_package_commodities as $order_package_commodity) {
-//            $order = $order_package_commodity->package->order;
-//            $order_no_map[$order->code][] = $order_package_commodity;
-//        }
-//
-//        $insertParams = [];
-//        $updateParams = [['id','order_package_id'.'commodity_id','amount','updated_at']];
-//        $updated_at = Carbon::now()->toDateTimeString();
-//        $created_at = Carbon::now()->toDateTimeString();
-//        foreach ($orderHeaders as $orderHeader) {
-//            $order_package_commodities = $order_no_map[$orderHeader->orderno] ?? false;
-//            $actAllocationDetails = $orderHeader->actAllocationDetails;
-//            $logistic_numbers = array_unique(array_diff(data_get($actAllocationDetails,'*.picktotraceid'),['','*',null])) ;
-//            if(!$order_package_commodities){
-//                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
-//                foreach ($params as $param) {
-//                    $insertParams[] = $param;
-//                }
-//                continue;
-//            }
-//            if($actAllocationDetails->count() > count($order_package_commodities)){
-//                $deleteKey = [];
-//                foreach ($actAllocationDetails as $key1=>$actAllocationDetail) {
-//                    foreach ( $order_package_commodities as $key=>$item) {
-//                        $commodity = $item->commodity;
-//                        if($actAllocationDetail->sku == $commodity->sku && $item->amount ==  $actAllocationDetail->qty_each){
-//                            unset($order_package_commodities[$key]);
-//                            unset($actAllocationDetails[$key1]);
-//                            $deleteKey[] = $key1;
-//                            break;
-//                        }else if($item ->sku == $commodity->sku && $item->amount !=  $actAllocationDetail->qty_each){
-//                            $updateParams[] = [
-//                                'id' => $item->id,
-//                                'commodity_id' => $commodity->id,
-//                                'amount' => $actAllocationDetail->qty_each,
-//                                'updated_at' => $updated_at
-//                            ];
-//                            $deleteKey[] = $key1;
-//                            unset($actAllocationDetails[$key1]);
-//                        }
-//                    }
-//                }
-//                $actAllocationDetails  =$actAllocationDetails->filter(function ($value, $key) use($deleteKey) {
-//                    return !in_array($key, $deleteKey);
-//                });
-//                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
-//                foreach ($params as $param) {
-//                    $insertParams[] = $param;
-//                }
-//                continue;
-//            }
-//        }
-//
-//        if(count($updateParams) > 0){
-//            $this->batchUpdate($updateParams);
-//        }
-//
-//        if(count($insertParams) > 0){
-//            try {
-//                $this->insert($insertParams);
-//                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities '. count($insertParams) .json_encode($insertParams));
-//            } catch (\Exception $e) {
-//                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities error'.json_encode($insertParams)."||".$e->getMessage().'||'.$e->getTraceAsString());
-//            }
-//        }
     }
 
     public function getByWmsOrder($orderHeaders){

+ 55 - 55
app/Services/OrderPackageService.php

@@ -28,7 +28,7 @@ class OrderPackageService
     public function createdByOrder($order)
     {
         /** @var OrderPackageCommoditiesService $orderPackageCommoditiesService */
-        $orderPackageCommoditiesService = app('orderPackageCommoditiesService');
+        $orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
         $oracleActAllocationDetails = OracleActAllocationDetails::query()->where('OrderNo', $order['code'])->get();
         $orderHeader = OracleDOCOrderHeader::query()->where('OrderNo', $order['code'])->first();
         $oracleDOCOrderDetail = OracleDOCOrderDetail::query()->where('OrderNo', $order['code'])->get();
@@ -105,40 +105,40 @@ class OrderPackageService
         }
         unset($oracleActAllocationDetails,$oracleDOCOrderDetail);
     }
-
-    public function updateOrderPackageInfo(Order $order)
-    {
-        $orderHeader = OracleDOCOrderHeader::where('orderNo', $order['code'])->first();
-        if ($orderHeader['oracleBASCode_codename_c'] == $order['wam_status']) {
-            return;
-        }
-        $orderPackages = OrderPackage::where('order_id', $order['id'])->get();
-        $orderPackageCommodities = OrderPackageCommodities::with('commodity')->whereIn('order_package_id', data_get($orderPackages, '*.id'))->get();
-        $actAllocationDetails = OracleActAllocationDetails::where('orderNo', $order['client_code'])->get();
-        if (count($orderPackageCommodities) < count($actAllocationDetails)) {
-            $actAllocationDetails = $actAllocationDetails->reject(function ($value, $key) use (&$orderPackageCommodities) {
-                $bool = false;
-                $count = 0;
-                $orderPackageCommodities->reject(function ($value1, $key1) use ($value, &$bool, $count) {
-                    if ($count > 0) {
-                        return false;
-                    }
-                    if ($value1->commodity['sku'] == $value['sku'] && $value1['amount'] == intval($value['qty'])) {
-                        $bool = true;
-                        $count++;
-                        return true;
-                    } else {
-                        return false;
-                    }
-                });
-                return $bool;
-            });
-        }
-        $orderPackageCommoditiesService = app('orderPackageCommoditiesService');
-        $orderPackageCommoditiesService->basedOnActAllocationDetail($order, $orderHeader, $actAllocationDetails);
-        $order['wam_status'] = $orderHeader['oracleBASCode_codename_c'];
-        $order->save();
-    }
+    // 需删除
+//    public function updateOrderPackageInfo(Order $order)
+//    {
+//        $orderHeader = OracleDOCOrderHeader::where('orderNo', $order['code'])->first();
+//        if ($orderHeader['oracleBASCode_codename_c'] == $order['wam_status']) {
+//            return;
+//        }
+//        $orderPackages = OrderPackage::where('order_id', $order['id'])->get();
+//        $orderPackageCommodities = OrderPackageCommodities::with('commodity')->whereIn('order_package_id', data_get($orderPackages, '*.id'))->get();
+//        $actAllocationDetails = OracleActAllocationDetails::where('orderNo', $order['client_code'])->get();
+//        if (count($orderPackageCommodities) < count($actAllocationDetails)) {
+//            $actAllocationDetails = $actAllocationDetails->reject(function ($value, $key) use (&$orderPackageCommodities) {
+//                $bool = false;
+//                $count = 0;
+//                $orderPackageCommodities->reject(function ($value1, $key1) use ($value, &$bool, $count) {
+//                    if ($count > 0) {
+//                        return false;
+//                    }
+//                    if ($value1->commodity['sku'] == $value['sku'] && $value1['amount'] == intval($value['qty'])) {
+//                        $bool = true;
+//                        $count++;
+//                        return true;
+//                    } else {
+//                        return false;
+//                    }
+//                });
+//                return $bool;
+//            });
+//        }
+//        $orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
+//        $orderPackageCommoditiesService->basedOnActAllocationDetail($order, $orderHeader, $actAllocationDetails);
+//        $order['wam_status'] = $orderHeader['oracleBASCode_codename_c'];
+//        $order->save();
+//    }
     /**
      * @param string $logistic_number
      * @param array $values
@@ -150,7 +150,7 @@ class OrderPackageService
         if ($package)return $package;
 
         /** @var OrderService */
-        $order = app('orderService')->logisticNumberFirstOrCreateOrder($logistic_number);
+        $order = app('OrderService')->logisticNumberFirstOrCreateOrder($logistic_number);
         if ($order) $values["order_id"] = $order->id;
 
         $values["logistic_number"] = $logistic_number;
@@ -237,25 +237,25 @@ class OrderPackageService
         return $params;
     }
 
-    public function getUpdateParamsByOrderHeader($orderHeader,$order,$orderPackages)
-    {
-        $updated_at = Carbon::now()->format('Y-m-d H:i:s');
-        /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService = app(DataHandlerService::class);
-        $wms_logistic_number =  app(OracleDOCOrderHeaderService::class)->getLogisticNumbers($orderHeader);
-        $order_packages  = $orderPackages->where('order_id',$order->id)->get();
-        $was__logistic_number = data_get($order_packages,'*.logistic_number');
-        $arr1=  array_diff($was__logistic_number,$wms_logistic_number);
-        $arr2=  array_diff($wms_logistic_number,$was__logistic_number);
-        if(count($arr2) > 0 && count($arr1) == 0){
-            return [
-                'id'=>$order_packages->first()->id,
-                'logistic_number' => $arr1[0],
-                'updated_at'=> $updated_at,
-            ];
-        }
-        return null;
-    }
+//    public function getUpdateParamsByOrderHeader($orderHeader,$order,$orderPackages)
+//    {
+//        $updated_at = Carbon::now()->format('Y-m-d H:i:s');
+//        /** @var DataHandlerService $dataHandlerService */
+//        $dataHandlerService = app(DataHandlerService::class);
+//        $wms_logistic_number =  app(OracleDOCOrderHeaderService::class)->getLogisticNumbers($orderHeader);
+//        $order_packages  = $orderPackages->where('order_id',$order->id)->get();
+//        $was__logistic_number = data_get($order_packages,'*.logistic_number');
+//        $arr1=  array_diff($was__logistic_number,$wms_logistic_number);
+//        $arr2=  array_diff($wms_logistic_number,$was__logistic_number);
+//        if(count($arr2) > 0 && count($arr1) == 0){
+//            return [
+//                'id'=>$order_packages->first()->id,
+//                'logistic_number' => $arr1[0],
+//                'updated_at'=> $updated_at,
+//            ];
+//        }
+//        return null;
+//    }
 
     public function updateOrderPackageByWmsOrder($orderHeaders){
         /** @var OrderPackageCommoditiesService $orderPackageCommoditiesService */

+ 46 - 50
app/Services/OrderService.php

@@ -16,6 +16,7 @@ use App\RejectedBill;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\Shop;
+use App\Warehouse;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Support\Facades\App;
@@ -193,7 +194,7 @@ class OrderService
         $checkData = $params['data'] ?? null;
         if ($checktime_start || $checktime_end){
             /** @var  OracleActAllocationDetailService */
-            $ordernos = app('oracleActAllocationDetailService')
+            $ordernos = app('OracleActAllocationDetailService')
                 ->getOrderno(['checktime_start'=>$checktime_start,'checktime_end'=>$checktime_end,
                     'paginate'=>$paginate,'page'=>$page]);
             $params['ordernos'] = $ordernos;
@@ -319,7 +320,7 @@ class OrderService
     public function findOrCreateByClientCode($clientCode)
     {
         /** @var OrderPackageService $orderPackageService */
-        $orderPackageService = app('orderPackageService');
+        $orderPackageService = app('OrderPackageService');
         $order = Order::query()->where('client_code', $clientCode)->first();
 
         $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
@@ -424,7 +425,7 @@ class OrderService
          * @var OracleActAllocationDetailService
          * @var OracleActAllocationDetails $actAllocationDetail
          */
-        $actAllocationDetail = app('oracleActAllocationDetailService')->first(['picktotraceid' => $logistic_number]);
+        $actAllocationDetail = app('OracleActAllocationDetailService')->first(['picktotraceid' => $logistic_number]);
         if ($actAllocationDetail) {
             $order = $this->first(['code' => $actAllocationDetail->orderno]);
             if ($order) return $order;
@@ -434,27 +435,27 @@ class OrderService
             }]);
             $orderHeader = $actAllocationDetail->oracleDocOrderHeader ?? null;
         } else {
-            $orderHeader = app('oracleDocOrderHeaderService')->first(['soreference5' => $logistic_number]);
+            $orderHeader = app('OracleDocOrderHeaderService')->first(['soreference5' => $logistic_number]);
         }
         if ($orderHeader == null) return null;
         $order = $this->first(['code'=>$orderHeader->orderno]);
         if ($order) return $order;
         /** @var OwnerService */
-        $owner = app('ownerService')->first(['code' => $orderHeader->customerid]);
+        $owner = app('OwnerService')->first(['code' => $orderHeader->customerid]);
         if (!$owner) {
             $orderHeader->load('oracleBASCustomer');
             $customer_name = $orderHeader->oracleBASCustomer ? $orderHeader->oracleBASCustomer->descr_c : null;
             /** @var OwnerService */
-            if ($customer_name) $owner = app('ownerService')->create(['code' => $orderHeader->customerid, 'name' => $customer_name]);
+            if ($customer_name) $owner = app('OwnerService')->create(['code' => $orderHeader->customerid, 'name' => $customer_name]);
         }
 
         $shop = null;
         $shop_name = $orderHeader->issuepartyname;
         if ($shop_name && $owner) {
             /** @var ShopService */
-            $shop = app('shopService')->firstOrCreate(['name' => $shop_name, 'owner_id' => $owner->id]);
+            $shop = app('ShopService')->firstOrCreate(['name' => $shop_name, 'owner_id' => $owner->id]);
         }
-        $logistics = app('logisticService')->firstOrCreate(['code' => $orderHeader->userdefine1],
+        $logistics = app('LogisticService')->firstOrCreate(['code' => $orderHeader->userdefine1],
             ['code' => $orderHeader->userdefine1, 'name' => $orderHeader->carriername]);
         return Order::query()->create([
             'code' => $orderHeader->orderno,
@@ -480,20 +481,26 @@ class OrderService
     public function createByWmsOrder($orderHeaders)
     {
         if($orderHeaders->isEmpty())return null;
-        /** @var OwnerService $ownerService */
-        /** @var LogisticService $logisticService */
-        /** @var ShopService $shopService */
-        /** @var OrderPackageService $orderPackageService */
+        /**
+         * @var OwnerService $ownerService
+         * @var WarehouseService $warehouseService
+         * @var LogisticService $logisticService
+         * @var ShopService $shopService
+         * @var OrderPackageService $orderPackageService
+         */
+        $warehouseService =app(WarehouseService::class);
         $ownerService = app(OwnerService::class);
         $logisticService = app(LogisticService::class);
         $shopService = app(ShopService::class);
         $orderPackageService = app(OrderPackageService::class);
 
-        $owners_code_map = [];$logistics_code_map = [];$shop_name_map=[]; $owners_id_map = [];
+        $owners_code_map = [];$logistics_code_map = [];$shop_name_map=[]; $owners_id_map = [];$warehouses_code_map =[];
 
         $owners = $ownerService->getByWmsOrders($orderHeaders);
         $logistics = $logisticService->getByWmsOrders($orderHeaders);
         $shops = $shopService->getByWmsOrders($orderHeaders);
+        $warehouses=$warehouseService->getByWmsOrders($orderHeaders);
+
 
         foreach ($owners as $owner) {
             $owners_code_map[$owner->code] = $owner;
@@ -508,7 +515,13 @@ class OrderService
             $key = ' owner_code='.$owner_code.' name='.$shop->name;
             $shop_name_map[$key] = $shop;
         }
-        $insert_params = $this->getParamsByOrderHeader($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map);
+
+        foreach ($warehouses as $warehouse) {
+            $warehouses_code_map[$warehouse->code] = $warehouse;
+        }
+
+        $insert_params = $this->getParamsByOrderHeader($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map);
+
         if(count($insert_params)> 0){
             $this->create($insert_params);
         }
@@ -519,26 +532,21 @@ class OrderService
     }
 
 
-    public function getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map)
+    public function getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map)
     {
         $params = [];
-        // 自提 转 新杰物流
         $orders = Order::query()->whereIn('code',data_get($orderHeaders_map,'*.orderno'))->get();
         $order_code_map = [];
         foreach ($orders as $order) {
             $order_code_map[$order->code]= $order;
         }
-        $logistic_XJWL = Logistic::query()->where('code' ,'XJWL')->first();
         foreach ($orderHeaders_map as $orderHeader) {
              if($order_code_map[$orderHeader->orderno] ?? false)continue;
             $owner = $owners_code_map[$orderHeader->customerid] ?? null;
             $logistic =  $logistics_code_map[$orderHeader->userdefine1] ?? null;
+            $warehouse=$warehouses_code_map[$orderHeader->warehouseid] ?? null;
             $key = ' owner_code='.$orderHeader->customerid.' name='.$orderHeader->issuepartyname ?? '';
             $shop = $shop_name_map[$key] ?? '';
-            // 自提 转 新杰物流
-            if($logistic!= null && $logistic->name == '自提'){
-                $logistic = $logistic_XJWL;
-            }
             $params[] = [
                 'code' => $orderHeader->orderno,
                 'owner_id' => $owner->id ?? null,
@@ -553,7 +561,8 @@ class OrderService
                 'district' => $orderHeader->c_district,
                 'address' => $orderHeader->c_address1,
                 'client_code' => $orderHeader->soreference1,
-                'wms_edittime' =>$orderHeader->edittime
+                'wms_edittime' =>$orderHeader->edittime,
+                'warehouse_id' =>$warehouse->id??''
             ];
         }
         return $params;
@@ -590,26 +599,23 @@ class OrderService
         $shops = app(ShopService::class)->getByWmsOrders($orderHeaders);
         $shops_map = $dataHandlerService->dataHeader(['owner_id','name'],$shops);
 
+        $warehouses = app(WarehouseService::class)->getByWmsOrders($orderHeaders);
+        $warehouses_map = $dataHandlerService->dataHeader(['code'],$warehouses);
         $updateParams = [[
-            'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime'
+            'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime','warehouse_id'
         ]];
         $updated_at = Carbon::now()->toDateTimeString();
-        // 新杰物流
-        $logistic_XJWL = Logistic::query()->where('code','XJWL')->first();
         foreach ($orderHeaders as $orderHeader) {
             $order =$dataHandlerService->getKeyValue(['code'=>$orderHeader->orderno],$orders_code_map);
             if(!$order){continue;}
             $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1] ,$logistics_code_map);
-            // 自提 转 新杰物流
-            if($logistic != '' && $logistic->name == '自提'){
-                $logistic = $logistic_XJWL;
-            }
             $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid] ,$owner_code_map);
             $shop = $dataHandlerService->getKeyValue(['owner_id'=>$owner->id ?? '','name'=> $orderHeader->issuepartyname] ,$shops_map);
+            $warehouse=$dataHandlerService->getKeyValue(['code'=>$orderHeader->warehouseid],$warehouses_map);
             $shop_id = $shop->id ?? null;
             $logistic_id = $logistic->id ?? null;
             $owner_id = $owner->id ?? null;
-
+            $warehouse_id=$warehouse->id??null;
             if($order->wms_status != $orderHeader->oracleBASCode_codename_c ||
                 $order->logistic_id != $logistic_id ||
                 $order->shop_id != $shop_id ||
@@ -621,7 +627,8 @@ class OrderService
                 $order->district != $orderHeader->c_district ||
                 $order->address != $orderHeader->c_address1 ||
                 $order->client_code != $orderHeader->soreference1 ||
-                $order->wms_edittime != $orderHeader->edittime){
+                $order->wms_edittime != $orderHeader->edittime||
+                $order->warehouse_id!=$warehouse_id){
                 $updateParams[] = [
                     'id'=>$order->id,
                     'owner_id' => $owner_id,
@@ -636,7 +643,8 @@ class OrderService
                     'address' => $orderHeader->c_address1,
                     'client_code' => $orderHeader->soreference1,
                     'updated_at' =>$updated_at,
-                    'wms_edittime' =>$orderHeader->edittime];
+                    'wms_edittime' =>$orderHeader->edittime,
+                    'warehouse_id'=>$warehouse_id];
             }
         }
         if(count($updateParams) > 1){
@@ -667,31 +675,17 @@ class OrderService
         });
     }
 
-    public function getOrderInfoByCodes($orderNos)
-    {
-        return Order::query()->with('packages.commodities.commodity')->whereIn('code',$orderNos)->get();
-    }
-
-    public function getOrderInfoByWmsOrder($orderHeaders)
-    {
-        return $this->getOrderInfoByCodes(data_get($orderHeaders,'*.orderno'));
-    }
-
     public function getParamByOrderHeader($orderHeader)
     {
-        if($orderHeader->userdefine1 == 'ZT'){
-            $logistic = Logistic::query()->where('code','XJWL')->first();
-
-        }else{
-            $logistic = Logistic::query()->where('code',$orderHeader->userdefine1)->first();
-        }
+        $logistic = Logistic::query()->where('code',$orderHeader->userdefine1)->first();
         $owner = Owner::query()->where('code',$orderHeader->customerid ?? '')->first();
         $shop = Shop::query()->where('name',$orderHeader->issuepartyname)->where('owner_id',$owner->id)->first();
+        $warehouse = app('WarehouseService')->firstOrCreate(["code"=>$orderHeader->warehouseid],["code"=>$orderHeader->warehouseid,"name"=>$orderHeader->warehouseid]);
         return [
             'code' =>$orderHeader->orderno,
             'owner_id' =>$owner->id,
             'shop_id' =>$shop->id,
-            'logistic_id' => $logistic->id,
+            'logistic_id' => $logistic->id ??'',
             'consignee_name' =>  $orderHeader->c_contact,
             'consignee_phone' =>  $orderHeader->c_tel2,
             'province' =>$orderHeader->c_province,
@@ -701,7 +695,9 @@ class OrderService
             'client_code' =>$orderHeader->soreference1,
             'wms_edittime' => $orderHeader->edittime,
             'wms_status' => $orderHeader->oracleBASCode_codename_c ?? '',
-            'update_at' => Carbon::now()->format('Y-m-d H:i:s')
+            'updated_at' => (string)Carbon::now()->format('Y-m-d H:i:s'),
+            'created_at' => $orderHeader->addtime,
+            'warehouse_id' => $warehouse->id ?? ''
         ];
     }
 

+ 42 - 14
app/Services/OrderTrackingService.php

@@ -3,6 +3,7 @@
 namespace App\Services;
 
 use App\Exports\Export;
+use App\OracleBasSKU;
 use App\OracleDOCOrderHeader;
 use App\Order;
 use App\OrderPackageCommodities;
@@ -13,7 +14,6 @@ use App\Services\common\QueryService;
 use Illuminate\Support\Carbon;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
-use Maatwebsite\Excel\Facades\Excel;
 
 class OrderTrackingService
 {
@@ -28,13 +28,15 @@ class OrderTrackingService
     public function getQuery($params)
     {
         $user = Auth::user();
-        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
+        $owner_ids = $user ? app('UserService')->getPermittingOwnerIds($user) : [];
         if ($params['owner_id'] ?? false) {
             $ownerids = explode(",", $params['owner_id']);
             $owner_ids = array_intersect($owner_ids, $ownerids);
         }
         $query = OrderTracking::query()->with(['owner', 'commodities' => function ($query) {
-            $query->with(['commodity', 'package.order.logistic']);
+            $query->with(['commodity'=>function($query){
+                $query->with('barcodes');
+            }, 'package.order.logistic']);
         },])->whereHas('owner', function ($query) use ($owner_ids) {
             $query->whereIn('id', $owner_ids); //货主
         });
@@ -143,8 +145,9 @@ class OrderTrackingService
     public function trackingWmsOrderOnCreate($startData){
         /** @var OrderService $orderSerivce */
         $orderService = app(OrderService::class);
-        /** @var OracleDOCOrderHeader $orderHeaders */
+        /** @var Collection $orderHeaders */
         $orderHeaders = app(OracleDOCOrderHeaderService::class)->getWmsOrderOnStartDateCreate($startData);
+        $this->customizedOperation($orderHeaders);
         $orderService->createByWmsOrder($orderHeaders);
         $this->createByWmsOrderHeader($orderHeaders);
     }
@@ -152,8 +155,9 @@ class OrderTrackingService
     public function trackingWmsOrderOnEdit($startData){
         /** @var OrderService $orderService */
         $orderService = app(OrderService::class);
-        /** @var OracleDOCOrderHeader $orderHeaders */
+        /** @var Collection $orderHeaders */
         $orderHeaders = app(OracleDOCOrderHeaderService::class)->getWmsOrderOnStartDateEdit($startData);
+        $this->customizedOperation($orderHeaders);
         $orderService->updateByWmsOrders($orderHeaders);
         $this->updateByWmsOrderHeaders($orderHeaders);
     }
@@ -165,6 +169,18 @@ class OrderTrackingService
         return $this->updateOrderTracingsByOrderIds($order_id,$param,$value);
     }
 
+    /**
+     * @param Collection $orderHeaders
+     */
+    public function customizedOperation(&$orderHeaders) // 对追踪件的特定操作
+    {
+        $orderHeaders->each(function ($orderHeader) {
+            if($orderHeader->userdefine1 ==='ZT'){
+                $orderHeader->userdefine1 = 'XJWL';
+            }
+        });
+    }
+
     public function updateOrderTracingsByOrderIds($orderId,$param,$value)
     {
         $bool = null;
@@ -237,7 +253,7 @@ class OrderTrackingService
             if(preg_match('/^O[\d]/',$order_header['soreference1'] ?? '') > 0){
                 $web_order_number = $order_header['soreference1'];
             }
-
+            $param = $this->getParamsByOrderHeaderAndOrder($order_header,$order);
             $owner = $dataService->getKeyValue(['id'=>$order->owner_id],$owner_id_map);
             $basSkU = $dataService->getKeyValue(['customerid'=>$owner->code,'sku'=>$item->commodity->sku],$BasSKUs_code_sku_map);
             $gross_weight = round($basSkU->grossweight * $item->amount, 2);
@@ -252,7 +268,8 @@ class OrderTrackingService
                 'pick_up_at' => $order_header->lastshipmenttime, // 提货时间,
                 'web_order_number' => $web_order_number,
                 'gross_weight'=> $gross_weight,
-                'bulk'=> $bulk
+                'bulk'=> $bulk,
+                'planning_sent_at' => $param['planning_sent_at'] ?? ''
             ];
         }
 
@@ -282,7 +299,6 @@ class OrderTrackingService
         foreach ($orderTrackings as $orderTracking) {
             $order_tracking_id_map[$orderTracking->order_package_commodity_id] = $orderTracking;
         }
-
         $order_package_commodity_order_code_map = [];
         $order_code_map = [];
         foreach ($order_package_commodities as $order_package_commodity) {
@@ -291,7 +307,6 @@ class OrderTrackingService
             $order_code_map[$order->code] = $order;
             $order_package_commodity_order_code_map[$order->code][] = $order_package_commodity;
         }
-
         $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
         $owner_code_map = $basSKUs_data = $dataService->dataHeader(['code'],$owners);
 
@@ -299,7 +314,7 @@ class OrderTrackingService
         $BasSKUs_code_sku_map = $dataService->dataHeader(['customerid','sku'],$BasSKUs);
 
         $update_params = [];
-        $update_params[0] =['id','client','pick_up_at','order_remark','gross_weight','bulk'];
+        $update_params[0] =['id','client','pick_up_at','order_remark','gross_weight','bulk','planning_sent_at'];
         foreach ($orderHeaders as $orderHeader) {
             if($orderHeader->sostatus == '90'){continue;}
             $order_package_commodity_list = $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
@@ -375,8 +390,8 @@ class OrderTrackingService
      * @param Order $order
      * @return array
      */
-    public function getParamsByOrderHeaderAndOrder($orderHeader,$order){
-
+    public function getParamsByOrderHeaderAndOrder($orderHeader,$order)
+    {
         $client = null;
         $order_remark = null;
         if ($orderHeader['notes'] ?? false) {
@@ -398,7 +413,7 @@ class OrderTrackingService
         if(isset($pick_up_at)){
              $logisticTiming = app(LogisticTimingService::class)->findByParams($orderHeader['c_city']??'',$orderHeader['c_province']??'',$order->logistic_id);
              if($logisticTiming){
-                 $planning_sent_at = Carbon::create($planning_sent_at)->addDays($logisticTiming->days_at_working);
+                 $planning_sent_at = Carbon::parse((string)$planning_sent_at)->addDays($logisticTiming->days_at_working);
              }
         }
         return [
@@ -408,7 +423,7 @@ class OrderTrackingService
             'order_remark' => $order_remark,
             'pick_up_at' => $orderHeader->lastshipmenttime, // 提货时间
             'web_order_number' =>$web_order_number,
-            'planning_sent_at' => $planning_sent_at
+            'planning_sent_at' => (string)$planning_sent_at
         ];
     }
 
@@ -450,4 +465,17 @@ class OrderTrackingService
         }
     }
 
+    /**
+     * @param OracleBasSKU $basSkU
+     * @param OrderPackageCommodities $orderPackageCommodity
+     * @return array
+     */
+    public function getGrossWeightAndBulk($basSkU,$orderPackageCommodity)
+    {
+        return [
+            'gross_weight' =>round($basSkU->grossweight * $orderPackageCommodity->amount, 2),
+            'bulk' =>round($basSkU->cube * $orderPackageCommodity->amount, 2),
+        ];
+    }
+
 }

+ 10 - 3
app/Services/OwnerService.php

@@ -54,10 +54,17 @@ Class OwnerService
         return $owners;
     }
 
-    public function first(array $params){
+    public function first(array $params, array $rules =[]){
         $owner = Owner::query();
         foreach ($params as $column => $value){
-            $owner->where($column, $value);
+            if (!isset($rules[$column]))$owner->where($column, $value);
+            else{
+                switch ($rules[$column]){
+                    case "or":
+                        $owner->orWhere($column, $value);
+                        break;
+                }
+            }
         }
         return $owner->first();
     }
@@ -127,7 +134,7 @@ Class OwnerService
 
     public function getAuthorizedOwners(){
         $user = Auth::user();
-        return Owner::query()->whereIn('id',$user->getPermittingOwnerIdsAttribute()??[])->get();
+        return Owner::query()->whereIn('id',app('UserService')->getPermittingOwnerIds($user)??[])->get();
     }
 
 }

+ 1 - 1
app/Services/PackageService.php

@@ -59,4 +59,4 @@ Class PackageService
         ->sql();
     }
 
-}
+}

+ 4 - 4
app/Services/PackageStatisticsService.php

@@ -1,6 +1,6 @@
-<?php 
+<?php
 
-namespace App\Services; 
+namespace App\Services;
 
 use App\OrderPackage;
 use App\Services\common\QueryService;
@@ -15,7 +15,7 @@ Class PackageStatisticsService
      * @return Builder
      */
     private function conditionQuery(array $params){
-        $ownerIds = Auth::user()->getPermittingOwnerIdsAttribute();
+        $ownerIds = app('UserService')->getPermittingOwnerIds(auth()->user());
         $query = DB::table('order_packages')->select(DB::raw('COUNT(*) AS count'))
             ->whereIn('owner_id',$ownerIds)
             ->whereNotNull('logistic_id')
@@ -47,4 +47,4 @@ Class PackageStatisticsService
             ->get();
     }
 
-}
+}

+ 16 - 15
app/Services/RejectedBillService.php

@@ -30,26 +30,27 @@ Class RejectedBillService
     public function syncOrderIssue($rejectedBill)
     {
         $orderIssue = $rejectedBill->orderIssue()->first();
-        if(!isset($orderIssue)){
-            if(isset($rejectedBill->order_number) && trim($rejectedBill->order_number) != ''){
-                $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($rejectedBill){
-                    $query->where('client_code',$rejectedBill->order_number);
-                })->first();
-            }
-            if(isset($rejectedBill->logistic_number_return) && !isset($orderIssue)){
-                $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
-                    $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
-                })->first();
+        if($rejectedBill['logistic_number'] === '原单退回'){   // 原单退回
+            $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($rejectedBill){
+                $query->where('client_code',$rejectedBill['order_number']);
+            })->first();
+        }
+        if(!isset($orderIssue)){ // 有对应的问题发货订单
+            $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
+                $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
+            })->first();
 //                $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
 //                    $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
 //                })->first();
-                if(!isset($orderHeader))return;
-                $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($orderHeader){
-                    $query->where('code',$orderHeader->orderno);
-                })->first();
-            }
+            if(!isset($orderHeader))return;
+            $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($orderHeader){
+                $query->where('code',$orderHeader->orderno);
+            })->first();
         }
         if(isset($orderIssue)){
+            // 更新问题件的退回单号
+            if($orderIssue['logistic_number_return']!=$rejectedBill['logistic_number_return'])
+                $orderIssue->update(['logistic_number_return'=>$rejectedBill['logistic_number_return']]);
             //确认问题件有的时候需要更新状态和提示
             $orderIssue->同步退单状态();
             $orderIssue->update(['is_new_rejecting' => '有']);

+ 2 - 2
app/Services/RejectedService.php

@@ -21,8 +21,8 @@ class RejectedService
     private function conditionQuery(array $param)
     {
         $user = Auth::user();
-        $rejectedBills = RejectedBill::query()->with('user','owner', 'logistic', 'items')->orderBy('rejected_bills.id', 'desc')->whereIn('rejected_bills.id_owner',
-            $user ? $user->getPermittingOwnerIdsAttribute() : []);
+        $rejectedBills = RejectedBill::query()->with('user','owner', 'logistic', 'items.quality')->orderBy('rejected_bills.id', 'desc')->whereIn('rejected_bills.id_owner',
+            $user ? app('UserService')->getPermittingOwnerIds($user) : []);
         $columnQueryRules = [
             'created_at_start' => ['alias' => 'created_at', 'startDate' => ' 00:00:00'],
             'created_at_end' => ['alias' => 'created_at', 'endDate' => ' 23:59:59'],

+ 10 - 53
app/Services/ShopService.php

@@ -25,71 +25,28 @@ class ShopService
     {
         return app(BatchUpdateService::class)->batchUpdate('shops',$params);
     }
-    public function 根据追踪的WMS订单返回商铺($WMSOrderHeaders, $owners = null)
-    {
-        if ($owners == null) {
-            /** @var $ownerService OwnerService */
-            $ownerService = app('ownerService');
-            $owners = $ownerService->获取订单跟踪的货主();
-        }
-        if(count($WMSOrderHeaders) == 0){
-            return [];
-        }
-        $issuePartyNames = [];
-        foreach ($WMSOrderHeaders as $WMSOrderHeader) {
-            $issuePartyNames[$WMSOrderHeader['issuepartyname']] = $WMSOrderHeader;
-        }
-        $issuePartyNames = array_unique($issuePartyNames);
-        $issuePartyNames = array_diff($issuePartyNames,['','*',null]);
-
-        $shops = Shop::query()->whereIn('name',array_keys($issuePartyNames))->get();
-        $insert_params = [];
-
-        if (count($shops) < count($issuePartyNames)) {
-            $shopNames = data_get($shops, '*.name');
-            $shopDiff = array_diff($issuePartyNames, $shopNames);
-            foreach ($shopDiff as $key=>$item) {
-                if($key === '' ){
-                    continue;
-                }
-                $owner = $owners->where('code', $item['customerid'])->first();
-                if($owner === null || $item['issuepartyname'] ?? false)
-                    continue;
-                array_push($insert_params,['owner_id' => $owner['id'], 'name' => $item['issuepartyname']]);
-            }
-        }
-        try {
-            if(count($insert_params) > 0){
-                Shop::query()->insert($insert_params);
-                LogService::log(__METHOD__, __FUNCTION__, '批量创建 shop' .json_encode($insert_params));
-            }
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__, '创建创建 shop error' .json_encode($insert_params) . $e->getMessage(),$e->getTraceAsString());
-        }
-        return Shop::query()->whereIn('name',array_keys($issuePartyNames))->get();
-    }
 
-    public function getByWmsOrders($orderHeaders){
-        //issuepartyname
+    public function getByWmsOrders($orderHeaders)
+    {    //issuepartyname
         $maps = [];
         foreach ($orderHeaders as $orderHeader) {
             $value = ['owner_code'=>$orderHeader->customerid,'issuepartyname'=>$orderHeader->issuepartyname];
-            if(!in_array($value,$maps)){
+            if(!in_array($value,$maps))
                 $maps[] = $value;
-            }
         }
-        $issuepartynames = array_diff(array_unique(data_get($maps,'*.issuepartyname')),['','*',null])  ;
-        $shops = Shop::query()
-            ->whereIn('name',$issuepartynames)
-            ->get();
+        $issuepartynames = array_diff(array_unique(data_get($maps,'*.issuepartyname')),['','*',null]);
+        $owner_codes = array_diff(array_unique(data_get($maps,'*.owner_code')),['','*',null]);
+        $shops = Shop::query()->with('owner')
+            ->whereHas('owner',function($query)use($owner_codes){
+                $query->whereIn('code',$owner_codes);
+            })->whereIn('name',$issuepartynames)->get();
         if($shops->count() < count($issuepartynames)){
             $shops_code = data_get($shops,'*.name');
             $issuepartynames = array_diff($issuepartynames,$shops_code);
             $params = [];
             foreach ($maps as $item){
-               if(in_array($item['issuepartyname'],$issuepartynames)){
+               if(in_array($item['issuepartyname'],$issuepartynames))
                    $params[] = $item;
-               }
             }
             $shops_list = $this->createByNameAndOwnerCode($params);
             $shops->concat($shops_list);

+ 32 - 0
app/Services/UserService.php

@@ -0,0 +1,32 @@
+<?php
+
+
+namespace App\Services;
+
+
+use App\Authority;
+use App\Owner;
+use App\User;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Gate;
+
+class UserService
+{
+    /** @var CacheService $cacheService */
+    private $cacheService;
+    function __construct(){
+        $this->cacheService = app('CacheService');
+    }
+
+    function hasRoles(User $user, $roles){
+        $thisRoles=$this->cacheService->getOrExecute("user{$user['id']}->roles",function()use($user){
+            return $user->roles;
+        });
+        return !!$roles->intersect($thisRoles)->count();
+    }
+    function getPermittingOwnerIds($user){
+        return $this->cacheService->getOrExecute("user{$user['id']}->getPermittingOwnerIds",function()use($user){
+            return $user->getPermittingOwnerIdsAttribute();
+        });
+    }
+}

+ 41 - 0
app/Services/WarehouseService.php

@@ -2,11 +2,16 @@
 
 namespace App\Services;
 
+use App\OracleBasCustomer;
 use App\Owner;
 use App\Warehouse;
+use Illuminate\Support\Collection;
 use Carbon\Carbon;
 
 Class WarehouseService
+{
+    public function firstOrCreate(array $params, array $values = null){
+        if ($values)return Warehouse::query()->firstOrCreate($params,$values);
 {
     public function firstOrCreate(array $params, array $values = null)
     {
@@ -14,6 +19,42 @@ Class WarehouseService
         return Warehouse::query()->firstOrCreate($params);
     }
 
+    public function getByWmsOrders($orderHeaders)
+    {
+        $wareHouse_Ids=array_diff(array_unique(data_get($orderHeaders,'*.warehouseid')),['',' ','*',null]);
+        $wareHouses=Warehouse::query()->whereIn('code',$wareHouse_Ids)->get();
+        if(count($wareHouse_Ids)>$wareHouses->count()){
+            $需要添加_仓库编码=[];
+            foreach ($wareHouse_Ids as $warehouse_id) {
+                if($wareHouses->where('code')->count()==0){
+                    $需要添加_仓库编码[]=$warehouse_id;
+                }
+            }
+            $create_wareHouse=$this->syncWmsWareHouse($需要添加_仓库编码);
+            $wareHouses->concat($create_wareHouse);
+        }
+        return $wareHouses;
+    }
+
+    public function syncWmsWareHouse($warehouse_ids)
+    {
+        $collet = new Collection();
+        if(!$warehouse_ids)return null;
+        /** @var Collection $oracleBasCustomers */
+        $oracleBasCustomers=app(OracleBasCustomerService::class)->getWareHouse($warehouse_ids);
+        $warehouses=Warehouse::query()->where('code',data_get($oracleBasCustomers,'*.CustomerID'))->get();
+        $oracleBasCustomers=$oracleBasCustomers->filter(function($oracleBasCustomer)use($warehouses){
+            return $warehouses->where('code',$oracleBasCustomer->warehouseid)->count()>0;
+        });
+        foreach ($oracleBasCustomers as $oracleBasCustomer){
+            $wereHouse=Warehouse::query()->create([
+                'code'=>$oracleBasCustomer->customerid,
+                'name'=>$oracleBasCustomer->descr_c
+            ]);
+            $collet->push($wereHouse);
+        }
+        return  $collet;
+    }
     public function getByWms($asnHerders)
     {
         $warehouseids = array_unique(data_get($asnHerders, '*.warehouseid'));

+ 6 - 0
app/Shop.php

@@ -11,4 +11,10 @@ class Shop extends Model
     use ModelTimeFormat;
 
     protected $fillable = ['name','owner_id'];
+
+    public function owner()
+    {
+        return $this->belongsTo(Owner::class);
+    }
+
 }

+ 9 - 8
app/User.php

@@ -2,6 +2,7 @@
 
 namespace App;
 
+use App\Services\UserService;
 use Carbon\Carbon;
 use Illuminate\Notifications\Notifiable;
 use Illuminate\Contracts\Auth\MustVerifyEmail;
@@ -44,9 +45,9 @@ class User extends Authenticatable
     protected $casts = [
         'email_verified_at' => 'datetime',
     ];
-    function hasRole($roles){
-        return !!$roles->intersect($this->roles()->get())->count();
-    }
+//    function hasRole($roles){
+//        return !!$roles->intersect($this->roles()->get())->count();
+//    }
     function isSuperAdmin(){
         $superAdmins=config("users.superAdmin");
         foreach ($superAdmins as $superAdmin){
@@ -92,14 +93,14 @@ class User extends Authenticatable
 
     function authorities(){
         $authorities = new Collection([]);
-        $this->roles()->each(function ($role)use(&$authorities){
-            if($role->authorities()->get()->isNotEmpty()){
+        $user=User::query()->where('id',$this['id'])->with('roles.authorities')->first();
+        $user->roles->each(function ($role)use(&$authorities){
+            if($role->authorities){
                 if(!$authorities){
-                    $authorities=$role->authorities()->get();
+                    $authorities=$role->authorities;
                 }else{
-                    $authorities=$authorities->merge($role->authorities()->get());
+                    $authorities=$authorities->merge($role->authorities);
                 }
-
             }
         });
         return $authorities;

+ 2 - 2
app/Waybill.php

@@ -2,6 +2,7 @@
 
 namespace App;
 
+use App\Services\UserService;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
@@ -79,8 +80,7 @@ class Waybill extends Model
      * @return Builder
      */
     public static function filterAuthorities(){
-        $user = Auth::user();
-        $owner_ids=$user->getPermittingOwnerIdsAttribute();
+        $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
         return (new static)->newQuery()->whereIn('owner_id',$owner_ids);
     }
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 182 - 185
composer.lock


+ 3 - 0
config/cache.php

@@ -4,6 +4,9 @@ use Illuminate\Support\Str;
 
 return [
 
+    'expirations'=>[
+        'default'=>10,
+    ],
     /*
     |--------------------------------------------------------------------------
     | Default Cache Store

+ 1 - 0
config/stores.php

@@ -5,6 +5,7 @@ return [
         "笕尚" => "JIANSHANG",
         "幼岚" => "ALLBLU",
         "淳钲" => "CHUNZHENG",
+        "宝时" => "BAOSHI",
     ],
     "types" => [
         'THRK','DBRK','QTRK','HHRK','CGRK'

+ 21 - 1
database/migrations/2020_10_20_134819_create_customers_table.php

@@ -14,6 +14,25 @@ class CreateCustomersTable extends Migration
         '客户管理-项目-查询',
         '客户管理-项目-录入',
         '客户管理-项目-面积',
+        '客户管理-财务-即时账单',
+        '客户管理-财务-账单确认',
+        '计费模型-仓储',
+        '计费模型-仓储-录入',
+        '客户',
+        '客户-查询',
+        '客户-录入',
+        '项目组',
+        '项目组-查询',
+        '项目组-录入',
+        '作业类型',
+        '作业类型-查询',
+        '作业类型-录入',
+        '特征',
+        '特征-录入',
+        '特征-查询',
+        '计费模型-作业',
+        '计费模型-作业-查询',
+        '计费模型-作业-录入',
     ];
     /**
      * Run the migrations.
@@ -26,7 +45,8 @@ class CreateCustomersTable extends Migration
             $table->id();
             $table->string('code')->unique()->comment('客户代码');
             $table->string('name')->comment('客户名称');
-            $table->timestamp('created_at');
+            $table->string('company_name')->comment('公司名称');
+            $table->timestamps();
         });
         foreach ($this->authNames as $name){
             if(!Authority::query()->where('name',$name)->first())(new Authority(['name'=>$name,'alias_name'=>$name]))->save();

+ 12 - 3
database/migrations/2020_10_26_165012_create_owner_fee_details_table.php

@@ -17,12 +17,21 @@ class CreateOwnerFeeDetailsTable extends Migration
             $table->id();
             $table->bigInteger('owner_id')->index()->comment('外键货主');
             $table->date('counting_month')->index()->comment('结算月');
-            $table->dateTime('worked_at')->index()->comment('作业时间');
+            $table->date('worked_at')->index()->comment('作业时间');
             $table->enum('type',["发货","收货","增值服务"])->index()->comment('类型');
             $table->bigInteger('shop_id')->nullable()->index()->comment('外键店铺');
             $table->string('operation_bill')->nullable()->comment('发/收/退货单号');
-            //TODO 字段与来源渠道无法确认 暂时搁置
-            $table->timestamps();
+            $table->string('consignee_name')->nullable()->comment('收货人');
+            $table->string('consignee_phone')->nullable()->comment('收货人电话');
+            $table->string('commodity_amount')->nullable()->comment('商品数量');
+            $table->string('logistic_bill')->nullable()->comment('快递单号');
+            $table->decimal('volume',8,3)->nullable()->comment('体积');
+            $table->decimal('weight',8,3)->nullable()->comment('重量');
+            $table->bigInteger("logistic_id")->nullable()->index()->comment("快递公司");
+            $table->bigInteger('process_method_id')->nullable()->index()->comment('外键加工类型');
+            $table->decimal('work_fee',8,4)->nullable()->comment('作业费');
+            $table->decimal('logistic_fee',8,4)->nullable()->comment('物流费');
+            $table->timestamp('created_at')->nullable()->comment('创建时间');
         });
     }
 

+ 37 - 0
database/migrations/2020_10_27_103741_create_owner_bill_reports_table.php

@@ -0,0 +1,37 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateOwnerBillReportsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('owner_bill_reports', function (Blueprint $table) {
+            $table->id();
+            $table->bigInteger('owner_id')->index()->comment('外键项目');
+            $table->date('counting_month')->index()->comment('结算月');
+            $table->decimal('initial_fee',8,4)->nullable()->comment('原始账单金额');
+            $table->decimal('confirm_fee',8,4)->nullable()->comment('确认账单金额');
+            $table->decimal('difference',8,4)->nullable()->comment('差额');
+            $table->enum('confirmed',["是","否"])->default("否")->comment("确认状态");
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('owner_bill_reports');
+    }
+}

+ 31 - 0
database/migrations/2020_10_27_113358_add_order_issue_authority.php

@@ -0,0 +1,31 @@
+<?php
+
+use App\Authority;
+use Illuminate\Database\Migrations\Migration;
+
+class AddOrderIssueAuthority extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Authority::query()->firstOrCreate(['name'=>'订单管理-问题件-处理结果添加','alias_name'=>'订单管理-问题件-处理结果添加']);
+        Authority::query()->firstOrCreate(['name'=>'订单管理-问题件-处理结果删除','alias_name'=>'订单管理-问题件-处理结果删除']);
+        Authority::query()->firstOrCreate(['name'=>'订单管理-问题件-客户自定义订单号','alias_name'=>'订单管理-问题件-客户自定义订单号','permission'=>'禁止']);
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Authority::query()->where('name','订单管理-问题件-处理结果添加')->delete();
+        Authority::query()->where('name','订单管理-问题件-处理结果删除')->delete();
+        Authority::query()->where('name','订单管理-问题件-客户自定义订单号')->delete();
+    }
+}

+ 38 - 0
database/migrations/2020_10_27_142647_create_owner_storage_price_model_table.php

@@ -0,0 +1,38 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateOwnerStoragePriceModelTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('owner_storage_price_model', function (Blueprint $table) {
+            $table->id();
+            $table->enum("counting_type",["包仓","灵活用仓","统单价"])->default("灵活用仓")->comment('计费类型');
+            $table->enum("using_type",["常温","恒温"])->default("常温")->comment('用仓类型');
+            $table->decimal("minimum_area")->default(0)->comment("最低起租面积");
+            $table->decimal("price",8,3)->comment("单价");
+            $table->enum("discount_type",["无减免","按单减免","固定减免"])->default("无减免")->comment("最低起租面积");
+            $table->decimal("discount_value")->nullable()->comment("减免值");
+            $table->bigInteger("unit_id")->nullable()->index()->comment("外键单位");
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('owner_storage_price_model');
+    }
+}

+ 32 - 0
database/migrations/2020_10_27_162056_add_column_unit_id_table_process_methods.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddColumnUnitIdTableProcessMethods extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('process_methods', function (Blueprint $table) {
+            $table->bigInteger("unit_id")->nullable()->index()->comment('单位');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('process_methods', function (Blueprint $table) {
+            $table->dropColumn("unit_id");
+        });
+    }
+}

+ 36 - 0
database/migrations/2020_10_27_175452_create_owner_price_operations_table.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateOwnerPriceOperationsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('owner_price_operations', function (Blueprint $table) {
+            $table->id();
+            $table->enum("operation_type",["入库","出库"])->default("入库")->comment("操作类型");
+            $table->string("name")->nullable()->comment("名称");
+            $table->enum("strategy",["默认","特征"])->default("默认")->comment("策略");
+            $table->string("feature")->nullable()->comment("特征");
+            $table->string("remark")->nullable()->comment("备注");
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('owner_price_operations');
+    }
+}

+ 36 - 0
database/migrations/2020_10_28_105613_create_owner_out_storage_rules_table.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateOwnerOutStorageRulesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('owner_out_storage_rules', function (Blueprint $table) {
+            $table->bigInteger("owner_price_operation_id")->comment("外键作业计费模型");
+            $table->enum("owner_price_operation_strategy",["默认","特征"])->comment("作业计费模型策略");
+            $table->enum("strategy",["起步","默认","特征"])->comment("出库策略");
+            $table->integer("amount")->nullable()->comment("起步数");
+            $table->bigInteger("unit_id")->index()->comment("外键单位");
+            $table->decimal("unit_price",8,4)->comment("单价");
+            $table->string("feature")->nullable()->comment("特征");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('owner_out_storage_rules');
+    }
+}

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

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateOwnerInStorageRulesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('owner_in_storage_rules', function (Blueprint $table) {
+            $table->bigInteger("owner_price_operation_id")->primary()->comment("外键作业计费模型");
+            $table->integer("amount")->default(1)->comment("计量");
+            $table->bigInteger("unit_id")->index()->comment("外键单位");
+            $table->decimal("unit_price",8,4)->comment("单价");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('owner_in_storage_rules');
+    }
+}

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

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateFeaturesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('features', function (Blueprint $table) {
+            $table->id();
+            $table->enum("type",["商品名称","订单类型","承运商","店铺类型"])->index()->comment("特征类型");
+            $table->enum("logic",["包含","不包含","等于"])->index()->comment("逻辑");
+            $table->string("describe")->comment("特征");
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('features');
+    }
+}

+ 31 - 0
database/migrations/2020_10_28_143717_add_order_issue_colnum_imported_status.php

@@ -0,0 +1,31 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddOrderIssueColnumImportedStatus extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('order_issues', function (Blueprint $table) {
+            $table->enum('imported_status',['正常','导入未处理','导入已梳理'])->default('正常')->comment('导入处理')->after('baoshi_express_remission');        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_issues', function (Blueprint $table) {
+            $table->dropColumn('imported_status');
+        });
+    }
+}

+ 32 - 0
database/migrations/2020_10_29_092202_add_order_table_column_warehouse_id.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddOrderTableColumnWarehouseId extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('orders', function (Blueprint $table) {
+            $table->integer('warehouse_id')->index()->nullable()->comment('仓库')->after('id');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('orders', function (Blueprint $table) {
+            $table->dropColumn('warehouse_id');
+        });
+    }
+}

+ 0 - 1
phpunit-Current.bat

@@ -1 +0,0 @@
-vendor\bin\phpunit.bat --testsuite=Current

+ 0 - 1
phpunit-Inventory.bat

@@ -1 +0,0 @@
-vendor\bin\phpunit.bat --testsuite=Inventory

+ 0 - 1
phpunit-OrderIssue.bat

@@ -1 +0,0 @@
-vendor\bin\phpunit.bat --testsuite=OrderIssues

+ 0 - 1
phpunit-Unit.bat

@@ -1 +0,0 @@
-vendor\bin\phpunit.bat --testsuite=Unit

+ 1 - 0
phpunit.bat

@@ -0,0 +1 @@
+vendor\bin\phpunit.bat --testsuite=%1

+ 3 - 6
phpunit.xml

@@ -12,18 +12,15 @@
         <testsuite name="Unit">
             <directory suffix="Test.php">./tests/Unit</directory>
         </testsuite>
-        <testsuite name="Current">
-            <directory suffix="Test.php">./tests/Current</directory>
-        </testsuite>
-        <testsuite name="Feature">
-            <directory suffix="Test.php">./tests/Feature</directory>
-        </testsuite>
         <testsuite name="Inventory">
             <directory suffix="Test.php">./tests/Inventory</directory>
         </testsuite>
         <testsuite name="OrderIssues">
             <directory suffix="Test.php">./tests/OrderIssues</directory>
         </testsuite>
+        <testsuite name="Services">
+            <directory suffix="Test.php">./tests/Services</directory>
+        </testsuite>
     </testsuites>
     <filter>
         <whitelist processUncoveredFilesFromWhitelist="true">

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 329
public/css/app.css


+ 4 - 4
public/js/app.js

@@ -2330,7 +2330,7 @@ function fromByteArray (uint8) {
 var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :
   typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :
   typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :
-  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : 
+  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :
   false;
 
 /**
@@ -86472,8 +86472,8 @@ module.exports = tempTip;
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-__webpack_require__(/*! D:\wamp64\www\bswas\resources\js\app.js */"./resources/js/app.js");
-module.exports = __webpack_require__(/*! D:\wamp64\www\bswas\resources\sass\app.scss */"./resources/sass/app.scss");
+__webpack_require__(/*! D:\phpstudy_pro\WWW\bswas\resources\js\app.js */"./resources/js/app.js");
+module.exports = __webpack_require__(/*! D:\phpstudy_pro\WWW\bswas\resources\sass\app.scss */"./resources/sass/app.scss");
 
 
 /***/ }),
@@ -86489,4 +86489,4 @@ module.exports = __webpack_require__(/*! D:\wamp64\www\bswas\resources\sass\app.
 
 /***/ })
 
-/******/ });
+/******/ });

+ 4 - 4
public/t.php

@@ -1,6 +1,6 @@
 <?php
 
-$a = '11';
-echo $a;
-$a = '\\' . $a . '\\';
-echo trim($a, '\\');
+$a=function(){
+
+};
+echo gettype($a);

+ 6 - 5
resources/js/queryForm/queryForm.js

@@ -45,12 +45,12 @@ const query = function getQueryForm(data) {
                     //     }
                     // }
                     // console.log(map.value);
-                    form.append("<input name='" + key + "' value='" + map.value.replace(" ","%20") + "'>");
-                    // form.append("<input name='" + key + "' value='" + encodeURIComponent(map.value) + "'>")
+                    //form.append("<input name='" + key + "' value='" + map.value.replace(" ","%20") + "'>");
+                      form.append("<input name='" + key + "' value='" + encodeURIComponent(map.value) + "'>")
                 } else if ('array' === fetchJsType(map.value)) {
                     let string = map.value.join(',');
-                    form.append("<input  name='" + key + "' value='" + string.replace(" ","%20") + "'>");
-                    // form.append("<input  name='" + key + "' value='" + encodeURIComponent(string) + "'>")
+                    //form.append("<input  name='" + key + "' value='" + string.replace(" ","%20") + "'>");
+                    form.append("<input  name='" + key + "' value='" + encodeURIComponent(string) + "'>")
                 }
             }
             for (let key in this.param){
@@ -1225,7 +1225,8 @@ const query = function getQueryForm(data) {
     // url path on search form option  renderer
     function searchOptionToUrlsearch() {
         let data = (window.location.search);
-        data = decodeURIComponent(data).replace('%20'," ");
+        data = decodeURIComponent(decodeURIComponent(data));
+        //data = decodeURIComponent(data).replace('%20'," ");
         if (!!data) {
             data = (data.substr(1)).split('&');
             data = convertArrayToObj(data);

+ 6 - 0
resources/sass/layout.scss

@@ -26,6 +26,12 @@
         background: #f9f0f0;
     }
 }
+.nav4{
+    transform: scaleX(0.98);
+    .card{
+        background: #eac3aa;
+    }
+}
 
 table,table.table-striped tbody{
     th {

+ 104 - 0
resources/views/customer/finance/billConfirmation.blade.php

@@ -0,0 +1,104 @@
+@extends('layouts.app')
+@section('title')客户管理-账单确认@endsection
+
+@section('content')
+    @component('customer.finance.menu')@endcomponent
+    <div class="container-fluid" id="container">
+        <div id="form_div"></div>
+        <div class="mt-1">
+            <button type="button" class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark text-light':'']"
+                    data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">
+                导出Excel
+            </button>
+            <div class="dropdown-menu">
+                <a class="dropdown-item" @click="excelExport(false)" href="javascript:">导出勾选内容</a>
+                <a class="dropdown-item" @click="excelExport(true)" href="javascript:">导出所有页</a>
+            </div>
+        </div>
+        <div>
+            <label for="all" id="cloneCheckAll" class="d-none">
+                <input id="all" type="checkbox" @click="checkAll($event)">全选
+            </label>
+            <table class="d-none" id="headerRoll"></table>
+            <table class="table table-sm text-nowrap table-striped table-hover" id="headerParent">
+                <tr id="header"></tr>
+            </table>
+        </div>
+    </div>
+@stop
+
+@section("lastScript")
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script>
+        let vue = new Vue({
+            el:"#container",
+            data:{
+                checkData:[],
+                bills : [],
+            },
+            mounted(){
+                let data=[
+                    [
+                        {name:'workgroup',type:'select',tip:'项目小组',placeholder: '项目小组',data:[]},
+                        {name:'counting_month_start',type:'dateMonth',tip:'起始结算月'},
+                        {name:'owner_id',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的项目'],
+                            placeholder:['项目','定位或多选项目'],data:[]},
+                    ],[
+                        {name:'customer_id',type:'select',tip:'客户',placeholder: '客户',data:[]},
+                        {name:'counting_month_end',type:'dateMonth',tip:'结束结算月'},
+                    ],
+                ];
+                this.form = new query({
+                    el:"#form_div",
+                    condition:data,
+                });
+                this.form.init();
+                let column = [
+                    {name:'cloneCheckAll',customization:true,type:'checkAll',column:'id',
+                        dom:$('#cloneCheckAll').removeClass('d-none'), neglect: true},
+                    {name:'index',value: '序号', neglect: true},
+                    {name:'workgroup',value: '项目小组'},
+                    {name:'customer',value: '客户'},
+                    {name:'owner',value: '子项目'},
+                    {name:'counting_month',value: '结算月'},
+                    {name:'created_at',value: '录入日期'},
+                    {name:'initial_fee',value: '原始账单金额', neglect: true},
+                    {name:'confirm_fee',value: '确认账单金额', neglect: true},
+                    {name:'difference',value: '差额', neglect: true},
+                    {name:'operating',value: '操作', neglect: true},
+                ];
+                let _this=this;
+                setTimeout(function () {
+                    let header = new Header({
+                        el: "#header",
+                        column: column,
+                        data: _this.reports,
+                        restorationColumn: 'id',
+                        fixedTop:($('#form_div').height())+2,
+                        offset:0.5,
+                        vue:vue
+                    });
+                    header.init();
+                },0);
+            },
+            methods:{
+                excelExport(isAll){
+
+                },
+                //全选事件
+                checkAll(e){
+                    if (e.target.checked){
+                        this.bills.forEach((el)=>{
+                            if (this.checkData.indexOf(el.id) === '-1'){
+                                this.checkData.push(el.id);
+                            }
+                        });
+                    }else {
+                        this.checkData = [];
+                    }
+                },
+            },
+        });
+    </script>
+@stop

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