66 lines
1.4 KiB
PHP
66 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Service;
|
|
|
|
use App\Service\RedisClientProvider;
|
|
use App\Entity\JobOrder;
|
|
|
|
class JobOrderCache
|
|
{
|
|
protected $redis;
|
|
protected $active_jo_key;
|
|
|
|
public function __construct(RedisClientProvider $redis_prov, $active_jo_key)
|
|
{
|
|
$this->redis = $redis_prov->getRedisClient();
|
|
$this->active_jo_key = $active_jo_key;
|
|
}
|
|
|
|
public function addActiveJobOrder(JobOrder $jo)
|
|
{
|
|
$coords = $jo->getCoordinates();
|
|
|
|
$this->redis->geoadd(
|
|
$this->active_jo_key,
|
|
$coords->getLongitude(),
|
|
$coords->getLatitude(),
|
|
$jo->getID()
|
|
);
|
|
}
|
|
|
|
public function getAllActiveJobOrders()
|
|
{
|
|
$all_jo = $this->redis->georadius(
|
|
$this->active_jo_key,
|
|
0,
|
|
0,
|
|
41000,
|
|
'km',
|
|
['WITHCOORD' => true]
|
|
);
|
|
|
|
$jo_locs = [];
|
|
foreach ($all_jo as $jo_data)
|
|
{
|
|
$id = $jo_data[0];
|
|
$lng = $jo_data[1][0];
|
|
$lat = $jo_data[1][1];
|
|
|
|
$jo_locs[$id] = [
|
|
'longitude' => $lng,
|
|
'latitude' => $lat,
|
|
];
|
|
}
|
|
|
|
// error_log(print_r($all_jo, true));
|
|
return $jo_locs;
|
|
}
|
|
|
|
public function removeActiveJobOrder(JobOrder $jo)
|
|
{
|
|
$this->redis->zrem(
|
|
$this->active_jo_key,
|
|
$jo->getID()
|
|
);
|
|
}
|
|
}
|