Payment.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. use Workerman\Worker;
  3. use think\App;
  4. use think\Db;
  5. // ######## 消息队列消费者 ########
  6. $consumer = new Worker();
  7. // 慢任务,消费者的进程数可以开多一些
  8. $consumer->count = 1;
  9. //进程启动
  10. $consumer->onWorkerStart = function($consumer)
  11. {
  12. App::initCommon();
  13. $st="test/test";
  14. $length = strlen($st);
  15. //创建tcp套接字
  16. global $socket;
  17. $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
  18. //连接tcp
  19. socket_connect($socket, '119.23.47.137',8083);
  20. //向打开的套集字写入数据(发送数据)
  21. $s = socket_write($socket, $st, $length);
  22. //从套接字中获取服务器发送来的数据
  23. /*while(true){
  24. $msg = socket_read($socket,8190);
  25. echo $msg;
  26. sleep(1);
  27. }*/
  28. $time_interval = 1;
  29. \Workerman\Lib\Timer::add($time_interval, function () {
  30. try
  31. {
  32. global $socket;
  33. $msg = socket_read($socket,8190);
  34. //echo $msg;
  35. //[{"type":"LOGIN","status":"success"}]
  36. //[{"type":"DATA","wbMac":"C9DBBBFCEE26","rssi":-59,"gtMac":"D1127A899D6A","hr":93,"tp":"36.0","step":0,"cal":0}]
  37. $msg = json_decode($msg,true);
  38. if(!empty($msg)){
  39. foreach($msg as $key => $val){
  40. if($val['type'] == 'DATA'){
  41. $data = [
  42. 'createtime' => time(),
  43. 'type' => 'DATA',
  44. 'wbmac'=> isset($val['wbMac']) ? $val['wbMac'] : '',
  45. 'rssi' => isset($val['rssi']) ? $val['rssi'] : '',
  46. 'gtmac'=> isset($val['gtMac']) ? $val['gtMac'] : '',
  47. 'hr' => isset($val['hr']) ? $val['hr'] : '',
  48. 'tp' => isset($val['tp']) ? $val['tp'] : '',
  49. 'step' => isset($val['step']) ? $val['step'] : '',
  50. 'cal' => isset($val['cal']) ? $val['cal'] : '',
  51. ];
  52. $rs = Db::name('socket_watch')->insertGetId($data);
  53. //每个学生每一个小时只保留一条记录
  54. $student = Db::name('student')->where('watchmac',strtolower($data['wbmac']))->find();
  55. if($student){
  56. $map = [
  57. 'student_id' => $student['id'],
  58. 'typedata' => ['IN','1,4,5'],
  59. 'createtime' => ['gt',time()-3600],
  60. ];
  61. $check = Db::name('student_life')->where($map)->find();
  62. if(empty($check)){
  63. $life = [
  64. [
  65. 'typedata' => 1,
  66. 'student_id' => $student['id'],
  67. 'info' => $data['tp'],
  68. 'createtime' => time(),
  69. 'classes_id' => $student['classes_id'],
  70. 'school_id' => $student['school_id'],
  71. ],
  72. [
  73. 'typedata' => 4,
  74. 'student_id' => $student['id'],
  75. 'info' => $data['hr'],
  76. 'createtime' => time(),
  77. 'classes_id' => $student['classes_id'],
  78. 'school_id' => $student['school_id'],
  79. ],
  80. [
  81. 'typedata' => 5,
  82. 'student_id' => $student['id'],
  83. 'info' => $data['step'],
  84. 'createtime' => time(),
  85. 'classes_id' => $student['classes_id'],
  86. 'school_id' => $student['school_id'],
  87. ],
  88. ];
  89. Db::name('student_life')->insertAll($life);
  90. }
  91. }
  92. //每个学生每一个小时只保留一条记录
  93. }
  94. }
  95. }
  96. }
  97. catch (\Exception $e)
  98. {
  99. echo $e->getMessage();
  100. }
  101. });
  102. };
  103. //进程关闭
  104. $consumer->onWorkerStop = function($consumer)
  105. {
  106. restore_error_handler();
  107. };
  108. //日志
  109. class LogService
  110. {
  111. // 日志级别 从上到下,由低到高
  112. const EMERG = 'EMERG'; // 严重错误: 导致系统崩溃无法使用
  113. const ALERT = 'ALERT'; // 警戒性错误: 必须被立即修改的错误
  114. const CRIT = 'CRIT'; // 临界值错误: 超过临界值的错误,例如一天24小时,而输入的是25小时这样
  115. const ERR = 'ERR'; // 一般错误: 一般性错误
  116. const WARN = 'WARN'; // 警告性错误: 需要发出警告的错误
  117. const NOTICE = 'NOTIC'; // 通知: 程序可以运行但是还不够完美的错误
  118. const INFO = 'INFO'; // 信息: 程序输出信息
  119. const DEBUG = 'DEBUG'; // 调试: 调试信息
  120. const SQL = 'SQL'; // SQL:SQL语句 注意只在调试模式开启时有效
  121. public static function record($message, $level = self::INFO)
  122. {
  123. $mem = intval(memory_get_usage() / 1024 / 1024);
  124. $msg = date('Ymd H:i:s', time()).' '.$level.' ['.str_pad($mem, 4, " ", STR_PAD_LEFT).'M] '.$message;
  125. echo $msg."\n";
  126. }
  127. static public function appError($errno, $errstr, $errfile, $errline)
  128. {
  129. if($errno == E_ERROR) {
  130. $errorStr = "$errstr ".$errfile." 第 $errline 行.";
  131. self::record("[$errno] $errstr ".$errfile." 第 $errline 行.", self::ERR);
  132. }
  133. }
  134. function heat()
  135. {
  136. //调试模式下输出错误信息
  137. $trace = debug_backtrace();
  138. //$e['message'] = $error;
  139. $e['file'] = $trace[0]['file'];
  140. $e['class'] = $trace[0]['class'];
  141. $e['function'] = $trace[0]['function'];
  142. $e['line'] = $trace[0]['line'];
  143. $traceInfo = '';
  144. $time = date('y-m-d H:i:m');
  145. foreach($trace as $t) {
  146. $traceInfo .= '['.$time.'] ';
  147. if(isset($t['file'])) {
  148. $traceInfo .= $t['file'];
  149. }
  150. if(isset($t['line'])) {
  151. $traceInfo .= ' ('.$t['line'].') ';
  152. }
  153. if(isset($t['class'])) {
  154. $traceInfo .= $t['class'];
  155. }
  156. $traceInfo .= $t['function'].'(';
  157. //$traceInfo .= implode(', ', $t['args']);
  158. $traceInfo .= ')'."\n";
  159. }
  160. echo $traceInfo;
  161. //$e['trace'] = $traceInfo;
  162. }
  163. function clear()
  164. {
  165. $cmd = "echo -ne \"\033[2J\n\"";
  166. $a = exec($cmd);
  167. print "$a"."\n";
  168. }
  169. function color_b($string, $line = 0)
  170. {
  171. $cmd = "printf \"\033[".$line.";0H \033[01;40;32m".$string."\033[0m\n\"";
  172. $a = exec($cmd);
  173. print "$a"."\n";
  174. }
  175. }