beginUid = $beginUid; $this->endUid = $endUid; $this->idStr = $idStr; $this->idRedisKey = $idRedisKey; $this->requestId = $requestId; } /** * Determine the time at which the job should timeout. * * @return \DateTime */ public function retryUntil() { return now()->addSeconds(Setting::get('main.autoclean_interval_four')); } public $tries = 1; public $timeout = 3600; /** * Execute the job. * * @return void */ public function handle() { $beginTimestamp = time(); $logPrefix = sprintf("[CLEANUP_CLI_UPDATE_SEEDING_LEECHING_TIME_HANDLE_JOB], commonRequestId: %s, beginUid: %s, endUid: %s", $this->requestId, $this->beginUid, $this->endUid); $count = 0; $idStr = $this->idStr; $delIdRedisKey = false; if (empty($idStr) && !empty($this->idRedisKey)) { $delIdRedisKey = true; $idStr = NexusDB::cache_get($this->idRedisKey); } if (empty($idStr)) { do_log("$logPrefix, no idStr or idRedisKey", "error"); return; } $uidArr = explode(",", $idStr); foreach ($uidArr as $uid) { if ($uid <= 0) { continue; } $sumInfo = NexusDB::table('snatched') ->selectRaw('sum(seedtime) as seedtime_sum, sum(leechtime) as leechtime_sum') ->where('userid', $uid) ->first(); if ($sumInfo && $sumInfo->seedtime_sum !== null) { $update = [ 'seedtime' => $sumInfo->seedtime_sum ?? 0, 'leechtime' => $sumInfo->leechtime_sum ?? 0, 'seed_time_updated_at' => Carbon::now()->toDateTimeString(), ]; NexusDB::table('users') ->where('id', $uid) ->update($update); do_log("[CLEANUP_CLI_UPDATE_SEEDING_LEECHING_TIME_HANDLE_USER], [SUCCESS]: $uid => " . json_encode($update)); $count++; } } if ($delIdRedisKey) { NexusDB::cache_del($this->idRedisKey); } $costTime = time() - $beginTimestamp; do_log("$logPrefix, [DONE], user total count: " . count($uidArr) . ", success update count: $count, cost time: $costTime seconds"); } /** * Handle a job failure. * * @param \Throwable $exception * @return void */ public function failed(\Throwable $exception) { do_log("failed: " . $exception->getMessage() . $exception->getTraceAsString(), 'error'); } }