fix:优化整个大屏界面
This commit is contained in:
@@ -15,6 +15,7 @@ function toLosses(row) {
|
||||
return {
|
||||
bases: { destroyed: row.bases_destroyed, damaged: row.bases_damaged },
|
||||
personnelCasualties: { killed: row.personnel_killed, wounded: row.personnel_wounded },
|
||||
civilianCasualties: { killed: row.civilian_killed ?? 0, wounded: row.civilian_wounded ?? 0 },
|
||||
aircraft: row.aircraft,
|
||||
warships: row.warships,
|
||||
armor: row.armor,
|
||||
@@ -25,6 +26,7 @@ function toLosses(row) {
|
||||
const defaultLosses = {
|
||||
bases: { destroyed: 0, damaged: 0 },
|
||||
personnelCasualties: { killed: 0, wounded: 0 },
|
||||
civilianCasualties: { killed: 0, wounded: 0 },
|
||||
aircraft: 0,
|
||||
warships: 0,
|
||||
armor: 0,
|
||||
@@ -45,9 +47,30 @@ function getSituation() {
|
||||
const trend = db.prepare('SELECT time, value FROM wall_street_trend ORDER BY time').all()
|
||||
const retaliationCur = db.prepare('SELECT value FROM retaliation_current WHERE id = 1').get()
|
||||
const retaliationHist = db.prepare('SELECT time, value FROM retaliation_history ORDER BY time').all()
|
||||
const updates = db.prepare('SELECT * FROM situation_update ORDER BY timestamp DESC').all()
|
||||
const updates = db.prepare('SELECT * FROM situation_update ORDER BY timestamp DESC LIMIT 50').all()
|
||||
const meta = db.prepare('SELECT updated_at FROM situation WHERE id = 1').get()
|
||||
|
||||
let conflictEvents = []
|
||||
let conflictStats = { total_events: 0, high_impact_events: 0, estimated_casualties: 0, estimated_strike_count: 0 }
|
||||
try {
|
||||
conflictEvents = db.prepare('SELECT event_id, event_time, title, lat, lng, impact_score, url FROM gdelt_events ORDER BY event_time DESC LIMIT 30').all()
|
||||
const statsRow = db.prepare('SELECT total_events, high_impact_events, estimated_casualties, estimated_strike_count FROM conflict_stats WHERE id = 1').get()
|
||||
if (statsRow) conflictStats = statsRow
|
||||
} catch (_) {}
|
||||
|
||||
// 根据爬虫 conflict_stats 实时合并平民伤亡估算(GDELT 数据)
|
||||
const usLossesBase = lossesUs ? toLosses(lossesUs) : defaultLosses
|
||||
const irLossesBase = lossesIr ? toLosses(lossesIr) : defaultLosses
|
||||
const est = conflictStats.estimated_casualties || 0
|
||||
const mergeCivilian = (base, share) => {
|
||||
if (est <= 0) return base.civilianCasualties || { killed: 0, wounded: 0 }
|
||||
const gdeltKilled = Math.round(est * share)
|
||||
const cur = base.civilianCasualties || { killed: 0, wounded: 0 }
|
||||
return { killed: Math.max(cur.killed, gdeltKilled), wounded: cur.wounded }
|
||||
}
|
||||
const usLosses = { ...usLossesBase, civilianCasualties: mergeCivilian(usLossesBase, 0.35) }
|
||||
const irLosses = { ...irLossesBase, civilianCasualties: mergeCivilian(irLossesBase, 0.65) }
|
||||
|
||||
return {
|
||||
lastUpdated: meta?.updated_at || new Date().toISOString(),
|
||||
usForces: {
|
||||
@@ -69,7 +92,7 @@ function getSituation() {
|
||||
},
|
||||
assets: (assetsUs || []).map(toAsset),
|
||||
keyLocations: locUs || [],
|
||||
combatLosses: lossesUs ? toLosses(lossesUs) : defaultLosses,
|
||||
combatLosses: usLosses,
|
||||
wallStreetInvestmentTrend: trend || [],
|
||||
},
|
||||
iranForces: {
|
||||
@@ -91,7 +114,7 @@ function getSituation() {
|
||||
},
|
||||
assets: (assetsIr || []).map(toAsset),
|
||||
keyLocations: locIr || [],
|
||||
combatLosses: lossesIr ? toLosses(lossesIr) : defaultLosses,
|
||||
combatLosses: irLosses,
|
||||
retaliationSentiment: retaliationCur?.value ?? 0,
|
||||
retaliationSentimentHistory: retaliationHist || [],
|
||||
},
|
||||
@@ -102,6 +125,16 @@ function getSituation() {
|
||||
summary: u.summary,
|
||||
severity: u.severity,
|
||||
})),
|
||||
conflictEvents: conflictEvents.map((e) => ({
|
||||
event_id: e.event_id,
|
||||
event_time: e.event_time,
|
||||
title: e.title,
|
||||
lat: e.lat,
|
||||
lng: e.lng,
|
||||
impact_score: e.impact_score,
|
||||
url: e.url,
|
||||
})),
|
||||
conflictStats,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user