104 lines
4.6 KiB
Markdown
104 lines
4.6 KiB
Markdown
# 01 · 需求与范围
|
||
|
||
> 所属:运动会积分榜系统 · 开发文档集
|
||
> 版本:v0.1(讨论稿) · 2026-09-09
|
||
> 上游:[README](./README.md) · 相关:[02-积分与排名规则](./02-积分与排名规则.md)
|
||
|
||
---
|
||
|
||
## 1. 项目定义
|
||
|
||
一套**局域网内部署**的运动会成绩与积分系统:一个服务端进程,同时对外提供**实时积分大屏**(只读、无人值守)和**裁判长管理面板**(登录、录入、审核、发布)两个前端界面;后台一改数据,前台大屏在 1 秒内完成更新。
|
||
|
||
### 1.1 目标
|
||
|
||
| 编号 | 目标 | 验收标准 |
|
||
| --- | --- | --- |
|
||
| G1 | 成绩录入到上屏的延迟可感知地「即时」 | 发布后 ≤1s 大屏刷新完成 |
|
||
| G2 | 积分计算零差错 | 积分引擎单元测试覆盖全部规则分支,用例数 ≥60 |
|
||
| G3 | 误操作可追溯、可撤销 | 每次写操作留审计日志;成绩/调整可撤销且可回滚 |
|
||
| G4 | 现场不宕机、断电不丢数据 | 进程崩溃自动拉起;数据库每 5 分钟自动备份 + 发布前备份 |
|
||
| G5 | 大屏无人值守可连续运行 | 断网自恢复、分辨率自适应、7×24 无内存泄漏 |
|
||
|
||
### 1.2 非目标(明确不做,避免范围蔓延)
|
||
|
||
- ❌ 公网多租户 SaaS、多赛事并行管理(本期是**单赛事**)。
|
||
- ❌ 在线报名系统(报名表由主办方线下收集,系统支持导入)。
|
||
- ❌ 计时/测距设备硬件对接(除非 D6 确认需要,否则只留 CSV/Excel 导入接口)。
|
||
- ❌ 移动 App(手机浏览器访问是附赠能力,不是交付项)。
|
||
- ❌ 复杂的多级审批流(本期最多两级:录入 → 裁判长发布)。
|
||
|
||
### 1.3 名词表
|
||
|
||
| 术语 | 含义 |
|
||
| --- | --- |
|
||
| 单位 / 代表团 | 参赛主体,积分榜上的行,如「第一分公司」 |
|
||
| 大项 | 项目的分类,如「田径」「球类」「趣味项目」 |
|
||
| 小项 | 具体比赛项目,如「男子100米」「拔河」,**积分计算的最小单位** |
|
||
| 报名项 / entry | 「某单位派某人/某队参加某小项」这一条记录 |
|
||
| 成绩 / result | 某个报名项在比赛中取得的名次与成绩值 |
|
||
| 积分流水 / ledger | 单位得分的原子记录,总分由流水求和得出,**唯一的积分真相来源** |
|
||
| 发布 | 把草稿态成绩正式生效并推送上屏的动作 |
|
||
| 纪录 | 历史最好成绩,可被本次赛会打破并获得加分 |
|
||
| 版本号 / version | 服务端单调递增的变更序号,实时同步与断线补发的依据 |
|
||
|
||
---
|
||
|
||
## 2. 角色与职责
|
||
|
||
| 角色 | 使用界面 | 能做什么 |
|
||
| --- | --- | --- |
|
||
| 大屏观众 | 大屏端 | 只能看 |
|
||
| 录入员 `recorder` | 管理端 | 录入成绩草稿、查看自己录入的内容 |
|
||
| 裁判长 `chief` | 管理端 | 录入、修改、审核、发布、撤销、登记破纪录、加减分、控制大屏 |
|
||
| 管理员 `admin` | 管理端 | 全部权限 + 用户管理 + 赛事配置 + 备份恢复 |
|
||
|
||
权限的落地方式(会话、路由级/服务级双重校验)见 [08-安全与可靠性](./08-安全与可靠性.md)。
|
||
|
||
---
|
||
|
||
## 3. 赛事时间线(系统的使用节奏)
|
||
|
||
```
|
||
赛前(T-7 ~ T-1)
|
||
建赛事 → 导入单位 → 建大项/小项 → 配置积分模板 → 导入报名表
|
||
→ 录入/导入历届纪录 → 联调彩排
|
||
|
||
赛中(比赛日)
|
||
项目开始 → 裁判录入成绩(草稿)→ 裁判长核对 → 发布 → 大屏实时更新
|
||
→ 破纪录登记 → 公告发布
|
||
|
||
赛后(T+1)
|
||
导出成绩册/积分表 → 归档 → 备份留档
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 核心业务流程
|
||
|
||
### 4.1 成绩录入 → 上屏
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
A[裁判长选择小项] --> B[系统列出该项目全部报名项]
|
||
B --> C[录入名次/成绩/状态]
|
||
C --> D[系统实时校验并预览积分变化]
|
||
D --> E{提交}
|
||
E -->|存草稿| F[草稿态·不上屏]
|
||
E -->|发布| G[写入积分流水]
|
||
G --> H[重算总积分榜]
|
||
H --> I[生成变更事件 version++]
|
||
I --> J[WebSocket 推送]
|
||
J --> K[大屏应用增量·播放动效]
|
||
F --> L[稍后审核发布]
|
||
```
|
||
|
||
### 4.2 关键约束
|
||
|
||
1. **草稿绝不上屏**:服务端只向大屏推送 `state='published'` 的数据。
|
||
2. **发布是批量事务**:一个项目的整组成绩一次发布,不允许出现「发布了 3 人、还剩 5 人」的中间态。
|
||
3. **发布后修改要走撤销**:作废旧积分流水 → 重新发布,全程留审计。
|
||
4. **积分只追加不修改**:总分永远是 `SUM(未作废流水)`,任何数字都能回答「这分怎么来的」。
|
||
|
||
> 规则的完整定义见 [02-积分与排名规则](./02-积分与排名规则.md);流程对应的接口见 [05-接口与实时协议](./05-接口与实时协议.md)。
|