feat(成就): 新增「最长连续新通过周数」指标,按课表的节奏算连续;修掉比赛成就重扫因孤儿提交失败
Deploy / deploy (push) Canceled after 0s

按天的连续成就对这里的学生基本拿不到:2025 秋最长连续交题天数的中位数是 1 天,
连续 7 天的只有 3 人。按周算,连续 2/4/8 周分别有约 73%/49%/8% 的学生做到过。

- 新指标 max_ac_week_streak:连续几个自然周(周一起、东八区)每周都至少新通过一道题
  (不含比赛)。判题结算时增量累计(比按天那段多一道判断:重判更早的提交不会把连续清零);
  后台建成就触发重扫时,先从提交记录全量补算(refreshAcWeekStreakForAll),同 contest_joined
- 老的「坚持三天」「坚持一周」不动:下架的成就连已获得的人也看不到
- 修:库里 28 个已不存在的用户留下了 935 条提交(其中 11 人有比赛提交),全量补算往
  user_stat 写时撞外键,整次失败——比赛类成就的重扫因此一直是失败的;两处都改为只算
  还在的用户。本地修好后重扫「初入赛场」补发了 3 人
- 本地验证:连续 2/4/8 周补发 1086/618/123 人,与独立 SQL 一致

线上要在后台手动建成就(指标选「最长连续新通过周数」),建的时候自动补发。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-09-28 08:27:25 +08:00
1 parent 8ca427b5cd
commit 71670e609b
2 files changed
+92 -1

No files matched your search

@@ -40,6 +40,13 @@ export const ACHIEVEMENT_METRICS: AchievementMetric[] = [
name: "最长连续 AC 天数",
helpText: "连续每天至少 AC 一题的最长天数",
},
// 按周不按天:学生跟着课表来,2025 秋最长连续交题天数的中位数是 1 天、连续 7 天的
// 只有 3 人,按天的「坚持一周」基本拿不到;按周的连续 2/4/8 周分别约 73%/49%/8%
{
key: "max_ac_week_streak",
name: "最长连续新通过周数",
helpText: "连续几个自然周(周一起)每周都至少新通过一道题(不含比赛)",
},
{ key: "languages_used", name: "使用语言数", helpText: "用过多少种编程语言" },
{
key: "contest_joined",