Files
usa/docs/DATA_FLOW.md
2026-03-02 23:21:07 +08:00

3.0 KiB
Raw Blame History

前端数据更新链路与字段映射

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/situationgetSituation()

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。