BikeObserver.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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\Handlers\BikeStatusInfoSyncHandler;
  10. use App\Models\Bike;
  11. use App\Models\LocationsLog;
  12. use Illuminate\Support\Facades\DB;
  13. use Illuminate\Support\Facades\Redis;
  14. class BikeObserver
  15. {
  16. public function created(Bike $bike)
  17. {
  18. $bike_no = $bike->bike_no;
  19. $box_no = $bike->box_no;
  20. if ($bike_no && $box_no) {
  21. $redis = Redis::connection();
  22. $redis->hset(Bike::REDIS_BOX_NO_AND_BIKE_NO_TAG, $box_no, $bike_no);
  23. }
  24. }
  25. public function updated(Bike $bike)
  26. {
  27. $bike_no = $bike->bike_no;
  28. $box_no = $bike->box_no;
  29. $redis = Redis::connection();
  30. if ($bike->isDirty('box_no')) {
  31. DB::table('bikes')->where('id', $bike->id)->update([
  32. 'is_link' => Bike::LINK_OFFLINE
  33. ]);
  34. $old_box_no = $bike->getOriginal('box_no');
  35. $redis->hdel(Bike::REDIS_BOX_NO_AND_BIKE_NO_TAG, [$old_box_no]);
  36. }
  37. if ($bike_no && $box_no) {
  38. $redis->hset(Bike::REDIS_BOX_NO_AND_BIKE_NO_TAG, $box_no, $bike_no);
  39. if ($bike->isDirty('put_status')) {
  40. $BikeStatusInfoSyncHandler = (new BikeStatusInfoSyncHandler());
  41. if ($bike->put_status === Bike::PUT_STATUS_NO) {
  42. $BikeStatusInfoSyncHandler->toBikeOffLineStatus($bike_no);
  43. } else {
  44. $location = LocationsLog::getNewestLocationByBikeNo($bike_no);
  45. $BikeStatusInfoSyncHandler->toBikeOnLineStatus($bike_no, $location['lng'], $location['lat']);
  46. }
  47. }
  48. }
  49. }
  50. public function deleted(Bike $bike)
  51. {
  52. $box_no = $bike->box_no;
  53. $redis = Redis::connection();
  54. $redis->hdel(Bike::REDIS_BOX_NO_AND_BIKE_NO_TAG, [$box_no]);
  55. }
  56. }