with(['user','userDutyCheck','userWorkgroup.signs','laborCompany','laborReportStatus','laborReports'])->orderBy('labor_reports.id','DESC'); if (!($params["is_export"] ?? false)&&!($params['id']??null)){ $laborReports = $laborReports->whereNotIn('labor_reports.enter_number',function ($builder)use($params){ $builder->select('enter_number')->from('labor_reports') ->leftJoin('labor_report_statuses','labor_reports.id','labor_report_statuses.labor_report_id') ->where('labor_report_statuses.status','已退场'); }); }else unset($params['is_export']); $columnQueryRules=[ 'enter_number' => ['batch'=>'','timeLimit' => 15], 'created_at_start' => ['alias' => 'created_at' , 'startDate' => ' 00:00:00'], 'created_at_end' => ['alias' => 'created_at' , 'endDate' => ' 23:59:59'], 'identity_number' => ['batch'=>'','timeLimit' => 15], 'name' => ['batch' => ''], 'mobile_phone' => ['batch' => ''], 'user_workgroup_id' => ['multi' => ','], 'labor_company_id' => ['multi' => ','], 'id' => ['multi' => ','] ]; // if((Gate::allows('人事管理-临时工报表-可见全部组')||Gate::allows('人事管理-门卫审核')) && !($params["user_workgroup_id"] ?? false)){ if(Gate::allows('人事管理-门卫审核') && !($params["user_workgroup_id"] ?? false)){ $laborReports->where(function ($query)use($user){ $query->whereIn('labor_reports.user_workgroup_id',$user?$user->getPermittingWorkgroupIds(Gate::allows('人事管理-临时工报表-可见全部组')):[]) ->whereIn('labor_reports.labor_company_id',$user?$user->getPermittingLaborCompanyIdsAttribute():[]) ->orWhereNull('labor_reports.user_workgroup_id'); }); }else{ $laborReports->whereIn('labor_reports.user_workgroup_id',$user?$user->getPermittingWorkgroupIds(Gate::allows('人事管理-临时工报表-可见全部组')):[]) ->whereIn('labor_reports.labor_company_id',$user?$user->getPermittingLaborCompanyIdsAttribute():[]); } $laborReports = app(QueryService::class)->query($params,$laborReports,$columnQueryRules,'labor_reports'); return $laborReports; } public function recycleQuery(array $params){ $query=LaborReport::query()->with(['user','userDutyCheck','userWorkgroup','laborCompany'])->orderByDesc('id')->onlyTrashed(); $rule=['name' => ['batch' => ''],]; $laborReports = app(QueryService::class)->query($params,$query,$rule,'labor_reports')->paginate($params['paginate'] ?? 50); return $laborReports; } public function paginate(array $params){ return $this->conditionQuery($params)->paginate($params['paginate'] ?? 50); } public function get(array $params){ return $this->conditionQuery($params)->without("userDutyCheck")->get(); } public function getSql(array $params){ return $this->conditionQuery($params)->selectRaw("labor_reports.*") ->leftJoin('user_workgroups','labor_reports.user_workgroup_id','user_workgroups.id') ->selectRaw('user_workgroups.name user_workgroup_name') ->leftJoin('labor_companies','labor_reports.labor_company_id','labor_companies.id') ->selectRaw('labor_companies.name labor_company') ->sql(); } //根据进场记录创建临时工报表 public function makeLaborReportByUserDutyCheck($userDutyCheck){ $dateNow=Carbon::now()->format('Y-m-d'); $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first(); if (!$laborReport){ $newReport=$userDutyCheck->makeEnteringRecord(); Controller::logS(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck])); if ($newReport) event(new ImportEvent($newReport)); } } //根据进出场打卡记录 创建或者更新临时工报表记录 public function makeOrChangeLaborReportByUserDutyCheck($userDutyCheck,$importAndExportQRCodeType){ $dateNow=Carbon::now()->format('Y-m-d'); $laborReport=LaborReport::query()->where('user_id',$userDutyCheck->user_id)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first(); //判断当前日期下临时工是否有临时工报表记录并且是进场打卡 if ($userDutyCheck->type=='登入'&&$importAndExportQRCodeType=='import'){ $newReport=$userDutyCheck->makeEnteringRecord(); Controller::logS(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck])); if ($newReport) event(new ImportEvent($newReport)); } if(!$laborReport&&$importAndExportQRCodeType=='export'){ //退场时间跨天情况 $yesterdayDate=Carbon::now()->subDays(1)->format('Y-m-d'); $laborReportYesterday=LaborReport::query()->where('user_id',$userDutyCheck->user_id)->where('created_at','like',$yesterdayDate.'%')->orderBy('id','desc')->first(); if ($laborReportYesterday){ if (!$laborReportYesterday->check_out_at&&$laborReportYesterday['user_workgroup_id']){ UserDutyCheck::where('user_id',$laborReportYesterday->user_id)->where('type','登出')->where('checked_at','like',Carbon::now()->format('Y-m-d H:i').'%')->orderBy('id','desc')->delete(); return "