WarningServer.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Mead
  5. * Date: 2019/9/3
  6. * Time: 8:05 PM
  7. */
  8. namespace App\Servers;
  9. use App\Maps\WarningLogMap;
  10. use App\Maps\WarningMap;
  11. use App\Models\BikeTraitModel;
  12. use App\Models\WarningLogTraitModel;
  13. class WarningServer extends BaseServer
  14. {
  15. use WarningLogTraitModel, BikeTraitModel;
  16. public function main($body)
  17. {
  18. $data = $this->decode($body);
  19. self::log($data, 'WarningServer', self::$LOG_MAJOR);
  20. $bike_no = $_SESSION['bike_no'];
  21. if (!$bike_no) return $this->response();
  22. $type = WarningLogMap::TYPE_DEFAULT;
  23. $error_grade = WarningLogMap::ERROR_GRADE_DEFAULT;
  24. switch ($data['warning']) {
  25. case WarningMap::WARNING_SPARE_BATTERY_LOW:
  26. //低电量
  27. $type = WarningLogMap::TYPE_BATTERY_LOW;
  28. $error_grade = WarningLogMap::ERROR_GRADE_MINOR;
  29. break;
  30. case WarningMap::WARNING_SHOCK:
  31. // 震动报警
  32. $type = WarningLogMap::TYPE_WARNING_BIKE_SHOCK;
  33. $error_grade = WarningLogMap::ERROR_GRADE_MINOR;
  34. break;
  35. case WarningMap::WARNING_FORCE_OPEN_ELECTRIC:
  36. //非法打开电车
  37. $type = WarningLogMap::TYPE_WARNING_BIKE_OPEN;
  38. $error_grade = WarningLogMap::ERROR_GRADE_CRITICAL;
  39. break;
  40. case WarningMap::WARNING_OUT_AREA_PLAY_VIDEO:
  41. //超出骑行区域
  42. $type = WarningLogMap::TYPE_BIKE_OUT_AREA;
  43. $error_grade = WarningLogMap::ERROR_GRADE_MINOR;
  44. break;
  45. case WarningMap::WARNING_BMS:
  46. // 电池信息报警
  47. $type = false;
  48. // $type = WarningLogMap::TYPE_WARNING_BMS;
  49. // $error_grade = WarningLogMap::ERROR_GRADE_MINOR;
  50. break;
  51. case WarningMap::WARNING_STOP_ELECTRIC:
  52. //断电报警
  53. $type = WarningLogMap::TYPE_WARNING_CLOSE_ELECTRIC;
  54. $error_grade = WarningLogMap::ERROR_GRADE_MINOR;
  55. break;
  56. case WarningMap::WARNING_OVER_SPEED:
  57. //超速
  58. $type = WarningLogMap::TYPE_WARNING_OVER_SPEED;
  59. $error_grade = WarningLogMap::ERROR_GRADE_DEFAULT;
  60. break;
  61. case WarningMap::WARNING_WHEEL_MOVEMENT:
  62. //移动报警
  63. $type = WarningLogMap::TYPE_WARNING_WHEEL_MOVE;
  64. $error_grade = WarningLogMap::ERROR_GRADE_MINOR;
  65. break;
  66. case WarningMap::WARNING_BIKE_TROUBLE:
  67. //车子故障
  68. $type = WarningLogMap::TYPE_WARNING_BIKE_TROUBLE;
  69. $error_grade = WarningLogMap::ERROR_GRADE_MAJOR;
  70. break;
  71. }
  72. if ($type !== false) {
  73. if ($this->is_throw_num_time($data['box_no'], 'warning_log_' . $type, 3, 10)) {
  74. $this->warningLog($bike_no, $data['box_no'], $data['status'], $body, $type, ($error_grade + 1));
  75. }
  76. $this->warningLog($bike_no, $data['box_no'], $data['status'], $body, $type, $error_grade);
  77. }
  78. return $this->response();
  79. }
  80. /**
  81. * 解析装载的登录数据
  82. * @param $body
  83. * @return array
  84. * User: Mead
  85. */
  86. private function decode($body)
  87. {
  88. $i = 0;
  89. $box_no = $this->decodeBoxNo(self::stitching($body, $i, 5));
  90. $i += 5;
  91. // 设备时间
  92. $box_time = $this->decodeTime(self::stitching($body, $i, 4));
  93. $i += 4;
  94. // 警告信息
  95. $warning_info = self::stitching($body, $i, 1);
  96. $i += 1;
  97. // 控制编码
  98. $controller_code = self::stitching($body, $i, 1);
  99. $i += 1;
  100. // 故障状态1
  101. $status1 = self::stitching($body, $i, 1);
  102. $i += 1;
  103. // 故障状态2
  104. $status2 = self::stitching($body, $i, 1);
  105. $i += 1;
  106. // 故障状态3
  107. $status3 = self::stitching($body, $i, 1);
  108. $i += 1;
  109. // 故障状态4
  110. $status4 = self::stitching($body, $i, 1);
  111. $i += 1;
  112. // 故障状态5
  113. $status5 = self::stitching($body, $i, 2);
  114. $i += 2;
  115. // 故障状态6
  116. $status6 = self::stitching($body, $i, 1);
  117. $i += 1;
  118. // 故障状态7
  119. $status7 = self::stitching($body, $i, 1);
  120. $i += 1;
  121. // 故障状态8
  122. $status8 = self::stitching($body, $i, 1);
  123. $i += 1;
  124. // 加速度数据
  125. $speed = self::stitching($body, $i, 2);
  126. $status8 = $this->decodeStatus8($status8);
  127. return [
  128. 'box_no' => $box_no,
  129. 'time' => $box_time,
  130. 'warning' => $warning_info,
  131. 'status' => $status8
  132. ];
  133. }
  134. }