新增掉线自动结算命令并修复跨天日志归零问题

- 新建 CloseStaleDutyLogs 命令:每 15 分钟扫描无心跳开放日志自动关闭
- 注册调度 duty:close-stale-logs everyFifteenMinutes
- 修复 closeDutyLog:跨天遗留日志保留 duration_seconds,不再硬归零
This commit is contained in:
2026-03-17 20:27:04 +08:00
parent ef9a8ed0b6
commit 7804adc54a
3 changed files with 69 additions and 3 deletions
+3 -3
View File
@@ -1025,14 +1025,14 @@ class ChatController extends Controller
'duration_seconds' => DB::raw('GREATEST(0, TIMESTAMPDIFF(SECOND, login_at, NOW()))'),
]);
// 清理历史遭留未关闭日志(login_at 非今日),直接将它们的时长置 0,避免被算入任何榜单
// 关闭历史遗留的跨天未关闭日志(login_at 非今日)
// 保留最后一次心跳刷新的 duration_seconds,确保已积累时长不丢失
PositionDutyLog::query()
->where('user_id', $userId)
->whereNull('logout_at')
->whereDate('login_at', '<', today())
->update([
'logout_at' => DB::raw('login_at'), // 时长 = 0
'duration_seconds' => 0,
'logout_at' => DB::raw('login_at + INTERVAL duration_seconds SECOND'),
]);
}