Просмотр исходного кода

Merge branch 'master' into Haozi

# Conflicts:
#	resources/views/inventory/stockInventory/inventoryMission.blade.php
haozi 5 лет назад
Родитель
Сommit
e06243ba25

+ 19 - 18
app/Console/Commands/WASSyncWMSOrderInformation.php

@@ -47,23 +47,24 @@ class WASSyncWMSOrderInformation extends Command
 
     public function WasSyncWmsOrder(){
 
-        /** @var OrderTrackingService $orderTrackingService */
-        $orderTrackingService  = app('orderTrackingService');
-
-        $dataInterval = intval(data_get(config('sync'), 'order_tracking_import.interval')) * 60 + 5;
-
-        $startDate = Carbon::now()->subSeconds($dataInterval);
-
-        $syncStartDate = data_get(config('sync'), 'order_tracking_import.start_at');
-
-        if($syncStartDate ?? false){
-            $syncStartDate = Carbon::parse($syncStartDate);
-            if ($startDate->lt($syncStartDate)) {
-                $startDate = $syncStartDate;
-            }
-        }
-
-//        $startDate = Carbon::parse('2020-05-06 13:16:51')->toDateTimeString();
-        $orderTrackingService->根据设置从WMS同步追踪货主的订单($startDate);
+//        /** @var OrderTrackingService $orderTrackingService */
+//        $orderTrackingService  = app('orderTrackingService');
+//
+//        $dataInterval = intval(data_get(config('sync'), 'order_tracking_import.interval')) * 60 + 5;
+//
+//        $startDate = Carbon::now()->subSeconds($dataInterval);
+//
+//        $syncStartDate = data_get(config('sync'), 'order_tracking_import.start_at');
+//
+//        if($syncStartDate ?? false){
+//            $syncStartDate = Carbon::parse($syncStartDate);
+//            if ($startDate->lt($syncStartDate)) {
+//                $startDate = $syncStartDate;
+//            }
+//        }
+//
+////        $startDate = Carbon::parse('2020-05-06 13:16:51')->toDateTimeString();
+////        $orderTrackingService->根据设置从WMS同步追踪货主的订单($startDate);
+//        $orderTrackingService->trackingWmsOrder($startDate);
     }
 }

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

@@ -18,7 +18,7 @@ use Maatwebsite\Excel\Facades\Excel;
 class StoreCheckingReceiveController extends Controller
 {
     public function mission(Request $request){
-        if(!Gate::allows('入库管理-盘收一体-盘收-查看')){ return redirect(url('/'));  }
+        if(!Gate::allows('入库管理-盘收一体-盘收-查看')){ return view('store/index');  }
         /** @var StoreCheckingReceiveService $service */
         $service = app('storeCheckingReceiveService');
 

+ 11 - 18
app/Http/Controllers/TestController.php

@@ -478,29 +478,22 @@ class TestController extends Controller
 
     public function test3()
     {
+//        $startDate = \Illuminate\Support\Carbon::parse('2020-05-06 13:16:51')->toDateTimeString();
 
-        /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService = app('dataHandlerService');
-        $startDate = \Illuminate\Support\Carbon::parse('2020-05-06 13:16:51')->toDateTimeString();
+
+        $startDate = \Illuminate\Support\Carbon::parse('2020-09-21 00:00:00')->toDateTimeString();
         /** @var OrderTrackingService $orderTrackingService */
         $orderTrackingService  = app('orderTrackingService');
-
-        $data = OrderTracking::query()->with(['owner', 'commodities' => function ($query) {
-            $query->with(['commodity', 'package.order.logistic']);
-        },])->orderByDesc('created_at')->first();
-        dd($data);
-
-
-
-//    $orderTrackingService->根据设置从WMS同步追踪货主的订单($startDate);
-
+        $orderTrackingService->trackingWmsOrder($startDate);
     }
 
-    public function doctype(){
-
-        $a=\Doctrine\DBAL\Types\Type::getTypesMap();
-        dd($a);
+    public function syncWmsOrder(){
+        $startDate = \Illuminate\Support\Carbon::parse('2020-09-19 00:00:00')->toDateTimeString();
+        /** @var OrderTrackingService $orderTrackingService */
+        $orderTrackingService  = app('orderTrackingService');
+        $orderTrackingService->trackingWmsOrder($startDate);
     }
+
     public function orderTrckingOwnerAll(){
         $owners = Owner::all();
         foreach ($owners as $owner) {
@@ -515,7 +508,7 @@ class TestController extends Controller
         }
     }
 
-    public function updateOrderTracking(){
+    public function updateOrderTracking(){  // update  client  order_remark
         $orderTrackings = OrderTracking::query()
             ->with('commodities.package.order')
             ->get();

+ 62 - 0
app/Http/Controllers/api/thirdPart/haiq/StorageController.php

@@ -0,0 +1,62 @@
+<?php
+
+
+namespace App\Http\Controllers\api\thirdPart\haiq;
+
+
+use App\Services\LogService;
+use Illuminate\Support\Facades\Http;
+use Illuminate\Support\Facades\Request;
+
+class StorageController
+{
+    public function out(Request $request){
+        $bin = json_encode([
+            "taskCode" => "",
+            "binCode" => "",
+            "sequence" => 0,
+            "fromLocCode" => "",
+            "toLocCode" => "",
+        ],JSON_UNESCAPED_UNICODE);
+        $req = [
+            "groupCode" => 0,
+            "priority" => 0,
+            "taskMode" => 0,
+            "emptyBinQty" => 0,
+            "toWorkStations" => [""],
+            "bins" => [$bin],
+        ];
+
+        $req = json_encode($req, JSON_UNESCAPED_UNICODE);
+        $response = Http::post(config('api.haiq.storage.out'));
+        $msg = "haiq-料箱出库成功";
+        if ($response["code"] != 200){
+            $msg = "haiq-料箱出库失败";
+        }
+        LogService::log(__METHOD__,$msg,"REQUEST:".$req." | RESPONSE:".json_encode($response,JSON_UNESCAPED_UNICODE));
+    }
+    public function in(Request $request){
+        $stockInfo = json_encode([
+            "skuCode" => "",
+            "qty" => 0,
+        ]);
+        $req = [
+            "taskCode" => "",
+            "taskMode" => 0,
+            "binCode" => "",
+            "fromWorkStation" => "",
+            "fromLocCode" => "",
+            "toLocCode" => "",
+            "isEmpty" => 0,
+            "stockInfo" => [$stockInfo],
+        ];
+
+        $req = json_encode($req, JSON_UNESCAPED_UNICODE);
+        $response = Http::post(config('api.haiq.storage.in'));
+        $msg = "haiq-料箱回库成功";
+        if ($response["code"] != 200){
+            $msg = "haiq-料箱回库失败";
+        }
+        LogService::log(__METHOD__,$msg,"REQUEST:".$req." | RESPONSE:".json_encode($response,JSON_UNESCAPED_UNICODE));
+    }
+}

+ 91 - 28
app/Services/CommodityService.php

@@ -6,6 +6,7 @@ use App\Commodity;
 use App\OracleBasSKU;
 use App\Owner;
 use App\Services\common\BatchUpdateService;
+use Carbon\Carbon;
 
 Class CommodityService
 {
@@ -132,34 +133,6 @@ Class CommodityService
         }
     }
 
-    public function 根据sku和货主同步商品信息($sku,$owner)
-    {
-        try {
-            $basSku = OracleBasSKU::query()->where('sku', $sku)->where('CustomerID', $owner['code'])->first();
-            $commodity = Commodity::query()->where('sku', $sku)->where('owner_id', $owner['id'])->first();
-            $syncInfo = [
-                'name' => $basSku['descr_c'],
-                'sku' => $sku,
-                'owner_id' => $owner['id'],
-                'length' => $basSku['skulength'],
-                'width' => $basSku['skuwidth'],
-                'height' => $basSku['skuhigh'],
-                'volumn' => $basSku['cube'],
-            ];
-            if ($commodity) {
-                $commodity->update($syncInfo);
-            } else {
-                $commodity = Commodity::query()->create($syncInfo);
-            }
-        } catch (\Exception $e) {
-            $log = ['info'=>'根据sku和货主同步商品信息','mesaage'=>$e->getMessage(),'trace'=>$e->getTraceAsString()];
-            LogService::log(__METHOD__,__FUNCTION__,json_encode($log));
-        } finally {
-            return $commodity ?? null;
-        }
-    }
-
-
     public function getOwnerCommodities(array $params){
         $query = Commodity::query();
         foreach ($params as $column => $value){
@@ -174,4 +147,94 @@ Class CommodityService
     public function batchUpdate(array $params){
         return app(BatchUpdateService::class)->batchUpdate('commodities', $params);
     }
+
+    public function getCommoditiesByWmsOrder($orderHeaders){
+        if(!$orderHeaders) return null;
+        $customerId_sku_map = [];
+        foreach ($orderHeaders as $orderHeader) {
+            $oracleDOCOrderDetails=  $orderHeader->oracleDOCOrderDetails;
+            foreach ($oracleDOCOrderDetails as $oracleDOCOrderDetail) {
+                $value = [
+                    'owner_code' => $oracleDOCOrderDetail->customerid,
+                    'sku'=> $oracleDOCOrderDetail->sku
+                ];
+                if(!in_array($value,$customerId_sku_map)){
+                    $customerId_sku_map[] = $value;
+                }
+            }
+        }
+
+        $owner_codes = array_diff(array_unique(data_get($customerId_sku_map,'*.owner_code')),['','*',null]) ;
+        if(!$owner_codes) return null;
+
+        $owners = Owner::query()
+            ->whereIn('code',$owner_codes)
+            ->get();
+
+        $owners_code_map = [];
+        $owners_id_map = [];
+        foreach ($owners as $owner) {
+            $owners_code_map[$owner->code] = $owner;
+            $owners_id_map[$owner->id] = $owner;
+        }
+        $orderHeader_sku = array_diff(array_unique(data_get($customerId_sku_map,'*.sku')),['','*',null]) ;
+        $commodities = Commodity::query()
+            ->whereIn('owner_id',data_get($owners,'*.id'))
+            ->whereIn('sku',$orderHeader_sku)
+            ->get();
+        if($commodities->count() < count($orderHeader_sku)){
+            $params = [];
+            foreach ($commodities as $commodity) {
+                $owner_code = $owners_id_map[$commodity->owner_id]->code ?? '';
+                $arr [] = [
+                    'owner_code' => $owner_code,
+                    'sku' => $commodity->sku
+                ];
+            }
+            $params = array_diff($customerId_sku_map,$params);
+            $commodity_set = $this->createCommodities($params,$owners_code_map);
+            $commodities = $commodities->concat($commodity_set);
+        }
+        return  $commodities;
+    }
+
+    public function createCommodities($params,$owners_code_map)
+    {
+        if(!$params) return [];
+        $bas_sku_arr = OracleBasSKU::query()
+            ->whereIn('CustomerID',data_get($params,'*.owner_code'))
+            ->whereIn('Sku',data_get($params,'*.sku'))
+            ->get();
+        $fillables = [];
+        foreach ($bas_sku_arr as $bas_sku) {
+            $owner = $owners_code_map[$bas_sku->customerid] ?? '';
+            $created_at = Carbon::now()->format('Y-m-d H:i:s');
+            $fillables[] = [
+                'owner_id' => $owner->id,
+                'sku' => $bas_sku->sku,
+                'name' =>$bas_sku->descr_c,
+                'created_at' => $created_at,
+                'length' =>$bas_sku->skulength,
+                'width' => $bas_sku->skuwidth,
+                'height' => $bas_sku->skuhigh,
+                'volumn' => $bas_sku->cube
+            ];
+        }
+
+        if(count($fillables) > 0){
+            try {
+                $this->insert($fillables);
+                LogService::log(__METHOD__,__FUNCTION__,'批量添加 commodity ' . count($fillables) .json_encode($fillables) );
+            } catch (\Exception $e) {
+                LogService::log(__METHOD__,__FUNCTION__,'批量添加 commodity error' .json_encode($fillables) ."||".$e->getMessage().'||'.$e->getTraceAsString());
+            }
+        }
+
+        return Commodity::query()
+            ->whereIn('owner_id',data_get($owners_code_map,'*.id'))
+            ->whereIn('sku',data_get($params,'*.sku'))
+            ->get();
+    }
+
+
 }

+ 52 - 1
app/Services/LogisticService.php

@@ -4,6 +4,7 @@ namespace App\Services;
 
 use App\Logistic;
 use App\OracleBasCustomer;
+use Carbon\Carbon;
 use Illuminate\Support\Facades\Auth;
 
 Class LogisticService
@@ -16,7 +17,7 @@ Class LogisticService
     public function getWASLogisticsByWMSOrderHeaders($WMSOrderHeaders){
         $carrierIds = [];
         foreach ($WMSOrderHeaders as $WMSOrderHeader) {
-            array_push($carrierIds,$WMSOrderHeader['carrierid']);
+            $carrierIds [] = $WMSOrderHeader->carrierid;
         }
         $carrierIds = array_unique($carrierIds);
         $carrierIds = array_diff($carrierIds,['*','',null]);
@@ -50,4 +51,54 @@ Class LogisticService
         if ($values)return $logistic->firstOrCreate($params, $values);
         return $logistic->firstOrCreate($params);
     }
+
+    public function getLogisticByOrderHeaders($orderHeaders){
+        $carrierIds = data_get($orderHeaders,'*.carrierid');
+        $carrierIds = array_unique($carrierIds);
+        $carrierIds = array_diff($carrierIds,['','*',null]);
+        if(!$carrierIds){return [];}
+        $logistics = Logistic::query()->whereIn('code',$carrierIds)->get();
+
+        if($logistics->count() < $carrierIds){
+            $carrierIds = array_diff($carrierIds,data_get($logistics,'*.code'));
+            $logistic_list = $this->createLogisticByCarrierIds($carrierIds);
+            $logistics = $logistics->concat($logistic_list);
+        }
+        return $logistics;
+    }
+
+    public function createLogisticByCarrierIds($carrierIds){
+        if(!$carrierIds){return [];}
+        $baseCustomers = OracleBasCustomer::query()
+            ->where('Customer_Type','CA')
+            ->whereIn('CustomerID',$carrierIds)
+            ->get();
+
+        $fillables = [];
+        $created_at = Carbon::now()->format('Y-m-d H:i:s');
+        foreach ($baseCustomers as $baseCustomer) {
+            $fillables[] = [
+                'code' => $baseCustomer['customerid'],
+                'name' => $baseCustomer['descr_c'],
+                'created_at' => $created_at
+            ];
+        }
+
+        try {
+            if($fillables){
+                $this->insert($fillables);
+                LogService::log(__METHOD__, __FUNCTION__, '批量创建 owner error' . count($fillables) . json_encode($fillables) );
+            }
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__, __FUNCTION__, '批量创建 owner error' . json_encode($fillables) . "||".$e->getMessage() . '||' . $e->getTraceAsString() );
+        } finally {
+            return Logistic::query()->whereIn('code',$carrierIds)->get();
+        }
+    }
+
+    public function insert(array $params){
+        return Logistic::query()->insert($params);
+    }
+
+
 }

+ 22 - 0
app/Services/OracleDOCOrderHeaderService.php

@@ -2,7 +2,9 @@
 
 namespace App\Services;
 
+use App\OracleDOCOrderDetail;
 use App\OracleDOCOrderHeader;
+use App\Owner;
 
 Class OracleDOCOrderHeaderService
 {
@@ -39,5 +41,25 @@ Class OracleDOCOrderHeaderService
             ->get();
     }
 
+    public function getWmsOrderOnStartDateCreate($startDate){
+        /** @var Owner $owners */
+        $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
+        return OracleDOCOrderHeader::query()
+            ->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
+            ->where('addTime','>=',$startDate)
+            ->whereIn('customerID',data_get($owners,'*.code'))
+            ->get();
+    }
+
+    public function getWmsOrderOnStartDateEdit($startDate){
+        /** @var Owner $owners */
+        $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
+        return OracleDOCOrderHeader::query()
+            ->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
+            ->where('EditTime','>=',$startDate)
+            ->whereColumn('EditTime','<>','addTime')
+            ->whereIn('customerID',data_get($owners,'*.code'))
+            ->get();
+    }
 
 }

+ 253 - 3
app/Services/OrderPackageCommoditiesService.php

@@ -16,6 +16,15 @@ use Carbon\Carbon;
 
 class OrderPackageCommoditiesService
 {
+
+    public function insert(array $params){
+        return OrderPackageCommodities::query()->insert($params);
+    }
+
+    public function batchUpdate($params){
+        return app(BatchUpdateService::class)->batchUpdate('order_package_commodities',$params);
+    }
+
     public function basedOnOracleDetailsStore($orderNo, $orderPackage)
     {
         $details = OracleDOCOrderDetail::query()->where('orderNo', $orderNo)->get();
@@ -207,10 +216,10 @@ class OrderPackageCommoditiesService
         try {
             if(count($fillables) > 0){
                 OrderPackageCommodities::query()->insert($fillables);
-                LogService::log(__METHOD__,__FUNCTION__,'批量创建'.count($fillables).json_encode($fillables));
+                LogService::log(__METHOD__,__FUNCTION__,'批量创建 OrderPackageCommodities'.count($fillables).json_encode($fillables));
             }
         } catch (\Exception $e) {
-            LogService::log(__METHOD__,__FUNCTION__,'批量创建异常:'.$e->getMessage().$e->getTraceAsString());
+            LogService::log(__METHOD__,__FUNCTION__,'批量创建异常 OrderPackageCommodities error '.json_encode($fillables).$e->getMessage().$e->getTraceAsString());
         } finally {
             $orderIds = data_get($orders,'*.id');
             return Order::query()->with('packages.commodities')->whereIn('id',$orderIds)->get();
@@ -271,6 +280,7 @@ class OrderPackageCommoditiesService
         }catch (\Exception $e) {
             LogService::log(__METHOD__, __FUNCTION__, '添加打包信息失败' . json_encode($newItems).$e->getMessage().$e->getTraceAsString());
         }
+
         if(count($multipleData) > 1){
             try {
                 /** @var BatchUpdateService $batchUpdateService */
@@ -295,7 +305,7 @@ class OrderPackageCommoditiesService
         }
         foreach ($orderHeaders as $orderHeader) {
             $order = $orders[$orderHeader['orderno']] ?? null;
-            if(isset($order)){
+            if(!isset($order)){
                 continue;
             }
             $orderPackages = $order['packages'];
@@ -392,4 +402,244 @@ class OrderPackageCommoditiesService
         }
         return $orderPackagerCommodities;
     }
+
+    public function createByWmsOrder($orderHeaders,$order_packages,$owner_code_map,$commodities)
+    {
+        if(!$order_packages){ return [];}
+        if(!$orderHeaders){ return [];}
+        $order_packages_logistic_number_map = [];
+        $commodity_owner_id_sku_map = [];
+        foreach ($order_packages as $order_package) {
+            $order_packages_logistic_number_map[$order_package->logistic_number]  = $order_package;
+        }
+        foreach ($commodities as $commodity) {
+            $commodity_owner_id_sku_map[' owner_id='.$commodity->owner_id.' sku='.$commodity->sku] = $commodity;
+        }
+
+        $order_packages_commodities = $this->getByWmsOrder($orderHeaders);
+        $map = [];
+        foreach ($order_packages_commodities as $item) {
+            $key = 'commodity_id='.$item->commodity_id.' order_package_id'.$item->order_package_id.' amount='.$item->amount;
+            $map[$key] = $item;
+        }
+
+        $insert_params = [];
+        foreach ($orderHeaders as $orderHeader) {
+            $actAllocationDetails = $orderHeader->actAllocationDetails;
+            $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['*','',null]);
+            if(count($logistic_numbers) > 0){
+                $params = $this->getParamsByActAllocationDetails($actAllocationDetails,
+                    $order_packages_logistic_number_map,
+                    $owner_code_map,
+                    $commodity_owner_id_sku_map,
+                    $logistic_numbers);
+                foreach ($params as $key =>$param) {
+                    $mapkey =  'commodity_id='.($param['commodity_id'] ?? '').' order_package_id'.($param['order_package_id'] ?? '').' amount='.($param['amount'] ?? '');
+                    if($map[$mapkey] ?? false){
+                        unset($params[$key],$map[$mapkey]);
+                    }
+                }
+                $insert_params = array_merge($insert_params,$params);
+                unset($params);
+            }
+
+            $oracleDOCOrderDetails = $orderHeader->oracleDOCOrderDetails;
+            if(count($logistic_numbers) ==0 && $oracleDOCOrderDetails->count() > 0){
+                $logistic_number = $orderHeader->soreference5;
+                $params = $this->getParamsByOracleDOCOrderDetail($oracleDOCOrderDetails,
+                    $order_packages_logistic_number_map,
+                    $owner_code_map,
+                    $commodity_owner_id_sku_map,
+                    $logistic_number
+                );
+                foreach ($params as $key =>$param) {
+                    $mapkey =  'commodity_id='.($param['commodity_id'] ?? '').' order_package_id'.($param['order_package_id'] ?? '').' amount='.($param['amount'] ?? '');
+                    if($map[$mapkey] ?? false){
+                        unset($params[$key],$map[$mapkey]);
+                    }
+                }
+                $insert_params = array_merge($insert_params,$params);
+                unset($params);
+            }
+        }
+        $order_packages_commodities = $this->create($insert_params);
+        unset($orderHeaders,$order_packages,$owner_code_map,$commodities,$insert_params);
+        return $order_packages_commodities;
+    }
+
+    public function getParamsByActAllocationDetails($details,array $order_packages_logistic_number_map,array $owner_code_map,array $commodity_owner_id_sku_map,array $logistic_numbers){
+        if(!$details){return [];}
+
+        $fillables = [];
+        $create_at = Carbon::now()->format('Y-m-d H:i:s');
+        foreach ($details as $actAllocationDetail) {
+            $pickToTraceID = $actAllocationDetail->picktotraceid;
+            if(in_array($pickToTraceID,$logistic_numbers)){
+                $orderPackage = $order_packages_logistic_number_map[$pickToTraceID] ?? false;
+                if(!$orderPackage){continue;}
+                $owner = $owner_code_map[$actAllocationDetail->customerid] ?? false;
+                if(!$owner){continue;}
+                $commodity = $commodity_owner_id_sku_map[' owner_id='.$owner->id.' sku='.$actAllocationDetail->sku];
+                if(!$commodity){continue;}
+                $fillables[] = [
+                    'commodity_id' =>$commodity->id,
+                    'order_package_id' =>$orderPackage->id,
+                    'amount' => $actAllocationDetail->qty,
+                    'created_at' => $create_at
+                ];
+            }
+        }
+        unset($details,$order_packages_logistic_number_map,$owner_code_map,$commodity_owner_id_sku_map,$logistic_numbers);
+        return $fillables;
+    }
+    public function getParamsByOracleDOCOrderDetail($details,array $order_packages_logistic_number_map,array $owner_code_map,array $commodity_owner_id_sku_map,$logistic_number){
+        if(!$details){ return [];}
+
+        $orderPackage = $order_packages_logistic_number_map[$logistic_number] ?? false;
+        if(!$orderPackage){return [];}
+
+        $fillables = [];
+        $create_at = Carbon::now()->format('Y-m-d H:i:s');
+        foreach ($details as $oracleDOCOrderDetail) {
+            $owner = $owner_code_map[$oracleDOCOrderDetail->customerid] ?? false;
+            if(!$owner){continue;}
+            $commodity = $commodity_owner_id_sku_map[ ' owner_id='.$owner->id.' sku='.$oracleDOCOrderDetail->sku];
+            $fillables[] = [
+                'commodity_id' =>$commodity->id,
+                'order_package_id' =>$orderPackage->id,
+                'amount' => $oracleDOCOrderDetail->qtyordered,
+                'created_at' => $create_at
+            ];
+        }
+        unset($details,$order_packages_logistic_number_map,$owner_code_map,$commodity_owner_id_sku_map,$logistic_number);
+        return $fillables;
+    }
+
+    public function create(array $params){
+        if(!$params){return [];}
+        try {
+            $this->insert($params);
+            LogService::log(__METHOD__,__FUNCTION__,'批量创建 OrderPackageCommodities'.count($params).json_encode($params));
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__,__FUNCTION__,'批量创建 OrderPackageCommodities error'.json_encode($params)."||".$e->getMessage().'||'.$e->getTraceAsString());
+        } finally {
+            $order_package_ids = array_unique(data_get($params,'*.order_package_id'));
+            unset($params);
+            return OrderPackageCommodities::query()
+                ->with('commodity')
+                ->whereIn('order_package_id',$order_package_ids)
+                ->get();
+        }
+    }
+
+
+    public function updateCommoditiesByWmsOrder($orderHeaders){
+        if(!$orderHeaders){return ;}
+//        /** @var OrderPackageService $order_packege_service */
+//        $order_package_service = app(OrderPackageService::class);
+        /** @var CommodityService $commodityService */
+        /** @var OwnerService $ownerService */
+        $commodityService = app(CommodityService::class);
+        $ownerService = app(OwnerService::class);
+        $owners =$ownerService->getOwnersByOrderHeaders($orderHeaders);
+        $owner_code_map = [];
+        $owner_id_map = [];
+        foreach ($owners as $owner) {
+            $owner_code_map[$owner->code] = $owner;
+            $owner_id_map[$owner->id] = $owner;
+        }
+        $commodities = $commodityService->getCommoditiesByWmsOrder($orderHeaders);
+        $commodities_owner_code_code_map = [];
+        foreach ($commodities as $commodity) {
+            $owner = $owner_id_map[$commodity->owner_id] ?? '';
+            $commodities_owner_code_code_map[' owner_code='.$owner->code.' code='.$commodity->code] = $commodity;
+        }
+
+        $order_nos = data_get($orderHeaders,'*.orderno');
+        $order_package_commodities = OrderPackageCommodities::query()
+            ->with('package.order')
+            ->whereHas('package.order',function($query) use ($order_nos){
+                $query->whereIn('code',$order_nos);
+            })->get();
+        $order_no_map = [];
+        $order_package_logistic_numbers_map = [];
+        foreach ($order_package_commodities as $order_package_commodity) {
+            $order_package = $order_package_commodity->package;
+            $order = $order_package->order;
+            $order_no_map[$order->code][] = $order_package_commodity;
+            $order_package_logistic_numbers_map[$order_package->logistic_number] = $order_package;
+        }
+
+        $insertParams = [];
+        $updateParams = [['id','order_package_id'.'commodity_id','amount']];
+        foreach ($orderHeaders as $orderHeader) {
+            $order_no = $orderHeader->orderno;
+            $order_package_commodities = $order_no_map[$order_no] ?? false;
+            if(!$order_package_commodities){continue;}
+            $actAllocationDetails = $orderHeader->actAllocationDetails;
+            foreach ($actAllocationDetails as $actAllocationDetail) {
+                $logistic_number = $actAllocationDetail->picktotraceid;
+                if(in_array($logistic_number,['*','',null])){continue;}
+                $order_package = $order_package_logistic_numbers_map[$logistic_number];
+                $key = ' owner_code='.$actAllocationDetail->code.' code='.$actAllocationDetail->sku;
+                $commodity = $commodities_owner_code_code_map[$key] ?? false;
+                if(!$commodity){continue;}
+                foreach ($order_package_commodities as $key=>$order_package_commodity) {
+                    if($order_package_commodity->sku == $actAllocationDetail->sku  &&
+                        $order_package_commodity->commodity_id ==  $actAllocationDetail->id &&
+                        $order_package_commodity->amount == $actAllocationDetail->qty){
+                        unset($order_package_commodities[$key]);
+                        break;
+                    }elseif($order_package_commodity->sku == $actAllocationDetail->sku  &&
+                        $order_package_commodity->commodity_id ==  $actAllocationDetail->id){
+                        $updateParams[] = [
+                            'id' => $order_package_commodity->id,
+                            'commodity_id' => $order_package_commodity->commodity_id,
+                            'amount' => $actAllocationDetail->qty,
+                        ];
+                        unset($order_package_commodities[$key]);
+                        break;
+                    }elseif($order_package_commodity->sku !== $actAllocationDetail->sku  &&
+                        $order_package_commodity->commodity_id !==  $actAllocationDetail->id &&
+                        $order_package_commodity->amount !== $actAllocationDetail->qty){
+                        $insertParams[] = [
+                            'order_package_id' => $order_package->id,
+                            'commodity_id' => $order_package_commodity->commodity_id,
+                            'amount' => $actAllocationDetail->qty,
+                        ];
+                        break;
+                    }
+                }
+            }
+        }
+
+        if(count($updateParams) > 0){
+            $this->batchUpdate($updateParams);
+        }
+        {
+            /** @var OrderPackageService $orderPackageService */
+            $orderPackageService = app(OrderPackageService::class);
+            $order_packages = $orderPackageService->getByWmsOrders($orderHeaders);
+            $this->createByWmsOrder($orderHeaders, $order_packages, $owner_code_map, $commodities);
+        }
+
+        if(count($insertParams) > 0){
+            try {
+                OrderPackageCommodities::query()->insert($insertParams);
+                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities'.json_encode($insertParams));
+            } catch (\Exception $e) {
+                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities error'.json_encode($insertParams)."||".$e->getMessage().'||'.$e->getTraceAsString());
+            }
+        }
+    }
+
+    public function getByWmsOrder($orderHeaders){
+        $order_no =  data_get($orderHeaders,'*.orderno');
+        return OrderPackageCommodities::query()
+            ->with('package.order')
+            ->whereHas('package.order',function($query) use ($order_no){
+                $query->whereIn('code',$order_no);
+            })->get();
+    }
+
 }

+ 200 - 1
app/Services/OrderPackageService.php

@@ -13,6 +13,14 @@ use Carbon\Carbon;
 
 class OrderPackageService
 {
+    public function batchUpdate(array $params){
+        return app(BatchUpdateService::class)->batchUpdate('order_packages',$params);
+    }
+
+    public function insert(array $params)
+    {
+        return OrderPackage::query()->insert($params);
+    }
 
     public function createdByOrder($order)
     {
@@ -262,7 +270,7 @@ class OrderPackageService
                     //$updateArr['weight'] +=(intval($commodity['weight'] ?? 0) )  * ( intval($packageCommodity['amount'] ?? 0) );
                     //$updateArr['bulk'] += (intval($commodity['bulk']  ?? 0)) * (intval($packageCommodity['amount'] ?? 0) );
                 }
-                if($package['weight'] == $updateArr['weight'] && $package['weight'] == $updateArr['bulk']){
+                if($package['weight'] == $updateArr['weight'] && $package['bulk'] == $updateArr['bulk']){
                     continue;
                 }
                 // 订单同步步时 重量 体积不覆盖已有值
@@ -336,4 +344,195 @@ class OrderPackageService
         }
     }
 
+    public function createOrderPackageByWmsOrder($orderHeaders_map)
+    {
+        if(!$orderHeaders_map ){return [];}
+        /** @var OrderService $orderService */
+        $orderService = app(OrderService::class);
+        $orders = $orderService->getOrderByWmsOrder($orderHeaders_map);
+        if(!$orders){return [];}
+        $orders_code_map = [];
+        foreach ($orders as $order) {
+            $orders_code_map[$order->code] = $order;
+        }
+
+        $order_packages_logistic_number_map = [];
+        $order_packages = OrderPackage::query()->whereIn('order_id',data_get($orders_code_map,'*.id'))->get();
+
+        foreach ($order_packages as $order_package) {
+//            $key = ' order_id='.$order_package->order_id.' logistic_number='.$order_package->logistic_number;
+            $key = ' logistic_number='.$order_package->logistic_number;
+            $order_packages_logistic_number_map[$key] = $order_package;
+        }
+
+        $insert_params = [];
+        foreach ($orders_code_map as $key=>$order) {
+            $orderHeader = $orderHeaders_map[$key];
+            if(!$orderHeader){ continue;}
+            $params = $this->getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map);
+            if(!$params){continue;}
+            $insert_params = array_merge($insert_params,$params);
+        }
+        if(count($insert_params) ==  0){return null;}
+        $order_packages = $this->createOrderPackage($insert_params);
+        /** @var OrderPackageCommoditiesService $orderPackageCommodityService */ /** @var OwnerService  $ownerService */ /** @var CommodityService  $commodityService */
+        $orderPackageCommodityService = app(OrderPackageCommoditiesService::class);
+        $ownerService = app(OwnerService::class);
+        $commodityService = app(CommodityService::class);
+        $owner_code_map = [];
+
+        $commodities = $commodityService->getCommoditiesByWmsOrder($orderHeaders_map);
+
+        $owners = $ownerService->getOwnersByOrderHeaders($orderHeaders_map);
+        foreach ($owners as $owner) {
+            $owner_code_map[$owner->code] = $owner;
+        }
+        $order_package_commodities = $orderPackageCommodityService->createByWmsOrder($orderHeaders_map,$order_packages,$owner_code_map,$commodities);
+        unset($orderHeaders_map,$orders_code_map,$fillables,$order_packages_logistic_number_map);
+        $this->updateWeightAndBulk($order_packages,$order_package_commodities);
+        unset($order_packages,$order_package_commodities);
+    }
+    public function createOrderPackage(array $params)
+    {
+        if(count($params) == 0)return null;
+        try {
+            $this->insert($params);
+            LogService::log(__METHOD__,__FUNCTION__,'批量生成 orderPackage' . count($params) . json_encode($params));
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__,__FUNCTION__,'批量生成 orderPackage error ' . json_encode($params) . $e->getMessage() . $e->getTraceAsString());
+        } finally {
+            $logistic_numbers = data_get($params,'*.logistic_number');
+            unset($params);
+            return OrderPackage::query()->whereIn('logistic_number',$logistic_numbers)->get();
+        }
+    }
+
+    public function getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map){
+        $actAllocationDetails = $orderHeader->actAllocationDetails;
+        $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['','*',null]);
+        $params = [];
+        $created_at = Carbon::now();
+        foreach ($logistic_numbers as $logistic_number) {
+            $map_key = ' order_id='.$order->id.' logistic_number='.$logistic_number;
+            if(isset($order_packages_logistic_number_map[$map_key])){ continue;}
+            $params[] = [
+                'order_id' => $order->id, 'logistic_number' => $logistic_number,'created_at' => $created_at
+            ];
+        }
+        $oracleDOCOrderDetails = $orderHeader->oracleDOCOrderDetails;
+        if(count($logistic_numbers) === 0 && count($oracleDOCOrderDetails) > 0){
+            $key = ' logistic_number='.$orderHeader->soreference5;
+            if(!isset($orderHeader->soreference5)){return $params;}
+            if(!isset($order_packages_logistic_number_map[$key])){
+                $params[] = [
+                    'order_id' => $order->id, 'logistic_number' => $orderHeader->soreference5,'created_at' => $created_at
+                ];
+            }
+        }
+        return $params;
+    }
+
+    public function updateWeightAndBulk($orderPackages,$orderPackageCommodities){
+        $orderPackageCommodities_map =[];
+        foreach ($orderPackageCommodities as $orderPackageCommodity) {
+            $order_package_id = $orderPackageCommodity->order_package_id;
+            if(!isset($orderPackageCommodities_map[$order_package_id])){
+                $orderPackageCommodities_map[$order_package_id]= [];
+            }
+            $orderPackageCommodities_map[$order_package_id][] = $orderPackageCommodity;
+        }
+
+        $update_params = [['id','bulk']];
+        foreach ($orderPackages as $orderPackage) {
+            $order_package_id = $orderPackage->id;
+            $orderPackageCommodity_list = $orderPackageCommodities_map[$order_package_id] ?? [];
+            if(!$orderPackageCommodity_list){continue;}
+            if( isset($orderPackage['bulk']) && $orderPackage['bulk']!=0){
+                continue;
+            }
+            $params = ['id'=>$order_package_id,'bulk' => null,'weight' => null];
+            foreach ($orderPackageCommodity_list as $orderPackageCommodity) {
+                $commodity = $orderPackageCommodity->commodity;
+                $bulk = bcmul($commodity['length'],$commodity['width'],5);
+                $bulk = bcmul($commodity['height'],$bulk,5);
+                $params['bulk'] +=  $bulk;
+            }
+            if($params['bulk'] == $orderPackage->bulk){continue;}
+            $update_params[]= $params;
+        }
+        if(count($update_params) > 1){
+            $this->batchUpdate($update_params);
+        }
+    }
+
+    public function updateOrderPackageByWmsOrder($orderHeaders){
+        /** @var OrderPackageCommoditiesService $orderPackageCommoditiesService */
+        $orderPackageCommoditiesService =  app(OrderPackageCommoditiesService::class);
+        if(!$orderHeaders){return;}
+        $order_nos = data_get($orderHeaders,'*.orderno');
+        $orders = Order::query()->with('packages')->whereIn('code',$order_nos)->get();
+        $orders_code_map = [];
+        $order_packages_logistic_number_map = [];
+        foreach ($orders as $order) {
+            $orders_code_map[$order->code] = $order;
+            $order_packages = $order->packages;
+            if(!$order_packages){continue;}
+            foreach ($order_packages as $order_package) {
+                $order_packages_logistic_number_map[$order_package->logistic_number] =$order_package;
+            }
+        }
+        $insertParams = [];
+        foreach ($orderHeaders as $orderHeader) {
+            $order = $orders_code_map[$orderHeader->orderno] ?? false;
+            if(!$order){continue;}
+            $order_packages = $order->packages;
+            if(!$order_packages){continue;}
+            $params =$this->getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map);
+            if(count($params) > $order_packages->count()){
+                foreach ($params as $param) {
+                    $order_package = $order_packages->where('logistic_number',$param)->first();
+                    if($order_package){continue;}
+                    $insertParams[] = $param;
+                }
+            }
+        }
+        if(count($insertParams)>0){
+            $this->insert($insertParams);
+        }
+
+        $orderPackageCommoditiesService->updateCommoditiesByWmsOrder($orderHeaders);
+        $order_packages = OrderPackage::query()->with('order')
+            ->whereHas('order',function($query) use($order_nos){
+                $query->whereIn('code',$order_nos);
+            })->get();
+
+        $order_package_ids = data_get($order_packages,'*.id');
+        $order_package_commodities = OrderPackageCommodities::query()
+            ->with('package')
+            ->whereHas('package',function($query) use ($order_package_ids){
+                $query->whereIn('id',$order_package_ids);
+            })->get();
+        $this->updateWeightAndBulk($order_packages,$order_package_commodities);
+    }
+
+    public function getLogisticNumbersByOrderHeader($orderHeader){
+       $oracleDOCOrderDetails =  $orderHeader->oracleDOCOrderDetails;
+       $actAllocationDetails = $orderHeader->actAllocationDetails;
+       if($actAllocationDetails){
+            $logistic_numbers = data_get($actAllocationDetails,'*.picktotraceid');
+            return array_diff(array_unique($logistic_numbers),['','*',null]);
+       }
+       if($oracleDOCOrderDetails){
+           return [$orderHeader->soreference5];
+       }
+       return [];
+    }
+
+    public function getByWmsOrders($orderHeaders){
+        $order_nos = data_get($orderHeaders,'*.orderno');
+        return OrderPackage::query()->with('order')
+            ->whereHas('order',function($query) use ($order_nos){
+                $query->whereIn('code',$order_nos);
+            })->get();
+    }
 }

+ 190 - 4
app/Services/OrderService.php

@@ -12,6 +12,7 @@ use App\OrderPackageCommodities;
 use App\Owner;
 use App\RejectedBill;
 use App\Services\common\BatchUpdateService;
+use App\Services\common\DataHandlerService;
 use App\Shop;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Collection;
@@ -19,6 +20,14 @@ use Illuminate\Support\Facades\DB;
 
 class OrderService
 {
+    public function batchUpdate($params){
+        return app(BatchUpdateService::class)->batchUpdate('orders',$params);
+    }
+
+    public function insert($params){
+        return Order::query()->insert($params);
+    }
+
     private function preciseQuery(array $params,$sql){
         $orderdate_start=$params["orderdate_start"] ?? null;
         $orderdate_end=$params["orderdate_end"] ?? null;
@@ -555,7 +564,7 @@ class OrderService
 
     public function 根据WMS订单创建WAS订单($orderHeaders, $owners, $shops, $logistics)
     {
-
+        if(!$orderHeaders){return [];}
         $fillables = [];
         $owners_map = [];
         $shop_map = [];
@@ -582,9 +591,9 @@ class OrderService
         // XXX 循环 300 个元素 3s-5s
         foreach ($orderHeaders as $orderHeader) {
             $owner_key = 'code='.$orderHeader->customerid;
-            $owner = $owners_map[$owner_key];
+            $owner = $owners_map[$owner_key] ?? '';
 
-            $shop_key = 'name='.$orderHeader->issuepartyname.' owner_id='.$owner->owner_id;
+            $shop_key = 'name='.$orderHeader->issuepartyname.' owner_id='.$owner->owner_id ?? '';
             $shop = $shop_map[$shop_key] ?? '';
 
             $logistic_key = 'code='. $orderHeader->userdefine1;
@@ -592,7 +601,7 @@ class OrderService
 
             // change logistic to 新杰物流
             // $logistic 自提 and $owner 安桥主品
-            if($logistic_change->id == $logistic->id && $owner_change->id == $owner->id){
+            if($logistic_change->id == $logistic->id ??'' && $owner_change->id == $owner->id ?? ''){
                 $logistic = $logistic_an_jie;
             }
 
@@ -782,4 +791,181 @@ class OrderService
             'client_code' => $orderHeader->soreference1,
         ]);
     }
+
+
+    public function createOrderByWmsOrder($orderHeaders)
+    {
+        if($orderHeaders->isEmpty())return null;
+        /** @var OwnerService $ownerService */
+        /** @var LogisticService $logisticService */
+        /** @var ShopService $shopService */
+        /** @var OrderPackageService $orderPackageService */
+        $ownerService = app(OwnerService::class);
+        $logisticService = app(LogisticService::class);
+        $shopService = app(ShopService::class);
+        $orderPackageService = app(OrderPackageService::class);
+
+        $orderHeaders_map = [];$owners_code_map = [];$logistics_code_map = [];$shop_name_map=[]; $owners_id_map = [];
+
+        $owners = $ownerService->getOwnersByOrderHeaders($orderHeaders);
+        $logistics = $logisticService->getLogisticByOrderHeaders($orderHeaders);
+        $shops = $shopService->getShopsByOrderHeaders($orderHeaders);
+
+        foreach ($orderHeaders as $orderHeader) {
+            $orderHeaders_map[$orderHeader->orderno] = $orderHeader;
+        }
+        foreach ($owners as $owner) {
+            $owners_code_map[$owner->code] = $owner;
+            $owners_id_map[$owner->id] = $owner;
+        }
+        foreach ($logistics as $logistic) {
+            $logistics_code_map[$logistic->code] = $logistic;
+        }
+
+        foreach ($shops as $shop) {
+            $owner_code = $owners_id_map[$shop->owner_id] ? $owners_id_map[$shop->owner_id]['code'] : '';
+            $key = ' owner_code='.$owner_code.' name='.$shop->name;
+            $shop_name_map[$key] = $shop;
+        }
+
+        $this->filterExitingOrder($orderHeaders_map);
+        $fillables = $this->getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map);
+        $orders = $this->createOrder($fillables);
+        if(!$orders)return [];
+
+
+        $orderPackageService->createOrderPackageByWmsOrder($orderHeaders_map);
+        $order_nos = array_keys($orderHeaders_map);
+        unset($orderHeaders_map,$orders_code_map,$shop_name_map,$logistics_code_map,$owners_code_map);
+        return Order::query()->whereIn('code',$order_nos)->get();
+    }
+
+    public function filterExitingOrder(&$orderHeaders_map){
+        $order_map = [];
+        $order_nos = array_keys($orderHeaders_map);
+        $orders = Order::query()->whereIn('code',$order_nos)->get();
+
+        foreach ($orders as $order) {
+            $key = $order->code;
+            $order_map[$key] = $order;
+        }
+        $orderHeaders_map = array_diff_key($orderHeaders_map,$order_map);
+    }
+
+    public function getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map){
+        $params = [];
+        foreach ($orderHeaders_map as $orderHeader) {
+            $owner = $owners_code_map[$orderHeader->customerid] ?? null;
+            $logistics =  $logistics_code_map[$orderHeader->carrierid] ?? null;
+            $shop = $shop_name_map[' _owner_code'.$orderHeader->customerid.' name='.$orderHeader->issuepartyname] ?? '';
+            $params[] = [
+                'code' => $orderHeader->orderno,
+                'owner_id' => $owner->id ?? null,
+                'wms_status' => $orderHeader->oracleBASCode ? $orderHeader->oracleBASCode->codename_c : null,
+                'created_at' => $orderHeader->addtime,
+                'logistic_id' => $logistics ? $logistics->id : null,
+                'shop_id' => $shop ? $shop->id : null,
+                'consignee_name' => $orderHeader->c_contact,
+                'consignee_phone' => $orderHeader->c_tel2,
+                'province' => $orderHeader->c_province,
+                'city' => $orderHeader->c_city,
+                'district' => $orderHeader->c_district,
+                'address' => $orderHeader->c_address1,
+                'client_code' => $orderHeader->soreference1,
+            ];
+        }
+        return $params;
+    }
+
+    public function createOrder(array $params){
+        if(count($params) == 0) return [];
+        try {
+            $this->insert($params);
+            LogService::log(__METHOD__,__FUNCTION__,'批量创建 order '.count($params).json_encode($params));
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__,__FUNCTION__,'批量创建 order '.json_encode($params).'||'.$e->getMessage().'||'.$e->getTraceAsString());
+        } finally{
+            return Order::query()->whereIn('code',data_get($params,'*.code'))->get();
+        }
+    }
+
+    public function updateOrderByWmsOrder($orderHeaders)
+    {
+        /** @var OrderPackageService $orderPackageService */
+        $orderPackageService = app(OrderPackageService::class);
+        if(!$orderHeaders){return null;}
+        $order_nos = data_get($orderHeaders,'*.orderno');
+        $orders = Order::query()->where('code',$order_nos)->get();
+        $order_code_map = [];
+        foreach ($orders as $order) {
+            $order_code_map[$order->code] = $order;
+        }
+
+        $owners = app(OwnerService::class)->getOwnersByOrderHeaders($orderHeaders);
+        $owner_code_map = [];
+        foreach ($owners as $owner) {
+            $owner_code_map[$owner->code] = $owner;
+        }
+        $logistics = app(LogisticService::class)->getWASLogisticsByWMSOrderHeaders($orderHeaders);
+        $logistics_code_map = [];
+        foreach ($logistics as $logistic) {
+            $logistics_code_map[$logistic->code] = $logistic;
+        }
+
+        $shops = app(ShopService::class)->getShopsByOrderHeaders($orderHeaders);
+        $shops_owner_id_name_map = [];
+        foreach ($shops as  $shop){
+            $key = ' owner_id='.$shop->owner_id.' name='.$shop->name;
+            $shops_owner_id_name_map[$key] = $shop;
+        }
+        $updateParams = [[
+            'owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code'
+        ]];
+        foreach ($orderHeaders as $orderHeader) {
+            $order_no = $orderHeader->orderno;
+            $order = $order_code_map[$order_no] ?? false;
+            $logistic = $logistics_code_map[$orderHeader->userdefine1] ?? '';
+            $owner = $owner_code_map[$orderHeader->customerid] ?? '';
+            $shop = $shops_owner_id_name_map[' owner_id='.$owner->id.' name='.$orderHeader->issuepartyname] ?? '';
+            $shop_id = $shop['id'] ?? '';$logistic_id = $logistic['id'] ?? '';$owner_id = $owner['id'] ?? '';
+            if(!$order){continue;}
+            if($order->wms_status != $orderHeader->oracleBASCode_codename_c ||
+                $order->logistic_id != $logistic_id ||
+                $order->shop_id != $shop_id ||
+                $order->owner_id != $owner_id ||
+                $order->consignee_name != $orderHeader->c_contact ||
+                $order->consignee_phone != $orderHeader->c_tel2 ||
+                $order->province != $orderHeader->c_province ||
+                $order->city != $orderHeader->c_city ||
+                $order->district != $orderHeader->c_district ||
+                $order->address != $orderHeader->c_address1 ||
+                $order->client_code != $orderHeader->soreference1){
+                $updateParams[] = [
+                    'owner_id' => $owner->id ?? null,
+                    'wms_status' => $orderHeader->oracleBASCode ? $orderHeader->oracleBASCode->codename_c : null,
+                    'logistic_id' => $logistic ? $logistic->id : null,
+                    'shop_id' => $shop ? $shop->id : null,
+                    'consignee_name' => $orderHeader->c_contact,
+                    'consignee_phone' => $orderHeader->c_tel2,
+                    'province' => $orderHeader->c_province,
+                    'city' => $orderHeader->c_city,
+                    'district' => $orderHeader->c_district,
+                    'address' => $orderHeader->c_address1,
+                    'client_code' => $orderHeader->soreference1];
+            }
+        }
+        if(count($updateParams) > 0){
+            $this->batchUpdate($updateParams);
+        }
+        $this->createOrderByWmsOrder($orderHeaders);
+        $orderPackageService->updateOrderPackageByWmsOrder($orderHeaders);
+        unset($updateParams,$orderHeaders);
+    }
+
+    public function getOrderByWmsOrder($orderHeaders){
+        if(!$orderHeaders){return null;}
+        $order_nos = data_get($orderHeaders,'*.orderno');
+        return Order::query()->whereIn('code',$order_nos)->get();
+    }
+
 }

+ 18 - 0
app/Services/OrderTrackingOwnerService.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Services;
+
+use App\Owner;
+
+class OrderTrackingOwnerService
+{
+
+    public function getTrackingOrderOwner()
+    {
+        return Owner::query()
+            ->with('orderTrackingOwner')
+            ->whereHas('orderTrackingOwner', function ($query) {
+                $query->where('status', '启用');
+            })->get();
+    }
+}

+ 233 - 4
app/Services/OrderTrackingService.php

@@ -3,6 +3,9 @@
 namespace App\Services;
 
 use App\Exports\Export;
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\OrderPackageCommodities;
 use App\OrderTracking;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\QueryService;
@@ -12,6 +15,13 @@ use Maatwebsite\Excel\Facades\Excel;
 
 class OrderTrackingService
 {
+    public function insert($params){
+        return OrderTracking::query()->insert($params);
+    }
+
+    public function batchUpdate($params){
+        return app(BatchUpdateService::class)->batchUpdate('order_trackings',$params);
+    }
 
     public function getQuery($params)
     {
@@ -134,12 +144,13 @@ class OrderTrackingService
         $orderTrackings = OrderTracking::query()->whereIn('order_package_commodity_id', $ids)->get();
 
 
-        $this->updateOrderTracking($orderTrackings, $updateOrderPackageCommodities,$updateOrderHeader); // 更新
+        $this->updateOrderTracking($orderTrackings, $updateOrderPackageCommodities); // 更新
 
         unset($updateOrderPackageCommodities, $updateOrderHeader);
     }
 
     public function 根据订单生成订单跟踪($orderHeaders, $orders)
+
     {
         $orderPackages = [];
         $orderPackageCommodities = [];
@@ -250,9 +261,9 @@ class OrderTrackingService
         return Excel::download(new Export($row, $list), date('YmdHis', time()) . '-订单跟踪.xlsx');
     }
 
-    private function updateOrderTracking($orderTrackings, $orderPackagesCommodities,$orderHeaders)
+    private function updateOrderTracking($orderTrackings, $orderPackagesCommodities)
     {
-        $multipleData = [['id', 'owner_id', 'client', 'pick_up_at','order_remark']];
+        $multipleData = [['id', 'owner_id', 'client', 'pick_up_at']];
         $orderTrackings_list = [];
 
         foreach ($orderPackagesCommodities as $item) {
@@ -265,7 +276,7 @@ class OrderTrackingService
 
             if ($order ?? false) {
                 $code = $order['code'];
-                $orderHeader = $orderHeaders[$code] ?? '';
+                $orderHeader = $orderPackagesCommodities[$code] ?? '';
                 $pick_up_at = $orderHeader['lastshipmenttime'] ?? null; // 提货时间
 
                 $client = null;
@@ -307,6 +318,33 @@ class OrderTrackingService
         }
     }
 
+
+    /**
+     * @param $startData
+     */
+    public function trackingWmsOrder($startData){
+        $this->trackingWmsOrderOnCreate($startData);
+        $this->trackingWmsOrderOnEdit($startData);
+    }
+
+    public function trackingWmsOrderOnCreate($startData){
+        /** @var OrderService $orderSerivce */
+        $orderService = app(OrderService::class);
+        /** @var OracleDOCOrderHeader $orderHeaders */
+        $orderHeaders = app(OracleDOCOrderHeaderService::class)->getWmsOrderOnStartDateCreate($startData);
+        $orderService->createOrderByWmsOrder($orderHeaders);
+        $this->createByWmsOrderHeader($orderHeaders);
+    }
+
+    public function trackingWmsOrderOnEdit($startData){
+        /** @var OrderService $orderSerivce */
+        $orderSerivce = app(OrderService::class);
+        /** @var OracleDOCOrderHeader $orderHeaders */
+        $orderHeaders = app(OracleDOCOrderHeaderService::class)->getWmsOrderOnStartDateEdit($startData);
+        $orderSerivce->updateOrderByWmsOrder($orderHeaders);
+        $this->updateByWmsOrderHeaders($orderHeaders);
+    }
+
     public function updateOrderTracingAndSyc($id,$param,$value){
         $order_tracking = OrderTracking::query()
             ->with('commodities.package.order')
@@ -320,4 +358,195 @@ class OrderTrackingService
             })->update([$param=>$value]);
         return ['success'=> $bool];
     }
+
+    public function createByWmsOrderHeader($orderHeaders)
+    {
+        if(!$orderHeaders){return;}
+        $order_nos = data_get($orderHeaders,'*.orderno');
+        $order_package_commodities  = OrderPackageCommodities::query()
+            ->with('package.order')
+            ->whereHas('package.order',function($query) use ($order_nos){
+                $query->whereIn('code',$order_nos);
+            })->get();
+        $order_package_commodities_ids = data_get($order_package_commodities,'*.id');
+        $order_trackings = OrderTracking::query()->whereIn('order_package_commodity_id',$order_package_commodities_ids)->get();
+        $is_exist_ids = data_get($order_trackings,'*.order_package_commodity_id');
+
+        $order_package_commodities = $order_package_commodities->filter(function($item) use ($is_exist_ids){
+            $id = $item->id;
+            return !in_array($id,$is_exist_ids);
+        });
+
+        if($order_package_commodities->count() == 0){return ;}
+
+        $order_headers_map = [];
+        foreach ($orderHeaders as $item) {
+            $order_headers_map[$item->orderno] = $item;
+        }
+
+        $params = [];
+        foreach ($order_package_commodities as $item) {
+            $order = $item->package->order;
+            if(!$order){continue ;}
+            $order_header = $order_headers_map[$order->code];
+            if(!$order_header){continue ;}
+
+            $client = null;
+            $order_remark = null;
+            if ($order_header['notes'] ?? false) {
+                $notes = $order_header->notes;
+                if (strpos($notes, '[')) {
+                    $arr= str_split($notes,strpos($notes,'['));
+                    $client = $arr[0] ?? '';
+                    $order_remark = $arr[1] ?? '';
+                    $order_remark = str_replace(['[',']'],'',$order_remark);
+                }
+            }
+            $params[] =[
+                'order_package_commodity_id' => $item->id,
+                'owner_id' => $order->owner_id,
+                'client' => $client,
+                'created_at' => $order->created_at,
+                'order_remark' => $order_remark,
+                'pick_up_at' => $order_header->lastshipmenttime // 提货时间,
+            ];
+        }
+
+        try {
+            if (count($params) > 0) {
+                OrderTracking::query()->insert($params);
+                LogService::log(__METHOD__, __FUNCTION__, '批量添加 orderTracking' . json_encode($params),null);
+            }
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__, __FUNCTION__, '批量添加 orderTracking' . json_encode($params).$e->getMessage().$e->getTraceAsString(),null);
+        }
+    }
+
+    public function updateByWmsOrderHeaders($orderHeaders)
+    {
+        if(!$orderHeaders){return ;}
+        $order_nos = data_get($orderHeaders,'*.orderno');
+        $order_package_commodities = OrderPackageCommodities::query()
+            ->with('package.order')
+            ->whereHas('package.order',function($query) use ($order_nos){
+                $query->whereIn('code',$order_nos);
+            })->get();
+        $orderTrackings = OrderTracking::query()->whereIn('order_package_commodity_id',data_get($order_package_commodities,'*.id'))->get();
+        $order_tracking_id_map = [];
+        foreach ($orderTrackings as $orderTracking) {
+            $order_tracking_id_map[$orderTracking->order_package_commodity_id] = $orderTracking;
+        }
+//        $is_exist_ids = data_get($orderTrackings,'*.order_package_commodity_id');
+//        $order_package_commodities = $order_package_commodities->filter(function($order_package_commodity) use($is_exist_ids){
+//           return !in_array($order_package_commodity->id,$is_exist_ids);
+//        });
+        $order_package_commodity_order_code_map = [];
+        $order_code_map = [];
+        foreach ($order_package_commodities as $order_package_commodity) {
+            $order =$order_package_commodity->package->order;
+            if(!$order){continue;}
+            $order_code_map[$order->code] = $order;
+            $order_package_commodity_order_code_map[$order->code][] = $order_package_commodity;
+        }
+
+//        $insert_params = [];
+//        foreach ($orderHeaders as $orderHeader) {
+//            $order_package_commodity_list = $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
+//            if(!$order_package_commodity_list){continue;}
+//            $order = $order_code_map[$orderHeader->orderno];
+//            $params = $this->getParamsByOrderHeaderAndOrder($orderHeader,$order);
+//            foreach ($order_package_commodity_list as $item) {
+//                $params['order_package_commodity_id'] = $item->id;
+//                $insert_params = $params;
+//            }
+//        }
+        $update_params = [];
+        $update_params[0] =['id','client','pick_up_at','order_remark'];
+        foreach ($orderHeaders as $orderHeader) {
+            $order_package_commodity_list = $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
+
+            if(!$order_package_commodity_list){continue;}
+            $order = $order_code_map[$orderHeader->orderno];
+
+            foreach ($order_package_commodity_list as $order_package_commodity) {
+                $order_tracking = $order_tracking_id_map[$order_package_commodity->id]??false;
+                if(!$order_tracking){continue;}
+
+                $params = $this->getParamsByOrderHeaderAndOrder($orderHeader,$order);
+
+                if($order_tracking->owner_id != $params['owner_id'] ||
+                    $order_tracking->client !=$params['client'] ||
+                    $order_tracking->order_remark != $params['order_remark'] ||
+                    $order_tracking->pick_up_at != $params['pick_up_at']){
+                    $update_params[] = [
+                        'id' => $order_tracking->id,
+                        'client' => $params['client'],
+                        'pick_up_at' => $params['pick_up_at'],
+                        'order_remark' => $params['order_remark'],
+                    ];
+                }
+            }
+        }
+
+        if(count($update_params) > 1){
+            $this->batchUpdate($update_params);
+        }
+
+        $is_exist_ids = data_get($orderTrackings,'*.order_package_commodity_id');
+        $order_package_commodities = $order_package_commodities->filter(function($order_package_commodity) use($is_exist_ids){
+            return !in_array($order_package_commodity->id,$is_exist_ids);
+        });
+        $order_package_commodity_order_code_map = [];
+        $order_code_map = [];
+        foreach ($order_package_commodities as $order_package_commodity) {
+            $order =$order_package_commodity->package->order;
+            if(!$order){continue;}
+            $order_code_map[$order->code] = $order;
+            $order_package_commodity_order_code_map[$order->code][] = $order_package_commodity;
+        }
+        $insert_params = [];
+        foreach ($orderHeaders as $orderHeader) {
+            $order_package_commodity_list = $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
+            if(!$order_package_commodity_list){continue;}
+            $order = $order_code_map[$orderHeader->orderno];
+            $params = $this->getParamsByOrderHeaderAndOrder($orderHeader,$order);
+            foreach ($order_package_commodity_list as $item) {
+                $params['order_package_commodity_id'] = $item->id;
+                $insert_params[] = $params;
+            }
+        }
+        if(count($insert_params) > 0){
+            try {
+                $this->insert($insert_params);
+                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderTracking '.count($insert_params).json_encode($insert_params));
+            } catch (\Exception $e) {
+                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderTracking error'.json_encode($insert_params) .'||'.$e->getMessage(),'||'.$e->getTraceAsString());
+            }
+        }
+    }
+
+    public function getParamsByOrderHeaderAndOrder($orderHeader,$order){
+
+        $client = null;
+        $order_remark = null;
+        if ($orderHeader['notes'] ?? false) {
+            $notes = $orderHeader->notes;
+            if (strpos($notes, '[')) {
+                $index = strpos($notes, '[');
+                $client = substr($notes,0,$index);
+                $order_remark = substr($notes,$index);
+                $order_remark = ltrim($order_remark,'[');
+                $order_remark = rtrim($order_remark,']');
+            }
+        }
+        return [
+            'owner_id' => $order->owner_id,
+            'client' => $client,
+            'created_at' => $order->created_at,
+            'order_remark' => $order_remark,
+            'pick_up_at' => $orderHeader->lastshipmenttime // 提货时间
+        ];
+    }
+
+
 }

+ 48 - 0
app/Services/OwnerService.php

@@ -102,6 +102,54 @@ Class OwnerService
         })->get();
     }
 
+    public function getOwnersByOrderHeaders($orderHeaders){
+        $customerIds = array_unique(data_get($orderHeaders,'*.customerid'));
+        $customerIds = array_diff($customerIds,[null,'','*']);
+        $owners = Owner::query()->whereIn('code',data_get($orderHeaders,'*.customerid'))->get();
+
+        if($owners->count() < $customerIds){
+            $customerIds = array_diff($customerIds,data_get($owners,'*.code'));
+            $owner_list = $this->createOwnerByCustomerIds($customerIds);
+            $owners->concat($owner_list);
+        }
+        return $owners;
+    }
+
+    public function createOwnerByCustomerIds($customerIds){
+        if(!$customerIds) {return [];}
+        $basCustomer = OracleBasCustomer::query()
+            ->where('Customer_Type','OW')
+            ->whereIn('CustomerID', $customerIds)
+            ->get();
+
+        $fillables = [];
+        $created_at = Carbon::now()->format('Y-m-d H:i:s');
+        foreach ($basCustomer as $item) {
+            $fillables[] = [
+                'code' => $item->customerid,
+                'name' => $item->descr_c,
+                'created_at' => $created_at,
+            ];
+        }
+
+        try {
+            if (count($fillables) > 0) {
+                $this->insert($fillables);
+                LogService::log(__METHOD__, __FUNCTION__, '批量创建 owner error' . count($fillables) . json_encode($fillables) );
+            }
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__, __FUNCTION__, '批量创建 owner error' . json_encode($fillables) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());
+        } finally {
+            return Owner::query()->whereIn('code', $fillables)->get();
+        }
+    }
+
+    public function insert($fillables){
+        return Owner::query()->insert($fillables);
+    }
+
+
+
     public function getAuthorizedOwners(){
         $user = Auth::user();
         return Owner::query()->whereIn('id',$user->getPermittingOwnerIdsAttribute()??[])->get();

+ 66 - 0
app/Services/ShopService.php

@@ -2,7 +2,9 @@
 
 namespace App\Services;
 
+use App\Owner;
 use App\Shop;
+use Carbon\Carbon;
 
 class ShopService
 {
@@ -56,4 +58,68 @@ class ShopService
         return Shop::query()->whereIn('name',array_keys($issuePartyNames))->get();
     }
 
+    public function getShopsByOrderHeaders($orderHeaders){
+        //issuepartyname
+        $maps = [];
+        foreach ($orderHeaders as $orderHeader) {
+            $value = ['owner_code'=>$orderHeader->customerid,'issuepartyname'=>$orderHeader->issuepartyname];
+            if(!in_array($value,$maps)){
+                $maps[] = $value;
+            }
+        }
+        $issuepartynames =array_diff(array_unique(data_get($maps,'*.issuepartyname')),['','*',null])  ;
+        $shops = Shop::query()
+            ->whereIn('name',$issuepartynames)
+            ->get();
+        if($shops->count() < count($issuepartynames)){
+            $shops_code = data_get($shops,'*.name');
+            $issuepartynames = array_diff($issuepartynames,$shops_code);
+            $params = [];
+            foreach ($maps as $item){
+               if(in_array($item['issuepartyname'],$issuepartynames)){
+                   $params[] = $item;
+               }
+            }
+            $shops_list = $this->createShopByIssuePartyNameAndOwnerCode($params);
+            $shops->concat($shops_list);
+        }
+        return $shops;
+    }
+
+    public function createShopByIssuePartyNameAndOwnerCode(array $params){
+        $owners = Owner::query()
+            ->whereIn('code',data_get($params,'*.owner_code'))
+            ->get();
+        $owners_map = [];
+        foreach ($owners as $owner) {
+            $owners_map[$owner->code] = $owner;
+        }
+        $fillables = [];
+        $created_at = Carbon::now()->format('Y-m-d H:i:s');
+        foreach ($params as $param) {
+            $owner = $owners_map[$param['owner_code']] ?? '';
+            $fillables[] = [
+                'name' => $param['issuepartyname'] ?? '',
+                'owner_id' => $owner['id'] ?? '',
+                'created_at' => $created_at,
+            ];
+        }
+        try {
+            if (count($fillables) > 0) {
+                $this->insert($fillables);
+                LogService::log(__METHOD__, __FUNCTION__, '批量创建 shop ' . count($fillables) . json_encode($fillables));
+            }
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__, __FUNCTION__, '批量创建 shop ' . json_encode($fillables) .'||'.$e->getMessage().'||'.$e->getTraceAsString());
+        } finally {
+            return Shop::query()
+                ->whereIn('name',data_get($params,'*.issuepartyname'))
+                ->get();
+        }
+    }
+
+    public function insert(array $params){
+        return Shop::query()->insert($params);
+    }
+
 }

+ 7 - 0
config/api.php

@@ -29,6 +29,13 @@ return [
         ],
     ],
 
+    'haiq'=>[
+        'storage'=>[
+            'out' => "",
+            'in' => "",
+        ],
+    ],
+
     'baidu'=>[
         'speech'=>[
             'APP_ID'=> '18688250',

+ 1 - 1
package-lock.json

@@ -8763,7 +8763,7 @@
         },
         "socket.io-client": {
             "version": "2.3.0",
-            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-client%2Fdownload%2Fsocket.io-client-2.3.0.tgz",
+            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz",
             "integrity": "sha1-FNW6LgC5vNFFrkQ6uWs/hsvMG7Q=",
             "requires": {
                 "backo2": "1.0.2",

+ 6 - 5
public/js/app.js

@@ -2330,7 +2330,7 @@ function fromByteArray (uint8) {
 var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :
   typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :
   typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :
-  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : 
+  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :
   false;
 
 /**
@@ -61662,13 +61662,14 @@ try {
 
   __webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.js");
 } catch (e) {}
+
+window.moment = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module 'moment'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
 /**
  * We'll load the axios HTTP library which allows us to easily issue requests
  * to our Laravel back-end. This library automatically handles sending the
  * CSRF token as a header based on the value of the "XSRF" token cookie.
  */
 
-
 window.axios = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
 window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
 /**
@@ -61974,8 +61975,8 @@ module.exports = tempTip;
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-__webpack_require__(/*! D:\wamp64\www\bswas\resources\js\app.js */"./resources/js/app.js");
-module.exports = __webpack_require__(/*! D:\wamp64\www\bswas\resources\sass\app.scss */"./resources/sass/app.scss");
+__webpack_require__(/*! D:\phpstudy_pro\WWW\bswas\resources\js\app.js */"./resources/js/app.js");
+module.exports = __webpack_require__(/*! D:\phpstudy_pro\WWW\bswas\resources\sass\app.scss */"./resources/sass/app.scss");
 
 
 /***/ }),
@@ -61991,4 +61992,4 @@ module.exports = __webpack_require__(/*! D:\wamp64\www\bswas\resources\sass\app.
 
 /***/ })
 
-/******/ });
+/******/ });

+ 5 - 10
public/t.php

@@ -1,14 +1,9 @@
 <script>
 
 
-    let promise = new Promise(function (resolve, reject) {
-
-        resolve('xxx')
-    });
-    promise.then(function(ind){for (let i = 0; i < 9999999; i++) {
-        if (i % 5000 === 0) console.log('i')
-    }})
-    console.log('yes')
-    console.log('yes')
-    console.log('yes')
+    let arr=[a:111,b:222]
+    arr['c']=333;
+    arr['c']=333;
+    arr['c']=333;
+    console.log(Array.isArray(arr['c']),Array.isArray(arr['cc']))
 </script>

+ 5 - 3
resources/js/utilities/tempTip.js

@@ -67,13 +67,15 @@ const tempTip={
         tipper.remove();
         bg.remove();
     },
-    confirm:function(text,yesFunc,noFunc){
+    confirm:function(text,yesFunc,noFunc,yesText,noText){
+        if(typeof(yesText)==='undefined')yesText='确定';
+        if(typeof(noText)==='undefined')noText='取消';
         let bg=$("<div style='opacity:0.4;position:fixed;top:0;width:100%;height:100%;z-index:"+this.index+";background-color:#000;'></div>" );
         let tiper=$("<div class='row' style='color:#000;opacity:0.9;position:fixed;top:40%;transform:translateY(-50%);width:100%;z-index:"+(this.index+1)+"'>" +
             "<div class='col-8 offset-2'><div class='card'><div class='card-body'><div class='card-title h4'>" +
             text +
-            "</div><div class='card-text'><button class='btn btn-dark btn-lg ok'>确定</button>" +
-            "<button class='btn btn-success btn-lg cancel ml-4'>取消</button></div>" +
+            "</div><div class='card-text'><button class='btn btn-dark btn-lg ok'>"+yesText+"</button>" +
+            "<button class='btn btn-success btn-lg cancel ml-4'>"+noText+"</button></div>" +
             "</div></div></div></div>");
         let $ok = tiper.find('.ok');
         let $cancel = tiper.find('.cancel');

+ 55 - 54
resources/views/inventory/stockInventory/inventoryMission.blade.php

@@ -7,7 +7,10 @@
             <a  class="nav-link" href="{{URL::current()}}" :class="{active:isActive('enterStockInventory',3)}">盘点中({!! $inventoryAccount->id !!})</a>
         </li>
     @endcomponent
-    <div id="list" class="d-none container-fluid" >
+    <div class="text-center h5 mt-2" id="loadingPage">
+        载入中……
+    </div>
+    <div id="list" class="d-none container-fluid d-none" >
         <div class="mt-3">
             <span class="mt-3" >
                 @can('库存管理-盘点-完结')
@@ -105,20 +108,20 @@
                                name="count" class="form-control input" value="@if(old('count')){{old('count')}}@endif"  autocomplete="off">
                     </span>
 
-                <span v-if="inventory.status=='复盘中'" class="form-group ml-4">
-            <label for="count" class="text-secondary">上一次盘点数:</label>
-            <span v-if="!指定盘点记录列.re_checked_amount">
-                <span  class="font-weight-bold" >@{{ 指定盘点记录列.verified_amount }}</span>
-            </span>
-            <span v-if="指定盘点记录列.re_checked_amount">
-                <span class="font-weight-bold">@{{ 指定盘点记录列.re_checked_amount }}</span>
-            </span>
-        </span>
+{{--                <span v-if="inventory.status=='复盘中'" class="form-group ml-4">--}}
+{{--            <label for="count" class="text-secondary">上一次盘点数:</label>--}}
+{{--            <span v-if="!指定盘点记录列.re_checked_amount">--}}
+{{--                <span  class="font-weight-bold" >@{{ 指定盘点记录列.verified_amount }}</span>--}}
+{{--            </span>--}}
+{{--            <span v-if="指定盘点记录列.re_checked_amount">--}}
+{{--                <span class="font-weight-bold">@{{ 指定盘点记录列.re_checked_amount }}</span>--}}
+{{--            </span>--}}
+{{--        </span>--}}
 
-                <span v-if="inventory.status=='复盘中'" class="form-group ml-4">
-            <label for="count" class="text-secondary">盘点差异数:</label>
-            <span v-if="指定盘点记录列.difference_amount" class="font-weight-bold">@{{ 指定盘点记录列.difference_amount }}</span>
-        </span>
+{{--                <span v-if="inventory.status=='复盘中'" class="form-group ml-4">--}}
+{{--            <label for="count" class="text-secondary">盘点差异数:</label>--}}
+{{--            <span v-if="指定盘点记录列.difference_amount" class="font-weight-bold">@{{ 指定盘点记录列.difference_amount }}</span>--}}
+{{--        </span>--}}
             </div>
             <!--相同库位和条码 pc端-->
             <div class="row d-none d-xl-block" v-if="指定盘点记录列.length>=1">
@@ -635,8 +638,8 @@
                     },
                     @endforeach
                 ],
-                条码索引_记录: [],
-                库位索引_记录: [],
+                条码索引_记录: {},
+                库位索引_记录: {},
                 checkData: [],
                 selectedStyle:'',
                 指定盘点记录列:[],
@@ -670,8 +673,11 @@
             },
             mounted: function () {
                 let _this = this;
+                (function 显示渲染后页面(){
+                    $('#loadingPage').remove();
+                    $('#list').removeClass('d-none');
+                })()
                 $(".tooltipTarget").tooltip({'trigger': 'hover'});
-                $("#list").removeClass('d-none');
                 $barcodeInput=$('#barcodeInput');
                 $locationInput=$('#locationInput');
                 $amountInput=$('#amountInput');
@@ -717,8 +723,7 @@
                     });
                     header.init();
                 },0);
-                this.以条码建立记录索引();
-                this.以库位建立记录索引();
+                this.建立记录索引();
             },
             methods:{
                 inputs() {
@@ -797,20 +802,15 @@
                     }
                     this.筛选出记录(_this.inputs().location,_this.inputs().barcode);
                 },100,{ 'trailing': false }),
-                以条码建立记录索引(){
+                建立记录索引(){
                     let _this=this;
                     _this.inventoryMissions.forEach(function (inventoryMission) {
                         inventoryMission.commodity_barcodes.forEach(function (barcode) {
-                            _this.条码索引_记录[barcode.code]=inventoryMission;
-                            _this.条码索引_记录.push(_this.条码索引_记录[barcode.code])
+                            if(!Array.isArray(_this.条码索引_记录[barcode.code])) _this.条码索引_记录[barcode.code]=[];
+                            _this.条码索引_记录[barcode.code].push(inventoryMission);
                         })
-                    });
-                },
-                以库位建立记录索引(){
-                    let _this=this;
-                    _this.inventoryMissions.forEach(function (inventoryMission) {
-                        _this.库位索引_记录[inventoryMission.location]=inventoryMission;
-                        _this.库位索引_记录.push(_this.库位索引_记录[inventoryMission.location])
+                        if(!Array.isArray(_this.库位索引_记录[inventoryMission.location])) _this.库位索引_记录[inventoryMission.location]=[];
+                        _this.库位索引_记录[inventoryMission.location].push(inventoryMission);
                     });
                 },
                 清空指定盘点记录列(){
@@ -834,17 +834,20 @@
                     库位=库位.trim();
                     let _this=this;
                     if(!库位)return false;
-                    if(!条码)return false;
-                    if (!_this.库位索引_记录[库位]||(!_this.条码索引_记录[条码]&&(await _this.is条码存在于WMS(条码)))) return;
-                    _this.inventoryMissions.forEach(function (inventoryMission) {
-                        inventoryMission.commodity_barcodes.forEach(function (barcode) {
-                            if (inventoryMission.location===库位 && 条码===barcode.code){
+                    if(!条码)return false;;
+                    if (!_this.库位索引_记录[库位]
+                        ||(!_this.条码索引_记录[条码]
+                            &&!(await _this.is条码存在于WMS(条码)))
+                    ) return;
+                    if(Array.isArray(_this.条码索引_记录[条码])){
+                        _this.条码索引_记录[条码].forEach(function(inventoryMission){
+                            if (inventoryMission.location===库位){
                                 if(!_this.指定盘点记录列.includes(inventoryMission)){
                                     _this.指定盘点记录列.push(inventoryMission);
                                 }
                             }
-                        })
-                    });
+                        });
+                    }
                 },
                 放置焦点光标至正确位置:_.throttle(function(){
                     let _this=this;
@@ -900,16 +903,14 @@
                     条码 = 条码.trim();
                     let _this = this;
                     if (!条码) return false;
-                    if (!_this.条码索引_记录[条码]) return false;
-                    return !!_this.条码索引_记录[条码].id;
+                    return !!_this.条码索引_记录[条码];
 
                 },
                 is库位存在于当前记录(库位) {
                     库位 = 库位.trim();
                     let _this = this;
                     if (!库位) return false;
-                    if (!_this.库位索引_记录[库位]) return false;
-                    return !!_this.库位索引_记录[库位].id;
+                    return !!_this.库位索引_记录[库位];
 
                 },
                 提交新增并盘点:async function(){
@@ -1234,18 +1235,19 @@
                                 tempTip.setDuration(3000);
                                 tempTip.show('增加系统之外的盘点记录失败!');
                             } else {
-                                _this.inventoryMissions.push(response.data.inventoryAccountMission);
-                                _this.inventoryMissions.every(function (inventoryAccountMission, i) {
-                                    if (parseInt(inventoryAccountMission.id) === parseInt(response.data.inventoryAccountMission.id)) {
-                                        inventoryAccountMission.commodity_barcodes = response.data.inventoryAccountMission.commodity.barcodes;
-                                        inventoryAccountMission.commodity_name = response.data.inventoryAccountMission.commodity.name;
-                                        inventoryAccountMission.stockInventoryPersons = response.data.stockInventoryPersons;
-                                        _this.inventoryMissions.splice(i, 1);
-                                        _this.inventoryMissions.unshift(inventoryAccountMission);
-                                        return false;
-                                    }
-                                    return true
+                                let inventoryAccountMission=response.data.inventoryAccountMission;
+                                inventoryAccountMission.commodity_barcodes = response.data.inventoryAccountMission.commodity.barcodes;
+                                inventoryAccountMission.commodity_name = response.data.inventoryAccountMission.commodity.name;
+                                inventoryAccountMission.stockInventoryPersons = response.data.stockInventoryPersons;
+                                inventoryAccountMission.produced_at = '';
+                                inventoryAccountMission.valid_at = '';
+                                _this.inventoryMissions.push(inventoryAccountMission);
+                                inventoryAccountMission.commodity_barcodes.forEach(function(barcode){
+                                    if(!Array.isArray(_this.条码索引_记录[barcode.code])) _this.条码索引_记录[barcode.code]=[];
+                                    _this.条码索引_记录[barcode.code].push(inventoryAccountMission);
                                 });
+                                if(!Array.isArray(_this.库位索引_记录[location])) _this.库位索引_记录[location]=[];
+                                _this.库位索引_记录[location].push(inventoryAccountMission);
                                 _this.重排序并标记全列表类型(_this.inventoryMissions);
                                 _this.清空inputs();
                                 tempTip.setDuration(3000);
@@ -1253,7 +1255,6 @@
                             }
                         }
                     ).catch(function (err) {
-                        moment().format('')
                         tempTip.setDuration(3000);
                         tempTip.show('增加系统之外的盘点记录失败,网络链接错误!' + err);
                     });
@@ -1346,9 +1347,9 @@
                         },
                         function () {
                             _this.清空inputs();
-                            tempTip.setDuration(3000);
+                            tempTip.setDuration(1500);
                             tempTip.showSuccess('盘点成功!');
-                        })
+                        },'是','否')
                 },
                 清空inputs(){
                     $locationInput.val('');

+ 8 - 2
resources/views/inventory/stockInventory/mission.blade.php

@@ -4,7 +4,10 @@
 
 @section('content')
     @component('inventory.stockInventory.menu')@endcomponent
-    <div id="list" class="container-fluid" style="min-width: 1500px">
+    <div class="text-center h5 mt-2" id="loadingPage">
+        载入中……
+    </div>
+    <div id="list" class="container-fluid d-none" style="min-width: 1500px">
         <form class="form-inline mt-2">
             <span class="form-inline ml-5">
                  <span class="btn btn-sm btn-outline-secondary tooltipTarget" @click="syncOwners">同步货主</span>
@@ -120,7 +123,10 @@
             },
             mounted: function () {
                 $(".tooltipTarget").tooltip({'trigger': 'hover'});
-                $("#list").removeClass('d-none');
+                (function 显示渲染后页面(){
+                    $('#loadingPage').remove();
+                    $('#list').removeClass('d-none');
+                })()
                 this.fakeOwners=this.owners;
                 let _this = this;
                 let column = [

+ 1 - 1
resources/views/layouts/app.blade.php

@@ -32,7 +32,7 @@
 <!-- Scripts -->
 @yield('script')
 {{-- 必须在app.js前边--}}
-<script src="{{ asset('js/app200922.js') }}"></script>
+<script src="{{ asset('js/app200924.js') }}"></script>
 <script>
     let isActive=function (name,atSlashLevel) {
         let uriWithNoParam=location.href.split('?')[0];

+ 2 - 2
resources/views/order/tracking/index.blade.php

@@ -445,8 +445,8 @@
                 },
                 dateTime:function(value) {
                     if (value !== null) {
-                        let date = value.replace(' ', 'T')
-                        return date;
+                        return value.replace(' ', 'T')
+                        // return moment(value).format('yyyy-MM-DDTHH:mm:ss');
                     }
                     return value
                 }

+ 2 - 2
resources/views/process/create.blade.php

@@ -454,7 +454,7 @@
                     if (!type)_this.sum+= Number(amount);
                     _this.processContents.some(function (processContent) {
                         if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==type) {
-                            processContent.commodities.every(function (commodity) {
+                            /*processContent.commodities.every(function (commodity) {
                                 if (commodity.id===commodity_id && commodity.amount<amount){
                                     tempTip.setDuration(2000);
                                     tempTip.show("数量不得超出原有数量!");
@@ -463,7 +463,7 @@
                                 }
                                 return true;
                             });
-                            if (is_return)return true;
+                            if (is_return)return true;*/
                             _this._addSignCommodity(wms_code,processContent.commodity_id,type);
                             processContent.addBtnShow=false;
                             processContentTemp=Object.assign({},processContent);

+ 2 - 2
resources/views/store/checkingReceive/mission.blade.php

@@ -70,7 +70,7 @@
                 <button v-if="storeCheckingReceive.status != '已收货'" class="btn btn-sm btn-outline-success" data-toggle="modal" data-target="#asnWindow" @click="thisIndex=i">
                     <span v-if="storeCheckingReceive.asn">重新</span>匹配ASN号
                 </button>@endcan
-                @can('入库管理-快速入库-录入')
+                @can('入库管理-快速入库')
                 <button v-if="storeCheckingReceive.status=='已ASN入库' && storeCheckingReceive.is_receive_diff != '是' && storeCheckingReceive.is_asn_diff != '是' && storeCheckingReceive.status != '已收货'"
                         class="btn btn-sm btn-outline-info" @click="receipt(i)">快速入库</button>
                 @endcan
@@ -279,4 +279,4 @@
             },
         });
     </script>
-@stop
+@stop

+ 8 - 0
resources/views/store/index.blade.php

@@ -0,0 +1,8 @@
+@extends('layouts.app')
+@section('title')入库管理@endsection
+
+@section('content')
+    <span id="nav2">
+        @component('store.menu')@endcomponent
+    </span>
+@endsection

+ 1 - 1
webpack.mix.js

@@ -11,7 +11,7 @@ const mix = require('laravel-mix');
  |
  */
 
-mix.js('resources/js/app.js', 'public/js/app200922.js')
+mix.js('resources/js/app.js', 'public/js/app200924.js')
     .sass('resources/sass/app.scss', 'public/css/app200923.css');
 mix.copy('resources/sass/fonts/','public/fonts');
 mix.copy('resources/icon','public/icon');