ソースを参照

Merge remote-tracking branch 'origin/master'

yuang 4 年 前
コミット
62517c11d2
32 ファイル変更692 行追加352 行削除
  1. 2 2
      app/Http/Controllers/InventoryController.php
  2. 2 0
      app/Http/Controllers/OrderIssueRejectedBillController.php
  3. 1 0
      app/Http/Controllers/ReceiveRecordController.php
  4. 7 0
      app/Http/Controllers/ReceivingDashboardController.php
  5. 1 1
      app/Http/Controllers/RejectedBillController.php
  6. 2 2
      app/Http/Controllers/RejectedController.php
  7. 6 28
      app/Http/Controllers/TestController.php
  8. 3 12
      app/Owner.php
  9. 1 0
      app/ReceiveRecord.php
  10. 2 2
      app/Services/AllInventoryService.php
  11. 7 4
      app/Services/HandInStorageService.php
  12. 1 2
      app/Services/InventoryAccountService.php
  13. 3 4
      app/Services/InventoryCompareService.php
  14. 5 5
      app/Services/InventoryService.php
  15. 3 1
      app/Services/ObligationService.php
  16. 15 0
      app/Services/OracleDocAsnHerderService.php
  17. 2 2
      app/Services/OrderRejectingStatusService.php
  18. 1 1
      app/Services/OwnerFeeDetailService.php
  19. 234 214
      app/Services/OwnerService.php
  20. 1 2
      app/Services/RealtimePendingOrdersService.php
  21. 1 3
      app/Services/RejectedService.php
  22. 10 0
      app/Services/StoreService.php
  23. 1 1
      config/users.php
  24. 32 0
      database/migrations/2022_02_23_172938_change_receive_records_add_column.php
  25. 17 15
      resources/views/order/workOrder/index.blade.php
  26. 3 1
      resources/views/rejected/receiveRecord.blade.php
  27. 15 2
      resources/views/rejected/record.blade.php
  28. 1 1
      resources/views/rejected/search/general.blade.php
  29. 25 22
      resources/views/store/receivingDashboard/punctualityProgress/index.blade.php
  30. 29 25
      resources/views/store/receivingDashboard/receivingTableList/index.blade.php
  31. 258 0
      resources/views/store/receivingDashboard/stayPutawayList.blade.php
  32. 1 0
      routes/web.php

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

@@ -24,7 +24,7 @@ class InventoryController extends Controller
         if(!Gate::allows("库存管理-库存")){ return redirect(url('/'));  }
         $oracleActTransactingLogs=app('inventoryService')->paginate($request->input());
         $oracleActTransactingLogs=json_encode($oracleActTransactingLogs);
-        $owners=Owner::filterAuthorities()->select(['code', 'name'])->get();
+        $owners = app("OwnerService")->getIntersectPermitting(["code", "name"]);
         $isTotalStock=false;
         $page = $request->page ?? 1;
         return view('inventory.statement.changeInventory',compact('oracleActTransactingLogs','page','owners','isTotalStock'));
@@ -37,7 +37,7 @@ class InventoryController extends Controller
         $service = app('AllInventoryService');
         $oracleActTransactingLogs= $service->paginate($request->input());
         $oracleActTransactingLogs=json_encode($oracleActTransactingLogs);
-        $owners=Owner::filterAuthorities()->select(['code', 'name'])->get();
+        $owners = app("OwnerService")->getIntersectPermitting(["code", "name"]);
         $isTotalStock=true;
         $page = $request->page ?? 1;
         return view('inventory.statement.changeInventory',compact('oracleActTransactingLogs','page','owners','isTotalStock'));

+ 2 - 0
app/Http/Controllers/OrderIssueRejectedBillController.php

@@ -26,6 +26,8 @@ class OrderIssueRejectedBillController extends Controller
     {
         if (!Gate::allows('订单管理-问题件-编辑')) return ['success' => false, 'error' => '没有对应权限'];
         if (!$request->has('logistic_number_return')) return ['success' => false, 'error' => '参数为空'];
+        if(!$request['logistic_number_return'] || strlen($request['logistic_number_return']) === 0) return ['success' => false, 'error' => '参数异常'];
+
         /** @var OrderIssue $orderIssue */
         $orderIssue = OrderIssue::query()->find($request['id']);
         if (!$orderIssue) return ['success' => false, 'error' => '参数为空'];

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

@@ -139,6 +139,7 @@ class ReceiveRecordController extends Controller
                 "logistic_number" => $logisticNumber,
                 "logistic_id" => $logisticId,
                 "record_at" => $dateTime,
+                "location_at" => \request("locationAt"),
                 "warehouse_id" => $warehouse,
                 "delayed" => 0,
             ]);

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

@@ -19,6 +19,13 @@ class ReceivingDashboardController extends Controller
         $user=Auth::user()['name'];
         return view('store.receivingDashboard.receivingTableList.index', compact('owners','user'));
     }
+    //待上架列表
+    public function stayPutawayList(Request $request)
+    {
+        $owners = $this->getOwners();
+        $workGroups = UserWorkgroup::query()->get();
+        return view('store.receivingDashboard.stayPutawayList', compact('owners','workGroups'));
+    }
 
     //时效进度
     public function punctualityProgress(Request $request)

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

@@ -32,7 +32,7 @@ class RejectedBillController extends Controller
         if(!Gate::allows('退货管理-查询')){
             return ['success'=>'false','fail_info'=>'没有权限'];}
         $rejectedBills = RejectedBill::query()->orderByDesc('id')->whereIn('id_owner',
-            app("OwnerService")->getQuery())->limit(20)->get();
+            app("OwnerService")->getIdArr())->limit(20)->get();
         return ['success'=>'true','rejectedBills'=>$rejectedBills->toArray()];
     }
 

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

@@ -239,7 +239,7 @@ class RejectedController extends Controller
         $logistics=Logistic::all()->sortBy('name');
         $qualityLabels=QualityLabel::all()->sortBy('name');
         $rejectedBills = RejectedBill::query()->orderByDesc('id')->whereIn('id_owner',
-            app("OwnerService")->getQuery())->limit(20)->get();
+            app("OwnerService")->getIdArr())->limit(20)->get();
         foreach($rejectedBills as $bill){
             $bill['is_loaded'] = $bill['is_loaded_null'];
             $bill['isEditing'] = false;
@@ -479,7 +479,7 @@ class RejectedController extends Controller
         if(!Gate::allows('退货管理-查询')){ return redirect(url('/'));  }
         $paginateParams = $this->getAnalyzeSearchParams($request);
         $rejectedBills =  RejectedAnalyzeOwner::findBy($paginateParams);
-        $owners = Owner::filterAuthorities()->get();
+        $owners = app("OwnerService")->getIntersectPermitting();
         $qualityLabels = QualityLabel::all();
         return view('rejected.search.analyze',compact('rejectedBills','owners',
             'paginateParams','qualityLabels'));

+ 6 - 28
app/Http/Controllers/TestController.php

@@ -6,7 +6,7 @@ use App\Components\AsyncResponse;
 use App\Components\Database;
 use App\Components\ErrorPush;
 use App\DeliveryAppointment;
-use App\Jobs\RejectedPushJob;
+use App\Logistic;
 use App\MaterialBox;
 use App\MaterialBoxModel;
 use App\OracleDOCASNHeader;
@@ -18,6 +18,8 @@ use App\RejectedBill;
 use App\Role;
 use App\Services\common\BatchUpdateService;
 use App\Services\DeliveryAppointmentService;
+use App\Services\LogisticService;
+use App\Services\ObligationService;
 use App\Services\OracleDocAsnHerderService;
 use App\Services\OrderRejectedBillRelationService;
 use App\Services\OrderRejectingStatusService;
@@ -55,42 +57,18 @@ class TestController extends Controller
     {
         try {
             return call_user_func([$this, $method], $request);
-        } catch (\BadMethodCallException $e) {
+        }catch (\BadMethodCallException $e){
             dd("方法不存在");
         }
     }
-
-    public function test(Request $request)
-    {
-        $users = User::query()->with(["roles.owners"])->get();
-        foreach ($users as $user) {
-            $owners = [];
-            foreach ($user->roles as $role) {
-                foreach ($role->owners as $owner) {
-                    $owners[] = $owner->id;
-                }
-            }
-            $user->owners()->sync($owners);
-        }
+    public function test(){
     }
 
     public function test123()
     {
         $codes = ['OCGBS202202160032'];
-        $items = OracleDOCASNHeader::query()->select('asnNo')->whereIn('ASNReference1', $codes)->get();
+        $items = OracleDOCASNHeader::query()->select('asnNo')->whereIn('ASNReference1',$codes)->get();
         dd($items);
     }
-
-    public function testRejectedPushJob()
-    {
-        $arr = [
-            ['logisticNumberReturn' => '9886316269968', 'asnNo' => 'asn0045', 'type' => '上架'],
-            ['logisticNumberReturn' => '9886316269968', 'asnNo' => 'asn0045', 'type' => '上架'],
-            ['logisticNumberReturn' => '9886316269968', 'asnNo' => 'asn0045', 'type' => '上架'],
-            ['logisticNumberReturn' => '75603658035358', 'asnNo' => 'asn0045', 'type' => '上架'],
-        ];
-
-        RejectedPushJob::dispatch($arr);
-    }
 }
 

+ 3 - 12
app/Owner.php

@@ -6,7 +6,6 @@ use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\BelongsToMany;
 use Illuminate\Database\Eloquent\Relations\HasMany;
-use Illuminate\Support\Facades\Auth;
 
 /**
  * @method static orderBy(string $string, string $string1)
@@ -64,20 +63,12 @@ class Owner extends Model
         1 => "是"
     ];
 
-    public static function filterAuthorities(){
-        $user=Auth::user();
-        $query = (new static)->newQuery();
-        if(!$user){
-            return $query->where('id','0');
-        }
-        return $query->whereIn('id',app("OwnerService")->getQuery());
-    }
-
     /**
      * 退货管理里,客户审核的代码,是拼音+日期+计数,计数的后缀就是checking_count
-     * @return int|mixed
+     *
      */
-    public function getIncreasedCheckingCount(){
+    public function getIncreasedCheckingCount()
+    {
         $this['checking_count']=$this['checking_count']+1;
         $this->update();
         return $this['checking_count'];

+ 1 - 0
app/ReceiveRecord.php

@@ -15,6 +15,7 @@ class ReceiveRecord extends Model
         "logistic_number",
         "logistic_id",
         "record_at",
+        "location_at",
         "warehouse_id",
         "delayed",
     ];

+ 2 - 2
app/Services/AllInventoryService.php

@@ -15,7 +15,7 @@ class AllInventoryService
 
     protected $modelClass=AllInventory::class;
     public function getSql(array $params, $page=null, $paginate=null){
-        $ownerCodes=Owner::filterAuthorities()->select('code')->get();
+        $ownerCodes = app("OwnerService")->getCodeArr();
         $date_start=$params['date_start'] ?? null;
         $range = $params['range'] ?? null;
         if ($range)$date_start=date('Y-m-d',strtotime('-'.$range." day"));
@@ -49,7 +49,7 @@ class AllInventoryService
             $sql .= ' where storeStatus.CUSTOMERID in (';
             foreach ($ownerCodes as $index => $data){
                 if ($index != 0)$sql .= ',';
-                $sql .= "'".$data['code']."'";
+                $sql .= "'".$data."'";
             }
             $sql .= ') ';
         }

+ 7 - 4
app/Services/HandInStorageService.php

@@ -150,15 +150,18 @@ class HandInStorageService
 
             $skuInvs = [];    // 库位没有该商品
             foreach ($invs as $inv) {
+                if ($inv['customerid'] == $param['customerid'] && $inv['sku'] != $param['sku']) { //货主相同,sku不同的商品
+                    return true; //商品不同
+                }
                 if ($inv['customerid'] != $param['customerid'] && $inv['sku'] != $param['sku']) {  // 库位没有该商品
                     $skuInvs[] = $inv;
                     continue;
                 }
                 if ($inv['oracleInvLotAtt']['lotatt01'] == $param['lotatt01']
-                && $inv['oracleInvLotAtt']['lotatt02'] == $param['lotatt02']
-                && $inv['oracleInvLotAtt']['lotatt04'] == $param['lotatt04']
-                && $inv['oracleInvLotAtt']['lotatt05'] == $param['lotatt05']
-                && $inv['oracleInvLotAtt']['lotatt08'] == $param['lotatt08']) return true; // 批次相同
+                    && $inv['oracleInvLotAtt']['lotatt02'] == $param['lotatt02']
+                    && $inv['oracleInvLotAtt']['lotatt04'] == $param['lotatt04']
+                    && $inv['oracleInvLotAtt']['lotatt05'] == $param['lotatt05']
+                    && $inv['oracleInvLotAtt']['lotatt08'] == $param['lotatt08']) return true; // 批次相同
                 return 3;   //库位:产品相同,不能混放批次
             }
             if (count($skuInvs) == count($invs)) return true;

+ 1 - 2
app/Services/InventoryAccountService.php

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

+ 3 - 4
app/Services/InventoryCompareService.php

@@ -129,20 +129,19 @@ class InventoryCompareService
         return $inventoryCompares;
     }
     private function conditionQueryInventoryCompare(array $param){
-        $ownerIds=app('OwnerService')->getSelection();
         $differ=$param['differ']??'';
         if ($differ=='有'){
             $inventoryCompares = InventoryCompare::query()->with(['owner','commodity'=>function($query){
                 $query->with('barcodes');
-            }])->where('differ','>',0)->orderByDesc('id')->whereIn('inventory_compares.owner_id',$ownerIds);
+            }])->where('differ','>',0)->orderByDesc('id')->whereIn('inventory_compares.owner_id',app("OwnerService")->getQuery());
         }elseif ($differ=='无'){
             $inventoryCompares = InventoryCompare::query()->with(['owner','commodity'=>function($query){
                 $query->with('barcodes');
-            }])->where('differ','<',0)->orderByDesc('id')->whereIn('inventory_compares.owner_id',$ownerIds);
+            }])->where('differ','<',0)->orderByDesc('id')->whereIn('inventory_compares.owner_id',app("OwnerService")->getQuery());
         }else{
             $inventoryCompares = InventoryCompare::query()->with(['owner','commodity'=>function($query){
                 $query->with('barcodes');
-            }])->orderByDesc('id')->whereIn('inventory_compares.owner_id',$ownerIds);
+            }])->orderByDesc('id')->whereIn('inventory_compares.owner_id',app("OwnerService")->getQuery());
         }
         unset($param['differ']);
         $columnQueryRules=[

+ 5 - 5
app/Services/InventoryService.php

@@ -18,7 +18,7 @@ class InventoryService
     use ModelSearchWay;
     protected $modelClass=Inventory::class;
     public function getSql(array $params,$page=null,$paginate=null){
-        $ownerCodes=Owner::filterAuthorities()->select('code')->get();
+        $ownerCodes = app("OwnerService")->getCodeArr();
         $date_start=$params['date_start'] ?? null;
         $range = $params['range'] ?? null;
         if ($range)$date_start=date('Y-m-d',strtotime('-'.$range." day"));
@@ -56,7 +56,7 @@ class InventoryService
             $sql .= ' and TOCustomerID in (';
             foreach ($ownerCodes as $index => $data){
                 if ($index != 0)$sql .= ',';
-                $sql .= "'".$data['code']."'";
+                $sql .= "'".$data."'";
             }
             $sql .= ') ';
         }
@@ -80,7 +80,7 @@ class InventoryService
             $sql .= ' and FMCUSTOMERID in (';
             foreach ($ownerCodes as $index => $data){
                 if ($index != 0)$sql .= ',';
-                $sql .= "'".$data['code']."'";
+                $sql .= "'".$data."'";
             }
             $sql .= ') ';
         }
@@ -105,7 +105,7 @@ class InventoryService
             $sql .= ' and FMCUSTOMERID in (';
             foreach ($ownerCodes as $index => $data){
                 if ($index != 0)$sql .= ',';
-                $sql .= "'".$data['code']."'";
+                $sql .= "'".$data."'";
             }
             $sql .= ') ';
         }
@@ -130,7 +130,7 @@ class InventoryService
             $sql .= ' and TOCustomerID in (';
             foreach ($ownerCodes as $index => $data){
                 if ($index != 0)$sql .= ',';
-                $sql .= "'".$data['code']."'";
+                $sql .= "'".$data."'";
             }
             $sql .= ') ';
         }

+ 3 - 1
app/Services/ObligationService.php

@@ -159,7 +159,9 @@ class ObligationService
         if (!$ids || count($ids) == 0){
             return [];
         }
-        return DB::table("department_obligation_owner")->select("owner_id")->whereIn("obligation_id",$ids)
+        return DB::table("department_obligation_owner")->select("owner_id")
+            ->whereNull("failure_time")
+            ->whereIn("department_id",$ids)
             ->groupBy("owner_id")->pluck("owner_id")->toArray();
     }
 }

+ 15 - 0
app/Services/OracleDocAsnHerderService.php

@@ -2,8 +2,10 @@
 
 namespace App\Services;
 
+use App\Jobs\RejectedPushJob;
 use App\OracleDOCASNHeader;
 use App\Traits\ServiceAppAop;
+use Couchbase\DocIdSearchQuery;
 
 
 class OracleDocAsnHerderService
@@ -59,4 +61,17 @@ class OracleDocAsnHerderService
             ->where('CustomerId', $customId)->count();
     }
 
+    public function rejectPush($asnHerders)
+    {
+        if (count($asnHerders)>0){
+            $collect=collect();
+            foreach ($asnHerders as $asnHerder){
+                if ($asnHerders->asntype=='THRK'&&$asnHerder->asnreference3){
+                    $collect->push(array($asnHerder->asnno,$asnHerder->asnreference3));
+                }
+            }
+            RejectedPushJob::dispatch($collect);
+        }
+    }
+
 }

+ 2 - 2
app/Services/OrderRejectingStatusService.php

@@ -49,8 +49,8 @@ class OrderRejectingStatusService
             $query->update(['rejecting_status' => $rejecting_status, 'is_new_rejecting' => $is_new_rejecting]);
         }
 
-        if ($rejecting_status == '全部完成') {
-            $orderIssueTypeQuery = OrderIssueType::query()->where('name','拦截');
+        if ($rejecting_status == '全部退回') {
+            $orderIssueTypeQuery = OrderIssueType::query()->select('id')->where('name','拦截');
             $workOrder = WorkOrder::query()->where('order_id',$order->id)
                 ->whereIn('order_issue_type_id',$orderIssueTypeQuery)->where('status','!=',6)->first();
             if($workOrder){

+ 1 - 1
app/Services/OwnerFeeDetailService.php

@@ -19,7 +19,7 @@ class OwnerFeeDetailService
      */
     private function query(Builder $builder, array $params)
     {
-        $builder->whereIn("owner_id",app("OwnerService")->getQuery());
+        $builder->whereIn("owner_id",app("OwnerService")->getIdArr());
         $columnQueryRules = [
             'worked_at_start' => ['alias' => 'worked_at', 'startDate' => ''],
             'worked_at_end' => ['alias' => 'worked_at', 'endDate' => ''],

+ 234 - 214
app/Services/OwnerService.php

@@ -28,30 +28,27 @@ use App\Traits\ServiceAppAop;
 class OwnerService implements UserFilter
 {
     use ServiceAppAop;
-    protected $modelClass=Owner::class;
+
+    protected $modelClass = Owner::class;
     /** @var CacheService $cacheService */
     private $cacheService;
-    function __construct(){
-        $this->instant($this->cacheService,'CacheService');
+
+    function __construct()
+    {
+        $this->instant($this->cacheService, 'CacheService');
     }
+
     /*
      * array | string $column
      * 默认一些select字段,可传递string 或 array来指定select字段
      */
     public function getIntersectPermitting(array $column = ['id', 'name'])
     {
-        $ownerIds=app('OwnerService')->getIdArr();
-        return $this->cacheService->getOrExecute('OwnersAll_IdName'.md5(json_encode($column).json_encode($ownerIds)),function()use($column,$ownerIds){
-            if(empty($ownerIds))return new Collection();
+        $ownerIds = app('OwnerService')->getIdArr();
+        return $this->cacheService->getOrExecute('OwnersAll_IdName' . md5(json_encode($column) . json_encode($ownerIds)), function () use ($column, $ownerIds) {
+            if (empty($ownerIds)) return new Collection();
             return Owner::query()->select($column)->whereIn('id', $ownerIds)->whereNull('deleted_at')->get();
-        },config('cache.expirations.owners'));
-    }
-
-    public function getSelection($column = ['id'])
-    {
-        return $this->cacheService->getOrExecute('OwnersAll_'.md5(json_encode($column)),function()use($column){
-            return Owner::filterAuthorities()->select($column)->get();
-        },config('cache.expirations.owners'));
+        }, config('cache.expirations.owners'));
     }
 
     /**
@@ -69,7 +66,7 @@ class OwnerService implements UserFilter
         if (count($basCustomers) == $ownerCount) return null;
         foreach ($basCustomers as $basCustomer) {
             $owner = Owner::query()->where('code', $basCustomer['customerid'])->first();
-            if (!isset($owner)){
+            if (!isset($owner)) {
                 Owner::query()->create([
                     'code' => $basCustomer['customerid'],
                     'name' => $basCustomer['descr_c'],
@@ -77,7 +74,7 @@ class OwnerService implements UserFilter
                 ]);
                 continue;
             }
-            if ($owner['name']!=$basCustomer['descr_c']){
+            if ($owner['name'] != $basCustomer['descr_c']) {
                 $owner->update([
                     'code' => $basCustomer['customerid'],
                     'name' => $basCustomer['descr_c'],
@@ -88,13 +85,14 @@ class OwnerService implements UserFilter
         return $owners;
     }
 
-    public function first(array $params, array $rules =[]){
-        return $this->cacheService->getOrExecute('OwnersFirst'.md5(json_encode($params),json_encode($rules)),function()use($params,$rules){
+    public function first(array $params, array $rules = [])
+    {
+        return $this->cacheService->getOrExecute('OwnersFirst' . md5(json_encode($params), json_encode($rules)), function () use ($params, $rules) {
             $owner = Owner::query();
-            foreach ($params as $column => $value){
-                if (!isset($rules[$column]))$owner->where($column, $value);
-                else{
-                    switch ($rules[$column]){
+            foreach ($params as $column => $value) {
+                if (!isset($rules[$column])) $owner->where($column, $value);
+                else {
+                    switch ($rules[$column]) {
                         case "or":
                             $owner->orWhere($column, $value);
                             break;
@@ -102,7 +100,7 @@ class OwnerService implements UserFilter
                 }
             }
             return $owner->first();
-        },config('cache.expirations.rarelyChange'));
+        }, config('cache.expirations.rarelyChange'));
     }
 
     public function find($id, $with = [])
@@ -112,46 +110,53 @@ class OwnerService implements UserFilter
 
     public function update(Owner $owner, array $values, array $related = [])
     {
-        if ($related["ownerStoragePriceModels"] ?? false)$owner->ownerStoragePriceModels()->sync($related["ownerStoragePriceModels"]);
+        if ($related["ownerStoragePriceModels"] ?? false) $owner->ownerStoragePriceModels()->sync($related["ownerStoragePriceModels"]);
         return $owner->update($values);
     }
 
-    public function create(array $params, array $related = []){
+    public function create(array $params, array $related = [])
+    {
         /** @var Owner $owner */
         $owner = Owner::query()->create($params);
-        if ($related["ownerStoragePriceModels"] ?? false)$owner->ownerStoragePriceModels()->syncWithoutDetaching($related["ownerStoragePriceModels"]);
+        if ($related["ownerStoragePriceModels"] ?? false) $owner->ownerStoragePriceModels()->syncWithoutDetaching($related["ownerStoragePriceModels"]);
         return $owner;
     }
 
-    public function firstOrCreate(array $params, array $values = null){
+    public function firstOrCreate(array $params, array $values = null)
+    {
         if (!$values) return Owner::query()->whereNull("deleted_at")->firstOrCreate($params);
-        return Owner::query()->whereNull("deleted_at")->firstOrCreate($params,$values);
+        return Owner::query()->whereNull("deleted_at")->firstOrCreate($params, $values);
     }
 
 
-    public function 获取订单跟踪的货主(){
-        return Owner::query()->with('orderTrackingOwner')->whereHas('orderTrackingOwner',function($query){
-            $query->where('status','启用');
+    public function 获取订单跟踪的货主()
+    {
+        return Owner::query()->with('orderTrackingOwner')->whereHas('orderTrackingOwner', function ($query) {
+            $query->where('status', '启用');
         })->get();
     }
 
-    public function getByWmsOrders($orderHeaders){
-        $customerIds = array_unique(data_get($orderHeaders,'*.customerid'));
-        $customerIds = array_diff($customerIds,[null,'','*']);
-        $owners = Owner::query()->whereIn('code',$customerIds)->get();
+    public function getByWmsOrders($orderHeaders)
+    {
+        $customerIds = array_unique(data_get($orderHeaders, '*.customerid'));
+        $customerIds = array_diff($customerIds, [null, '', '*']);
+        $owners = Owner::query()->whereIn('code', $customerIds)->get();
 
-        if($owners->count() < count($customerIds)){
-            $customerIds = array_diff($customerIds,data_get($owners,'*.code'));
+        if ($owners->count() < count($customerIds)) {
+            $customerIds = array_diff($customerIds, data_get($owners, '*.code'));
             $owner_list = $this->createByWmsCustomerIds($customerIds);
-            $owners=$owners->concat($owner_list);
+            $owners = $owners->concat($owner_list);
         }
         return $owners;
     }
 
-    public function createByWmsCustomerIds($codes){
-        if(!$codes) {return [];}
+    public function createByWmsCustomerIds($codes)
+    {
+        if (!$codes) {
+            return [];
+        }
         $basCustomer = OracleBasCustomer::query()
-            ->where('Customer_Type','OW')
+            ->where('Customer_Type', 'OW')
             ->whereIn('CustomerID', $codes)
             ->get();
 
@@ -168,7 +173,7 @@ class OwnerService implements UserFilter
         try {
             if (count($insert_params) > 0) {
                 $this->insert($insert_params);
-                app('LogService')->log(__METHOD__, __FUNCTION__, '批量创建 owner ' . count($insert_params) . json_encode($insert_params) );
+                app('LogService')->log(__METHOD__, __FUNCTION__, '批量创建 owner ' . count($insert_params) . json_encode($insert_params));
             }
         } catch (\Exception $e) {
             app('LogService')->log(__METHOD__, __FUNCTION__, '批量创建 owner error' . json_encode($insert_params) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());
@@ -177,32 +182,34 @@ class OwnerService implements UserFilter
         }
     }
 
-    public function insert($fillables){
+    public function insert($fillables)
+    {
         return Owner::query()->insert($fillables);
     }
 
-    public function getAuthorizedOwners(){
-        return Owner::query()->whereIn('id',app("OwnerService")->getQuery())->get();
+    public function getAuthorizedOwners()
+    {
+        return Owner::query()->whereIn('id', app("OwnerService")->getQuery())->get();
     }
 
     public function get(array $params, array $withs = null, bool $authority = true, bool $notShowSoftDelete = false, $user = null)
     {
         return Cache::remember(
-            'owner_'.md5(json_encode($params).json_encode($withs).$authority.$notShowSoftDelete.json_encode($user))
-            ,config('cache.expirations.rarelyChange')
-            ,function()use($params,$withs,$authority,$notShowSoftDelete){
-            $query = $this->query($this->getQueryConstructor($withs, $authority, $notShowSoftDelete),$params);
+            'owner_' . md5(json_encode($params) . json_encode($withs) . $authority . $notShowSoftDelete . json_encode($user))
+            , config('cache.expirations.rarelyChange')
+            , function () use ($params, $withs, $authority, $notShowSoftDelete) {
+            $query = $this->query($this->getQueryConstructor($withs, $authority, $notShowSoftDelete), $params);
             return $query->get();
         });
     }
 
-    private function getQueryConstructor(array $withs, bool $authority, bool $notShowSoftDelete) :Builder
+    private function getQueryConstructor(array $withs, bool $authority, bool $notShowSoftDelete): Builder
     {
         $query = Owner::query();
-        if ($withs)$query->with($withs);
-        if ($authority){
+        if ($withs) $query->with($withs);
+        if ($authority) {
             $ids = $this->getIdArr();
-            if (count($ids) > 0){
+            if (count($ids) > 0) {
                 $query->whereIn("id", $ids);
             } else {
                 $query->where("id", 0);
@@ -211,98 +218,99 @@ class OwnerService implements UserFilter
         if ($notShowSoftDelete) $query->whereNull('deleted_at');
         return $query;
     }
+
     public function paginate(array $params, array $withs = null, bool $authority = true, bool $notShowSoftDelete = false)
     {
-        $query = $this->query($this->getQueryConstructor($withs, $authority, $notShowSoftDelete),$params)->
-                orderByDesc("id");
+        $query = $this->query($this->getQueryConstructor($withs, $authority, $notShowSoftDelete), $params)->
+        orderByDesc("id");
         return $query->paginate($params["paginate"] ?? 50);
     }
 
     private function query(Builder $builder, array $params)
     {
-        foreach ($params as $column => $param){
-            if ($column == 'paginate' || $column == 'page' || !$param)continue;
-            if ($param === true){
+        foreach ($params as $column => $param) {
+            if ($column == 'paginate' || $column == 'page' || !$param) continue;
+            if ($param === true) {
                 $builder->whereNotNull($column);
                 continue;
             }
-            if ($param === false){
+            if ($param === false) {
                 $builder->whereNull($column);
                 continue;
             }
-            if ($column == 'created_at_start'){
-                $builder->where("created_at",">=",$param.":00");
+            if ($column == 'created_at_start') {
+                $builder->where("created_at", ">=", $param . ":00");
                 continue;
             }
-            if ($column == 'created_at_end'){
-                $builder->where("created_at","<=",$param.":59");
+            if ($column == 'created_at_end') {
+                $builder->where("created_at", "<=", $param . ":59");
                 continue;
             }
-            if ($column == 'contract_number'){
-                $builder->whereHas("contracts",function ($query)use($param){
+            if ($column == 'contract_number') {
+                $builder->whereHas("contracts", function ($query) use ($param) {
                     /** @var Builder $query */
-                    $query->where("contract_number","like",$param."%");
+                    $query->where("contract_number", "like", $param . "%");
                 });
                 continue;
             }
-            if ($column == 'using_type'){
-                $builder->whereHas("ownerStoragePriceModels",function ($query)use($param){
+            if ($column == 'using_type') {
+                $builder->whereHas("ownerStoragePriceModels", function ($query) use ($param) {
                     /** @var Builder $query */
-                    $query->where("using_type",$param);
+                    $query->where("using_type", $param);
                 });
                 continue;
             }
-            if ($column == 'customers'){
-                if (is_array($param))$builder->whereIn('customer_id',$param);
-                else $builder->where('customer_id',$param);
+            if ($column == 'customers') {
+                if (is_array($param)) $builder->whereIn('customer_id', $param);
+                else $builder->where('customer_id', $param);
                 continue;
             }
-            if ($column == 'ids'){
-                if (is_array($param))$builder->whereIn('id',$param);
-                else $builder->where('id',$param);
+            if ($column == 'ids') {
+                if (is_array($param)) $builder->whereIn('id', $param);
+                else $builder->where('id', $param);
                 continue;
             }
-            if ($column == 'owners'){
-                if (is_array($param))$builder->whereIn('owner_id',$param);
-                else $builder->where('owner_id',$param);
+            if ($column == 'owners') {
+                if (is_array($param)) $builder->whereIn('owner_id', $param);
+                else $builder->where('owner_id', $param);
                 continue;
             }
 //            if ($column == 'user_work_group'){
 //                $builder->where("user_workgroup_id",$param);
 //                continue;
 //            }
-            if ($column == 'kcGroup'){
-                $builder->whereHas("departmentObligationOwner",function($query)use($param){
-                    $query->where('obligation_code','kc')->where('department_id',$param);
+            if ($column == 'kcGroup') {
+                $builder->whereHas("departmentObligationOwner", function ($query) use ($param) {
+                    $query->where('obligation_code', 'kc')->where('department_id', $param);
                 });
                 continue;
             }
-            if ($column == 'jgGroup'){
-                $builder->whereHas("departmentObligationOwner",function($query)use($param){
-                    $query->where('obligation_code','jg')->where('department_id',$param);
+            if ($column == 'jgGroup') {
+                $builder->whereHas("departmentObligationOwner", function ($query) use ($param) {
+                    $query->where('obligation_code', 'jg')->where('department_id', $param);
                 });
                 continue;
             }
-            if ($column == 'fhGroup'){
-                $builder->whereHas("departmentObligationOwner",function($query)use($param){
-                    $query->where('obligation_code','fh')->where('department_id',$param);
+            if ($column == 'fhGroup') {
+                $builder->whereHas("departmentObligationOwner", function ($query) use ($param) {
+                    $query->where('obligation_code', 'fh')->where('department_id', $param);
                 });
                 continue;
             }
-            if ($column == 'thGroup'){
-                $builder->whereHas("departmentObligationOwner",function($query)use($param){
-                    $query->where('obligation_code','th')->where('department_id',$param);
+            if ($column == 'thGroup') {
+                $builder->whereHas("departmentObligationOwner", function ($query) use ($param) {
+                    $query->where('obligation_code', 'th')->where('department_id', $param);
                 });
                 continue;
             }
-            if ($column == 'shGroup'){
-                $builder->whereHas("departmentObligationOwner",function($query)use($param){
-                    $query->where('obligation_code','sh')->where('department_id',$param);
+            if ($column == 'shGroup') {
+                $builder->whereHas("departmentObligationOwner", function ($query) use ($param) {
+                    $query->where('obligation_code', 'sh')->where('department_id', $param);
                 });
                 continue;
             }
-            if (is_array($param))$builder->whereIn($column,$param);
-            else $builder->where($column,$param);
+            if (is_array($param)) $builder->whereIn($column, $param);
+            else $builder->where($column, $param);
         }
         return $builder;
     }
@@ -310,30 +318,32 @@ class OwnerService implements UserFilter
     public function getOwnerByCodes($codes)
     {
         $collect = collect();
-        if(count($codes) == 0)return $collect;
+        if (count($codes) == 0) return $collect;
         foreach ($codes as $code) {
             $collect = $collect->push($this->getOwnerByCode($code));
         }
         return $collect;
     }
 
-    public function getOwnerByCode($code){
-        return Cache::remember("getOwnerByCode_{$code}", config('cache.expirations.owners'), function ()use($code){
-            $owner = Owner::query()->where('code',$code)->first();
-            if($owner) return $owner;
-             $basCustomer = app('OracleBasCustomerService')->first(['Customer_Type'=>'OW','CustomerID'=>$code]);
-            if(!$basCustomer)return null;
-            if($basCustomer && $basCustomer['active_flag']=='Y') return Owner::query()
-                ->create(['name'=>$basCustomer['descr_c'],'code'=>$basCustomer['customerid']]);
-            $deleted_at=Carbon::now()->toDateTimeString();
-            if($basCustomer && $basCustomer['active_flag']=='N') return Owner::query()
-                ->create(['name'=>$basCustomer['descr_c'],'code'=>$basCustomer['customerid'],'deleted_at'=>$deleted_at]);
+    public function getOwnerByCode($code)
+    {
+        return Cache::remember("getOwnerByCode_{$code}", config('cache.expirations.owners'), function () use ($code) {
+            $owner = Owner::query()->where('code', $code)->first();
+            if ($owner) return $owner;
+            $basCustomer = app('OracleBasCustomerService')->first(['Customer_Type' => 'OW', 'CustomerID' => $code]);
+            if (!$basCustomer) return null;
+            if ($basCustomer && $basCustomer['active_flag'] == 'Y') return Owner::query()
+                ->create(['name' => $basCustomer['descr_c'], 'code' => $basCustomer['customerid']]);
+            $deleted_at = Carbon::now()->toDateTimeString();
+            if ($basCustomer && $basCustomer['active_flag'] == 'N') return Owner::query()
+                ->create(['name' => $basCustomer['descr_c'], 'code' => $basCustomer['customerid'], 'deleted_at' => $deleted_at]);
         });
     }
+
     public function codeGetOwner($code)
     {
-        return app(CacheService::class)->getOrExecute("owner_".$code,function ()use($code){
-            return Owner::query()->firstOrCreate(["code"=>$code],["code"=>$code,"name"=>$code]);
+        return app(CacheService::class)->getOrExecute("owner_" . $code, function () use ($code) {
+            return Owner::query()->firstOrCreate(["code" => $code], ["code" => $code, "name" => $code]);
         });
     }
 
@@ -345,25 +355,25 @@ class OwnerService implements UserFilter
      */
     public function syncPush($owner)
     {
-        if (is_array($owner)){
+        if (is_array($owner)) {
             $owner = new Owner();
-            foreach ($owner as $column=>$value){
+            foreach ($owner as $column => $value) {
                 $owner[$column] = $value;
             }
         }
-        if (is_numeric($owner)){
+        if (is_numeric($owner)) {
             $owner = Owner::query()->find($owner);
-            if (!$owner)return false;
+            if (!$owner) return false;
         }
-        $wms = DB::connection("oracle")->selectOne(DB::raw("SELECT CUSTOMERID FROM BAS_CUSTOMER WHERE CUSTOMER_TYPE = ? AND CUSTOMERID = ?"),["OW",$owner->code]);
-        if (!$wms && $owner->code){
+        $wms = DB::connection("oracle")->selectOne(DB::raw("SELECT CUSTOMERID FROM BAS_CUSTOMER WHERE CUSTOMER_TYPE = ? AND CUSTOMERID = ?"), ["OW", $owner->code]);
+        if (!$wms && $owner->code) {
             $query = DB::raw(<<<sql
     INSERT INTO BAS_CUSTOMER(CUSTOMERID,CUSTOMER_TYPE,DESCR_C,ADDTIME,EDITTIME,ADDWHO)
         VALUES(?,?,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?)
 sql
             );
             $date = date('Y-m-d H:i:s');
-            DB::connection("oracle")->insert($query,[$owner->code,'OW',$owner->name,$date,$date,'WAS-'.(Auth::user() ? Auth::user()['name'] : 'SYSTEM')]);
+            DB::connection("oracle")->insert($query, [$owner->code, 'OW', $owner->name, $date, $date, 'WAS-' . (Auth::user() ? Auth::user()['name'] : 'SYSTEM')]);
         }
         return true;
     }
@@ -371,26 +381,26 @@ sql
 
     public function syncUpdate($owner)
     {
-        if (is_array($owner)){
+        if (is_array($owner)) {
             $owner = new Owner();
-            foreach ($owner as $column=>$value){
+            foreach ($owner as $column => $value) {
                 $owner[$column] = $value;
             }
         }
-        if (is_numeric($owner)){
+        if (is_numeric($owner)) {
             $owner = Owner::query()->find($owner);
-            if (!$owner)return false;
+            if (!$owner) return false;
         }
         $sql = DB::raw(<<<sql
     update BAS_CUSTOMER set ACTIVE_FLAG = ?,EDITTIME = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),EDITWHO = ? where CUSTOMERID = ? and CUSTOMER_TYPE = ?
 sql
         );
         $date = date('Y-m-d H:i:s');
-        if ($owner && $owner->deleted_at){
-            DB::connection("oracle")->update($sql,['N',$date,'WAS-'.(Auth::user() ? Auth::user()['name'] : 'SYSTEM'),$owner->code,'OW']);
+        if ($owner && $owner->deleted_at) {
+            DB::connection("oracle")->update($sql, ['N', $date, 'WAS-' . (Auth::user() ? Auth::user()['name'] : 'SYSTEM'), $owner->code, 'OW']);
         }
-       if ($owner && $owner->deleted_at==null) {
-            DB::connection("oracle")->update($sql,['Y',$date,'WAS-'.(Auth::user() ? Auth::user()['name'] : 'SYSTEM'),$owner->code,'OW']);
+        if ($owner && $owner->deleted_at == null) {
+            DB::connection("oracle")->update($sql, ['Y', $date, 'WAS-' . (Auth::user() ? Auth::user()['name'] : 'SYSTEM'), $owner->code, 'OW']);
         }
         return true;
     }
@@ -416,11 +426,11 @@ sql
      */
     public function deleteAuthority($owner)
     {
-        $authorities = Authority::query()->where('name',"_{$owner['id']}")
-            ->where("alias_name","like","(货主%")
+        $authorities = Authority::query()->where('name', "_{$owner['id']}")
+            ->where("alias_name", "like", "(货主%")
             ->get(["id"]);
-        $ids = array_column($authorities->toArray(),"id");
-        DB::table("authority_role")->whereIn("id_authority",$ids)->delete();
+        $ids = array_column($authorities->toArray(), "id");
+        DB::table("authority_role")->whereIn("id_authority", $ids)->delete();
         Authority::destroy($ids);
     }
 
@@ -439,41 +449,41 @@ LEFT JOIN owner_storage_price_model_owner b ON a.id =  b.owner_storage_price_mod
 LEFT JOIN owners c ON b.owner_id = c.id
 WHERE (a.operation IS NULL OR a.operation = '') AND c.id = ? LIMIT 1
 sql;
-        if (DB::selectOne(DB::raw($sql),[$ownerId]))$relevance[] = 0;
+        if (DB::selectOne(DB::raw($sql), [$ownerId])) $relevance[] = 0;
         $sql = <<<sql
 SELECT 1 FROM owner_price_operations a
 LEFT JOIN owner_price_operation_owner b ON a.id =  b.owner_price_operation_id
 LEFT JOIN owners c ON b.owner_id = c.id
 WHERE (a.operation IS NULL OR a.operation = '') AND c.id = ? LIMIT 1
 sql;
-        if (DB::selectOne(DB::raw($sql),[$ownerId]))$relevance[] = 1;
+        if (DB::selectOne(DB::raw($sql), [$ownerId])) $relevance[] = 1;
         $sql = <<<sql
 SELECT 1 FROM owner_price_expresses a
 LEFT JOIN owner_price_express_owner b ON a.id =  b.owner_price_express_id
 LEFT JOIN owners c ON b.owner_id = c.id
 WHERE (a.operation IS NULL OR a.operation = '') AND c.id = ? LIMIT 1
 sql;
-        if (DB::selectOne(DB::raw($sql),[$ownerId]))$relevance[] = 2;
+        if (DB::selectOne(DB::raw($sql), [$ownerId])) $relevance[] = 2;
         $sql = <<<sql
 SELECT 1 FROM owner_price_logistics a
 LEFT JOIN owner_price_logistic_owner b ON a.id =  b.owner_price_logistic_id
 LEFT JOIN owners c ON b.owner_id = c.id
 WHERE (a.operation IS NULL OR a.operation = '') AND c.id = ? LIMIT 1
 sql;
-        if (DB::selectOne(DB::raw($sql),[$ownerId]))$relevance[] = 3;
+        if (DB::selectOne(DB::raw($sql), [$ownerId])) $relevance[] = 3;
         $sql = <<<sql
 SELECT 1 FROM owner_price_direct_logistics a
 LEFT JOIN owner_price_direct_logistic_owner b ON a.id =  b.owner_price_direct_logistic_id
 LEFT JOIN owners c ON b.owner_id = c.id
 WHERE (a.operation IS NULL OR a.operation = '') AND c.id = ? LIMIT 1
 sql;
-        if (DB::selectOne(DB::raw($sql),[$ownerId]))$relevance[] = 4;
+        if (DB::selectOne(DB::raw($sql), [$ownerId])) $relevance[] = 4;
         $sql = <<<sql
 SELECT 1 FROM owner_price_systems a LEFT JOIN owners b ON a.owner_id = b.id
 WHERE b.id = ? LIMIT 1
 sql;
-        if (DB::selectOne(DB::raw($sql),[$ownerId]))$relevance[] = 5;
-        Owner::query()->where("id",$ownerId)->update(["relevance"=>$relevance]);
+        if (DB::selectOne(DB::raw($sql), [$ownerId])) $relevance[] = 5;
+        Owner::query()->where("id", $ownerId)->update(["relevance" => $relevance]);
     }
 
     /**
@@ -483,23 +493,23 @@ sql;
      */
     public function attachTaxRate(Owner $owner)
     {
-        OwnerStoragePriceModel::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->whereNull("tax_rate_id")->update(["tax_rate_id"=>$owner->tax_rate_id]);
-        OwnerPriceOperation::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->whereNull("tax_rate_id")->update(["tax_rate_id"=>$owner->tax_rate_id]);
-        OwnerPriceExpress::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->whereNull("tax_rate_id")->update(["tax_rate_id"=>$owner->tax_rate_id]);
-        OwnerPriceLogistic::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->whereNull("tax_rate_id")->update(["tax_rate_id"=>$owner->tax_rate_id]);
-        OwnerPriceDirectLogistic::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->whereNull("tax_rate_id")->update(["tax_rate_id"=>$owner->tax_rate_id]);
-        OwnerPriceSystem::query()->where("owner_id",$owner->id)->whereNull("tax_rate_id")
-            ->update(["tax_rate_id"=>$owner->tax_rate_id]);
+        OwnerStoragePriceModel::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->whereNull("tax_rate_id")->update(["tax_rate_id" => $owner->tax_rate_id]);
+        OwnerPriceOperation::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->whereNull("tax_rate_id")->update(["tax_rate_id" => $owner->tax_rate_id]);
+        OwnerPriceExpress::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->whereNull("tax_rate_id")->update(["tax_rate_id" => $owner->tax_rate_id]);
+        OwnerPriceLogistic::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->whereNull("tax_rate_id")->update(["tax_rate_id" => $owner->tax_rate_id]);
+        OwnerPriceDirectLogistic::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->whereNull("tax_rate_id")->update(["tax_rate_id" => $owner->tax_rate_id]);
+        OwnerPriceSystem::query()->where("owner_id", $owner->id)->whereNull("tax_rate_id")
+            ->update(["tax_rate_id" => $owner->tax_rate_id]);
     }
 
     /**
@@ -509,125 +519,135 @@ sql;
      */
     public function removeTaxRate(Owner $owner)
     {
-        OwnerStoragePriceModel::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->update(["tax_rate_id"=>null]);
-        OwnerPriceOperation::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->update(["tax_rate_id"=>null]);
-        OwnerPriceExpress::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->update(["tax_rate_id"=>null]);
-        OwnerPriceLogistic::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->update(["tax_rate_id"=>null]);
-        OwnerPriceDirectLogistic::query()->whereHas("owners",function (Builder $query)use($owner){
-            $query->where("id",$owner->id);
-        })->update(["tax_rate_id"=>null]);
-        OwnerPriceSystem::query()->where("owner_id",$owner->id)
-            ->update(["tax_rate_id"=>null]);
+        OwnerStoragePriceModel::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->update(["tax_rate_id" => null]);
+        OwnerPriceOperation::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->update(["tax_rate_id" => null]);
+        OwnerPriceExpress::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->update(["tax_rate_id" => null]);
+        OwnerPriceLogistic::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->update(["tax_rate_id" => null]);
+        OwnerPriceDirectLogistic::query()->whereHas("owners", function (Builder $query) use ($owner) {
+            $query->where("id", $owner->id);
+        })->update(["tax_rate_id" => null]);
+        OwnerPriceSystem::query()->where("owner_id", $owner->id)
+            ->update(["tax_rate_id" => null]);
     }
 
     /**
      * 获取税率 或 税费
      *
-     * @param Model|\stdClass $model
+     * @param Model $model
      * @param int $ownerId
      * @param float|null $money
      *
      * @return float|null
      */
-    public function getTaxRateFee(Model $model, int $ownerId, ?float $money = null):?float
+    public function getTaxRateFee(Model $model, int $ownerId, ?float $money = null): ?float
     {
         $taxRate = null;
-        if ($model->tax_rate_id){
+        if ($model->tax_rate_id) {
             $model->loadMissing("taxRate");
             $taxRate = $model->taxRate;
         }
-        if (!$taxRate){
+        if (!$taxRate) {
             /** @var Model|\stdClass $owner */
             $owner = new Owner();
             $owner->id = $ownerId;
             $owner->load("taxRate");
             $taxRate = $owner->taxRate;
         }
-        if (!$taxRate)return null;
-        if ($money===null)return $taxRate->value;
-        return $money*($taxRate->value/100);
+        if (!$taxRate) return null;
+        if ($money === null) return $taxRate->value;
+        return $money * ($taxRate->value / 100);
     }
 
-    public function changeManualBackStatus($id,$isManual)
+    public function changeManualBackStatus($id, $isManual)
     {
-        $owner=Owner::query()->find($id);
-        if ($isManual==0)$owner->update(['is_manual_back'=>1]);
-        else $owner->update(['is_manual_back'=>0]);
+        $owner = Owner::query()->find($id);
+        if ($isManual == 0) $owner->update(['is_manual_back' => 1]);
+        else $owner->update(['is_manual_back' => 0]);
         return $owner;
     }
-    public function changeIntervalTime($id,$intervalTime)
+
+    public function changeIntervalTime($id, $intervalTime)
     {
-        $owner=Owner::query()->find($id);
-        $owner->update(['interval_time'=>$intervalTime]);
+        $owner = Owner::query()->find($id);
+        $owner->update(['interval_time' => $intervalTime]);
         return $owner;
     }
 
     function getIdArr(?int $userId = null): array
     {
-        if (!$userId)$userId = Auth::id();
-        return $this->cacheService->getOrExecute("USER.{$userId}.OWNER.ID",function()use($userId){
-            return array_column($this->getQuery($userId)->get()->toArray(),"id");
+        if (!$userId) {
+            $userId = Auth::id();
+        }
+        return $this->cacheService->getOrExecute("USER.{$userId}.OWNER.ID", function () use ($userId) {
+            return array_column($this->getQuery($userId)->get()->toArray(), "id");
         });
     }
-    function getCodeArr(?int $userId): array
+
+    function getCodeArr(?int $userId = null): array
     {
         $column = "code";
-        if (!$userId)$userId = Auth::id();
-        return $this->cacheService->getOrExecute("USER.{$userId}.OWNER.CODE",function()use($userId, $column){
-            return array_column($this->getQuery($userId, $column)->get()->toArray(),$column);
+        if (!$userId) {
+            $userId = Auth::id();
+        }
+        return $this->cacheService->getOrExecute("USER.{$userId}.OWNER.CODE", function () use ($userId, $column) {
+            return array_column($this->getQuery($userId, $column)->get()->toArray(), $column);
         });
     }
+
     function getQuery(?int $userId = null, $column = "id"): Builder
     {
-        if (!$userId)$userId = Auth::id();
-        $query = Owner::query()->select("owners.".$column);
-        if (!app("UserService")->checkAdminIdentity($userId) && !app("AuthorityService")->checkAllOwner($userId)){
-            //$query->whereHas("roles",function ($query)use($userId){
-                $query->whereHas("users",function ($query)use($userId){
-                    $query->where("users.id",$userId);
-                });
-            //});
+        if (!$userId) $userId = Auth::id();
+        $query = Owner::query()->select("owners." . $column);
+        if (!app("UserService")->checkAdminIdentity($userId) && !app("AuthorityService")->checkAllOwner($userId)) {
+            $query->whereHas("users", function ($query) use ($userId) {
+                $query->where("users.id", $userId);
+            });
         }
         return $query->whereNull("deleted_at");
     }
 
     public function combineOwners($owners)
     {
-        foreach ($owners as $owner){
-            $departmentObligationOwner=$owner->departmentObligationOwner??false;
-            if (!$departmentObligationOwner)continue;
-            foreach ($departmentObligationOwner as $item){
-                if ($item->obligation_code=='kc'){
-                    $owner->kc=$item->department_id;$owner->kcGroup=$item->department?$item->department->name:'';
+        foreach ($owners as $owner) {
+            $departmentObligationOwner = $owner->departmentObligationOwner ?? false;
+            if (!$departmentObligationOwner) continue;
+            foreach ($departmentObligationOwner as $item) {
+                if ($item->obligation_code == 'kc') {
+                    $owner->kc = $item->department_id;
+                    $owner->kcGroup = $item->department ? $item->department->name : '';
                 }
-                if ($item->obligation_code=='jg'){
-                    $owner->jg=$item->department_id;$owner->jgGroup=$item->department?$item->department->name:'';
+                if ($item->obligation_code == 'jg') {
+                    $owner->jg = $item->department_id;
+                    $owner->jgGroup = $item->department ? $item->department->name : '';
                 }
-                if ($item->obligation_code=='th'){
-                    $owner->th=$item->department_id;$owner->thGroup=$item->department?$item->department->name:'';
+                if ($item->obligation_code == 'th') {
+                    $owner->th = $item->department_id;
+                    $owner->thGroup = $item->department ? $item->department->name : '';
                 }
-                if ($item->obligation_code=='sh'){
-                    $owner->sh=$item->department_id;$owner->shGroup=$item->department?$item->department->name:'';
+                if ($item->obligation_code == 'sh') {
+                    $owner->sh = $item->department_id;
+                    $owner->shGroup = $item->department ? $item->department->name : '';
                 }
-                if ($item->obligation_code=='fh'){
-                    $owner->fh=$item->department_id;$owner->fhGroup=$item->department?$item->department->name:'';
+                if ($item->obligation_code == 'fh') {
+                    $owner->fh = $item->department_id;
+                    $owner->fhGroup = $item->department ? $item->department->name : '';
                 }
             }
         }
         return $owners;
     }
 
-    public function getOwnerGroupUnderOwner($ids):array
+    public function getOwnerGroupUnderOwner($ids): array
     {
-        return Owner::query()->select("id")->whereIn("user_owner_group_id",$ids)
+        return Owner::query()->select("id")->whereIn("user_owner_group_id", $ids)
             ->pluck("id")->toArray();
     }
 }

+ 1 - 2
app/Services/RealtimePendingOrdersService.php

@@ -42,7 +42,6 @@ class RealtimePendingOrdersService
     {
         $start = $start ?? date('Y-m-d 00:00:00');
         $end = $end ?? date('Y-m-d 23:59:59');
-        $ownerIds = app('OwnerService')->getSelection();
         $builders = Order::query()->selectRaw("warehouses.code," .
             "count(case wms_status when '创建订单' then 1 end) as createOrder, " .
             "count(case wms_status when '分配完成' then 1 end) as assignedComplete, " .
@@ -54,7 +53,7 @@ class RealtimePendingOrdersService
             ->whereIn('wms_status', ['创建订单', '分配完成', '部分分配', '部分装箱', '播种完成'])
             ->leftJoin('warehouses', 'orders.warehouse_id', 'warehouses.id')
             ->groupBy('warehouse_id');
-        if ($ownerIds) $builders->whereIn('owner_id', $ownerIds);
+        $builders->whereIn('owner_id', app("OwnerService")->getQuery());
         return $builders->get();
     }
 }

+ 1 - 3
app/Services/RejectedService.php

@@ -5,12 +5,10 @@ namespace App\Services;
 use App\Exports\RejectedExport;
 use App\OracleDOCASNHeader;
 use App\OracleDOCOrderHeader;
-use App\OrderIssue;
 use App\RejectedBill;
 use App\Services\common\QueryService;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
 use App\Traits\ServiceAppAop;
 
 
@@ -33,7 +31,7 @@ class RejectedService
         if (count($owners)==0){
             $owners[] = [''];
         }
-        $rejectedBills = RejectedBill::query()->with('user','owner', 'logistic', 'items.quality','record:logistic_number,record_at',
+        $rejectedBills = RejectedBill::query()->with('user','owner', 'logistic', 'items.quality','record:logistic_number,record_at,location_at',
             'items.packageImages','items.commodityImages','items.uploadFiles','orderIssueRejectedBill:logistic_number_return')
             ->orderBy('rejected_bills.id', 'desc')
             ->where(function ($query)use ($owners){

+ 10 - 0
app/Services/StoreService.php

@@ -66,6 +66,11 @@ class StoreService
         $oracleDocAsnHerderService = app(OracleDocAsnHerderService::class);
         $last_time = $this->getAsnLastSyncAt($created_at, 'create');
         $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateCreate($last_time);
+        try {
+            $oracleDocAsnHerderService->rejectPush($asnHerders);
+        } catch (\Exception $e) {
+            Log::error("退货推送asn集合失败",[$e->getMessage()]);
+        }
         if (count($asnHerders)<1) return;
         $last_time = $asnHerders->first()['addtime'];
         $last_records = $asnHerders->where('addtime', $last_time);
@@ -89,6 +94,11 @@ class StoreService
         app('LogService')
             ->log(__METHOD__, __FUNCTION__, '11 获取上次更新时间:' . $last_time );
         $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateEdit($last_time);
+        try {
+            $oracleDocAsnHerderService->rejectPush($asnHerders);
+        } catch (\Exception $e) {
+            Log::error("退货推送asn集合失败",[$e->getMessage()]);
+        }
         if (count($asnHerders)<1) return;
         $last_time = $asnHerders->first()['edittime'];
         $last_records = $asnHerders->where('edittime', $last_time);

+ 1 - 1
config/users.php

@@ -1,7 +1,7 @@
 <?php
 
 return [
-    'superAdmin' => ['xuxiaodong','ldaaww','baoshi56','周亚萍','shiyao','zhouzhendong','zengjun',"yang",'huhao','zy','刘媛媛','李家磊',env('SUPER_ADMIN',"")],
+    'superAdmin' => ['xuxiaodong','ldaaww','baoshi56','周亚萍','shiyao','zhouzhendong','zengjun',"yang",'huhao','zy','刘媛媛','李家磊','唐闻炎',env('SUPER_ADMIN',"")],
     'token_expire_minutes'=>7200,
     'token_check_in_expire_minutes'=>432000, //打卡过期时间,单位为秒
     'cookie_expire_minutes'=>7200,//cookie过期时间,单位分钟

+ 32 - 0
database/migrations/2022_02_23_172938_change_receive_records_add_column.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeReceiveRecordsAddColumn extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('receive_records', function (Blueprint $table) {
+            $table->timestamp("location_at")->nullable()->comment("本地时间");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('receive_records', function (Blueprint $table) {
+            $table->dropColumn("location_at");
+        });
+    }
+}

+ 17 - 15
resources/views/order/workOrder/index.blade.php

@@ -827,24 +827,24 @@
                     },
                         @endcan
                     {
-                        name: 'logistic_number', type: 'input', placeholder: '快递单号'
+                        name: 'order_issue_type',
+                        type: 'select_multiple_select',
+                        tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的问题件类型'],
+                        placeholder: ['问题件类型', '定位或多选问题件类型'],
+                        data: this.orderIssueTypes
                     },
                     {
-                        name: 'is_issue_order',
-                        type: 'select',
-                        placeholder: '问题件',
-                        data: [{name: 'true', value: '有'}, {name: 'false', value: '无'}]
+                        name: 'user_work_group_id', type: 'select_multiple_select',
+                        tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的仓库责任方'],
+                        placeholder: ['仓库责任方', '定位或多选仓库责任方'], data: this.userWorkgroup
                     },
+
                     {name: 'creator', type: 'input', placeholder: '创建人'},
                 ], [
                     {name: 'review_at_start', type: 'time', tip: ['终审开始日期', '时间']},
                     {name: 'review_at_end', type: 'time', tip: ['终审结束日期', '时间']},
                     {
-                        name: 'order_issue_type',
-                        type: 'select_multiple_select',
-                        tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的问题件类型'],
-                        placeholder: ['问题件类型', '定位或多选问题件类型'],
-                        data: this.orderIssueTypes
+                        name: 'logistic_number', type: 'input', placeholder: '快递单号'
                     },
                     {name: 'client_code', type: 'input', placeholder: '客户订单号'},
                     {
@@ -905,13 +905,15 @@
                         placeholder: '宝时快递减免',
                         data: this.workOrderRemissionType
                     },
-                    {
-                        name: 'user_work_group_id', type: 'select_multiple_select',
-                        tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的仓库责任方'],
-                        placeholder: ['仓库责任方', '定位或多选仓库责任方'], data: this.userWorkgroup
-                    },
+
                     {name: 'user_owner_group_id', type: 'select', placeholder: '项目责任方', data: this.userOwnerGroup},
                     {name: 'rejecting_status', type: 'select', placeholder: '退回状态', data: this.rejectingStatus},
+                    {
+                        name: 'is_issue_order',
+                        type: 'select',
+                        placeholder: '问题件',
+                        data: [{name: 'true', value: '有'}, {name: 'false', value: '无'}]
+                    },
                 ], [
                     {name: 'order_issue_log', type: 'input', placeholder: '问题件处理日志'},
                     {

+ 3 - 1
resources/views/rejected/receiveRecord.blade.php

@@ -26,6 +26,7 @@
                 <td>@{{ record.logistic ? record.logistic.name : '未知' }}</td>
                 <td>@{{ record.warehouse ? record.warehouse.name : '未知' }}</td>
                 <td>@{{ record.record_at }}</td>
+                <td>@{{ record.location_at }}</td>
                 <td>@{{ delayed[record.delayed] }}</td>
             </tr>
         </table>
@@ -65,7 +66,8 @@
                 {name:'logistic_number',value: '快递单号', },
                 {name:'logistic_id', value: '快递公司'},
                 {name:'warehouse_id', value: '仓库'},
-                {name:'record_at', value: '记录时间'},
+                {name:'record_at', value: '上载时间'},
+                {name:'location_at', value: '本地时间'},
                 {name:'delayed',value: '延时标记', neglect: true},
             ];
             new Header({

+ 15 - 2
resources/views/rejected/record.blade.php

@@ -238,10 +238,20 @@
                     }
                 });
             },
+            _getToDay(){
+                let now = new Date();
+                let yy = now.getFullYear();
+                let mm = now.getMonth() + 1;
+                let dd = now.getDate();
+                let hh = now.getHours();
+                let m = now.getMinutes();
+                let ss = now.getSeconds();
+                return yy+'-'+(mm<10 ? '0'+mm : mm)+'-'+(dd<10 ? '0'+dd : dd)+" "+(hh<10 ? '0'+hh : hh)+":"+(m<10 ? '0'+m : m)+":"+(ss<10 ? '0'+ss : ss);
+            },
             failRetry(){
                 this.data.forEach(item=>{
                     if (!item.status){
-                        window.axios.post('{{url('record')}}',{logisticNumber:item.logisticNumber,warehouse:this.selected},{
+                        window.axios.post('{{url('record')}}',{logisticNumber:item.logisticNumber,locationAt:item.locationAt,warehouse:this.selected},{
                             headers: {
                                 "jwtToken" : this.jwtToken
                             }
@@ -266,7 +276,8 @@
                 });
             },
             submitRecord(logisticNumber,recordAt){
-                window.axios.post('{{url('record')}}',{logisticNumber:logisticNumber,warehouse:this.selected},{
+                let dateTime = this._getToDay();
+                window.axios.post('{{url('record')}}',{logisticNumber:logisticNumber,locationAt:dateTime,warehouse:this.selected},{
                     headers: {
                         "jwtToken" : this.jwtToken,
                     }
@@ -282,6 +293,7 @@
                     }
                     this.buildToast(status,logisticNumber);
                     this.data.unshift({
+                        locationAt:dateTime,
                         logisticNumber:logisticNumber,logistic:status ? res.data.logistic : "未知",recordAt:status ? res.data.recordAt : recordAt,status:status
                     });
                     if (!status)this.errorSum++;
@@ -290,6 +302,7 @@
                     this.playAudio('storage/networkError.mp3');
                     this.buildToast(false,logisticNumber);
                     this.data.unshift({
+                        locationAt:dateTime,
                         logisticNumber:logisticNumber,logistic:"未知",recordAt:recordAt,status:false
                     });
                     this.errorSum++;

+ 1 - 1
resources/views/rejected/search/general.blade.php

@@ -77,7 +77,7 @@
                             </span>
                         </td>
                         <td class="text-muted"><span>@{{rejectedBill.created_at}}</span></td>
-                        <td class="text-muted"><span>@{{rejectedBill.record ? rejectedBill.record.record_at : ''}}</span></td>
+                        <td class="text-muted"><span>@{{rejectedBill.record ? (rejectedBill.record.location_at ? rejectedBill.record.location_at : rejectedBill.record.record_at) : ''}}</span></td>
                         <td><span v-if="rejectedBill.owner"><span>@{{rejectedBill.owner.name}}</span></span></td>
                         <td><span>@{{rejectedBill.logistic_number_return}}</span></td>
                         <td class="text-muted"><span v-if="rejectedBill.logistic"><span>@{{rejectedBill.logistic.name}}</span></span></td>

+ 25 - 22
resources/views/store/receivingDashboard/punctualityProgress/index.blade.php

@@ -208,16 +208,17 @@
                 pollingFunction(this.searchData, 1000 * 30)
 
                 let column = [
-                    {name: 'receiveTaskNo', value: '收货任务号'},
-                    {name: 'status', value: '任务状态'},
-                    {name: 'asnNo', value: 'ASN号'},
-                    {name: 'reservationNo', value: '预约号'},
-                    {name: 'customerName', value: '货主'},
-                    {name: 'workGroupName', value: '操作组'},
-                    {name: 'expectancyAmount', value: '预期总数'},
-                    {name: 'putawayAmount', value: '已上架总数'},
-                    {name: 'receiveAverageConsumeDuration', value: ' 收货平均耗时'},
-                    {name: 'putawayAverageConsumeDuration', value: '上架平均耗时'},
+                    {name: 'serial', value: '序号', neglect: true},
+                    {name: 'receiveTaskNo', value: '收货任务号', neglect: true},
+                    {name: 'status', value: '任务状态', neglect: true},
+                    {name: 'asnNo', value: 'ASN号', neglect: true},
+                    {name: 'reservationNo', value: '预约号', neglect: true},
+                    {name: 'customerName', value: '货主', neglect: true},
+                    {name: 'workGroupName', value: '操作组', neglect: true},
+                    {name: 'expectancyAmount', value: '预期总数', neglect: true},
+                    {name: 'putawayAmount', value: '已上架总数', neglect: true},
+                    {name: 'receiveAverageConsumeDuration', value: ' 收货平均耗时', neglect: true},
+                    {name: 'putawayAverageConsumeDuration', value: '上架平均耗时', neglect: true},
 
                 ];
                 new Header({
@@ -226,21 +227,23 @@
                     column: column,
                     data: this.resData.details.data,
                     restorationColumn: 'addtime',
+                    isCheckAllBox:false,
                     fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
                 }).init();
 
                 let column2 = [
-                    {name: 'receiveTaskNo', value: '收货任务号'},
-                    {name: 'asnNo', value: 'ASN号'},
-                    {name: 'reservationNo', value: '预约号'},
-                    {name: 'container', value: '容器号'},
-                    {name: 'commName', value: '商品名称'},
-                    {name: 'commSku', value: 'SKU'},
-                    {name: 'commBarcode', value: '条码'},
-                    {name: 'receiveQty', value: '收货数量'},
-                    {name: 'putawayTime', value: '上架时间'},
-                    {name: 'receiveConsumeDuration', value: '收货耗时'},
-                    {name: 'putawayConsumeDuration', value: '上架耗时'},
+                    {name: 'serial', value: '序号', neglect: true},
+                    {name: 'receiveTaskNo', value: '收货任务号', neglect: true},
+                    {name: 'asnNo', value: 'ASN号', neglect: true},
+                    {name: 'reservationNo', value: '预约号', neglect: true},
+                    {name: 'container', value: '容器号', neglect: true},
+                    {name: 'commName', value: '商品名称', neglect: true},
+                    {name: 'commSku', value: 'SKU', neglect: true},
+                    {name: 'commBarcode', value: '条码', neglect: true},
+                    {name: 'receiveQty', value: '收货数量', neglect: true},
+                    {name: 'putawayTime', value: '上架时间', neglect: true},
+                    {name: 'receiveConsumeDuration', value: '收货耗时', neglect: true},
+                    {name: 'putawayConsumeDuration', value: '上架耗时', neglect: true},
 
                 ];
                 new Header({
@@ -249,6 +252,7 @@
                     column: column2,
                     data: this.resData.details.data,
                     restorationColumn: 'addtime',
+                    isCheckAllBox:false,
                     fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
                 }).init();
             },
@@ -317,7 +321,6 @@
                     let url = this.getBaseUrl() + `/api/receiveBoard/agingScheduleDetail?receiveTaskNo=${receiveTaskNo}&reservationNo=${reservationNo}&asnNo=${asnNo}`
                     tempTip.showSuccess('开始查询,请稍后!');
                     axios.get(url, this.getSearch()).then(res => {
-                        tempTip.showSuccess('查询成功!');
                         if (res.data.code !== 200) {
                             this.resData.itemDetail = null;
                         } else {

+ 29 - 25
resources/views/store/receivingDashboard/receivingTableList/index.blade.php

@@ -234,21 +234,22 @@
                 $('#list').removeClass('d-none');
                 pollingFunction(this.searchData, 1000 * 30)
                 let column = [
-                    {name: 'customerName', value: '货主'},
-                    {name: 'receiveTaskNo', value: '收货任务号'},
-                    {name: 'reservationNo', value: '预约号'},
-                    {name: 'status', value: '状态'},
-                    {name: 'asnNo', value: 'ASN单号'},
-                    {name: 'createSingleTime', value: '开单时间'},
-                    {name: 'finishedReceiveTime', value: '完成收货时间'},
-                    {name: 'receivePerson', value: '关单员'},
-                    {name: 'expectancyAmount', value: ' 预期数'},
-                    {name: 'receivedAmount', value: '已收数'},
-                    {name: 'unfinishedReceiveAmount', value: '未收数'},
-                    {name: 'receiveConsumeDuration', value: '收货时间'},
-                    {name: 'action', value: '查看明细'},
+                    {name: 'serial', value: '序号', neglect: true},
+                    {name: 'customerName', value: '货主', neglect: true},
+                    {name: 'receiveTaskNo', value: '收货任务号', neglect: true},
+                    {name: 'reservationNo', value: '预约号', neglect: true},
+                    {name: 'status', value: '状态', neglect: true},
+                    {name: 'asnNo', value: 'ASN单号', neglect: true},
+                    {name: 'createSingleTime', value: '开单时间', neglect: true},
+                    {name: 'finishedReceiveTime', value: '完成收货时间', neglect: true},
+                    {name: 'receivePerson', value: '关单员', neglect: true},
+                    {name: 'expectancyAmount', value: ' 预期数', neglect: true},
+                    {name: 'receivedAmount', value: '已收数', neglect: true},
+                    {name: 'unfinishedReceiveAmount', value: '未收数', neglect: true},
+                    {name: 'receiveConsumeDuration', value: '收货耗时', neglect: true},
+                    {name: 'action', value: '查看明细', neglect: true},
                     @can('入库管理-实时收货看板-关单')
-                    {name: 'closeAsn', value: '关单'},
+                    {name: 'closeAsn', value: '关单', neglect: true},
                     @endcan
                 ];
                 new Header({
@@ -257,20 +258,22 @@
                     column: column,
                     data: this.resData.details.data,
                     restorationColumn: 'addtime',
+                    isCheckAllBox:false,
                     fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
                 }).init();
                 let column2 = [
-                    {name: 'receiveTaskNo', value: '收货任务号'},
-                    {name: 'asnNo', value: 'ASN号'},
-                    {name: 'reservationNo', value: '预约号'},
-                    {name: 'descr', value: '商品名称'},
-                    {name: 'sku', value: 'SKU'},
-                    {name: 'expectedQty', value: '预期数'},
-                    {name: 'receivedQty', value: '收货数'},
-                    {name: 'receivePerson', value: '收货人'},
-                    {name: 'putawayQty',class:"text-danger font-weight-bold", value: '上架数'},
-                    {name: 'putawayPerson', value: '上架人'},
-                    {name: 'unfinishedReceiveQty',class:"text-danger font-weight-bold", value: '未收数'},
+                    {name: 'serial', value: '序号', neglect: true},
+                    {name: 'receiveTaskNo', value: '收货任务号', neglect: true},
+                    {name: 'asnNo', value: 'ASN号', neglect: true},
+                    {name: 'reservationNo', value: '预约号', neglect: true},
+                    {name: 'descr', value: '商品名称', neglect: true},
+                    {name: 'sku', value: 'SKU', neglect: true},
+                    {name: 'expectedQty', value: '预期数', neglect: true},
+                    {name: 'receivedQty', value: '收货数', neglect: true},
+                    {name: 'receivePerson', value: '收货人', neglect: true},
+                    {name: 'putawayQty',class:"text-danger font-weight-bold", value: '上架数', neglect: true},
+                    {name: 'putawayPerson', value: '上架人', neglect: true},
+                    {name: 'unfinishedReceiveQty',class:"text-danger font-weight-bold", value: '未收数', neglect: true},
                 ];
                 new Header({
                     el: "table_inner",
@@ -278,6 +281,7 @@
                     column: column2,
                     data: this.resData.details.data,
                     restorationColumn: 'addtime',
+                    isCheckAllBox:false,
                     fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
                 }).init();
             },

+ 258 - 0
resources/views/store/receivingDashboard/stayPutawayList.blade.php

@@ -0,0 +1,258 @@
+@extends('layouts.app')
+@section('title')待上架列表@endsection
+@section('content')
+    <div class="d-none" id="list">
+        <!--查询            -->
+        <div class="row m-3" style="background-color: #fff;">
+            <div class="form-group m-2">
+                <select class="form-control selectpicker" title="分页大小" v-model="size">
+                    <option value="50">50</option>
+                    <option value="100">100</option>
+                    <option value="200">200</option>
+                    <option value="500">500</option>
+                    <option value="1000">1000</option>
+                </select>
+            </div>
+            <div class="form-group m-2" style="max-width: 200px !important;">
+                <select v-model="search.customerCode" class="selectpicker form-control" title="选择货主"
+                        data-actions-box="true"
+                        data-live-search="true"
+                        data-live-search-placeholder="搜索"
+                >
+                    <option v-for="(v,k) of searchSelects.owners" :value="v.code" :key="v.code">@{{ v.name }}</option>
+                </select>
+            </div>
+            <div class="form-group m-2" style="max-width: 200px !important;">
+                <select v-model="search.workGroupId" class="selectpicker form-control" title="工作组"
+                        data-actions-box="true"
+                        data-live-search="true"
+                        data-live-search-placeholder="搜索"
+                >
+                    <option v-for="(v,k) of searchSelects.workGroups" :value="v.id" :key="v.id">@{{ v.name }}</option>
+                </select>
+            </div>
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="容器号">
+                <input v-model="search.container" class="form-control" type="text" step="01" placeholder="容器号">
+            </div>
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="收货任务号">
+                <input v-model="search.receiveTaskNo" class="form-control" type="text" step="01" placeholder="收货任务号">
+            </div>
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="ASN号">
+                <input v-model="search.asnNo" class="form-control" type="text" step="01" placeholder="ASN号">
+            </div>
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="起始日期">
+                <input v-model="search.receiveStartTime" class="form-control" type="date" step="01">
+            </div>
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="截止日期">
+                <input v-model="search.receiveEndTime" class="form-control" type="date" step="01">
+            </div>
+            <div class="form-group m-2">
+                <button class="form-control btn btn-sm btn-info" @click="searchData()">查询</button>
+            </div>
+        </div>
+        <div class="form-group  m-4">
+            <span class="font-weight-bold">待上架总数:<span class="text-danger">@{{ resData.details.total }}</span></span>
+        </div>
+        <!--            表格-->
+        <table class="table table-striped table-bordered table-hover text-nowrap"
+               style="background: #fff;" id="table">
+            <tr v-for="(item,i) in resData.details.data" :key="i">
+                <td class="td-warm text-muted "><span>@{{ i+1 }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.warehouseName }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.customerName }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.container }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.receiveTaskNo }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.asnNo }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.receivePerson }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.receiveTime }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.commSku }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.commBarcode }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.commName }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.quanlityCondition }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.attrWarehouse }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.produceDate }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.expiryDate }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.inboundDate }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.batchNumber }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.lotNo }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.stayPutawayQty }}</span></td>
+            </tr>
+        </table>
+
+        <nav aria-label="..+.">
+            <ul class="pagination">
+                <li class="page-item" :class="current===1?'disabled':''">
+                    <button class="page-link" @click="pagination('pre')">上一页</button>
+                </li>
+                <li class="page-item" :class="current===resData.details.pages?'disabled':''">
+                    <button class="page-link" @click="pagination('next')">下一页</button>
+                </li>
+            </ul>
+        </nav>
+    </div>
+
+
+@endsection
+
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
+    <script>
+        /**
+         * @Description: 轮询执行方法
+         * @param {func} function 需要轮询的方法
+         * @param {time} number 轮询间隔,默认1s
+         * @param {endTime} number 可轮询时间, 为空时一直轮询
+         * @param {immedaite} boolean 第一次是否立即执行
+         * @author: XuLijuan
+         */
+        const pollingFunction = (func, time = 1000, endTime, immediate = false) => {
+            immediate && func(); //是否立即执行一次,由实际决定
+            const startTime = new Date().getTime();
+            const pollTimer = setInterval(() => {
+                const nowTime = new Date().getTime();
+                if (endTime && nowTime - startTime >= endTime) {
+                    pollTimer && clearInterval(pollTimer);
+                }
+                func();
+            }, time);
+            return pollTimer;
+        };
+        let vue = new Vue({
+            el: "#list",
+            data: {
+                timer: null,
+                resData: {
+                    details: {
+                        data: [],
+                        total: null,
+                        current: 1,
+                        pages: null,
+                        size: 50,
+                    },
+                    itemDetail: null,
+                },
+                searchSelects: {
+                    owners: {!! $owners !!},
+                    workGroups: {!! $workGroups !!},
+                },
+                selectTr: null,
+                search: {
+                    customerCode: null,
+                    container: null,
+                    asnNo: null,
+                    receiveStartTime: null,
+                    receiveEndTime: null,
+                    receiveTaskNo: null,
+                    workGroupId: null,
+                },
+                size: 50,
+                current: 1,
+            },
+            created() {
+                let url = this.getBaseUrl() + `/api/receiveBoard/stayPutawayList?size=${this.size}&current=${this.current}`
+                this.initSearchDate();
+                this.getPageResult(url);
+            },
+            beforeDestroy() {
+                clearInterval(this.timer)
+            },
+            mounted: function () {
+                $('#list').removeClass('d-none');
+                pollingFunction(this.searchData, 1000 * 30)
+                let column = [
+                    {name: 'serial', value: '序号', neglect: true},
+                    {name: 'warehouseName', value: '仓库',neglect: true},
+                    {name: 'customerName', value: '货主',neglect: true},
+                    {name: 'container', value: '容器号',neglect: true},
+                    {name: 'receiveTaskNo', value: '收货任务号',neglect: true},
+                    {name: 'asnNo', value: 'ASN号',neglect: true},
+                    {name: 'receivePerson', value: '收货员',neglect: true},
+                    {name: 'receiveTime', value: '收货时间',neglect: true},
+                    {name: 'commSku', value: 'sku',neglect: true},
+                    {name: 'commBarcode', value: '条码',neglect: true},
+                    {name: 'commName', value: '商品名称',neglect: true},
+                    {name: 'quanlityCondition', value: '质量状态',neglect: true},
+                    {name: 'attrWarehouse', value: '属性仓',neglect: true},
+                    {name: 'produceDate', value: '生产日期',neglect: true},
+                    {name: 'expiryDate', value: '失效日期',neglect: true},
+                    {name: 'inboundDate', value: '入库日期',neglect: true},
+                    {name: 'batchNumber', value: '批号',neglect: true},
+                    {name: 'lotNo', value: '批次号',neglect: true},
+                    {name: 'stayPutawayQty', value: '待上架数量',neglect: true},
+
+                ];
+                new Header({
+                    el: "table",
+                    name: "details",
+                    column: column,
+                    data: this.resData.details.data,
+                    restorationColumn: 'addtime',
+                    isCheckAllBox:false,
+                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
+                }).init();
+            },
+            methods: {
+                getPageResult(url) {
+                    axios.post(url, this.getSearch()).then(res => {
+                        if (res.data.code !== 200) {
+                            this.resData.details.data = [];
+                            this.resData.details.total = 0
+                            this.resData.details.current = 1
+                            this.resData.details.pages = 0
+                            this.resData.details.size = 50;
+                        } else {
+                            this.resData.details.data = res.data.data.list;
+                            this.resData.details.total = res.data.data.page.total;
+                            this.resData.details.current = res.data.data.page.pageNum;
+                            this.resData.details.pages = res.data.data.page.pages
+                            this.resData.details.size = res.data.data.page.pageSize;
+                        }
+                    });
+                },
+                getSearch() {
+                    let search = Object.assign({}, this.search);
+                    search.startTime += ' 00:00:00';
+                    search.endTime += ' 23:59:59';
+                    return search;
+                },
+                //初始化日期为今天和昨天
+                initSearchDate() {
+                    let day1 = new Date();
+                    day1.setTime(day1.getTime() - 24 * 60 * 60 * 1000);
+                    let s1 = day1.getFullYear() + "-" + ((day1.getMonth() + 1) >= 10 ? (day1.getMonth() + 1) : ('0' + (day1.getMonth() + 1))) + "-" + (day1.getDate() >= 10 ? day1.getDate() : ('0' + day1.getDate()));
+                    //今天的时间
+                    let day2 = new Date();
+                    day2.setTime(day2.getTime());
+                    let s2 = day2.getFullYear() + "-" + ((day2.getMonth() + 1) >= 10 ? (day2.getMonth() + 1) : ('0' + (day2.getMonth() + 1))) + "-" + (day2.getDate() >= 10 ? day2.getDate() : ('0' + day2.getDate()));
+                    this.search.startTime = s1;
+                    this.search.endTime = s2;
+                },
+                searchData() {
+                    this.current = 1;
+                    this.pagination();
+                },
+                //根据环境获取不同的url
+                getBaseUrl() {
+                    let url = null;
+                    let env = "{{ config('app.env') }}";
+                    if (env === 'local') {
+                        url = 'http://127.0.0.1:8116'
+                    } else if (env === 'production') {
+                        url = 'https://device.baoshi56.com'
+                    }
+                    return url;
+                },
+                pagination(flag) {
+                    if (flag === 'pre' && this.current > 1) {
+                        this.current--;
+                    } else if (flag === 'next' && this.current < this.resData.details.pages) {
+                        this.current++;
+                    }
+                    let url = this.getBaseUrl() + `/api/receiveBoard/stayPutawayList?size=${this.size}&current=${this.current}`
+                    this.getPageResult(url);
+                },
+            },
+
+        });
+    </script>
+@endsection

+ 1 - 0
routes/web.php

@@ -565,6 +565,7 @@ Route::group(['middleware' => 'auth'], function ($route) {
         Route::prefix("/receivingDashboard")->group(function (){
             Route::get("/receivingTableList", "ReceivingDashboardController@receivingTableList");
             Route::get("/punctualityProgress", "ReceivingDashboardController@punctualityProgress");
+            Route::get("/stayPutawayList", "ReceivingDashboardController@stayPutawayList");
         });
 
         Route::group(['prefix' => 'inStorage'], function () {