Selaa lähdekoodia

人事进出场打卡,进组打卡相关逻辑

haozi 5 vuotta sitten
vanhempi
commit
23cab6757a
25 muutettua tiedostoa jossa 837 lisäystä ja 247 poistoa
  1. 37 0
      app/Events/GuardAuditEvent.php
  2. 1 0
      app/Http/Controllers/LaborReportController.php
  3. 10 9
      app/Http/Controllers/PersonnelController.php
  4. 180 52
      app/Http/Controllers/QRCodeController.php
  5. 189 87
      app/Http/Controllers/UserDutyCheckController.php
  6. 6 6
      app/LaborReport.php
  7. 1 1
      database/migrations/2020_05_22_114410_create_labor_reports_table.php
  8. 1 1
      database/migrations/2020_05_22_172739_create_labor_companies_table.php
  9. 35 0
      database/migrations/2020_07_01_175324_change_user_duty_check_tables.php
  10. 37 0
      database/migrations/2020_07_02_142427_change_labor_reports_tables.php
  11. BIN
      public/images/QRCodeIMG/10.png
  12. BIN
      public/images/QRCodeIMG/4.png
  13. BIN
      public/images/QRCodeIMG/5.png
  14. 1 1
      resources/views/layouts/menu.blade.php
  15. 45 44
      resources/views/personnel/checking-in/QRcode.blade.php
  16. 11 11
      resources/views/personnel/checking-in/clockAudit.blade.php
  17. 13 7
      resources/views/personnel/checking-in/createUserDetail.blade.php
  18. 4 2
      resources/views/personnel/checking-in/getQRcode.blade.php
  19. 35 0
      resources/views/personnel/checking-in/getUserWorkGroups.blade.php
  20. 25 0
      resources/views/personnel/checking-in/importAndExportClock.blade.php
  21. 75 0
      resources/views/personnel/checking-in/importAndExportQRCode.blade.php
  22. 73 0
      resources/views/personnel/checking-in/importAndExportSuccess.blade.php
  23. 20 4
      resources/views/personnel/checking-in/updateUserDetail.blade.php
  24. 30 21
      resources/views/personnel/laborReport/index.blade.php
  25. 8 1
      routes/web.php

+ 37 - 0
app/Events/GuardAuditEvent.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 GuardAuditEvent 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');
+    }
+
+}

+ 1 - 0
app/Http/Controllers/LaborReportController.php

@@ -85,6 +85,7 @@ class LaborReportController extends Controller
             }
         }
         $userWorkGroups=UserWorkgroup::select('id','name')->get();
+//        dd($userWorkGroups,$laborReports);
         return view('personnel/laborReport/index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,]);
 
     }

+ 10 - 9
app/Http/Controllers/PersonnelController.php

@@ -88,10 +88,10 @@ class PersonnelController extends Controller
         $userDutyCheck->type=$type;
         $userDutyCheck->group_user_id=Auth::user()['id'];
         $userDutyCheck->update();
-        $checkInDate=Carbon::parse($userDutyCheck->checked_at)->format('Y-m-d');
-        $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('user_workgroup_id',$workgroup->id)->where('created_at','like',$checkInDate."%")->first();
+//        $checkInDate=Carbon::parse($userDutyCheck->checked_at)->format('Y-m-d');where('created_at','like',$checkInDate."%")
+        $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('user_workgroup_id',$workgroup->id)->orderBy('id','desc')->first();
         if (!$laborReport){
-            $laborReportNew=LaborReport::createLaborReportData($userDutyCheck->user_id,$userDutyCheck->workgroup_id,$userDutyCheck);
+            $laborReportNew=LaborReport::createLaborReportData($userDutyCheck);
             $this->log(__METHOD__,"提交临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck->user_id,$userDutyCheck->workgroup_id,$userDutyCheck]));
             //验证五分钟之内重新换组情况
             $checkInDateNow=Carbon::parse($laborReportNew->created_at)->format('Y-m-d H');
@@ -201,12 +201,8 @@ class PersonnelController extends Controller
         }else if ($userDutyCheck&&$userDutyCheck->type=='登出'){
             event(new ClockoutEvent($userDutyCheck));
         }
-        $checkInDate=Carbon::parse($userDutyCheck->checked_at)->format('Y-m-d');
-        $laborReport=LaborReport::where('user_workgroup_id',$userWorkgroupID)->where('check_in_at','like',$checkInDate."%")->where('user_id',$user_id)->first();
-        if (!$laborReport){
-            $laborReportNew=LaborReport::createLaborReportData($userDutyCheck->user_id,$userDutyCheck->workgroup_id,$userDutyCheck);
-            $this->log(__METHOD__,"提交临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck->user_id,$userDutyCheck->workgroup_id,$userDutyCheck]));
-        }else if ($laborReport&&$userDutyCheck->type){
+        $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]));
         }
@@ -250,6 +246,11 @@ class PersonnelController extends Controller
         $userDutyCheck=UserDutyCheck::find($userDutyCheckId);
         $userDutyCheck->type=$userDutyCheckType;
         $userDutyCheck->update();
+        $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]));
+        }
         $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>true,'data'=>$userDutyCheck];
     }

+ 180 - 52
app/Http/Controllers/QRCodeController.php

@@ -3,106 +3,234 @@
 namespace App\Http\Controllers;
 
 use App\UserDetail;
+use App\UserDutyCheck;
 use App\UserToken;
 use App\UserWorkgroup;
 use App\Warehouse;
 use Endroid\QrCode\QrCode;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Cache;
+use mysql_xdevapi\Collection;
 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){
+
+    //获取进出场二维码
+    public function getImportAndExportQRCode($importAndExportQRCodes){
+            foreach ($importAndExportQRCodes as $importAndExportQRCode){
+                $qrCode_refresh_everyday=config('hr.qrCode_refresh_everyday');
+                if ($qrCode_refresh_everyday){
+                    $date=md5(date('Y-m-d'));
+                    $url=url("personnel/checking-in/userDutyCheck/importAndExportClock?key=").$date;
+                    $url=$url."&&importAndExportQRCodeType=".$importAndExportQRCode->type;
+                }else{
+                    $url=url("personnel/checking-in/userDutyCheck/importAndExportClock");
+                    $url=$url."?importAndExportQRCodeType=".$importAndExportQRCode->type;
+                }
+                $qrCode=new QrCode($url);
+                if ($importAndExportQRCode->type){
+                    $fileURL=base_path('public/images/QRCodeIMG/'.$importAndExportQRCode->type.'.png');
+                    if (file_exists($fileURL)){
+                        $importAndExportQRCode->url=url('images/QRCodeIMG/'.$importAndExportQRCode->type.'.png');
+                        continue;
+                    }
+                    $qrCode->writeFile($fileURL);
+                    $importAndExportQRCode->url=url('images/QRCodeIMG/'.$importAndExportQRCode->type.'.png');
+                }
+            }
+        return $importAndExportQRCodes;
+    }
+
+    //第一次进入进出场二维码显示页面
+    public function importAndExportQRCode(){
+        $importAndExportQRCodes=[];
+        $userDutyCheckOne=new UserDutyCheck([
+            'source'=>'进场',
+            'type'=>'import',
+        ]);
+        $userDutyCheck=new UserDutyCheck([
+            'source'=>'出场',
+            'type'=>'export',
+        ]);
+        array_push($importAndExportQRCodes,$userDutyCheckOne,$userDutyCheck);
+        $beforeTime=date('Y-m-d H:i:s');
+        $importAndExportQRCodes=$this->qrCode_refresh_time($importAndExportQRCodes,$beforeTime);
+        Cache::forget('last_refresh_date');
+        return view('personnel/checking-in/importAndExportQRCode',['importAndExportQRCodes'=>$importAndExportQRCodes,'last_refresh_date'=>Cache::get('last_refresh_date'),]);
+
+    }
+    //进出场二维码刷新时间
+    public function qrCode_refresh_time($importAndExportQRCodes,$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);
+            return $this->flushQRCode($importAndExportQRCodes);
         }
         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);
+            return $this->flushQRCode($importAndExportQRCodes);
         }
-        //每次刷新都标记一个cache 新建  每次刷新前判断这个标记时间
-        //直接去本地获取二维码
-        return $this->getQRCode($userWorkgroups);
+        return $this->getImportAndExportQRCode($importAndExportQRCodes);
     }
-    //刷新二维码
-    public function flushQRCode($userWorkgroups){
-        foreach ($userWorkgroups as $userWorkgroup){
+    //刷新进出场二维码方法
+    public function flushQRCode($importAndExportQRCodes){
+        foreach ($importAndExportQRCodes as $importAndExportQRCode){
             $time=strtotime(Cache::get('last_refresh_date'));
             $qrCode_refresh=config('hr.qrCode_refresh');
             if ($qrCode_refresh){
                 $date=date('Y-m-d H:i:s', strtotime('+30second',$time));
-                $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
-                $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
+                $url=url("personnel/checking-in/userDutyCheck/importAndExportClock?key=").$date;
+                $url=$url."&&importAndExportQRCodeType=".$importAndExportQRCode->type;
             }else{
-                $url=url("personnel/checking-in/userDutyCheck/clock");
-                $url=$url."?userWorkgroupID=".$userWorkgroup->id;
+                $url=url("personnel/checking-in/userDutyCheck/importAndExportClock");
+                $url=$url."?importAndExportQRCodeType=".$importAndExportQRCode->type;
             }
             $qrCode=new QrCode($url);
-            if ($userWorkgroup->id){
-                $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
+            if ($importAndExportQRCode->type){
+                $fileURL=base_path('public/images/QRCodeIMG/'.$importAndExportQRCode->type.'.png');
                 $qrCode->writeFile($fileURL);
-                $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png').'?da='.Uuid::uuid1();
+                $importAndExportQRCode->url=url('images/QRCodeIMG/'.$importAndExportQRCode->type.'.png').'?da='.Uuid::uuid1();
             }
         }
-        return $userWorkgroups;
+        return $importAndExportQRCodes;
     }
-    //获取二维码
-    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{
+    //刷新进出场二维码页面
+    public function refreshQRCode(Request $request){
+        $beforeTime=$request->input('beforeTime');
+        $importAndExportQRCodes=[];
+        $userDutyCheckOne=new UserDutyCheck([
+            'type'=>'import',
+            'source'=>'进场',
+        ]);
+        $userDutyCheck=new UserDutyCheck([
+            'type'=>'export',
+            'source'=>'出场',
+        ]);
+        array_push($importAndExportQRCodes,$userDutyCheckOne,$userDutyCheck);
+        $importAndExportQRCodes=$this->qrCode_refresh_time($importAndExportQRCodes,$beforeTime);
+        $csrfToken=csrf_token();
+        return ['importAndExportQRCodes'=>$importAndExportQRCodes,'last_refresh_date'=>Cache::get('last_refresh_date'),'csrf_Token'=>$csrfToken];
+    }
+
+    //点击仓获取仓下所有工作组页面
+    public function getUserWorkGroups(Request $request){
+        $warehouseId=$request->input('warehouseId');
+        $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
+        if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
+        return view('personnel/checking-in/getUserWorkGroups',['userWorkgroups'=>$userWorkgroups]);
+    }
+
+    //进入工作组二维码显示页面
+    public function QRCode(Request $request){
+        $userWorkgroupId=$request->input('userWorkgroupId');
+        $userWorkgroup=UserWorkgroup::find($userWorkgroupId);
+        $userWorkgroup=$this->getQRCode($userWorkgroup);
+        if (!$userWorkgroup)return view('exception.404',['error'=>'未找到工作组!']);
+        return view('personnel/checking-in/QRcode',['userWorkgroup'=>$userWorkgroup]);
+    }
+
+    //获取工作组二维码
+    public function getQRCode($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');
                 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;
+        return $userWorkgroup;
+    }
 
+//    //进入刷新二维码页面
+//    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);
+//        $csrfToken=csrf_token();
+//        if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
+//        return ['userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),'csrf_Token'=>$csrfToken];
+//    }
+
+//    //二维码刷新时间
+//    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){
+//            $time=strtotime(Cache::get('last_refresh_date'));
+//            $qrCode_refresh=config('hr.qrCode_refresh');
+//            if ($qrCode_refresh){
+//                $date=date('Y-m-d H:i:s', strtotime('+30second',$time));
+//                $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);
-        $csrfToken=csrf_token();
-        if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
-        return ['userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),'csrf_Token'=>$csrfToken];
-    }
-    //第一次进入二维码显示页面
-    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'),]);
-    }
 }

+ 189 - 87
app/Http/Controllers/UserDutyCheckController.php

@@ -19,9 +19,11 @@ use Ramsey\Uuid\Uuid;
 
 class UserDutyCheckController extends Controller
 {
-    //校验二维码进入打卡页面
-    public function clock(Request $request){
-        $userWorkgroupID=$request->input('userWorkgroupID');
+
+
+    //校验二维码进入进出场打卡页面
+    public function importAndExportClock(Request $request){
+        $importAndExportQRCodeType=$request->input('importAndExportQRCodeType');
         $qrCode_refresh_everyday=config('hr.qrCode_refresh_everyday');
         $qrCode_refresh=config('hr.qrCode_refresh');
         if ($qrCode_refresh_everyday){
@@ -40,83 +42,103 @@ 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));
-            }
-            //正常情况
-            $laborReport=LaborReport::where('user_workgroup_id',$userWorkgroupID)->where('created_at','like',Carbon::now()->format('Y-m-d')."%")->where('user_id',$userDetail->user_id)->first();
-            if ($laborReport&&$userDutyCheck->type=='登出'){
-                LaborReport::updateLaborReportData($laborReport,$userDutyCheck);
-                $this->log(__METHOD__,"更新临时工报表记录__".__FUNCTION__,json_encode($laborReport));
+            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]));
             }
-            if ($userDutyCheck&&$userDutyCheck->error==true)return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
+//            if ($laborReport&&$userDutyCheck->type=='登出'){
+//                LaborReport::updateLaborReportData($laborReport,$userDutyCheck);
+//                $this->log(__METHOD__,"更新临时工报表记录__".__FUNCTION__,json_encode([$laborReport,$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>";
-                $group_name=$userDutyCheck->userWorkgroup['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 response()->view('personnel/checking-in/importAndExportSuccess',['full_name'=>$userDetail->full_name,'checked_at'=>$userDutyCheck->checked_at,'type'=>$userDutyCheck->type,'laravelEchoPrefix'=>$laravelEchoPrefix]);
         }
-        return view("personnel/checking-in/clock",compact('userWorkgroupID'));
+        return view("personnel/checking-in/importAndExportClock",compact('importAndExportQRCodeType'));
     }
 
     //提交打卡
     public function storeClock(Request $request){
+        $importAndExportQRCodeType=$request->input('importAndExportQRCodeType');
         $mobile_phone=$request->input('mobile_phone');
-        $userWorkgroupID=$request->input('userWorkgroupID');
         $this->validator($request)->validate();
         $userDetail=UserDetail::where('mobile_phone',$mobile_phone)->first();
-        if (!$userDetail)   return redirect('personnel/checking-in/userDutyCheck/createUserDetail/'.$mobile_phone)->with("userWorkgroupID",$userWorkgroupID);
+        if (!$userDetail)   return redirect('personnel/checking-in/userDutyCheck/createUserDetail/'.$mobile_phone)->with("importAndExportQRCodeType",$importAndExportQRCodeType);
         if (Cache::has('dutyCheckTokenUser_'.$userDetail->user_id))return "<h1 style='color: red;text-align:center'>请使用原有设备进行打卡,如无法使用原有设备请联系管理人员解绑设备!</h1>";
         $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']);
         $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,$userWorkgroupID);
-        if ($userDutyCheck&&$userDutyCheck->type=='登入'){
-            event(new ClockinEvent($userDutyCheck));
-        }else if ($userDutyCheck&&$userDutyCheck->type=='登出'){
-            event(new ClockoutEvent($userDutyCheck));
-        }
-        //正常情况
-        $laborReport=LaborReport::where('user_workgroup_id',$userWorkgroupID)->where('created_at','like',$dateNow."%")->where('user_id',$userDetail->user_id)->first();
-            if ($laborReport&&$userDutyCheck->type=='登出'){
-            LaborReport::updateLaborReportData($laborReport,$userDutyCheck);
-            $this->log(__METHOD__,"更新临时工报表记录__".__FUNCTION__,json_encode([$laborReport,$userDutyCheck]));
+            return redirect('personnel/checking-in/userDutyCheck/updateUserDetail/'.$mobile_phone)->with("importAndExportQRCodeType",$importAndExportQRCodeType);
         }
-        if ($userDutyCheck&&$userDutyCheck->error==true)return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
+        $userDutyCheck=$this->importAndExportDutyCheck($userDetail->user_id,$importAndExportQRCodeType);
+        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'));
-        $group_name=$userDutyCheck->userWorkgroup['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 response()->view('personnel/checking-in/success',['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();
+        $date=date('Y-m-d H:i:s');
+        $this->log(__METHOD__,"提交打卡记录__".__FUNCTION__,json_encode([$user_id,$date]));
+        $userDutyCheck=new UserDutyCheck([
+            'user_id'=>$user_id,
+            'checked_at'=>$date,
+            'source'=>'正常',
+        ]);
+        if (!$userDutyCheckOld){
+            $userDutyCheck->type="登入";
+            $userDutyCheck->save();
+            return $userDutyCheck;
+        }
+        if ($importAndExportQRCodeType&&$importAndExportQRCodeType=='import'){
+            if ($userDutyCheckOld->type=='登入'){
+                $userDutyCheck->import=true;//已入场的不能再入场
+                return $userDutyCheck;
+            }
+            $userDutyCheck->type='登入';
+        }
+        if ($importAndExportQRCodeType&&$importAndExportQRCodeType=='export'){
+            if ($userDutyCheckOld->type=='登出'){
+                $userDutyCheck->export=true;//已出场的不能再出场
+                return $userDutyCheck;
+            }
+            $userDutyCheck->type='登出';
+        }
+        $userDutyCheck->save();
+        return $userDutyCheck;
+    }
+
     //去往登记资料页面
     public function createUserDetail($mobile_phone){
-        $userWorkgroupID=session("userWorkgroupID");
+        $importAndExportQRCodeType=session("importAndExportQRCodeType");
         $laborCompanies=LaborCompany::select('id','name')->get();
-        return view('personnel/checking-in/createUserDetail',['mobile_phone'=>$mobile_phone,'userWorkgroupID'=>$userWorkgroupID,'laborCompanies'=>$laborCompanies]);
+        return view('personnel/checking-in/createUserDetail',['mobile_phone'=>$mobile_phone,'importAndExportQRCodeType'=>$importAndExportQRCodeType,'laborCompanies'=>$laborCompanies]);
     }
     //七天未打卡去往选择劳务所页面
     public function updateUserDetail($mobile_phone){
-        $userWorkgroupID=session("userWorkgroupID");
+        $importAndExportQRCodeType=session("importAndExportQRCodeType");
         $laborCompanies=LaborCompany::select('id','name')->get();
-        return view('personnel/checking-in/updateUserDetail',['mobile_phone'=>$mobile_phone,'userWorkgroupID'=>$userWorkgroupID,'laborCompanies'=>$laborCompanies]);
+        return view('personnel/checking-in/updateUserDetail',['mobile_phone'=>$mobile_phone,'importAndExportQRCodeType'=>$importAndExportQRCodeType,'laborCompanies'=>$laborCompanies]);
     }
-    //提交修改资料
+    //提交临时工修改资料
     public  function storeUpdateUserDetail(Request $request){
-        $this->validator($request)->validate();
+        $this->updateValidator($request)->validate();
+        $importAndExportQRCodeType=$request->input('importAndExportQRCodeType');
         $mobile_phone=$request->input('mobile_phone');
-        $userWorkgroupID=$request->input('userWorkgroupID');
         $userDetail=UserDetail::where('mobile_phone',$mobile_phone)->first();
         if (!$userDetail)return view('exception.404',['error'=>'临时工信息不存在!']);
         $labor_company_id=$request->input('labor_company_id');
@@ -125,28 +147,41 @@ class UserDutyCheckController extends Controller
             'labor_company_id'=>$labor_company_id,
         ]);
         $this->log(__METHOD__,"更改临时工劳务所信息".__FUNCTION__,json_encode($userLabor),Auth::user()['id']);
-        $userDutyCheck=$this->dutyCheck($userDetail->user_id,$userWorkgroupID);
-        if ($userDutyCheck&&$userDutyCheck->type=='登入'){
-            event(new ClockinEvent($userDutyCheck));
-        }else if ($userDutyCheck&&$userDutyCheck->type=='登出'){
-            event(new ClockoutEvent($userDutyCheck));
-        }
-        if ($userDutyCheck&&$userDutyCheck->error==true)return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
+        $userDutyCheck=$this->importAndExportDutyCheck($userDetail->user_id,$importAndExportQRCodeType);
+        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'];
+//        $group_name=$userDutyCheck->userWorkgroup['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 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 updateValidator(Request $request){
+        $updateValidator=Validator::make($request->input(),[
+            'mobile_phone'=>['required','integer','digits:11'],
+            'labor_company_id'=>['filled'],
+        ],[
+            'filled' => ':attribute 不能为空',
+            'required'=>':attribute 为必填项',
+            'integer'=>':attribute 数字类型',
+            'digits'=>':attribute 必须是11位',
+        ],[
+            'mobile_phone'=>'手机号',
+            'labor_company_id'=>'劳务所',
+        ]);
+        return $updateValidator;
+    }
+
     //提交登记资料
     public  function storeUserDetail(Request $request){
         $this->validator($request)->validate();
+        $importAndExportQRCodeType=$request->input('importAndExportQRCodeType');
         $mobile_phone=$request->input('mobile_phone');
         $full_name=$request->input('full_name');
         $identity_number=$request->input('identity_number');
-        $userWorkgroupID=$request->input('userWorkgroupID');
         $user=new User([
             'name'=>$mobile_phone,
             'password'=>Uuid::uuid1(),
@@ -167,22 +202,73 @@ class UserDutyCheckController extends Controller
             'labor_company_id'=>$labor_company_id,
         ]);
         $userLabor->save();
-        $userDutyCheck=$this->dutyCheck($user->id,$userWorkgroupID);
-        if ($userDutyCheck&&$userDutyCheck->type=='登入'){
-            event(new ClockinEvent($userDutyCheck));
-        }else if ($userDutyCheck&&$userDutyCheck->type=='登出'){
-            event(new ClockoutEvent($userDutyCheck));
-        }
-        if ($userDutyCheck&&$userDutyCheck->error==true)return "<h1 style='color: darkred;text-align:center'>重复打卡!</h1>";
+        $userDutyCheck=$this->importAndExportDutyCheck($user->id,$importAndExportQRCodeType);
+        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/success',['group_name'=>$group_name??'','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 validator(Request $request){
+        $validator=Validator::make($request->input(),[
+            'full_name'=>['filled'],
+            'gender'=>['filled'],
+            'mobile_phone'=>['required','integer','digits:11'],
+            'identity_number' => ['filled','identity_cards','unique:user_details,identity_number'],
+            'labor_company_id'=>['filled'],
+        ],[
+            'unique'=>':attribute 已经存在,不能重复!',
+            'filled' => ':attribute 不能为空',
+            'required'=>':attribute 为必填项',
+            'integer'=>':attribute 数字类型',
+            'digits'=>':attribute 必须是11位',
+        ],[
+            'full_name'=>'姓名',
+            'gender'=>'性别',
+            'mobile_phone'=>'手机号',
+            'identity_number' => '身份证号',
+            'labor_company_id'=>'劳务所',
+        ]);
+        return $validator;
+    }
+
+
+
+
 
+
+    //校验工作组二维码进入打卡页面
+    public function clock(Request $request){
+        $userWorkgroupID=$request->input('userWorkgroupID');
+        $userLaborToken=$request->cookie('userLaborToken');
+        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'];
+            $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();
@@ -236,7 +322,7 @@ class UserDutyCheckController extends Controller
             }
 
         }
-            if ($userDutyCheckOld->type=="登入"){
+        if ($userDutyCheckOld->type=="登入"){
             switch ($diffDate){
                 case $diffDate<=20:
                     $userDutyCheck->type="登入";
@@ -264,26 +350,42 @@ class UserDutyCheckController extends Controller
         $userDutyCheck->save();
         return $userDutyCheck;
     }
-    public function validator(Request $request){
-        $validator=Validator::make($request->input(),[
-            'full_name'=>['filled'],
-            'userWorkgroupID'=>['filled'],
-            'gender'=>['filled'],
-            'mobile_phone'=>['required','integer','digits:11'],
-            'identity_number' => ['filled','identity_cards','unique:user_details,identity_number'],
-        ],[
-            'unique'=>':attribute 已经存在,不能重复!',
-            'filled' => ':attribute 不能为空',
-            'required'=>':attribute 为必填项',
-            'integer'=>':attribute 数字类型',
-            'digits'=>':attribute 必须是11位',
-        ],[
-            'full_name'=>'姓名',
-            'userWorkgroupID'=>'工作组ID',
-            'gender'=>'性别',
-            'mobile_phone'=>'手机号',
-            'identity_number' => '身份证号',
-        ]);
-        return $validator;
-    }
+//    //提交打卡
+//    public function storeClock(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 (!$userDetail)   return redirect('personnel/checking-in/userDutyCheck/createUserDetail/'.$mobile_phone)->with("userWorkgroupID",$userWorkgroupID);
+//        if (Cache::has('dutyCheckTokenUser_'.$userDetail->user_id))return "<h1 style='color: red;text-align:center'>请使用原有设备进行打卡,如无法使用原有设备请联系管理人员解绑设备!</h1>";
+//        $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']);
+//        $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,$userWorkgroupID);
+//        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',$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>";
+//        $userLaborToken=$userDetail->getDutyCheckToken(config('users.token_check_in_expire_minutes'));
+//        $group_name=$userDutyCheck->userWorkgroup['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])
+//            ->cookie('userLaborToken',$userLaborToken,config('users.token_check_in_expire_minutes'),'/');
+//    }
 }

+ 6 - 6
app/LaborReport.php

@@ -25,12 +25,12 @@ class LaborReport extends Model
     }
 
     //添加临时工报表数据
-    static function createLaborReportData($user_id,$userWorkgroupID,$userDutyCheck){
-        $userDetail=UserDetail::find($user_id);
+    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',$user_id)->value('labor_company_id');
+        $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'];
@@ -38,8 +38,8 @@ class LaborReport extends Model
         $date=date('Y-m-d H:i:s');
         $laborReport=new LaborReport([
             'enter_number'=>Uuid::uuid1(),
-            'user_workgroup_id'=>$userWorkgroupID,
-            'user_id'=>$user_id,
+            'user_workgroup_id'=>$userDutyCheck->workgroup_id,
+            'user_id'=>$userDutyCheck->user_id,
             'name'=>$name,
             'mobile_phone'=>$mobile_phone,
             'identity_number'=>$identity_number,
@@ -50,7 +50,7 @@ class LaborReport extends Model
         ]);
         $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);
+        $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;

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

@@ -16,7 +16,7 @@ class CreateLaborReportsTable extends Migration
         Schema::create('labor_reports', function (Blueprint $table) {
             $table->bigIncrements('id');
             $table->string('enter_number')->index()->comment('进场编号');
-            $table->bigInteger('user_workgroup_id')->index()->comment('外键用户组');
+            $table->bigInteger('user_workgroup_id')->index()->comment('外键工作组');
             $table->bigInteger('user_id')->index()->comment('外键用户');
             $table->string('name')->index()->comment('临时工名称');
             $table->string('mobile_phone')->nullable()->index()->comment('手机号');

+ 1 - 1
database/migrations/2020_05_22_172739_create_labor_companies_table.php

@@ -18,7 +18,7 @@ class CreateLaborCompaniesTable extends Migration
             $table->string('name')->unique()->nullable()->comment('劳务所名称');
             $table->timestamps();
         });
-        (new LaborCompany(['name'=>'其他']))->save();
+        //(new LaborCompany(['name'=>'其他']))->save();
     }
 
     /**

+ 35 - 0
database/migrations/2020_07_01_175324_change_user_duty_check_tables.php

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

+ 37 - 0
database/migrations/2020_07_02_142427_change_labor_reports_tables.php

@@ -0,0 +1,37 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeLaborReportsTables extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('labor_reports', function (Blueprint $table) {
+            $table->dropColumn('user_workgroup_id');
+        });
+        Schema::table('labor_reports', function (Blueprint $table) {
+            $table->bigInteger('user_workgroup_id')->nullable()->index()->comment('外键工作组');
+            $table->bigInteger('relax_time')->nullable()->comment('晚饭时长');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('labor_reports', function (Blueprint $table) {
+            $table->dropColumn('user_workgroup_id');
+            $table->dropColumn('relax_time');
+        });
+    }
+}

BIN
public/images/QRCodeIMG/10.png


BIN
public/images/QRCodeIMG/4.png


BIN
public/images/QRCodeIMG/5.png


+ 1 - 1
resources/views/layouts/menu.blade.php

@@ -37,7 +37,7 @@
                     <span class="fa fa-hand-scissors-o" style="color: #726e1b"></span>
                     二次加工管理</a></li> @endcan
         @can('人事管理')
-            <li class="nav-item"><a href="{{url("personnel/checking-in/createReplenishClock")}}" class="nav-link"
+            <li class="nav-item"><a href="{{url("personnel/laborReport")}}" class="nav-link"
                                     :class="{active:isActive('personnel',1)}">
                     <span class="fa fa-header" style="color: #72441b"></span>
                     人事管理</a></li> @endcan

+ 45 - 44
resources/views/personnel/checking-in/QRcode.blade.php

@@ -18,17 +18,17 @@
                     <h3 class="text-center text-dark">首次扫描后将与设备绑定,之后扫描需使用原设备与原软件!</h3><br>
                     <h4 class="text-center text-danger">如更换设备请联系管理人员解除设备绑定!</h4>
                 </div>
-                <div v-if="userWorkgroups.length>3">
-                <div class="row row-cols-3">
-                    <div class="col-sm-3  col-lg-3 col-xl-3 text-center" style="float:left;" v-for="userWorkgroup in userWorkgroups">
-                            <img id="img" class="img-thumbnail"  :src="userWorkgroup.url" />
-                        <p class="m-2 h5 text-center" >@{{ userWorkgroup.name }}工作组</p>
-                    </div>
-                </div>
-                </div>
-                <div v-else="userWorkgroups.length<=3">
+{{--                <div v-if="userWorkgroups.length>3">--}}
+{{--                <div class="row row-cols-3">--}}
+{{--                    <div class="col-sm-3  col-lg-3 col-xl-3 text-center" style="float:left;" v-for="userWorkgroup in userWorkgroups">--}}
+{{--                            <img id="img" class="img-thumbnail"  :src="userWorkgroup.url" />--}}
+{{--                        <p class="m-2 h5 text-center" >@{{ userWorkgroup.name }}工作组</p>--}}
+{{--                    </div>--}}
+{{--                </div>--}}
+{{--                </div>--}}
+                <div>
                     <div class="row">
-                        <div class="col text-center" style="float:left;" v-for="userWorkgroup in userWorkgroups">
+                        <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>
@@ -41,44 +41,45 @@
 
     <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;
-            }
-        }
+        // 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:{
-                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 !!}
+                {{--userWorkgroups:[--}}
+                {{--    @foreach($userWorkgroups as $userWorkgroup)--}}
+                {{--    {id:'{{$userWorkgroup->id}}',name:'{{$userWorkgroup->name}}',url:'{{$userWorkgroup->url}}',},--}}
+                {{--    @endforeach--}}
+                {{--],--}}
+                {{--last_refresh_date:'{{$last_refresh_date}}',--}}
+                {{--warehouseId:'{{$warehouseId}}',--}}
             },
-            mounted(){
-                let _this=this;
-                let refreshQRCode=function(){
-                    axios.post('{{url('personnel/checking-in/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;
-                            $("meta[name='csrf-token']").attr('content', response.data.csrf_Token);
-                            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();
-            }
+            {{--mounted(){--}}
+            {{--    let _this=this;--}}
+            {{--    let refreshQRCode=function(){--}}
+            {{--        axios.post('{{url('personnel/checking-in/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;--}}
+            {{--                $("meta[name='csrf-token']").attr('content', response.data.csrf_Token);--}}
+            {{--                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>
 </body>

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

@@ -97,17 +97,17 @@
                 ],
                 permittingWorkgroups:{!! $permittingWorkgroups !!},
             },
-            mounted(){
-                initEcho();
-                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();
-                    });
-                });
-            },
+            {{--mounted(){--}}
+            {{--    initEcho();--}}
+            {{--    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();--}}
+            {{--        });--}}
+            {{--    });--}}
+            {{--},--}}
             methods:{
                 // 打卡类型修改
                 dutyCheckType:function (e,userDutyCheck) {

+ 13 - 7
resources/views/personnel/checking-in/createUserDetail.blade.php

@@ -28,11 +28,11 @@
                 <label for="mobile_phone" class="form-check-label col-3 pull-left">电话:</label>
                 <div class="col-8">
                     <input name="mobile_phone" @if($mobile_phone) value="{{$mobile_phone}}" @endif readonly id="mobile_phone" class="@error('mobile_phone') is-invalid @enderror  form-control" type="text">
-{{--                    @error('mobile_phone')--}}
-{{--                    <span class="invalid-feedback" role="alert">--}}
-{{--                    <strong>{{ $message }}</strong>--}}
-{{--                    </span>--}}
-{{--                    @enderror--}}
+                    @error('mobile_phone')
+                    <span class="invalid-feedback" role="alert">
+                    <strong>{{ $message }}</strong>
+                    </span>
+                    @enderror
                 </div>
             </div>
             <div class="form-group row pt-0">
@@ -60,14 +60,20 @@
             <div class="form-group row">
                 <label for="labor_company_id" class="form-check-label col-3 pull-left">劳务所:</label>
                 <div class="col-8">
-                    <select name="labor_company_id" id="labor_company_id" class=" form-control"  type="text">
+                    <select name="labor_company_id" id="labor_company_id" class="@error('labor_company_id') is-invalid @enderror  form-control"  type="text">
+                        <option></option>
                         @foreach( $laborCompanies as $laborCompany )
                             <option value="{{$laborCompany->id}}">{{$laborCompany->name}}</option>
                         @endforeach
                     </select>
+                    @error('labor_company_id')
+                    <span class="invalid-feedback" role="alert">
+                    <strong>{{ $message }}</strong>
+                    </span>
+                    @enderror
                 </div>
             </div>
-            <input type="hidden" name="userWorkgroupID" value="{{ old('userWorkgroupID',$userWorkgroupID)}}" >
+            <input type="hidden" name="importAndExportQRCodeType" value="{{ old('importAndExportQRCodeType',$importAndExportQRCodeType)}}" >
             <div class="form-group row pt-3">
                 <button type="submit" class="col-8 offset-3 btn btn-success">登记</button>
             </div>

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

@@ -8,8 +8,11 @@
     <div class="container-fluid mt-3" id="page">
         <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 list-group-item-info" type="button" :href="('{{url('personnel/checking-in/importAndExportQRCode')}}')" >进出场打卡</a>
+                </div>
                 <div class="list-group list-group-horizontal-lg align-content-center" v-if="warehouses">
-                    <a target="_blank"  class="btn list-group-item col-md-2" type="button" :href="('{{url('personnel/checking-in/QRCode?warehouseId=')}}'+warehouse.id)"  :class="warehouse==checkedWarehouse ? 'btn-primary' : 'btn-outline-primary'"
+                    <a class="btn list-group-item col-md-2" type="button" :href="('{{url('personnel/checking-in/getUserWorkGroups?warehouseId=')}}'+warehouse.id)"  :class="warehouse==checkedWarehouse ? 'btn-primary' : 'btn-outline-primary'"
                        v-for="warehouse in warehouses">@{{ warehouse.name }}</a>
                 </div>
                 <h3 v-else>还未录入仓库,请先录入仓库!</h3>
@@ -17,7 +20,6 @@
         </div>
     </div>
 @endsection
-
 @section('lastScript')
     <script>
         new Vue({

+ 35 - 0
resources/views/personnel/checking-in/getUserWorkGroups.blade.php

@@ -0,0 +1,35 @@
+@extends('layouts.app')
+@section('title')打卡@endsection
+@section('content')
+    <div id="nav2" class="dontprint">
+        @component('personnel.menu')@endcomponent
+        @component('personnel.checking-in.menuChecking-in')@endcomponent
+    </div>
+    <div class="container-fluid mt-3" id="page">
+        <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" v-if="userWorkgroups">
+                    <a target="_blank"  class="btn list-group-item col-md-2" type="button" :href="('{{url('personnel/checking-in/QRCode?userWorkgroupId=')}}'+userWorkgroup.id)"  :class="userWorkgroup==checkedUserWorkgroup ? 'btn-primary' : 'btn-outline-primary'"
+                       v-for="userWorkgroup in userWorkgroups">@{{ userWorkgroup.name }}</a>
+                </div>
+                <h3 v-else>还未录入工作组,请先录入工作组!</h3>
+            </div>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+        new Vue({
+            el:"#page",
+            data:{
+                userWorkgroups:[
+                    @foreach($userWorkgroups as $userWorkgroup)
+                    {!! $userWorkgroup !!},
+                    @endforeach
+                ],
+                checkedUserWorkgroup:'',
+            },
+        });
+    </script>
+@endsection

+ 25 - 0
resources/views/personnel/checking-in/importAndExportClock.blade.php

@@ -0,0 +1,25 @@
+<!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="importAndExportQRCodeType" value="{{ old('importAndExportQRCodeType',$importAndExportQRCodeType)}}">
+                    <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>

+ 75 - 0
resources/views/personnel/checking-in/importAndExportQRCode.blade.php

@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="icon" href="{{asset('icon/faviconc.ico')}}" type="image/x-icon"/>
+    <!-- CSRF Token -->
+    <meta name="csrf-token" content="{{ csrf_token() }}">
+    <title>显示二维码 BsWAS</title>
+    <!-- Styles -->
+    <link href="{{ asset('css/app200519b.css') }}" rel="stylesheet">
+</head>
+<body>
+    <div class="container-fluid " id="page">
+        <div class="card ">
+            <div class="card-body">
+                <div class="align-content-center m-3" >
+                    <h3 class="text-center text-dark">首次扫描后将与设备绑定,之后扫描需使用原设备与原软件!</h3><br>
+                    <h4 class="text-center text-danger">如更换设备请联系管理人员解除设备绑定!</h4>
+                </div>
+
+                <div class="row-cols-2" v-for="importAndExportQRCode in importAndExportQRCodes">
+                    <div class="col text-center" style="float:left;">
+                            <img id="img" class="img-thumbnail"  :src="importAndExportQRCode.url" />
+                        <p class="font-weight-bold m-2 h5 text-center" style="color: red">@{{ importAndExportQRCode.source }}</p>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+
+    <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:{
+                importAndExportQRCodes:[
+                    @foreach($importAndExportQRCodes as $importAndExportQRCode)
+                    {url:'{{$importAndExportQRCode->url}}', type:'{{$importAndExportQRCode->type}}',source:'{{$importAndExportQRCode->source}}'},
+                    @endforeach
+                ],
+                last_refresh_date:'{{$last_refresh_date}}',
+            },
+            mounted(){
+                let _this=this;
+                let refreshQRCode=function(){
+                    axios.post('{{url('personnel/checking-in/refreshQRCode')}}',{beforeTime:_this.last_refresh_date})
+                        .then(function (response) {
+                            _this.importAndExportQRCodes=response.data.importAndExportQRCodes;
+                            _this.last_refresh_date=response.data.last_refresh_date;
+                            $("meta[name='csrf-token']").attr('content', response.data.csrf_Token);
+                            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>
+</body>
+</html>

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

@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <!-- CSRF Token -->
+    <meta name="csrf-token" content="{{ csrf_token() }}">
+</head>
+<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/>
+    <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>
+    @endif
+
+    @if($type=='登出')
+        <h5 style="margin-top: 0;color: red">下班登出成功</h5>
+    @endif
+</div>
+<script src="{{ asset('js/app.js?202002111414') }}"></script>
+<script>
+    new Vue({
+        el:'#page',
+        data:{
+          userDutyCheck:{
+              verify_user_id:''
+          },
+        },
+        mounted(){
+            initEcho();
+            Echo.channel('{{$laravelEchoPrefix}}userDutyCheck').listen('GuardAuditEvent',(e)=>{
+                let _this=this;
+                let userDutyCheck=e.userDutyCheck;
+                _this.userDutyCheck.verify_user_id=userDutyCheck.verify_user_id;
+            });
+        },
+    });
+    var secondsInit = 0;
+    function _fresh()
+    {
+        secondsInit ++;
+        var seconds = secondsInit;
+        var result = '';
+        if (seconds >= 3600)
+        {
+            var h = Math.floor(seconds / 3600);
+            result += h + "小时";
+            seconds -= 3600 * h;
+        }
+        if (seconds >= 60)
+        {
+            var m = Math.floor(seconds / 60);
+            result += m + "分";
+            seconds -= 60 * m;
+        }
+        result += seconds + "秒";
+        document.getElementById('_lefttime').innerHTML = result;
+    }
+    _fresh()
+    setInterval(_fresh,1000);
+</script>
+</body>
+</html>

+ 20 - 4
resources/views/personnel/checking-in/updateUserDetail.blade.php

@@ -12,19 +12,35 @@
             @csrf
             <div class="form-group row">
                 <label for="mobile_phone" class="form-check-label col-3 pull-left">电话:</label>
+                <div class="col-8">
                 <input name="mobile_phone" @if($mobile_phone) value="{{$mobile_phone}}" @endif readonly 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>
             <div class="form-group row">
                 <label for="labor_company_id" class="form-check-label col-3 pull-left">劳务所:</label>
-                <select name="labor_company_id" id="labor_company_id" class="col-7 form-control" type="text">
+                <div class="col-8">
+                <select name="labor_company_id" id="labor_company_id" class="@error('labor_company_id') is-invalid @enderror col-7 form-control" type="text">
+                    <option></option>
                     @foreach( $laborCompanies as $laborCompany )
                         <option value="{{$laborCompany->id}}">{{$laborCompany->name}}</option>
                     @endforeach
                 </select>
+                @error('labor_company_id')
+                <span class="invalid-feedback" role="alert">
+                    <strong>{{ $message }}</strong>
+                    </span>
+                @enderror
+                </div>
             </div>
-            <input hidden name="userWorkgroupID" value="{{$userWorkgroupID}}">
-            <div class="form-group row pt-3">
-                <button type="submit" class="col-7 offset-3 btn btn-success">提交</button>
+
+            <input hidden name="importAndExportQRCodeType" value="{{ old('importAndExportQRCodeType',$importAndExportQRCodeType)}}">
+            <div class="form-group row pt-4">
+                <button type="submit" class="col-5 offset-3 btn btn-success">提交</button>
             </div>
         </form>
     </div>

+ 30 - 21
resources/views/personnel/laborReport/index.blade.php

@@ -80,7 +80,7 @@
                     </form>
                 </div>
                 <div class="">
-                    <table class="table table-sm  table-hover table-striped table-bordered text-nowrap">
+                    <table class="table table-sm table-striped table-bordered text-nowrap table-hover">
                         <tr>
                             <th>
                                 <label for="all">
@@ -88,19 +88,20 @@
                                 </label>
                             </th>
                             <th>序号</th>
-                            <th>ID</th>
+{{--                            <th>ID</th>--}}
+                            <th>操作</th>
                             <th>创建日期</th>
-                            <th class="laborReport_1">进厂编号</th>
-                            <th class="laborReport_1">小组</th>
-                            <th class="laborReport_1">临时工</th>
-                            <th class="laborReport_1">电话</th>
-                            <th class="laborReport_1">身份证号</th>
-                            <th class="laborReport_1">劳务所</th>
+                            <th  style="background-color: rgb(241, 234, 190)">进厂编号</th>
+                            <th style="background-color: rgb(241, 234, 190)">小组</th>
+                            <th style="background-color: rgb(241, 234, 190)">临时工</th>
+                            <th style="background-color: rgb(241, 234, 190)">电话</th>
+                            <th style="background-color: rgb(241, 234, 190)">身份证号</th>
+                            <th style="background-color: rgb(241, 234, 190)">劳务所</th>
                             <th>打卡时间</th>
                             <th>审核时间</th>
                             <th>审核人</th>
-                            <th>退时间</th>
-                            <th>饭打卡</th>
+                            <th>退时间</th>
+                            <th>饭打卡</th>
                             <th>在线时长</th>
                             <th>本次工作时长</th>
                         </tr>
@@ -109,21 +110,32 @@
                                 <input class="checkItem" type="checkbox" :value="laborReport.id" v-model="checkData">
                             </td>
                             <td>@{{ i+1  }}</td>
-                            <td class="text-muted">@{{laborReport.id}}</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>
+                                </span>
+                                @else
+                                    <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>
-                            <td class="text-muted">@{{laborReport.userWorkGroupName}}</td>
-                            <td class="text-muted">@{{laborReport.name}}</td>
+                            <td>@{{laborReport.userWorkGroupName}}</td>
+                            <td >@{{laborReport.name}}</td>
                             <td class="text-muted">@{{laborReport.mobilePhone}}</td>
                             <td class="text-muted">@{{laborReport.identityNumber}}</td>
                             <td class="text-muted">@{{laborReport.laborCompany}}</td>
-                            <td class="text-muted">@{{laborReport.checkInAt}}</td>
+                            <td>@{{laborReport.checkInAt}}</td>
                             <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.onlineDuration">@{{laborReport.onlineDuration}}</span></td>
-                            <td class="text-muted"><span v-if="laborReport.workingDuration">@{{laborReport.workingDuration}}</span></td>
+                            <td><span v-if="laborReport.workingDuration">@{{laborReport.workingDuration}}</span></td>
                         </tr>
                     </table>
                 </div>
@@ -142,8 +154,9 @@
             data:{
                 laborReports:[
                         @foreach($laborReports as $laborReport)
-                         {id:'{{$laborReport->id}}',enterNumber:'{{$laborReport->enter_number}}',userWorkGroupId:'{{$laborReport->userWorkgroup->id}}'
-                        ,userWorkGroupName:'{{$laborReport->userWorkgroup->name}}',userId:'{{$laborReport->user_id}}',name:'{{$laborReport->name}}'
+                         {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}}',
@@ -260,7 +273,3 @@
         });
     </script>
 @endsection
-<style>
-    .laborReport_1{background-color: rgb(241, 234, 190)
-    }
-</style>

+ 8 - 1
routes/web.php

@@ -147,14 +147,21 @@ Route::resource('store/storeItem','StoreItemsController');
  */
 //进入打卡
 Route::get('personnel/checking-in/goGetQRCode','QRCodeController@goGetQRCode');
-//进入二维码显示页面
+//进入二维码显示页面
 Route::get('personnel/checking-in/QRCode','QRCodeController@QRCode');
+//打卡页面点击仓库获取所有的工作组
+Route::get('personnel/checking-in/getUserWorkGroups','QRCodeController@getUserWorkGroups');
+
+//进入进出场二维码显示页面
+Route::get('personnel/checking-in/importAndExportQRCode','QRCodeController@importAndExportQRCode');
 //获取刷新二维码
 Route::post('personnel/checking-in/refreshQRCode','QRCodeController@refreshQRCode');
 /**
  *  用户打卡
  */
 Route::group(['prefix'=>'personnel/checking-in/userDutyCheck'],function(){
+    //进出场打卡接口
+    Route::get('importAndExportClock','UserDutyCheckController@importAndExportClock');
     //进入打卡接口
     Route::get('clock','UserDutyCheckController@clock');
     //提交打卡