belongsTo('App\Owner','owner_id','id'); } public function logistic(){ return $this->belongsTo('App\Logistic','logistic_id','id'); } public function measuringMachine(){ return $this->belongsTo('App\MeasuringMachine','measuring_machine_id','id'); } public function paperBox(){ return $this->belongsTo('App\PaperBox','paper_box_id','id'); } public function WMSReflectPackage(){ return $this->hasOne('App\WMSReflectPackage','SOReference5','logistic_number'); } public function setLengthAttribute($value){ if(empty((int)($value)))return; $this->attributes['length'] = $value; } public function setWidthAttribute($value){ if(empty((int)($value)))return; $this->attributes['width'] = $value; } public function setHeightAttribute($value){ if(empty((int)($value)))return; $this->attributes['height'] = $value; } public function setBulkAttribute($value){ if(empty((int)($value)))return; $this->attributes['bulk'] = $value; } public function isActivityBatch(){ return ($this['batch_rule'] && strstr($this['batch_rule'],'组合') && $this['batch_number'] ); } static public function createPackagesFromBatchCode($batchCode,$weight){ $resultOracleObjs=OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields); $resultOracleObjs->where('doc_order_header.waveno',$batchCode); $resultOracleObjs->leftJoin('act_allocation_details','act_allocation_details.orderno','doc_order_header.orderno')->get(); $packages = []; $now = Carbon::now(); foreach($resultOracleObjs as $resultOracleObj){ array_push($packages,[ 'batch_number'=>$batchCode??'', /** @var OrderIssueService */ 'order_id' => app('OrderIssueService')->createOrFindByOrderNo($resultOracleObj['orderno']), 'logistic_number'=>$resultOracleObj['SOReference5']??'', 'weight'=>$weight, 'weighed_at'=> $now, 'status'=>"已上传", "created_at"=>$now, ]); } DB::transaction(function ()use($packages){ Package::query()->insert($packages); }); } public function unifyThisMeasureUnderSameBatch(){ $this->fetchPaperBox(); $params=[]; !empty($this['weight'])?$params['weight']= $this['weight']:null; !empty($this['length'])?$params['length']= $this['length']:null; !empty($this['width'])?$params['width']= $this['width']:null; !empty($this['height'])?$params['height']= $this['height']:null; !empty($this['bulk'])?$params['bulk']= $this['bulk']:null; !empty($this['measuring_machine_id'])?$params['measuring_machine_id']= $this['measuring_machine_id']:null; !empty($this['weighed_at'])?$params['weighed_at']= $this['weighed_at']:null; !empty($this['paper_box_id'])?$params['paper_box_id']= $this['paper_box_id']:null; if(empty($params)||empty($this['batch_number']))return; Package::query()->where(['batch_number'=>$this['batch_number']])->update([$params]); } public function fetchLogisticFromOracle(){ if(empty($this->oracleInfo))return null; if(Arr::exists($this->tempFields,'temLogistic'))return $this->tempFields['temLogistic']; Controller::logs(__METHOD__, __FUNCTION__, "tempPackage:{$this->oracleInfo['carrierid']}||SOR:{$this->oracleInfo['SOReference5']}||sor:{$this->oracleInfo['soreference5']}||orderno:{$this['orderno']}" , null); if(!$this->oracleInfo['carrierid'])return null; $logistic= Logistic::query()->where('code',$this->oracleInfo['carrierid'])->first(); if(!$logistic){ $logistic=Logistic::query()->create(['code'=>$this->oracleInfo['carrierid'],'name'=>$this->oracleInfo['carrierid']]); Controller::logs(__METHOD__, __FUNCTION__, "富勒下发找不到快递公司,添加{$this->oracleInfo['carrierid']}" , null); } Controller::logs(__METHOD__, __FUNCTION__, "tempPackage2:{$logistic->id}" , null); if(!$logistic)return null; $this->tempFields['temLogistic']=$logistic; $this['logistic_id'] = $logistic['id']; return $logistic; } public function fetchOwnerFromOracle(){ if(empty($this->oracleInfo))return null; if(Arr::exists($this->tempFields,'temOwner'))return $this->tempFields['temOwner']; $owner= Owner::query()->where('code',$this->oracleInfo['customerid'])->first(); if(!$owner){ $owner=Owner::query()->create(['code'=>$this->oracleInfo['customerid'],'name'=>$this->oracleInfo['customerid']]); Controller::logs(__METHOD__, __FUNCTION__, "富勒下发找不到货主,添加{$this->oracleInfo['customerid']}" , null); } if(!$owner)return null; $this->tempFields['temOwner']=$owner; $this['owner_id'] = $owner['id']; return $owner; } public function getOracleInfoAttribute() { if(isset($this->tempFields['temOracleInfo']))return $this->tempFields['temOracleInfo']; if(empty($this['logistic_number'])&&empty($this['order_code']))return ''; if($this['order_code']){ $resultOracleObjs=OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields)->where('orderno',$this['order_code']); $resultOracleObjs->leftJoin('doc_wave_header','doc_wave_header.waveno','doc_order_header.waveno'); }else{ $resultOracleObjs=OracleActAllocationDetails::query()->select(self::$oracleOrderHeaderFields); $resultOracleObjs->where('picktotraceid',$this['logistic_number']); $resultOracleObjs->leftJoin('DOC_Order_Header','act_allocation_details.orderno','doc_order_header.orderno'); $resultOracleObjs->leftJoin('doc_wave_header','doc_wave_header.waveno','doc_order_header.waveno'); } $this->tempFields['temOracleInfo']=$resultOracleObjs->first(); if(empty($this->tempFields['temOracleInfo'])) { $resultOracleObjs=OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields)->where('soreference5',$this['logistic_number']); $resultOracleObjs->leftJoin('doc_wave_header','doc_wave_header.waveno','doc_order_header.waveno'); } $this->tempFields['temOracleInfo']=$resultOracleObjs->first(); return $this->tempFields['temOracleInfo']; } public function getOwnerNameAttribute() { return $this['owner']? $this['owner']['name']:null; } public function getLogisticNameAttribute(){ return $this['logistic']? $this['logistic']['name']:null; } public function getMeasuringMachineNameAttribute(){ return $this['measuringMachine']? $this['measuringMachine']['name']:null; } public function getMeasuringMachineStatusAttribute(){ return $this['measuringMachine']? $this['measuringMachine']['status']:null; } public function getPaperBoxNameAttribute(){ return $this['paperBox']? $this['paperBox']['model']:null; } public function getWMSReflectPackageNameAttribute(){ return $this['WMSReflectPackage']? $this['WMSReflectPackage']['TASKID']:null; } //寻找相近纸箱ID public function fetchPaperBox($max=null, $centre=null, $min=null, $owner_id=null){ if($this['paper_box_id'])return $this['paper_box_id']; $sumDiffer=0; $maxDiffer=0; $paperBox_id=null; if(!$max)$max=$this['length']; if(!$centre)$centre=$this['width']; if(!$min)$min=$this['height']; if(!$owner_id) $owner_id = $this['owner_id']; if(!$owner_id) { $owner = $this->fetchOwnerFromOracle(); $owner_id = $owner['id']; if(!$owner_id)return null; } $boxes=Owner::query()->select('id')->with('paperBoxes')->find($owner_id); $targetPaperBox=null; foreach ($boxes->paperBoxes as $i=>$paperBox){ if ($paperBox->length==$max&&$paperBox->width==$centre&&$paperBox->height==$min){ $targetPaperBox=$paperBox; break; } $lengthDiffer=abs($paperBox->length-$max); $widthDiffer=abs($paperBox->width-$centre); $heightDiffer=abs($paperBox->height-$min); $thisMaxDiffer=($lengthDiffer>=($widthDiffer>=$heightDiffer?$widthDiffer:$heightDiffer)?$lengthDiffer:($widthDiffer>=$heightDiffer?$widthDiffer:$heightDiffer)); if($i==0){ $maxDiffer=$thisMaxDiffer; $sumDiffer=$lengthDiffer+$widthDiffer+$heightDiffer; $targetPaperBox=$paperBox; } if ($thisMaxDiffer==$maxDiffer){ if($sumDiffer>($lengthDiffer+$widthDiffer+$heightDiffer)){ $sumDiffer=$lengthDiffer+$widthDiffer+$heightDiffer; $targetPaperBox=$paperBox; } } if ($thisMaxDiffer<$maxDiffer){ $sumDiffer=$lengthDiffer+$widthDiffer+$heightDiffer; $maxDiffer=$thisMaxDiffer; $targetPaperBox=$paperBox; } } if($targetPaperBox)$this['paper_box_id']=$targetPaperBox['id']; return $targetPaperBox['id']; } }