Преглед изворни кода

Merge branch 'zengjun' of ssh://was.baoshi56.com:10022/var/git/bswas

 Conflicts:
	app/Providers/AppServiceProvider.php
LD пре 5 година
родитељ
комит
92e820ae94

+ 16 - 5
app/Http/Controllers/DischargeTaskController.php

@@ -9,6 +9,7 @@ use App\Filters\DischargeTaskFilters;
 use App\Http\Requests\DischargeTask\DischargeTaskRequest;
 use App\Imports\CommodityImport;
 use App\Imports\DischargeTaskImport;
+use App\Owner;
 use App\Services\common\ExportService;
 use App\Services\OwnerService;
 use App\Warehouse;
@@ -29,8 +30,14 @@ class DischargeTaskController extends Controller
         if (!Gate::allows('人事管理-卸货-查询')) {
             return redirect(url('/'));
         }
-        $owners = app(OwnerService::class)->getAuthorizedOwners();
-        $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner', 'warehouse'])->filter($filters)->whereIn('owner_id',data_get($owners,'*.id'))->orderByDesc('income_at')->paginate($request['paginate'] ?? 50);
+        if(Gate::allows('人事管理-卸货-货主可见全部')){
+            $owners = Owner::query()->get();
+            $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner', 'warehouse'])->filter($filters)->orderByDesc('income_at')->paginate($request['paginate'] ?? 50);
+        }else{
+            $owners = app(OwnerService::class)->getAuthorizedOwners();
+            $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner', 'warehouse'])->filter($filters)->whereIn('owner_id',data_get($owners,'*.id'))->orderByDesc('income_at')->paginate($request['paginate'] ?? 50);
+        }
+
         $warehouses = Warehouse::query()->select('id', 'name')->get();
         $facilitators = Facilitator::query()->select('name', 'id')->get();
 
@@ -117,14 +124,18 @@ class DischargeTaskController extends Controller
     public function export(Request $request, DischargeTaskFilters $filters)
     {
         $this->gate('人事管理-卸货-查询');
-        $owners = app(OwnerService::class)->getAuthorizedOwners();
-        $dischargeTasks = DischargeTask::query()->with(['Facilitator', 'owner'])->filter($filters)->whereIn('owner_id',data_get($owners,'*.id'))->orderByDesc('id')->get();
+
+        if(Gate::allows('人事管理-卸货-货主可见全部')){
+            $dischargeTasks = DischargeTask::query()->with(['Facilitator', 'owner'])->filter($filters)->orderByDesc('id')->get();
+        }else{
+            $owners = app(OwnerService::class)->getAuthorizedOwners();
+            $dischargeTasks = DischargeTask::query()->with(['Facilitator', 'owner'])->filter($filters)->whereIn('owner_id',data_get($owners,'*.id'))->orderByDesc('id')->get();
+        }
 
         $row = ['日期', '客户名称', '作业名称', '入库单号', '数量', '单位', '单价', '收费', '状态', '备注'];
         $json = app('DischargeTaskService')->getJson($dischargeTasks);
 
         return Export::make($row, $json, "卸货任务");
-        //return app(ExportService::class)->json($row, $json, "卸货任务");
     }
 
     // 结算报表下载

+ 21 - 254
app/Http/Controllers/api/thirdPart/goodscan/PackageController.php

@@ -3,95 +3,48 @@
 
 namespace App\Http\Controllers\api\thirdPart\goodscan;
 
-use App\Events\WeighedEvent;
-use App\Http\Controllers\LogisticNumberFeatureController;
-use App\Jobs\WeightUpdateInstantBill;
-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 App\Services\weight\GoodScanWeightService;
 use Illuminate\Http\Request;
+use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Validator;
 
 class PackageController
 {
     public function new_(Request $request)
     {
-        app('LogService')->log(__METHOD__,'GoodScan weightApi add'.__FUNCTION__,json_encode($request->getContent()));
+        app('LogService')->log(__METHOD__, 'GoodScan weightApi add' . __FUNCTION__, json_encode($request->getContent()));
         $requestInput = [];
-        foreach ($request->input() as $key=>$item) {
+        foreach ($request->input() as $key => $item) {
             $requestInput[strtolower($key)] = $item;
         }
 
         $errors = $this->validatorWeight($requestInput)->errors(); // 参数校验
-        $weight = $requestInput['weight']??'';
-        if($weight == '-9.9'){   // 称重异常校验
-            app('LogService')->log(__METHOD__,'GoodScan weightApi (Error)'.__FUNCTION__,'异方接口称重伤上传异常[异常值为-9.9,电子秤故障或未连接]'.json_encode($request->getContent()));
-            return json_encode(['code'=>500,'error'=>'weight=-9.9']);
-        }
-        if(count($errors) > 0){
-            app('LogService')->log(__METHOD__,'error'.__FUNCTION__,json_encode($request->getContent()).'||'.json_encode($errors),null);
-            return json_encode(['code'=>500,'error'=>$errors]);
-        }
 
-        /**
-         * @var MeasuringMachine $measuringMachine
-         * @var OrderPackage $orderPackage
-         * @var OracleDOCOrderHeader $orderHeader
-         * @var Order $order
-         */
+        $weight = $requestInput['weight'] ?? '';
 
-        $measuringMachine = $this->getMeasuringMachine($requestInput['hid']); // 返回设备并启动
-        $orderPackage=$this->getOrderPackageByLogisticNumber($requestInput['code']); // 查询WAS是否有对应的包裹信息
-        if($orderPackage){
-            $result = $this->updateOrderPackage($orderPackage,$requestInput,$measuringMachine); // 更新包裹信息
-            if($result){
-                return json_encode($result);
-            }
-        }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) {
-                app('LogService')->log(__METHOD__,__FUNCTION__,'GoodScan weightApi (Error)'.json_encode($request->getContent()).'||'.json_encode($orderPackage),null);
-                return json_encode(["code"=>500,"error"=>"写入WMS失败!"],JSON_UNESCAPED_UNICODE);
-            }
+        if ($weight == '-9.9') {   // 称重异常校验
+            app('LogService')->log(__METHOD__, 'GoodScan weightApi (Error)' . __FUNCTION__, '异方接口称重伤上传异常[异常值为-9.9,电子秤故障或未连接]' . json_encode($request->getContent()));
+            return json_encode(['code' => 500, 'error' => 'weight=-9.9'], JSON_UNESCAPED_UNICODE);
         }
-        if(!empty($orderPackage->order)){
-            Waybill::setWeightByOrderCode($orderPackage->order->code,$orderPackage->weight);
+
+        if (count($errors) > 0) {
+            app('LogService')->log(__METHOD__, 'error' . __FUNCTION__, json_encode($request->getContent()) . '||' . json_encode($errors), null);
+            return json_encode(['code' => 500, 'error' => $errors], JSON_UNESCAPED_UNICODE);
         }
-        $orderPackage->loadMissing('measuringMachine');
-        event(new WeighedEvent($orderPackage));
-        dispatch(new WeightUpdateInstantBill($orderPackage));
-        $response=["code"=>0,'error'=>'upload success'];
-        app('LogService')->log(__METHOD__,__FUNCTION__,"异方下发写入包裹成功:".json_encode($request->getContent()).'||'.json_encode($response),null);
 
-        return json_encode($response,JSON_UNESCAPED_UNICODE);
-    }
+        /** @var GoodScanWeightService $serivce */
+        $service = app(GoodScanWeightService::class);
+        $response = $service->new($requestInput);
+        if ($response['code'] == 500)
+            LogService::log(__CLASS__, __METHOD__, '称重失败:' . json_encode($response['error']));
+        else if ($response['code'] == 0)
+            LogService::log(__CLASS__, __METHOD__, '称重成功:' . json_encode($requestInput));
 
-    /**
-     * @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;
+        return json_encode($response, JSON_UNESCAPED_UNICODE);
     }
 
-    public function validatorWeight(array $request)
+    public function validatorWeight(array $request): \Illuminate\Contracts\Validation\Validator
     {
         return Validator::make($request, [
             'code' => ['required', 'max:191'],
@@ -109,190 +62,4 @@ class PackageController
             '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=\Illuminate\Support\Carbon::now()->format(\Illuminate\Support\Carbon::DEFAULT_TO_STRING_FORMAT);
-        $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()){
-            app('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->uploaded_to_wms="异常";
-            }
-        }else{
-            app('LogService')->log(__METHOD__,__FUNCTION__,"GoodScan 写入包裹至WMS:".json_encode($orderPackage),null);
-            try{
-                $result=$fluxController->accomplishToWMS($orderPackage);
-                if ($result['result'])
-                    $orderPackage->uploaded_to_wms="是";
-                else
-                    $orderPackage->uploaded_to_wms="异常";
-            }catch (\Exception $e){
-                $orderPackage->uploaded_to_wms="否";
-            }
-        }
-        $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];
-            app('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);
-        $order = $orderService->first(['code'=>$orderHeader->orderno]);
-        if($order)return $order;
-        $order = $orderService->createOrder($order_create_params);
-        app('LogService')->log(__METHOD__,__FUNCTION__,'GoodScan 创建Order',json_encode($order)." || ".$orderHeader);
-        return $order;
-    }
-
-    /**
-     * @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();
-        $weighed_at =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();
-    }
-
 }

+ 24 - 21
app/Http/Controllers/api/thirdPart/hengli/PackageController.php

@@ -4,27 +4,33 @@
 namespace App\Http\Controllers\api\thirdPart\hengli;
 
 use App\Http\Controllers\api\thirdPart\weight\WeightBaseController;
+use App\Services\LogService;
+use App\Services\weight\HengLiWeightService;
 use Illuminate\Http\Request;
 
 class PackageController extends WeightBaseController
 {
-    // 参数
-    protected $weight = 'weight';     // 重量
-    protected $length = 'length';     // 长
-    protected $width = 'width';      // 宽
-    protected $height = 'height';     // 高
-    protected $code = 'code';       // 快递单号
-    protected $weight_at = 'weight_at';  // 称重时间
-    protected $hid = 'hid';        // 称重设备id
-    protected $name = 'HengLi';       // 名称
-
     public function new_(Request $request)
     {
-        app('LogService')->log(__METHOD__, $this->name, "记录上传日志:" . json_encode($request->all()) , null);
-        return $this->new($request);
+        $errors = $this->validator($request);
+        if(count($errors)>0){
+            return json_encode(['success' => false,'message' => $errors],JSON_UNESCAPED_UNICODE);
+        }
+
+        $params = $this->conversionRequest($request);
+
+        /** @var HengLiWeightService $service */
+        $service = app(HengLiWeightService::class);
+
+        $response = $service->new($params);
+        if($response['success'])
+            LogService::log(__CLASS__,$service->name,'称重成功!'.json_encode($params));
+        else
+            LogService::log(__CLASS__,$service->name,'称重失败!'.json_encode($request['']).json_encode($params));
+        return json_encode($response,JSON_UNESCAPED_UNICODE);
     }
 
-    public function conversionRequest($request)
+    public function conversionRequest($request): array
     {
         $params = [];
         $arr = $request->all();
@@ -66,27 +72,22 @@ class PackageController extends WeightBaseController
         return str_replace('_', '.', $value);
     }
 
-    // 信息返回
 
-    // 返回称重成功信息
     public function getSuccessMessage($params, $orderPackage): array
     {
         return ['success' => true, 'message' => '称重成功'];
     }
 
-    // 返回包裹未找到异常
     public function getNotFindOrderPackageMessage($params, $orderPackage): string
     {
         return json_encode(['success' => false, 'message' => '未找打包裹信息', JSON_UNESCAPED_UNICODE]);
     }
 
-    // 返回富勒信息未找到异常
     public function getNotFindOrderHeaderMessage($params, $orderPackage): string
     {
         return json_encode(['success' => false, 'message' => '富勒信息未找到'], JSON_UNESCAPED_UNICODE);
     }
 
-    // 返回称重下发错误
     public function getWeightMessage($orderPackage, $e)
     {
         return json_encode(['success' => false, 'message' => $e->getMessage], JSON_UNESCAPED_UNICODE);
@@ -94,18 +95,20 @@ class PackageController extends WeightBaseController
 
     public function validator(Request $request): array
     {
+        /** @var HengLiWeightService $service */
+        $service = app(HengLiWeightService::class);
         $params = $this->conversionRequest($request);
         $errors = [];
-        $weight = $this->getWeightValue($params);
+        $weight = $service->getWeightValue($params);
         if (empty($weight) || $weight == '') {
             $errors['weight'] = '称重重量为空';
         }
-        $code = $this->getCodeValue($params);
+        $code = $service->getCodeValue($params);
         $code = trim($code, "'");
         if (empty($code) || $code == '') {
             $errors['code'] = '快递单号为空';
         }
-        $hid = $this->getValue($this->hid, $params);
+        $hid = $service->getValue($service->hid, $params);
         if (empty($hid) || $hid == '') {
             $errors['hid'] = '称重设备号不能为空';
         }

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

@@ -2,335 +2,57 @@
 
 namespace App\Http\Controllers\api\thirdPart\weight;
 
-use App\Events\WeighedEvent;
 use App\Http\Controllers\Controller;
-use App\Http\Controllers\LogisticNumberFeatureController;
-use App\Jobs\FetchPackageFromOracle;
-use App\Jobs\WeightUpdateInstantBill;
-use App\MeasuringMachine;
-use App\Order;
-use App\OrderPackage;
-use App\Services\OrderService;
-use App\Waybill;
+use App\Services\LogService;
+use App\Services\weight\HaoChuangWeightService;
 use Illuminate\Http\Request;
 use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Validator;
 
-
 class PackageController extends Controller
 {
-//    public function new_(Request $requestInitial){
-//        $request=[];
-//        foreach ($requestInitial->all() as $k=>$v){
-//            $request[strtolower($k)]=$v;
-//        }
-//        $reqDate=isset($request['time'])?$request['time']:Carbon::now();
-//        $errors=$this->validatorWeight($request)->errors();
-//
-//        if (count($errors)>0){
-//            app('LogService')->log(__METHOD__,'error'.__FUNCTION__,json_encode($request).'||'.json_encode($errors),null);
-//            $response=["msg"=>$errors,"code"=>500,"data"=>null];
-//            return json_encode($response);
-//        }
-//
-//        $measuringMachine=MeasuringMachine::where('code',$request['id'])->first();
-//        if (!$measuringMachine){
-//            $measuringMachine=new MeasuringMachine([
-//                'name'=>$request['id'],
-//                'code'=>$request['id'],
-//                'status'=>'在线'
-//            ]);
-//            $measuringMachine->save();
-//            app('LogService')->log(__METHOD__,'weightApi(new measuring machine)'.__FUNCTION__,json_encode($request),null);
-//        }else{
-//            $measuringMachineStatus=new MeasuringMachine();
-//            $measuringMachineStatus->changeStatus($measuringMachine);
-//        }
-//        MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
-//
-//        $package=Package::where('logistic_number',$request['barcode'])->first();
-//        if (isset($request['length'])&&isset($request['width'])&&isset($request['height'])){
-//            $length=$request['length'];
-//            $width=$request['width'];
-//            $height=$request['height'];
-//            $max=($length>=($width>=$height?$width:$height)?$length:($width>=$height?$width:$height));
-//            if ($max==$length){
-//                $centre=$width>=$height?$width:$height;
-//                $min=$width<$height?$width:$height;
-//            }elseif ($max==$width){
-//                $centre=$length>=$height?$length:$height;
-//                $min=$length<$height?$length:$height;
-//            }else{
-//                $centre=$width>=$length?$width:$length;
-//                $min=$width<$length?$width:$length;
-//            }
-//        }else{
-//            $max=0;$centre=0;$min=0;
-//        }
-//        $apiController=new \App\Http\Controllers\api\thirdPart\flux\PackageController();
-//        if ($package){
-//            $packageController=new \App\Http\Controllers\PackageController();
-//            $package->fetchPaperBox($max,$centre,$min,$package->owner_id);
-//            //处理活动波次
-//            if ($package->batch_rule&&strstr($package->batch_rule,'组合')){
-//                $packageController->syncBatch($package->batch_number,$request['weight'],$max,$centre,$min,$reqDate,$package['paper_box_id']);
-//            }else{
-//                $package->measuring_machine_id=$measuringMachine->id;
-//                $package->weight=$request['weight'];
-//                $package->length=$max;
-//                $package->width=$centre;
-//                $package->height=$min;
-//                $package->bulk=$max*$centre*$min;
-//                $package->weighed_at=$reqDate;
-//                $package->status="未上传";
-//                app('LogService')->log(__METHOD__,'Batch_'.__FUNCTION__,json_encode($package),null);
-//                $package->save();
-//                $result=$apiController->accomplishToWMS($package);
-//                if ($result['result']){
-//                    if ($package->status=="记录异常")$package->status="已上传异常";
-//                    else $package->status="已上传";
-//                }else{
-//                    $package->status="上传异常";
-//                }
-//                $package->save();
-//            }
-//            if ($package->order_code){
-//                $waybill=Waybill::where('wms_bill_number',$package->order_code)->where('status','!=','已完结')
-//                    ->where('status','!=','无模型')->first();
-//                if ($waybill){
-//                    $waybill->warehouse_weight_other=$package->weight;
-//                    $waybill->warehouse_weight_unit_id_other=1;
-//                    $waybill->update();
-//                }
-//            }
-//            event(new WeighedEvent($package));
-//            $response=["msg"=>"保存成功",
-//                        "code"=>200,
-//                        "data"=>true,
-//                        "serverMsg"=>null,
-//                        "requestor"=>[
-//                                "requestor"=>"1",
-//                                "eventCode"=>"0",
-//                                "reqDate"=>$reqDate,
-//                                "resDate"=>Carbon::now()]
-//                        ];
-//            app('LogService')->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'|'.json_encode($response),null);
-//            return json_encode($response,JSON_UNESCAPED_UNICODE);
-//        }
-//        if (!$package){
-//            $logisticNumber=$request['barcode'];
-//            $createPackage=new Package([
-//                'logistic_number'=>$logisticNumber,
-//                'delivery_number'=>$logisticNumber,
-//                'measuring_machine_id'=>$measuringMachine->id,
-//                'weight'=>$request['weight'],
-//                'length'=>$max,
-//                'width'=>$centre,
-//                'height'=>$min,
-//                'bulk'=>$max*$centre*$min,
-//                'weighed_at'=>$reqDate,
-//                'status'=>"未下发",
-//            ]);
-//            $createPackage->fetchAllFromOracle();
-//            $createPackage->fetchPaperBox($max, $centre, $min);
-//            $result=$apiController->accomplishToWMS($createPackage);
-//            if(!$result['result']){
-//                app('LogService')->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($createPackage),null);
-//                $response=["msg"=>"写入WMS失败!","code"=>500,"data"=>null];
-//                return json_encode($response,JSON_UNESCAPED_UNICODE);
-//            }
-//            if ($createPackage->save()){
-//                $measuringMachine->touch();
-//                MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
-//                MarkPackageExcepted::dispatch($createPackage)->delay(Carbon::now()->addMinutes(1440));
-//                event(new WeighedEvent($createPackage));
-//                $response=["msg"=>"保存成功",
-//                    "code"=>200,
-//                    "data"=>true,
-//                    "serverMsg"=>null,
-//                    "requestor"=>[
-//                        "requestor"=>"1",
-//                        "eventCode"=>"0",
-//                        "reqDate"=>$reqDate,
-//                        "resDate"=>Carbon::now()]
-//                ];
-//                app('LogService')->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
-//                return json_encode($response,JSON_UNESCAPED_UNICODE);
-//            }
-//
-//            $response=["msg"=>"保存时发生错误(未下发)!","code"=>500,"data"=>null];
-//            app('LogService')->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
-//            return json_encode($response,JSON_UNESCAPED_UNICODE);
-//        }
-//    }
-
-    public function new_(Request $requestInitial){
-        $request=[];
-        foreach ($requestInitial->all() as $k=>$v){
-            $request[strtolower($k)]=$v;
+    public function new_(Request $requestInitial)
+    {
+        $request = [];
+        foreach ($requestInitial->all() as $k => $v) {
+            $request[strtolower($k)] = $v;
         }
-//        $reqDate=isset($request['time'])?$request['time']:Carbon::now();
-        $reqDate=Carbon::now()->format(Carbon::DEFAULT_TO_STRING_FORMAT);
-        $errors=$this->validatorWeight($request)->errors();
+        $weight_at = Carbon::now()->format(Carbon::DEFAULT_TO_STRING_FORMAT);
+        $errors = $this->validatorWeight($request)->errors();
 
-        if (count($errors)>0){
-            app('LogService')->log(__METHOD__,'error'.__FUNCTION__,json_encode($request).'||'.json_encode($errors),null);
-            return json_encode(["msg"=>$errors,"code"=>500,"data"=>null]);
+        if (count($errors) > 0) {
+            app('LogService')->log(__METHOD__, 'error' . __FUNCTION__, json_encode($request) . '||' . json_encode($errors), null);
+            return json_encode(["msg" => $errors, "code" => 500, "data" => null]);
         }
 
-        $id = $request['id']??'无ID设备';
-        $measuringMachine=MeasuringMachine::query()->firstOrCreate(['code'=> $id]);
-        $measuringMachine->turnOn();
-        $measuringMachine->turnOffInMinutes(30);
+        $request['weight_at'] = $weight_at;
+        /** @var HaoChuangWeightService $service */
+        $service = app(HaoChuangWeightService::class);
+        $response = $service->new($request);
+        if ($response['code'] == 500)
+            LogService::log(__CLASS__, $service->name, '称重失败!' . json_encode($request['msg'] ?? '') . json_encode($request));
+        else
+            LogService::log(__CLASS__, $service->name, '称重成功!' . json_encode($request));
 
-        /** @var OrderPackage $package */
-        $package=OrderPackage::query()->where('logistic_number',$request['barcode'])->first();
-
-        $edges=[$request['length']??0,$request['width']??0,$request['height']??0];
-        rsort($edges);
-        $fluxController=new \App\Http\Controllers\api\thirdPart\flux\PackageController();
-        if ($package){
-            $package['measuring_machine_id']=$measuringMachine->id;
-            $package['weight']=$request['weight'];
-            $package['length']=$edges[0];
-            $package['width']=$edges[1];
-            $package['height']=$edges[2];
-            $package['weighed_at']=$reqDate;
-            $package->fetchAllFromOracle();
-            $package->fetchPaperBox();
-            $package['bulk']=$edges[0]*$edges[1]*$edges[2];
-            if ($package->isActivityBatch()){//处理活动波次
-                app('LogService')->log(__METHOD__,__FUNCTION__,"依波次号同步所有包裹:".json_encode($package),null);
-                $package->unifyThisMeasureUnderSameBatch();
-                $result=$fluxController->markWMSOnBatch($package['batch_number'], $request['weight']);
-                if(!$result['result']){
-                    $package->uploaded_to_wms="异常";
-                }
-            }else{
-                app('LogService')->log(__METHOD__,__FUNCTION__,"写入包裹至WMS:".json_encode($package),null);
-                try{
-                    $result=$fluxController->accomplishToWMS($package);
-                    if ($result['result']){
-                        $package->uploaded_to_wms="是";
-                    }else{
-                        $package->uploaded_to_wms="异常";
-                    }
-                }catch (\Exception $e){
-                    $package->uploaded_to_wms="否";
-                }
-            }
-            try{
-                $package->save();
-                $package->load(['order'=>function($query){
-                    $query->with('owner','logistic');
-                },'paperBox','measuringMachine']);
-                $logisticNumberController = new LogisticNumberFeatureController();
-                if (!$package->order){
-                    $package->order = new Order();
-                    $logistic=$logisticNumberController->getLogisticByFeatures($package->logistic_number);
-                    $package->order->logistic = $logistic;
-                }else{
-                    if(!$package->order->logistic){
-                        $logistic=$logisticNumberController->getLogisticByFeatures($package->logistic_number);
-                        $package->order->logistic_id = $logistic['id'];
-                        $package->order->save();
-                    }
-                }
-            }catch (\Exception $e){
-                $response=["msg"=>"称重下发修改时发生错误!".json_encode($e),"code"=>500,"data"=>null];
-                app('LogService')->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response).'||'.json_encode($e),null);
-                return json_encode($response,JSON_UNESCAPED_UNICODE);
-            }
-        }
-        if (!$package){
-            $logisticNumber=$request['barcode'];
-            /** @var $orderService OrderService */
-            $orderService = app('OrderService');
-            $order = $orderService->logisticNumberFirstOrCreateOrder($logisticNumber);
-            if (!$order) {
-                $response=["msg"=>"保存时发生错误(未在WMS找到该单)!","code"=>500,"data"=>null];
-                return json_encode($response,JSON_UNESCAPED_UNICODE);
-            }
-            $package=new OrderPackage([
-                'order_id' => $order->id,
-                'logistic_number'=>$logisticNumber,
-                'measuring_machine_id'=>$measuringMachine->id,
-                'weight'=>$request['weight'],
-                'length'=>$edges[0],
-                'width'=>$edges[1],
-                'height'=>$edges[2],
-                'bulk'=>$edges[0]*$edges[1]*$edges[2],
-                'weighed_at'=>$reqDate,
-                'status'=>"无",
-            ]);
-            $package->fetchAllFromOracle();
-            $package->fetchPaperBox();
-            try{
-                $package->save();
-                $package->load(['order'=>function($query){
-                    $query->with('owner','logistic');
-                },'paperBox','measuringMachine']);
-                $logisticNumberController = new LogisticNumberFeatureController();
-                if (!$package->order){
-                    $package->order = new Order();
-                    $logistic=$logisticNumberController->getLogisticByFeatures($package->logistic_number);
-                    $package->order->logistic = $logistic;
-                }else{
-                    if(!$package->order->logistic){
-                        $logistic=$logisticNumberController->getLogisticByFeatures($package->logistic_number);
-                        $package->order->logistic_id = $logistic['id'];
-                        $package->order->save();
-                    }
-                }
-            }catch (\Exception $e){
-                $response=["msg"=>$e->getMessage(),"code"=>500,"data"=>$e->getTraceAsString()];
-                app('LogService')->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response).'||'.$e->getTraceAsString(),null);
-                return json_encode($response,JSON_UNESCAPED_UNICODE);
-            }
-            $result=$fluxController->accomplishToWMS($package);
-            if(!$package['batch_number'])
-                FetchPackageFromOracle::dispatch($package)->delay(Carbon::now()->addMinutes(1440));
-            if(!$result['result']){
-                app('LogService')->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($package),null);
-                $response=["msg"=>"写入WMS失败!","code"=>500,"data"=>null];
-                return json_encode($response,JSON_UNESCAPED_UNICODE);
-            }
-        }
-        if(!empty($package->order))
-            Waybill::setWeightByOrderCode($package->order->code,$package->weight);
-        if ($package){
-            event(new WeighedEvent($package));
-            dispatch(new WeightUpdateInstantBill($package));
-        }
-        $response=["msg"=>"保存成功",
-            "code"=>200,
-            "data"=>true,
-            "serverMsg"=>null,
-            "requestor"=>[
-                "requestor"=>"1",
-                "eventCode"=>"0",
-                "reqDate"=>$reqDate,
-                "resDate"=>Carbon::now()]
-        ];
-        app('LogService')->log(__METHOD__,__FUNCTION__,"下发写入包裹成功:".json_encode($request).'|'.json_encode($response),null);
-        return json_encode($response,JSON_UNESCAPED_UNICODE);
+        return json_encode($response);
     }
 
-    public function validatorWeight(array $request){
-        $validator=Validator::make($request,[
-            'id'=>['nullable','max:30'],
-            'barcode'=>['required','max:191'],
-            'weight'=>['required','numeric','min:0'],
-            'length'=>['nullable','numeric','min:0'],
-            'width'=>['nullable','numeric','min:0'],
-            'height'=>['nullable','numeric','min:0'],
-        ],[
-            'required'=>':attribute 为必填项',
-            'max'=>':attribute 字符过多或数值过大',
-            'min'=>':attribute 不得为负',
-            'numeric'=>':attribute 应为数字',
-        ],[]);
-        return $validator;
+
+    public function validatorWeight(array $request): \Illuminate\Contracts\Validation\Validator
+    {
+        return Validator::make($request, [
+            'id' => ['nullable', 'max:30'],
+            'barcode' => ['required', 'max:191'],
+            'weight' => ['required', 'numeric', 'min:0'],
+            'length' => ['nullable', 'numeric', 'min:0'],
+            'width' => ['nullable', 'numeric', 'min:0'],
+            'height' => ['nullable', 'numeric', 'min:0'],
+        ], [
+            'required' => ':attribute 为必填项',
+            'max' => ':attribute 字符过多或数值过大',
+            'min' => ':attribute 不得为负',
+            'numeric' => ':attribute 应为数字',
+        ], []);
     }
 
 }

+ 8 - 3
app/Providers/AppServiceProvider.php

@@ -110,6 +110,9 @@ use App\Services\UserWorkgroupService;
 use App\Services\DischargeTaskService;
 use App\Services\DeliveryAppointmentService;
 use App\Services\StationCacheShelfGridService;
+use App\Services\weight\GoodScanWeightService;
+use App\Services\weight\HaoChuangWeightService;
+use App\Services\weight\HengLiWeightService;
 use App\Services\PrintPartService;
 use App\Services\PrintTemplateService;
 use Illuminate\Queue\Events\JobFailed;
@@ -201,8 +204,6 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('CommodityService', CommodityService::class);
         app()->singleton('ConfigurationService',ConfigurationService::class);
         app()->singleton('CustomerLogService',CustomerLogService::class);
-        app()->singleton('CustomerLogService',CustomerLogService::class);
-        app()->singleton('CustomerLogStatusService',CustomerLogStatusService::class);
         app()->singleton('CustomerLogStatusService',CustomerLogStatusService::class);
         app()->singleton('CustomerService',CustomerService::class);
         app()->singleton('DataHandlerService',DataHandlerService::class);
@@ -216,6 +217,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('ForeignHaiRoboticsService',ForeignHaiRoboticsService::class);
         app()->singleton('ForeignZhenCangService',ForeignZhenCangService::class);
         app()->singleton('InventoryAccountMissionService', InventoryAccountMissionService::class);
+        app()->singleton('LogisticZopService', LogisticZopService::class);
         app()->singleton('InventoryCompareService', InventoryCompareService::class);
         app()->singleton('InventoryDailyLogService', InventoryDailyLogService::class);
         app()->singleton('LaborReportsCountingRecordService', LaborReportsCountingRecordService::class);
@@ -253,7 +255,6 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('OwnerBillReportService', OwnerBillReportService::class);
         app()->singleton('OwnerFeeDetailService', OwnerFeeDetailService::class);
         app()->singleton('OwnerMaterialService', OwnerMaterialService::class);
-        app()->singleton('OwnerMaterialService', OwnerMaterialService::class);
         app()->singleton('OwnerPriceDirectLogisticService', OwnerPriceDirectLogisticService::class);
         app()->singleton('OwnerPriceExpressService', OwnerPriceExpressService::class);
         app()->singleton('OwnerPriceLogisticService', OwnerPriceLogisticService::class);
@@ -305,6 +306,10 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('WarehouseService', WarehouseService::class);
         app()->singleton('WaybillFinancialService', WaybillFinancialService::class);
         app()->singleton('WeighExceptedService', WeighExceptedService::class);
+        app()->singleton('GoodScanWeightService',GoodScanWeightService::class);
+        app()->singleton('HaoChuangWeightService',HaoChuangWeightService::class);
+        app()->singleton('HengLiWeightService',HengLiWeightService::class);
+        app()->singleton('InventoryAccountMissionService',InventoryAccountMissionService::class);
     }
 
     /**

+ 42 - 0
app/Services/weight/GoodScanWeightService.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Services\weight;
+
+
+class GoodScanWeightService extends WeightService
+{
+    public $weight = 'weight';       // 重量
+    public $length = 'l';            // 长
+    public $width = 'w';             // 宽
+    public $height = 'h';            // 高
+    public $code = 'code';           // 快递单号
+    public $weight_at = 'time'; // 称重时间
+    public $hid = 'hid';             // 称重设备id
+    public $name = 'GoodScan';          // 名称
+
+    public function getSuccessMessage($params, $orderPackage): array
+    {
+        return ["code" => 0, 'error' => 'upload success'];
+    }
+
+    public function getNotFindOrderPackageMessage($params, $orderPackage): array
+    {
+        return ['code' => 500, 'error' => '未找打包裹信息'];
+    }
+
+    public function getNotFindOrderHeaderMessage($params, $orderPackage): array
+    {
+        return ['code' => 500, 'error' => '保存时发生错误(未在WMS中找到订单)!'];
+    }
+
+    public function getWeightMessage($orderPackage, $e): array
+    {
+        return ['code' => 500, 'error' => $e->getMessage];
+    }
+
+    public function getWriteWasFailMessage($params, $orderPackage): array
+    {
+        return ["code" => 500, "error" => "写入WMS失败!"];
+    }
+
+}

+ 49 - 0
app/Services/weight/HaoChuangWeightService.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace App\Services\weight;
+
+
+use Illuminate\Support\Carbon;
+
+class HaoChuangWeightService extends WeightService
+{
+    public $weight = 'weight';     // 重量
+    public $length = 'length';     // 长
+    public $width = 'width';      // 宽
+    public $height = 'height';     // 高
+    public $code = 'barcode';       // 快递单号
+    public $weight_at = 'weight_at';  // 称重时间
+    public $hid = 'id';        // 称重设备id
+    public $name = 'HaoChuang';       // 名称
+
+    public function getSuccessMessage($params, $orderPackage): array
+    {
+        return ['code' => 200, 'msg' => '保存成功', 'data' => true, 'serverMsg' => null,
+            "requestor" => [
+                "requestor" => "1",
+                "eventCode" => "0",
+                "reqDate" => $orderPackage->weighed_at ?? Carbon::now()->format(Carbon::DEFAULT_TO_STRING_FORMAT),
+                "resDate" => Carbon::now()
+            ]];
+    }
+
+    public function getNotFindOrderPackageMessage($params, $orderPackage): array
+    {
+        return ['code' => 500, 'msg' => '未找打包裹信息', 'data' => null];
+    }
+
+    public function getNotFindOrderHeaderMessage($params, $orderPackage): array
+    {
+        return ['code' => 500, 'msg' => '富勒信息未找到', 'data' => null];
+    }
+
+    public function getWeightMessage($orderPackage, $e): array
+    {
+        return ['code' => 500, 'msg' => '称重下发修改时发生错误'.json_encode($e), 'data' => null];
+    }
+
+    public function getWriteWasFailMessage($params,$orderPackage): array
+    {
+        return ['code' => 500 ,'msg' => '写入Was包裹失败!', 'data' => null];
+    }
+}

+ 45 - 0
app/Services/weight/HengLiWeightService.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Services\weight;
+
+
+
+class HengLiWeightService extends WeightService
+{
+    // 参数
+    public $weight = 'weight';     // 重量
+    public $length = 'length';     // 长
+    public $width = 'width';      // 宽
+    public $height = 'height';     // 高
+    public $code = 'code';       // 快递单号
+    public $weight_at = 'weight_at';  // 称重时间
+    public $hid = 'hid';        // 称重设备id
+    public $name = 'HengLi';       // 名称
+
+    public function getWeightValue($params)
+    {
+        $value = $this->getValue($this->weight, $params);
+        return str_replace('_', '.', $value);
+    }
+
+    public function getSuccessMessage($params, $orderPackage): array
+    {
+        return ['success' => true, 'message' => '称重成功'];
+    }
+
+    public function getNotFindOrderPackageMessage($params, $orderPackage): array
+    {
+        return ['success' => false, 'message' => '未找打包裹信息'];
+    }
+
+    public function getNotFindOrderHeaderMessage($params, $orderPackage): array
+    {
+        return ['success' => false, 'message' => '富勒信息未找到'];
+    }
+
+    public function getWeightMessage($orderPackage, $e): array
+    {
+        return ['success' => false, 'message' => $e->getMessage];
+    }
+
+}

+ 503 - 0
app/Services/weight/WeightService.php

@@ -0,0 +1,503 @@
+<?php
+
+namespace App\Services\weight;
+
+
+use App\Events\WeighedEvent;
+use App\Http\Controllers\api\thirdPart\flux\PackageController;
+use App\Jobs\WeightUpdateInstantBill;
+use App\MeasuringMachine;
+use App\OracleActAllocationDetails;
+use App\OracleDOCOrderHeader;
+use App\OrderPackage;
+use App\Services\OrderService;
+use App\Waybill;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Carbon;
+
+class WeightService
+{
+    public $weight = '';     // 重量
+    public $length = '';     // 长
+    public $width = '';      // 宽
+    public $height = '';     // 高
+    public $code = '';       // 快递单号
+    public $weight_at = '';  // 称重时间
+    public $hid = '';        // 称重设备id
+    public $name = '';       // 名称
+
+    public function new(array $params): array
+    {
+        $params = $this->conversionParams($params);
+        return $this->weightOrderPackage($params);
+    }
+
+    /**
+     * 参数转换
+     * @param array $params
+     * @return array
+     */
+    public function conversionParams(array $params): array
+    {
+        return $params;
+    }
+
+    /**
+     * 包裹称重
+     * @param array $params
+     * @return array
+     */
+    public function weightOrderPackage(array $params): array
+    {
+
+        // 2.获取快递单号
+        $logistic_number = $this->getCodeValue($params);
+
+        if (!$logistic_number) return $this->getLogisticNumberIsNullMessage($params);
+        // 3、获取称重设备
+        $measuringMachine = $this->getMeasuringMachine($params);
+        /** @var OrderPackage $orderPackage */
+        $orderPackage = $this->getOrderPackageByCode($logistic_number);
+
+        // 4、快递单号对应的OrderPackage
+        if (is_null($orderPackage)) {
+            /** @var OracleDOCOrderHeader $orderHeader */
+            $orderHeader = $this->findOrderHeaderByLogisticNumber($logistic_number);
+            if (is_null($orderHeader)) {
+                return $this->getNotFindOrderHeaderMessage($params, $orderPackage);
+            }
+            try {
+                $order = $this->createOrderByOrderHeader($orderHeader);
+                $orderPackage = $this->createOrderPackage($params, $measuringMachine, $order);
+            } catch (\Exception $e) {
+                return $this->getWriteWasFailMessage($params, $orderPackage);
+            }
+        }
+
+
+        // 5、更新包裹信息
+        $bool = $this->updateOrderPackage($orderPackage, $params, $measuringMachine);
+        // 6、称重时间
+        if ($bool) $this->afterApply($orderPackage);
+        else {
+            app('LogService')->log(__METHOD__, $this->name, '写入WAS失败! (Error)', $logistic_number, null);
+            return $this->getUpdatePackageMessage($orderPackage);
+        }
+
+        // 7、处理波次信息 推送至WMS称重信息
+        try {
+            $this->activityWaveNoProcessing($orderPackage);
+        } catch (\Exception $e) {
+            return $this->getWeightMessage($orderPackage, $e);
+        }
+
+        return $this->getSuccessMessage($params, $orderPackage);
+    }
+
+
+// region ---消息返回
+
+    /**
+     * 称重成功
+     * @param $params
+     * @param $orderPackage
+     * @return array
+     */
+    public function getSuccessMessage($params, $orderPackage): array
+    {
+        return ['success' => true, 'message' => '称重成功'];
+    }
+
+    /**
+     * 没有找到对应的包裹信息
+     * @param $params
+     * @param $orderPackage
+     * @return array
+     */
+    public function getNotFindOrderPackageMessage($params, $orderPackage): array
+    {
+        return ['success' => false, 'message' => '未找打包裹信息'];
+    }
+
+    /**
+     * 富勒信息对应快递单号错误
+     * @param $params
+     * @param $orderPackage
+     * @return array
+     */
+    public function getNotFindOrderHeaderMessage($params, $orderPackage): array
+    {
+        return ['success' => false, 'message' => '富勒信息未找到'];
+    }
+
+    /**
+     * 称重下发修改错误
+     * @param $orderPackage
+     * @param $e
+     * @return array
+     */
+    public function getWeightMessage($orderPackage, $e): array
+    {
+        return ['success' => false, 'message' => $e->getMessage];
+    }
+
+    /**
+     * 更新包裹信息异常错误返回
+     * @param $orderPackage
+     * @return array
+     */
+    public function getUpdatePackageMessage($orderPackage): array
+    {
+        return ['success' => false, 'message' => '更新包裹信息出现异常'];
+    }
+
+    /**
+     * 快递单号过滤后为空
+     * @param $params
+     * @return array
+     */
+    public function getLogisticNumberIsNullMessage($params): array
+    {
+        return ['success' => false, 'message' => '快递单号过滤后为空'];
+    }
+
+    /**
+     * 写入Was失败信息
+     * @param $params
+     * @param $orderPackage
+     * @return array
+     */
+    public function getWriteWasFailMessage($params, $orderPackage): array
+    {
+        return ['success' => false, 'message' => '写入was失败!'];
+    }
+
+// endregion
+
+//  region ---称重完成之后的操作
+
+    /**
+     * 称重完成后的后续操作
+     * @param OrderPackage $orderPackage
+     */
+    public function afterApply(OrderPackage $orderPackage)
+    {
+        $orderPackage->loadMissing(['order' => function ($query) {
+            $query->with('owner', 'logistic');
+        }, 'measuringMachine', 'paperBox']);
+        event(new WeighedEvent($orderPackage));                 // 称重信息播报
+        dispatch(new WeightUpdateInstantBill($orderPackage));   // 及时订单
+        if(!empty($orderPackage->order)){
+            Waybill::setWeightByOrderCode($orderPackage->order->code,$orderPackage['weight']);
+        }
+    }
+
+// endregion
+
+// region  ---参数获取
+    /**
+     * 重量
+     * @param $params
+     * @return mixed|null
+     */
+    public function getWeightValue($params)
+    {
+        return $this->getValue($this->weight, $params);
+    }
+
+    /**
+     * 高
+     * @param $params
+     * @return mixed|null
+     */
+    public function getHeightValue($params)
+    {
+        return $this->getValue($this->height, $params);
+    }
+
+    /**
+     * 长
+     * @param $params
+     * @return mixed|null
+     */
+    public function getLengthValue($params)
+    {
+        return $this->getValue($this->length, $params);
+    }
+
+    /**
+     * 宽
+     * @param $params
+     * @return mixed|null
+     */
+    public function getWidthValue($params)
+    {
+        return $this->getValue($this->width, $params);
+    }
+
+    /**
+     * 获取快递单号
+     * @param $params
+     * @return mixed|null
+     */
+    public function getCodeValue($params)
+    {
+        return $this->getValue($this->code, $params);
+    }
+
+    /**
+     * 称重时间
+     * @param $params
+     * @return mixed|null
+     */
+    public function getWeightAtValue($params)
+    {
+        return $this->getValue($this->weight_at, $params);
+    }
+
+    /**
+     * 获取参数
+     * @param $name
+     * @param $param
+     * @return mixed|null
+     */
+    public function getValue($name, $param)
+    {
+        $names = explode(',', $name);
+        $value = array_reduce($names, function ($data, $key) {
+            if (isset($data[$key])) $data = $data[$key];
+            else $data = [];
+            return $data;
+        }, $param);
+        if (is_array($value) && count($value) == 0) return null;
+        return $value;
+    }
+
+    /**
+     * 体积参数排序
+     * @param $params
+     * @return array
+     */
+    public function getEdges($params): array
+    {
+        $length = $this->getLengthValue($params);
+        $height = $this->getHeightValue($params);
+        $width = $this->getWidthValue($params);
+        $edges = [$length ?? 0, $width ?? 0, $height ?? 0];
+        rsort($edges);
+        return $edges;
+    }
+
+// endregion
+
+//  region ---包裹
+
+    /**
+     * 获取单号对应的包裹
+     * @param $code
+     * @return Builder|Model|object|null
+     */
+    public function getOrderPackageByCode($code)
+    {
+        return OrderPackage::query()
+            ->with(['order' => function ($query) {
+                /** @var Builder $query */
+                $query->with('owner', 'logistic');
+            }])->where('logistic_number', $code)->first();
+    }
+
+    /**
+     * 更新包裹信息
+     * @param OrderPackage $orderPackage
+     * @param $params
+     * @param $measuringMachine
+     * @return bool
+     */
+    public function updateOrderPackage(OrderPackage $orderPackage, $params, $measuringMachine): bool
+    {
+        $edges = $this->getEdges($params);
+        $req_date = Carbon::now()->toDateTimeString();
+        $orderPackage['weight'] = $this->getWeightValue($params);
+        $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];
+        return $orderPackage->save();
+    }
+
+    /**
+     * 创建包裹信息
+     * @param $params
+     * @param $measuringMachine
+     * @param $order
+     * @return Builder|Model|object|null
+     */
+    public function createOrderPackage($params, $measuringMachine, $order)
+    {
+        $weighed_at = Carbon::now()->format(Carbon::DEFAULT_TO_STRING_FORMAT);
+        $edges = $this->getEdges($params);
+        OrderPackage::query()->create([
+            'order_id' => $order->id,
+            'logistic_number' => $this->getCodeValue($params),
+            'measuring_machine_id' => $measuringMachine->id,
+            'weight' => $this->getWeightValue($params),
+            'length' => $edges[0],
+            'width' => $edges[1],
+            'height' => $edges[2],
+            'bulk' => $edges[0] * $edges[1] * $edges[2],
+            'weighed_at' => $weighed_at,
+            'status' => "无",
+        ]);
+        return $this->getOrderPackageByCode($this->getCodeValue($params));
+    }
+
+//  endregion
+
+//  region ---称重设备
+
+    /**
+     * 称重机获取
+     * @param $params
+     * @return MeasuringMachine
+     */
+    public function getMeasuringMachine($params): MeasuringMachine
+    {
+        $hid = $this->getValue($this->hid, $params);
+        /** @var MeasuringMachine $measuringMachine */
+        $measuringMachine = MeasuringMachine::query()->firstOrCreate(['code' => $hid], ['name' => $hid]); // 称重设备
+        $measuringMachine->turnOn();
+        $measuringMachine->turnOffInMinutes(30);
+        return $measuringMachine;
+    }
+//  endregion
+
+// region ---wms操作
+
+    /**
+     * 根据快递单号找到对应的WMS订单信息
+     * @param $code
+     * @return Builder|Model|object|null
+     */
+    public function findOrderHeaderByLogisticNumber($code)
+    {
+        $query = OracleActAllocationDetails::query()->select('OrderNO')->where('PickToTraceId', $code);
+        $orderHeader = OracleDOCOrderHeader::query()->with('actAllocationDetails', 'oracleBASCode')->whereIn('OrderNO', $query)->first();
+        if ($orderHeader == null) {
+            $orderHeader = OracleDOCOrderHeader::query()->with('actAllocationDetails', 'oracleBASCode')->where('SOReference5', $code)->first();
+        }
+        return $orderHeader;
+    }
+
+    /**
+     * 同步wms订单信息
+     * @param $orderHeader
+     * @return Builder|Model|object
+     */
+    public function createOrderByOrderHeader($orderHeader)
+    {
+        /** @var OrderService $orderService */
+        $orderService = app(OrderService::class);
+        $order_create_params = $orderService->getParamByOrderHeader($orderHeader);
+        $order = $orderService->first(['code' => $orderHeader->orderno]);
+        if ($order) return $order;
+        $order = $orderService->createOrder($order_create_params);
+        app('LogService')->log(__METHOD__, $this->name, ' 创建Order', json_encode($order) . " || " . $orderHeader);
+        return $order;
+    }
+
+    /**
+     * 活动波次处理
+     * @param $orderPackage
+     */
+    public function activityWaveNoProcessing(&$orderPackage)
+    {
+        $fluxController = new PackageController();
+        if ($orderPackage->isActivityBatch()) {
+            app('LogService')->log(__METHOD__, $this->name . " 依波次号同步所有包裹", json_encode($orderPackage), null);
+            OrderPackage::query()->where('batch_number', $orderPackage['batch_number'])->update([
+                '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,
+            ]);
+            $result = $fluxController->markWMSOnBatch($orderPackage['batch_number'], $orderPackage['weight']);
+            if (!$result['result']) {
+                $orderPackage->uploaded_to_wms = "异常";
+            }
+        } else {
+            app('LogService')->log(__METHOD__, $this->name . " 写入包裹至WMS异常", json_encode($orderPackage), null);
+            try {
+                $result = $fluxController->accomplishToWMS($orderPackage);
+                if ($result['result'] == 'success') $orderPackage->uploaded_to_wms = "是";
+                else $orderPackage->uploaded_to_wms = "异常";
+            } catch (\Exception $e) {
+                $orderPackage->uploaded_to_wms = "否";
+            }
+        }
+        $orderPackage->save();
+    }
+// endregion
+
+// region ---上传快递单号处理
+
+    /**
+     * 快递单号处理
+     *
+     * @param $code
+     * @return string
+     */
+    public function processCode($code): string
+    {
+
+        /** 如果是$code 是数组处理 */
+        if (is_array($code)) {
+            return $this->processCodeArr($code);
+        }
+        return $this->processCodeStr($code);
+    }
+
+    /**
+     *  快递单号 array 处理
+     *
+     * @param array $code
+     * @return mixed|string
+     */
+    public function processCodeArr(array $code): string
+    {
+        usort($code, function ($codeA, $codeB) {
+            if (strlen($codeA) == strlen($codeB)) return 0;
+            return strlen($codeA) > strlen($codeB) ? 1 : -1;
+        });
+        return $code[0];
+    }
+
+    /**
+     * 快递单号 string 处理
+     *
+     * @param $code
+     * @return string|null
+     */
+    public function processCodeStr($code): ?string
+    {
+        $codes = [];
+        preg_match_all('/[\w]+/', $code, $codes);
+        if (count($codes) == 0) return $code;
+        $codes = array_unique(array_filter(array_shift($codes), function ($item) {
+            return strlen($item) > 8;
+        }));
+        usort($codes, function ($a, $b) {
+            if (strlen($a) == strlen($b)) return 0;
+            return strlen($a) < strlen($b) ? 1 : -1;
+        });
+        return $codes[0] ?? null;
+    }
+
+// endregion
+}

+ 29 - 0
database/migrations/2021_06_07_112859_add_authority_discharge_task_owner.php

@@ -0,0 +1,29 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddAuthorityDischargeTaskOwner extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        \App\Authority::query()->firstOrCreate(['name' =>  '人事管理-卸货-货主可见全部'],['alias_name' => '人事管理-卸货-货主可见全部']);
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        \App\Authority::query()->where(['name' =>  '人事管理-卸货-货主可见全部'])->delete();
+
+    }
+}