Explorar o código

人事管理--增加进出组补卡功能,手动录入为录入的记录

haozi %!s(int64=5) %!d(string=hai) anos
pai
achega
c4552bfd3a

+ 123 - 51
app/Http/Controllers/PersonnelController.php

@@ -6,10 +6,12 @@ use App\Events\ExportEvent;
 use App\Events\ImportEvent;
 use App\Events\TeamAuditEvent;
 use App\LaborReport;
+use App\LaborReportStatus;
 use App\ProcessDailyParticipant;
 use App\Services\LaborReportService;
 use App\UserDetail;
 use App\UserDutyCheck;
+use App\UserLabor;
 use App\UserWorkgroup;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
@@ -34,27 +36,101 @@ class PersonnelController extends Controller
         $checked_at=$request->input('checked_at');
         $type=$request->input('type');
         $remark=$request->input('remark');
-        $userDutyCheck=new UserDutyCheck([
-            'user_id'=>$user_id,
-            'checked_at'=>$checked_at,
-            'type'=>$type,
-            'source'=>'补入',
-        ]);
+        $userWorkGroup=$request->input('userWorkGroup');
         $checkedAtDate=Carbon::parse($checked_at)->format('Y-m-d');
-        $userDutyCheckBefore=UserDutyCheck::where('user_id',$user_id)->where('checked_at','like',$checkedAtDate.'%')->orderBy('id','desc')->first();
-        if ($userDutyCheckBefore['type']=='登入'&&$userDutyCheck->type=='登入')return ['result'=>true,'data'=>'已存在进场记录!'];
-        if ($userDutyCheckBefore['type']=='登出'&&$userDutyCheck->type=='登出')return ['result'=>true,'data'=>'已存在出场记录!'];
-        if ($type=='登出')$userDutyCheck->verify_user_id=Auth::user()['id'];
-        $userDutyCheck->save();
-        app('LogService')->log(__METHOD__,"录入补卡".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
-        $errorMessage=$this->makeOrUpdateLaborReport($userDutyCheck,$remark);
-        if ($errorMessage)return $errorMessage;
-        return ['success'=>true,'data'=>$userDutyCheck];
+        /** @var LaborReportService $laborReportService */
+        $laborReportService=app(LaborReportService::class);
+        switch ($type) {
+            case '进组':
+              $laborReport=LaborReport::query()->with('userDutyCheck','user.userDetail')
+                  ->where('user_id',$user_id)
+                  ->where('created_at','like',$checkedAtDate.'%')
+                  ->orderBy('id','desc')->first();
+              if ($laborReport && !$laborReport->check_in_at && !$laborReport->user_workgroup_id){ //第一次进组
+                  $laborReport->update([
+                      'check_in_at'=>$checked_at,
+                      'verify_at'=>$checked_at,
+                      'group_user_id'=>Auth::user()['id'],
+                      'user_workgroup_id'=>$userWorkGroup,
+                  ]);
+                  LaborReportStatus::query()->create([
+                      'labor_report_id'=>$laborReport['id'],
+                      'status'=>'已进组',
+                      'created_at'=>$checked_at,
+                  ]);
+                  if ($remark)$laborReportService->addOrUpdateRemark($remark,$laborReport->id);
+                  app('LogService')->log(__METHOD__,"录入进组补卡".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
+                  return ['success'=>true,'data'=>$laborReport->userDutyCheck];
+              }
+              if ($laborReport && $laborReport->user_workgroup_id==$userWorkGroup) return ['result'=>true,'data'=>'已存在进组记录!'];
+              if ($laborReport && $laborReport->user_workgroup_id!=$userWorkGroup){ //换组情况
+                  if ($laborReport->check_in_at && !$laborReport->check_out_at) return ['result'=>true,'data'=>'该临时工记录还未退组,不可补进组卡(换组)!'];
+                  $laborReportStatus=LaborReportStatus::query()->where('labor_report_id',$laborReport->id)
+                      ->where('status','已退场')->first();
+                  if ($laborReportStatus) return ['result'=>true,'data'=>'该临时工记录已退场,不可补进组卡!'];
+                  $newReport=new LaborReport([
+                      'user_workgroup_id'=>$userWorkGroup,
+                      'user_id'=>$laborReport->user_id,
+                      'name'=>$laborReport->user->userDetail->full_name??'',
+                      'mobile_phone'=>$laborReport->user->userDetail->mobile_phone??'',
+                      'identity_number'=>$laborReport->user->userDetail->identity_number??'',
+                      'labor_company_id'=>$laborReport->labor_company_id,
+                      'check_in_at'=>$checked_at,
+                      'group_user_id'=>Auth::user()['id'],
+                      'user_duty_check_id'=>$laborReport->user_duty_check_id,
+                  ]);
+                  $newReport['enter_number']=$laborReport->enter_number??'';
+                  $newReport->save();
+                  $laborReportStatus=new LaborReportStatus([
+                      'labor_report_id'=>$newReport['id'],
+                      'status'=>'已换组',
+                  ]);
+                  $laborReportStatus->save();
+                  $newReport=$newReport->loadMissing('userDutyCheck');
+                  if ($remark)$laborReportService->addOrUpdateRemark($remark,$newReport->id);
+                  app('LogService')->log(__METHOD__,"录入进组补卡".__FUNCTION__,json_encode($newReport),Auth::user()['id']);
+                  return ['success'=>true,'data'=>$newReport->userDutyCheck];
+              }
+            case '退组':
+                $laborReport=LaborReport::query()->with('userDutyCheck')
+                    ->where('user_id',$user_id)
+                    ->where('created_at','like',$checkedAtDate.'%')
+                    ->orderBy('id','desc')->first();
+                if ($laborReport && !$laborReport->check_out_at){
+                    $laborReport->update([
+                        'check_out_at'=>$checked_at,
+                    ]);
+                    LaborReportStatus::query()->create([
+                        'labor_report_id'=>$laborReport['id'],
+                        'status'=>'已退组',
+                        'created_at'=>$checked_at,
+                    ]);
+                    if ($remark)$laborReportService->addOrUpdateRemark($remark,$laborReport->id);
+                    app('LogService')->log(__METHOD__,"录入退组补卡".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
+                    return ['success'=>true,'data'=>$laborReport->userDutyCheck];
+                }else  return ['result'=>true,'data'=>'已存在退组记录!'];
+            default:
+                $userDutyCheck=new UserDutyCheck([
+                    'user_id'=>$user_id,
+                    'checked_at'=>$checked_at,
+                    'type'=>$type,
+                    'source'=>'补入',
+                    'verify_user_id'=>Auth::user()['id'],
+                ]);
+                $userDutyCheckBefore=UserDutyCheck::query()->where('user_id',$user_id)->where('checked_at','like',$checkedAtDate.'%')->orderBy('id','desc')->first();
+                if ($userDutyCheckBefore['type']=='登入'&&$userDutyCheck->type=='登入')return ['result'=>true,'data'=>'已存在进场记录!'];
+                if ($userDutyCheckBefore['type']=='登出'&&$userDutyCheck->type=='登出')return ['result'=>true,'data'=>'已存在出场记录!'];
+                $userDutyCheck->save();
+                app('LogService')->log(__METHOD__,"录入补卡".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
+                $errorMessage=$this->makeOrUpdateLaborReport($userDutyCheck,$remark);
+                if ($errorMessage)return $errorMessage;
+                return ['success'=>true,'data'=>$userDutyCheck];
+        }
     }
     //补卡创建或修改临时工报表
     public function makeOrUpdateLaborReport($userDutyCheck,$remark){
         $checkedAtDate=Carbon::parse($userDutyCheck->checked_at)->format('Y-m-d');
-        $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$checkedAtDate.'%')->orderBy('id','desc')->first();
+        $laborReport=LaborReport::query()->where('user_id',$userDutyCheck->user_id)->where('created_at','like',$checkedAtDate.'%')->orderBy('id','desc')->first();
         /** @var LaborReportService $laborReportService */
         $laborReportService=app(LaborReportService::class);
         if (!$laborReport&&$userDutyCheck->type=='登入'){
@@ -66,9 +142,9 @@ class PersonnelController extends Controller
         else if(!$laborReport&&$userDutyCheck->type=='登出'){
             //退场时间跨天情况
             $yesterdayDate=Carbon::parse($userDutyCheck->checked_at.':00')->subDays(1)->format('Y-m-d');
-            $laborReportYesterday=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$yesterdayDate.'%')->orderBy('id','desc')->first();
+            $laborReportYesterday=LaborReport::query()->where('user_id',$userDutyCheck->user_id)->where('created_at','like',$yesterdayDate.'%')->orderBy('id','desc')->first();
             if ($laborReportYesterday&&!$laborReportYesterday['check_out_at']){
-                UserDutyCheck::where('user_id',$laborReportYesterday['user_id'])->where('type','登出')->orderBy('id','desc')->delete();
+                UserDutyCheck::query()->where('user_id',$laborReportYesterday['user_id'])->where('type','登出')->orderBy('id','desc')->delete();
                 return ['result'=>true,'data'=>'该临时工还未退组,暂不可补退场卡!'];
             }
             if ($laborReportYesterday){
@@ -80,7 +156,7 @@ class PersonnelController extends Controller
             }
         }else if($laborReport){
             if (!$laborReport->check_out_at){
-                UserDutyCheck::where('user_id',$laborReport->user_id)->where('type','登出')->orderBy('id','desc')->delete();
+                UserDutyCheck::query()->where('user_id',$laborReport->user_id)->where('type','登出')->orderBy('id','desc')->delete();
                 return ['result'=>true,'data'=>'该临时工还未退组,暂不可补退场卡!'];
             }
             $exportReport=$laborReportService->exportReplenishToCreateLaborReportData($laborReport,$userDutyCheck);
@@ -91,22 +167,21 @@ class PersonnelController extends Controller
         }
     }
 
+    //搜索临时工下打卡信息
+    public function checkUserLabors(Request $request){
+        if(!Gate::allows('人事管理-录入补卡')){ return redirect(url('/'));  }
+        $full_name=$request->input('full_name');
+        $userDetail=UserDetail::with(['userDutyChecks'=>function ($query){
+            return $query->orderBy('checked_at','DESC')->limit(5);
+        }])->where('full_name',$full_name)->get();
+        return ['success'=>true,'data'=>$userDetail];
+    }
 
-
-
-
-
-    //任务审核
-    public function storeMissionAudit(Request $request){
-        if(!Gate::allows('人事管理-任务审核')){ return redirect(url('/'));  }
-        $id=$request->input('id');
-        if (!$id)return ['error'=>'提交审核失败!'];
-        $processDailyParticipant=ProcessDailyParticipant::find($id);
-        if (!$id)return ['error'=>'未找到对应记录!'];
-        $processDailyParticipant->status='已审核';
-        $processDailyParticipant->update();
-        app('LogService')->log(__METHOD__,"任务审核".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
-        return;
+    //考勤
+    public function createReplenishClock(){
+        if(!Gate::allows('人事管理-录入补卡')){ return view('personnel/checkRelating/index');  }
+        $userWorkGroups=UserWorkgroup::query()->get();
+        return view('personnel/checking-in/createReplenishClock',compact('userWorkGroups'));
     }
 
     //打卡审核时判断是否异常
@@ -179,7 +254,7 @@ class PersonnelController extends Controller
                     $laborReportLast->delete();
                 }
             }
-        }else if ($laborReport){
+        }else{
             LaborReport::updateLaborReportVerify($laborReport,$userDutyCheck);
             app('LogService')->log(__METHOD__,"打卡组长审核".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
         }
@@ -252,22 +327,6 @@ class PersonnelController extends Controller
         return view('personnel/checking-in/clockAudit',['userDutyChecks'=>$userDutyChecks,'laravelEchoPrefix'=>$laravelEchoPrefix,'permittingWorkgroups'=>$permittingWorkgroups]);
     }
 
-    //搜索临时工下打卡信息
-    public function checkUserLabors(Request $request){
-        if(!Gate::allows('人事管理-录入补卡')){ return redirect(url('/'));  }
-        $full_name=$request->input('full_name');
-        $userDetail=UserDetail::with(['userDutyChecks'=>function ($query){
-            return $query->orderBy('checked_at','DESC')->limit(5);
-        }])->where('full_name',$full_name)->get();
-        return ['success'=>true,'data'=>$userDetail];
-    }
-
-    //考勤
-    public function createReplenishClock(){
-        if(!Gate::allows('人事管理-录入补卡')){ return view('personnel/checkRelating/index');  }
-        return view('personnel/checking-in/createReplenishClock');
-    }
-
     public function validatorUserDutyCheck(Request $request){
         $validator=Validator::make($request->input(),[
             'user_id'=>'required',
@@ -298,4 +357,17 @@ class PersonnelController extends Controller
         app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>true,'data'=>$userDutyCheck];
     }
+
+    //任务审核
+    public function storeMissionAudit(Request $request){
+        if(!Gate::allows('人事管理-任务审核')){ return redirect(url('/'));  }
+        $id=$request->input('id');
+        if (!$id)return ['error'=>'提交审核失败!'];
+        $processDailyParticipant=ProcessDailyParticipant::find($id);
+        if (!$id)return ['error'=>'未找到对应记录!'];
+        $processDailyParticipant->status='已审核';
+        $processDailyParticipant->update();
+        app('LogService')->log(__METHOD__,"任务审核".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
+        return;
+    }
 }

+ 17 - 20
app/Http/Controllers/UserDutyCheckController.php

@@ -52,10 +52,8 @@ class UserDutyCheckController extends Controller
             if($userDetail){
                 if($importAndExportQRCodeType=='import') return redirect('personnel/checking-in/userDutyCheck/updateUserLaborCompanies/' . $userDetail->mobile_phone)->with("importAndExportQRCodeType", $importAndExportQRCodeType);
                 $userDutyCheck = $this->importAndExportDutyCheck($user_id, $importAndExportQRCodeType);
-                if ($userDutyCheck && $userDutyCheck->isNotImport == true) return "<h1 style='color: darkred;text-align:center'>当前还未入场,不可出场!</h1>";
-                if ($userDutyCheck && $userDutyCheck->import == true) return "<h1 style='color: darkred;text-align:center'>您已入场,不可再次入场!</h1>";
-                if ($userDutyCheck && $userDutyCheck->export == true) return "<h1 style='color: darkred;text-align:center'>您已出场,不可再次出场!!</h1>";
-                if ($userDutyCheck&& !$userDutyCheck->id) return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
+                $error=$this->hasError($userDutyCheck);
+                if ($error) return $error;
                 $laborReportService = app('LaborReportService');
                 $errorMessage = $laborReportService->makeOrChangeLaborReportByUserDutyCheck($userDutyCheck, $importAndExportQRCodeType);
                 if ($errorMessage) return $errorMessage;
@@ -83,17 +81,13 @@ class UserDutyCheckController extends Controller
         if (Cache::has('dutyCheckTokenUser_'.$userDetail->user_id)) return "<h1 style='color: red;text-align:center'>请使用原有设备进行打卡,如无法使用原有设备请联系管理人员解绑设备!</h1>";
         if($importAndExportQRCodeType=='import') return redirect('personnel/checking-in/userDutyCheck/updateUserLaborCompanies/' . $userDetail->mobile_phone)->with("importAndExportQRCodeType", $importAndExportQRCodeType);
         $userDutyCheck=$this->importAndExportDutyCheck($userDetail->user_id, $importAndExportQRCodeType);
-        if ($userDutyCheck && $userDutyCheck->isNotImport == true) return "<h1 style='color: darkred;text-align:center'>当前还未入场,不可出场!</h1>";
-        if ($userDutyCheck && $userDutyCheck->import == true) return "<h1 style='color: darkred;text-align:center'>您已入场,不可再次入场!</h1>";
-        if ($userDutyCheck && $userDutyCheck->export == true) return "<h1 style='color: darkred;text-align:center'>您已出场,不可再次出场!!</h1>";
-        if ($userDutyCheck&& !$userDutyCheck->id) return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
-        //$userLaborToken = $userDetail->getDutyCheckToken(config('users.token_check_in_expire_minutes'));
+        $error=$this->hasError($userDutyCheck);
+        if ($error) return $error;
         $laborReportService = app('LaborReportService');
         $errorMessage = $laborReportService->makeOrChangeLaborReportByUserDutyCheck($userDutyCheck, $importAndExportQRCodeType);
         if ($errorMessage) return $errorMessage;
         $laravelEchoPrefix = config('database.redis.options.prefix');
         return response()->view('personnel/checking-in/importAndExportSuccess', ['full_name' => $userDetail->full_name, 'checked_at' => $userDutyCheck->checked_at, 'type' => $userDutyCheck->type, 'laravelEchoPrefix' => $laravelEchoPrefix]);
-//        ->cookie('userLaborToken', $userLaborToken, config('users.token_check_in_expire_minutes'), '/')
     }
 
     //根据用户提交进出场打卡记录
@@ -186,10 +180,8 @@ class UserDutyCheckController extends Controller
         ]);
         app('LogService')->log(__METHOD__, "更改临时工劳务所信息" . __FUNCTION__, json_encode($userLabor), Auth::user()['id']);
         $userDutyCheck=$this->importAndExportDutyCheck($userDetail->user_id,$importAndExportQRCodeType);
-        if ($userDutyCheck && $userDutyCheck->isNotImport == true) return "<h1 style='color: darkred;text-align:center'>当前还未入场,不可出场!</h1>";
-        if ($userDutyCheck && $userDutyCheck->import == true) return "<h1 style='color: darkred;text-align:center'>您已入场,不可再次入场!</h1>";
-        if ($userDutyCheck && $userDutyCheck->export == true) return "<h1 style='color: darkred;text-align:center'>您已出场,不可再次出场!!</h1>";
-        if ($userDutyCheck&& !$userDutyCheck->id) return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
+        $error=$this->hasError($userDutyCheck);
+        if ($error) return $error;
         $userLaborToken = $userDetail->getDutyCheckToken(config('users.token_check_in_expire_minutes'));
         $laborReportService = app('LaborReportService');
         $errorMessage = $laborReportService->makeOrChangeLaborReportByUserDutyCheck($userDutyCheck, $importAndExportQRCodeType);
@@ -247,10 +239,8 @@ class UserDutyCheckController extends Controller
         $userLabor->save();
         $laborReportService = app('LaborReportService');
         $userDutyCheck=$this->importAndExportDutyCheck($userDetail->user_id,$importAndExportQRCodeType);
-        if ($userDutyCheck && $userDutyCheck->isNotImport == true) return "<h1 style='color: darkred;text-align:center'>当前还未入场,不可出场!</h1>";
-        if ($userDutyCheck && $userDutyCheck->import == true) return "<h1 style='color: darkred;text-align:center'>您已入场,不可再次入场!</h1>";
-        if ($userDutyCheck && $userDutyCheck->export == true) return "<h1 style='color: darkred;text-align:center'>您已出场,不可再次出场!!</h1>";
-        if ($userDutyCheck&& !$userDutyCheck->id) return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
+        $error=$this->hasError($userDutyCheck);
+        if ($error) return $error;
         $laborReportService->makeLaborReportByUserDutyCheck($userDutyCheck);
         $userLaborToken=$userDetail->getDutyCheckToken(config('users.token_check_in_expire_minutes'));
         Controller::logS(__METHOD__,"录入临时工,用户,对应工作组,打卡记录".__FUNCTION__,json_encode($userDetail));
@@ -333,7 +323,7 @@ class UserDutyCheckController extends Controller
             $newLaborReport = $laborReportService->enterGroupAndUpdateLaborReport($laborReport, $userWorkgroupID);
             app('LogService')->log(__METHOD__, "当日首次进组更新临时工报表记录__" . __FUNCTION__, json_encode($userWorkgroupID));
             if (!$newLaborReport) return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
-            if ($newLaborReport) event(new ClockinEvent($newLaborReport));
+            event(new ClockinEvent($newLaborReport));
         } else {
             //换组判断上一条临时工报表信息是否退组
             $laborReportNow = LaborReport::where('user_id', $user_id)->orderBy('id', 'desc')->first();
@@ -343,7 +333,7 @@ class UserDutyCheckController extends Controller
             $newLaborReport = $laborReportService->changeGroupAndMakeLaborReport($user_id, $userWorkgroupID);
             app('LogService')->log(__METHOD__, "当日临时工换组新建临时工报表记录__" . __FUNCTION__, json_encode([$user_id, $userWorkgroupID]));
             if (!$newLaborReport) return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
-            if ($newLaborReport) event(new ClockinEvent($newLaborReport));
+            event(new ClockinEvent($newLaborReport));
         }
         if ($userLaborToken){
             return response()->view('personnel/checking-in/success', ['group_name' => $group_name ?? '', 'full_name' => $userDetail->full_name, 'check_in_at' => $newLaborReport->check_in_at, 'laravelEchoPrefix' => $laravelEchoPrefix])
@@ -365,5 +355,12 @@ class UserDutyCheckController extends Controller
         $html=$this->updateLaborReport($userDetail->user_id,$userWorkgroupID,$userLaborToken);
         if ($html)return $html;
     }
+    private function hasError($userDutyCheck)
+    {
+        if ($userDutyCheck && $userDutyCheck->isNotImport == true) return "<h1 style='color: darkred;text-align:center'>当前还未入场,不可出场!</h1>";
+        if ($userDutyCheck && $userDutyCheck->import == true) return "<h1 style='color: darkred;text-align:center'>您已入场,不可再次入场!</h1>";
+        if ($userDutyCheck && $userDutyCheck->export == true) return "<h1 style='color: darkred;text-align:center'>您已出场,不可再次出场!!</h1>";
+        if ($userDutyCheck&& !$userDutyCheck->id) return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
+    }
 
 }

+ 13 - 7
app/LaborReport.php

@@ -38,22 +38,28 @@ class LaborReport extends Model
     static function tokenOfBroadcastEnterAndLeave(){
         return md5('tokenOfListAll'.Carbon::now()->format('Y-m-d'));
     }
-    public function userWorkgroup(){
+    public function userWorkgroup(): \Illuminate\Database\Eloquent\Relations\HasOne
+    {
         return $this->hasOne('App\UserWorkgroup','id','user_workgroup_id');
     }
-    public  function laborCompany(){
+    public  function laborCompany(): \Illuminate\Database\Eloquent\Relations\HasOne
+    {
         return $this->hasOne('App\LaborCompany','id','labor_company_id');
     }
-    public function user(){
+    public function user(): \Illuminate\Database\Eloquent\Relations\HasOne
+    {
         return $this->hasOne('App\User','id','group_user_id');
     }
-    public function userDutyCheck(){
+    public function userDutyCheck(): \Illuminate\Database\Eloquent\Relations\HasOne
+    {
         return $this->hasOne('App\UserDutyCheck','id','user_duty_check_id');
     }
-    public function laborReportStatus(){
+    public function laborReportStatus(): \Illuminate\Database\Eloquent\Relations\HasMany
+    {
         return $this->hasMany('App\LaborReportStatus','labor_report_id','id');
     }
-    public function laborReports(){
+    public function laborReports(): \Illuminate\Database\Eloquent\Relations\HasMany
+    {
         return $this->hasMany(get_class($this),'enter_number','enter_number');
     }
 
@@ -271,7 +277,7 @@ class LaborReport extends Model
     }
 
     //创建或获取进场编号
-    public function makeOrGetEnteringNumber()
+    public function makeOrGetEnteringNumber(): string
     {
         if($this['enteringRecord']&&$this['enteringRecord']['enter_number'])
             return $this['enteringRecord']['enter_number'];

+ 10 - 26
app/Services/LaborReportService.php

@@ -54,7 +54,7 @@ class LaborReportService
         if((Gate::allows('人事管理-临时工报表-可见全部组')||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('人事管理-临时工报表-可见全部组')):[])
-                ->orWhereNull('labor_reports.user_workgroup_id');
+                    ->orWhereNull('labor_reports.user_workgroup_id');
             });
         }else{
             $laborReports->whereIn('labor_reports.user_workgroup_id',
@@ -73,9 +73,9 @@ class LaborReportService
     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')
+            ->selectRaw('user_workgroups.name user_workgroup_name')
             ->leftJoin('labor_companies','labor_reports.labor_company_id','labor_companies.id')
-                ->selectRaw('labor_companies.name labor_company')
+            ->selectRaw('labor_companies.name labor_company')
             ->sql();
     }
 
@@ -86,15 +86,13 @@ class LaborReportService
         if (!$laborReport){
             $newReport=$userDutyCheck->makeEnteringRecord();
             Controller::logS(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck]));
-            if ($newReport){
-                event(new ImportEvent($newReport));
-            }
+            if ($newReport) event(new ImportEvent($newReport));
         }
     }
     //根据进出场打卡记录 创建或者更新临时工报表记录
     public function makeOrChangeLaborReportByUserDutyCheck($userDutyCheck,$importAndExportQRCodeType){
         $dateNow=Carbon::now()->format('Y-m-d');
-        $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first();
+        $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();
@@ -104,28 +102,14 @@ class LaborReportService
         if(!$laborReport&&$importAndExportQRCodeType=='export'){
             //退场时间跨天情况
             $yesterdayDate=Carbon::now()->subDays(1)->format('Y-m-d');
-            $laborReportYesterday=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$yesterdayDate.'%')->orderBy('id','desc')->first();
-//            if (!$laborReportYesterday->group_user_id&&!$laborReportYesterday->verify_at){
-//                LaborReport::query()->where('user_id',$userDutyCheck->user_id)->whereNull('group_user_id')->whereNull('verify_at')->orderBy('id','desc')->delete();
-//                $laborReportYesterday=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$yesterdayDate.'%')->orderBy('id','desc')->first();
-//            }
-//            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 "<h1 style='color: darkred;text-align:center'>您还未退组,暂不可退场,请联系组长!</h1>";
-//            }
+            $laborReportYesterday=LaborReport::query()->where('user_id',$userDutyCheck->user_id)->where('created_at','like',$yesterdayDate.'%')->orderBy('id','desc')->first();
+            if ($laborReportYesterday){
                 $exportReport=LaborReport::exitAndChangeLaborReport($laborReportYesterday,$userDutyCheck);
                 Controller::logS(__METHOD__,"退场更改临时工报表信息__".__FUNCTION__,json_encode([$laborReportYesterday,$userDutyCheck]));
                 if ($exportReport) event(new ExportEvent($exportReport));
+            }
         }
         if($laborReport&&$importAndExportQRCodeType=='export'){
-//            if (!$laborReport->group_user_id&&!$laborReport->verify_at){
-//                LaborReport::where('user_id',$userDutyCheck->user_id)->whereNull('group_user_id')->whereNull('verify_at')->orderBy('id','desc')->delete();
-//                $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first();
-//            }
-//            if (!$laborReport['check_out_at']&&$laborReport['user_workgroup_id']){
-//                UserDutyCheck::where('user_id',$laborReport->user_id)->where('type','登出')->where('checked_at','like',Carbon::now()->format('Y-m-d H:i').'%')->orderBy('id','desc')->delete();
-//                return "<h1 style='color: darkred;text-align:center'>您还未退组,暂不可退场,请联系组长!</h1>";
-//            }
             $exportReport=LaborReport::exitAndChangeLaborReport($laborReport,$userDutyCheck);
             Controller::logS(__METHOD__,"退场更改临时工报表信息__".__FUNCTION__,json_encode([$laborReport,$userDutyCheck]));
             if ($exportReport) event(new ExportEvent($exportReport));
@@ -209,8 +193,8 @@ class LaborReportService
     public function 删除($id){
         $laborReport=LaborReport::query()->where('id',$id)->delete();
         if ($laborReport>0)LaborReportStatus::create([
-           'labor_report_id'=>$id,
-           'status'=>'已删除',
+            'labor_report_id'=>$id,
+            'status'=>'已删除',
         ]);
         Controller::logS(__METHOD__,'删除盘点记录时修改盘点任务信息'.__FUNCTION__,json_encode($id));
         return $laborReport;

+ 11 - 11
app/UserDutyCheck.php

@@ -23,41 +23,41 @@ class UserDutyCheck extends Model
 
 
     protected $fillable=[
-        'user_id','checked_at','confirmed_by','type','source','workgroup_id',
+        'user_id','checked_at','type','source','workgroup_id','verify_user_id'
     ];
 
-    public function userDetail(){
+    public function userDetail(): \Illuminate\Database\Eloquent\Relations\BelongsTo
+    {
         return $this->belongsTo('App\UserDetail','user_id','user_id');
     }
 
-    public function userLabor(){
+    public function userLabor(): \Illuminate\Database\Eloquent\Relations\BelongsTo
+    {
         return $this->belongsTo('App\UserLabor','user_id','user_id');
     }
-    public function userWorkgroup(){
+    public function userWorkgroup(): \Illuminate\Database\Eloquent\Relations\BelongsTo
+    {
         return $this->belongsTo('App\UserWorkgroup','workgroup_id','id');
     }
-    public function laborReport(){
+    public function laborReport(): \Illuminate\Database\Eloquent\Relations\BelongsTo
+    {
         return $this->belongsTo('App\LaborReport','id','user_duty_check_id');
     }
 
-    public function laborEnterCheck(){
-        $this->makeEnteringRecord();
-    }
     //进场创建临时工报表信息
-     function makeEnteringRecord(){
+     function makeEnteringRecord(): LaborReport
+     {
         $userDetail=UserDetail::find($this['user_id']);
         $name=$userDetail['full_name'];
         $mobile_phone=$userDetail['mobile_phone'];
         $identity_number=$userDetail['identity_number'];
         $labor_company_id=UserLabor::where('user_id',$this['user_id'])->value('labor_company_id');
-//        $labor_company=LaborCompany::where('id',$labor_company_id)->value('name');
         $laborReport=new LaborReport([
             'user_id'=>$this['user_id'],
             'name'=>$name,
             'mobile_phone'=>$mobile_phone,
             'identity_number'=>$identity_number,
             'labor_company_id'=>$labor_company_id,
-//            'labor_company'=>$labor_company,
             'user_duty_check_id'=>$this['id'],
         ]);
         $laborReport->save();

+ 23 - 3
resources/views/personnel/checking-in/createReplenishClock.blade.php

@@ -6,7 +6,7 @@
         @component('personnel.checking-in.menuChecking-in')@endcomponent
     </div>
     <div class="container-fluid" id="list">
-        <div class="card col-md-10 offset-md-1">
+        <div class="card col-md-10 offset-1">
             <div class="card-body">
                 <div class="form-group row">
                     <input v-model="full_name" class="col-6 offset-2 form-control" type="text" placeholder="按名称搜索临时工">
@@ -21,7 +21,8 @@
                         <th>最近打卡时间</th>
                         <th>输入补卡时间</th>
                         <th>添加所需备注</th>
-                        <th>类型</th>
+                        <th>补卡类型</th>
+                        <th>工作组</th>
                         <th>操作</th>
                     </tr>
                     </thead>
@@ -45,10 +46,18 @@
                             <select :class="{ 'is-invalid' : errors.type && errors.type.length>0 }" v-model="userLabor.userDutyCheck_type" class="form-control">
                                 <option value="">请选择</option>
                                 <option value="登入">登入</option>
+                                <option value="进组">进组</option>
+                                <option value="退组">退组</option>
                                 <option value="登出">登出</option>
                             </select>
                             <small v-if="errors.type && errors.type.length>0 " class="text-danger">@{{ errors.type[0] }}</small>
                         </td>
+                        <td>
+                            <select :class="{ 'is-invalid' : errors.type && errors.type.length>0 }" v-model="userLabor.userWorkGroup" class="form-control">
+                                <option v-for="userWorkGroup in userWorkGroups" :value="userWorkGroup.id">@{{ userWorkGroup.name }}</option>
+                            </select>
+                            <small v-if="errors.type && errors.type.length>0 " class="text-danger">@{{ errors.type[0] }}</small>
+                        </td>
                         <td><button @click="storeReplenishClock(userLabor)" class="btn btn-info w-100">提交补卡</button></td>
                     </tr>
                     </tbody>
@@ -66,6 +75,11 @@
                 full_name:'',
                 userLabors:[],
                 errors:{'checked_at':[],'type':[],},
+                userWorkGroups:[
+                        @foreach($userWorkGroups as $userWorkGroup)
+                    {id:'{{$userWorkGroup->id}}',name:'{{$userWorkGroup->name}}'},
+                    @endforeach
+                ]
             },
             methods:{
                 checkUserLabors(){
@@ -103,8 +117,14 @@
                     let user_id=userLabor.user_id;
                     let type=userLabor.userDutyCheck_type;
                     let remark=userLabor.laborReport_remark;
+                    let userWorkGroup=userLabor.userWorkGroup;
+                    if ((type==='进组')&& !userWorkGroup){
+                        tempTip.setDuration(4000);
+                        tempTip.show('工作组不可为空!');
+                        return;
+                    }
                     let _this=this;
-                    axios.post("{{url('personnel/checking-in/storeReplenishClock')}}",{user_id:user_id,checked_at:checked_at,type:type,remark:remark})
+                    axios.post("{{url('personnel/checking-in/storeReplenishClock')}}",{user_id:user_id,checked_at:checked_at,type:type,remark:remark,userWorkGroup:userWorkGroup})
                         .then(function (response) {
                             if (response.data.success){
                                 _this.userLabors.every(function (userLabor) {