Api.php 55 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355
  1. <?php
  2. namespace catchAdmin\api\controller;
  3. use catchAdmin\api\service\dispose;
  4. use catchAdmin\tag_history\model\Access;
  5. use catchAdmin\tag_history\model\Dormitory;
  6. use catchAdmin\tag_history\model\TagHistory;
  7. use catchAdmin\worklocation\model\WorkRecord as ModelWorkRecord;
  8. use catcher\base\CatchRequest as Request;
  9. use catcher\CatchResponse;
  10. use catcher\base\CatchController;
  11. use Exception;
  12. use think\facade\Cache;
  13. use \think\facade\Db;
  14. error_reporting(0);
  15. class Api extends CatchController
  16. {
  17. public function report()
  18. {
  19. $token = $_GET['token'];
  20. if (!$token || $token != '22723927C') {
  21. json_fail('缺少token或者token不对');
  22. }
  23. $param = json_decode(optimize_json(file_get_contents("php://input")), true);
  24. debug_log("上报数据",json_encode($param));
  25. if (json_last_error() != 0) {
  26. json_fail('解析异常', json_last_error_msg());
  27. }
  28. $mac = $param['mac'];
  29. if (empty($mac)) {
  30. json_fail('mac地址不存在');
  31. }
  32. $data = [];
  33. foreach ($param['list'] as $item) {
  34. // $onetime= TagHistory::where("mac",$mac)->where('lable',$item['label'])->order("id","desc")->value("time");
  35. $data[] = [
  36. 'mac' => $mac,
  37. 'lable' => $item['label'],
  38. 'rssi' => $item['rssi'],
  39. 'time' => $item['time'],
  40. 'addTime' => time(),
  41. 'move' => $item['move'],
  42. 'step' => empty($item['step']) ? 0 : $item['step'],
  43. 'temperature' => empty($item['temperature']) ? 0 : $item['temperature'],
  44. //告警
  45. 'temperWarn' => empty($item['temperWarn']) ? 00 : $item['temperWarn'],
  46. // "interval_time"=>empty($onetime) ?0:($item['time']-$onetime)
  47. ];
  48. }
  49. $tage = new TagHistory();
  50. $tage->saveAll($data);
  51. json_success('上传成功');
  52. }
  53. //储存数据到redis
  54. public function redis_to_mysql(){
  55. $ues_redis=Cache::store('redis')->handler();
  56. $dispose = new dispose($ues_redis);
  57. $text=null;
  58. while(1){
  59. $jsonData= $ues_redis->rpop("mqtt_data");
  60. if(empty($jsonData)){
  61. sleep(1);
  62. continue;
  63. }
  64. debug_log("InAndOUT",'数据redis'.$jsonData);
  65. $data=json_decode($jsonData,true);
  66. $time=$data['time'];
  67. $mac=$data['devId'];
  68. //存入基站的最新时间
  69. $dispose->setStations($mac,$time);
  70. $list=[];
  71. $text=$text.$data['cnt'];
  72. if(strlen($text)<24){
  73. continue;
  74. }
  75. while(strlen($text)>=24){
  76. $da=substr($text,0,24);
  77. $t1 = substr($da,8,2)=='00'||substr($da,8,2)=='10'||substr($da,8,2)=='01' ? true:false;
  78. $t2 =substr($da,10,6)=="FFFFFF"||substr($da,10,6)=="000000" ?true:false;
  79. if($t1&&$t2){
  80. $label= substr($da,0,8);
  81. $rssi1= substr($da,16,2);
  82. $rssi2= substr($da,18,2);
  83. $rssi3= substr($da,20,2);
  84. $rssi4= substr($da,22,2);
  85. $DA=[
  86. 'mac' => $mac,
  87. 'label' =>$label,
  88. 'rssi1' => hexdec($rssi1),
  89. 'rssi2' => hexdec($rssi2),
  90. 'rssi3' => hexdec($rssi3),
  91. 'rssi4' => hexdec($rssi4),
  92. 'report_time'=>$time
  93. ];
  94. $vs=false;
  95. $history_status=false;
  96. $DA['other_time']=date("Y-m-d H:i:s",$time);
  97. //打印原始的数据日志
  98. debug_log("label_log","cssh: ".json_encode($DA));
  99. $rssiHi = 85;
  100. if ($mac == '638007') {
  101. # code...
  102. $rssiHi = 60;
  103. }
  104. if($DA['rssi1']<=$rssiHi||$DA['rssi2']<=$rssiHi||$DA['rssi3']<=$rssiHi||$DA['rssi4']<=$rssiHi){
  105. //原始数据只要其中有一条信号小于85 都存入redis 历史数据
  106. $history_status=true;
  107. }
  108. $rssiIn = 72;
  109. //安装调测代码
  110. $de_macs = ['638006','638007', '631176'];
  111. $de_rfids = ['E2B6A925', '0200C1D2', '0200C1D1'];
  112. if (in_array($mac, $de_macs) && in_array($label, $de_rfids)){
  113. $deDa = $DA;
  114. $deDa['time'] = date("Y-m-d H:i:s",$time);
  115. $deLkey = 'debug_'.$mac.'_'. hexdec($label);
  116. $ues_redis->lpush($deLkey,json_encode($deDa));
  117. }
  118. //资产盘点调测代码
  119. if ($mac == '634669' || $mac == '898989') {
  120. # code...
  121. $assetData = [
  122. 'label' => $label,
  123. 'ant' => 1,
  124. 'rssi' => $DA['rssi1'],
  125. 'time' => $time,
  126. ];
  127. $ues_redis->lpush('asset_after_handle',json_encode($deDa));
  128. }
  129. if ($mac == '638007') {
  130. # code...
  131. $rssiIn = 60;
  132. }
  133. if($DA['rssi1']<=$rssiIn||$DA['rssi2']<=$rssiIn||$DA['rssi3']<=$rssiIn||$DA['rssi4']<=$rssiIn){
  134. //原始数据只要其中有一条信号小于72 都参与计算
  135. $vs=true;
  136. }
  137. $DA['rssi1']=$DA['rssi1']==255?100:$DA['rssi1'];
  138. $DA['rssi2']=$DA['rssi2']==255?100:$DA['rssi2'];
  139. $DA['rssi3']=$DA['rssi3']==255?100:$DA['rssi3'];
  140. $DA['rssi4']=$DA['rssi4']==255?100:$DA['rssi4'];
  141. $DA["rssi1"]=$DA["rssi1"]<=$DA["rssi3"]?$DA["rssi1"]:$DA["rssi3"];
  142. $DA["rssi2"]=$DA["rssi2"]<=$DA["rssi4"]?$DA["rssi2"]:$DA["rssi4"];
  143. /**
  144. * 缓存到redis中历史数据
  145. */
  146. if(substr($da,8,2)=='01'&&$history_status&&$DA["rssi1"]!=$DA["rssi2"]){
  147. debug_log("label_log","cache: ".json_encode($DA));
  148. $diff= $DA["rssi1"]-$DA["rssi2"];
  149. if(abs($diff)>2){
  150. //历史数据朝前和朝后的信号的差值大于2参与存储
  151. $dispose->set_label_history($DA);
  152. }
  153. debug_log("label_log","cache_diff: ".$diff);
  154. }
  155. /**
  156. * 参与计算的数据
  157. */
  158. if($vs&&(substr($da,8,2)=='01')){
  159. try{
  160. $DA= $dispose->check_data($DA);
  161. //处理的数据参与计算
  162. debug_log("label_log","xsj:".json_encode($DA));
  163. $dispose->computeResout($DA);
  164. }catch(Exception $e){
  165. debug_log("InAndOUT","抛出异常:".$e->getMessage());
  166. }
  167. }
  168. $text=substr($text,24);
  169. }else{
  170. $text=substr($text,1);
  171. }
  172. }
  173. }
  174. }
  175. public function redis_to_mysql2(){
  176. $redis=Cache::store('redis')->handler();
  177. // $dispose = new dispose($redis);
  178. $text=null;
  179. while(1){
  180. $jsonData= $redis->rpop("asset_after_handle");
  181. if(empty($jsonData)){
  182. sleep(1);
  183. continue;
  184. }
  185. // $jsonData= '{"mac": "01396C","data": [{"label": "230600070007","time": 1691128977,"ant": 1,"rssi": 19}]}';
  186. $list=json_decode($jsonData,true);
  187. $redis=Cache::store('redis')->handler();
  188. $received_state=$redis->hget('api_receiver_asset_state', 'accessClassReport');
  189. $mac=$list['mac'];
  190. foreach($list['data'] as $val){
  191. if ($received_state == '1') {
  192. # code...
  193. $antData = json_decode( $redis->hGet('lab_ant_tmp',$val['label']) );
  194. if (!$antData) {
  195. # code...
  196. $antData = [
  197. $val['ant'] => 1
  198. ];
  199. }elseif(!$antData[$val['ant']]){
  200. $antData[$val['ant']] = 1;
  201. }else {
  202. # code...
  203. $antData[$val['ant']] += 1;
  204. }
  205. $redis->hset('lab_ant_tmp',$val['label'], json_encode($antData) );
  206. }else{
  207. $redis->del('lab_ant_tmp');
  208. }
  209. //1 3外 2 4内
  210. if($val['ant']=='3'){
  211. $val['ant']='1';
  212. }elseif($val['ant']=='4'){
  213. $val['ant']='2';
  214. }
  215. $report_data=[
  216. 'mac' => $mac,
  217. 'label' =>$val['label'],
  218. 'rssi' =>$val['rssi'],
  219. 'ant' =>$val['ant'],
  220. 'time'=>$val['time']
  221. ];
  222. $countKey='station_receive_count_data';
  223. $key=$mac.'_'.$val['label'];
  224. $count_data=$redis->hGet($countKey,$key);
  225. if($count_data){
  226. $count_data++;
  227. }else{
  228. $count_data=1;
  229. }
  230. $redis->hSet($countKey,$key,$count_data);
  231. // var_dump($report_data);
  232. debug_log("redis_to_mysql2_data",'mac:'. $mac.' label:'.$val['label'].' ant:'.$val['ant'].' time:'.date('Y-m-d H:i:s',$val['time']).' rssi:'.$val['rssi'].' count:'.$count_data);
  233. if($received_state=='1'){
  234. //如果开启盘点 则有数据就推送
  235. $url="http://localhost:8115/api/assetReceiveReport";
  236. var_dump($report_data);
  237. $postFields = http_build_query($report_data);
  238. $url_res= curl_http_post($postFields,$url,false);
  239. echo 'assetReceiveReport res'.PHP_EOL;
  240. var_dump($url_res);
  241. }
  242. //推送给闸机用
  243. $url="http://localhost:8115/api/gateReport";
  244. var_dump($report_data);
  245. $postFields = http_build_query($report_data);
  246. $url_res= curl_http_post($postFields,$url,false);
  247. echo 'gateReceiveReport res'.PHP_EOL;
  248. var_dump($url_res);
  249. $hashKey='station_access_last_data';
  250. $beforeKey='station_access_before_data';
  251. $key=$mac.'_'.$val['label'];
  252. $last_data=json_decode($redis->hGet($hashKey,$key),true);
  253. // var_dump($old_data);
  254. if($last_data){
  255. //取出历史数据 对比两次数据变化
  256. if($last_data['ant']==$report_data['ant']){
  257. //相同 则更新时间
  258. $report_data['count']=$last_data['count']+1;
  259. $before_data=json_decode($redis->hGet($beforeKey,$key),true);
  260. //存在反向数据 并且连续搜到单边数据5次
  261. if($before_data && ($report_data['count']>5)){
  262. //开始推送数据;
  263. $send_data=[
  264. "mac"=>$mac,
  265. "label"=>$val['label'],
  266. 'time'=>$val['time'],
  267. ];
  268. if($report_data['ant']>$before_data['ant']){
  269. //1->2 外到内 进
  270. $send_data['dirt']=1;
  271. }else{
  272. //2>1 内到外 出
  273. $send_data['dirt']=2;
  274. }
  275. var_dump($send_data);
  276. //推送数据
  277. $url="http://localhost:8115/api/assetReport";
  278. $postFields = http_build_query($send_data);
  279. $url_res= curl_http_post($postFields,$url,false);
  280. echo 'assetReport res'.PHP_EOL;
  281. var_dump($url_res);
  282. //推送完清除数据
  283. $redis->hDel($hashKey,$key);
  284. $redis->hDel($beforeKey,$key);
  285. }else{
  286. $redis->hSet($hashKey,$key,json_encode($report_data));
  287. }
  288. }else{
  289. //比较数据时间
  290. //默认新数据更晚上报
  291. $report_data['count']=1;
  292. $redis->hSet($hashKey,$key,json_encode($report_data));
  293. $redis->hSet($beforeKey,$key,json_encode($last_data));
  294. // $send_data=[
  295. // "mac"=>$mac,
  296. // "label"=>$val['label'],
  297. // 'time'=>$val['time'],
  298. // ];
  299. // if($report_data['ant']>$last_data['ant']){
  300. // //1->2 内到外 出
  301. // $send_data['dirt']=2;
  302. // }else{
  303. // //2>1 外到内 进
  304. // $send_data['dirt']=1;
  305. // }
  306. // var_dump($send_data);
  307. // //推送数据
  308. // $url="http://localhost:8115/api/assetReport";
  309. // $postFields = http_build_query($send_data);
  310. // $url_res= curl_http_post($postFields,$url,false);
  311. // echo 'assetReport res'.PHP_EOL;
  312. // var_dump($url_res);
  313. // $redis->hSet($hashKey,$key,json_encode($report_data));
  314. }
  315. }else{
  316. $report_data['count']=1;
  317. $redis->hSet($hashKey,$key,json_encode($report_data));
  318. }
  319. }
  320. }
  321. }
  322. public function asset_redis(){
  323. while(true){
  324. $redis=Cache::store('redis')->handler();
  325. $hashKey='station_access_last_data';
  326. $beforeKey='station_access_before_data';
  327. $list=$redis->hgetall($hashKey);
  328. foreach($list as $key=>$val){
  329. $report_data = json_decode($val, true);
  330. if ( (time() - $report_data["time"] ) > 10 ) {
  331. $before_data=json_decode($redis->hGet($beforeKey,$key),true);
  332. //存在反向数据 并且连续搜到单边数据5次
  333. if($before_data){
  334. //开始推送数据;
  335. $send_data=[
  336. "mac"=>$report_data['mac'],
  337. "label"=>$report_data['label'],
  338. 'time'=>$report_data['time'],
  339. ];
  340. if($report_data['ant']>$before_data['ant']){
  341. //1->2 外到内 进
  342. $send_data['dirt']=1;
  343. }else{
  344. //2>1 内到外 出
  345. $send_data['dirt']=2;
  346. }
  347. var_dump($send_data);
  348. //推送数据
  349. $url="http://localhost:8115/api/assetReport";
  350. $postFields = http_build_query($send_data);
  351. $url_res= curl_http_post($postFields,$url,false);
  352. echo 'assetReport res'.PHP_EOL;
  353. var_dump($url_res);
  354. //推送完清除数据
  355. $redis->hDel($hashKey,$key);
  356. $redis->hDel($beforeKey,$key);
  357. }
  358. }
  359. }
  360. sleep(1);
  361. }
  362. }
  363. /**
  364. * 清除数据
  365. *
  366. * @return void
  367. */
  368. public function clear_redis(){
  369. //清理超时的标签
  370. while(1){
  371. sleep(1);
  372. $redis=Cache::store('redis')->handler();
  373. $dispose = new dispose($redis);
  374. $keylist= $dispose->getStations();
  375. //获取存储的的基站
  376. debug_log("clear_label","查询数据".json_encode($keylist));
  377. if(empty($keylist)){
  378. continue;
  379. }
  380. foreach($keylist as $station){
  381. //结果key值
  382. $key="res".$station;
  383. //存取旧的数据的reids数据
  384. $catchkey=$station."station";
  385. //获取该基站的所有key
  386. $keys= $redis->hKeys($key);
  387. if(empty($keys)){
  388. continue;
  389. }
  390. foreach($keys as $item){
  391. if( $json_data=$redis->hget($key,$item)){
  392. debug_log("clear_label",'基站'.$station.'获取的数据'.'标签'.$item.$json_data);
  393. $json_data=json_decode($json_data,true);
  394. //列表
  395. $a=$json_data['a'];
  396. //状态
  397. $status=$json_data['status'];
  398. //是否形成进出考勤
  399. $in_and_out=$json_data["in_and_out"];
  400. //总数
  401. $count= count($a);
  402. $time= $dispose->getNowStationTime($station);
  403. debug_log("clear_label","标签最新最新时间". date('Y-m-d H:i:s', $time));
  404. //如果标签间隔超过7s,则超时并判断能否生成进出
  405. if(($time-$json_data["time"])<=7){
  406. debug_log("clear_label", $item.':'. "标签上报间隔没有超过7秒进行跳过");
  407. continue;
  408. }
  409. if($count<5){
  410. //如果信号条数小于等于2条不参与计算,信号条数大于2小于5条,则直接进行判断是否形成进出
  411. if($count>2){
  412. debug_log("clear_label", $item.':'. "标签信号个数等于超过2个,参与计算");
  413. $frist=$a[0]['dirt'];
  414. $end=$a[$count-1]['dirt'];
  415. if($frist!=$end){
  416. debug_log("clear_label", $item.':'. "标签信号个数等于超过2个,参与计算,得出结果:".$frist);
  417. $dispose->network_push($station,$item,$a[$count-1]['time'],$frist==1?1:2);
  418. }else{
  419. debug_log("clear_label", $item.':'. "标签信号个数没有超过2个,全部去清除");
  420. }
  421. }
  422. }else{
  423. //如果信号条数大于5条,则判断最后三条数据的信号强的方向是否和初始方向相反
  424. $front=0;
  425. $back=0;
  426. $res=0;
  427. if($a[$count-3]['dirt']==1){
  428. $front+=1;
  429. }else{
  430. $back+=1;
  431. }
  432. if($a[$count-2]['dirt']==1){
  433. $front+=1;
  434. }else{
  435. $back+=1;
  436. }
  437. if($a[$count-1]['dirt']==1){
  438. $front+=1;
  439. }else{
  440. $back+=1;
  441. }
  442. if($front>$back){
  443. $res=1;
  444. }else{
  445. $res=2;
  446. }
  447. if($status['dirt']!=$res){
  448. //最后三条数据的信号强的方向和初始方向相反,则形成进出考勤
  449. debug_log("clear_label", $item.':'. "最后一个信号,方向相反,得出结果,清除缓存数据");
  450. $dispose->network_push($station,$item,$a[$count-1]['time'],$status['dirt']==1?1:2);
  451. }else{
  452. //最后三条数据的信号强的方向和初始方向不相反,并且在连续的时间内没有生成考勤,则开始第二次判断
  453. if(empty($in_and_out)){
  454. //判断第二次能否生成考勤结果
  455. $res=$dispose->second_create_direction($station,$item);
  456. if(!empty($res)){
  457. //获取该标签的之前最新的考勤,和当前形成考勤时间间隔是否大于10,
  458. //如果大于10则生成考勤结果
  459. $res_time= $dispose->get_time_results($station,$item);
  460. $res_time= empty($res_time)?0:$res_time;
  461. $diff_time=$res['time']-$res_time;
  462. debug_log("clear_label", $item.':'. "间隔时间".$diff_time);
  463. //判断如果结果超过时间
  464. if($diff_time>10){
  465. debug_log("clear_label", $item.':'. "二次生成进出");
  466. $dispose->network_push($station,$item,$res['time'],$res['dirt']);
  467. }
  468. }else{
  469. //二次判断如果也没生成考勤,如果朝前的信号最大强度低于65,
  470. //朝后的信号最大强度也低于65,则记录下来最后的朝向,
  471. //存入没有生成考勤时的初始数据
  472. //获取朝前的最大值
  473. //获取朝后的最大值
  474. $frontMax= $dispose->get_label_history(4,$station,$item);
  475. $backMax= $dispose->get_label_history(5,$station,$item);
  476. $records=false;
  477. if($status['dirt']==1){
  478. $records=$frontMax<65;
  479. }
  480. if($status['dirt']==2){
  481. $records=$backMax<65;
  482. }
  483. if($records){
  484. $dispose->no_check_data($station,$item,$status['dirt'],$a[$count-1]['time'],1);
  485. }
  486. }
  487. }
  488. //二次进出
  489. debug_log("clear_label", $item.':'. "最后一个信号,方向没有变化,清除缓存数据");
  490. }
  491. }
  492. //清除对应的键值对
  493. //清空头部尾部历史
  494. $dispose->get_label_history(3,$station,$item);
  495. $redis->hdel($key,$item);
  496. $redis->hdel($catchkey,$item);
  497. }
  498. }
  499. }
  500. }
  501. }
  502. /**
  503. * 远程推送数据
  504. *
  505. * @return void
  506. */
  507. public function remotePush(){
  508. while(true){
  509. $redis=Cache::store('redis')->handler();
  510. $key="push_data";
  511. $url="http://localhost:8115/api/accessReport";
  512. sleep(2);
  513. while($data=$redis->lPop($key)){
  514. if(!empty($data)){
  515. debug_log($key,"远程推送的数据".$data);
  516. $url_res= curl_http_post($data,$url,false);
  517. $num=1;
  518. while($url_res==false){
  519. $num++;
  520. $url_res= curl_http_post($data,$url,false);
  521. if($num>=3){
  522. debug_log($key,"远程推送的地址".$url);
  523. debug_log($key,"连续推送三次失败,远程推送的数据".$data);
  524. break;
  525. }
  526. }
  527. debug_log($key,"远程返回结果".$url_res);
  528. }
  529. }
  530. }
  531. }
  532. public function redis_to_mysql_parea(){
  533. $ues_redis=Cache::store('redis')->handler();
  534. $text="";
  535. $dispose = new dispose($ues_redis);
  536. while(1){
  537. $jsonData= $ues_redis->rpop("mqtt_data_parea4rssi");
  538. debug_log("pare_InAndOUT",'数据redis'.$jsonData);
  539. if(empty($jsonData)){
  540. debug_log("pare_InAndOUT",'没有数据');
  541. sleep(1);
  542. continue;
  543. }
  544. // debug_log("InAndOUT",$jsonData);
  545. $data=json_decode($jsonData,true);
  546. // debug_log("InAndOUT",$data['cnt']);
  547. $time=$data['time'];
  548. $mac=$data['devId'];
  549. $text=$text.$data['cnt'];
  550. if(strlen($text)<24){
  551. continue;
  552. }
  553. $text = $this->handleMessage($text, $mac, $time, $ues_redis);
  554. }
  555. }
  556. public function redis_to_mysql_indoor(){
  557. $ues_redis=Cache::store('redis')->handler();
  558. $text="";
  559. $dispose = new dispose($ues_redis);
  560. while(1){
  561. $jsonData= $ues_redis->lpop("mqtt_data_indoor4rssi");
  562. debug_log("indoor_InAndOUT",'mqtt数据redis'.$jsonData);
  563. if(!$jsonData){
  564. debug_log("indoor_InAndOUT",'mqtt没有数据');
  565. sleep(1);
  566. continue;
  567. }
  568. // debug_log("InAndOUT",$jsonData);
  569. $data=json_decode($jsonData,true);
  570. // debug_log("InAndOUT",$data['cnt']);
  571. $time=$data['time'];
  572. $mac=$data['devId'];
  573. $text=$text.$data['cnt'];
  574. if(strlen($text)<24){
  575. continue;
  576. }
  577. // var_dump("before",microtime());
  578. $text = $this->handleMessageIndoor($text, $mac, $time, $ues_redis);
  579. // var_dump("after",microtime());
  580. }
  581. }
  582. //打印日志
  583. public function temporary_label_log(){
  584. $redis=Cache::store('redis')->handler();
  585. // $key="temporary_label";
  586. // $list= $redis->HgetAll($key);
  587. // debug_log($key,json_encode($list));
  588. // debug_log($key,"所有的标签");
  589. // foreach($list as $k=>$value){
  590. // debug_log($key,json_encode([$k=>$value]));
  591. // }
  592. // debug_log($key,"所有总数".count($list));
  593. // debug_log($key,"上报的标签");
  594. // $i=0;
  595. // foreach($list as $k=>$value){
  596. // if($value==2){
  597. // debug_log($key,json_encode([$k=>$value]));
  598. // $i++;
  599. // }
  600. // }
  601. // debug_log($key,"正常上报的标签总数".$i);
  602. // debug_log($key,"补出的标签");
  603. // $t=0;
  604. // foreach($list as $k=>$value){
  605. // if($value==3){
  606. // $t++;
  607. // debug_log($key,json_encode([$k=>$value]));
  608. // }
  609. // }
  610. // debug_log($key,"补出的标签总数".$t);
  611. // debug_log($key,"没有上报的的标签");
  612. // $f=0;
  613. // foreach($list as $k=>$value){
  614. // if($value==1){
  615. // debug_log($key,json_encode([$k=>$value]));
  616. // $f++;
  617. // }
  618. // }
  619. // debug_log($key,"没有上报的的标签总数".$f);
  620. // // $redis->del($key);
  621. $dis= new dispose($redis);
  622. $dis->analysisLog();
  623. }
  624. // public function temporary_label($redis,$label,$type){
  625. // $key="temporary_label";
  626. // if($type==1){
  627. // $res= $redis->hGet($key,$label);
  628. // if($res==false){
  629. // $redis->hSet($key,$label,1);
  630. // }
  631. // }else{
  632. // $redis->hSet($key,$label,3);
  633. // }
  634. // }
  635. //消息处理--重点区域
  636. public function handleMessage($text, $mac, $time, $ues_redis){
  637. while(strlen($text)>=24){
  638. $da=substr($text,0,24);
  639. $t1 = substr($da,8,2)=='00'||substr($da,8,2)=='10'||substr($da,8,2)=='01' ? true:false;
  640. $t2 =substr($da,10,6)=="FFFFFF"||substr($da,10,6)=="000000" ?true:false;
  641. if($t1&&$t2){
  642. // var_dump($text);
  643. $rfid= substr($da,0,8);
  644. $rssi1= hexdec(substr($da,16,2));
  645. $rssi2= hexdec(substr($da,18,2));
  646. $rssi3= hexdec(substr($da,20,2));
  647. $rssi4= hexdec(substr($da,22,2));
  648. // $rc1 = ($rssi1 == 255 ? 0 : 1);
  649. // $rc2 = ($rssi2 == 255 ? 0 : 1);
  650. // $rc3 = ($rssi3 == 255 ? 0 : 1);
  651. // $rc4 = ($rssi4 == 255 ? 0 : 1);
  652. $DA=[
  653. 'mac' => $mac,
  654. 'label' =>$rfid,
  655. 'rssi1' => $rssi1,
  656. 'rssi2' => $rssi2,
  657. 'rssi3' => $rssi3,
  658. 'rssi4' => $rssi4,
  659. 'report_time'=>$time
  660. ];
  661. $field = $mac."_".$rfid;
  662. $info = $ues_redis->hget("parea_rfidinfos",$field);
  663. debug_log("pare_InAndOUT","数据:".json_encode($DA,true));
  664. if($rssi1 ==255 && $rssi2 == 255 && $rssi3 == 255 && $rssi4 == 255){
  665. debug_log("pare_InAndOUT","无效数据:".json_encode($DA,true));
  666. }else{
  667. if(!$info){
  668. $info = [
  669. "mac" => $mac,
  670. "id" => $rfid,
  671. "first_time" => $time,
  672. "time" => $time,
  673. "status" => 2,//2出状态,1进状态
  674. "rssi" => [
  675. [
  676. "front" => $rssi1,
  677. "behind" => $rssi2,
  678. "left" => $rssi3,
  679. "right" => $rssi4,
  680. "time" => $time
  681. ]
  682. ]
  683. ];
  684. $ues_redis->hset("parea_rfidinfos",$field, json_encode($info,true));
  685. debug_log("parea_rfidinfos_redis_set_record","redis更新记录".json_encode($info,true));
  686. }else{
  687. $info = json_decode($info,true);
  688. $config = $ues_redis->hget("anbang_four_wire", $info["mac"]);
  689. if (!$config) {
  690. # code...
  691. $config = [
  692. "front_in" => 80,
  693. "behind_in" => 80,
  694. "left_in" => 80,
  695. "right_in" => 80,
  696. "front_out" => 255,
  697. "behind_out" => 255,
  698. "left_out" => 255,
  699. "right_out" => 255,
  700. "expInt" => 12,
  701. "effSigNum" => 6
  702. ];
  703. }else{
  704. $config = json_decode($config,true);
  705. }
  706. // var_dump("+++++++++++++++++",$config);
  707. $info["time"] = $time;
  708. $newRssi = [
  709. "front" => $rssi1,
  710. "behind" => $rssi2,
  711. "left" => $rssi3,
  712. "right" => $rssi4,
  713. "time" => $time
  714. ];
  715. $rssisArr = $info["rssi"];
  716. // var_dump("+++++++++++++++++", $time, $newRssi["time"]);
  717. foreach ($rssisArr as $k => $v) {
  718. # code...
  719. if( ($time - $v["time"] ) > $config['expInt'] ){
  720. unset($rssisArr[$k]);
  721. }
  722. }
  723. // var_dump("+++++++++++++++++",$rssisArr);
  724. if(count($rssisArr) == $config['effSigNum']){
  725. array_shift($rssisArr);
  726. array_push($rssisArr, $newRssi);
  727. }else{
  728. array_push($rssisArr, $newRssi);
  729. }
  730. $rssisArr =array_values($rssisArr);
  731. // var_dump("+++++++++++++++++",$rssisArr);
  732. $info["rssi"] = $rssisArr;
  733. // var_dump("------------",$info["rssi"]);
  734. $cacCount = count($rssisArr);
  735. // if($cacCount > $EFF_SIG_NUM){
  736. $sum1 = 0;
  737. $sum2 = 0;
  738. $sum3 = 0;
  739. $sum4 = 0;
  740. foreach ($rssisArr as $k => $v) {
  741. # code...
  742. $sum1 += ($v["front"] == 255 ? 90 : $v["front"]);
  743. $sum2 += ($v["behind"] == 255 ? 90 : $v["behind"]);
  744. $sum3 += ($v["left"] == 255 ? 90 : $v["left"]);
  745. $sum4 += ($v["right"] == 255 ? 90 : $v["right"]);
  746. }
  747. $info["avg"] = [
  748. "front" => number_format( $sum1/$cacCount, 2 ),
  749. "behind" => number_format( $sum2/$cacCount, 2 ),
  750. "left" => number_format( $sum3/$cacCount, 2 ),
  751. "right" => number_format( $sum4/$cacCount, 2 ),
  752. ];
  753. // var_dump($cacCount, $EFF_SIG_NUM, "dddddddd");
  754. if ($cacCount == $config['effSigNum']) {
  755. # code...
  756. $info = $this->compAndPush($info ,$config, $ues_redis);
  757. }
  758. $ues_redis->hset("parea_rfidinfos",$field, json_encode($info,true));
  759. debug_log("parea_rfidinfos_redis_set_record","redis更新记录".json_encode($info,true));
  760. }
  761. }
  762. $text=substr($text,24);
  763. }else{
  764. $text=substr($text,1);
  765. }
  766. }
  767. return $text ?$text : "";
  768. }
  769. //消息处理--室内
  770. public function handleMessageIndoor($text, $mac, $time, $ues_redis){
  771. while(strlen($text)>=24){
  772. $da=substr($text,0,24);
  773. $t1 = substr($da,8,2)=='00'||substr($da,8,2)=='10'||substr($da,8,2)=='01' ? true:false;
  774. $t2 =substr($da,10,6)=="FFFFFF"||substr($da,10,6)=="000000" ?true:false;
  775. if($t1&&$t2){
  776. // var_dump($text);
  777. $rfid= substr($da,0,8);
  778. $rssi1= hexdec(substr($da,16,2));
  779. $rssi2= hexdec(substr($da,18,2));
  780. $rssi3= hexdec(substr($da,20,2));
  781. $rssi4= hexdec(substr($da,22,2));
  782. $DA=[
  783. 'mac' => $mac,
  784. 'label' =>$rfid,
  785. 'rssi1' => $rssi1,
  786. 'rssi2' => $rssi2,
  787. 'rssi3' => $rssi3,
  788. 'rssi4' => $rssi4,
  789. 'report_time'=>$time
  790. ];
  791. $field = $mac."_".$rfid;
  792. $info = $ues_redis->hget("indoor_rfidinfos",$field);
  793. debug_log("indoor_InAndOUT","数据:".json_encode($DA,true));
  794. if($rssi1 ==255 && $rssi2 == 255 && $rssi3 == 255 && $rssi4 == 255){
  795. debug_log("indoor_InAndOUT","无效数据:".json_encode($DA,true));
  796. }else{
  797. if(!$info){
  798. $info = [
  799. "mac" => $mac,
  800. "id" => $rfid,
  801. "first_time" => $time,
  802. "time" => $time,
  803. "status" => 2,//2出状态,1进状态
  804. "rssi" => [
  805. [
  806. "front" => $rssi1,
  807. "behind" => $rssi2,
  808. "left" => $rssi3,
  809. "right" => $rssi4,
  810. "time" => $time
  811. ]
  812. ]
  813. ];
  814. $ues_redis->hset("indoor_rfidinfos",$field, json_encode($info,true));
  815. debug_log("indoor_rfidinfos_redis_set_record","redis更新记录".json_encode($info,true));
  816. }else{
  817. $info = json_decode($info,true);
  818. $config = $ues_redis->hget("anbang_four_wire", $info["mac"]);
  819. if (!$config) {
  820. # code...
  821. $config = [
  822. "front_in" => 80,
  823. "behind_in" => 80,
  824. "left_in" => 80,
  825. "right_in" => 80,
  826. "front_out" => 255,
  827. "behind_out" => 255,
  828. "left_out" => 255,
  829. "right_out" => 255,
  830. "expInt" => 12,
  831. "effSigNum" => 6
  832. ];
  833. }else{
  834. $config = json_decode($config,true);
  835. }
  836. // var_dump("+++++++++++++++++",$config);
  837. $info["time"] = $time;
  838. $newRssi = [
  839. "front" => $rssi1,
  840. "behind" => $rssi2,
  841. "left" => $rssi3,
  842. "right" => $rssi4,
  843. "time" => $time
  844. ];
  845. $rssisArr = $info["rssi"];
  846. // var_dump("+++++++++++++++++", $time, $newRssi["time"]);
  847. foreach ($rssisArr as $k => $v) {
  848. # code...
  849. if( ($time - $v["time"] ) > $config['expInt'] ){
  850. unset($rssisArr[$k]);
  851. }
  852. }
  853. // var_dump("+++++++++++++++++",$rssisArr);
  854. if(count($rssisArr) == $config['effSigNum']){
  855. array_shift($rssisArr);
  856. array_push($rssisArr, $newRssi);
  857. }else{
  858. array_push($rssisArr, $newRssi);
  859. }
  860. $rssisArr =array_values($rssisArr);
  861. // var_dump("+++++++++++++++++",$rssisArr);
  862. $info["rssi"] = $rssisArr;
  863. // var_dump("------------",$info["rssi"]);
  864. $cacCount = count($rssisArr);
  865. // if($cacCount > $EFF_SIG_NUM){
  866. $sum1 = 0;
  867. $sum2 = 0;
  868. $sum3 = 0;
  869. $sum4 = 0;
  870. foreach ($rssisArr as $k => $v) {
  871. # code...
  872. $sum1 += ($v["front"] == 255 ? 90 : $v["front"]);
  873. $sum2 += ($v["behind"] == 255 ? 90 : $v["behind"]);
  874. $sum3 += ($v["left"] == 255 ? 90 : $v["left"]);
  875. $sum4 += ($v["right"] == 255 ? 90 : $v["right"]);
  876. }
  877. $info["avg"] = [
  878. "front" => number_format( $sum1/$cacCount, 2 ),
  879. "behind" => number_format( $sum2/$cacCount, 2 ),
  880. "left" => number_format( $sum3/$cacCount, 2 ),
  881. "right" => number_format( $sum4/$cacCount, 2 ),
  882. ];
  883. // var_dump($cacCount, $EFF_SIG_NUM, "dddddddd");
  884. if ($cacCount == $config['effSigNum']) {
  885. # code...
  886. $info = $this->compAndPushIndoor($info ,$config, $ues_redis);
  887. }
  888. $ues_redis->hset("indoor_rfidinfos",$field, json_encode($info,true));
  889. debug_log("indoor_rfidinfos_redis_set_record","redis更新记录".json_encode($info,true));
  890. }
  891. }
  892. $text=substr($text,24);
  893. }else{
  894. $text=substr($text,1);
  895. }
  896. }
  897. return $text ?$text : "";
  898. }
  899. //判断进出和推送--室内考勤
  900. public function compAndPushIndoor($info, $config, $ues_redis){
  901. //标签多,数据多时候,判断完成后放入redis,异步推送,当前暂时直接推
  902. // $config = $ues_redis->hget("anbang_four_wire", $info["mac"]);
  903. //{"front_in":44,"front_out":44,"behind_in":50,"behind_out":50,"left_in":55,"left_out":55,"right_out":44,"right_out":44}
  904. $avg = $info['avg'];
  905. $status = $info['status'];
  906. $flagIn = $avg["front"] < $config["front_in"] || $avg["behind"] < $config["behind_in"] || $avg["left"] < $config["left_in"] || $avg["right"] < $config["right_in"];
  907. $flagOut = $avg["front"] > $config["front_out"] && $avg["behind"] > $config["behind_out"] && $avg["left"] > $config["left_out"] && $avg["right"] > $config["right_out"];
  908. $url="http://localhost:8115/api/api/accessClassReport";
  909. // $url="http://61.175.203.188:10001/api/accessClassReport";
  910. // if($flagIn && $status == 2){
  911. if($flagIn){
  912. if ($info["pushTime"] && (time()-$info['pushTime']) < 120 ) {
  913. # code...
  914. return $info;
  915. }
  916. //推送进
  917. $info['status'] = 1;
  918. $url_data = [
  919. "mac" => $info["mac"],
  920. "data" => [
  921. [
  922. "label" => $info["id"],
  923. "time" => $info["time"],
  924. "dirt" => 1,
  925. "rssi" => $info["rssi"],//数组 [{"front":72,"behind":255,"left":255,"right":255,"time":1685067709},{"front":76,"behind":255,"left":255,"right":255,"time":1685067710}]
  926. "avg" => $info["avg"] //{"front":"77.17","behind":"90.00","left":"90.00","right":"90.00"}
  927. ]
  928. ]
  929. ];
  930. $ues_redis->lpush("indoor_inoutres_push", json_encode($url_data));
  931. $info['pushTime'] = time();
  932. // debug_log("push_indoor_res","进推送依赖:".json_encode($info));
  933. // $url_res= curl_http_post(json_encode($url_data),$url,false);
  934. // debug_log("push_indoor_res","远程返回结果".$url_res);
  935. }
  936. // if($info['id'] == "E2B15AD5"){
  937. // var_dump($flagIn, $flagOut, $status, $avg["front"],$avg["behind"],$avg["left"], $avg["right"]);
  938. // }
  939. if($flagOut && $status == 1){
  940. if ($info["pushTime"] && (time()-$info['pushTime']) < 5 ) {
  941. # code...
  942. return $info;
  943. }
  944. //推送出
  945. $info['status'] = 2;
  946. $url_data = [
  947. "mac" => $info["mac"],
  948. "data" => [
  949. [
  950. "label" => $info["id"],
  951. "time" => $info["time"],
  952. "dirt" => 2,
  953. "rssi" => $info["rssi"],//数组 [{"front":72,"behind":255,"left":255,"right":255,"time":1685067709},{"front":76,"behind":255,"left":255,"right":255,"time":1685067710}]
  954. "avg" => $info["avg"] //{"front":"77.17","behind":"90.00","left":"90.00","right":"90.00"}
  955. ]
  956. ]
  957. ];
  958. $ues_redis->lpush("indoor_inoutres_push", json_encode($url_data));
  959. // debug_log("push_indoor_res","出推送依赖:".json_encode($info));
  960. // $url_res= curl_http_post(json_encode($url_data),$url,false);
  961. $info['pushTime'] = time();
  962. // debug_log("push_indoor_res","远程返回结果".$url_res);
  963. }
  964. return $info;
  965. }
  966. //判断进出和推送
  967. public function compAndPush($info, $config,$ues_redis){
  968. //标签多,数据多时候,判断完成后放入redis,异步推送,当前暂时直接推
  969. $avg = $info['avg'];
  970. $status = $info['status'];
  971. $flagIn = $avg["front"] < $config["front_in"] || $avg["behind"] < $config["behind_in"] || $avg["left"] < $config["left_in"] || $avg["right"] < $config["right_in"];
  972. $flagOut = $avg["front"] > $config["front_out"] && $avg["behind"] > $config["behind_out"] && $avg["left"] > $config["left_out"] && $avg["right"] > $config["right_out"];
  973. if ($info['mac'] == '638101') {
  974. # code...
  975. echo '-------------label:'.$info['id'].'------------------'.PHP_EOL;
  976. var_dump($info['first_in_time'],$info['time'], $info['pushTime'], $flagIn, $flagOut);
  977. }
  978. if($flagIn && $status == 2){
  979. // if($flagIn && ($status == 2 || $status == 3) ){
  980. // if($flagIn){
  981. $inoutIntFilter = $ues_redis->hget("anbang_four_wire", "anbang_4rssi_intFilter");
  982. $inoutIntFilter = $inoutIntFilter ? $inoutIntFilter : 120;
  983. if(!$info['first_in_time']){
  984. $info['first_in_time'] = time();
  985. }
  986. if ($info["pushTime"] && (time()-$info['pushTime']) < 120 ) {
  987. # code...
  988. return $info;
  989. }
  990. // // 临时功能代码
  991. // var_dump($info["id"]);
  992. // $labels = ['0200C1D1', '0200C1D2']; //测试设备
  993. // if (in_array(strtoupper($info['id']), $labels)) {
  994. // # code...
  995. // //card_black
  996. // $where = [];
  997. // $where[] = ['type', '=','basic_config'];
  998. // $where[] = ['field', '=','card_black'];
  999. // $bkList = Db::name('sys_config')->where($where)->find();
  1000. // $bkList = explode(',', $bkList['fieldValue']);
  1001. // // var_dump($info['id'],in_array(strtoupper($info['id']), $bkList),$bkList);
  1002. // if (in_array(strtoupper($info['id']), $bkList)) {
  1003. // # code...
  1004. // $info['status'] = 3;
  1005. // }
  1006. // }
  1007. $expInt =$info["time"]-$info["first_in_time"];
  1008. if ($expInt >= 100 ) {
  1009. //推送进
  1010. $info['status'] = 1;
  1011. # code...
  1012. // var_dump('-------------expint------',$info["id"],$expInt);
  1013. $url_data = [
  1014. "mac" => $info["mac"],
  1015. "data" => [
  1016. [
  1017. "label" => $info["id"],
  1018. "time" => $info["time"],
  1019. "first_time" => $info["first_time"],
  1020. "dirt" => $info['status'],
  1021. "rssi" => $info["rssi"],//数组 [{"front":72,"behind":255,"left":255,"right":255,"time":1685067709},{"front":76,"behind":255,"left":255,"right":255,"time":1685067710}]
  1022. "avg" => $info["avg"] //{"front":"77.17","behind":"90.00","left":"90.00","right":"90.00"}
  1023. ]
  1024. ]
  1025. ];
  1026. // debug_log("pushPareaRes","进推送依赖:".json_encode($info));
  1027. $ues_redis->lpush("parea_inoutres_push", json_encode($url_data));
  1028. $info['pushTime'] = time();
  1029. }
  1030. // debug_log("pushPareaRes","远程返回结果".$url_res);
  1031. }
  1032. // if($info['id'] == "E2B15AD5"){
  1033. // var_dump($flagIn, $flagOut, $status, $avg["front"],$avg["behind"],$avg["left"], $avg["right"]);
  1034. // }
  1035. if($flagOut && $status == 1){
  1036. $info["first_in_time"] = null;
  1037. if ($info["pushTime"] && (time()-$info['pushTime']) < 2 ) {
  1038. # code...
  1039. return $info;
  1040. }
  1041. //推送出
  1042. $info['status'] = 2;
  1043. $url_data = [
  1044. "mac" => $info["mac"],
  1045. "data" => [
  1046. [
  1047. "label" => $info["id"],
  1048. "time" => $info["time"],
  1049. "dirt" => 2,
  1050. "rssi" => $info["rssi"],//数组 [{"front":72,"behind":255,"left":255,"right":255,"time":1685067709},{"front":76,"behind":255,"left":255,"right":255,"time":1685067710}]
  1051. "avg" => $info["avg"] //{"front":"77.17","behind":"90.00","left":"90.00","right":"90.00"}
  1052. ]
  1053. ]
  1054. ];
  1055. // debug_log("pushPareaRes","出推送依赖:".json_encode($info));
  1056. // $url_res= curl_http_post(json_encode($url_data),$url,false);
  1057. $ues_redis->lpush("parea_inoutres_push", json_encode($url_data));
  1058. $info['pushTime'] = time();
  1059. // debug_log("pushPareaRes","远程返回结果".$url_res);
  1060. }
  1061. // if($flagIn && $info['status'] == 1){
  1062. // $inoutIntFilter = $ues_redis->hget("anbang_four_wire", "anbang_4rssi_intFilter");
  1063. // $inoutIntFilter = $inoutIntFilter ? $inoutIntFilter : 20;
  1064. // if ($info["camPushTime"] && (time()-$info['camPushTime']) < $inoutIntFilter ) {
  1065. // # code...
  1066. // return $info;
  1067. // }
  1068. // //推送进
  1069. // $url_data = [
  1070. // "mac" => $info["mac"],
  1071. // "first_time" => $info["first_time"],
  1072. // "data" => [
  1073. // [
  1074. // "label" => $info["id"],
  1075. // "time" => $info["time"],
  1076. // "dirt" => 1,
  1077. // "rssi" => $info["rssi"],//数组 [{"front":72,"behind":255,"left":255,"right":255,"time":1685067709},{"front":76,"behind":255,"left":255,"right":255,"time":1685067710}]
  1078. // "avg" => $info["avg"] //{"front":"77.17","behind":"90.00","left":"90.00","right":"90.00"}
  1079. // ]
  1080. // ]
  1081. // ];
  1082. // $ues_redis->lpush("parea_inoutres_push", json_encode($url_data));
  1083. // $info["camPushTime"] = time();
  1084. // }
  1085. return $info;
  1086. }
  1087. public function test(){
  1088. try{
  1089. $ues_redis=Cache::store('redis')->handler();
  1090. $jsonData= $ues_redis->rpop("mqtt_data");
  1091. debug_log("InAndOUT","1212");
  1092. }catch(Exception $e){
  1093. var_dump($e->getMessage());
  1094. }
  1095. }
  1096. /**
  1097. * 删除前1天的数据
  1098. *
  1099. * @return void
  1100. */
  1101. public function deleteHistory()
  1102. {
  1103. while(true)
  1104. {
  1105. $where[] = ['addTime','<',strtotime("-1 day")];
  1106. Db::name('tag_history')->where($where)->delete();
  1107. sleep(60*60*24);
  1108. }
  1109. }
  1110. /**
  1111. * 检测小程序版本版本 function
  1112. *
  1113. * @return void
  1114. */
  1115. public function detectionVersion(){
  1116. $token = $_GET['token'];
  1117. if (!$token || $token != '444333d3') {
  1118. json_fail('缺少token或者token不对');
  1119. }
  1120. $data["url"]="http://116.62.220.88:8112/static/app/蓝牙小程序/1.1.1/rl-release.apk";
  1121. $data["version"]="1.1.1";
  1122. json_success("查询版本成功",$data);
  1123. }
  1124. //储存数据
  1125. public function livestockDataToMysql(){
  1126. $ues_redis=Cache::store('redis')->handler();
  1127. $dispose = new dispose($ues_redis);
  1128. $text=null;
  1129. // while(1){
  1130. $jsonData= $ues_redis->rpop("mqtt_data_livestock");
  1131. // if(empty($jsonData)){
  1132. // sleep(1);
  1133. // continue;
  1134. // }
  1135. debug_log("LiveStockData",'数据redis'.$jsonData);
  1136. $data=json_decode($jsonData,true);
  1137. $url="http://127.0.0.1/api/reportMessage";
  1138. var_dump($data);
  1139. $postFields = http_build_query($data);
  1140. $url_res= curl_http_post($postFields,$url,false);
  1141. var_dump($url_res);
  1142. // }
  1143. }
  1144. }