ParkingObserver.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Mead
  5. * Date: 2019/9/19
  6. * Time: 10:09 AM
  7. */
  8. namespace App\Observers;
  9. use App\Models\Parking;
  10. use Illuminate\Support\Facades\Cache;
  11. use Illuminate\Support\Facades\Log;
  12. use Illuminate\Support\Facades\Redis;
  13. class ParkingObserver
  14. {
  15. public function created(Parking $parking)
  16. {
  17. if (empty($parking->parking_centre)) return true;
  18. $centre = json_decode($parking->parking_centre, true);
  19. $redis = Redis::connection();
  20. $area_id = $parking->area_id;
  21. $tag = Parking::REDIS_STOP_BIKE_SITES_TAG;
  22. if ((int)$parking->type === Parking::TYPE_NO_STOP_BIKE) {
  23. $tag = Parking::REDIS_BAN_STOP_BIKE_SITE_TAG;
  24. }
  25. $redis->geoadd($tag . "_{$area_id}", $centre[0], $centre[1], $parking->id);
  26. $redis->geoadd($tag . "_0", $centre[0], $centre[1], $parking->id);
  27. }
  28. public function updated(Parking $parking)
  29. {
  30. $redis = Redis::connection();
  31. $tag = Parking::REDIS_STOP_BIKE_SITES_TAG;
  32. $area_id = $parking->area_id;
  33. if ((int)$parking->type === Parking::TYPE_NO_STOP_BIKE) {
  34. $tag = Parking::REDIS_BAN_STOP_BIKE_SITE_TAG;
  35. }
  36. if ((int)$parking->status === Parking::STATUS_OK) {
  37. $centre = json_decode($parking->parking_centre, true);
  38. $redis->geoadd($tag . "_{$area_id}", $centre[0], $centre[1], $parking->id);
  39. $redis->geoadd($tag . "_0", $centre[0], $centre[1], $parking->id);
  40. } else {
  41. $redis->zrem($tag . "_{$area_id}", [$parking->id]);
  42. $redis->zrem($tag . "_0", [$parking->id]);
  43. Cache::forget(Parking::REDIS_BAN_STOP_BIKE_SITE_TAG . $parking->id);
  44. }
  45. }
  46. public function deleted(Parking $parking)
  47. {
  48. $area_id = $parking->area_id;
  49. $redis = Redis::connection();
  50. $tag = Parking::REDIS_STOP_BIKE_SITES_TAG;
  51. if ((int)$parking->type === Parking::TYPE_NO_STOP_BIKE) {
  52. $tag = Parking::REDIS_BAN_STOP_BIKE_SITE_TAG;
  53. }
  54. $redis->zrem($tag . "_{$area_id}", $parking->id);
  55. $redis->zrem($tag . "_0", $parking->id);
  56. Cache::forget(Parking::REDIS_BAN_STOP_BIKE_SITE_TAG . $parking->id);
  57. }
  58. }