input('paginate')??50; $paginateParams = $this->packFilterParams($request); $page =$paginateParams['page'] ?? $request->input('page') ?? 1; $paginateParams['paginate']=$paginate; $rejectedQuery=$this->buildFilteredQuery($paginateParams)->orderBy('id','desc')->whereIn('id_owner', $user?$user->getPermittingOwnerIdsAttribute():[]); $rejectedBills=$rejectedQuery->paginate($paginate, ['*'], 'page', $page); $owners = Owner::filterAuthorities()->get(); $qualityLabels = QualityLabel::all(); return view('rejected.search.general',compact('rejectedBills','owners', 'paginateParams','qualityLabels')); } public function recycle(Request $request) { if(!Gate::allows('退货管理-删除')){ return redirect(url('/')); } $user=Auth::user(); $paginate = $request->input('paginate')??50; $paginateParams = $this->packFilterParams($request); $paginateParams['paginate']=$paginate; $rejectedQuery=$this->buildFilteredQuery($paginateParams)->orderBy('id','desc')->whereIn('id_owner', $user?$user->getPermittingOwnerIdsAttribute():[])->withTrashed()->whereNotNull('deleted_at'); $total = $rejectedQuery->count(); $rejectedBills=$rejectedQuery->paginate($paginate); return view('rejected.recycle',compact('rejectedBills','total','paginateParams')); } public function apiRecoverSelected(Request $request) { if(!Gate::allows('退货管理-删除')){ return ['success'=>'false','fail_info'=>"没有权限"]; } $ids=$request->input('ids')??''; $rejecteds=RejectedBill::withTrashed()->whereIn('id',$ids)->get(); $rejecteds->each(function(RejectedBill $rejected){ $rejected->restore(); }); $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return ['success'=>'true','rejecteds'=>$rejecteds]; } private function packFilterParams(Request $request){ $paginateParams=[ 'page'=> $request->input('page'), 'created_at_start'=> $request->input('created_at_start'), 'created_at_end'=> $request->input('created_at_end'), 'owner_id'=> $request->input('owner_id'), 'id_quality_label'=> $request->input('id_quality_label'), 'is_checked'=> $request->input('is_checked'), 'is_loaded'=> $request->input('is_loaded'), 'mobile_sender'=> $request->input('mobile_sender'), 'checked_numbers'=> $request->input('checked_numbers'), 'order_number'=> $request->input('order_number'), 'barcode_goods'=> $request->input('barcode_goods'), 'logistic_number_return'=> $request->input('logistic_number_return'), 'logistic_number'=> $request->input('logistic_number'), ]; if(Session::get('rejected.index.isFromEditPage')){ $paginateParams=json_decode(Session::get('rejected.index.filterParams'),true); Session::forget('rejected.index.isFromEditPage'); Session::forget('rejected.index.filterParams'); } return $paginateParams; } private function buildFilteredQuery(Array $params){ $created_at_start = $params['created_at_start']; $created_at_end = $params['created_at_end']; $owner_id = $params['owner_id']; $id_quality_label = $params['id_quality_label']; $is_checked = $params['is_checked']; $is_loaded = $params['is_loaded']; $mobile_sender = $params['mobile_sender']; $checked_numbers = $params['checked_numbers']; $order_number = $params['order_number']; $barcode_goods = $params['barcode_goods']; $logistic_number_return = $params['logistic_number_return']; $logistic_number = $params['logistic_number']; $rejectedBillsQuery=RejectedBill::with(['owner','logistic','items',]); if($created_at_start&&!$created_at_end){ $created_at_end = $created_at_start; } if(!$created_at_start&&$created_at_end){ $created_at_start = $created_at_end; } if($created_at_end){ $created_at_end.=' 23:59:59'; } if($created_at_start&&$created_at_end){ if($created_at_start==$created_at_end){ $rejectedBillsQuery=$rejectedBillsQuery->where('created_at','like',$created_at_start.'%'); }else $rejectedBillsQuery=$rejectedBillsQuery->whereBetween('created_at',[$created_at_start,$created_at_end]); } if($owner_id){ $rejectedBillsQuery=$rejectedBillsQuery->where('id_owner',$owner_id); } if($id_quality_label!=''){ if($id_quality_label==1){ $rejectedBillsQuery->whereDoesntHave('items',function ($query){ $query->where('id_quality_label',2); }); }else{ $rejectedBillsQuery->whereHas('items',function ($query){ $query->where('id_quality_label',2); }); } } if($is_checked!=''){ // $orderSign = false; // if($is_checked){ // $orderSign = true; // } if(!$is_checked) $rejectedBillsQuery=$rejectedBillsQuery->where(function ($query) { $query->where('is_checked', false) ->orWhere('is_checked', null); }); else{ $rejectedBillsQuery=$rejectedBillsQuery->where('is_checked', true); } } if($is_loaded!=''){ if($is_loaded=='null')$is_loaded=null; $rejectedBillsQuery=$rejectedBillsQuery->where('is_loaded', $is_loaded); } if($mobile_sender!=''){ $rejectedBillsQuery=$rejectedBillsQuery->where('mobile_sender', trim($mobile_sender)); } if($checked_numbers!=''){ $rejectedBillsQuery=$rejectedBillsQuery->where('checked_numbers','like', trim($checked_numbers).'%'); } if($barcode_goods!=''){ $rejectedBillsQuery->whereHas('items',function ($query)use($barcode_goods){ $query->where('barcode_goods','like',trim($barcode_goods).'%'); }); } if($order_number){ $startDay = Carbon::now()->subDays(15); $rejectedBillsQueryTem=clone $rejectedBillsQuery; $rejectedBillsQueryTem=$rejectedBillsQueryTem->where('created_at','>',$startDay->format('Y-m-d')); $rejectedBillsQueryTem=$rejectedBillsQueryTem->where('order_number','like','%'.$order_number.'%'); if($rejectedBillsQueryTem->count()==0 ||$rejectedBillsQueryTem->first()['order_number']==$order_number){ $rejectedBillsQuery=$rejectedBillsQuery->where('order_number',$order_number); }else{ $rejectedBillsQuery=$rejectedBillsQueryTem; } } if($logistic_number_return){ if(strpos($logistic_number_return,',')||strpos($logistic_number_return,',')||strpos($logistic_number_return,' ')){ $arr=array_filter(preg_split('/[,, ]+/is', $logistic_number_return)); $rejectedBillsQuery=$rejectedBillsQuery->whereIn('logistic_number_return',$arr); }else{ $startDay = Carbon::now()->subDays(15); $rejectedBillsQueryTem=clone $rejectedBillsQuery; $rejectedBillsQueryTem=$rejectedBillsQueryTem->where('created_at','>',$startDay->format('Y-m-d')); $rejectedBillsQueryTem=$rejectedBillsQueryTem->where('logistic_number_return','like','%'.$logistic_number_return.'%'); if($rejectedBillsQueryTem->count()==0 ||$rejectedBillsQueryTem->first()['logistic_number_return']==$logistic_number_return){ $rejectedBillsQuery=$rejectedBillsQuery->where('logistic_number_return',$logistic_number_return); }else{ $rejectedBillsQuery=$rejectedBillsQueryTem; } } } if($logistic_number){ $startDay = Carbon::now()->subDays(15); $rejectedBillsQueryTem=clone $rejectedBillsQuery; $rejectedBillsQueryTem=$rejectedBillsQueryTem->where('created_at','>',$startDay->format('Y-m-d')); $rejectedBillsQueryTem=$rejectedBillsQueryTem->where('logistic_number','like','%'.$logistic_number.'%'); if($rejectedBillsQueryTem->count()==0 ||$rejectedBillsQueryTem->first()['logistic_number']==$logistic_number){ $rejectedBillsQuery=$rejectedBillsQuery->where('logistic_number',$logistic_number); }else{ $rejectedBillsQuery=$rejectedBillsQueryTem; } } return $rejectedBillsQuery; } /** * Show the form for creating a new resource. * * @return Response */ public function create() { if(!Gate::allows('退货管理-录入')){ return redirect(url('/'));} $user=Auth::user(); $owners=Owner::all()->whereIn('id', $user?$user->getPermittingOwnerIdsAttribute():[])->sortBy('name'); $logistics=Logistic::all()->sortBy('name'); $qualityLabels=QualityLabel::all()->sortBy('name'); $rejectedBills = RejectedBill::query()->orderByDesc('id')->whereIn('id_owner', $user?$user->getPermittingOwnerIdsAttribute():[])->limit(20)->get(); return view('rejected.create',compact('owners','logistics','qualityLabels','rejectedBills')); } /** * Store a newly created resource in storage. * * @param Request $request * @return Response */ public function store(Request $request) { if(!Gate::allows('退货管理-录入')){ return redirect(url('/')); } $this->validatorCreate($request->all())->validate(); $this->log(__METHOD__,'找不到表','247行'); $rejected=new Rejected($request->all()); $rejected->save(); $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return redirect('rejected/create')->with('successTip',"成功录入退货信息(退单:{$request->input('logistic_number_return')})"); } public function ajaxCheck(Request $request) { if(!Gate::allows('退货管理-审核')){ return ['success'=>'false','fail_info'=>"没有权限"]; } $rejected=RejectedBill::find($request->input('id')??''); $rejected['is_checked']=true; $rejected->makeCheckedNumbers(); $re=$rejected->update(); if ($re){ return ['success'=>'true','checked_numbers'=>$rejected['checked_numbers']]; } $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return ['success'=>'false','fail_info'=>'数据更新失败']; } public function ajaxCheckAll(Request $request) { if(!Gate::allows('退货管理-审核')){ return ['success'=>'false','fail_info'=>"没有权限"]; } $ids=$request->input('ids')??''; $rejecteds=RejectedBill::whereIn('id',$ids)->get(); $checkNumbersArr=[]; $rejecteds->each(function($rejected)use(&$checkNumbersArr){ if($rejected['is_checked'])return true; $rejected['is_checked']=true; if(isset($checkNumbersArr[$rejected->owner->id])){ $rejected['checked_numbers']=$checkNumbersArr[$rejected->owner->id]; }else{ $checkNumbersArr[$rejected->owner->id]=$rejected->makeCheckedNumbers(); } $re=$rejected->update(); if (!$re){ return ['success'=>'false','fail_info'=>"数据 {$rejected['id']} 更新失败"]; } }); $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return ['success'=>'true','rejecteds'=>$rejecteds]; } public function ajaxFinishAll(Request $request) { if(!Gate::allows('退货管理-编辑')){return ['success'=>'false','fail_info'=>"没有权限"]; } $ids=$request->input('ids')??''; $rejecteds=RejectedBill::whereIn('id',$ids)->get(); $rejecteds->each(function($rejected){ $rejected['is_finished']=true; $re=$rejected->update(); if (!$re){ return ['success'=>'false','fail_info'=>"数据 {$rejected['id']} 更新失败"]; } }); $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return ['success'=>'true']; } protected function validatorCreate(array $data) { return Validator::make($data, [ 'id_owner' => ['required', 'numeric', 'exists:owners,id'], 'order_number' => ['nullable', 'string','max:60'], 'sender' => ['nullable', 'max:50'], 'mobile_sender' => ['nullable', 'max:20'], 'logistic_number' => ['nullable', 'max:60'], 'logistic_number_return' => ['required','string', 'max:60'], 'id_logistic_return' => ['required', 'numeric', 'exists:logistics,id'], 'fee_collected' => ['nullable','numeric'], 'is_loaded' => ['nullable'], 'barcode_goods' => ['nullable','string', 'max:60'], 'name_goods' => ['nullable','string', 'max:50'], 'amount' => ['required','numeric'], 'id_quality_label' => ['required', 'numeric', 'exists:quality_labels,id'], 'batch_number' => ['nullable', 'string', 'max:60'], 'validity_at' => ['nullable', 'date'], 'remark' => ['nullable', 'string', 'max:60'], ],[],[ ]); } protected function validatorUpdate(array $data) { return Validator::make($data, [ // 'name' => ['required', 'string', 'max:50'], ]); } /** * Display the specified resource. * * @param Rejected $rejected * @return void */ public function show(Rejected $rejected) { // } /** * Show the form for editing the specified resource. * * @param Rejected $rejected * @return Response */ public function edit(RejectedBill $rejectedBill) { } /** * Update the specified resource in storage. * * @param Request $request * @param Rejected $rejected * @return Response */ public function update(Request $request, Rejected $rejected) { if(!Gate::allows('退货管理-编辑')){ return redirect(url('/')); } $this->validatorUpdate($request->all())->validate(); $rejected->fill($request->all()); $rejected->update(); $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return redirect('rejected/')->with('successTip',"成功修改退货信息“{$rejected['name']}”!"); } /** * Remove the specified resource from storage. * * @param Rejected $rejected * @return array|Response * @throws Exception */ public function destroy(Rejected $rejected) { // if(!Gate::allows('退货管理-删除')){ return redirect(url('/'));} // $this->log(__METHOD__,__FUNCTION__,$rejectedBill->toJson(),Auth::user()['id']); // $items=$rejectedBill->items(); // $items->delete(); // $this->log(__METHOD__,__FUNCTION__,$items->toJson(),Auth::user()['id']); // $re=$rejectedBill->delete(); // return ['success'=>$re]; } public function exportExcel(Request $request) { if(!Gate::allows('退货管理-查询')){ return '没有权限'; } $this->log(__METHOD__,'找不到表',json_encode($request->toArray()),Auth::user()['id']); ini_set('max_execution_time',2500); ini_set('memory_limit','1526M'); $ids=$request->input('ids')??''; $ids=json_decode($ids,true); $export=new RejectedExport(); $export->setIds($ids); $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return Excel::download($export,'退货表'.Carbon::now().'.xlsx'); } public function exportExcelOnFilterParams(Request $request) { if(!Gate::allows('退货管理-查询')){ return '没有权限'; } $this->log(__METHOD__,'找不到表',json_encode($request->toArray()),Auth::user()['id']); ini_set('max_execution_time',2500); ini_set('memory_limit','1526M'); $filterParams=json_decode($request->input('filterParams'),true); $user=Auth::user(); $rejectedBills=$this->buildFilteredQuery($filterParams)->orderBy('id','desc')->whereIn('id_owner', $user?$user->getPermittingOwnerIdsAttribute():[]); if($rejectedBills->count()>RejectedExport::$max){ $rejectedBills->where('is_finished',false); } $rejectedBills->get(); $export=new RejectedExport(); $export->setRejectedBills($rejectedBills); $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return Excel::download($export,'退货表'.Carbon::now().'.xlsx'); } public function import(Request $request) { return view('rejected.import'); } public function importExcel(Request $request) { $isOverride = $request->input('isOverride'); try{ ini_set('max_execution_time',2500); ini_set('memory_limit','1526M'); $extension=$request->file()['file']->getClientOriginalExtension(); $extension[0] = strtoupper($extension[0]); Excel::import(new RejectedImport(), $request->file()['file']->path(),null,$extension); return '

导入成功

'; }catch (Exception $e){ if(strstr($e->getMessage(),'No ReaderType')){return '

没有上传写权限,请修改php.ini 对应的upload_tmp_dir 目录或其权限

'.$e->getMessage();} if(strstr($e->getMessage(),'SQLSTATE')){return '

数据库插入错误,数据不支持,可能有重复或异常字符

'.$e->getMessage();} return '

失败

'.$e->getMessage(); } } //generalSearch 一般查询 zengjun public function indexGeneral(Request $request) { return $this->index( $request); } //analyzeSearch 统计查询 zengjun public function indexAnalyze(Request $request) { if(!Gate::allows('退货管理-查询')){ return redirect(url('/')); } $paginateParams = $this->getAnalyzeSearchParams($request); $rejectedBills = RejectedAnalyzeOwner::findBy($paginateParams); $owners = Owner::filterAuthorities()->get(); $qualityLabels = QualityLabel::all(); return view('rejected.search.analyze',compact('rejectedBills','owners', 'paginateParams','qualityLabels')); } // 统计查询参数获取 zengjun private function getAnalyzeSearchParams(Request $request) { $searchParams = [ 'owner_id' => $request->input('owner_id'), 'ids'=> $request->input('ids'), 'created_at_start' => $request->input('created_at_start'), 'created_at_end' => $request->input('created_at_end') ]; return $searchParams; } // 导出部分 zengjun public function exportExcelOnParams(Request $request){ ini_set('max_execution_time',2500); ini_set('memory_limit','1526M'); $row = RejectedAnalyzeOwner::getExcelFromHead(); $searchParams = $this->getAnalyzeSearchParams($request); $data = RejectedAnalyzeOwner::getFindBy($searchParams); $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return Excel::download(new DefaultExport($row,$data),date('YmdHis', time()).'-退货统计记录单.xlsx'); } // 导出全部 zengjun public function exportAllExcelOnParams(Request $request){ ini_set('max_execution_time',2500); ini_set('memory_limit','1526M'); $searchParams = $this->getAnalyzeSearchParams($request); $row = RejectedAnalyzeOwner::getExcelFromHead(); $data = RejectedAnalyzeOwner::getFindBy($searchParams); $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); return Excel::download(new DefaultExport($row,$data),date('YmdHis', time()).'-退货统计记录单.xlsx'); } }