QRCodeController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\UserDetail;
  4. use App\UserToken;
  5. use App\UserWorkgroup;
  6. use App\Warehouse;
  7. use Endroid\QrCode\QrCode;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Cache;
  10. use Ramsey\Uuid\Uuid;
  11. class QRCodeController extends Controller
  12. {
  13. public function goGetQRCode(){
  14. $warehouses=Warehouse::get();
  15. return view("personnel/checking-in/getQRcode",compact('warehouses'));
  16. }
  17. //二维码刷新时间
  18. public function qrCode_refresh_time($userWorkgroups,$beforeTime){
  19. $qrCode_refresh=config('hr.qrCode_refresh');
  20. if (!Cache::has('last_refresh_date') || Cache::get('last_refresh_date')<date('Y-m-d H:i:s')){
  21. $last_refresh_date=date('Y-m-d H:i:s',strtotime('+'.$qrCode_refresh.'second'));
  22. Cache::put('last_refresh_date',$last_refresh_date);
  23. return $this->flushQRCode($userWorkgroups);
  24. }
  25. if ($beforeTime==Cache::get('last_refresh_date')){
  26. $time=strtotime($beforeTime);
  27. //刷新 更新cache
  28. $last_refresh_date=date('Y-m-d H:i:s', strtotime('+'.$qrCode_refresh.'second', $time));
  29. Cache::put('last_refresh_date',$last_refresh_date);
  30. return $this->flushQRCode($userWorkgroups);
  31. }
  32. //每次刷新都标记一个cache 新建 每次刷新前判断这个标记时间
  33. //直接去本地获取二维码
  34. return $this->getQRCode($userWorkgroups);
  35. }
  36. //刷新二维码
  37. public function flushQRCode($userWorkgroups){
  38. foreach ($userWorkgroups as $userWorkgroup){
  39. $time=strtotime(Cache::get('last_refresh_date'));
  40. $qrCode_refresh=config('hr.qrCode_refresh');
  41. if ($qrCode_refresh){
  42. $date=md5(date('Y-m-d H:i:s', strtotime('+30second',$time)));
  43. $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
  44. $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
  45. }else{
  46. $url=url("personnel/checking-in/userDutyCheck/clock");
  47. $url=$url."?userWorkgroupID=".$userWorkgroup->id;
  48. }
  49. $qrCode=new QrCode($url);
  50. if ($userWorkgroup->id){
  51. $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  52. $qrCode->writeFile($fileURL);
  53. $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png').'?da='.Uuid::uuid1();
  54. }
  55. }
  56. return $userWorkgroups;
  57. }
  58. //获取二维码
  59. public function getQRCode($userWorkgroups){
  60. foreach ($userWorkgroups as $userWorkgroup){
  61. $qrCode_refresh_everyday=config('hr.qrCode_refresh_everyday');
  62. if ($qrCode_refresh_everyday){
  63. $date=md5(date('Y-m-d'));
  64. $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
  65. $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
  66. }else{
  67. $url=url("personnel/checking-in/userDutyCheck/clock");
  68. $url=$url."?userWorkgroupID=".$userWorkgroup->id;
  69. }
  70. $qrCode=new QrCode($url);
  71. if ($userWorkgroup->id){
  72. $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  73. if (file_exists($fileURL)){
  74. $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  75. continue;
  76. }
  77. $qrCode->writeFile($fileURL);
  78. $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  79. }
  80. }
  81. return $userWorkgroups;
  82. }
  83. //进入刷新二维码页面
  84. public function refreshQRCode(Request $request){
  85. $beforeTime=$request->input('beforeTime');
  86. $warehouseId=$request->input('warehouseId');
  87. $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
  88. $userWorkgroups=$this->qrCode_refresh_time($userWorkgroups,$beforeTime);
  89. if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
  90. return ['userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),];
  91. }
  92. //第一次进入二维码显示页面
  93. public function QRCode(Request $request){
  94. $warehouseId=$request->input('warehouseId');
  95. $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
  96. $beforeTime=date('Y-m-d H:i:s');
  97. $userWorkgroups=$this->qrCode_refresh_time($userWorkgroups,$beforeTime);
  98. Cache::forget('last_refresh_date');
  99. if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
  100. return view('personnel/checking-in/QRcode',['warehouseId'=>$warehouseId,'userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),]);
  101. }
  102. }