fix 交通事故应急处理缺少部分数据

This commit is contained in:
wangyunfei 2026-03-20 13:33:16 +08:00
parent 9ac5c63b1c
commit eaa8e3bd17
4 changed files with 73 additions and 6 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.sh text eol=lf

20
deploy.sh Normal file
View File

@ -0,0 +1,20 @@
#!/usr/bin/env bash
# 在 citytranapidemo 项目根目录编译,输出到 ../citytrandemo/publish并复制运行所需目录。
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
OUT="${ROOT}/../citytrandemo/publish"
BIN_NAME="${BIN_NAME:-citytranapidemo}"
mkdir -p "${OUT}"
echo "==> 编译: ${ROOT} -> ${OUT}/${BIN_NAME}"
(
cd "${ROOT}"
go build -o "${OUT}/${BIN_NAME}" ./cmd/server
)
echo "==> 复制 configs, migrations, cmd"
cp -r "${ROOT}/configs" "${ROOT}/migrations" "${ROOT}/cmd" "${OUT}/"
echo "完成: ${OUT}"

View File

@ -64,12 +64,13 @@
### TrafficAccidentEmergencyDisposal
- `basic_info_and_realtime_monitor.items[]`:事故基本信息与实时监控(项目/数据)
- `disposal_process.*.items[]`交通事件处置进程5 个子阶段,均为项目/数据)
- `top_information`顶部信息当前进度、已耗时、SLA 剩余等)
- `incident_assessment_and_trigger`
- `intelligent_plan_generation`
- `measure_execution_tracking`
- `dynamic_adjustment_collab`
- `disposal_process`:交通事件处置进程
- `top_information.items[]`:顶部信息(项目/数据)
- 下列四个子阶段均为 `items[]`(内容表)+ `status`Excel「状态」行对应值`完成`;已从 `items` 中剔除,避免重复)
- `incident_assessment_and_trigger`
- `intelligent_plan_generation`
- `measure_execution_tracking`
- `dynamic_adjustment_collab`
- `rescue_operation_monitor.items[]`:应急救援运行检测(项目/数据)
- `regional_coordination.items[]`:区域协同管控概况(项目/数据)
- `effect_evaluation.items[]`:效果评估与态势研判(项目/数据)

View File

@ -62,21 +62,25 @@ type TopInformation struct {
// 事件研判定与处置触发
type IncidentAssessmentAndTrigger struct {
Items []ProjectData `json:"items"`
Status string `json:"status"`
}
// 智能方案生成与推荐
type IntelligentPlanGeneration struct {
Items []ProjectData `json:"items"`
Status string `json:"status"`
}
// 处置措施执行与跟踪
type MeasureExecutionTracking struct {
Items []ProjectData `json:"items"`
Status string `json:"status"`
}
// 动态调整与协同
type DynamicAdjustmentCollab struct {
Items []ProjectData `json:"items"`
Status string `json:"status"`
}
// 应急救援运行检测
@ -192,6 +196,31 @@ func isAnySubtitleRow(row []string, subtitles []string) bool {
return false
}
// splitStatusFromItems 从「项目/数据」行中拆出「状态」行:状态值写入 status且不再保留在 items 中。
// 兼容历史表把状态误写在「项目」列、数据列为空(如 project=完成)的情形。
func splitStatusFromItems(items []ProjectData) (filtered []ProjectData, status string) {
filtered = make([]ProjectData, 0, len(items))
for _, it := range items {
p := strings.TrimSpace(it.Project)
d := strings.TrimSpace(it.Data)
if p == "状态" {
if status == "" {
status = d
}
continue
}
// 误排:状态值只在「项目」列、数据列为空(历史表常见)
if d == "" && p != "" && p != "项目" && (p == "完成" || p == "进行中" || p == "待执行") {
if status == "" {
status = p
}
continue
}
filtered = append(filtered, it)
}
return filtered, status
}
// readProjectDataTable 从 startRow 开始向下寻找表头「项目」「数据」,找到后读取后续行。
// - 表头可出现在任意列(常见为 col1/2 或 col3/4按行内匹配定位
// - 遇到下一锚点第0列包含锚点或遇到 stopSubtitles 中的任一子标题则停止
@ -287,22 +316,38 @@ func parseAnchorDisposalProcess(rows [][]string, anchorRow int) (*DisposalProces
continue
case strings.Contains(c0, "事件研判定与处置触发") || strings.Contains(c1, "事件研判定与处置触发"):
items, next := readProjectDataTable(rows, r+1, subtitles[2:])
items, st := splitStatusFromItems(items)
out.IncidentAssessmentAndTrigger.Items = append(out.IncidentAssessmentAndTrigger.Items, items...)
if st != "" {
out.IncidentAssessmentAndTrigger.Status = st
}
r = next
continue
case strings.Contains(c0, "智能方案生成与推荐") || strings.Contains(c1, "智能方案生成与推荐"):
items, next := readProjectDataTable(rows, r+1, subtitles[3:])
items, st := splitStatusFromItems(items)
out.IntelligentPlanGeneration.Items = append(out.IntelligentPlanGeneration.Items, items...)
if st != "" {
out.IntelligentPlanGeneration.Status = st
}
r = next
continue
case strings.Contains(c0, "处置措施执行与跟踪") || strings.Contains(c1, "处置措施执行与跟踪"):
items, next := readProjectDataTable(rows, r+1, subtitles[4:])
items, st := splitStatusFromItems(items)
out.MeasureExecutionTracking.Items = append(out.MeasureExecutionTracking.Items, items...)
if st != "" {
out.MeasureExecutionTracking.Status = st
}
r = next
continue
case strings.Contains(c0, "动态调整与协同") || strings.Contains(c1, "动态调整与协同"):
items, next := readProjectDataTable(rows, r+1, []string{AnchorRescueOperationMonitor, AnchorRegionalCoordination, AnchorEffectEvaluation})
items, st := splitStatusFromItems(items)
out.DynamicAdjustmentCollab.Items = append(out.DynamicAdjustmentCollab.Items, items...)
if st != "" {
out.DynamicAdjustmentCollab.Status = st
}
return out, next
default:
r++