fix 交通事故应急处理缺少部分数据
This commit is contained in:
parent
9ac5c63b1c
commit
eaa8e3bd17
|
|
@ -0,0 +1 @@
|
|||
*.sh text eol=lf
|
||||
|
|
@ -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}"
|
||||
|
|
@ -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[]`:效果评估与态势研判(项目/数据)
|
||||
|
|
|
|||
|
|
@ -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++
|
||||
|
|
|
|||
Loading…
Reference in New Issue