ajun 5 лет назад
Родитель
Сommit
424f046b8a

+ 6 - 6
app/Console/Commands/SyncWMSOrderTask.php

@@ -57,9 +57,9 @@ class SyncWMSOrderTask extends Command
         ini_set('memory_limit', '512M');
         $orderService = app('OrderService');
         $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
-        dump((string)Carbon::now().' getOrderSyncAt');
+
         $last_date = $orderService->getOrderSyncAt($newest,'newest');                             // 获取时间点
-        dump((string)Carbon::now().' getWMSOrderOnStartDate');
+
         $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($last_date);               // WMS订单
         if($orderHeaders->count()==0)return;
         $last_order = $orderHeaders->first();                                                           // 时间点靠后的
@@ -68,7 +68,7 @@ class SyncWMSOrderTask extends Command
         $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$newest_list);                  // 对比缓存
 
         if(count($newest_orders)>0 && count($orderHeaders) >0){
-            dump((string)Carbon::now().' $orderHeaders');
+
             $orderService->syncOrder($orderHeaders);                                                //  同步订单
             $orderService->cancelOrderCache($newest_list,$prefixKey);                                   //  清除缓存
             $orderService->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list);              //  添加缓存
@@ -91,9 +91,9 @@ class SyncWMSOrderTask extends Command
 
         $orderService = app('OrderService');
         $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
-        dump((string)Carbon::now().' getOrderSyncAt');
+
         $last_date = $orderService->getOrderSyncAt($renewal,'renewal');                               // 获取时间点
-        dump((string)Carbon::now().' getWMSOrderOnEditDate');
+
         $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnEditDate($last_date);                   // WMS订单
 
         if($orderHeaders->count()==0)return;
@@ -103,7 +103,7 @@ class SyncWMSOrderTask extends Command
         $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$renewal_list);                     // 对比缓存
 
         if(count($renewal_orders)>0 && count($orderHeaders)>0){
-            dump((string)Carbon::now().' syncOrder(');
+
             $orderService->syncOrder($orderHeaders);                                                    // 同步订单
             $orderService->cancelOrderCache($renewal_list,$prefixKey);                                      // 清除缓存
             $orderService->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list);                // 添加缓存

+ 3 - 0
app/OracleDOCOrderHeader.php

@@ -50,4 +50,7 @@ class OracleDOCOrderHeader extends Model
     public function hasUn(){
         return $this->hasMany('App\OracleDOCOrderDetail','orderno','orderno');
     }
+    public function orderType(){
+        return $this->hasOne('App\OracleBasCode','code','ordertype')->where('codeid','SO_TYP');
+    }
 }

+ 80 - 24
app/Services/CommodityService.php

@@ -345,36 +345,92 @@ Class CommodityService
     {
         /** @var OwnerService $ownerService */
         $ownerService = app('OwnerService');
-        $owner_codes = [];
-        foreach ($map as $item) {
-            $owner_codes[$item['owner_code']] = $item['owner_code'];
-        }
-        $owners = $ownerService->getOwnerByCodes($owner_codes);
-        $owner_map = [];
-        $owners->each(function ($owner)use(&$owner_map){
-            $owner_map[$owner['code']] = $owner;
-        });
+
+        $owner_codes = (function()use($map){
+            $owner_codes = [];
+            if(count($map) == 0)return $owner_codes;
+            foreach ($map as $item) {
+                $owner_codes[$item['owner_code']] = $item['owner_code'];
+            }
+            return $owner_codes;
+        })();
+
+        $owner_map = (function()use($ownerService,$owner_codes){
+            $owners = $ownerService->getOwnerByCodes($owner_codes);
+            $map = [];
+            $owners->each(function ($owner)use(&$map){
+                $map[$owner['code']] = $owner['id'];
+            });
+            return $map;
+        })();
+
         $collect = collect();
         if(count($map) == 0) return $collect;
-        $date = Carbon::now();
+        $unexists = [];$sku = [];$owner_code = [];
         foreach ($map as $item) {
-            $collect->push(Cache::remember("owner_code_{$item['owner_code']}_sku_{$item['sku']}", null, function()use($item,$owner_map,$date){
-                $owner = $owner_map[$item['owner_code']];
-                $commodity = Commodity::query()->where('owner_id',$owner['id'])->where('sku',$item['sku'])->first();
-                if($commodity)return $commodity;
-                $basSku = OracleBasSKU::query()->where('SKU',$item['sku'])->where('CustomerID',$item['owner_code'])->first();
-                return Commodity::query()->create([
-                    'owner_id' => $owner['id'],
-                    'sku' => $basSku['sku'],
-                    'name' =>$basSku['descr_c'],
+            $owner = Cache::get("owner_code_{$item['owner_code']}_sku_{$item['sku']}");
+            if($owner)$collect->push($owner);
+            $items = [
+                'owner_code' => $item['owner_code'],
+                'sku' => $item['sku']
+            ];
+            $unexists[json_encode($items)] = true;
+            $sku[] = $item['sku'];
+            $owner_code[] = $item['owner_code'];
+        }
+        if(count($unexists) == 0)return $collect;
+        $BasSKUs = OracleBasSKU::query()->whereIn('SKU',$sku)->whereIn('CustomerID',$owner_code)->get();
+        $BasSKUs = $BasSKUs->filter(function($bas_sku)use($unexists){
+            $arr = [
+                'owner_code' => $bas_sku['customerid'],
+                'sku' => $bas_sku['sku']
+            ];
+            return $unexists[json_encode($arr)] ?? false;
+        });
+        $inner_params = (function()use($BasSKUs,$owner_map){
+            $map = [];
+            $date = Carbon::now();
+            $BasSKUs->each(function($basSku)use(&$map,$owner_map,$date){
+                $map[] = [
+                    'owner_id' => $owner_map[$basSku['customerid']] ?? '',
+                    'sku' => $basSku->sku,
+                    'name' =>$basSku->descr_c,
+                    'length' =>$basSku->skulength,
+                    'width' => $basSku->skuwidth,
+                    'height' => $basSku->skuhigh,
+                    'volumn' => $basSku->cube,
                     'created_at' => $date,
                     'updated_at' => $date,
-                    'length' => $basSku['skulength'],
-                    'width' => $basSku['skuwidth'],
-                    'height' => $basSku['skuhigh'],
-                    'volumn' => $basSku['cube']]);
-            }));
+                ];
+            });
+            return $map;
+        })();
+        if(count($inner_params)==0)return $collect;
+        foreach (array_chunk($inner_params,4000) as $item) {
+            try {
+                $bool = Commodity::query()->insert($item);
+                if($bool){
+                    app('LogService')->log(__METHOD__,__FUNCTION__,"批量添加 Commodity Success ".count($inner_params).' || '.json_encode($inner_params));
+                    $commodities = Commodity::query()->with('owner')->whereIn('owner_id',data_get($item,'*.owner_id'))->whereIn('sku',data_get($item,'*.sku'))->get();
+                    $this->pushToCache($commodities);
+                    $collect = $collect->concat($commodities);
+                }
+                else app('LogService')->log(__METHOD__,__FUNCTION__,"批量添加 Commodity FAILED ".' || '.json_encode($inner_params));
+            } catch (\Exception $e) {
+                app('LogService')->log(__METHOD__,__FUNCTION__,"批量添加 Commodity ERROR ".' || '.json_encode($inner_params).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
+            }
         }
         return $collect;
     }
+
+    private function pushToCache($commodities)
+    {
+        if (count($commodities) < 1) return null;
+        foreach ($commodities as $commodity) {
+            $commodity_key = "owner_code_{$commodity['owner']['code']}_sku_{$commodity['sku']}";
+            Cache::remember($commodity_key, config('cache.expirations.forever'), function () use ($commodity) {
+                return $commodity;
+            });
+        }
+    }
 }

+ 2 - 1
app/Services/LogisticService.php

@@ -102,7 +102,8 @@ Class LogisticService
                     ->selectRaw('Customer_Type,CustomerID,Descr_C')
                     ->where('Customer_Type','CA')
                     ->where('CustomerID',$code)->first();
-                return Logistic::query()->create(['name'=>$baseCustomers['descr_c'],'code'=>$baseCustomers['customerid']]);
+                if(!$baseCustomers)return null;
+                return Logistic::query()->create(['name' => $baseCustomers['descr_c'], 'code' => $baseCustomers['customerid']]);
             }));
         }
         return $collect;

+ 5 - 1
app/Services/OracleDOCOrderHeaderService.php

@@ -20,7 +20,7 @@ Class OracleDOCOrderHeaderService
         'DOC_Order_Header.CarrierName', 'DOC_Order_Header.LastShipmentTime','DOC_Order_Header.EDISendFlag',
         'DOC_Order_Header.SOReference5', 'DOC_Order_Header.C_Tel2','DOC_Order_Header.Transportation',
         'DOC_Order_Header.WareHouseId','DOC_Order_Header.SOStatus','DOC_Order_Header.C_Tel1','DOC_Order_Header.C_District',
-        'DOC_Order_Header.IssuePartyName'
+        'DOC_Order_Header.IssuePartyName','DOC_Order_Header.OrderType'
     ];
 
     function first(array $params){
@@ -76,6 +76,8 @@ Class OracleDOCOrderHeaderService
                 $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
             },'oracleBASCode'=>function($query){
                 $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            },'orderType'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
             }])
             ->where('DOC_Order_Header.addTime','>=',$startDate)
             ->whereColumn('DOC_Order_Header.editTime','=','DOC_Order_Header.addTime')
@@ -93,6 +95,8 @@ Class OracleDOCOrderHeaderService
                 $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
             },'oracleBASCode'=>function($query){
                 $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            },'orderType'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
             }])
             ->where('DOC_Order_Header.editTime','>=',$startDate)
             ->whereColumn('DOC_Order_Header.editTime','!=','DOC_Order_Header.addTime')

+ 1 - 1
app/Services/OrderCommodityService.php

@@ -164,7 +164,7 @@ Class OrderCommodityService
         if(count($inner_params) == 0)return $created_params;
         $data = Carbon::now();
         foreach ($inner_params as &$item) {
-            $order = $orders_map[$item['code']];
+            $order = $orders_map[$item['code']] ?? false;
             if(!$order)continue;
             $owner_code = $owner_id_maps[$item['owner_id']];
             $key = "owner_code_{$owner_code}_sku_{$item['sku']}";

+ 1 - 1
app/Services/OrderIssueService.php

@@ -529,7 +529,7 @@ class OrderIssueService
 
     public function createOrderIssue($logisticNumber, $type, $result_explain, $importedStatus = '正常', $custom_code = null,$hiddenTag = null)
     {
-        $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode'])
+        $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode','orderType'])
             ->whereHas('actAllocationDetails', function ($query) use ($logisticNumber) {
                 $query->where('picktotraceid', $logisticNumber);
             })->get();

+ 3 - 12
app/Services/OrderPackageCommoditiesService.php

@@ -624,11 +624,8 @@ class OrderPackageCommoditiesService
                 }
             });
         }
-        dump((string)Carbon::now().' $commodityService getCommoditiesByMap');
         $commodities = $commodityService->getCommoditiesByMap($map);   // 预先处理     3s
-        dump((string)Carbon::now().' $orderPackageService getByWmsOrders');
         $orderPackages = $orderPackageService->getByWmsOrders($orderHeaders);
-        dump((string)Carbon::now().' getByWmsOrder');
         $orderCommodities = $this->getByWmsOrder($orderHeaders);
         $owner_code_map = [];
         $owner_id_map = (function()use(&$orderHeaders,&$ownerService,&$owner_code_map){
@@ -643,27 +640,21 @@ class OrderPackageCommoditiesService
         })();
 
         $package_map = $dataHandService->dataHeader(['logistic_number'],$orderPackages);
-        dump((string)Carbon::now().' regroupOrderCommodities');
         $orderCommodities = $this->regroupOrderCommodities($orderCommodities);
-        dump((string)Carbon::now().' regroupWmsOrderAllocationDetails');
         $orderAllocationDetails = $this->regroupWmsOrderAllocationDetails($orderHeaders);
         $del_orderCommodities  =[];
-        dump((string)Carbon::now().' filterUpdateParams');
         $update_params =$this->filterUpdateParams($orderAllocationDetails,$orderCommodities,$del_orderCommodities);                  // 修改
-        dump((string)Carbon::now().' filterInnerParams');
         $inner_params = $this->filterInnerParams($orderAllocationDetails,$orderCommodities);                                            // 创建
-        dump((string)Carbon::now().' filterDeleteParams');
         $delete_params = $this->filterDeleteParams($orderAllocationDetails,$orderCommodities);                                           // 删除
-        dump((string)Carbon::now().' createOrderCommodities');
         if(count($inner_params)>0)
             $this->createOrderCommodities($inner_params,$package_map,$commodities,$owner_id_map);  // 创建 3s
-        dump((string)Carbon::now().' updateOrderCommodities');
+
         if(count($update_params)>0)
             $this->updateOrderCommodities($update_params);              // 更新
-        dump((string)Carbon::now().' deleteOrderCommodities');
+
         if(count($delete_params)>0)
             $this->deleteOrderCommodities($delete_params);              // 删除
-        dump((string)Carbon::now().' deleteOrderCommodities');
+
         if(count($del_orderCommodities)>0)
             $this->deleteOrderCommodities($del_orderCommodities);       // 删除
     }

+ 8 - 8
app/Services/OrderPackageService.php

@@ -392,9 +392,9 @@ class OrderPackageService
          * @var OrderPackageCommoditiesService $OrderPackageCommoditiesService
          */
         $OrderPackageCommoditiesService = app('OrderPackageCommoditiesService');
-        dump((string)Carbon::now().' syncPackageByOrderHeaders');
+
         $this->syncPackageByOrderHeaders($orderHeaders);
-        dump((string)Carbon::now().' syncOrderPackageCommodities');
+
         $OrderPackageCommoditiesService->syncOrderPackageCommodities($orderHeaders);
     }
     // TODO
@@ -409,22 +409,22 @@ class OrderPackageService
         $orderPackageCommodityService= app('OrderPackageCommoditiesService');
         $orderTrackingService = app('OrderTrackingService');
         if(!$orderHeaders)return;
-        dump((string)Carbon::now().' getByWmsOrders');
+
         $orders = $orderService->getByWmsOrders($orderHeaders);
-        dump((string)Carbon::now().' getByOrderNos');
+
         $packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));          // 已有
-        dump((string)Carbon::now().' createOrderPackage');
+
         $this->createOrderPackage($orderHeaders,$orders,$packages);                     // 创建package
-        dump((string)Carbon::now().' deleteUnnecessaryPackage');
+
         $del_ids = $this->deleteUnnecessaryPackage($orderHeaders,$packages);     // 删除package
-        dump((string)Carbon::now().' deleteUnnecessaryOrderCommodities');
+
         $orderPackageCommodityService->deleteUnnecessaryOrderCommodities($del_ids);     // 删除 orderCommodity
 
         $orderTracking = OrderTracking::query()->whereHas('commodities.package',function($query)use($del_ids){
             $query->whereIn('id',$del_ids);
         })->get();
         if($orderTracking->count()==0)return;
-        dump((string)Carbon::now().' deleteOrderTracings');
+
         $orderTrackingService->deleteOrderTracings($orderTracking);                     // 删除追踪件
     }
     // TODO

+ 12 - 10
app/Services/OrderService.php

@@ -779,11 +779,11 @@ class OrderService
          */
         $packageService = app("OrderPackageService");
         $orderCommodityService = app("OrderCommodityService");
-        dump((string)Carbon::now().' syncOrderByWMSOrderHeaders');
+
         $this->syncOrderByWMSOrderHeaders($orderHeaders);
-        dump((string)Carbon::now().' syncOrderCommodities');
+
         $orderCommodityService->syncOrderCommodities($orderHeaders);
-        dump((string)Carbon::now().' syncOrderPackage');
+
         $packageService->syncOrderPackage($orderHeaders);
     }
 
@@ -818,14 +818,14 @@ class OrderService
         $logistics = $logisticService->getLogisticByCodes($logistic_codes);
         $shops = $shopService->getShopByCodeMap($shop_names);
         $warehouses = $warehouseService->getWareHouseByCode($warehouse_codes);
-        dump((string)Carbon::now().' this->getByWmsOrders');
+
         $orders = $this->getByWmsOrders($orderHeaders);
-        dump((string)Carbon::now().' getCreateOrderModelsByWMSOrderHeaders');
+
         $created_params = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops); //3s
-        dump((string)Carbon::now().' getUpdateOrderModelByWMSOrderHeaders');
+
         $update_order = $this->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops);
 
-        dump((string)Carbon::now().' $created_params->insert');
+
         // 转换插入 3s
         if(count($created_params) > 0){
             collect($created_params)->chunk(3500)->each(function($inner_params){
@@ -833,14 +833,14 @@ class OrderService
             });
         }
         $update_params = [
-            ['id','code','warehouse_id','owner_id','shop_id','logistic_id','consignee_name','consignee_phone','province','city','district','address','client_code','wms_status','created_at','updated_at','wms_edittime']
+            ['id','code','warehouse_id','owner_id','shop_id','logistic_id','consignee_name','consignee_phone','province','city','district','address','client_code','wms_status','created_at','updated_at','wms_edittime','order_type']
         ];
-        dump((string)Carbon::now().' $update_order->each');
+
         $update_order->each(function($item)use(&$update_params){
             $update_params[] = $item->toArray();
         });
         if(count($update_order)==0)return;
-        dump((string)Carbon::now().'$update_params');
+
         $this->batchUpdate($update_params);
     }
 
@@ -919,6 +919,7 @@ class OrderService
             'client_code' => $orderHeader['soreference1'],
             'wms_edittime' => $orderHeader['edittime'],
             'wms_status' => $orderHeader->oracleBASCode->codename_c??'',
+            'order_type' => $orderHeader->orderType->codename_c??'',
             'updated_at' => $date,
             'created_at' => $orderHeader['addtime']
         ];
@@ -970,6 +971,7 @@ class OrderService
                 'updated_at' => $updated_at,
                 'created_at' => $orderHeader->addtime,
                 'wms_edittime' => $orderHeader->edittime,
+                'order_type' => $orderHeader->orderType->codename_c??'',
                 'warehouse_id' => $warehouse_id];
         }
     }

+ 1 - 0
config/cache.php

@@ -10,6 +10,7 @@ return [
         'rarelyChange'=>60,
         'commonFrequent'=>20,
         'owners'=>20,
+        'forever' =>null
     ],
     /*
     |--------------------------------------------------------------------------