vd/app/Domains/Virtual/Jobs/CardSyncJob.php
2019-01-23 10:27:37 +08:00

104 lines
3.4 KiB
PHP

<?php
namespace App\Domains\Virtual\Jobs;
use App\Models\Card\Card;
use Illuminate\Support\Arr;
use Illuminate\Bus\Queueable;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Dipper\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Domains\Config\Services\ConfigService;
use App\Domains\Virtual\Commands\Sync\CardSync;
use App\Domains\Card\Repositories\BlocRepository;
use App\Domains\Card\Repositories\CardRepository;
class CardSyncJob implements ShouldQueue
{
use Queueable, Dispatchable;
public $page;
public $limit;
public $maxId;
protected static $carrierOperators = [10 => 0, 11 => 1, 12 => 2];
protected $blocs;
/**
* Undocumented function
*
* @param int $page
* @param int $limit
* @param int $maxId
*/
public function __construct($page, $limit, $maxId)
{
$this->page = $page;
$this->limit = $limit;
$this->maxId = $maxId;
}
/**
*
*/
public function handle()
{
$blocs = app(BlocRepository::class)->withTrashed()->get()->pluck('id', 'shorthand')->toArray();
$query = DB::connection('vd_old')->table('ckb_custom')
->select(['id', 'custom_no', 'imsi', 'carrieroperator', 'iccid', 'card_number', 'card_from', 'iccid', 'company', 'custom_state', 'create_time' ,'update_time', 'card_cycle_start'])
->where('id', '>', $this->maxId)
->orderBy('id');
$res = $query->forPage($this->page, $this->limit)->get();
if (empty($res)) {
Log::notice('CardSyncJob not result!');
return ;
}
$array = [];
foreach ($res as $key => $value) {
$value = (array)$value;
$virtual_activated_at = date('Y-m-d H:i:s', $value['card_cycle_start']);
if (Carbon::parse($virtual_activated_at) < Carbon::parse('2000-01-01 00:00:00')) {
$virtual_activated_at = null;
}
$array[] = [
'sim' => $value['card_number'],
'imsi' => $value['imsi'],
'iccid' => $value['iccid'],
'bloc_id' => $this->blocs[$value['card_from']] ?? 0,
'carrier_operator' => self::$carrierOperators[$value['carrieroperator']] ?? 255,
'type' => ($value['card_number'][3] >= 5) ? 1 : 0,
'activated_at' => $virtual_activated_at,
'virtual_activated_at' => $virtual_activated_at,
'cancelled_at' => ($value['custom_state'] === 13) ? date('Y-m-d H:i:s', $value['update_time']) : null,
'created_at' => date('Y-m-d H:i:s', $value['create_time']),
'updated_at' => date('Y-m-d H:i:s', $value['update_time']),
];
}
$builder = Card::query()->toBase();
$sql = $builder->getGrammar()->compileInsert($builder, $array);
$sql .= ' on conflict (sim) do update set
activated_at=COALESCE(cards.activated_at, excluded.virtual_activated_at),
virtual_activated_at=excluded.virtual_activated_at,
cancelled_at=excluded.cancelled_at';
$builder->connection->insert($sql, Arr::flatten($array, 1));
app(CardRepository::class)->forgetCached();
}
}