haozi 5 лет назад
Родитель
Сommit
4c667a168b

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

@@ -3,13 +3,17 @@
 namespace App\Http\Controllers;
 
 use App\Exports\Export;
+use App\LaborCompany;
 use App\LaborReport;
 use App\Package;
+use App\UserDutyCheck;
+use App\UserLabor;
 use App\UserWorkgroup;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
 use Maatwebsite\Excel\Facades\Excel;
+use Ramsey\Uuid\Uuid;
 
 class LaborReportController extends Controller
 {
@@ -66,7 +70,18 @@ class LaborReportController extends Controller
             $userWorkGroups=UserWorkgroup::select('id','name')->get();
             return view('personnel.laborReport.index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,'request'=>$request->input()]);
         }
-        $laborReports=LaborReport::with('user_workgroup')->orderBy('id','DESC')->paginate(50);
+        $laborReports=LaborReport::with(['user_workgroup','user'])->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();
+            $laborReport->beginLunch=date('H:i',strtotime($userDutyCheckStart['checked_at']));
+            $laborReport->endLunch=date('H:i',strtotime($userDutyCheckEnd['checked_at']));
+            //$hour=
+        }
+        //dd($laborReports);
         $userWorkGroups=UserWorkgroup::select('id','name')->get();
         return view('personnel/laborReport/index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,]);
 
@@ -97,13 +112,14 @@ class LaborReportController extends Controller
             'labor_company'=>'劳务所',
             'check_in_at'=>'打卡时间',
             'verify_at'=>'审核时间',
+            'group_user_id'=>'审核人',
             'check_out_at'=>'退场时间',
             'online_duration'=>'在线时长',
             'working_duration'=>'本次工作时长',
         ]];
         $list=[];
         for ($i=0; $i<count($id);$i++){
-            $laborReport=LaborReport::with('user_workgroup')->find($id[$i]);
+            $laborReport=LaborReport::with(['user_workgroup','user'])->find($id[$i]);
             $w=[
                 'id'=>isset($laborReport->id)?$laborReport->id:'',
                 'created_at'=>isset($laborReport->created_at)?$laborReport->created_at:'',
@@ -115,6 +131,7 @@ class LaborReportController extends Controller
                 'labor_company'=>isset($laborReport->labor_company)?$laborReport->labor_company:'',
                 'check_in_at'=>isset($laborReport->check_in_at)?$laborReport->check_in_at:'',
                 '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:'',
                 'online_duration'=>isset($laborReport->online_duration)?$laborReport->online_duration:'',
                 'working_duration'=>isset($laborReport->working_duration)?$laborReport->working_duration:'',
@@ -123,70 +140,4 @@ class LaborReportController extends Controller
         }
         return Excel::download(new Export($row,$list),date('YmdHis', time()).'-临时工报表记录单.xlsx');
     }
-
-    /**
-     * Show the form for creating a new resource.
-     *
-     * @return \Illuminate\Http\Response
-     */
-    public function create()
-    {
-        //
-    }
-
-    /**
-     * Store a newly created resource in storage.
-     *
-     * @param  \Illuminate\Http\Request  $request
-     * @return \Illuminate\Http\Response
-     */
-    public function store(Request $request)
-    {
-        //
-    }
-
-    /**
-     * Display the specified resource.
-     *
-     * @param  \App\LaborReport  $laborReport
-     * @return \Illuminate\Http\Response
-     */
-    public function show(LaborReport $laborReport)
-    {
-        //
-    }
-
-    /**
-     * Show the form for editing the specified resource.
-     *
-     * @param  \App\LaborReport  $laborReport
-     * @return \Illuminate\Http\Response
-     */
-    public function edit(LaborReport $laborReport)
-    {
-        //
-    }
-
-    /**
-     * Update the specified resource in storage.
-     *
-     * @param  \Illuminate\Http\Request  $request
-     * @param  \App\LaborReport  $laborReport
-     * @return \Illuminate\Http\Response
-     */
-    public function update(Request $request, LaborReport $laborReport)
-    {
-        //
-    }
-
-    /**
-     * Remove the specified resource from storage.
-     *
-     * @param  \App\LaborReport  $laborReport
-     * @return \Illuminate\Http\Response
-     */
-    public function destroy(LaborReport $laborReport)
-    {
-        //
-    }
 }

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

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Events\TeamAuditEvent;
+use App\LaborReport;
 use App\ProcessDailyParticipant;
 use App\User;
 use App\UserDetail;
@@ -74,19 +75,31 @@ class PersonnelController extends Controller
         if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
         $id=$request->input('id');
         $userDutyCheck=UserDutyCheck::find($id);
+        $check_in_at=$userDutyCheck->checked_at;
         $user=User::find($userDutyCheck->user_id);
         $workgroup=$user->userWorkgroups()->first();
         if ($workgroup){
             if(!Gate::allows($workgroup->name)){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
         }
+
         $type=$request->input('type');
         $userDutyCheck->type=$type;
         $userDutyCheck->group_user_id=Auth::user()['id'];
         $userDutyCheck->update();
+        $laborReport=LaborReport::where('check_in_at',$check_in_at)->first();
+        $this->updateLaborReportData($laborReport,$userDutyCheck);
         $this->log(__METHOD__,"打卡组长审核".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
         event(new TeamAuditEvent($userDutyCheck));
         return ["success"=>true,"data"=>$userDutyCheck->group_user_id];
     }
+    //修改临时工报表数据
+    public function updateLaborReportData($laborReport,$userDutyCheck){
+        $date=date('Y-m-d H:i:s');
+        $laborReport['verify_at']=$date;
+        $laborReport['group_user_id']=$userDutyCheck->group_user_id;
+        $laborReport->update();
+        return;
+    }
 
     //去往任务审核
     public function missionAudit(Request $request){

+ 106 - 0
app/Http/Controllers/QRCodeController.php

@@ -0,0 +1,106 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\UserDetail;
+use App\UserToken;
+use App\UserWorkgroup;
+use App\Warehouse;
+use Endroid\QrCode\QrCode;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Cache;
+use Ramsey\Uuid\Uuid;
+
+class QRCodeController extends Controller
+{
+    public function goGetQRCode(){
+        $warehouses=Warehouse::get();
+        return view("personnel/checking-in/getQRcode",compact('warehouses'));
+    }
+    //二维码刷新时间
+    public function qrCode_refresh_time($userWorkgroups,$beforeTime){
+        $qrCode_refresh=config('hr.qrCode_refresh');
+        if (!Cache::has('last_refresh_date') || Cache::get('last_refresh_date')<date('Y-m-d H:i:s')){
+            $last_refresh_date=date('Y-m-d H:i:s',strtotime('+'.$qrCode_refresh.'second'));
+            Cache::put('last_refresh_date',$last_refresh_date);
+            return $this->flushQRCode($userWorkgroups);
+        }
+        if ($beforeTime==Cache::get('last_refresh_date')){
+            $time=strtotime($beforeTime);
+            //刷新 更新cache
+            $last_refresh_date=date('Y-m-d H:i:s', strtotime('+'.$qrCode_refresh.'second', $time));
+            Cache::put('last_refresh_date',$last_refresh_date);
+            return $this->flushQRCode($userWorkgroups);
+        }
+        //每次刷新都标记一个cache 新建  每次刷新前判断这个标记时间
+        //直接去本地获取二维码
+        return $this->getQRCode($userWorkgroups);
+    }
+    //刷新二维码
+    public function flushQRCode($userWorkgroups){
+        foreach ($userWorkgroups as $userWorkgroup){
+            $qrCode_refresh=config('hr.qrCode_refresh');
+            if ($qrCode_refresh){
+                $date=date('Y-m-d:H:i');
+                $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
+                $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
+            }else{
+                $url=url("personnel/checking-in/userDutyCheck/clock");
+                $url=$url."?userWorkgroupID=".$userWorkgroup->id;
+            }
+            $qrCode=new QrCode($url);
+            if ($userWorkgroup->id){
+                $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
+                $qrCode->writeFile($fileURL);
+                $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png').'?da='.Uuid::uuid1();
+            }
+        }
+        return $userWorkgroups;
+    }
+    //获取二维码
+    public function getQRCode($userWorkgroups){
+        foreach ($userWorkgroups as $userWorkgroup){
+            $qrCode_refresh_everyday=config('hr.qrCode_refresh_everyday');
+            if ($qrCode_refresh_everyday){
+                $date=md5(date('Y-m-d'));
+                $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
+                $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
+            }else{
+                $url=url("personnel/checking-in/userDutyCheck/clock");
+                $url=$url."?userWorkgroupID=".$userWorkgroup->id;
+            }
+            $qrCode=new QrCode($url);
+            if ($userWorkgroup->id){
+                $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
+                if (file_exists($fileURL)){
+                    $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
+                    continue;
+                }
+                $qrCode->writeFile($fileURL);
+                $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
+            }
+        }
+        return $userWorkgroups;
+
+
+    }
+    //进入刷新二维码页面
+    public function refreshQRCode(Request $request){
+        $beforeTime=$request->input('beforeTime');
+        $warehouseId=$request->input('warehouseId');
+        $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
+        $userWorkgroups=$this->qrCode_refresh_time($userWorkgroups,$beforeTime);
+        if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
+        return ['userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),];
+    }
+    //第一次进入二维码显示页面
+    public function QRCode(Request $request){
+        $warehouseId=$request->input('warehouseId');
+        $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
+        $beforeTime=date('Y-m-d H:i:s');
+        $userWorkgroups=$this->qrCode_refresh_time($userWorkgroups,$beforeTime);
+        Cache::forget('last_refresh_date');
+        if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
+        return view('personnel/checking-in/QRcode',['warehouseId'=>$warehouseId,'userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),]);
+    }
+}

+ 19 - 35
app/Http/Controllers/TestController.php

@@ -10,6 +10,7 @@ use App\Events\WmsReceiveNewEvent;
 use App\Http\Controllers\Api\thirdPart\flux\WaybillController;
 use App\Logistic;
 use App\Order;
+use App\Owner;
 use App\Package;
 use App\Rejected;
 use App\RejectedBill;
@@ -136,43 +137,26 @@ class TestController extends Controller
     }
 
     public function test1(){
-        $s="IXCM";
-        $arr=str_split($s);
-        $temp=["I"=>1,"V"=>5,"X"=>10,"L"=>50,"C"=>100,"D"=>500,"M"=>1000];
-        $result=0;
-        for($i=0;$i<count($arr);$i++){
-            if($i!=count($arr)-1){
-                if($arr[$i]=="I"){
-                    if($arr[$i+1]=="V" || $arr[$i+1]=="X"){
-                        $result-=$temp["I"];
-                        continue;
-                    }
-                }
-                if($arr[$i]=="X"){
-                    if($arr[$i+1]=="L" || $arr[$i+1]=="C"){
-                        if($i>0&&$arr[$i-1]=="I"){$result+=$temp[$arr[$i]];continue;}
-                        $result-=$temp["X"];
-                        continue;
-                    }
-                }
-                if($arr[$i]=="C"){
-                    if($arr[$i+1]=="D" || $arr[$i+1]=="M"){
-                        if($i>0&&$arr[$i-1]=="X"){
-                            if ($i>1&&$arr[$i-2]=="I"){
-                                $result-=$temp["C"];
-                                continue;
-                            }
-                            $result+=$temp[$arr[$i]];continue;
-                        }
-                        $result-=$temp["C"];
-                        continue;
-                    }
-                }
+      $as=Owner::get();
+      $aMap=[];
+      $result=[];
+      $sign=true;
+      if (count($as)>0 && $as[0]['type']=="登出")$sign=false;
+      foreach($as as $a){
+        if ($sign){
+            if (!$aMap[$a->id."_".$a->workgroupId]&&$a->type=="登入"){
+                $aMap[$a->id."_".$a->workgroupId]=$a;
+                continue;
+            }
+            if ($a->created_at->format('H:i')<"12:00" && $aMap[$a->created_at->format('Y-m-d')]['created_at'] > $a->created_at)
+            { $aMap[$a->created_at->format('Y-m-d')]=$a;continue;}
+            if ($a->type=='登出' && $aMap[$a->created_at->format('Y-m-d')] && $aMap[$a->created_at->format('Y-m-d')]->workgroup==$a->workgroup){
+                array_push($result,['userWorkGroup'=>["a"=>'bv']]);
+                unset($aMap[$a->created_at->format('Y-m-d')]);
             }
-            $result+=$temp[$arr[$i]];
         }
-        if($result<1 || $result>3999)$result=0;
-        return $result;
+      }
+      $result[""];
     }
     public function test2(){
         $s="VI";

+ 42 - 108
app/Http/Controllers/UserDutyCheckController.php

@@ -16,101 +16,28 @@ use Endroid\QrCode\QrCode;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Date;
 use Illuminate\Support\Facades\Validator;
 use Ramsey\Uuid\Uuid;
 
 class UserDutyCheckController extends Controller
 {
-    public function goGetQRCode(){
-        $warehouses=Warehouse::get();
-        return view("personnel/checking-in/getQRcode",compact('warehouses'));
-    }
-    //二维码刷新时间
-    public function qrCode_refresh_time($userWorkgroups,$beforeTime){
-        $qrCode_refresh=config('hr.qrCode_refresh');
-        if (!Cache::has('last_refresh_date') || Cache::get('last_refresh_date')<date('Y-m-d H:i:s')){
-            $last_refresh_date=date('Y-m-d H:i:s',strtotime('+'.$qrCode_refresh.'second'));
-            Cache::put('last_refresh_date',$last_refresh_date);
-            return $this->flushQRCode($userWorkgroups);
-        }
-        if ($beforeTime==Cache::get('last_refresh_date')){
-            //刷新 更新cache
-            $last_refresh_date=$beforeTime.strtotime('+'.$qrCode_refresh.'second');
-            Cache::put('last_refresh_date',$last_refresh_date);
-            return $this->flushQRCode($userWorkgroups);
-        }
-        //每次刷新都标记一个cache 新建  每次刷新前判断这个标记时间
-        //直接去本地获取二维码
-        return $this->getQRCode($userWorkgroups);
-    }
-    //刷新二维码
-    public function flushQRCode($userWorkgroups){
-        foreach ($userWorkgroups as $userWorkgroup){
-            $url=url("personnel/checking-in/userDutyCheck/clock");
-            $url=$url."?userWorkgroupID=".$userWorkgroup->id;
-            $qrCode=new QrCode($url);
-            if ($userWorkgroup->id){
-                $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
-                $qrCode->writeFile($fileURL);
-                $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
-            }
-        }
-        return $userWorkgroups;
-    }
-    //获取二维码
-    public function getQRCode($userWorkgroups){
-        foreach ($userWorkgroups as $userWorkgroup){
-            $qrCode_refresh_everyday=config('hr.qrCode_refresh_everyday');
-            if ($qrCode_refresh_everyday){
-                $date=md5(date('Y-m-d'));
-                $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
-                $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
-            }else{
-                $url=url("personnel/checking-in/userDutyCheck/clock");
-                $url=$url."?userWorkgroupID=".$userWorkgroup->id;
-            }
-            $qrCode=new QrCode($url);
-            if ($userWorkgroup->id){
-                $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
-                if (file_exists($fileURL)){
-                    $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
-                    continue;
-                }
-                $qrCode->writeFile($fileURL);
-                $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
-            }
-        }
-        return $userWorkgroups;
-
-
-    }
-    //进入刷新二维码页面
-    public function refreshQRCode(Request $request){
-        $beforeTime=$request->input('beforeTime');
-        $warehouseId=$request->input('warehouseId');
-        $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
-        $userWorkgroups=$this->qrCode_refresh_time($userWorkgroups,$beforeTime);
-        if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
-        return ['userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),];
-    }
-    //第一次进入二维码显示页面
-    public function QRCode(Request $request){
-        $warehouseId=$request->input('warehouseId');
-        $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
-        $beforeTime=date('Y-m-d H:i:s');
-        $userWorkgroups=$this->qrCode_refresh_time($userWorkgroups,$beforeTime);
-        if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
-        return view('personnel/checking-in/QRcode',['warehouseId'=>$warehouseId,'userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),]);
-    }
     //校验二维码进入打卡页面
     public function clock(Request $request){
         $userWorkgroupID=$request->input('userWorkgroupID');
         $qrCode_refresh_everyday=config('hr.qrCode_refresh_everyday');
+        $qrCode_refresh=config('hr.qrCode_refresh');
         if ($qrCode_refresh_everyday){
             $key=$request->input('key');
-            if (!$key) return "二维码失效!";
+            if (!$key) return view('exception.404',['error'=>'二维码失效!']);
             $date=md5(date('Y-m-d'));
-            if ($key!=$date) return "二维码失效!";
+            if ($key!=$date) return view('exception.404',['error'=>'二维码失效!']);
+        }
+        if ($qrCode_refresh){
+            $key=$request->input('key');
+            if (!$key) return view('exception.404',['error'=>'二维码失效!']);
+            $date=date('Y-m-d:H:i');
+            if ($key!=$date) return view('exception.404',['error'=>'二维码失效!']);
         }
         $userLaborToken=$request->cookie('userLaborToken');
         if ($userLaborToken && Cache::has('tokenStr_'.$userLaborToken)) {
@@ -121,7 +48,7 @@ class UserDutyCheckController extends Controller
                 $user=UserToken::getUser($userLaborToken);
                 $user->userWorkgroups()->sync([$userWorkgroupID]);
             }
-            $userDutyCheck=$this->dutyCheck($userDetail->user_id);
+            $userDutyCheck=$this->dutyCheck($userDetail->user_id,$userWorkgroupID);
             if ($userDutyCheck&&$userDutyCheck->error)return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
             if (!$userDutyCheck)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
             $userWorkgroups=$userDetail->user->userWorkgroups();
@@ -143,22 +70,33 @@ class UserDutyCheckController extends Controller
         $user=User::find($userDetail->user_id);
         if (Cache::has('tokenUser_'.$user->id))return "<h1 style='color: red;text-align:center'>请使用原有设备进行打卡,如无法使用原有设备请联系管理人员解绑设备!</h1>";
         if ($userWorkgroupID)$user->userWorkgroups()->sync([$userWorkgroupID]);
+
         $userDutyCheckOld=UserDutyCheck::where('user_id',$userDetail->user_id)->orderBy('checked_at','DESC')->limit(10)->first();
         $date=date('Y-m-d H:i:s');
-        $lastDate=Carbon::parse($userDutyCheckOld->checked_at);
+        $lastDate=Carbon::parse($userDutyCheckOld['checked_at']);
         $thisDate=Carbon::parse($date);
         $diffDate=$thisDate->diffInMinutes($lastDate);
+        $dateNow=Carbon::now()->format('Y-m-d');
         //七天未登录从新选择劳务所
         if ($diffDate>7*1440){
             return redirect('personnel/checking-in/userDutyCheck/updateUserDetail/'.$mobile_phone)->with("userWorkgroupID",$userWorkgroupID);
         }
-        $userDutyCheck=$this->dutyCheck($userDetail->user_id);
-        var_dump($userDutyCheck->type);
-        if ($userDutyCheck->type=='登入'){
-            $this->createLaborReportData($userDetail,$userWorkgroupID,$userDutyCheck);
-        }
-        if ($userDutyCheck->type=='登出'){
-            $this->updateLaborReportData($userDetail,$userDutyCheck);
+        $userDutyCheck=$this->dutyCheck($userDetail->user_id,$userWorkgroupID);
+        //24小时之内情况
+//        if($diffDate<1440){
+//            $laborReport=LaborReport::where('user_workgroup_id',$userWorkgroupID)->where('created_at','like',$dateNow."%")->where('user_id',$userDetail->user_id)->first();
+//            if (!$laborReport&&$userDutyCheckOld->type=='登出'&&$userDutyCheck->type=='登入'){
+//                    $this->createLaborReportData($userDetail,$userWorkgroupID,$userDutyCheck);
+//                }else if ($laborReport&&$userDutyCheck->type=='登出'){
+//                    $this->updateLaborReportData($laborReport,$userDutyCheck);
+//                }
+//            }
+        //正常情况
+        $laborReport=LaborReport::where('user_workgroup_id',$userWorkgroupID)->where('created_at','like',$dateNow."%")->where('user_id',$userDetail->user_id)->first();
+        if(!$laborReport&&$userDutyCheck->type=='登入'){
+             $this->createLaborReportData($userDetail,$userWorkgroupID,$userDutyCheck);
+        }else if ($laborReport&&$userDutyCheck->type=='登出'){
+             $this->updateLaborReportData($laborReport,$userDutyCheck);
         }
         if ($userDutyCheck&&$userDutyCheck->error)return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
         if (!$userDutyCheck)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
@@ -195,7 +133,7 @@ class UserDutyCheckController extends Controller
             'user_id'=>$user->id,
             'labor_company_id'=>$labor_company_id,
         ]);
-        $userDutyCheck=$this->dutyCheck($user->id);
+        $userDutyCheck=$this->dutyCheck($user->id,$userWorkgroupID);
         //添加临时工报表数据
         $this->createLaborReportData($userDetail,$userWorkgroupID,$userDutyCheck);
         if ($userDutyCheck&&$userDutyCheck->error)return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
@@ -207,8 +145,6 @@ class UserDutyCheckController extends Controller
         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])
             ->cookie('userLaborToken',$userLaborToken,config('users.token_check_in_expire_minutes'),'/');
     }
-
-
     //提交登记资料
     public  function storeUserDetail(Request $request){
         $this->validator($request)->validate();
@@ -238,7 +174,7 @@ class UserDutyCheckController extends Controller
             'labor_company_id'=>$labor_company_id,
         ]);
         $userLabor->save();
-        $userDutyCheck=$this->dutyCheck($user->id);
+        $userDutyCheck=$this->dutyCheck($user->id,$userWorkgroupID);
         $this->createLaborReportData($userDetail,$userWorkgroupID,$userDutyCheck);
         if ($userDutyCheck&&$userDutyCheck->error)return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
         if (!$userDutyCheck)return "<h1 style='color: red;text-align:center'>打卡异常,请联系相关人员!</h1>";
@@ -251,7 +187,7 @@ class UserDutyCheckController extends Controller
     }
 
     //根据用户提交打卡记录
-    public function dutyCheck($user_id){
+    public function dutyCheck($user_id,$workgroup_id){
         $userDutyCheckOld=UserDutyCheck::where('user_id',$user_id)->orderBy('checked_at','DESC')->limit(10)->first();
         $date=date('Y-m-d H:i:s');
         $userDutyCheck=new UserDutyCheck([
@@ -259,6 +195,7 @@ class UserDutyCheckController extends Controller
             'checked_at'=>$date,
             'source'=>'正常',
             'verify_user_id'=>'',
+            'workgroup_id'=>$workgroup_id,
         ]);
         if (!$userDutyCheckOld){
             $userDutyCheck->type="登入";
@@ -276,7 +213,9 @@ class UserDutyCheckController extends Controller
             return $userDutyCheck;
         }
         if ($diffDate>=1380&&$diffDate<7*1440){
+            $userDutyCheck->type="登入";
             $userDutyCheck->verify_user_id=0;
+            $userDutyCheck->save();
             return $userDutyCheck;
         }
         if($diffDate<=5){
@@ -337,19 +276,14 @@ class UserDutyCheckController extends Controller
         return;
     }
     //修改临时工报表数据
-    public function updateLaborReportData($userDetail,$userDutyCheck){
-        $check_in_at=UserDutyCheck::where('user_id',$userDetail->user_id)->where('type','登入')->value('checked_at');
-        var_dump($check_in_at);
-        $laborReport=LaborReport::where('check_in_at',$check_in_at)->first();
-        var_dump($laborReport);
-        $laborReport['check_out_at']=$userDutyCheck['checked_at'];
-        var_dump($laborReport['check_out_at']);
+    public function updateLaborReportData($laborReport,$userDutyCheck){
+        $check_in_at=$laborReport['check_in_at'];
+        $laborReport->check_out_at=$userDutyCheck->checked_at;
         $checkInDate=Carbon::parse($check_in_at);
         $checkOutDate=Carbon::parse($userDutyCheck->checked_at);
-        $diffDate=$checkOutDate->diffInHours($checkInDate);
-        dd($diffDate);
-        $laborReport['working_duration']=$diffDate;
-        $laborReport->save();
+        $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
+        $laborReport['online_duration']=$hour;
+        $laborReport->update();
         return;
     }
 

+ 3 - 0
app/LaborReport.php

@@ -19,4 +19,7 @@ class LaborReport extends Model
     public function user_workgroup(){
         return $this->belongsTo('App\UserWorkgroup','user_workgroup_id','id');
     }
+    public function user(){
+        return $this->belongsTo('App\User','group_user_id','id');
+    }
 }

+ 1 - 1
app/UserDutyCheck.php

@@ -11,7 +11,7 @@ class UserDutyCheck extends Model
     public $timestamps=false;
 
     protected $fillable=[
-        'user_id','checked_at','confirmed_by','type','source'
+        'user_id','checked_at','confirmed_by','type','source','workgroup_id'
     ];
 
     public function userDetail(){

+ 2 - 1
database/migrations/2020_05_22_114410_create_labor_reports_table.php

@@ -15,7 +15,7 @@ class CreateLaborReportsTable extends Migration
     {
         Schema::create('labor_reports', function (Blueprint $table) {
             $table->bigIncrements('id');
-            $table->string('enter_number')->index()->comment('进编号');
+            $table->string('enter_number')->index()->comment('进编号');
             $table->bigInteger('user_workgroup_id')->index()->comment('外键用户组');
             $table->bigInteger('user_id')->index()->comment('外键用户');
             $table->string('name')->index()->comment('临时工名称');
@@ -24,6 +24,7 @@ class CreateLaborReportsTable extends Migration
             $table->string('labor_company')->nullable()->comment('劳务所');
             $table->timestamp('check_in_at')->nullable()->comment('打卡时间');
             $table->timestamp('verify_at')->nullable()->comment('审核时间');
+            $table->bigInteger('group_user_id')->nullable()->index()->comment('审核人id');
             $table->timestamp('check_out_at')->nullable()->comment('退场时间');
             $table->decimal('online_duration')->nullable()->comment('在线时长(小时数)');
             $table->decimal('working_duration')->nullable()->comment('工作时长(小时数)');

+ 32 - 0
database/migrations/2020_06_02_130804_change_user_duty_check.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeUserDutyCheck extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('user_duty_checks', function (Blueprint $table) {
+            $table->bigInteger('workgroup_id')->comment('外键到工作组');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('user_duty_checks', function (Blueprint $table) {
+            $table->dropColumn('workgroup_id');
+        });
+    }
+}

+ 0 - 3
laravel-echo-server.lock

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

BIN
public/images/QRCodeIMG/1.png


BIN
public/images/QRCodeIMG/2.png


BIN
public/images/QRCodeIMG/3.png


+ 1 - 1
resources/views/maintenance/userLabor/edit.blade.php

@@ -79,7 +79,7 @@
                     @enderror
                 </div>
                 <div class="form-group row pt-3">
-                    <button type="submit" class="col-7 offset-2 btn btn-success">提交更改</button>
+                    <button type="submit" class="col-7 offset-3 btn btn-success">提交更改</button>
                 </div>
             </form>
         </div>

+ 25 - 36
resources/views/personnel/checking-in/QRcode.blade.php

@@ -33,6 +33,16 @@
 
     <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:{
@@ -42,45 +52,24 @@
                     @endforeach
                 ],
 
-                last_refresh_date:'{!!$last_refresh_date!!}',
-                warehouseId:'{!! $warehouseId!!}',
+                last_refresh_date:'{{$last_refresh_date}}',
+                warehouseId:'{{$warehouseId}}',
             },
             mounted(){
                 let _this=this;
-                {{--let refreshQRCode=function(){--}}
-                {{--    axios.post('{{url('personnel/checking-in/userDutyCheck/refreshQRCode')}}',{beforeTime:_this.last_refresh_date,warehouseId:_this.warehouseId})--}}
-                {{--        .then(function (response) {--}}
-                {{--            //console.log(response.data.last_refresh_date);--}}
-                {{--            _this.userWorkgroups=response.data.userWorkgroups;--}}
-                {{--            _this.last_refresh_date=response.data.last_refresh_date;--}}
-                {{--            //setTimeout(refreshQRCode,_this.last_refresh_date);--}}
-                {{--        }).catch(function (err) {--}}
-                {{--        return err;--}}
-                {{--    });--}}
-                {{--};--}}
-
-
-
-
-                setInterval(()=>{
-                {{--    let _this=this;--}}
-                {{--    axios.post('{{url('personnel/checking-in/userDutyCheck/refreshQRCode')}}',{beforeTime:_this.last_refresh_date,warehouseId:_this.warehouseId})--}}
-                {{--        .then(function (response) {--}}
-                {{--                _this.userWorkgroups=response.data.userWorkgroups;--}}
-                {{--        }).catch(function (err) {--}}
-                {{--        return err;--}}
-                {{--    });--}}
-                axios.post('{{url('personnel/checking-in/userDutyCheck/refreshQRCode')}}',{beforeTime:_this.last_refresh_date,warehouseId:_this.warehouseId})
-                    .then(function (response) {
-                        //console.log(response.data.last_refresh_date);
-                        _this.userWorkgroups=response.data.userWorkgroups;
-                        _this.last_refresh_date=response.data.last_refresh_date;
-                        //setTimeout(refreshQRCode,_this.last_refresh_date);
-                    }).catch(function (err) {
-                    return err;
-                });
-                },60*1000)
-
+                let refreshQRCode=function(){
+                    axios.post('{{url('refreshQRCode')}}',{beforeTime:_this.last_refresh_date,warehouseId:_this.warehouseId})
+                        .then(function (response) {
+                            _this.userWorkgroups=response.data.userWorkgroups;
+                            _this.last_refresh_date=response.data.last_refresh_date;
+                            setTimeout(refreshQRCode,computeDiffMicroTime_fromNow(_this.last_refresh_date));
+                        }).catch(function (err) {
+                        setTimeout(refreshQRCode,computeDiffMicroTime_fromNow(_this.last_refresh_date));
+                        tempTip.setDuration(4000);
+                        tempTip.show(err);
+                    });
+                };
+                refreshQRCode();
             }
         });
     </script>

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

@@ -201,33 +201,33 @@
                                 tempTip.show(response.data.data);
                                 return;
                             }
-                                _this.userDutyCheckNows.every(function (userDutyCheck) {
-                                    if (userDutyCheck.id==id){
-                                        userDutyCheck.verify_user_id=response.data.data;
-                                        tempTip.setDuration(3000);
-                                        tempTip.showSuccess('审核通过!');
-                                        return false
-                                    }
-                                    return true;
-                                });
-                                _this.userDutyCheckBefores.every(function (userDutyCheck) {
-                                    if (userDutyCheck.id==id){
-                                        userDutyCheck.verify_user_id=response.data.data;
-                                        tempTip.setDuration(3000);
-                                        tempTip.showSuccess('审核通过!');
-                                        return false
-                                    }
-                                    return true;
-                                });
-                                _this.userDutyCheckYesterdays.every(function (userDutyCheck) {
-                                    if (userDutyCheck.id==id){
-                                        userDutyCheck.verify_user_id=response.data.data;
-                                        tempTip.setDuration(3000);
-                                        tempTip.showSuccess('审核通过!');
-                                        return false
-                                    }
-                                    return true;
-                                });
+                            _this.userDutyCheckNows.every(function (userDutyCheck) {
+                                if (userDutyCheck.id==id){
+                                    userDutyCheck.verify_user_id=response.data.data;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('审核通过!');
+                                    return false
+                                }
+                                return true;
+                            });
+                            _this.userDutyCheckBefores.every(function (userDutyCheck) {
+                                if (userDutyCheck.id==id){
+                                    userDutyCheck.verify_user_id=response.data.data;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('审核通过!');
+                                    return false
+                                }
+                                return true;
+                            });
+                            _this.userDutyCheckYesterdays.every(function (userDutyCheck) {
+                                if (userDutyCheck.id==id){
+                                    userDutyCheck.verify_user_id=response.data.data;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('审核通过!');
+                                    return false
+                                }
+                                return true;
+                            });
                         }).catch(function (err) {
                         tempTip.setDuration(4000);
                         tempTip.show('审核失败!网络错误:'+err);
@@ -243,33 +243,33 @@
                                 tempTip.show(response.data.data);
                                 return;
                             }
-                                _this.userDutyCheckNows.every(function (userDutyCheck) {
-                                    if (userDutyCheck.id==id){
-                                        userDutyCheck.group_user_id=response.data.data;
-                                        tempTip.setDuration(3000);
-                                        tempTip.showSuccess('审核通过!');
-                                        return false
-                                    }
-                                    return true;
-                                });
-                                _this.userDutyCheckBefores.every(function (userDutyCheck) {
-                                    if (userDutyCheck.id==id){
-                                        userDutyCheck.group_user_id=response.data.data;
-                                        tempTip.setDuration(3000);
-                                        tempTip.showSuccess('审核通过!');
-                                        return false
-                                    }
-                                    return true;
-                                });
-                                _this.userDutyCheckYesterdays.every(function (userDutyCheck) {
-                                    if (userDutyCheck.id==id){
-                                        userDutyCheck.group_user_id=response.data.data;
-                                        tempTip.setDuration(3000);
-                                        tempTip.showSuccess('审核通过!');
-                                        return false
-                                    }
-                                    return true;
-                                });
+                            _this.userDutyCheckNows.every(function (userDutyCheck) {
+                                if (userDutyCheck.id==id){
+                                    userDutyCheck.group_user_id=response.data.data;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('审核通过!');
+                                    return false
+                                }
+                                return true;
+                            });
+                            _this.userDutyCheckBefores.every(function (userDutyCheck) {
+                                if (userDutyCheck.id==id){
+                                    userDutyCheck.group_user_id=response.data.data;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('审核通过!');
+                                    return false
+                                }
+                                return true;
+                            });
+                            _this.userDutyCheckYesterdays.every(function (userDutyCheck) {
+                                if (userDutyCheck.id==id){
+                                    userDutyCheck.group_user_id=response.data.data;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('审核通过!');
+                                    return false
+                                }
+                                return true;
+                            });
                         }).catch(function (err) {
                         tempTip.setDuration(4000);
                         tempTip.show('审核失败!网络错误:'+err);
@@ -279,30 +279,30 @@
                     let _this=this;
                     axios.post('{{url("personnel/checking-in/isException")}}',{id:id,user_id:user_id,checked_at:checked_at,type:type})
                         .then(function (response) {
-                                _this.userDutyCheckYesterdays.every(function (userDutyCheck) {
-                                    if (userDutyCheck.id==id){
-                                        userDutyCheck.exception=response.data.exception;
-                                        userDutyCheck.duration_man_hour=response.data.duration_man_hour;
-                                        return false
-                                    }
-                                    return true;
-                                });
-                                _this.userDutyCheckBefores.every(function (userDutyCheck) {
-                                    if (userDutyCheck.id==id){
-                                        userDutyCheck.exception=response.data.exception;
-                                        userDutyCheck.duration_man_hour=response.data.duration_man_hour;
-                                        return false
-                                    }
-                                    return true;
-                                });
-                                _this.userDutyCheckNows.every(function (userDutyCheck) {
-                                    if (userDutyCheck.id==id){
-                                        userDutyCheck.exception=response.data.exception;
-                                        userDutyCheck.duration_man_hour=response.data.duration_man_hour;
-                                        return false
-                                    }
-                                    return true;
-                                });
+                            _this.userDutyCheckYesterdays.every(function (userDutyCheck) {
+                                if (userDutyCheck.id==id){
+                                    userDutyCheck.exception=response.data.exception;
+                                    userDutyCheck.duration_man_hour=response.data.duration_man_hour;
+                                    return false
+                                }
+                                return true;
+                            });
+                            _this.userDutyCheckBefores.every(function (userDutyCheck) {
+                                if (userDutyCheck.id==id){
+                                    userDutyCheck.exception=response.data.exception;
+                                    userDutyCheck.duration_man_hour=response.data.duration_man_hour;
+                                    return false
+                                }
+                                return true;
+                            });
+                            _this.userDutyCheckNows.every(function (userDutyCheck) {
+                                if (userDutyCheck.id==id){
+                                    userDutyCheck.exception=response.data.exception;
+                                    userDutyCheck.duration_man_hour=response.data.duration_man_hour;
+                                    return false
+                                }
+                                return true;
+                            });
                         }).catch(function (err) {
                         tempTip.setDuration(4000);
                         tempTip.show('校验失败!网络错误:'+err);

+ 1 - 1
resources/views/personnel/checking-in/getQRcode.blade.php

@@ -9,7 +9,7 @@
         <div class="card col-md-10 offset-md-1 p-0">
             <div class="card-body">
                 <div class="list-group list-group-horizontal-lg align-content-center" >
-                    <a target="_blank"  class="btn list-group-item col-md-2" type="button" :href="('{{url('personnel/checking-in/userDutyCheck/QRCode?warehouseId=')}}'+warehouse.id)"  :class="warehouse==checkedWarehouse ? 'btn-primary' : 'btn-outline-primary'"
+                    <a target="_blank"  class="btn list-group-item col-md-2" type="button" :href="('{{url('QRCode?warehouseId=')}}'+warehouse.id)"  :class="warehouse==checkedWarehouse ? 'btn-primary' : 'btn-outline-primary'"
                        v-for="warehouse in warehouses">@{{ warehouse.name }}</a>
                 </div>
             </div>

+ 1 - 1
resources/views/personnel/checking-in/menuChecking-in.blade.php

@@ -3,7 +3,7 @@
         <ul class="nav nav-pills">
                 @can('人事管理-获取二维码')
                 <li class="nav-item">
-                    <a class="nav-link text-dark" href="{{url('personnel/checking-in/userDutyCheck/goGetQRCode')}}" :class="{active:isActive('goGetQRCode',4)}">打卡</a>
+                    <a class="nav-link text-dark" href="{{url('goGetQRCode')}}" :class="{active:isActive('goGetQRCode',4)}">打卡</a>
                 </li>@endcan
                 @can('人事管理-录入补卡')
                 <li class="nav-item">

+ 13 - 5
resources/views/personnel/laborReport/index.blade.php

@@ -125,9 +125,9 @@
                             <td>@{{laborReport.laborCompany}}</td>
                             <td>@{{laborReport.checkInAt}}</td>
                             <td>@{{laborReport.verifyAt}}</td>
-                            <td></td>
+                            <td v-if="laborReport.verifyPerson">@{{laborReport.verifyPerson}}</td>
                             <td class="text-muted">@{{laborReport.checkOutAt}}</td>
-                            <td></td>
+                            <td v-if="laborReport.beginLunch!=laborReport.endLunch">@{{laborReport.beginLunch}}-@{{laborReport.endLunch}}</td>
                             <td class="text-muted">@{{laborReport.onlineDuration}}</td>
                             <td class="text-muted">@{{laborReport.workingDuration}}</td>
                         </tr>
@@ -148,11 +148,13 @@
             data:{
                 laborReports:[
                         @foreach($laborReports as $laborReport)
-                    {id:'{{$laborReport->id}}',enterNumber:'{{$laborReport->enter_number}}'
+                         {id:'{{$laborReport->id}}',enterNumber:'{{$laborReport->enter_number}}',userWorkGroupId:'{{$laborReport->user_workgroup->id}}'
                         ,userWorkGroupName:'{{$laborReport->user_workgroup->name}}',userId:'{{$laborReport->user_id}}',name:'{{$laborReport->name}}'
                         ,mobilePhone:'{{$laborReport->mobile_phone}}',identityNumber:'{{$laborReport->identity_number}}',laborCompany:'{{$laborReport->labor_company}}'
-                        ,checkInAt:'{{$laborReport->check_in_at}}',
-                        verifyAt:'{{$laborReport->verify_at}}', checkOutAt:'{{$laborReport->check_out_at}}',onlineDuration:'{{$laborReport->online_duration}}',
+                        ,checkInAt:'{{$laborReport->check_in_at}}',endLunch:'{{$laborReport->endLunch}}'
+                        ,beginLunch:'{{$laborReport->beginLunch}}',
+                        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}}',},
                     @endforeach
                 ],
@@ -170,6 +172,12 @@
                 this.initInputs();
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
                 $('#list').removeClass('d-none');
+                axios.get("{{url('/getLaborReport')}}")
+                    .then(function (response) {
+
+                    }).catch(function (err) {
+                    console.log(err)
+                });
             },
             watch:{
                 checkData:{

+ 11 - 7
routes/web.php

@@ -124,22 +124,25 @@ Route::resource('store/fast','StoreController');
 Route::resource('store/storeItem','StoreItemsController');
 
 
+/**
+ *二维码
+ */
+//进入打卡
+Route::get('goGetQRCode','QRCodeController@goGetQRCode');
+//进入二维码显示页面
+Route::get('QRCode','QRCodeController@QRCode');
+//获取刷新二维码
+Route::post('refreshQRCode','QRCodeController@refreshQRCode');
 /**
  *  用户打卡
  */
 Route::group(['prefix'=>'personnel/checking-in/userDutyCheck'],function(){
-    //进入获取当日二维码
-    Route::get('goGetQRCode','UserDutyCheckController@goGetQRCode');
-    //获取刷新二维码
-    Route::post('refreshQRCode','UserDutyCheckController@refreshQRCode');
-    //进入二维码显示页面
-    Route::get('QRCode','UserDutyCheckController@QRCode');
     //进入打卡接口
     Route::get('clock','UserDutyCheckController@clock');
     //提交打卡
     Route::post('storeClock','UserDutyCheckController@storeClock');
     //去往登记资料页面
-    Route::post('createUserDetail/{mobile_phone}','UserDutyCheckController@createUserDetail');
+    Route::get('createUserDetail/{mobile_phone}','UserDutyCheckController@createUserDetail');
     //去往修改资料页面
     Route::get('updateUserDetail/{mobile_phone}','UserDutyCheckController@updateUserDetail');
     //提交登记资料
@@ -193,6 +196,7 @@ Route::resource('process','ProcessController');
 //临时工报表界面
 Route::resource('personnel/laborReport','LaborReportController');
 Route::get('laborReport/export/{id}','LaborReportController@export');
+Route::get('getLaborReport','LaborReportController@getDailyLabor');
 
 Route::group(['prefix'=>'personnel'],function(){
     //去往录入补卡