WarningTransform.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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\Weikemu\Transforms;
  9. use App\Models\BoxSettingTraitModel;
  10. use App\Models\WarningLogTraitModel;
  11. use App\Servers\BaseServer;
  12. /**
  13. * 告警报文
  14. * Class WarningServer
  15. * @package App\Servers\Weikemu
  16. */
  17. class WarningTransform extends BaseServer
  18. {
  19. use BoxSettingTraitModel, WarningLogTraitModel;
  20. public static $typeMaps = [
  21. '震动告警',
  22. '外部电池移除',
  23. '位移告警',
  24. '温度告警',
  25. '自动落锁(ACC断开)',
  26. '',
  27. '',
  28. '终端电量告警',
  29. '外部电量告警',
  30. '外部电池接入',
  31. 'ACC接通',
  32. 'ACC断开',
  33. '移动告警',
  34. '后座锁关闭',
  35. '后座锁打开'
  36. ];
  37. public function main($body)
  38. {
  39. $data = $this->decode($body);
  40. $type = 100;
  41. foreach ($data['warning'] as $k => $v) {
  42. if ($v) {
  43. $type = $k;
  44. self::log(self::$typeMaps[$k], 'WARNING', self::$LOG_DEV);
  45. break;
  46. }
  47. }
  48. $box_no = $data['box_no'];
  49. switch ($type) {
  50. case 0:
  51. // 震动告警
  52. break;
  53. case 1:
  54. //外部电池移除
  55. break;
  56. case 2:
  57. //位移告警
  58. break;
  59. case 3:
  60. //温度告警
  61. break;
  62. case 4:
  63. //自动落锁(ACC断开)
  64. break;
  65. case 5:
  66. case 6:
  67. break;
  68. case 7:
  69. // 终端电量告警
  70. break;
  71. case 8:
  72. // 外部电量告警
  73. break;
  74. case 9:
  75. // 外部电池接入
  76. $key = "cache:min:update_stop_bike_battery:{$box_no}";
  77. $this->redis->del($key);
  78. break;
  79. case 10:
  80. //ACC接通
  81. break;
  82. case 11:
  83. //ACC断开
  84. break;
  85. case 12:
  86. //移动告警
  87. break;
  88. case 13:
  89. //后座锁关闭
  90. break;
  91. case 14:
  92. //后座锁打开
  93. break;
  94. }
  95. return $this->response();
  96. }
  97. /**
  98. * 告警响应
  99. * @param $login_type
  100. * @return array
  101. * User: Mead
  102. */
  103. public function response($login_type = '00')
  104. {
  105. $body = [
  106. '5b',
  107. '0000'
  108. ];
  109. return $body;
  110. }
  111. /**
  112. * 解析装载的状态消息
  113. * @param $body
  114. * @return array
  115. * User: Mead
  116. */
  117. private function decode($body)
  118. {
  119. $top34Data = $this->decodeWeiKeMuTop34($body);
  120. $i = 34;
  121. // 告警消息
  122. $warning = self::stitching($body, $i, 2); // i=34
  123. $i += 2;
  124. // 定位类型
  125. $location_type = self::stitching($body, $i, 1); // i=36
  126. $i += 1;
  127. //ACC状态
  128. $acc_status = self::stitching($body, $i, 1); // i=37
  129. $i += 1;
  130. // 动态计算
  131. $yjlx = self::stitching($body, $i, -1); // i=38
  132. return array_merge($top34Data, [
  133. 'warning' => self::handleWarning($warning),
  134. 'location_type' => self::handleLocationType($location_type),//0为基站定位 1为卫星定位
  135. 'acc_status' => self::handleACCStatus($acc_status),// 1:ACC接通;0:ACC断开
  136. ]);
  137. }
  138. /**
  139. * 处理设备序列号
  140. * @param $no
  141. * @return bool|string
  142. * User: Mead
  143. */
  144. private
  145. static function box_no($no)
  146. {
  147. return substr($no, 0, 9);
  148. }
  149. /**
  150. * handleWarning 解析告警
  151. *
  152. * @param $warning
  153. * @param int $offset
  154. * @param int $len
  155. * @return array
  156. * @author Fx
  157. *
  158. */
  159. private static function handleWarning($warning, $offset = 0, $len = 16)
  160. {
  161. $data = self::handleU2($warning);
  162. return array_slice($data, $offset, $len);
  163. }
  164. private static function handleLocationType($location_type)
  165. {
  166. $data = self::handleU1($location_type);
  167. return $data[0];
  168. }
  169. private static function handleACCStatus($acc_status)
  170. {
  171. $data = self::handleU1($acc_status);
  172. return $data[0];
  173. }
  174. }