Bläddra i källkod

人事管理,临时工报表,打卡相关,打卡相应改动

haozi 5 år sedan
förälder
incheckning
e84fb9b1e8

+ 5 - 4
app/Events/ClockinEvent.php

@@ -3,6 +3,7 @@
 namespace App\Events;
 
 use App\Http\Controllers\Controller;
+use App\LaborReport;
 use App\UserDutyCheck;
 use Illuminate\Broadcasting\Channel;
 use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -13,16 +14,16 @@ class ClockinEvent implements ShouldBroadcast
 {
     use  SerializesModels;
 
-    public $userDutyCheck;
+    public $laborReport;
 
     /**
      * Create a new event instance.
      *
      * @param UserDutyCheck $userDutyCheck
      */
-    public function __construct(UserDutyCheck $userDutyCheck)
+    public function __construct(LaborReport $laborReport)
     {
-        $this->userDutyCheck=$userDutyCheck;
+        $this->laborReport=$laborReport;
     }
 
     /**
@@ -32,7 +33,7 @@ class ClockinEvent implements ShouldBroadcast
      */
     public function broadcastOn()
     {
-        return new Channel($this->userDutyCheck->userWorkgroup->token);
+        return new Channel($this->laborReport->userWorkgroup->token);
     }
 
 }

+ 37 - 0
app/Events/ImportEvent.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Events;
+
+use App\UserDutyCheck;
+use Illuminate\Broadcasting\Channel;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+use Illuminate\Queue\SerializesModels;
+
+
+class importEvent implements ShouldBroadcast
+{
+    use  SerializesModels;
+
+    public $userDutyCheck;
+
+    /**
+     * Create a new event instance.
+     *
+     * @return void
+     */
+    public function __construct(UserDutyCheck $userDutyCheck)
+    {
+        $this->userDutyCheck=$userDutyCheck;
+    }
+
+    /**
+     * Get the channels the event should broadcast on.
+     *
+     * @return \Illuminate\Broadcasting\Channel|array
+     */
+    public function broadcastOn()
+    {
+        return new Channel('userDutyCheck');
+    }
+
+}

+ 5 - 4
app/Events/TeamAuditEvent.php

@@ -2,6 +2,7 @@
 
 namespace App\Events;
 
+use App\LaborReport;
 use App\UserDutyCheck;
 use Illuminate\Broadcasting\Channel;
 use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -12,16 +13,16 @@ class TeamAuditEvent implements ShouldBroadcast
 {
     use  SerializesModels;
 
-    public $userDutyCheck;
+    public $laborReport;
 
     /**
      * Create a new event instance.
      *
      * @return void
      */
-    public function __construct(UserDutyCheck $userDutyCheck)
+    public function __construct(LaborReport $laborReport)
     {
-        $this->userDutyCheck=$userDutyCheck;
+        $this->laborReport=$laborReport;
     }
 
     /**
@@ -31,7 +32,7 @@ class TeamAuditEvent implements ShouldBroadcast
      */
     public function broadcastOn()
     {
-        return new Channel('userDutyCheck');
+        return new Channel('laborReport');
     }
 
 }

+ 100 - 19
app/Http/Controllers/LaborReportController.php

@@ -2,12 +2,15 @@
 
 namespace App\Http\Controllers;
 
+use App\Events\GuardAuditEvent;
+use App\Events\TeamAuditEvent;
 use App\Exports\Export;
 use App\LaborReport;
 use App\UserDutyCheck;
 use App\UserWorkgroup;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
 use Maatwebsite\Excel\Facades\Excel;
 
@@ -58,35 +61,30 @@ class LaborReportController extends Controller
      */
     public function index(Request $request)
     {
+        if(!Gate::allows('人事管理')){ return redirect(url('/'));  }
+        $user=Auth::user();
+        if (!$user)return redirect('/');
+        $userWorkgroupIds=$user->getPermittingWorkgroupIds();
+        $permittingWorkgroups=UserWorkgroup::whereIn('id',$userWorkgroupIds)->get();
+        if($permittingWorkgroups->isEmpty())$permittingWorkgroups="\'\'";
+        $laravelEchoPrefix = config('database.redis.options.prefix');
+
         if (!Gate::allows('人事管理-临时工报表')){return redirect(url('/')); }
         if ($request->input()){
             $laborReports=LaborReport::orderBy('id','DESC');
             $laborReports=$this->conditionQuery($request,$laborReports);
             $laborReports=$laborReports->paginate($request->input('paginate')?$request->input('paginate'):50);
             $userWorkGroups=UserWorkgroup::select('id','name')->get();
-            return view('personnel.laborReport.index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,'request'=>$request->input()]);
+            return view('personnel.laborReport.index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,'request'=>$request->input(),'permittingWorkgroups'=>$permittingWorkgroups,'laravelEchoPrefix'=>$laravelEchoPrefix,]);
         }
-        $laborReports=LaborReport::with(['userWorkgroup','user'])->orderBy('id','DESC')->paginate(50);
+        $laborReports=LaborReport::with(['userWorkgroup','user','userDutyCheck'])->orderBy('id','DESC')->paginate(50);
         foreach ($laborReports as $laborReport){
-            $date=Carbon::parse($laborReport->check_in_at)->format('Y-m-d');
-            $userDutyCheckStart=UserDutyCheck::where('user_id',$laborReport->user_id)->where('workgroup_id',$laborReport->user_workgroup_id)->where('checked_at','>=',$date." 11:00".":00")
-                ->where('checked_at','<=',$date." 14:00:00")->where('type','登出')->first();
-            $userDutyCheckEnd=UserDutyCheck::where('user_id',$laborReport->user_id)->where('workgroup_id',$laborReport->user_workgroup_id)->where('checked_at','>=',$date." 11:00".":00")
-                ->where('checked_at','<=',$date." 14:00:00")->where('type','登入')->first();
-            if ($userDutyCheckStart['checked_at']==null){
-                $laborReport->beginLunch=null;
-            }else{
-                $laborReport->beginLunch=date('H:i',strtotime($userDutyCheckStart['checked_at']));
-            }
-            if ($userDutyCheckEnd['checked_at']==null){
-                $laborReport->endLunch=null;
-            }else{
-                $laborReport->endLunch=date('H:i',strtotime($userDutyCheckEnd['checked_at']));
-            }
+           $createdAtDate=Carbon::parse($laborReport->created_at)->format('Y-m-d');
+           $userDutyCheck=UserDutyCheck::where('checked_at','like',$createdAtDate.'%')->where('user_id',$laborReport->user_id)->first();
+            if ($userDutyCheck) $laborReport->userDutyCheck=$userDutyCheck;
         }
         $userWorkGroups=UserWorkgroup::select('id','name')->get();
-//        dd($userWorkGroups,$laborReports);
-        return view('personnel/laborReport/index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,]);
+        return view('personnel/laborReport/index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,'laravelEchoPrefix'=>$laravelEchoPrefix,'permittingWorkgroups'=>$permittingWorkgroups]);
 
     }
 
@@ -117,6 +115,7 @@ class LaborReportController extends Controller
             'verify_at'=>'审核时间',
             'group_user_id'=>'审核人',
             'check_out_at'=>'退场时间',
+            'relax_time'=>'晚饭时间',
             'online_duration'=>'在线时长',
             'working_duration'=>'本次工作时长',
         ]];
@@ -136,6 +135,7 @@ class LaborReportController extends Controller
                 'verify_at'=>isset($laborReport->verify_at)?$laborReport->verify_at:'',
                 'group_user_id'=>isset($laborReport->user->name)?$laborReport->user->name:'',
                 'check_out_at'=>isset($laborReport->check_out_at)?$laborReport->check_out_at:'',
+                'relax_time'=>isset($laborReport->relax_time)?$laborReport->relax_time:'',
                 'online_duration'=>isset($laborReport->online_duration)?$laborReport->online_duration:'',
                 'working_duration'=>isset($laborReport->working_duration)?$laborReport->working_duration:'',
             ];
@@ -143,4 +143,85 @@ class LaborReportController extends Controller
         }
         return Excel::download(new Export($row,$list),date('YmdHis', time()).'-临时工报表记录单.xlsx');
     }
+
+    //门卫打卡审核
+    public function guardClockAudit(Request $request){
+        if(!Gate::allows('人事管理-门卫审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
+        $id=$request->input('id');
+        $type=$request->input('type');
+        $userDutyCheck=UserDutyCheck::find($id);
+        $userDutyCheck->type=$type;
+        $userDutyCheck->verify_user_id=Auth::user()['id'];
+        $userDutyCheck->update();
+        event(new GuardAuditEvent($userDutyCheck));
+        $this->log(__METHOD__,"打卡审核".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
+        return ["success"=>true,"data"=>$userDutyCheck->verify_user_id];
+    }
+    //打卡组长审核
+    public function groupClockAudit(Request $request){
+        if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
+        $id=$request->input('id');
+        $laborReport=LaborReport::find($id);
+        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
+        $laborReport->group_user_id=Auth::user()['id'];
+        $laborReport->verify_at=date('Y-m-d H:i:s');
+        $laborReport->update();
+        $laborReport->verifyPerson=Auth::user()['name'];
+        $this->log(__METHOD__,"打卡组长审核".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
+        event(new TeamAuditEvent($laborReport));
+        return ["success"=>true,"data"=>$laborReport];
+    }
+
+    //组长点击退场
+    public function groupExport(Request $request){
+        if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
+        $id=$request->input('id');
+        $laborReport=LaborReport::find($id);
+        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
+        $check_out_at=Carbon::now()->format('Y-m-d H:i:s');
+        $check_in_at=$laborReport->check_in_at;
+        $laborReport->check_out_at=$check_out_at;
+        $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
+        $laborReport->online_duration=$online_duration;
+        $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration);
+        $laborReport->update();
+        $laborReport->is_exportGroup=$laborReport->getIsExportGroupAttribute();
+        $this->log(__METHOD__,"退场".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
+        return ["success"=>true,"data"=>$laborReport];
+    }
+
+    //晚19点后组长点击退场,判断是否有晚餐情况
+    public function groupExportEnsure(Request $request){
+        if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
+        $id=$request->input('id');
+        $relax_time=$request->input('relax_time');
+        if(!$relax_time){ return ["success"=>false,"data"=>"未选择确切晚饭时间,请重新选择!"];  }
+        $laborReport=LaborReport::find($id);
+        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
+        $check_out_at=Carbon::now()->format('Y-m-d H:i:s');
+        $check_in_at=$laborReport->check_in_at;
+        $laborReport->check_out_at=$check_out_at;
+        $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
+        $laborReport->online_duration=$online_duration;
+        if ($relax_time){
+            $laborReport->relax_time=$relax_time;
+            $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration)-$relax_time/60;//减去晚饭时间
+        }else{
+            $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration);
+        }
+        $laborReport->update();
+        $laborReport->is_exportGroup=$laborReport->getIsExportGroupAttribute();
+        $this->log(__METHOD__,"退场".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
+        return ["success"=>true,"data"=>$laborReport];
+    }
+
+    //工作时长减午饭休息时间
+    public function minusLunchTime($laborReport,$hour){
+        $date=$laborReport->check_in_at;
+        $date=Carbon::parse($date)->format('H');
+        if ((int)$date<=11){
+            $hour=$hour-1;
+        }
+        return $hour;
+    }
 }

+ 12 - 13
app/Http/Controllers/PersonnelController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Events\ClockinEvent;
 use App\Events\ClockoutEvent;
+use App\Events\importEvent;
 use App\Events\TeamAuditEvent;
 use App\LaborReport;
 use App\ProcessDailyParticipant;
@@ -186,27 +187,25 @@ class PersonnelController extends Controller
         $user_id=$request->input('user_id');
         $checked_at=$request->input('checked_at');
         $type=$request->input('type');
-        $userWorkgroupID=DB::table('user_workgroup_user')->where('user_id',$user_id)->value('user_workgroup_id');
         $userDutyCheck=new UserDutyCheck([
             'user_id'=>$user_id,
             'checked_at'=>$checked_at,
             'type'=>$type,
             'source'=>'补入',
-            'workgroup_id'=>$userWorkgroupID
         ]);
-        if ($type=='登出')$userDutyCheck->verify_user_id=0;
+        $checkedAtDate=Carbon::parse($checked_at)->format('Y-m-d');
+        $userDutyCheckImport=UserDutyCheck::where('user_id',$user_id)->where('checked_at','like',$checkedAtDate.'%')->where('type','登入')->orderBy('id','desc')->first();
+        if ($userDutyCheckImport&&$userDutyCheck->type=='登入')return ['success'=>false,'data'=>'已存在进场记录!'];
+        $userDutyCheckExport=UserDutyCheck::where('user_id',$user_id)->where('checked_at','like',$checkedAtDate.'%')->where('type','登出')->orderBy('id','desc')->first();
+        if ($userDutyCheckExport&&$userDutyCheck->type=='登出')return ['success'=>false,'data'=>'已存在出场记录!'];
         $userDutyCheck->save();
-        if ($userDutyCheck&&$userDutyCheck->type=='登入'){
-            event(new ClockinEvent($userDutyCheck));
-        }else if ($userDutyCheck&&$userDutyCheck->type=='登出'){
-            event(new ClockoutEvent($userDutyCheck));
-        }
-        $laborReport=LaborReport::where('user_workgroup_id',$userDutyCheck->workgroup_id)->where('user_id',$user_id)->orderBy('id','desc')->first();
-            if ($laborReport&&$userDutyCheck->type){
-            LaborReport::updateLaborReportData($laborReport,$userDutyCheck);
-            $this->log(__METHOD__,"更新临时工报表记录__".__FUNCTION__,json_encode([$laborReport,$userDutyCheck]));
-        }
         $this->log(__METHOD__,"录入补卡".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
+        $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$checkedAtDate.'%')->orderBy('id','desc')->first();
+        if (!$laborReport){
+            $newReport=LaborReport::importToCreateLaborReportData($userDutyCheck);
+            $this->log(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck]));
+            if ($newReport) event(new importEvent($userDutyCheck));
+        }
         return ['success'=>true,'data'=>$userDutyCheck];
     }
     //搜索临时工下打卡信息

+ 213 - 115
app/Http/Controllers/UserDutyCheckController.php

@@ -4,12 +4,14 @@ namespace App\Http\Controllers;
 
 use App\Events\ClockinEvent;
 use App\Events\ClockoutEvent;
+use App\Events\importEvent;
 use App\LaborCompany;
 use App\LaborReport;
 use App\User;
 use App\UserDetail;
 use App\UserDutyCheck;
 use App\UserLabor;
+use App\UserWorkgroup;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -28,15 +30,15 @@ class UserDutyCheckController extends Controller
         $qrCode_refresh=config('hr.qrCode_refresh');
         if ($qrCode_refresh_everyday){
             $key=$request->input('key');
-            if (!$key) return view('exception.404',['error'=>'二维码失效!']);
+            if (!$key) return "<h1 style='color: red;text-align:center'>当前二维码失效,请重新扫码!</h1>";
             $date=md5(date('Y-m-d'));
-            if ($key!=$date) return view('exception.404',['error'=>'二维码失效!']);
+            if ($key!=$date) return "<h1 style='color: red;text-align:center'>当前二维码失效,请重新扫码!</h1>";
         }
         if ($qrCode_refresh){
             $key=$request->input('key');
-            if (!$key) return view('exception.404',['error'=>'二维码失效!']);
+            if (!$key) return "<h1 style='color: red;text-align:center'>当前二维码失效,请重新扫码!</h1>";
             $date=date('Y-m-d H:i:s');
-            if ($key<$date) return view('exception.404',['error'=>'二维码失效!']);
+            if ($key<$date) return "<h1 style='color: red;text-align:center'>当前二维码失效,请重新扫码!</h1>";
         }
         $userLaborToken=$request->cookie('userLaborToken');
         if ($userLaborToken && Cache::has('dutyCheckTokenStr_'.$userLaborToken)) {
@@ -44,14 +46,24 @@ class UserDutyCheckController extends Controller
             $userDetail=UserDetail::find($user_id);
             if (!$userDetail)   return redirect('personnel/checking-in/userDutyCheck/createUserDetail/'.$userDetail->mobile_phone)->with("importAndExportQRCodeType",$importAndExportQRCodeType);
             $userDutyCheck=$this->importAndExportDutyCheck($user_id,$importAndExportQRCodeType);
-            $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->orderBy('id','desc')->first();
-            if (!$laborReport){
-                LaborReport::createLaborReportData($userDutyCheck);
-                $this->log(__METHOD__,"创建临时工报表记录__".__FUNCTION__,json_encode([$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&&$importAndExportQRCodeType=='import'){
+                $newReport=LaborReport::importToCreateLaborReportData($userDutyCheck);
+                $this->log(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck]));
+                if ($newReport) event(new importEvent($userDutyCheck));
+
             }
-//            if ($laborReport&&$userDutyCheck->type=='登出'){
-//                LaborReport::updateLaborReportData($laborReport,$userDutyCheck);
-//                $this->log(__METHOD__,"更新临时工报表记录__".__FUNCTION__,json_encode([$laborReport,$userDutyCheck]));
+//else if(!$laborReport&&$importAndExportQRCodeType=='export'){
+//                //退场时间跨天情况
+//                $yesterdayDate=Carbon::now()->subDays(1)->format('Y-m-d');
+//                $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$yesterdayDate.'%')->orderBy('id','asc')->first();
+//                if ($laborReport){
+//
+//                }
+//            }else if($laborReport){
+//
 //            }
             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>";
@@ -80,18 +92,26 @@ class UserDutyCheckController extends Controller
             return redirect('personnel/checking-in/userDutyCheck/updateUserDetail/'.$mobile_phone)->with("importAndExportQRCodeType",$importAndExportQRCodeType);
         }
         $userDutyCheck=$this->importAndExportDutyCheck($userDetail->user_id,$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();
+        if (!$laborReport){
+            $newReport=LaborReport::importToCreateLaborReportData($userDutyCheck);
+            $this->log(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck]));
+            if ($newReport) event(new importEvent($userDutyCheck));
+        }
         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)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
         $userLaborToken=$userDetail->getDutyCheckToken(config('users.token_check_in_expire_minutes'));
         $laravelEchoPrefix = config('database.redis.options.prefix');
-        return response()->view('personnel/checking-in/success',['full_name'=>$userDetail->full_name,'checked_at'=>$userDutyCheck->checked_at,'type'=>$userDutyCheck->type,'laravelEchoPrefix'=>$laravelEchoPrefix])
+        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'),'/');
     }
 
     //根据用户提交进出场打卡记录
     public  function  importAndExportDutyCheck($user_id,$importAndExportQRCodeType){
-        $userDutyCheckOld=UserDutyCheck::where('user_id',$user_id)->where('workgroup_id',null)->orderBy('id','desc')->limit(10)->first();
+        $dateNow=Carbon::now()->format('Y-m-d');
+        $userDutyCheckOld=UserDutyCheck::where('user_id',$user_id)->where('checked_at','like',$dateNow.'%')->orderBy('id','desc')->limit(10)->first();
         $date=date('Y-m-d H:i:s');
         $this->log(__METHOD__,"提交打卡记录__".__FUNCTION__,json_encode([$user_id,$date]));
         $userDutyCheck=new UserDutyCheck([
@@ -100,6 +120,17 @@ class UserDutyCheckController extends Controller
             'source'=>'正常',
         ]);
         if (!$userDutyCheckOld){
+            //跨天登出情况
+            if ($importAndExportQRCodeType&&$importAndExportQRCodeType=='export'){
+                //当前日期的前一天
+                $yesterday=Carbon::yesterday()->format('Y-m-d');
+                $userDutyCheckYesterday=UserDutyCheck::where('user_id',$user_id)->where('checked_at','like',$yesterday.'%')->orderBy('id','desc')->limit(10)->first();
+                if ($userDutyCheckYesterday&&$userDutyCheckYesterday->type=='登入'){
+                    $userDutyCheck->type='登出';
+                    $userDutyCheck->save();
+                    return $userDutyCheck;
+                }
+            }
             $userDutyCheck->type="登入";
             $userDutyCheck->save();
             return $userDutyCheck;
@@ -148,12 +179,20 @@ class UserDutyCheckController extends Controller
         ]);
         $this->log(__METHOD__,"更改临时工劳务所信息".__FUNCTION__,json_encode($userLabor),Auth::user()['id']);
         $userDutyCheck=$this->importAndExportDutyCheck($userDetail->user_id,$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();
+        if (!$laborReport){
+            $newReport=LaborReport::importToCreateLaborReportData($userDutyCheck);
+            $this->log(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck]));
+            if ($newReport){
+                event(new importEvent($userDutyCheck));
+            }
+        }
         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)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
         $userLaborToken=$userDetail->getDutyCheckToken(config('users.token_check_in_expire_minutes'));
         $this->log(__METHOD__,"录入临时工,用户,对应工作组,打卡记录".__FUNCTION__,json_encode($request->all()));
-//        $group_name=$userDutyCheck->userWorkgroup['name'];
         $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'),'/');
@@ -203,6 +242,15 @@ class UserDutyCheckController extends Controller
         ]);
         $userLabor->save();
         $userDutyCheck=$this->importAndExportDutyCheck($user->id,$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();
+        if (!$laborReport){
+            $newReport=LaborReport::importToCreateLaborReportData($userDutyCheck);
+            $this->log(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck]));
+            if ($newReport){
+                event(new importEvent($userDutyCheck));
+            }
+        }
         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)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
@@ -235,11 +283,6 @@ class UserDutyCheckController extends Controller
         return $validator;
     }
 
-
-
-
-
-
     //校验工作组二维码进入打卡页面
     public function clock(Request $request){
         $userWorkgroupID=$request->input('userWorkgroupID');
@@ -247,111 +290,166 @@ class UserDutyCheckController extends Controller
         if ($userLaborToken && Cache::has('dutyCheckTokenStr_'.$userLaborToken)) {
             $user_id=Cache::get('dutyCheckTokenStr_'.$userLaborToken);
             $userDetail=UserDetail::find($user_id);
-            if (!$userDetail)   return redirect('personnel/checking-in/userDutyCheck/createUserDetail/'.$userDetail->mobile_phone)->with("userWorkgroupID",$userWorkgroupID);
-            $userDutyCheck=$this->dutyCheck($userDetail->user_id,$userWorkgroupID);
-            if ($userDutyCheck&&$userDutyCheck->type=='登入'){
-                event(new ClockinEvent($userDutyCheck));
-            }else if ($userDutyCheck&&$userDutyCheck->type=='登出'){
-                event(new ClockoutEvent($userDutyCheck));
-            }
-            //正常情况
-//            where('created_at','like',Carbon::now()->format('Y-m-d')."%")
-            $laborReport=LaborReport::where('user_workgroup_id',$userDutyCheck->workgroup_id)->where('user_id',$userDutyCheck->user_id)->orderBy('id','desc')->first();
-            if ($laborReport&&$userDutyCheck->type=='登出'){
-                LaborReport::updateLaborReportData($laborReport,$userDutyCheck);
-                $this->log(__METHOD__,"更新临时工报表记录__".__FUNCTION__,json_encode([$laborReport,$userDutyCheck]));
-            }
-            if ($userDutyCheck&&$userDutyCheck->error==true)return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
-            if (!$userDutyCheck)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
-            $group_name=$userDutyCheck->userWorkgroup['name'];
+            $dateNow=Carbon::now()->format('Y-m-d');
+            $group_name=UserWorkgroup::where('id',$userWorkgroupID)->value('name');
             $laravelEchoPrefix = config('database.redis.options.prefix');
-            return response()->view('personnel/checking-in/success',['group_name'=>$group_name??'','full_name'=>$userDetail->full_name,'checked_at'=>$userDutyCheck->checked_at,'type'=>$userDutyCheck->type,'laravelEchoPrefix'=>$laravelEchoPrefix]);
-        }
-        return view("personnel/checking-in/clock",compact('userWorkgroupID'));
-    }
-    //根据用户提交打卡记录
-    public function dutyCheck($user_id,$userWorkgroupID){
-        $userDutyCheckOld=UserDutyCheck::where('user_id',$user_id)->orderBy('checked_at','DESC')->limit(10)->first();
-        if ($userWorkgroupID!=$userDutyCheckOld['workgroup_id']){
-            $user=User::find($user_id);
-            $user->userWorkgroups()->sync([$userWorkgroupID]);
-        }
-        $date=date('Y-m-d H:i:s');
-        $this->log(__METHOD__,"提交打卡记录__".__FUNCTION__,json_encode([$user_id,$userWorkgroupID,$date]));
-        $userDutyCheck=new UserDutyCheck([
-            'user_id'=>$user_id,
-            'checked_at'=>$date,
-            'source'=>'正常',
-            'verify_user_id'=>'',
-            'workgroup_id'=>$userWorkgroupID,
-        ]);
-        if (!$userDutyCheckOld){
-            $userDutyCheck->type="登入";
-            $userDutyCheck->save();
-            return $userDutyCheck;
-        }
-        $lastDate=Carbon::parse($userDutyCheckOld->checked_at);
-        $thisDate=Carbon::parse($date);
-        $diffDate=$thisDate->diffInMinutes($lastDate);
-//        if ($userDutyCheckOld->type=="登出"&&$diffDate<7*1440){
-//            $userDutyCheck->type="登入";
-//            $userDutyCheck->verify_user_id=0;
-//            $userDutyCheck->save();
-//            return $userDutyCheck;
-//        }
-        if($diffDate<=5){
-            $userDutyCheck->error=true;//重复打卡
-            if($userWorkgroupID!=$userDutyCheckOld['workgroup_id']&&$userDutyCheckOld->type=='登入'){
-                if ($userDutyCheck->error){
-                    $userDutyCheck->error=false;
+            $laborReportHas=LaborReport::where('user_id',$user_id)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first();
+            if(!$laborReportHas)return "<h1 style='color: red;text-align:center'>进场是否未打卡?如若未打,请先返回打进场卡!</h1>";
+            //判断是否是第一次进组
+            $laborReport=LaborReport::where('user_id',$user_id)->where('user_workgroup_id',null)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first();
+            if ($laborReport){
+                $newLaborReport=LaborReport::intoGroupAndUpdateLaborReportData($laborReport,$userWorkgroupID);
+                $this->log(__METHOD__,"当日首次进组更新临时工报表记录__".__FUNCTION__,json_encode($request->all()));
+                if (!$newLaborReport)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
+                if ($newLaborReport){
+                    event(new ClockinEvent($newLaborReport));
                 }
-                $userDutyCheckOld->checked_at=$date;
-                $userDutyCheckOld->verify_user_id=null;
-                $userDutyCheckOld->workgroup_id=$userWorkgroupID;
-                $userDutyCheckOld->group_user_id=null;
-                $userDutyCheckOld->update();
-                return $userDutyCheckOld;
-            }
-            return $userDutyCheck;
-        }
-        if ($userWorkgroupID!=$userDutyCheckOld['workgroup_id']&&$userDutyCheckOld->type=="登入"&&$userDutyCheck->type="登出"){
-            if ($diffDate>=1380){
-                $userDutyCheck->type="登入";
+                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]);
             }else{
-                $userDutyCheck->workgroup_id=$userDutyCheckOld['workgroup_id'];
+                $laborReport=LaborReport::where('user_id',$user_id)->where('user_workgroup_id',$userWorkgroupID)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first();
+                //此处表示临时工当日换组操作
+                if (!$laborReport){
+                    $newLaborReport=LaborReport::changeGroupAndCreateLaborReportData($user_id,$userWorkgroupID);
+                    $this->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));
+                    }
+                    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]);
+                }else{
+                    return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
+                }
             }
-
         }
-        if ($userDutyCheckOld->type=="登入"){
-            switch ($diffDate){
-                case $diffDate<=20:
-                    $userDutyCheck->type="登入";
-                    $userDutyCheck->workgroup_id=$userDutyCheckOld->workgroup_id;
-                    break;
-                case $diffDate>=1380:
-                    $userDutyCheck->type="登入";
-                    break;
-                default:
-                    $userDutyCheck->type="登出";
-                    $userDutyCheck->verify_user_id=0;
+        return view("personnel/checking-in/clock",compact('userWorkgroupID'));
+    }
+    //进组提交打卡
+    public function importGroupClock(Request $request){
+        $mobile_phone=$request->input('mobile_phone');
+        $userWorkgroupID=$request->input('userWorkgroupID');
+        $this->validator($request)->validate();
+        $userDetail=UserDetail::where('mobile_phone',$mobile_phone)->first();
+        if (Cache::has('dutyCheckTokenUser_'.$userDetail->user_id))return "<h1 style='color: red;text-align:center'>请使用原有设备进行打卡,如无法使用原有设备请联系管理人员解绑设备!</h1>";
+        $dateNow=Carbon::now()->format('Y-m-d');
+        $group_name=UserWorkgroup::where('id',$userWorkgroupID)->value('name');
+        $laravelEchoPrefix = config('database.redis.options.prefix');
+        $laborReportHas=LaborReport::where('user_id',$userDetail->user_id)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first();
+        if(!$laborReportHas)return "<h1 style='color: red;text-align:center'>进场是否未打卡?如若未打,请先返回打进场卡!</h1>";
+        //判断是否是第一次进组
+        $laborReport=LaborReport::where('user_id',$userDetail->user_id)->where('user_workgroup_id',null)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first();
+        if ($laborReport){
+            $newLaborReport=LaborReport::intoGroupAndUpdateLaborReportData($laborReport,$userWorkgroupID);
+            $this->log(__METHOD__,"当日首次进组更新临时工报表记录__".__FUNCTION__,json_encode($request->all()));
+            if (!$newLaborReport)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
+            if ($newLaborReport){
+                event(new ClockinEvent($newLaborReport));
             }
-        }
-        if ($userDutyCheckOld->type=="登出"){
-            switch ($diffDate){
-                case $diffDate<=20:
-                    $userDutyCheck->type="登出";
-                    $userDutyCheck->verify_user_id=0;
-                    $userDutyCheck->workgroup_id=$userDutyCheckOld->workgroup_id;
-                    break;
-                default:
-                    $userDutyCheck->type="登入";
+            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]);
+        }else{
+            $laborReport=LaborReport::where('user_id',$userDetail->user_id)->where('user_workgroup_id',$userWorkgroupID)->where('created_at','like',$dateNow.'%')->orderBy('id','desc')->first();
+            //此处表示临时工当日换组操作
+            if (!$laborReport){
+                $newLaborReport=LaborReport::changeGroupAndCreateLaborReportData($userDetail->user_id,$userWorkgroupID);
+                $this->log(__METHOD__,"当日临时工换组新建临时工报表记录__".__FUNCTION__,json_encode([$userDetail->user_id,$userWorkgroupID]));
+                if (!$newLaborReport)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
+                if ($newLaborReport){
+                    event(new ClockinEvent($newLaborReport));
+                }
+                $userLaborToken=$userDetail->getDutyCheckToken(config('users.token_check_in_expire_minutes'));
+                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])
+                    ->cookie('userLaborToken',$userLaborToken,config('users.token_check_in_expire_minutes'),'/');
+            }else{
+                return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
             }
         }
-        $userDutyCheck->save();
-        return $userDutyCheck;
+
     }
-//    //提交打卡
-//    public function storeClock(Request $request){
+
+
+
+//    //根据用户提交打卡记录
+//    public function dutyCheck($user_id,$userWorkgroupID){
+//        $userDutyCheckOld=UserDutyCheck::where('user_id',$user_id)->orderBy('checked_at','DESC')->limit(10)->first();
+//        if ($userWorkgroupID!=$userDutyCheckOld['workgroup_id']){
+//            $user=User::find($user_id);
+//            $user->userWorkgroups()->sync([$userWorkgroupID]);
+//        }
+//        $date=date('Y-m-d H:i:s');
+//        $this->log(__METHOD__,"提交打卡记录__".__FUNCTION__,json_encode([$user_id,$userWorkgroupID,$date]));
+//        $userDutyCheck=new UserDutyCheck([
+//            'user_id'=>$user_id,
+//            'checked_at'=>$date,
+//            'source'=>'正常',
+//            'verify_user_id'=>'',
+//            'workgroup_id'=>$userWorkgroupID,
+//        ]);
+//        if (!$userDutyCheckOld){
+//            $userDutyCheck->type="登入";
+//            $userDutyCheck->save();
+//            return $userDutyCheck;
+//        }
+//        $lastDate=Carbon::parse($userDutyCheckOld->checked_at);
+//        $thisDate=Carbon::parse($date);
+//        $diffDate=$thisDate->diffInMinutes($lastDate);
+////        if ($userDutyCheckOld->type=="登出"&&$diffDate<7*1440){
+////            $userDutyCheck->type="登入";
+////            $userDutyCheck->verify_user_id=0;
+////            $userDutyCheck->save();
+////            return $userDutyCheck;
+////        }
+//        if($diffDate<=5){
+//            $userDutyCheck->error=true;//重复打卡
+//            if($userWorkgroupID!=$userDutyCheckOld['workgroup_id']&&$userDutyCheckOld->type=='登入'){
+//                if ($userDutyCheck->error){
+//                    $userDutyCheck->error=false;
+//                }
+//                $userDutyCheckOld->checked_at=$date;
+//                $userDutyCheckOld->verify_user_id=null;
+//                $userDutyCheckOld->workgroup_id=$userWorkgroupID;
+//                $userDutyCheckOld->group_user_id=null;
+//                $userDutyCheckOld->update();
+//                return $userDutyCheckOld;
+//            }
+//            return $userDutyCheck;
+//        }
+//        if ($userWorkgroupID!=$userDutyCheckOld['workgroup_id']&&$userDutyCheckOld->type=="登入"&&$userDutyCheck->type="登出"){
+//            if ($diffDate>=1380){
+//                $userDutyCheck->type="登入";
+//            }else{
+//                $userDutyCheck->workgroup_id=$userDutyCheckOld['workgroup_id'];
+//            }
+//
+//        }
+//        if ($userDutyCheckOld->type=="登入"){
+//            switch ($diffDate){
+//                case $diffDate<=20:
+//                    $userDutyCheck->type="登入";
+//                    $userDutyCheck->workgroup_id=$userDutyCheckOld->workgroup_id;
+//                    break;
+//                case $diffDate>=1380:
+//                    $userDutyCheck->type="登入";
+//                    break;
+//                default:
+//                    $userDutyCheck->type="登出";
+//                    $userDutyCheck->verify_user_id=0;
+//            }
+//        }
+//        if ($userDutyCheckOld->type=="登出"){
+//            switch ($diffDate){
+//                case $diffDate<=20:
+//                    $userDutyCheck->type="登出";
+//                    $userDutyCheck->verify_user_id=0;
+//                    $userDutyCheck->workgroup_id=$userDutyCheckOld->workgroup_id;
+//                    break;
+//                default:
+//                    $userDutyCheck->type="登入";
+//            }
+//        }
+//        $userDutyCheck->save();
+//        return $userDutyCheck;
+//    }
+    //进组提交打卡
+//    public function importGroupClock(Request $request){
 //        $mobile_phone=$request->input('mobile_phone');
 //        $userWorkgroupID=$request->input('userWorkgroupID');
 //        $this->validator($request)->validate();

+ 155 - 70
app/LaborReport.php

@@ -14,7 +14,11 @@ class LaborReport extends Model
     use ModelTimeFormat;
 
     protected $fillable=[
-        'id','enter_number','user_workgroup_id','user_id','name','mobile_phone','identity_number','labor_company','check_in_at','verify_at','group_user_id','check_out_at','online_duration','working_duration',
+        'id','enter_number','user_workgroup_id','user_id','name','mobile_phone','identity_number','labor_company',
+        'check_in_at','verify_at','group_user_id','check_out_at','online_duration','working_duration','created_at',
+    ];
+    protected $appends = [
+        'is_exportGroup',
     ];
 
     public function userWorkgroup(){
@@ -23,97 +27,178 @@ class LaborReport extends Model
     public function user(){
         return $this->belongsTo('App\User','group_user_id','id');
     }
+    public function userDutyCheck(){
+        return $this->belongsTo('App\UserDutyCheck','user_id','user_id');
+    }
+    public function getIsExportGroupAttribute(){
+        return $this['check_out_at']? true:false;
+    }
 
-    //添加临时工报表数据
-    static function createLaborReportData($userDutyCheck){
+    //进场创建临时工报表信息
+    static function importToCreateLaborReportData($userDutyCheck){
         $userDetail=UserDetail::find($userDutyCheck->user_id);
         $name=$userDetail['full_name'];
         $mobile_phone=$userDetail['mobile_phone'];
         $identity_number=$userDetail['identity_number'];
         $labor_company_id=UserLabor::where('user_id',$userDutyCheck->user_id)->value('labor_company_id');
         $labor_company=LaborCompany::where('id',$labor_company_id)->value('name');
-        if ($userDutyCheck->type=='登入'){
-            $check_in_at=$userDutyCheck['checked_at'];
-        }
-        $date=date('Y-m-d H:i:s');
         $laborReport=new LaborReport([
-            'enter_number'=>Uuid::uuid1(),
-            'user_workgroup_id'=>$userDutyCheck->workgroup_id,
+            'enter_number'=>$userDutyCheck->user_id,
+            'user_id'=>$userDutyCheck->user_id,
+            'name'=>$name,
+            'mobile_phone'=>$mobile_phone,
+            'identity_number'=>$identity_number,
+            'labor_company'=>$labor_company,
+        ]);
+        $laborReport->save();
+        return $laborReport;
+    }
+    //出场更新临时工报表信息
+    static function exportToCreateLaborReportData($laborReport,$userDutyCheck){
+        $userDetail=UserDetail::find($userDutyCheck->user_id);
+        $name=$userDetail['full_name'];
+        $mobile_phone=$userDetail['mobile_phone'];
+        $identity_number=$userDetail['identity_number'];
+        $labor_company_id=UserLabor::where('user_id',$userDutyCheck->user_id)->value('labor_company_id');
+        $labor_company=LaborCompany::where('id',$labor_company_id)->value('name');
+        $laborReport=new LaborReport([
+            'enter_number'=>$userDutyCheck->user_id,
             'user_id'=>$userDutyCheck->user_id,
             'name'=>$name,
             'mobile_phone'=>$mobile_phone,
             'identity_number'=>$identity_number,
             'labor_company'=>$labor_company,
-            'check_in_at'=>$check_in_at,
-            'verify_at'=>$date,
-            'group_user_id'=>$userDutyCheck->group_user_id,
         ]);
         $laborReport->save();
+        return $laborReport;
+    }
+    //当天第一次进工作组更新临时工报表
+    static function intoGroupAndUpdateLaborReportData($laborReport,$userWorkgroupID){
+        $laborReport->user_workgroup_id=$userWorkgroupID;
+        $laborReport->check_in_at=date('Y-m-d H:i:s');
         $number_id=$laborReport->id;
-        $enter_number=$userDutyCheck->workgroup_id.date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
+        $enter_number=$userWorkgroupID.date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
         $laborReport->enter_number=$enter_number;
         $laborReport->update();
         return $laborReport;
     }
-    //修改临时工报表数据
-    static function updateLaborReportData($laborReport,$userDutyCheck){
-            //正常打卡情况
-            if($userDutyCheck->type=='登出'){
-                $laborReport->check_out_at=$userDutyCheck->checked_at;
-                $checkInDate=Carbon::parse($laborReport['check_in_at']);
-                $checkOutDate=Carbon::parse($userDutyCheck->checked_at);
-                $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
-                $laborReport['online_duration']=$hour;
-                $laborReport['working_duration']=$hour;
-                $laborReport->update();
-            }
-        $date=Carbon::parse($laborReport['check_in_at'])->format('Y-m-d');
-        $userDutyCheckOld=UserDutyCheck::where('user_id',$userDutyCheck->user_id)->orderBy('checked_at','DESC')->limit(10)->first();
-        //补卡情况
-        if ($userDutyCheck->type=='登入'&&$userDutyCheckOld->checked_at>$userDutyCheck->checked_at&&$userDutyCheck->checked_at<$date." 11:00".":00"){
-            $laborReport['check_in_at']=$userDutyCheck['checked_at'];
-            $checkInDate=Carbon::parse($laborReport['check_in_at']);
-            if ($laborReport->check_out_at){
-                $checkOutDate=Carbon::parse($laborReport->check_out_at);
-                $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
-                $laborReport['online_duration']=$hour;
-            }
-            $laborReport->update();
-        }
-        if ($userDutyCheck->type=='登入'&&$userDutyCheckOld->checked_at<$userDutyCheck->checked_at){
-            $userDutyCheck->save();
-            $laborReport['working_duration']=$laborReport['online_duration'];
-            $laborReport->update();
-        }
-        if ($userDutyCheck->type=='登出'&&$userDutyCheckOld->checked_at<$userDutyCheck->checked_at){
-            $laborReport->check_out_at=$userDutyCheck->checked_at;
-            $checkInDate=Carbon::parse($laborReport['check_in_at']);
-            $checkOutDate=Carbon::parse($userDutyCheck->checked_at);
-            $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
-            $laborReport['online_duration']=$hour;
-            $laborReport['working_duration']=$hour;
-            $laborReport->update();
-        }
 
-        if ($laborReport&&$laborReport->check_out_at){
-            $userDutyCheckStart=UserDutyCheck::where('user_id',$laborReport->user_id)->where('workgroup_id',$laborReport->user_workgroup_id)->where('checked_at','>=',$date." 11:00".":00")
-                ->where('checked_at','<=',$date." 14:00:00")->where('type','登出')->first();
-            $userDutyCheckEnd=UserDutyCheck::where('user_id',$laborReport->user_id)->where('workgroup_id',$laborReport->user_workgroup_id)->where('checked_at','>=',$date." 11:00".":00")
-                ->where('checked_at','<=',$date." 14:00:00")->where('type','登入')->first();
-            $beginTime=Carbon::parse($userDutyCheckStart['checked_at']);
-            $endTime=Carbon::parse($userDutyCheckEnd['checked_at']);
-            $lunchHour=($endTime->diffInSeconds($beginTime))/3600;
-            if($userDutyCheck->type=='登入'&&$userDutyCheck->checked_at<=$date." 14:00:00"){
-                $laborReport['working_duration']=$laborReport['online_duration'];
-            }else if($userDutyCheck->type=='登出'&&$userDutyCheck->checked_at<=$date." 14:00:00"){
-                $laborReport['working_duration']=$laborReport['online_duration'];
-            }else{
-                $laborReport['working_duration']=$laborReport['online_duration']-$lunchHour;
-            }
-            $laborReport->update();
-        }
-        return;
+    //换组添加临时工报表数据
+    static function changeGroupAndCreateLaborReportData($user_id,$userWorkgroupID){
+        $userDetail=UserDetail::find($user_id);
+        $name=$userDetail['full_name'];
+        $mobile_phone=$userDetail['mobile_phone'];
+        $identity_number=$userDetail['identity_number'];
+        $labor_company_id=UserLabor::where('user_id',$user_id)->value('labor_company_id');
+        $labor_company=LaborCompany::where('id',$labor_company_id)->value('name');
+        $laborReport=new LaborReport([
+            'enter_number'=>Uuid::uuid1(),
+            'user_workgroup_id'=>$userWorkgroupID,
+            'user_id'=>$user_id,
+            'name'=>$name,
+            'mobile_phone'=>$mobile_phone,
+            'identity_number'=>$identity_number,
+            'labor_company'=>$labor_company,
+            'check_in_at'=>date('Y-m-d H:i:s'),
+        ]);
+        $laborReport->save();
+        $number_id=$laborReport->id;
+        $enter_number=$userWorkgroupID.date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
+        $laborReport->enter_number=$enter_number;
+        $laborReport->update();
+        return $laborReport;
     }
+
+//    //添加临时工报表数据
+//    static function createLaborReportData($userDutyCheck){
+//        $userDetail=UserDetail::find($userDutyCheck->user_id);
+//        $name=$userDetail['full_name'];
+//        $mobile_phone=$userDetail['mobile_phone'];
+//        $identity_number=$userDetail['identity_number'];
+//        $labor_company_id=UserLabor::where('user_id',$userDutyCheck->user_id)->value('labor_company_id');
+//        $labor_company=LaborCompany::where('id',$labor_company_id)->value('name');
+//        if ($userDutyCheck->type=='登入'){
+//            $check_in_at=$userDutyCheck['checked_at'];
+//        }
+//        $date=date('Y-m-d H:i:s');
+//        $laborReport=new LaborReport([
+//            'enter_number'=>Uuid::uuid1(),
+//            'user_workgroup_id'=>$userDutyCheck->workgroup_id,
+//            'user_id'=>$userDutyCheck->user_id,
+//            'name'=>$name,
+//            'mobile_phone'=>$mobile_phone,
+//            'identity_number'=>$identity_number,
+//            'labor_company'=>$labor_company,
+//            'check_in_at'=>$check_in_at,
+//            'verify_at'=>$date,
+//            'group_user_id'=>$userDutyCheck->group_user_id,
+//        ]);
+//        $laborReport->save();
+//        $number_id=$laborReport->id;
+//        $enter_number=$userDutyCheck->workgroup_id.date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
+//        $laborReport->enter_number=$enter_number;
+//        $laborReport->update();
+//        return $laborReport;
+//    }
+//    //修改临时工报表数据
+//    static function updateLaborReportData($laborReport,$userDutyCheck){
+//            //正常打卡情况
+//            if($userDutyCheck->type=='登出'){
+//                $laborReport->check_out_at=$userDutyCheck->checked_at;
+//                $checkInDate=Carbon::parse($laborReport['check_in_at']);
+//                $checkOutDate=Carbon::parse($userDutyCheck->checked_at);
+//                $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
+//                $laborReport['online_duration']=$hour;
+//                $laborReport['working_duration']=$hour;
+//                $laborReport->update();
+//            }
+//        $date=Carbon::parse($laborReport['check_in_at'])->format('Y-m-d');
+//        $userDutyCheckOld=UserDutyCheck::where('user_id',$userDutyCheck->user_id)->orderBy('checked_at','DESC')->limit(10)->first();
+//        //补卡情况
+//        if ($userDutyCheck->type=='登入'&&$userDutyCheckOld->checked_at>$userDutyCheck->checked_at&&$userDutyCheck->checked_at<$date." 11:00".":00"){
+//            $laborReport['check_in_at']=$userDutyCheck['checked_at'];
+//            $checkInDate=Carbon::parse($laborReport['check_in_at']);
+//            if ($laborReport->check_out_at){
+//                $checkOutDate=Carbon::parse($laborReport->check_out_at);
+//                $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
+//                $laborReport['online_duration']=$hour;
+//            }
+//            $laborReport->update();
+//        }
+//        if ($userDutyCheck->type=='登入'&&$userDutyCheckOld->checked_at<$userDutyCheck->checked_at){
+//            $userDutyCheck->save();
+//            $laborReport['working_duration']=$laborReport['online_duration'];
+//            $laborReport->update();
+//        }
+//        if ($userDutyCheck->type=='登出'&&$userDutyCheckOld->checked_at<$userDutyCheck->checked_at){
+//            $laborReport->check_out_at=$userDutyCheck->checked_at;
+//            $checkInDate=Carbon::parse($laborReport['check_in_at']);
+//            $checkOutDate=Carbon::parse($userDutyCheck->checked_at);
+//            $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
+//            $laborReport['online_duration']=$hour;
+//            $laborReport['working_duration']=$hour;
+//            $laborReport->update();
+//        }
+//
+//        if ($laborReport&&$laborReport->check_out_at){
+//            $userDutyCheckStart=UserDutyCheck::where('user_id',$laborReport->user_id)->where('workgroup_id',$laborReport->user_workgroup_id)->where('checked_at','>=',$date." 11:00".":00")
+//                ->where('checked_at','<=',$date." 14:00:00")->where('type','登出')->first();
+//            $userDutyCheckEnd=UserDutyCheck::where('user_id',$laborReport->user_id)->where('workgroup_id',$laborReport->user_workgroup_id)->where('checked_at','>=',$date." 11:00".":00")
+//                ->where('checked_at','<=',$date." 14:00:00")->where('type','登入')->first();
+//            $beginTime=Carbon::parse($userDutyCheckStart['checked_at']);
+//            $endTime=Carbon::parse($userDutyCheckEnd['checked_at']);
+//            $lunchHour=($endTime->diffInSeconds($beginTime))/3600;
+//            if($userDutyCheck->type=='登入'&&$userDutyCheck->checked_at<=$date." 14:00:00"){
+//                $laborReport['working_duration']=$laborReport['online_duration'];
+//            }else if($userDutyCheck->type=='登出'&&$userDutyCheck->checked_at<=$date." 14:00:00"){
+//                $laborReport['working_duration']=$laborReport['online_duration'];
+//            }else{
+//                $laborReport['working_duration']=$laborReport['online_duration']-$lunchHour;
+//            }
+//            $laborReport->update();
+//        }
+//        return;
+//    }
     //修改临时工报表审核时间
     static function updateLaborReportVerify($laborReport,$userDutyCheck){
         $date=date('Y-m-d H:i:s');

+ 1 - 0
app/UserDutyCheck.php

@@ -2,6 +2,7 @@
 
 namespace App;
 
+use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 

+ 0 - 7
app/UserLabor.php

@@ -27,13 +27,6 @@ class UserLabor extends Model
         return $this->belongsTo('App\LaborCompany');
     }
     public function getIsRelieveFacilityAttribute(){
-         // return  $this->userDetail()->hasDutyCheckToken();
-//        $token=Cache::get('dutyCheckTokenUser_'.$this['user_id']);
-//        if ($token){
-//            return true;
-//        }else{
-//            return Cache::has('dutyCheckTokenStr_'.$token);
-//        }
         return Cache::has('dutyCheckTokenUser_'.$this['user_id']);
     }
 

+ 0 - 3
laravel-echo-server.lock

@@ -1,3 +0,0 @@
-{
-	"process": 13028
-}

BIN
public/images/QRCodeIMG/4.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 308 - 579
public/js/app.js


+ 2 - 21
resources/views/personnel/checking-in/QRcode.blade.php

@@ -8,7 +8,7 @@
     <meta name="csrf-token" content="{{ csrf_token() }}">
     <title>显示二维码 BsWAS</title>
     <!-- Styles -->
-    <link href="{{ asset('css/app200629c.css') }}" rel="stylesheet">
+    <link href="{{ asset('css/app200519b.css') }}" rel="stylesheet">
 </head>
 <body>
     <div class="container-fluid " id="page">
@@ -26,14 +26,12 @@
 {{--                    </div>--}}
 {{--                </div>--}}
 {{--                </div>--}}
-                <div>
                     <div class="row">
                         <div class="col text-center" style="float:left;">
                             <img id="img" class="img-thumbnail" style="margin-top: 20px" :src="userWorkgroup.url" />
                             <p class="m-2 h5 text-center" >@{{ userWorkgroup.name }}工作组</p>
                         </div>
                     </div>
-                </div>
             </div>
         </div>
     </div>
@@ -41,27 +39,10 @@
 
     <script src="{{ asset('js/app.js?202002111414') }}"></script>
     <script>
-        // function computeDiffMicroTime_fromNow(dateComparing) {
-        //     let now=new Date();
-        //     let dateComparingObj=new Date(dateComparing)
-        //     let mil = dateComparingObj.getTime()-now.getTime();
-        //     if (mil>0){
-        //         return mil;
-        //     }else {
-        //         return mil=1000;
-        //     }
-        // }
         new Vue({
             el:"#page",
             data:{
-                userWorkgroup:{!! $userWorkgroup !!}
-                {{--userWorkgroups:[--}}
-                {{--    @foreach($userWorkgroups as $userWorkgroup)--}}
-                {{--    {id:'{{$userWorkgroup->id}}',name:'{{$userWorkgroup->name}}',url:'{{$userWorkgroup->url}}',},--}}
-                {{--    @endforeach--}}
-                {{--],--}}
-                {{--last_refresh_date:'{{$last_refresh_date}}',--}}
-                {{--warehouseId:'{{$warehouseId}}',--}}
+                userWorkgroup:{!! $userWorkgroup !!},
             },
             {{--mounted(){--}}
             {{--    let _this=this;--}}

+ 26 - 21
resources/views/personnel/checking-in/clock.blade.php

@@ -1,25 +1,30 @@
 <!DOCTYPE html>
 <html>
-    <head>
-        <meta charset="utf-8">
-        <meta name="viewport" content="width=device-width, initial-scale=1">
-        <link href="{{ asset('css/app.css') }}" rel="stylesheet">
-    </head>
-    <body>
-        <div class="card col-md-8 offset-md-2 mt-5">
-            <div class="card-body">
-                <form method="post" action="{{url('personnel/checking-in/userDutyCheck/storeClock')}}">
-                    @csrf
-                    <div class="form-group row">
-                        <label for="mobile_phone" class="form-check-label col-3 pull-right">手机号:</label>
-                        <input name="mobile_phone" id="mobile_phone" class="@error('mobile_phone') is-invalid @enderror col-7 form-control" type="text">
-                    </div>
-                    <input type="hidden" name="userWorkgroupID" value="{{ old('userWorkgroupID',$userWorkgroupID)}}">
-                    <div class="form-group row pt-3">
-                        <button type="submit" class="col-7 offset-3 btn btn-success">提交</button>
-                    </div>
-                </form>
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
+</head>
+<body>
+<div class="card col-md-8 offset-md-2 mt-5">
+    <div class="card-body">
+        <form method="post" action="{{url('personnel/checking-in/userDutyCheck/importGroupClock')}}">
+            @csrf
+            <div class="form-group row">
+                <label for="mobile_phone" class="form-check-label col-3 pull-right">手机号:</label>
+                <input name="mobile_phone" id="mobile_phone" class="@error('mobile_phone') is-invalid @enderror col-7 form-control" type="text">
+                @error('mobile_phone')
+                <span class="invalid-feedback" role="alert">
+                    <strong>{{ $message }}</strong>
+                    </span>
+                @enderror
             </div>
-        </div>
-    </body>
+            <input type="hidden" name="userWorkgroupID" value="{{ old('userWorkgroupID',$userWorkgroupID)}}">
+            <div class="form-group row pt-3">
+                <button type="submit" class="col-7 offset-3 btn btn-success">提交</button>
+            </div>
+        </form>
+    </div>
+</div>
+</body>
 </html>

+ 2 - 0
resources/views/personnel/checking-in/clockAudit.blade.php

@@ -159,6 +159,7 @@
                 store(id,type,url){
 
                 },
+                //门卫审核
                 storeClockAudit(id,type){
                     let url='{{url("personnel/checking-in/storeClockAudit")}}';
                     let _this=this;
@@ -183,6 +184,7 @@
                         tempTip.show('审核失败!网络错误:'+err);
                     });
                 },
+                //组长打卡审核
                 storeGroupAudit(id,type){
                     let url='{{url("personnel/checking-in/storeGroupAudit")}}';
                     let _this=this;

+ 5 - 0
resources/views/personnel/checking-in/createReplenishClock.blade.php

@@ -117,6 +117,11 @@
                                 return;
                             }
                             _this.errors=response.data.data;
+                            if (!response.data.success){
+                                tempTip.setDuration(3000);
+                                tempTip.show(response.data.data);
+                                return;
+                            }
                         }).catch(function (err) {
                             tempTip.setDuration(4000);
                             tempTip.show('录入补卡失败!网络错误:'+err);

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

@@ -17,10 +17,10 @@
             <b style="color: #2a9055">出场打卡</b>
         @endif
     </h5><br/>
-    <h3 style="margin-bottom: 0">姓名:@if($full_name)<b style="color: #2a9055">{{$full_name}}</b>@endif&nbsp;&nbsp;&nbsp;&nbsp;打卡时间:@if($checked_at)<b style="color: #2a9055">{{$checked_at}}</b> @endif</h3><br/>
+    <h3 style="margin-bottom: 0">姓名:@if($full_name)<b style="color: #2a9055">{{$full_name}}</b>@endif&nbsp;&nbsp;&nbsp;&nbsp;进场时间:@if($checked_at)<b style="color: #2a9055">{{$checked_at}}</b> @endif</h3><br/>
     @if($type=='登入')
-        <div v-if="userDutyCheck.verify_user_id"><h5 style="color: #2a9055" >进场审核已确认</h5></div>
-        <h5 v-else style="margin-top: 0;color: red">等待进场确认,请勿关闭:<span id="_lefttime" ></span></h5>
+        <div v-if="userDutyCheck.verify_user_id"><h5 style="color: #2a9055" >门卫审核完成,请到工作组入组打卡审核</h5></div>
+        <h5 v-else style="margin-top: 0;color: red">等待门卫审核,请勿关闭:<span id="_lefttime" ></span></h5>
     @endif
 
     @if($type=='登出')

+ 9 - 21
resources/views/personnel/checking-in/success.blade.php

@@ -9,40 +9,28 @@
 <body >
 <div style="text-align: center" id="page">
     <h4 style="margin-bottom: 0">宝时物流 欢迎你</h4><br/>
-    <h5 style="margin-top: 0;color:#B8860B ">
-        @if($type=='登入')
-            <b style="color: #2a9055">上班打卡</b>
-        @endif
-        @if($type=='登出')
-            <b style="color: #2a9055">下班打卡</b>
-        @endif
-    </h5><br/>
-    <h2 class="text-danger">小组:{{$group_name}}</h2><br/>
-    <h3 style="margin-bottom: 0">姓名:@if($full_name)<b style="color: #2a9055">{{$full_name}}</b>@endif&nbsp;&nbsp;&nbsp;&nbsp;打卡时间:@if($checked_at)<b style="color: #2a9055">{{$checked_at}}</b> @endif</h3><br/>
-    @if($type=='登入')
-        <div v-if="userDutyCheck.group_user_id"><h5 style="color: #2a9055" >组长已确认</h5></div>
+    <h2 class="text-danger">进入组:{{$group_name}}</h2><br/>
+    <h3 style="margin-bottom: 0">姓名:@if($full_name)<b style="color: #2a9055">{{$full_name}}</b>@endif&nbsp;&nbsp;&nbsp;&nbsp;进组时间:@if($check_in_at)<b style="color: #2a9055">{{$check_in_at}}</b> @endif</h3><br/>
+    <div>
+        <div v-if="laborReport.group_user_id"><h5 style="color: #2a9055" >组长已确认</h5></div>
         <h5 v-else style="margin-top: 0;color: red">等待组长确认登入,请勿关闭:<span id="_lefttime" ></span></h5>
-    @endif
-
-    @if($type=='登出')
-        <h5 style="margin-top: 0;color: red">下班登出成功,如是误操作,请在五分钟以后再次登入并找组长确认</h5>
-    @endif
+    </div>
 </div>
 <script src="{{ asset('js/app.js?202002111414') }}"></script>
 <script>
     new Vue({
         el:'#page',
         data:{
-          userDutyCheck:{
+            laborReport:{
               group_user_id:''
           },
         },
         mounted(){
             initEcho();
-            Echo.channel('{{$laravelEchoPrefix}}userDutyCheck').listen('TeamAuditEvent',(e)=>{
+            Echo.channel('{{$laravelEchoPrefix}}laborReport').listen('TeamAuditEvent',(e)=>{
                 let _this=this;
-                let userDutyCheck=e.userDutyCheck;
-                _this.userDutyCheck.group_user_id=userDutyCheck.group_user_id;
+                let laborReport=e.laborReport;
+                _this.laborReport.group_user_id=laborReport.group_user_id;
             });
         },
     });

+ 210 - 26
resources/views/personnel/laborReport/index.blade.php

@@ -31,20 +31,19 @@
                             <tr>
                                 <td >
                                     <input style="width: 140px" name="created_at_start" type="date" v-model="filterData.created_at_start" :class="filterData.created_at_start?'bg-warning':''" class="form-control form-control-sm tooltipTarget" title="选择显示指定日期的起始时间">
-
                                 </td>
                                 <td>
                                     <div class="form-inline">
-                                    <input type="text" class="form-control form-control-sm tooltipTarget" placeholder="小组"
-                                           style="width:70px" @input="owner_seek"
-                                           title="输入关键词快速定位下拉列表,回车确定">
-                                    <select name="user_workgroup_id" id="user_workgroup_id" :class="filterData.user_workgroup_id?'bg-warning':''" v-model="filterData.user_workgroup_id" @change="setUserWorkGroup"
-                                            class="form-control form-control-sm tooltipTarget"  title="选择要显示的工作组">
-                                        @foreach($userWorkGroups as $userWorkGroup)
-                                            <option value="{{$userWorkGroup->id}}">{{$userWorkGroup->name}}</option>
-                                        @endforeach
-                                    </select>
-                                    <input hidden type="submit" >
+                                        <input type="text" class="form-control form-control-sm tooltipTarget" placeholder="小组"
+                                               style="width:70px" @input="owner_seek"
+                                               title="输入关键词快速定位下拉列表,回车确定">
+                                        <select name="user_workgroup_id" id="user_workgroup_id" :class="filterData.user_workgroup_id?'bg-warning':''" v-model="filterData.user_workgroup_id" @change="setUserWorkGroup"
+                                                class="form-control form-control-sm tooltipTarget"  title="选择要显示的工作组">
+                                            @foreach($userWorkGroups as $userWorkGroup)
+                                                <option value="{{$userWorkGroup->id}}">{{$userWorkGroup->name}}</option>
+                                            @endforeach
+                                        </select>
+                                        <input hidden type="submit" >
                                     </div>
                                 </td>
 
@@ -88,7 +87,7 @@
                                 </label>
                             </th>
                             <th>序号</th>
-{{--                            <th>ID</th>--}}
+                            {{--                            <th>ID</th>--}}
                             <th>操作</th>
                             <th>创建日期</th>
                             <th  style="background-color: rgb(241, 234, 190)">进厂编号</th>
@@ -101,7 +100,7 @@
                             <th>审核时间</th>
                             <th>审核人</th>
                             <th>退组时间</th>
-                            <th>晚饭打卡</th>
+                            <th>晚饭打卡(分)</th>
                             <th>在线时长</th>
                             <th>本次工作时长</th>
                         </tr>
@@ -110,17 +109,27 @@
                                 <input class="checkItem" type="checkbox" :value="laborReport.id" v-model="checkData">
                             </td>
                             <td>@{{ i+1  }}</td>
-{{--                            <td class="text-muted">@{{laborReport.id}}</td>--}}
                             <td>
-                            @can('人事管理-打卡审核')
-                                <span >
-{{--                                <b  class="text-success">已审核</b>--}}
-{{--                                     @click="storeClockAudit(userDutyCheck.id,userDutyCheck.type)"--}}
-                                <button  class="btn btn-sm btn-outline-secondary">门卫审核</button>
+                                @can('人事管理-门卫审核')
+                                 <span >
+                                <b v-if="laborReport.userDutyCheckVerifyUserId"  class="text-success">门卫已审核</b>
+                                <button v-else class="btn btn-sm btn-outline-secondary"  @click="guardClockAudit(laborReport.userDutyCheckId,laborReport.userDutyCheckType)">门卫审核</button>
                                 </span>
                                 @else
                                     <span class="text-center"><p style="color: red">门卫未审核</p></span>
-                            @endcan
+                                @endcan
+                                    &nbsp;&nbsp;&nbsp;&nbsp;
+                                @can('人事管理-组长审核')
+                                <span class="inline">
+                                <button v-if="laborReport.groupUserId&&!laborReport.is_exportGroup" @click="groupExport(laborReport.id,laborReport.name)" class="btn btn-sm btn-outline-danger">退场</button>
+                                <b v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup" class="text-success">已退场</b>
+                                <button v-else @click="groupClockAudit(laborReport.id)" class="btn btn-sm btn-outline-primary">组长审核</button>
+                                </span>
+                                @else
+                                    <span  v-if="laborReport.groupUserId"><p style="color: green">在场</p></span>
+                                    <span class="text-center"><p style="color: red">组长未审核</p></span>
+                                @endcan
+
                             </td>
                             <td class="text-muted">@{{laborReport.created_at}}</td>
                             <td class="text-muted">@{{laborReport.enterNumber}}</td>
@@ -133,13 +142,44 @@
                             <td class="text-muted">@{{laborReport.verifyAt}}</td>
                             <td class="text-muted"><span v-if="laborReport.verifyPerson">@{{laborReport.verifyPerson}}</span></td>
                             <td class="text-muted">@{{laborReport.checkOutAt}}</td>
-                            <td class="text-muted"><span v-if="laborReport.beginLunch&&laborReport.endLunch&&laborReport.beginLunch<laborReport.endLunch">@{{laborReport.beginLunch}}-@{{laborReport.endLunch}}</span></td>
+                            <td class="text-muted"><span v-if="laborReport.relax_time">@{{laborReport.relax_time}}</span></td>
                             <td class="text-muted"><span v-if="laborReport.onlineDuration">@{{laborReport.onlineDuration}}</span></td>
                             <td><span v-if="laborReport.workingDuration">@{{laborReport.workingDuration}}</span></td>
                         </tr>
                     </table>
                 </div>
             </div>
+            {{--      选择晚饭时长弹框      --}}
+            <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
+                <div class="modal-dialog">
+                    <div class="modal-content">
+                        <div class="modal-header">
+                            <h5 class="modal-title" id="exampleModalLabel">晚餐时长</h5>
+                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                <span aria-hidden="true">&times;</span>
+                            </button>
+                        </div>
+                        <div class="modal-body">
+                            <form>
+                                <div class="form-group">
+                                    <label for="relax_time" class="col-form-label">选择晚饭时长:</label>
+                                    <select class="form-control" id="relax_time" v-model="relax_time">
+                                        <option value="30">30分</option>
+                                        <option value="60">60分</option>
+                                    </select>
+                                </div>
+                            </form>
+                        </div>
+                        <div class="modal-footer">
+                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                <span class="btn btn-block" aria-hidden="true">取消</span>
+                            </button>
+                            <button type="button" class="btn btn-primary" data-dismiss="modal" @click="makeSureRelax_time">确定</button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
         </div>
     </div>
 @endsection
@@ -154,15 +194,18 @@
             data:{
                 laborReports:[
                         @foreach($laborReports as $laborReport)
-                         {id:'{{$laborReport->id}}',enterNumber:'{{$laborReport->enter_number}}'
+                    {id:'{{$laborReport->id}}',enterNumber:'{{$laborReport->enter_number}}'
                         ,@if($laborReport->userWorkgroup)userWorkGroupId:'{{$laborReport->userWorkgroup->id}}', userWorkGroupName:'{{$laborReport->userWorkgroup->name}}',@endif
                         userId:'{{$laborReport->user_id}}',name:'{{$laborReport->name}}'
                         ,mobilePhone:'{{$laborReport->mobile_phone}}',identityNumber:'{{$laborReport->identity_number}}',laborCompany:'{{$laborReport->labor_company}}'
-                        ,checkInAt:'{{$laborReport->check_in_at}}',endLunch:'{{$laborReport->endLunch}}'
-                        ,beginLunch:'{{$laborReport->beginLunch}}',
+                        ,checkInAt:'{{$laborReport->check_in_at}}', relax_time:'{{$laborReport->relax_time}}',
+                        is_exportGroup:'{{$laborReport->is_exportGroup}}',
                         verifyAt:'{{$laborReport->verify_at}}',groupUserId:'{{$laborReport->group_user_id}}',verifyPerson:'{{$laborReport->user['name']}}',
                         checkOutAt:'{{$laborReport->check_out_at}}',onlineDuration:'{{$laborReport->online_duration}}',
-                        workingDuration:'{{$laborReport->working_duration}}', created_at:'{{$laborReport->created_at}}',},
+                        workingDuration:'{{$laborReport->working_duration}}', created_at:'{{$laborReport->created_at}}',
+                        @if($laborReport->userDutyCheck)userDutyCheckId:'{{$laborReport->userDutyCheck->id}}', userDutyCheckVerifyUserId:'{{$laborReport->userDutyCheck->verify_user_id}}'
+                        ,userDutyCheckType:'{{$laborReport->userDutyCheck->type}}',@endif},
+
                     @endforeach
                 ],
                 i:0,
@@ -173,9 +216,23 @@
                 ],
                 filterData:
                     {paginate:'50',created_at_start:'',created_at_end:'',enter_number:'',identity_number:'',user_workgroup_id: '',mobile_phone:''},
-                checkData:[]
+                checkData:[],
+                permittingWorkgroups:{!! $permittingWorkgroups !!},
+                relax_time:'',
             },
             mounted:function(){
+                initEcho();
+                Echo.channel('{{$laravelEchoPrefix}}userDutyCheck').listen('importEvent',(e)=>{
+                    window.location.reload();
+                });
+                this.permittingWorkgroups.forEach(function(workgroup){
+                    Echo.channel('{{$laravelEchoPrefix}}'+workgroup.token).listen('ClockinEvent',(e)=>{
+                        window.location.reload();
+                    });
+                    {{--Echo.channel('{{$laravelEchoPrefix}}'+workgroup.token).listen('ClockoutEvent',(e)=>{--}}
+                    {{--    window.location.reload();--}}
+                    {{--});--}}
+                });
                 this.initInputs();
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
                 $('#list').removeClass('d-none');
@@ -258,6 +315,125 @@
                             "&mobile_phone="+data.mobile_phone;
                     }
                 },
+                //门卫审核
+                guardClockAudit(id,type){
+                    let url='{{url("laborReport/guardClockAudit")}}';
+                    let _this=this;
+                    axios.post(url,{id:id,type:type})
+                        .then(function (response) {
+                            if (!response.data.success){
+                                tempTip.setDuration(3000);
+                                tempTip.show(response.data.data);
+                                return;
+                            }
+                            _this.laborReports.every(function (laborReport) {
+                                if (laborReport.userDutyCheckId==id){
+                                    laborReport.userDutyCheckVerifyUserId=response.data.data;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('审核通过!');
+                                    return false
+                                }
+                                return true;
+                            });
+                        }).catch(function (err) {
+                        tempTip.setDuration(4000);
+                        tempTip.show('审核失败!网络错误:'+err);
+                    });
+                },
+                //组长打卡审核
+                groupClockAudit(id){
+                    let url='{{url("laborReport/groupClockAudit")}}';
+                    let _this=this;
+                    axios.post(url,{id:id})
+                        .then(function (response) {
+                            if (!response.data.success){
+                                tempTip.setDuration(3000);
+                                tempTip.show(response.data.data);
+                                return;
+                            }
+                            _this.laborReports.every(function (laborReport) {
+                                if (laborReport.id==id){
+                                    laborReport.groupUserId=response.data.data.group_user_id;
+                                    laborReport.verifyAt=response.data.data.verify_at;
+                                    laborReport.verifyPerson=response.data.data.verifyPerson;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('审核通过!');
+                                    return false
+                                }
+                                return true;
+                            });
+                        }).catch(function (err) {
+                        tempTip.setDuration(4000);
+                        tempTip.show('审核失败!网络错误:'+err);
+                    });
+                },
+                //退场有晚饭时间
+                makeSureRelax_time(){
+                    let url='{{url("laborReport/groupExportEnsure")}}';
+                    let _this=this;
+                    let id = getSelectId();
+                    axios.post(url,{id:id,relax_time:_this.relax_time})
+                        .then(function (response) {
+                            if (!response.data.success){
+                                tempTip.setDuration(3000);
+                                tempTip.show(response.data.data);
+                                return;
+                            }
+                            _this.laborReports.every(function (laborReport) {
+                                if (laborReport.id==id){
+                                    laborReport.checkOutAt=response.data.data.check_out_at;
+                                    laborReport.workingDuration=response.data.data.working_duration;
+                                    laborReport.relax_time=response.data.data.relax_time;
+                                    laborReport.is_exportGroup=response.data.data.is_exportGroup;
+                                    laborReport.onlineDuration=response.data.data.online_duration;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('退场成功!');
+                                    return false
+                                }
+                                return true;
+                            });
+                        }).catch(function (err) {
+                        tempTip.setDuration(4000);
+                        tempTip.show('退场失败!网络错误:'+err);
+                    });
+                },
+                //组长点击退场,不包含晚饭时长情况
+                groupExport(id,name){
+                    const start = new Date(new Date(new Date().toLocaleDateString()).getTime()+19*60*60*1000);
+                    if(!confirm("确定要临时工“"+name+"“退场吗?")){return}
+                    if (new Date()>start){
+                        if (confirm('是否晚餐')){
+                            selectId(id);
+                            $('#exampleModal').modal('show');
+                            return;
+                        }
+                    }
+                    let url='{{url("laborReport/groupExport")}}';
+                    let _this=this;
+                    axios.post(url,{id:id})
+                        .then(function (response) {
+                            if (!response.data.success){
+                                tempTip.setDuration(3000);
+                                tempTip.show(response.data.data);
+                                return;
+                            }
+                            _this.laborReports.every(function (laborReport) {
+                                if (laborReport.id==id){
+                                    laborReport.checkOutAt=response.data.data.check_out_at;
+                                    laborReport.workingDuration=response.data.data.working_duration;
+                                    laborReport.is_exportGroup=response.data.data.is_exportGroup;
+                                    laborReport.onlineDuration=response.data.data.online_duration;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('退场成功!');
+                                    return false
+                                }
+                                return true;
+                            });
+                        }).catch(function (err) {
+                        tempTip.setDuration(4000);
+                        tempTip.show('退场失败!网络错误:'+err);
+                    });
+                },
                 owner_seek:function (e) {
                     let _this=this;
                     let $val=e.target.value;
@@ -271,5 +447,13 @@
                 },
             },
         });
+
+        let select_id = 0;
+        function selectId(id) {
+            select_id = id;
+        }
+        function getSelectId() {
+            return select_id;
+        }
     </script>
 @endsection

+ 13 - 1
routes/web.php

@@ -164,8 +164,10 @@ Route::group(['prefix'=>'personnel/checking-in/userDutyCheck'],function(){
     Route::get('importAndExportClock','UserDutyCheckController@importAndExportClock');
     //进入打卡接口
     Route::get('clock','UserDutyCheckController@clock');
-    //提交打卡
+    //进出场提交打卡
     Route::post('storeClock','UserDutyCheckController@storeClock');
+    //进出场提交打卡
+    Route::post('importGroupClock','UserDutyCheckController@importGroupClock');
     //去往登记资料页面
     Route::get('createUserDetail/{mobile_phone}','UserDutyCheckController@createUserDetail');
     //去往修改资料页面
@@ -223,6 +225,16 @@ Route::resource('process','ProcessController');
 Route::resource('personnel/laborReport','LaborReportController');
 Route::get('laborReport/export/{id}','LaborReportController@export');
 Route::get('getLaborReport','LaborReportController@getDailyLabor');
+Route::group(['prefix'=>'laborReport'],function(){
+    //门卫打卡审核
+    Route::post('guardClockAudit','LaborReportController@guardClockAudit');
+    //组长打卡审核
+    Route::post('groupClockAudit','LaborReportController@groupClockAudit');
+    //组长点击退场
+    Route::post('groupExport','LaborReportController@groupExport');
+    //组长点击退场,是否包含晚饭时间情况
+    Route::post('groupExportEnsure','LaborReportController@groupExportEnsure');
+});
 
 Route::group(['prefix'=>'personnel'],function(){
     //去往录入补卡

Vissa filer visades inte eftersom för många filer har ändrats