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::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 getUserWorkGroups(Request $request){
  120. $warehouseId=$request->input('warehouseId');
  121. $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
  122. if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
  123. return view('personnel/checking-in/getUserWorkGroups',['userWorkgroups'=>$userWorkgroups]);
  124. }
  125. //进入工作组二维码显示页面
  126. public function QRCode(Request $request){
  127. $userWorkgroupId=$request->input('userWorkgroupId');
  128. $userWorkgroup=UserWorkgroup::find($userWorkgroupId);
  129. $userWorkgroup=$this->getQRCode($userWorkgroup);
  130. if (!$userWorkgroup)return view('exception.404',['error'=>'未找到工作组!']);
  131. return view('personnel/checking-in/QRcode',['userWorkgroup'=>$userWorkgroup]);
  132. }
  133. //获取工作组二维码
  134. public function getQRCode($userWorkgroup){
  135. $url=url("personnel/checking-in/userDutyCheck/clock");
  136. $url=$url."?userWorkgroupID=".$userWorkgroup->id;
  137. $qrCode=new QrCode($url);
  138. if ($userWorkgroup->id){
  139. $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  140. if (file_exists($fileURL)){
  141. $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  142. }
  143. $qrCode->writeFile($fileURL);
  144. $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  145. }
  146. return $userWorkgroup;
  147. }
  148. // //进入刷新二维码页面
  149. // public function refreshQRCode(Request $request){
  150. // $beforeTime=$request->input('beforeTime');
  151. // $warehouseId=$request->input('warehouseId');
  152. // $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
  153. // $userWorkgroups=$this->qrCode_refresh_time($userWorkgroups,$beforeTime);
  154. // $csrfToken=csrf_token();
  155. // if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
  156. // return ['userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),'csrf_Token'=>$csrfToken];
  157. // }
  158. // //二维码刷新时间
  159. // public function qrCode_refresh_time($userWorkgroups,$beforeTime){
  160. // $qrCode_refresh=config('hr.qrCode_refresh');
  161. // if (!Cache::has('last_refresh_date') || Cache::get('last_refresh_date')<date('Y-m-d H:i:s')){
  162. // $last_refresh_date=date('Y-m-d H:i:s',strtotime('+'.$qrCode_refresh.'second'));
  163. // Cache::put('last_refresh_date',$last_refresh_date);
  164. // return $this->flushQRCode($userWorkgroups);
  165. // }
  166. // if ($beforeTime==Cache::get('last_refresh_date')){
  167. // $time=strtotime($beforeTime);
  168. // //刷新 更新cache
  169. // $last_refresh_date=date('Y-m-d H:i:s', strtotime('+'.$qrCode_refresh.'second', $time));
  170. // Cache::put('last_refresh_date',$last_refresh_date);
  171. // return $this->flushQRCode($userWorkgroups);
  172. // }
  173. // //每次刷新都标记一个cache 新建 每次刷新前判断这个标记时间
  174. // //直接去本地获取二维码
  175. // return $this->getQRCode($userWorkgroups);
  176. // }
  177. // //刷新二维码
  178. // public function flushQRCode($userWorkgroups){
  179. // foreach ($userWorkgroups as $userWorkgroup){
  180. // $time=strtotime(Cache::get('last_refresh_date'));
  181. // $qrCode_refresh=config('hr.qrCode_refresh');
  182. // if ($qrCode_refresh){
  183. // $date=date('Y-m-d H:i:s', strtotime('+30second',$time));
  184. // $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
  185. // $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
  186. // }else{
  187. // $url=url("personnel/checking-in/userDutyCheck/clock");
  188. // $url=$url."?userWorkgroupID=".$userWorkgroup->id;
  189. // }
  190. // $qrCode=new QrCode($url);
  191. // if ($userWorkgroup->id){
  192. // $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  193. // $qrCode->writeFile($fileURL);
  194. // $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png').'?da='.Uuid::uuid1();
  195. // }
  196. // }
  197. // return $userWorkgroups;
  198. // }
  199. //获取工作组二维码
  200. // public function getQRCode($userWorkgroups){
  201. // foreach ($userWorkgroups as $userWorkgroup){
  202. // $qrCode_refresh_everyday=config('hr.qrCode_refresh_everyday');
  203. // if ($qrCode_refresh_everyday){
  204. // $date=md5(date('Y-m-d'));
  205. // $url=url("personnel/checking-in/userDutyCheck/clock?key=").$date;
  206. // $url=$url."&&userWorkgroupID=".$userWorkgroup->id;
  207. // }else{
  208. // $url=url("personnel/checking-in/userDutyCheck/clock");
  209. // $url=$url."?userWorkgroupID=".$userWorkgroup->id;
  210. // }
  211. // $qrCode=new QrCode($url);
  212. // if ($userWorkgroup->id){
  213. // $fileURL=base_path('public/images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  214. // if (file_exists($fileURL)){
  215. // $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  216. // continue;
  217. // }
  218. // $qrCode->writeFile($fileURL);
  219. // $userWorkgroup->url=url('images/QRCodeIMG/'.$userWorkgroup->id.'.png');
  220. // }
  221. // }
  222. // return $userWorkgroups;
  223. // }
  224. }