111 lines
3.6 KiB
PHP
111 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Real\Jobs;
|
|
|
|
use Carbon\Carbon;
|
|
use App\Models\Card\Card;
|
|
use Illuminate\Support\Arr;
|
|
use App\Models\Mongo\TblCard;
|
|
use Illuminate\Bus\Queueable;
|
|
use MongoDB\BSON\UTCDateTime;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Dipper\Foundation\Bus\Dispatchable;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use App\Domains\Card\Repositories\BlocRepository;
|
|
use App\Domains\Card\Repositories\CardRepository;
|
|
use App\Domains\Real\Repositories\CompanyRepository;
|
|
use App\Domains\Virtual\Repositories\OrderCardPartitionRepository;
|
|
|
|
class MongoSyncJob implements ShouldQueue
|
|
{
|
|
use Queueable, Dispatchable;
|
|
|
|
public $page;
|
|
public $limit;
|
|
public $utcDateTime;
|
|
|
|
protected static $carrierOperators = [1, 0, 2];
|
|
|
|
/**
|
|
* Undocumented function
|
|
*
|
|
* @param int $page
|
|
* @param int $limit
|
|
* @param UTCDateTime $utcDateTime
|
|
*/
|
|
public function __construct($page, $limit, UTCDateTime $utcDateTime)
|
|
{
|
|
$this->page = $page;
|
|
$this->limit = $limit;
|
|
$this->utcDateTime = $utcDateTime;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function handle()
|
|
{
|
|
Log::info("MongoSyncJob #: utcDateTime {$this->utcDateTime} - page {$this->page}");
|
|
|
|
$query = TblCard::select(['cNo', 'bNo', 'iccid', 'imsi', 'comId', 'oType', 'saDate', 'sDate', 'oRDate'])
|
|
->where('pNo', 'No00000000768')
|
|
->where('oRDate', '>', $this->utcDateTime)
|
|
->where('sDate', 'exists', true)
|
|
->orderBy('sDate');
|
|
|
|
$res = $query->forPage($this->page, $this->limit)->get();
|
|
|
|
if (empty($res)) {
|
|
Log::notice('MongoSyncJob not result!');
|
|
return ;
|
|
}
|
|
|
|
$companies = app(CompanyRepository::class)->withTrashed()->get()->keyBy('sn');
|
|
$blocs = app(BlocRepository::class)->withTrashed()->get()->pluck('id', 'sn')->toArray();
|
|
|
|
$values = [];
|
|
|
|
foreach ($res as $key => $value) {
|
|
$activated_at = $value['saDate'] ? $value['saDate']->toDateTime()->format('Y-m-d H:i:s') : null;
|
|
|
|
if ($activated_at && Carbon::parse($activated_at) < Carbon::parse('2000-01-01 00:00:00')) {
|
|
$activated_at = null;
|
|
}
|
|
|
|
$sim = intval(preg_replace('/\D/', '', $value['cNo']));
|
|
$values[$sim] = [
|
|
'sim' => $sim,
|
|
'imsi' => $value['imsi'] ?? '',
|
|
'iccid' => $value['iccid'] ?? '',
|
|
'bloc_id' => $blocs[$value['comId']] ?? 0,
|
|
'carrier_operator' => self::$carrierOperators[$value['oType']] ?? 255,
|
|
'activated_at' => $activated_at,
|
|
'virtual_activated_at' => $activated_at,
|
|
'created_at' => $value['sDate'] ? $value['sDate']->toDateTime()->format('Y-m-d H:i:s') : null,
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
];
|
|
}
|
|
|
|
$builder = Card::query()->toBase();
|
|
|
|
$sql = $builder->getGrammar()->compileInsert($builder, $values);
|
|
|
|
$sql .= ' on conflict (sim) do update set
|
|
activated_at=excluded.activated_at,
|
|
virtual_activated_at=COALESCE(cards.virtual_activated_at, excluded.activated_at)';
|
|
|
|
$builder->connection->insert($sql, Arr::flatten($values, 1));
|
|
|
|
app(CardRepository::class)->forgetCached();
|
|
|
|
$simArray = implode(',', array_keys($values));
|
|
|
|
DB::statement("select fix_timelines('{{$simArray}}'::INT8[]);");
|
|
|
|
app(OrderCardPartitionRepository::class)->forgetCached();
|
|
|
|
Log::info("MongoSyncJob END #: utcDateTime {$this->utcDateTime} - page {$this->page}");
|
|
}
|
|
}
|