LD 5 лет назад
Родитель
Сommit
a2999db974

+ 48 - 3
app/Http/Controllers/TestController.php

@@ -44,6 +44,7 @@ use App\Services\common\DataHandlerService;
 use App\Services\InventoryCompareService;
 use App\Services\LogService;
 use App\Services\OracleActAllocationDetailService;
+use App\Services\OracleBasCustomerService;
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderIssuePerformanceService;
 use App\Services\OrderIssueService;
@@ -52,10 +53,12 @@ use App\Services\OrderPackageService;
 use App\Services\OrderService;
 use App\Services\OrderTrackingOwnerService;
 use App\Services\OrderTrackingService;
+use App\Services\WarehouseService;
 use App\StoreCheckingReceive;
 use App\StoreCheckingReceiveItem;
 use App\Unit;
 use App\User;
+use App\Warehouse;
 use App\Waybill;
 use Carbon\Carbon;
 use Exception;
@@ -66,6 +69,7 @@ use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Facades\Redis;
+use Ramsey\Collection\Collection;
 use Zttp\Zttp;
 
 class TestController extends Controller
@@ -713,7 +717,7 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         /** @var OrderService $orderService */
         $orderService = app(OrderService::class);
         $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
-        $startDate = \Illuminate\Support\Carbon::parse('2020-10-10 00:00:00')->toDateTimeString();
+        $startDate = \Illuminate\Support\Carbon::parse('2020-10-28 00:00:00')->toDateTimeString();
         $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode'])
             ->where('addTime', '>=', $startDate)
             ->whereIn('customerID', data_get($owners, '*.code'))
@@ -721,8 +725,10 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $orderService->updateByWmsOrders($orderHeaders);
         $orderTrackingService->updateByWmsOrderHeaders($orderHeaders);
     }
-    public function test11(){
-        $orderHeader = OracleDOCOrderHeader::query()->with('actAllocationDetails')->where('orderNo','SO201024001172')->get();
+
+    public function test11()
+    {
+        $orderHeader = OracleDOCOrderHeader::query()->with('actAllocationDetails')->where('orderNo', 'SO201024001172')->get();
         dd(app(OrderService::class)->createByWmsOrder($orderHeader));
     }
 
@@ -731,4 +737,43 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         dd(Request::all());
     }
 
+    public function updateOrdersWarehouse()
+    {
+        /**
+         * @var DataHandlerService $dataHandlerService
+         * @var OrderService $orderService
+         */
+        $dataHandlerService = app(DataHandlerService::class);
+        $orderService = app(OrderService::class);
+        $page = 500;
+        $count = Order::query()->count();
+        $warehouse = Warehouse::query()->get();
+        $warehouse_map = $dataHandlerService->dataHeader(['code'], $warehouse);
+        for ($i = 0; $i < $count; $i += $page) {
+            $min = $i;$max = $i + $page;
+            $orders = Order::query()->where('id', '>=', $min)->where('id', '<=', $max)->get();
+            $orderNos = array_diff(array_unique(data_get($orders, '*.code')), ['', ' ', '*', null]);
+            if (count($orderNos)==0) continue;
+            /** @var Collection $orderHeaders */
+            $orderHeaders = OracleDOCOrderHeader::query()->whereIn('orderno', $orderNos)->get();
+            if ($orderHeaders->count() == 0) continue;
+            $orderHeader_map = $dataHandlerService->dataHeader(['orderno'], $orderHeaders);
+            $update_params = [];
+            $update_params[] = ['id', 'warehouse_id'];
+            foreach ($orders as $order) {
+                $orderHeader = $dataHandlerService->getKeyValue(['orderno' => $order->code], $orderHeader_map);
+                if ($orderHeader == null) continue;
+                $warehouse = $dataHandlerService->getKeyValue(['code' => $orderHeader->warehouseid], $warehouse_map);
+                if ($warehouse == null) continue;
+                $update_params[] = [
+                    'id' => $order->id,
+                    'warehouse_id' => $warehouse->id
+                ];
+            }
+            $orderService->batchUpdate($update_params);
+            unset($orders, $orderHeaders, $update_params);
+        }
+        unset($warehouse);
+    }
+
 }

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

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

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

@@ -283,8 +283,8 @@ class PackageController extends Controller
                 return json_encode($response,JSON_UNESCAPED_UNICODE);
             }
         }
-        if(!empty($package->order_id))
-            Waybill::setWeightByOrderCode($package->order_code,$package->weight);
+        if(!empty($package->order))
+            Waybill::setWeightByOrderCode($package->order->code,$package->weight);
             event(new WeighedEvent($package));
             $response=["msg"=>"保存成功",
                 "code"=>200,

+ 0 - 2
app/MeasuringMachine.php

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

+ 16 - 9
app/Order.php

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

+ 1 - 0
app/OrderIssue.php

@@ -23,6 +23,7 @@ class OrderIssue extends Model
      * final_status
      * situation_explain
      * custom_code  自定义订单号 客户客服自定义
+     * imported_status 导入处理
      */
     protected $appends = [
 //        'secondLogisticNumber',

+ 1 - 0
app/OrderPackage.php

@@ -23,6 +23,7 @@ class OrderPackage extends Model
     public function order(){
         return $this->belongsTo('App\Order','order_id','id');
     }
+
     public function commodities(){
         return $this->hasMany('App\OrderPackageCommodities','order_package_id','id');
     }

+ 4 - 0
app/Providers/RouteServiceProvider.php

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

+ 1 - 1
app/Services/LogisticService.php

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

+ 17 - 0
app/Services/OracleBasCustomerService.php

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

+ 6 - 2
app/Services/OrderIssueService.php

@@ -43,11 +43,15 @@ class OrderIssueService
         $query = OrderIssue::with(['top','userWorkGroup', 'issueType', 'logs' => function ($query) use($arr) {
             $query->with('user')->orderByDesc('created_at');
         }, 'order' => function ($query) {
-            $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity']);
+            $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity'=>function($query){
+                $query->with('barcodes');
+            }]);
         }, 'rejectedBill' => function ($query) {
             $query->with(['items']);
         }, 'secondOrder' => function ($query) {
-            $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity']);
+            $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity'=>function($query){
+                $query->with('barcodes');
+            }]);
         }])->whereHas('order.owner', function ($query) use ($owner_ids) {
             $query->whereIn('id', $owner_ids);
         });

+ 31 - 165
app/Services/OrderPackageCommoditiesService.php

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

+ 53 - 53
app/Services/OrderPackageService.php

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

+ 35 - 23
app/Services/OrderService.php

@@ -16,6 +16,7 @@ use App\RejectedBill;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\Shop;
+use App\Warehouse;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Support\Facades\App;
@@ -480,20 +481,26 @@ class OrderService
     public function createByWmsOrder($orderHeaders)
     {
         if($orderHeaders->isEmpty())return null;
-        /** @var OwnerService $ownerService */
-        /** @var LogisticService $logisticService */
-        /** @var ShopService $shopService */
-        /** @var OrderPackageService $orderPackageService */
+        /**
+         * @var OwnerService $ownerService
+         * @var WarehouseService $warehouseService
+         * @var LogisticService $logisticService
+         * @var ShopService $shopService
+         * @var OrderPackageService $orderPackageService
+         */
+        $warehouseService =app(WarehouseService::class);
         $ownerService = app(OwnerService::class);
         $logisticService = app(LogisticService::class);
         $shopService = app(ShopService::class);
         $orderPackageService = app(OrderPackageService::class);
 
-        $owners_code_map = [];$logistics_code_map = [];$shop_name_map=[]; $owners_id_map = [];
+        $owners_code_map = [];$logistics_code_map = [];$shop_name_map=[]; $owners_id_map = [];$warehouses_code_map =[];
 
         $owners = $ownerService->getByWmsOrders($orderHeaders);
         $logistics = $logisticService->getByWmsOrders($orderHeaders);
         $shops = $shopService->getByWmsOrders($orderHeaders);
+        $warehouses=$warehouseService->getByWmsOrders($orderHeaders);
+
 
         foreach ($owners as $owner) {
             $owners_code_map[$owner->code] = $owner;
@@ -508,7 +515,12 @@ class OrderService
             $key = ' owner_code='.$owner_code.' name='.$shop->name;
             $shop_name_map[$key] = $shop;
         }
-        $insert_params = $this->getParamsByOrderHeader($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map);
+
+        foreach ($warehouses as $warehouse) {
+            $warehouses_code_map[$warehouse->code] = $warehouse;
+        }
+
+        $insert_params = $this->getParamsByOrderHeader($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map);
 
         if(count($insert_params)> 0){
             $this->create($insert_params);
@@ -520,7 +532,7 @@ class OrderService
     }
 
 
-    public function getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map)
+    public function getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map)
     {
         $params = [];
         $orders = Order::query()->whereIn('code',data_get($orderHeaders_map,'*.orderno'))->get();
@@ -532,6 +544,7 @@ class OrderService
              if($order_code_map[$orderHeader->orderno] ?? false)continue;
             $owner = $owners_code_map[$orderHeader->customerid] ?? null;
             $logistic =  $logistics_code_map[$orderHeader->userdefine1] ?? null;
+            $warehouse=$warehouses_code_map[$orderHeader->warehouseid] ?? null;
             $key = ' owner_code='.$orderHeader->customerid.' name='.$orderHeader->issuepartyname ?? '';
             $shop = $shop_name_map[$key] ?? '';
             $params[] = [
@@ -548,7 +561,8 @@ class OrderService
                 'district' => $orderHeader->c_district,
                 'address' => $orderHeader->c_address1,
                 'client_code' => $orderHeader->soreference1,
-                'wms_edittime' =>$orderHeader->edittime
+                'wms_edittime' =>$orderHeader->edittime,
+                'warehouse_id' =>$warehouse->id??''
             ];
         }
         return $params;
@@ -585,8 +599,10 @@ class OrderService
         $shops = app(ShopService::class)->getByWmsOrders($orderHeaders);
         $shops_map = $dataHandlerService->dataHeader(['owner_id','name'],$shops);
 
+        $warehouses = app(WarehouseService::class)->getByWmsOrders($orderHeaders);
+        $warehouses_map = $dataHandlerService->dataHeader(['code'],$warehouses);
         $updateParams = [[
-            'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime'
+            'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime','warehouse_id'
         ]];
         $updated_at = Carbon::now()->toDateTimeString();
         foreach ($orderHeaders as $orderHeader) {
@@ -595,10 +611,11 @@ class OrderService
             $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1] ,$logistics_code_map);
             $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid] ,$owner_code_map);
             $shop = $dataHandlerService->getKeyValue(['owner_id'=>$owner->id ?? '','name'=> $orderHeader->issuepartyname] ,$shops_map);
+            $warehouse=$dataHandlerService->getKeyValue(['code'=>$orderHeader->warehouseid],$warehouses_map);
             $shop_id = $shop->id ?? null;
             $logistic_id = $logistic->id ?? null;
             $owner_id = $owner->id ?? null;
-
+            $warehouse_id=$warehouse->id??null;
             if($order->wms_status != $orderHeader->oracleBASCode_codename_c ||
                 $order->logistic_id != $logistic_id ||
                 $order->shop_id != $shop_id ||
@@ -610,7 +627,8 @@ class OrderService
                 $order->district != $orderHeader->c_district ||
                 $order->address != $orderHeader->c_address1 ||
                 $order->client_code != $orderHeader->soreference1 ||
-                $order->wms_edittime != $orderHeader->edittime){
+                $order->wms_edittime != $orderHeader->edittime||
+                $order->warehouse_id!=$warehouse_id){
                 $updateParams[] = [
                     'id'=>$order->id,
                     'owner_id' => $owner_id,
@@ -625,7 +643,8 @@ class OrderService
                     'address' => $orderHeader->c_address1,
                     'client_code' => $orderHeader->soreference1,
                     'updated_at' =>$updated_at,
-                    'wms_edittime' =>$orderHeader->edittime];
+                    'wms_edittime' =>$orderHeader->edittime,
+                    'warehouse_id'=>$warehouse_id];
             }
         }
         if(count($updateParams) > 1){
@@ -656,21 +675,12 @@ class OrderService
         });
     }
 
-    public function getOrderInfoByCodes($orderNos)
-    {
-        return Order::query()->with('packages.commodities.commodity')->whereIn('code',$orderNos)->get();
-    }
-
-    public function getOrderInfoByWmsOrder($orderHeaders)
-    {
-        return $this->getOrderInfoByCodes(data_get($orderHeaders,'*.orderno'));
-    }
-
     public function getParamByOrderHeader($orderHeader)
     {
         $logistic = Logistic::query()->where('code',$orderHeader->userdefine1)->first();
         $owner = Owner::query()->where('code',$orderHeader->customerid ?? '')->first();
         $shop = Shop::query()->where('name',$orderHeader->issuepartyname)->where('owner_id',$owner->id)->first();
+        $warehouse = app('warehouseService')->firstOrCreate(["code"=>$orderHeader->warehouseid],["code"=>$orderHeader->warehouseid,"name"=>$orderHeader->warehouseid]);
         return [
             'code' =>$orderHeader->orderno,
             'owner_id' =>$owner->id,
@@ -685,7 +695,9 @@ class OrderService
             'client_code' =>$orderHeader->soreference1,
             'wms_edittime' => $orderHeader->edittime,
             'wms_status' => $orderHeader->oracleBASCode_codename_c ?? '',
-            'update_at' => Carbon::now()->format('Y-m-d H:i:s')
+            'updated_at' => (string)Carbon::now()->format('Y-m-d H:i:s'),
+            'created_at' => $orderHeader->addtime,
+            'warehouse_id' => $warehouse->id ?? ''
         ];
     }
 

+ 3 - 1
app/Services/OrderTrackingService.php

@@ -34,7 +34,9 @@ class OrderTrackingService
             $owner_ids = array_intersect($owner_ids, $ownerids);
         }
         $query = OrderTracking::query()->with(['owner', 'commodities' => function ($query) {
-            $query->with(['commodity', 'package.order.logistic']);
+            $query->with(['commodity'=>function($query){
+                $query->with('barcodes');
+            }, 'package.order.logistic']);
         },])->whereHas('owner', function ($query) use ($owner_ids) {
             $query->whereIn('id', $owner_ids); //货主
         });

+ 1 - 1
app/Services/OwnerService.php

@@ -84,7 +84,7 @@ Class OwnerService
         $customerIds = array_diff($customerIds,[null,'','*']);
         $owners = Owner::query()->whereIn('code',data_get($orderHeaders,'*.customerid'))->get();
 
-        if($owners->count() < $customerIds){
+        if($owners->count() < count($customerIds)){
             $customerIds = array_diff($customerIds,data_get($owners,'*.code'));
             $owner_list = $this->createByWmsCustomerIds($customerIds);
             $owners->concat($owner_list);

+ 1 - 1
app/Services/PackageService.php

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

+ 42 - 4
app/Services/WarehouseService.php

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

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

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

+ 11 - 0
routes/api/thirdPart/goodscan.php

@@ -0,0 +1,11 @@
+<?php
+
+use App\Http\Controllers\api\thirdPart\goodscan\PackageController;
+use Illuminate\Support\Facades\Route;
+
+/*
+地址前缀:/api/thirdPart/goodscan
+*/
+Route::group(['prefix'=>'weight'],function(){
+    Route::POST('new', "PackageController@new_");//称重上传
+});

+ 14 - 0
tests/webApi/thirdPart/goodscan/PackageController.http

@@ -0,0 +1,14 @@
+# For a quick start check out our HTTP Requests collection (Tools|HTTP Client|Open HTTP Requests Collection).
+##
+## Following HTTP Request Live Templates are available:
+## * 'gtrp' and 'gtr' create a GET request with or without query parameters;
+## * 'ptr' and 'ptrp' create a POST request with a simple or parameter-like body;
+## * 'mptr' and 'fptr' create a POST request to submit a form with a text or file field (multipart/form-data);
+POST http://bswas/api/thirdPart/goodscan/weight/new
+Content-Type: application/json
+
+{"code":"201013000459","l":"50","w":"50","h":"50","weight":"9.9","hid":"2C7FACD3AFC3FFE547FC54CDA076A25D","time":"2020-10-26 14:17:07","picture": "1123213232132132"}
+###
+
+
+