10 KiB
10 KiB
YRTV 网站需求规格说明书 (RDD)
1. 项目概述 (Overview)
1.1 项目背景
YRTV 是一个面向 CS2 战队数据洞察与战术研判的 Web 平台,旨在通过 Web 界面提供可视化的数据查询、战队管理、战术模拟及深度分析功能。
1.2 核心目标
- 数据可视化: 将复杂的 SQLite 比赛数据转化为易读的图表、雷达图和趋势线。
- 战术研判: 提供阵容模拟、协同分析及地图热点情报,辅助战术决策。
- 交互体验: 通过轻量级前端交互(筛选、对比、点赞、白板)提升数据使用效率。
- 实时动态: 追踪战队成员的实时竞技状态与近期比赛动态,营造“战队大厅”氛围。
1.3 技术栈规划
- 后端框架: Python Flask (轻量级,易于集成现有 ETL 脚本)
- 数据库:
- L2: SQLite (
database/L2/L2_Main.sqlite) - 基础事实数据 (Read-Only for Web) - L3: SQLite (
database/L3/L3_Features.sqlite) - 高级衍生特征 (Read-Only for Web) - Web: SQLite (
database/Web/Web_App.sqlite) - [新增] 业务数据 (用户、评论、阵容配置、策略板存档)
- L2: SQLite (
- 模板引擎: Jinja2 (服务端渲染)
- 前端样式: Tailwind CSS (CDN 引入,快速开发) + PC-First 响应式设计 (适配手机、平板与桌面端),主题色紫色,可切换黑白模式。
- 前端交互:
- 图表: Chart.js / ECharts (雷达图、趋势图)
- 交互: Alpine.js 或原生 JS (处理模态框、异步请求)
- 拖拽: SortableJS (阵容调整)
- 地图: Leaflet.js 或简单 Canvas (热力图/策略板)
2. 系统架构 (Architecture)
2.1 目录结构规划
yrtv/
├── web/
│ ├── app.py # Flask 应用入口
│ ├── config.py # 配置文件
│ ├── routes/ # 路由模块
│ │ ├── main.py # 首页与通用 (Home)
│ │ ├── players.py # 玩家模块 (List, Detail, Compare)
│ │ ├── teams.py # 战队模块 (Lineup, Stats)
│ │ ├── matches.py # 比赛模块 (List, Detail, Demo)
│ │ ├── tactics.py # 战术模块 (Lineup Builder, Map, Nade)
│ │ ├── wiki.py # 知识库模块 (Wiki, Docs)
│ │ └── admin.py # 管理后台 (ETL Trigger, User Mgmt)
│ ├── services/ # 业务逻辑层 (连接 L2/L3/Web DB)
│ │ ├── stats_service.py # 基础数据查询 (L2)
│ │ ├── feature_service.py # 高级特征查询 (L3)
│ │ ├── wiki_service.py # 知识库管理
│ │ └── user_service.py # 用户与评论管理
│ ├── static/ # 静态资源
│ │ ├── css/
│ │ ├── js/
│ │ └── images/
│ └── templates/ # Jinja2 模板
│ ├── base.html
│ ├── components/
│ ├── home/
│ ├── players/
│ ├── teams/
│ ├── matches/
│ ├── tactics/
│ ├── wiki/
│ └── admin/
├── database/ # 数据存储
│ ├── L1A/ # 原始爬虫数据
│ ├── L2/ # 结构化事实数据
│ ├── L3/ # 衍生特征库 (Feature Store)
│ └── Web/ # [新增] 业务数据库 (User, Comment, Wiki)
└── ETL/ # 数据处理层 (ETL Pipeline)
├── L1A.py # L1A Ingest
├── L2_Builder.py # L2 Transform
└── L3_Builder.py # L3 Feature Engineering (原 feature_store.py 逻辑)
2.2 数据流向
- ETL 层 (数据处理核心):
- L1 (Raw): 爬虫 -> JSON 存储。
- L2 (Fact): JSON -> 清洗/标准化 -> Fact/Dim Tables。
- L3 (Features): L2 -> 聚合/滑窗计算/模型推理 -> Player/Team Derived Features。数据处理逻辑收敛于 ETL 目录下的脚本,Web 端仅负责读取 L2/L3 结果。
- Service 层: Flask Service 仅负责 SQL 查询与简单的业务组装(如评论关联),不再包含复杂的数据计算逻辑。
- View 层: Jinja2 渲染 HTML。
- Client 层: 浏览器交互。
3. 功能需求详解 (Functional Requirements)
3.1 首页 (Home)
- 功能: 平台入口与导航聚合。
- 内容:
- Hero 区域: 平台定位文案("JKTV CS2 队伍数据洞察平台")。
- Live / 战队状态看板 (New):
- 正在进行: 如果监测到战队成员(配置列表内)正在进行比赛(通过 5E 接口轮询或最近 10 分钟内有数据更新),显示 "LIVE" 状态卡片。
- 近期战况: 滚动显示战队成员最近结束的 5 场比赛结果(胜负、比分、MVP)。
- 状态概览: 类似 GitHub Contribution 的热力日历,展示战队本月的活跃度。
- 快捷入口卡片:
- "战术指挥中心": 跳转至阵容模拟。
- "近期比赛": 跳转至最新一场比赛详情。
- "数据中心": 跳转至多维对比。
- 比赛解析器: 输入 5E 比赛链接,点击按钮触发后台 ETL 任务(异步),前端显示 Loading 状态或 Toast 提示。
3.2 玩家模块 (Players)
3.2.1 玩家列表 PlayerList
- 筛选/搜索: 按 ID/昵称搜索,按 K/D、Rating、MVP 等指标排序。
- 展示: 卡片式布局,显示头像、ID、主队、核心数据 (Rating, K/D, ADR)。
3.2.2 玩家详情 PlayerProfile
- 基础信息: 头像、SteamID、5E ID、注册时间。可以手动分配Tag。玩家列表 Players
- 核心指标: 赛季平均 Rating, ADR, KAST, 首杀成功率等。
- 能力雷达图: 计算规则需在 Service 层定义。
- 趋势图: 近 10/20 场比赛 Rating 走势 (Chart.js)。
- 评价板: 类似于虎扑评分,用户可点赞/踩,显示热门评价(需新增
web_comments表)。增加访问次数统计。 - 管理区 (Admin Only): 修改备注、上传自定义头像。
3.3 战队模块 (Teams)
- 阵容视图: 展示当前核心阵容,手动添加。
- 角色分组: 手动标签将玩家分组。
- 统计概览: 战队整体胜率、近期战绩、地图胜率分布,个人关键数据。
3.4 比赛模块 (Matches)
3.4.1 比赛列表 MatchList
- 筛选: 按地图、日期范围筛选。
- 展示: 列表视图,显示时间、地图、比分、胜负、MVP。
3.4.2 比赛详情 MatchDetail
- 头部: 比分板(CT/T 分数)、地图、时长、Demo 下载链接。
- 数据表: 双方队伍的完整数据表(K, D, A, FK, FD, ADR, Rating, KAST, AWP Kills 等)。
- 利用
fact_match_players中的丰富字段。
- 利用
- 原始数据: 提供 JSON 格式的原始数据查看/下载(
raw_iframe_network提取)。
3.5 战术模块 (Tactics)
3.5.1 化学反应与战术深度分析 (Deep Analysis)
- 阵容组建: 交互式界面,从玩家池拖拽 5 名玩家进入“首发名单”。
- 阵容评估: 实时计算该 5 人组合的平均能力雷达。
- 共同经历: 查询这 5 人共同参与过的比赛场次及胜率。
- 协同矩阵: 选择特定阵容,展示两两之间的协同数据(如:A 补枪 B 的次数,A 与 B 同时在场时的胜率)。
- 最佳/短板分析: 基于历史数据分析该阵容在特定地图上的强弱项。
3.5.2 数据对比 Data Center
- 多选对比: 选择多名玩家,并在同一雷达图/柱状图中对比各项数据。
- 地图筛选: 查看特定玩家在特定地图上的表现差异。
3.5.3 道具与策略板 (Grenades & Strategy Board)
- 道具管理:
- 道具计算: 提供特定点位(如 Inferno 香蕉道)的烟雾弹/燃烧弹投掷模拟(基于坐标距离与轨迹公式)。
- 道具库: 预设主流地图的常见道具点位(图片/视频展示),支持管理员添加新点位。
- 实时互动策略板:
- 分地图绘制: 基于 Leaflet.js 或 Canvas,加载 CS2 高清鸟瞰图。
- 实时协同: 支持 WebSocket 多人同屏绘制(类似 Excalidraw),即时同步画笔轨迹与标记。
- 快照保存: 支持一键保存当前战术板状态为图片或 JSON,生成分享链接/加入知识库。
3.5.4 经济计算器 (Economy Calculator)
- 功能: 模拟 CS2 经济系统,辅助指挥决策。
- 输入: 设定当前回合胜负、存活人数、炸弹状态、当前连败奖励。
- 输出: 预测下一回合敌我双方的经济状况(最小/最大可用资金),给出起枪建议(Eco/Force/Full Buy)。
3.6 知识库 (Knowledge Base / Wiki)
- 架构: 典型的 Wiki 布局。
- 左侧: 全局文档树状目录(支持多级折叠)。
- 右侧: 当前文档的页内大纲(TOC)。
- 中间: Markdown 渲染的正文区域。
- 功能:
- 快速编辑: 提供 Web 端 Markdown 编辑器,支持实时预览。
- 简单验证: 简单的密码或 Token 验证即可保存修改,降低贡献门槛。
- 文件管理: 支持新建、重命名、删除文档,自动生成目录结构。
3.7 管理后台 (Admin)
- 鉴权: 简单的 Session/Token 登录。
- 数据管理:
- 手动触发增量/全量 ETL。
- 上传 demo 文件或修正比赛数据。
- 配置: 管理员账号管理、全局公告设置。查看网站访问数等后台统计。
3.7E 管理后台查询工具 (SQL Runner)
- 功能: 提供一个 Web 版的 SQLite 查询窗口。
- 限制: 只读权限(防止
DROP/DELETE),仅供高级用户进行自定义数据挖掘。
Second Stage: Demo 深度解析管线 (Future)
- 目标: 引入
demoparser2(或类似开源库) 实现本地 Demo 文件的深度解析,获取比 Web 爬虫更细粒度的原子级数据。 - Pipeline:
- Ingest: 自动/手动上传
.dem文件。 - Parse: 调用
demoparser2提取每 tick/每事件数据 (Player Position, Grenade Trajectory, Weapon Firing)。 - Store: 将海量原子数据存入 ClickHouse 或优化的 SQLite 分表 (L1B/L2+)。
- Analyze: 产出高级分析指标(如:真实拉枪反应时间、道具覆盖效率、非预瞄击杀率)。
- Visualize: 在前端复盘页面实现 2D 回放 (2D Replay) 功能。
- Ingest: 自动/手动上传