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 ; } $blocs = app(BlocRepository::class)->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, 'order_status' => intval(!empty($value['bNo'])), '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), order_status=excluded.order_status'; $builder->connection->insert($sql, Arr::flatten($values, 1)); app(CardRepository::class)->forgetCached(); Log::info("MongoSyncJob END #: utcDateTime {$this->utcDateTime} - page {$this->page}"); } }