| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- <?php
- namespace App\Http\Controllers;
- use App\Commodity;
- use App\Exports\WaybillExport;
- use App\Owner;
- use App\Process;
- use App\ProcessDaily;
- use App\User;
- use App\UserDutyCheck;
- use Carbon\Carbon;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Gate;
- use Maatwebsite\Excel\Facades\Excel;
- class ProcessController extends Controller
- {
- public function conditionQuery(Request $request,$processes){
- if(!Gate::allows('二次加工管理-查询')){ return redirect(url('/')); }
- $today=Carbon::now()->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');
- }
- }
|