LoadStopBikeSitesCommand.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\Area;
  4. use App\Models\Parking;
  5. use Illuminate\Console\Command;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Redis;
  8. class LoadStopBikeSitesCommand extends Command
  9. {
  10. /**
  11. * The name and signature of the console command.
  12. *
  13. * @var string
  14. */
  15. protected $signature = 'load:stop_bike_sites';
  16. /**
  17. * The console command description.
  18. *
  19. * @var string
  20. */
  21. protected $description = '加载停车区域';
  22. /**
  23. * Create a new command instance.
  24. *
  25. * @return void
  26. */
  27. public function __construct()
  28. {
  29. parent::__construct();
  30. }
  31. /**
  32. * Execute the console command.
  33. *
  34. * @return mixed
  35. */
  36. public function handle()
  37. {
  38. $redis = Redis::connection();
  39. $this->line('开始加载');
  40. // 处理停车区
  41. $area_ids = DB::table('parkings')->where('type', Parking::TYPE_STOP_BIKE)->distinct()->pluck('area_id');
  42. foreach ($area_ids as $area_id) {
  43. $redis->del([Parking::REDIS_STOP_BIKE_SITES_TAG . "_{$area_id}"]);
  44. }
  45. $redis->del([Parking::REDIS_STOP_BIKE_SITES_TAG . "_0"]);
  46. $areas = DB::table('areas')->where('status', Area::STATUS_OK)->pluck('id')->toArray();
  47. DB::table('parkings')->where('status', 1)->where('type', Parking::TYPE_STOP_BIKE)->select(['parking_centre', 'id', 'area_id'])->get()->each(function ($park) use ($redis, $areas) {
  48. $location = json_decode($park->parking_centre, true);
  49. $area_id = $park->area_id;
  50. if (in_array($area_id, $areas)) {
  51. $redis->geoadd(Parking::REDIS_STOP_BIKE_SITES_TAG . "_{$area_id}", $location['longitude'], $location['latitude'], $park->id);
  52. $redis->geoadd(Parking::REDIS_STOP_BIKE_SITES_TAG . "_0", $location['longitude'], $location['latitude'], $park->id);
  53. }
  54. });
  55. // 处理禁停区
  56. $ban_stop_parking_ids = DB::table('parkings')->where('type', Parking::TYPE_NO_STOP_BIKE)->distinct()->pluck('area_id');
  57. foreach ($ban_stop_parking_ids as $area_id) {
  58. $redis->del([Parking::REDIS_BAN_STOP_BIKE_SITE_TAG . "_{$area_id}"]);
  59. }
  60. $redis->del([Parking::REDIS_BAN_STOP_BIKE_SITE_TAG . "_0"]);
  61. DB::table('parkings')->where('status', 1)->where('type', Parking::TYPE_NO_STOP_BIKE)->select(['parking_centre', 'id', 'area_id'])->get()->each(function ($park) use ($redis, $areas) {
  62. $location = json_decode($park->parking_centre, true);
  63. $area_id = $park->area_id;
  64. if (in_array($area_id, $areas)) {
  65. $redis->geoadd(Parking::REDIS_BAN_STOP_BIKE_SITE_TAG . "_{$area_id}", $location['longitude'], $location['latitude'], $park->id);
  66. $redis->geoadd(Parking::REDIS_BAN_STOP_BIKE_SITE_TAG . "_0", $location['longitude'], $location['latitude'], $park->id);
  67. }
  68. });
  69. $this->line('完成');
  70. }
  71. }