BikeStatusInfoSyncHandler.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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\Utils\Admin;
  10. use Illuminate\Support\Facades\Redis;
  11. class BikeStatusInfoSyncHandler
  12. {
  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 REDIS_BIKE_LOCATION_TAG = 'bike_locations';
  24. const REDIS_RIDE_BIKE_ORDERS_TAG = 'ride_orders';
  25. const REDIS_RIDE_BIKE_WORKER_ORDERS_TAG = 'ride_orders_worker';
  26. public function __construct()
  27. {
  28. self::$redis = Redis::connection();
  29. }
  30. /**
  31. * 车辆处于骑行状态 (用户订单时(data: 订单id[id],区域id[area_id],车辆id[bike_id]))
  32. * @param $bike_no
  33. * @param array $data
  34. * User: Mead
  35. */
  36. public function toBikeRideStatus($role, $bike_no, $data = [], $is_put_status = 1)
  37. {
  38. $data['role'] = $role;
  39. self::$redis->hset(self::REDIS_RIDE_BIKE_ORDERS_TAG, $bike_no, serialize($data));
  40. //删除未骑行状态
  41. if ($is_put_status) {
  42. self::$redis->zrem(self::REDIS_BIKE_LOCATION_TAG, $bike_no);
  43. }
  44. if ($role == self::ROLE_WORKER) {
  45. self::$redis->hset(self::REDIS_RIDE_BIKE_WORKER_ORDERS_TAG, $bike_no,Admin::user()->id);
  46. }
  47. }
  48. /**
  49. * 车辆处于等待骑行状态
  50. * @param $bike_no
  51. * User: Mead
  52. */
  53. public function toBikeWaitRideStatus($bike_no, $lng = 0, $lat = 0, $is_put_status = 1)
  54. {
  55. self::$redis->hdel(self::REDIS_RIDE_BIKE_ORDERS_TAG, $bike_no);
  56. if ($is_put_status) {
  57. self::$redis->geoadd(self::REDIS_BIKE_LOCATION_TAG, $lng, $lat, $bike_no);
  58. }
  59. // 不存在就忽略
  60. self::$redis->hdel(self::REDIS_RIDE_BIKE_WORKER_ORDERS_TAG, $bike_no);
  61. }
  62. /**
  63. * 车辆上线
  64. * @param $bike_no
  65. * @param int $lat
  66. * @param int $lng
  67. * User: Mead
  68. */
  69. public function toBikeOnLineStatus($bike_no, $lng = 0, $lat = 0)
  70. {
  71. self::$redis->hdel(self::REDIS_RIDE_BIKE_ORDERS_TAG, $bike_no);
  72. self::$redis->geoadd(self::REDIS_BIKE_LOCATION_TAG, $lng, $lat, $bike_no);
  73. }
  74. /**
  75. * 车辆离线
  76. * @param $bike_no
  77. * User: Mead
  78. */
  79. public function toBikeOffLineStatus($bike_no)
  80. {
  81. //删除未骑行状态
  82. self::$redis->zrem(self::REDIS_BIKE_LOCATION_TAG, $bike_no);
  83. }
  84. /**
  85. * 获取订单信息
  86. * @param $bike_no
  87. * @return mixed
  88. * User: Mead
  89. */
  90. public function getRideBikeOrderInfo($bike_no)
  91. {
  92. $order = self::$redis->hget(self::REDIS_RIDE_BIKE_ORDERS_TAG, $bike_no);
  93. if (!$order) return false;
  94. return unserialize($order);
  95. }
  96. /**
  97. * 改变车为订单为开¬车(租车)
  98. * @param $bike_no
  99. * User: Mead
  100. */
  101. public function toBikeRentRideStatus($bike_no)
  102. {
  103. $data = $this->getRideBikeOrderInfo($bike_no);
  104. $data['is_close_bike'] = 0;
  105. self::$redis->hset(self::REDIS_RIDE_BIKE_ORDERS_TAG, $bike_no, serialize($data));
  106. }
  107. /**
  108. * 改变车为订单为停车(租车)
  109. * @param $bike_no
  110. * User: Mead
  111. */
  112. public function toBikeRentWaitRideStatus($bike_no)
  113. {
  114. $data = $this->getRideBikeOrderInfo($bike_no);
  115. $data['is_close_bike'] = 1;
  116. self::$redis->hset(self::REDIS_RIDE_BIKE_ORDERS_TAG, $bike_no, serialize($data));
  117. }
  118. }