subDays(15); if ($request->input('commodity_barcode')){ $barcode=$request->input('commodity_barcode'); $processes=$processes->with('commodity')->whereHas('commodity',function (Builder $query)use($barcode){ $query->where('barcode','like',$barcode.'%'); }); } if ($request->input('date_start')){ $processes=$processes->where('created_at','>=',$request->input('date_start')); } if ($request->input('date_end')){ $processes=$processes->where('created_at','<=',$request->input('date_end')); } if ($request->input('owner_id')){ $processes=$processes->where('owner_id',$request->input('owner_id')); } if ($request->input('wms_code')){ $processes=$processes->where('wms_code','like','%'.$request->input('wms_code').'%')->where('created_at','>',$today->format('Y-m-d')); } $processes=$processes->paginate($request->input('paginate')??50); return $processes; } /** * Display a listing of the resource. * @param Request $request * @return \Illuminate\Http\Response */ public function index(Request $request) { if(!Gate::allows('二次加工管理-查询')){ return redirect(url('/')); } $processes=Process::with('tutorials')->orderBy('processes.id','DESC'); if ($request->input('checkSign')){ $excel=$this->isExport($request,$processes); return $excel; } $processes=$this->conditionQuery($request,$processes); $owners=Owner::select('id','name')->get(); return view('process.index',['processes'=>$processes,'owners'=>$owners]); } //获取导出数据 public function isExport(Request $request,$processes){ if(!Gate::allows('二次加工管理-查询')){ return redirect(url('/')); } if ($request->input('checkSign')=="-1"){ $processes=$this->conditionQuery($request,$processes); $excel=$this->export($processes); return $excel; } $id = explode( ',',$request->input('checkSign')); $processes=$processes->whereIn('id',$id)->get(); $excel=$this->export($processes); return $excel; } //获取每日参与人 public function getDailyParticipant(Request $request){ if(!Gate::allows('二次加工管理-登记工时')){ return redirect(url('/')); } $id=$request->input('id'); $processDailies=ProcessDaily::with('processDailyParticipants')->orderBy('time','DESC') ->where('process_id',$id)->get(); if ($processDailies){ $processDailies=$this->countManHour($processDailies); } return $processDailies; } //根据参与人查找打卡记录计算工时信息 public function countManHour($processDailies){ $today=Carbon::now()->format('Y-m-d'); $date=date("Y-m-d",strtotime('+'.strval(5)." day",strtotime($today))); $processDailyOne=$processDailies[count($processDailies)-1]; $startDate=Carbon::parse($processDailyOne->time); $diffDay=$startDate->diffInDays($today,true); foreach ($processDailies as $processDaily){ $date=$processDaily->time; foreach ($processDaily->processDailyParticipants as $processDailyParticipant){ $user=$processDailyParticipant->user_id; $userDutyCheckStart=UserDutyCheck::select('id','checked_at')->where('user_id',$user) ->where('checked_at','like',$date.'%')->where('type','登入')->orderBy('id')->first(); $userDutyCheckEnd=UserDutyCheck::select('id','checked_at')->where('user_id',$user) ->where('checked_at','like',$date.'%')->where('type','登出')->orderBy('id','desc')->first(); //跨日情况寻找下一天 if (!$userDutyCheckEnd){ $date=date("Y-m-d",strtotime("+1 day",strtotime($date))); $userDutyCheckEnd=UserDutyCheck::select('id','checked_at')->where('user_id',$user) ->where('checked_at','like',$date.'%')->where('type','登出')->orderBy('id','desc')->first(); } if (!$userDutyCheckStart || !$userDutyCheckEnd){ continue; } $dateStart=Carbon::parse($userDutyCheckStart->checked_at); $dateEnd=Carbon::parse($userDutyCheckEnd->checked_at); $hour=($dateEnd->diffInSeconds($dateStart))/3600; //打卡工时 if ($processDailyParticipant->dinner_duration)$hour=$hour-(($processDailyParticipant->dinner_duration)/60); //减晚饭时间 $hour=$this->isHour($userDutyCheckStart,$hour); //去除休息时间 $processDailyParticipant->hour=round($hour,2); if ($hour&&$processDailyParticipant->hour_count){ $diff=abs(round($processDailyParticipant->hour_count-$hour,2)); $processDailyParticipant->diff=$diff; } //计件工 if ($processDailyParticipant->unit_price){ continue; } if ($hour&&$hour>8){ $processDailyParticipant->billingHour=8; continue; } if ($hour&&$hour<=8){ $processDailyParticipant->billingHour=round($hour,2); } } } return $processDailies; } //打卡工时减休息时间 public function isHour($userDutyCheckStart,$hour){ $date=$userDutyCheckStart->checked_at; $date=Carbon::parse($date)->format('H'); if ((int)$date<=11){ $hour=$hour-1; } return $hour; } //驳回二次加工单 public function reject($id){ if(!Gate::allows('二次加工管理-接单与驳回')){ return redirect(url('/')); } $process=Process::select('id','status')->find($id); $process->status="驳回"; $process->update(); $this->log(__METHOD__,"驳回二次加工单_".__FUNCTION__,json_encode($process),Auth::user()['id']); return $process; } //接单 public function receive($id){ if(!Gate::allows('二次加工管理-接单与驳回')){ return redirect(url('/')); } $process=Process::select('id','status')->find($id); $process->status="接单"; $process->update(); $this->log(__METHOD__,"接单二次加工单_".__FUNCTION__,json_encode($process),Auth::user()['id']); return $process; } //完成 public function accomplish($id){ if(!Gate::allows('二次加工管理-验收完成')){ return redirect(url('/')); } $process=Process::select('id','status')->find($id); $process->status="已完成"; $process->update(); $this->log(__METHOD__,"完成二次加工单_".__FUNCTION__,json_encode($process),Auth::user()['id']); return $process; } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } //执行 public function export($processes){ if(!Gate::allows('二次加工管理-查询')){ return '没有权限'; } $row=[[ 'id'=>'ID', 'code'=>'任务号', 'owner_name'=>'货主', 'bill_type'=>'单据类型', 'wms_code'=>'单据号', 'process_method_name'=>'加工类型', 'amount'=>'预期数量', 'unit_price'=>'单价', 'created_at'=>'提交日期', 'commodity_barcode'=>'商品编码', 'commodity_name'=>'商品名称', 'completed_amount'=>'实际数量', 'status'=>'状态', ]]; $list=[]; $i=0; foreach ($processes as $process){ $w=[ 'id'=>$process->id, 'code'=>$process->code , 'owner_name'=>$process->owner_name , 'bill_type'=>$process->bill_type , 'wms_code'=>$process->wms_code , 'process_method_name'=>$process->process_method_name, 'amount'=>$process->amount, 'unit_price'=>$process->unit_price, 'created_at'=>$process->created_at , 'commodity_barcode'=>$process->commodity_barcode, 'commodity_name'=>$process->commodity_name , 'completed_amount'=>$process->completed_amount, 'status'=>$process->status, ]; $list[$i]=$w; $i++; } return Excel::download(new WaybillExport($row,$list),date('YmdHis', time()).'-二次加工单.xls'); } }