runOnePending(); }); } /** * 执行一条待完成的测试记录(status=0) * 先原子更新为 STATUS_EXECUTING,避免定时器 15 秒重入时同一条记录被重复执行(导致顺/逆时针各跑两倍次数) */ private function runOnePending(): void { $record = DiceRewardConfigRecord::where('status', DiceRewardConfigRecord::STATUS_RUNNING) ->order('id') ->find(); if (!$record) { return; } $recordId = (int) $record->id; $affected = DiceRewardConfigRecord::where('id', $recordId) ->where('status', DiceRewardConfigRecord::STATUS_RUNNING) ->update(['status' => DiceRewardConfigRecord::STATUS_EXECUTING]); if ($affected !== 1) { return; } try { (new WeightTestRunner())->run($recordId); } catch (\Throwable $e) { // WeightTestRunner 内部会更新 status=-1 和 remark } } }