whereIn('OrderNo', $clearOrderNos)->whereIn('OwnerNo',$ownerNos)->delete(); app('LogService')->log(__CLASS__, __METHOD__, 'Delete OracleDOCWaveDetails' . ' ' . json_encode($clearOrderNos) ); } private function getSyncAt() { return Cache::remember('clear_cancel_order_sync_at', config('sync.clear_wave_order.cache_prefix.sync_at'), function () { $valueStore = ValueStore::query()->where('name', 'last_cancel_order_sync_at')->first(); if(!$valueStore) $valueStore = ValueStore::query()->create(['name'=>'last_cancel_order_sync_at']); if (!$valueStore->value) return (string)Carbon::now()->subMinutes(7); return $valueStore->value; }); } private function getLastSyncStartAt() { return Cache::remember('clear_cancel_order_start_at', config('sync.clear_wave_order.cache_prefix.last_start_at'), function () { $valueStore = ValueStore::query()->where('name', 'last_cancel_order_start_at')->first(); if(!$valueStore) $valueStore = ValueStore::query()->create(['name'=>'last_cancel_order_start_at']); if ($valueStore->value) return (string)Carbon::now(); return null; }); } private function getLastSyncEndAt() { return Cache::remember('clear_cancel_order_start_at', config('sync.clear_wave_order.cache_prefix.last_end_at'), function () { $valueStore = ValueStore::query()->where('name', 'last_cancel_order_end_at')->first(); if(!$valueStore) $valueStore = ValueStore::query()->create(['name'=>'last_cancel_order_end_at']); if ($valueStore->value) return (string)Carbon::now(); return null; }); } private function setSyncAt($time) { Cache::put(config('clear_cancel_order_sync_at'), $time); ValueStore::query()->where('name', 'last_cancel_order_sync_at')->update(['value'=>$time]); } private function setSyncStartAt($time) { Cache::put(config('clear_cancel_order_start_at'), $time); ValueStore::query()->where('name', 'last_cancel_order_start_at')->update(['value'=>$time]); } private function setSyncEndAt($time) { Cache::put(config('clear_cancel_order_start_at'), $time); ValueStore::query()->where('name', 'last_cancel_order_end_at')->update(['value'=>$time]); } public function clearCancelledOrderTask() { $enabled = config('sync.clear_wave_order.enabled'); if ($enabled == false) return; $sync_at = $this->getSyncAt(); $last_start_at = $this->getLastSyncStartAt(); $last_end_at = $this->getLastSyncEndAt(); $restart = config('clear_wave_order.cache_prefix.restart'); $start_time = Carbon::now(); if (isset($last_start_at) && empty($last_end_at) && $start_time->diffInMinutes(Carbon::parse($last_start_at)) < $this->restart) return; if (isset($last_start_at) && isset($last_end_at) && Carbon::parse($last_end_at)->lt(Carbon::parse($last_start_at)) && $start_time->diffInMinutes(Carbon::parse($last_start_at)) < $restart) return; $orderHeaders = OracleDOCOrderHeader::query() ->selectRaw('orderno,waveno') ->where('editTime', '>=', Carbon::parse($sync_at)->subSeconds(1)) ->where('ERPCANCELFLAG', 'Y') ->orderByDesc('editTime')->get(); $orderHeaderList = $orderHeaders->chunk(3000); foreach ($orderHeaderList as $items) { $this->clearCancelledOrder($items); if ($orderHeaders->count() > 0) { OracleDOCOrderHeader::query()->whereIn('orderNo', data_get($items, '*.orderno'))->update(['waveno' => '*']); $json = json_encode($items->map(function ($orderHeader) { return ['orderno' => $orderHeader->orderno, 'waveno' => $orderHeader->waveno]; })); app('LogService')->log(__CLASS__, __METHOD__, 'update OrderHeader' . ' ' . $json); } } $end_time = (string)Carbon::now(); $sync_at = $orderHeaders->last()->editTime ?? $sync_at; $this->setSyncAt($sync_at); $this->setSyncStartAt((string)$start_time); $this->setSyncEndAt($end_time); } }