fix: 更新数据面板的驱动方式
This commit is contained in:
62
docs/DATA_FLOW.md
Normal file
62
docs/DATA_FLOW.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# 前端数据更新链路与字段映射
|
||||
|
||||
## 1. 前端数据点
|
||||
|
||||
| 组件 | 数据 | API 字段 | DB 表/列 |
|
||||
|------|------|----------|----------|
|
||||
| HeaderPanel | lastUpdated | situation.lastUpdated | situation.updated_at |
|
||||
| HeaderPanel | powerIndex | usForces/iranForces.powerIndex | power_index |
|
||||
| HeaderPanel | feedbackCount, shareCount | POST /api/feedback, /api/share | feedback, share_count |
|
||||
| TimelinePanel | recentUpdates | situation.recentUpdates | situation_update |
|
||||
| WarMap | keyLocations | usForces/iranForces.keyLocations | key_location |
|
||||
| BaseStatusPanel | 基地统计 | keyLocations (status, damage_level) | key_location |
|
||||
| CombatLossesPanel | 人员/平民伤亡 | combatLosses, civilianCasualtiesTotal | combat_losses |
|
||||
| CombatLossesOtherPanel | 装备毁伤 | combatLosses (bases, aircraft, drones, …) | combat_losses |
|
||||
| PowerChart | 雷达图 | powerIndex | power_index |
|
||||
| WallStreetTrend | 美股趋势 | wallStreetInvestmentTrend | wall_street_trend |
|
||||
| RetaliationGauge | 报复指数 | retaliationSentiment | retaliation_current/history |
|
||||
|
||||
**轮询**: `fetchSituation()` 加载,WebSocket `/ws` 每 3 秒广播。`GET /api/situation` → `getSituation()`。
|
||||
|
||||
## 2. 爬虫 → DB 字段映射
|
||||
|
||||
| 提取器输出 | DB 表 | 逻辑 |
|
||||
|------------|-------|------|
|
||||
| situation_update | situation_update | INSERT |
|
||||
| combat_losses_delta | combat_losses | 增量叠加 (ADD) |
|
||||
| retaliation | retaliation_current, retaliation_history | REPLACE / APPEND |
|
||||
| wall_street | wall_street_trend | INSERT |
|
||||
| key_location_updates | key_location | UPDATE status, damage_level WHERE name LIKE |
|
||||
|
||||
### combat_losses 字段对应
|
||||
|
||||
| 提取器 (us/iran) | DB 列 |
|
||||
|------------------|-------|
|
||||
| personnel_killed | personnel_killed |
|
||||
| personnel_wounded | personnel_wounded |
|
||||
| civilian_killed | civilian_killed |
|
||||
| civilian_wounded | civilian_wounded |
|
||||
| bases_destroyed | bases_destroyed |
|
||||
| bases_damaged | bases_damaged |
|
||||
| aircraft, warships, armor, vehicles | 同名 |
|
||||
| drones, missiles, helicopters, submarines | 同名 |
|
||||
|
||||
## 3. 测试用例
|
||||
|
||||
运行: `npm run crawler:test:extraction`
|
||||
|
||||
| 用例 | 输入 | 预期 |
|
||||
|------|------|------|
|
||||
| 特朗普 1000 军事目标 | "特朗普说伊朗有1000个军事目标遭到袭击" | 不提取 bases_destroyed/bases_damaged |
|
||||
| 阿萨德基地遭袭 | "阿萨德空军基地遭袭,损失严重" | 输出 key_location_updates |
|
||||
| 美军伤亡 | "3名美军阵亡,另有5人受伤" | personnel_killed=3, personnel_wounded=5 |
|
||||
| 伊朗平民 | "伊朗空袭造成伊拉克平民50人伤亡" | iran.civilian_killed=50 |
|
||||
| 伊朗无人机 | "美军击落伊朗10架无人机" | iran.drones=10 |
|
||||
| db_merge 增量 | 两次 merge 3+2 | personnel_killed=5 |
|
||||
|
||||
## 4. 注意事项
|
||||
|
||||
- **bases_***: 仅指已确认损毁/受损的基地;"军事目标"/targets 不填 bases_*。
|
||||
- **正则 [\s\w]***: 会匹配数字,导致 (\d+) 只捕获末位;数字前用 `[^\d]*`。
|
||||
- **伊朗平民**: 规则已支持 "伊朗空袭造成…平民" 归入 loss_ir。
|
||||
- **key_location**: 需 name LIKE '%keyword%' 匹配,关键词见 extractor_rules.bases_all。
|
||||
Reference in New Issue
Block a user