3.0 KiB
3.0 KiB
前端数据更新链路与字段映射
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。