BikeStatusInfoSyncHandler.php 3.0 KB

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