BoxActiveReportingServer.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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\BoxActiveUpEventMap;
  10. use App\Maps\VideoMap;
  11. class BoxActiveReportingServer extends BaseServer
  12. {
  13. public function main($body)
  14. {
  15. $data = $this->decode($body);
  16. self::log($data, 'BoxActiveReportingServer', self::$LOG_MAJOR);
  17. $bike_no = $_SESSION['bike_no'];
  18. $box_no = $data['box_no'];
  19. $video_cmd = VideoMap::VIDEO_FIND_BIKE;
  20. switch ($data['event']) {
  21. case BoxActiveUpEventMap::EVENT_STOP_MOTION:
  22. // 结束订单
  23. $status = json_decode(file_get_contents(Config['close_order_api_url'] . "&box_no={$box_no}&bike_no={$bike_no}&type=静止30分钟"), true);
  24. self::log($box_no, 'BoxActiveReporting_SYSTEM_AUTO_ORDER', self::$LOG_COMMON);
  25. $video_cmd = VideoMap::VIDEO_CLOSE_BIKE;
  26. break;
  27. }
  28. return $this->response(self::RESPONSE_SUCCESS, $video_cmd);
  29. }
  30. const RESPONSE_SUCCESS = '00';
  31. const RESPONSE_FAI = '01';
  32. protected function response($response_status = self::RESPONSE_SUCCESS, $video_cmd = false)
  33. {
  34. $body = [
  35. $response_status,
  36. '00' . $video_cmd
  37. ];
  38. $body = str_split(implode('', $body), 2);
  39. return $body;
  40. }
  41. /**
  42. * 解析装载的数据
  43. * @param $body
  44. * @return array
  45. * User: Mead
  46. */
  47. private function decode($body)
  48. {
  49. $i = 0;
  50. $box_no = self::stitching($body, $i, 5);
  51. $i += 5;
  52. // 设备时间
  53. $time = self::stitching($body, $i, 4);
  54. $i += 4;
  55. //主动上报事件类型
  56. $event = self::stitching($body, $i, 1);
  57. $i += 1;
  58. /**
  59. * GPS 信息
  60. */
  61. //维度
  62. $i += 4;
  63. //经度
  64. $i += 4;
  65. //海拔高度
  66. $i += 2;
  67. //方位角
  68. $i += 1;
  69. //GPS速度
  70. $i += 1;
  71. //信号状态
  72. $i += 2;
  73. /**
  74. * 基站信息
  75. */
  76. // MCC
  77. $i += 2;
  78. // MNC
  79. $i += 2;
  80. // LAC
  81. $i += 2;
  82. // CELLID
  83. $i += 2;
  84. /**
  85. * 车辆信息
  86. */
  87. // 相对SOG
  88. $i += 1;
  89. // 可用剩余容量
  90. $i += 2;
  91. // 电瓶电压
  92. $i += 2;
  93. // 总里程
  94. $i += 4;
  95. // 单次里程数
  96. $i += 4;
  97. // 车辆状态
  98. $i += 2;
  99. // 处理值
  100. $box_no = $this->decodeBoxNo($box_no);
  101. $time = $this->decodeTime($time);
  102. return [
  103. 'box_no' => $box_no,
  104. 'time' => $time,
  105. 'event' => $event
  106. ];
  107. }
  108. }