QRCodeController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\UserDetail;
  4. use App\UserDutyCheck;
  5. use App\UserToken;
  6. use App\UserWorkgroup;
  7. use App\Warehouse;
  8. use Endroid\QrCode\QrCode;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Cache;
  11. use mysql_xdevapi\Collection;
  12. use Ramsey\Uuid\Uuid;
  13. class QRCodeController extends Controller
  14. {
  15. //进入打卡页面
  16. public function goGetQRCode(){
  17. $warehouses=Warehouse::with('userWorkgroups')->get();
  18. return view("personnel/checking-in/getQRcode",compact('warehouses'));
  19. }
  20. //获取进出场二维码
  21. public function getImportAndExportQRCode($importAndExportQRCodes){
  22. foreach ($importAndExportQRCodes as $importAndExportQRCode){
  23. $qrCode_refresh_everyday=config('hr.qrCode_refresh_everyday');
  24. if ($qrCode_refresh_everyday){
  25. $date=md5(date('Y-m-d'));
  26. $url=url("personnel/checking-in/userDutyCheck/importAndExportClock?key=").$date;
  27. $url=$url."&&importAndExportQRCodeType=".$importAndExportQRCode->type;
  28. }else{
  29. $url=url("personnel/checking-in/userDutyCheck/importAndExportClock");
  30. $url=$url."?importAndExportQRCodeType=".$importAndExportQRCode->type;
  31. }
  32. $qrCode=new QrCode($url);
  33. if ($importAndExportQRCode->type){
  34. $fileURL=base_path('public/images/QRCodeIMG/'.$importAndExportQRCode->type.'.png');
  35. if (file_exists($fileURL)){
  36. $importAndExportQRCode->url=url('images/QRCodeIMG/'.$importAndExportQRCode->type.'.png');
  37. continue;
  38. }
  39. $qrCode->writeFile($fileURL);
  40. $importAndExportQRCode->url=url('images/QRCodeIMG/'.$importAndExportQRCode->type.'.png');
  41. }
  42. }
  43. return $importAndExportQRCodes;
  44. }
  45. //第一次进入进出场二维码显示页面
  46. public function importAndExportQRCode(){
  47. $importAndExportQRCodes=[];
  48. $userDutyCheckOne=new UserDutyCheck([
  49. 'source'=>'进场',
  50. 'type'=>'import',
  51. ]);
  52. $userDutyCheck=new UserDutyCheck([
  53. 'source'=>'出场',
  54. 'type'=>'export',
  55. ]);
  56. array_push($importAndExportQRCodes,$userDutyCheckOne,$userDutyCheck);
  57. $beforeTime=date('Y-m-d H:i:s');
  58. $importAndExportQRCodes=$this->qrCode_refresh_time($importAndExportQRCodes,$beforeTime);
  59. Cache::forget('last_refresh_date');
  60. return view('personnel/checking-in/importAndExportQRCode',['importAndExportQRCodes'=>$importAndExportQRCodes,'last_refresh_date'=>Cache::get('last_refresh_date'),]);
  61. }
  62. //进出场二维码刷新时间
  63. public function qrCode_refresh_time($importAndExportQRCodes,$beforeTime){
  64. $qrCode_refresh=config('hr.qrCode_refresh');
  65. if (!Cache::has('last_refresh_date') || Cache::get('last_refresh_date')<date('Y-m-d H:i:s')){
  66. $last_refresh_date=date('Y-m-d H:i:s',strtotime('+'.$qrCode_refresh.'second'));
  67. Cache::put('last_refresh_date',$last_refresh_date);
  68. return $this->flushQRCode($importAndExportQRCodes);
  69. }
  70. if ($beforeTime==Cache::get('last_refresh_date')){
  71. $time=strtotime($beforeTime);
  72. //刷新 更新cache
  73. $last_refresh_date=date('Y-m-d H:i:s', strtotime('+'.$qrCode_refresh.'second', $time));
  74. Cache::put('last_refresh_date',$last_refresh_date);
  75. return $this->flushQRCode($importAndExportQRCodes);
  76. }
  77. return $this->getImportAndExportQRCode($importAndExportQRCodes);
  78. }
  79. //刷新进出场二维码方法
  80. public function flushQRCode($importAndExportQRCodes){
  81. foreach ($importAndExportQRCodes as $importAndExportQRCode){
  82. $time=strtotime(Cache::get('last_refresh_date'));
  83. $qrCode_refresh=config('hr.qrCode_refresh');
  84. if ($qrCode_refresh){
  85. $date=date('Y-m-d H:i:s', strtotime('+30second',$time));
  86. $url=url("personnel/checking-in/userDutyCheck/importAndExportClock?key=").$date;
  87. $url=$url."&&importAndExportQRCodeType=".$importAndExportQRCode->type;
  88. }else{
  89. $url=url("personnel/checking-in/userDutyCheck/importAndExportClock");
  90. $url=$url."?importAndExportQRCodeType=".$importAndExportQRCode->type;
  91. }
  92. $qrCode=new QrCode($url);
  93. if ($importAndExportQRCode->type){
  94. $fileURL=base_path('public/images/QRCodeIMG/'.$importAndExportQRCode->type.'.png');
  95. $qrCode->writeFile($fileURL);
  96. $importAndExportQRCode->url=url('images/QRCodeIMG/'.$importAndExportQRCode->type.'.png').'?da='.Uuid::uuid1();
  97. }
  98. }
  99. return $importAndExportQRCodes;
  100. }
  101. //刷新进出场二维码页面
  102. public function refreshQRCode(Request $request){
  103. $beforeTime=$request->input('beforeTime');
  104. $importAndExportQRCodes=[];
  105. $userDutyCheckOne=new UserDutyCheck([
  106. 'type'=>'import',
  107. 'source'=>'进场',
  108. ]);
  109. $userDutyCheck=new UserDutyCheck([
  110. 'type'=>'export',
  111. 'source'=>'出场',
  112. ]);
  113. array_push($importAndExportQRCodes,$userDutyCheckOne,$userDutyCheck);
  114. $importAndExportQRCodes=$this->qrCode_refresh_time($importAndExportQRCodes,$beforeTime);
  115. $csrfToken=csrf_token();
  116. return ['importAndExportQRCodes'=>$importAndExportQRCodes,'last_refresh_date'=>Cache::get('last_refresh_date'),'csrf_Token'=>$csrfToken];
  117. }
  118. //进入工作组二维码显示页面
  119. public function QRCode(Request $request){
  120. $userWorkgroupId=$request->input('userWorkgroupId');
  121. $userWorkgroup=UserWorkgroup::find($userWorkgroupId);
  122. $userWorkgroup=$this->getQRCode($userWorkgroup);
  123. if (!$userWorkgroup)return view('exception.404',['error'=>'未找到工作组!']);
  124. return view('personnel/checking-in/QRcode',['userWorkgroup'=>$userWorkgroup]);
  125. }
  126. //获取工作组二维码
  127. public function getQRCode($userWorkgroup){
  128. $url=url("personnel/checking-in/userDutyCheck/clock");
  129. $url=$url."?userWorkgroupID=".$userWorkgroup->id;
  130. $qrCode=new QrCode($url);
  131. if ($userWorkgroup->id){
  132. $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  133. if (file_exists($fileURL)){
  134. $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  135. }
  136. $qrCode->writeFile($fileURL);
  137. $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  138. }
  139. return $userWorkgroup;
  140. }
  141. // //进入刷新二维码页面
  142. // public function refreshQRCode(Request $request){
  143. // $beforeTime=$request->input('beforeTime');
  144. // $warehouseId=$request->input('warehouseId');
  145. // $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
  146. // $userWorkgroups=$this->qrCode_refresh_time($userWorkgroups,$beforeTime);
  147. // $csrfToken=csrf_token();
  148. // if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
  149. // return ['userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),'csrf_Token'=>$csrfToken];
  150. // }
  151. // //二维码刷新时间
  152. // public function qrCode_refresh_time($userWorkgroups,$beforeTime){
  153. // $qrCode_refresh=config('hr.qrCode_refresh');
  154. // if (!Cache::has('last_refresh_date') || Cache::get('last_refresh_date')<date('Y-m-d H:i:s')){
  155. // $last_refresh_date=date('Y-m-d H:i:s',strtotime('+'.$qrCode_refresh.'second'));
  156. // Cache::put('last_refresh_date',$last_refresh_date);
  157. // return $this->flushQRCode($userWorkgroups);
  158. // }
  159. // if ($beforeTime==Cache::get('last_refresh_date')){
  160. // $time=strtotime($beforeTime);
  161. // //刷新 更新cache
  162. // $last_refresh_date=date('Y-m-d H:i:s', strtotime('+'.$qrCode_refresh.'second', $time));
  163. // Cache::put('last_refresh_date',$last_refresh_date);
  164. // return $this->flushQRCode($userWorkgroups);
  165. // }
  166. // //每次刷新都标记一个cache 新建 每次刷新前判断这个标记时间
  167. // //直接去本地获取二维码
  168. // return $this->getQRCode($userWorkgroups);
  169. // }
  170. // //刷新二维码
  171. // public function flushQRCode($userWorkgroups){
  172. // foreach ($userWorkgroups as $userWorkgroup){
  173. // $time=strtotime(Cache::get('last_refresh_date'));
  174. // $qrCode_refresh=config('hr.qrCode_refresh');
  175. // if ($qrCode_refresh){
  176. // $date=date('Y-m-d H:i:s', strtotime('+30second',$time));
  177. // $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
  178. // $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
  179. // }else{
  180. // $url=url("personnel/checking-in/userDutyCheck/clock");
  181. // $url=$url."?userWorkgroupID=".$userWorkgroup->id;
  182. // }
  183. // $qrCode=new QrCode($url);
  184. // if ($userWorkgroup->id){
  185. // $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  186. // $qrCode->writeFile($fileURL);
  187. // $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png').'?da='.Uuid::uuid1();
  188. // }
  189. // }
  190. // return $userWorkgroups;
  191. // }
  192. //获取工作组二维码
  193. // public function getQRCode($userWorkgroups){
  194. // foreach ($userWorkgroups as $userWorkgroup){
  195. // $qrCode_refresh_everyday=config('hr.qrCode_refresh_everyday');
  196. // if ($qrCode_refresh_everyday){
  197. // $date=md5(date('Y-m-d'));
  198. // $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
  199. // $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
  200. // }else{
  201. // $url=url("personnel/checking-in/userDutyCheck/clock");
  202. // $url=$url."?userWorkgroupID=".$userWorkgroup->id;
  203. // }
  204. // $qrCode=new QrCode($url);
  205. // if ($userWorkgroup->id){
  206. // $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  207. // if (file_exists($fileURL)){
  208. // $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  209. // continue;
  210. // }
  211. // $qrCode->writeFile($fileURL);
  212. // $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  213. // }
  214. // }
  215. // return $userWorkgroups;
  216. // }
  217. }