123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- <?php
- use Workerman\Worker;
- use think\App;
- use think\Db;
- // ######## 消息队列消费者 ########
- $consumer = new Worker();
- // 慢任务,消费者的进程数可以开多一些
- $consumer->count = 1;
- //进程启动
- $consumer->onWorkerStart = function($consumer)
- {
- App::initCommon();
- $st="test/test";
- $length = strlen($st);
- //创建tcp套接字
- global $socket;
- $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
- //连接tcp
- socket_connect($socket, '119.23.47.137',8083);
- //向打开的套集字写入数据(发送数据)
- $s = socket_write($socket, $st, $length);
- //从套接字中获取服务器发送来的数据
- /*while(true){
- $msg = socket_read($socket,8190);
- echo $msg;
- sleep(1);
- }*/
- $time_interval = 1;
- \Workerman\Lib\Timer::add($time_interval, function () {
- try
- {
- global $socket;
- $msg = socket_read($socket,8190);
- //echo $msg;
- //[{"type":"LOGIN","status":"success"}]
- //[{"type":"DATA","wbMac":"C9DBBBFCEE26","rssi":-59,"gtMac":"D1127A899D6A","hr":93,"tp":"36.0","step":0,"cal":0}]
- $msg = json_decode($msg,true);
-
- if(!empty($msg)){
- foreach($msg as $key => $val){
- if($val['type'] == 'DATA'){
- $data = [
- 'createtime' => time(),
- 'type' => 'DATA',
- 'wbmac'=> isset($val['wbMac']) ? $val['wbMac'] : '',
- 'rssi' => isset($val['rssi']) ? $val['rssi'] : '',
- 'gtmac'=> isset($val['gtMac']) ? $val['gtMac'] : '',
- 'hr' => isset($val['hr']) ? $val['hr'] : '',
- 'tp' => isset($val['tp']) ? $val['tp'] : '',
- 'step' => isset($val['step']) ? $val['step'] : '',
- 'cal' => isset($val['cal']) ? $val['cal'] : '',
- ];
- $rs = Db::name('socket_watch')->insertGetId($data);
- //每个学生每一个小时只保留一条记录
- $student = Db::name('student')->where('watchmac',strtolower($data['wbmac']))->find();
- if($student){
- $map = [
- 'student_id' => $student['id'],
- 'typedata' => ['IN','1,4,5'],
- 'createtime' => ['gt',time()-3600],
- ];
- $check = Db::name('student_life')->where($map)->find();
- if(empty($check)){
- $life = [
- [
- 'typedata' => 1,
- 'student_id' => $student['id'],
- 'info' => $data['tp'],
- 'createtime' => time(),
- 'classes_id' => $student['classes_id'],
- 'school_id' => $student['school_id'],
- ],
- [
- 'typedata' => 4,
- 'student_id' => $student['id'],
- 'info' => $data['hr'],
- 'createtime' => time(),
- 'classes_id' => $student['classes_id'],
- 'school_id' => $student['school_id'],
- ],
- [
- 'typedata' => 5,
- 'student_id' => $student['id'],
- 'info' => $data['step'],
- 'createtime' => time(),
- 'classes_id' => $student['classes_id'],
- 'school_id' => $student['school_id'],
- ],
- ];
- Db::name('student_life')->insertAll($life);
- }
- }
- //每个学生每一个小时只保留一条记录
- }
- }
- }
- }
- catch (\Exception $e)
- {
- echo $e->getMessage();
- }
- });
- };
- //进程关闭
- $consumer->onWorkerStop = function($consumer)
- {
- restore_error_handler();
- };
- //日志
- class LogService
- {
- // 日志级别 从上到下,由低到高
- const EMERG = 'EMERG'; // 严重错误: 导致系统崩溃无法使用
- const ALERT = 'ALERT'; // 警戒性错误: 必须被立即修改的错误
- const CRIT = 'CRIT'; // 临界值错误: 超过临界值的错误,例如一天24小时,而输入的是25小时这样
- const ERR = 'ERR'; // 一般错误: 一般性错误
- const WARN = 'WARN'; // 警告性错误: 需要发出警告的错误
- const NOTICE = 'NOTIC'; // 通知: 程序可以运行但是还不够完美的错误
- const INFO = 'INFO'; // 信息: 程序输出信息
- const DEBUG = 'DEBUG'; // 调试: 调试信息
- const SQL = 'SQL'; // SQL:SQL语句 注意只在调试模式开启时有效
- public static function record($message, $level = self::INFO)
- {
- $mem = intval(memory_get_usage() / 1024 / 1024);
- $msg = date('Ymd H:i:s', time()).' '.$level.' ['.str_pad($mem, 4, " ", STR_PAD_LEFT).'M] '.$message;
- echo $msg."\n";
- }
- static public function appError($errno, $errstr, $errfile, $errline)
- {
- if($errno == E_ERROR) {
- $errorStr = "$errstr ".$errfile." 第 $errline 行.";
- self::record("[$errno] $errstr ".$errfile." 第 $errline 行.", self::ERR);
- }
- }
- function heat()
- {
- //调试模式下输出错误信息
- $trace = debug_backtrace();
- //$e['message'] = $error;
- $e['file'] = $trace[0]['file'];
- $e['class'] = $trace[0]['class'];
- $e['function'] = $trace[0]['function'];
- $e['line'] = $trace[0]['line'];
- $traceInfo = '';
- $time = date('y-m-d H:i:m');
- foreach($trace as $t) {
- $traceInfo .= '['.$time.'] ';
- if(isset($t['file'])) {
- $traceInfo .= $t['file'];
- }
- if(isset($t['line'])) {
- $traceInfo .= ' ('.$t['line'].') ';
- }
- if(isset($t['class'])) {
- $traceInfo .= $t['class'];
- }
- $traceInfo .= $t['function'].'(';
- //$traceInfo .= implode(', ', $t['args']);
- $traceInfo .= ')'."\n";
- }
- echo $traceInfo;
- //$e['trace'] = $traceInfo;
- }
- function clear()
- {
- $cmd = "echo -ne \"\033[2J\n\"";
- $a = exec($cmd);
- print "$a"."\n";
- }
- function color_b($string, $line = 0)
- {
- $cmd = "printf \"\033[".$line.";0H \033[01;40;32m".$string."\033[0m\n\"";
- $a = exec($cmd);
- print "$a"."\n";
- }
- }
|