BikeObserver.php 2.1 KB

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