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() { Log::info("CardSyncJob #: maxId {$this->maxId} - page {$this->page}"); $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(); Log::info("CardSyncJob END #: maxId {$this->maxId} - page {$this->page}"); } }