BikeStatusInfoSyncHandler.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Mead
  5. * Date: 2019/10/8
  6. * Time: 3:41 PM
  7. */
  8. namespace App\Handlers;
  9. class BikeStatusInfoSyncHandler
  10. {
  11. //用户
  12. const ROLE_USER = 'user';
  13. //运维人员
  14. const ROLE_WORKER = 'worker';
  15. //系统本身
  16. const ROLE_SERVER = 'server';
  17. //绑定人员
  18. const ROLE_BIND = 'bind';
  19. private static $redis = '';
  20. //还车时过期时间
  21. const CLOSE_BIKE_TTL = 10;
  22. //正常未骑行车的缓存标识
  23. const REDIS_BIKE_LOCATION_TAG = 'bike_locations';
  24. const REDIS_RIDE_BIKE_ORDERS_TAG = 'ride_orders:';
  25. public function __construct($redis)
  26. {
  27. self::$redis = $redis;
  28. }
  29. /**
  30. * 车辆处于骑行状态 (用户订单时(data: 订单id[id],车辆编号[bike_no],区域id[area_id],车辆id[bike_id]))
  31. * @param $bike_no
  32. * @param array $data
  33. * User: Mead
  34. */
  35. public function toBikeRideStatus($role, $bike_no, $data = [])
  36. {
  37. $data['role'] = $role;
  38. self::$redis->set(self::REDIS_RIDE_BIKE_ORDERS_TAG . $bike_no, serialize($data));
  39. //删除未骑行状态
  40. self::$redis->zrem(self::REDIS_BIKE_LOCATION_TAG, $bike_no);
  41. }
  42. /**
  43. * 车辆处于等待骑行状态
  44. * @param $bike_no
  45. * User: Mead
  46. */
  47. public function toBikeWaitRideStatus($bike_no, $lng = 0, $lat = 0)
  48. {
  49. // self::$redis->del(self::REDIS_RIDE_BIKE_ORDERS_TAG . $bike_no);
  50. self::$redis->expire(self::REDIS_RIDE_BIKE_ORDERS_TAG . $bike_no, self::CLOSE_BIKE_TTL);
  51. self::$redis->geoadd(self::REDIS_BIKE_LOCATION_TAG, $lng, $lat, $bike_no);
  52. }
  53. /**
  54. * 车辆上线
  55. * @param $bike_no
  56. * @param int $lat
  57. * @param int $lng
  58. * User: Mead
  59. */
  60. public function toBikeOnLineStatus($bike_no, $lng = 0, $lat = 0)
  61. {
  62. self::$redis->del([self::REDIS_RIDE_BIKE_ORDERS_TAG . $bike_no]);
  63. self::$redis->geoadd(self::REDIS_BIKE_LOCATION_TAG, $lng, $lat, $bike_no);
  64. }
  65. /**
  66. * 车辆离线
  67. * @param $bike_no
  68. * User: Mead
  69. */
  70. public function toBikeOffLineStatus($bike_no)
  71. {
  72. //删除未骑行状态
  73. self::$redis->zrem(self::REDIS_BIKE_LOCATION_TAG, $bike_no);
  74. }
  75. /**
  76. * 获取订单信息
  77. * @param $bike_no
  78. * @return mixed
  79. * User: Mead
  80. */
  81. public function getRideBikeOrderInfo($bike_no)
  82. {
  83. $order = self::$redis->get(self::REDIS_RIDE_BIKE_ORDERS_TAG . $bike_no);
  84. if (!$order) return false;
  85. return unserialize($order);
  86. }
  87. }