singleton('packageService',PackageService::class); } /** * Display a listing of the resource. * @param Request $request * @param OwnerService $ownerService * @return void */ public function index(Request $request,OwnerService $ownerService) { if(!Gate::allows('称重管理-查询')){ return redirect(url('/')); } $paginateParams = $request->input(); /** @var PackageService */ $packages = app('packageService')->paginate($request); return view('weight.package.index',['packages'=>$packages,'owners'=>$ownerService->getSelection(),'paginateParams'=>$paginateParams]); } /** * Show the form for creating a new resource. * * @return void */ public function create() { if(!Gate::allows('称重管理-录入')){ return redirect(url('/')); } $paperBoxes=PaperBox::select('id','model')->get(); return view('weight.package.create',['paperBoxes'=>$paperBoxes]); } /** * Store a newly created resource in storage. * * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|void */ public function store(Request $request) { if(!Gate::allows('称重管理-录入')){ return redirect(url('/')); } $this->validator($request)->validate(); $logistic_number=$request->input('logistic_number'); $weight=$request->input('weight'); $batch_number=strtoupper($request->input('batch_number')); $order_code=$request->input('order_code'); $paper_box_id=$request->input('paper_box_id'); // $isSamePackBatch=$request->input('is_same_pack_batch'); if($logistic_number&&$batch_number)return redirect('package/create')->with('successError','录入失败!波次号和快递单号只能填一项!'); $package=null; $successTip = '操作成功'; /** @var OrderPackage $package */ if ($order_code){ $package=OrderPackage::query()->with(['order'=>function($query)use($order_code){ $query->where('code',$order_code) ; }])->first(); }else{ if($batch_number){ $package=OrderPackage::query()->where('batch_number',$batch_number)->first(); }elseif($logistic_number){ $package=OrderPackage::query()->where('logistic_number',$logistic_number)->first(); } } $accomplishToWMS=new Api\thirdPart\flux\PackageController(); if($batch_number){ $this->log(__METHOD__,'活动波次开始同步_'.__FUNCTION__,json_encode($package),Auth::user()['name']); // $this->syncBatch($package->batch_number,$weight,null,null,null,Carbon::now(),null); $result=$accomplishToWMS->markWMSOnBatch($batch_number,$weight); OrderPackage::createPackagesFromBatchCode($batch_number,$weight); if($package&&$package->isActivityBatch()) $package->unifyThisMeasureUnderSameBatch(); if ($result['result']){ Controller::logS(__METHOD__,'SUCCESS_'.__FUNCTION__,'批量更改波次上传成功'.$batch_number); $successTip = "批量录入波次成功!波次号:$batch_number"; return redirect('package/create')->with('successTip', $successTip); } Controller::logS(__METHOD__,'error_'.__FUNCTION__,'批量更改波次上传异常:'.$result['message'].$batch_number); return redirect('package/create')->with('successError','录入失败!'.$result['message']); } if (!$package && !$logistic_number)return redirect('package/create')->with('successError','录入失败!系统内没有对应波次的包裹!'); if ($package){ if(!$package->batch_number)$package->batch_number=$batch_number; if(!$package->order_code)$package->order_code=$order_code; $package->fetchAllFromOracle(); $package->weight=$weight; if(!$package->paper_box_id)$package->paper_box_id=$paper_box_id; $result=$accomplishToWMS->accomplishToWMS($package); if ($result['result']){ $package->status="已上传"; }else{ $package->status="上传异常"; } $package->save(); $this->log(__METHOD__,'create_'.__FUNCTION__,json_encode($package),Auth::user()['name']); // event(new WeighedEvent($package)); }else{ /** @var OrderPackageService */ $package = app('orderPackageService')->firstOrCreate($logistic_number,[ 'weight'=>$weight, 'weighed_at'=>Carbon::now(), 'status'=>"已上传", ]); $package->fetchAllFromOracle(); $result=$accomplishToWMS->accomplishToWMS($package); $str = "录入包裹成功!"; $str .= $package['logistic_number']?"快递单号:{$package['logistic_number']}":''; $str .= $package['order_code']?", 订单号:{$package['order_code']}":''; if(!$result||$result['result']=='false'){ $package['status'] = '上传失败'; $str = "录入包裹失败!"; $str .= $package['logistic_number']?"快递单号:{$package['logistic_number']}":''; $str .= $package['order_code']?", 订单号:{$package['order_code']}":''; $this->log(__METHOD__,__FUNCTION__,json_encode($package).json_encode($result).$str,Auth::user()['name']); } $package->save(); $successTip = $str; } return redirect('package/create')->with('successTip', $successTip); } /** * @param Request $request * @return void * @var LogisticService * @var OwnerService */ public function statistics(Request $request){ $packages = app('packageStatisticsService')->get($request->input()); $owners=app('ownerService')->getSelection(); $logistics=app('logisticService')->getSelection(); return view('weight.package.statistics',["packages"=>$packages,'owners'=>$owners,'logistics'=>$logistics]); } public function export(Request $request){ if(!Gate::allows('称重管理-查询')){ return '没有权限'; } if ($request->checkAllSign ?? false){ $params = $request->input(); unset($params['checkAllSign']); $sql = app('packageService')->getSql($params); }else{ $sql=app('packageService')->getSql(['id'=>$request->data]); } $post = Http::post(config('go.export.url'),['type'=>'package','sql'=>$sql]); if ($post->status() == 500){ throw new Exception($post->header("Msg")); } return response($post,200, [ "Content-type"=>"application/octet-stream", "Content-Disposition"=>"attachment; filename=包裹信息-".date('ymdHis').'.xlsx', ]); } protected function validator(Request $request){ $validator=Validator::make($request->input(),[ 'logistic_number'=>['required_without_all:batch_number,order_code'], 'order_code'=>['required_without_all:logistic_number,batch_number'], 'weight'=>'required|min:0|max:999999|numeric', 'paper_box_id'=>'nullable|integer', 'batch_number'=>['required_without_all:logistic_number,order_code'] ],[ 'required'=>':attribute 为必填项', 'max'=>':attribute 字符过多或输入值过大', 'integer'=>':attribute 选择有误', 'min'=>':attribute 不得为负', 'numeric'=>':attribute 应为数字', 'unique'=>':attribute 已存在', 'required_without_all'=>':attribute 与快递单号或订单号至少选一项' ],[ 'logistic_number'=>'快递单号', 'weight'=>'重量', 'paper_box_id'=>'纸箱', 'batch_number'=>'波次号', 'order_code'=>'订单号', ]); return $validator; } // public function syncBatch($batch_number,$weight,$max,$centre,$min,$date,$paperBox_id){ //// $accomplishToWMS=new Api\thirdPart\flux\PackageController(); //// $packageBatch=Package::where('batch_number',$batch_number)->first(); // $newValues = ['weight' => $weight]; // $newValues['batch_number']=$batch_number; // if($max)$newValues['length']=$max; // if($centre)$newValues['width']=$centre; // if($min)$newValues['height']=$min; // if($date)$newValues['weighed_at']=$date; // if($paperBox_id)$newValues['paper_box_id']=$paperBox_id; // if($max&&$centre&&$min){ // $newValues['bulk']=$max*$centre*$min; // } //// $weightChanged=$packageBatch['weight']!=$weight; //// Package::where('batch_number',$batch_number)->update($newValues); //// $packageBatch['forceUpload']=$weightChanged; // Controller::logS(__METHOD__,__FUNCTION__,"批量更新时批次号传入:{$batch_number}"); //// $result=$accomplishToWMS->markWMSOnBatch($packageBatch['batch_number']); //// if ($result['result']){ //// $newValues['status']='已上传'; //// Controller::logS(__METHOD__,'SUCCESS_'.__FUNCTION__,'批量更改波次上传成功'.json_encode($packageBatch)); //// }else{ //// $newValues['status']='上传异常'; //// Controller::logS(__METHOD__,'error_'.__FUNCTION__,'批量更改波次上传异常:'.$result['message'].json_encode($packageBatch)); //// }picktotraceid // $packagesInOracle=OracleDOCWaveDetails::where('doc_wave_details.waveno',$batch_number) // ->leftJoin('act_allocation_details','act_allocation_details.orderno','doc_wave_details.orderno') // ->get(); // foreach ($packagesInOracle as $packageInOracle) { // $newValues['logistic_number']=$packageInOracle['picktotraceid']; // $package = Package::where('logistic_number', $packageInOracle['picktotraceid'])->first(); // if(!$package){ // Package::create($newValues); // }else{ // $package->fill($newValues); // $package->update(); // } // } //// Package::where('batch_number',$batch_number)->update($newValues); // // } public function statisticsExport(Request $request){ if(!Gate::allows('称重管理-查询')){ return '没有权限'; } if ($request->checkAllSign){ $params = $request->input(); unset($params['checkAllSign']); $data = app('packageStatisticsService')->get($params); }else{ /**@var PackageStatisticsService */ $data = app('packageStatisticsService')->get(['owner_id'=>$request->data]); } $column = ["货主","总计"]; $columnMap = ["货主"=>0,"总计"=>1]; $row = []; $rowMap = []; $coordinate = []; foreach ($data as $value){ if ($value->owner_name && $value->logistic_name){ if (!isset($columnMap[$value->logistic_id])){ array_push($column,$value->logistic_name); $columnMap[$value->logistic_id] = count($column)-1; } if (!isset($rowMap[$value->owner_id])){ array_push($row,$value->owner_name); $rowMap[$value->owner_id] = count($row)-1 ; } if (isset($coordinate[$rowMap[$value->owner_id]])){ $coordinate[$rowMap[$value->owner_id]][$columnMap[$value->logistic_id]] = (string)$value->count; }else $coordinate[$rowMap[$value->owner_id]] = [0 => $value->owner_name,$columnMap[$value->logistic_id] => (string)$value->count]; } } $post = Http::post(config('go.export.url'),['type'=>'packageStatistic','data'=>json_encode(["row"=>$column,"list"=>$coordinate],JSON_UNESCAPED_UNICODE)]); if ($post->status() == 500){ throw new Exception($post->header("Msg")); } return response($post,200, [ "Content-type"=>"application/octet-stream", "Content-Disposition"=>"attachment; filename=称重统计信息单-".date('ymdHis').'.xlsx', ]); } }