DeviceController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Model\Depart;
  5. use App\Model\Employee;
  6. use App\Model\EmployeeDepartPermission;
  7. use App\Model\KqList;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Log;
  10. class DeviceController extends Controller
  11. {
  12. public $user_info;
  13. public function __construct()
  14. {
  15. }
  16. public function heartbeat(Request $request){
  17. //{
  18. //"api":"advert", //api对应的接口,
  19. //"time":"1539485650", //服务器的时间,unix时间到秒
  20. //"noncestr":"feefgf24223", //随机字符串,不超过32个长度,小写
  21. //"interval":"10000", //设备的心跳间隔,毫秒
  22. //"sign":"0e52c852228efa359b31d45a0a473bf3",//签名,32位小写,对time+noncestr+设备的cardpwd
  23. //"transaction_id":"100", //通讯id,便于跟踪前后,设备发出,设备收到不变
  24. //"clearfile":true, //是否清除原下载的文件,布尔型,注意:如果为true时,原所有下面三个类型的文件将会被清除,否则是增加新的文件
  25. //"wav": //语音文件,文件格式:wav,mp3,filename名称和文件可以保持相同
  26. //[
  27. //{"filename":"wav1.wav","url":"http://192.168.1.100:5002/wav1.wav"},
  28. //{"filename":"wav2.wav","url":"http://192.168.1.100:5002/wav2.wav"}
  29. //],
  30. //"jpg": //全屏广告图片文件,尺寸720x1280,文件格式:jpg,png
  31. //[
  32. //{"filename":"jpg1.jpg","url":"http://192.168.1.100:5002/jpg1.jpg"},
  33. //{"filename":"jpg2.jpg","url":"http://192.168.1.100:5002/jpg2.jpg"}
  34. //],
  35. //"jpghome": //首页广告图片文件,尺寸720x1280,文件格式:jpg,png,机型DC2108,水控,饮水机
  36. //[
  37. //{"filename":"jpg1.jpg","url":"http://192.168.1.100:5002/jpg1.jpg"},
  38. //{"filename":"jpg2.jpg","url":"http://192.168.1.100:5002/jpg2.jpg"}
  39. //],
  40. //"avi": //视频文件,文件格式:avi,mp4
  41. //[
  42. //{"filename":"avi1.avi","url":"http://192.168.1.100:5002/avi1.avi"},
  43. //{"filename":"avi2.avi","url":"http://192.168.1.100:5002/avi2.avi"}
  44. //]
  45. //}
  46. //{"transaction_id":"202411181852235843","api":"advert","records":[],"interval":"10000","result_code":0,"noncestr":"be39ff7eadc0450b91f0713c3382cd22","time":1731927143,"sign":"9ab968049901cd4e493baeec1dcf85fe","result_msg":"OK","clearfile":true,"jpg":{"filename":"backgroud.jpg","url":"https:\/\/adminapi.qingyaokeji.com\/image\/backgroud.jpg"},"jpghome":{"filename":"backgroud.jpg","url":"https:\/\/adminapi.qingyaokeji.com\/image\/backgroud.jpg"}}
  47. $data = $request->all();
  48. Log::channel('apiLog')->info('smkq-heartbeat', ['data' => $data]);
  49. $return = json_decode('{"transaction_id":"20220829142124067","api":"heartbeat","records":[],"interval":"10000","result_code":0,"noncestr":"be39ff7eadc0450b91f0713c3382cd22","time":"1661754084","sign":"9ab968049901cd4e493baeec1dcf85fe","result_msg":"OK"}',true);
  50. $return['api'] = 'advert';
  51. $return['clearfile'] = true;
  52. $return['jpg'] = [
  53. ['filename' => 'backgroud.jpg',
  54. 'url' => 'https://adminapi.qingyaokeji.com/image/backgroud.jpg'],
  55. ];
  56. $return['jpghome'] = [
  57. ['filename' => 'backgroud.jpg',
  58. 'url' => 'https://adminapi.qingyaokeji.com/image/backgroud.jpg'],
  59. ];
  60. $return['time'] = time();
  61. $return['transaction_id'] = date('YmdHis').rand(1000,9999);
  62. // var_dump($return);die;
  63. echo json_encode($return,JSON_UNESCAPED_UNICODE);die;
  64. // //考勤数据记录
  65. // //{"build_time":"2024-09-23 18-49-04","customer":"23333","dev_id":"001","door_state":"0","door_status":0,"faceCount":"1","fireware":"XF108-Y-SV1.020240822","ip":"192.168.0.241","mac":"3e:b6:b9:ed:0d:8e","main_board":0,"model":"2","noncestr":"218e16df13cb45cf998644bed4a6a673","personCount":"1","records":[{"RestAccount":0,"UserAccount":0,"account_id":"23333","base64":null,"card_sn":"12345","data_type":0,"devid":"001","emp_fname":"诸杰伟","flag":0,"gauze_mask":false,"id":1,"mark":0,"mode":0,"period_id":0,"photo_upload":1,"rec_type":0,"sign_time":"1727174516003","up_rec":0,"ver":2},{"RestAccount":0,"UserAccount":0,"account_id":"23333","base64":null,"card_sn":"12345","data_type":0,"devid":"001","emp_fname":"诸杰伟","flag":0,"gauze_mask":false,"id":2,"mark":0,"mode":0,"period_id":0,"photo_upload":1,"rec_type":0,"sign_time":"1727174524281","up_rec":0,"ver":2},{"RestAccount":0,"UserAccount":0,"account_id":"23333","base64":null,"card_sn":"12345","data_type":0,"devid":"001","emp_fname":"诸杰伟","flag":0,"gauze_mask":false,"id":3,"mark":0,"mode":0,"period_id":0,"photo_upload":1,"rec_type":0,"sign_time":"1727174571143","up_rec":0,"ver":2},{"RestAccount":0,"UserAccount":0,"account_id":"23333","base64":null,"card_sn":"12345","data_type":0,"devid":"001","emp_fname":"诸杰伟","flag":0,"gauze_mask":false,"id":4,"mark":0,"mode":0,"period_id":0,"photo_upload":1,"rec_type":0,"sign_time":"1727174927021","up_rec":0,"ver":2},{"RestAccount":0,"UserAccount":0,"account_id":"23333","base64":null,"card_sn":"12345","data_type":0,"devid":"001","emp_fname":"诸杰伟","emp_id":"23333","flag":0,"gauze_mask":false,"id":5,"mark":0,"mode":0,"period_id":0,"photo_upload":1,"rec_type":0,"sign_time":"1727175564215","up_rec":0,"ver":2}],"serialno":"410204307430","sign":"a79a58b2089224bf2e44dc9d63242453","sub_model":"2","time":"1727243811265","total":"5","transaction_id":"100","version":"V3.0.4"}
  66. if(isset($data['records'])&&!empty($data['records'])){
  67. $kq_list = [];
  68. $recodes = [];
  69. //{"RestAccount":0,"UserAccount":0,"account_id":"23333","base64":null,"card_sn":"12345","data_type":0,"devid":"001","emp_fname":"诸杰伟","flag":0,"gauze_mask":false,"id":1,"mark":0,"mode":0,"period_id":0,"photo_upload":1,"rec_type":0,"sign_time":"1727174516003","up_rec":0,"ver":2}
  70. foreach ($data['records'] as $v){
  71. $kq_list[] = [
  72. 'number' => $v['account_id'],
  73. 'emp_fname' => $v['emp_fname'],
  74. 'crt_time' => substr($v['sign_time'],0,10),
  75. 'flow_id' => $v['id'],
  76. 'devid' => $v['devid'],
  77. ];
  78. $recodes[] = [
  79. 'id' => $v['id']
  80. ];
  81. }
  82. KqList::insert($kq_list);
  83. $return['records'] = $recodes;
  84. }else{
  85. $emloyee = new Employee();
  86. $emloyee = $emloyee->where('is_device',0)->get()->toArray();
  87. $depart = Depart::pluck('title','id')->toArray();
  88. $depart_code = Depart::pluck('code','id')->toArray();
  89. $employee_depart = EmployeeDepartPermission::pluck('depart_id','employee_id')->toArray();
  90. $recodes = [];
  91. if(!empty($emloyee)){
  92. foreach ($emloyee as $v){
  93. if(!isset($depart_code[$employee_depart[$v['id']]]) || !isset( $depart[$employee_depart[$v['id']]])) continue;
  94. //{"url":"","sex":"男","emp_id":"001","groups":"11111111","valid_date":"2099-01-01","access_pwd":"1234","rec_id":"1","door_right":"","depart_name":"财务部","birth_date":"1996-01-01","level_id":15,"account_id":"00000001","twins":"","emp_fname":"测试人员","state":"0","card_sn":"12345"}
  95. $recodes[] = [
  96. 'url' => $v['pic'],
  97. 'tel' => $v['mobile'],
  98. 'sex' => $v['sex'],
  99. 'emp_id' => $v['number'],
  100. 'groups' => $depart_code[$employee_depart[$v['id']]],
  101. 'visitor' => "0",
  102. 'job_name' => "",
  103. 'valid_date' => '9999-01-01',
  104. 'access_pwd' => '1234',
  105. 'rec_id' => $v['number'],
  106. 'door_right' => '',
  107. 'depart_name' => $depart[$employee_depart[$v['id']]],
  108. 'birth_date' => $v['birth_date'],
  109. 'level_id' => 1,
  110. 'account_id' => $v['number'],
  111. 'twins' => '',
  112. 'emp_fname' => $v['emp_name'],
  113. 'state' => '0',
  114. 'card_sn' => '12345',
  115. ];
  116. }
  117. }
  118. //{"transaction_id":"20220829153806182","api":"addperson","interval":"10000","result_code":"0","noncestr":"5ec6966c0e1b41e193d82b52b0c5668c","whitelist":[{"url":"http://192.168.0.20:5002/photo/134/00066434.jpg?devid=802&trans_id=20220829153806182","tel":"","sex":"","emp_id":"123456","groups":"1","visitor":"0","job_name":"","valid_date":"9999-01-01","access_pwd":"3456","rec_id":620218,"door_right":"","depart_name":"测试部","birth_date":"","level_id":1,"account_id":"00066434","twins":"","emp_fname":"测试456","state":"0","card_sn":""}],"time":"1661758686","sign":"4dab2d55c119f5d7ea93a80c14d1951a","result_msg":"OK"}
  119. if(!empty($recodes)){
  120. $return['api'] = 'addperson';
  121. $return['whitelist'] = $recodes;
  122. }
  123. }
  124. $return['time'] = time();
  125. $return['transaction_id'] = date('YmdHis').rand(1000,9999);
  126. // var_dump($return);die;
  127. echo json_encode($return,JSON_UNESCAPED_UNICODE);
  128. }
  129. public function addperson(Request $request){
  130. //{"build_time":"2024-09-23 18-49-04","customer":"23333","dev_id":"001","door_status":0,"faceCount":"1","fireware":"XF108-Y-SV1.020240822","ip":"192.168.0.241","mac":"3e:b6:b9:ed:0d:8e","main_board":0,"model":"2","noncestr":"d28a5c104fad4cb1a5091d70db573530","personCount":"1","serialno":"410204307430","sign":"da8cec6fd9bf0831f15c31440d66b612","sub_model":"2","time":"1727175496486","total":"4","transaction_id":"100","version":"V3.0.4","whitelist":[{"account_id":"23333","emp_id":"23333","rec_id":"23333","result_code":"400"}]}
  131. $data = $request->all();
  132. Log::channel('apiLog')->info('smkq-addperson', ['data' => $data]);
  133. //{"build_time":"2024-09-23 18-49-04","customer":"23333","dev_id":"001","door_status":0,"faceCount":"1","fireware":"XF108-Y-SV1.020240822","ip":"192.168.0.241","mac":"3e:b6:b9:ed:0d:8e","main_board":0,"model":"2","noncestr":"b38ebc4de96c43d7aacb8225f3f46591","personCount":"1","serialno":"410204307430","sign":"fdbad4552caae32bd4ba7ebacca60cd8","sub_model":"2","time":"1727175016706","total":"4","transaction_id":"100","version":"V3.0.4","whitelist":[{"account_id":"23333","rec_id":"1","result_code":"407"}]}
  134. $records = [];
  135. if(isset($data['whitelist'])){
  136. $data = $data['whitelist'];
  137. foreach ($data as $v){
  138. // if($v['result_code'] == "400"){
  139. Employee::where('number',$v['account_id'])->update([
  140. 'is_device' => 1
  141. ]);
  142. // }
  143. }
  144. }
  145. $json = json_decode('{"transaction_id":"20220829142124067","api":"heartbeat","records":[],"interval":"10000","result_code":0,"noncestr":"be39ff7eadc0450b91f0713c3382cd22","time":"1661754084","sign":"9ab968049901cd4e493baeec1dcf85fe","result_msg":"OK"}',true);
  146. $json['transaction_id'] = date('YmdHis').rand(1000,9999);
  147. $json['time'] = time();
  148. echo json_encode($json);
  149. }
  150. public function capture(Request $request)
  151. {
  152. //{"json":"{"account_id":"23333","card_sn":"12345","devid":"001","emp_fname":"诸杰伟","emp_id":"23333","id":8,"rec_type":0,"start_time":"1727248857342","ver":2}","picture":{"Illuminate\\Http\\UploadedFile":"/tmp/phpqJxfNO"}}
  153. $data = $request->all();
  154. Log::channel('apiLog')->info('smkq-capture', ['data' => $data]);
  155. $data = json_decode($data['json'],true);
  156. if ($request->hasFile('picture')) {
  157. // 获取上传的文件对象
  158. $file = $request->file('picture');
  159. // 检查文件是否有效
  160. if ($file->isValid()) {
  161. // 设置保存路径和文件名(可以根据需要修改)
  162. $date = date('Ymd');
  163. $destinationPath = 'app/kq/' . $date; // 文件保存路径
  164. $filename = time() . '_' . $file->getClientOriginalName(); // 生成文件名
  165. // 移动文件到指定目录
  166. $file->move(storage_path($destinationPath), $filename);
  167. // 保存图片路径(可以存储到数据库等)
  168. $imagePath = $destinationPath . '/' . $filename;
  169. KqList::where('devid',$data['devid'])->where('flow_id',$data['id'])->update([
  170. 'pic' => explode('.',$filename)[0]
  171. ]);
  172. $return = [
  173. 'devid' => $data['devid'],
  174. 'emp_id' => $data['emp_id'],
  175. 'id' => $data['id'],
  176. ];
  177. echo json_encode($return);
  178. }
  179. }
  180. }
  181. }