4. 工程进度管理模块设计与实现
工程进度管理模块是PMIS中数据关系最密集、时间维度最强的模块之一。它要同时回答五个问题:工程由哪些工作包构成、每项工作何时开始何时结束、哪些工作一旦延误就会拖累总工期、偏差到什么程度需要预警、现场填报的数据如何经审批后回写为正式进度。这五个问题分别对应WBS分解、甘特图、关键路径法(CPM)、进度预警和填报审批流程,它们在数据模型上是一条链,而不是五个孤立功能。
一、WBS分解:进度数据的骨架
WBS(Work Breakdown Structure,工作分解结构)是进度模块的主数据。分解原则是“逐层可交付、末级可度量”:项目层为0级,单位工程为1级,分部工程为2级,分项工程为3级,末级工作包为4级。只有末级工作包才挂接工期、工程量、资源与责任人,上级节点的时间与完成率由下级汇总计算,不允许手工填写,否则会出现“父节点完成率与子节点之和不一致”的经典数据矛盾。
WBS编码建议采用分段定长规则,例如 P01.02.03.004:P01为单位工程,02为分部,03为分项,004为工作包序号。编码一旦发布不得复用,删除节点只做逻辑作废标记,保证历史进度数据可追溯。每个工作包需维护以下关键字段:
| 字段 | 含义 | 示例 |
|---|---|---|
| wbs_code | WBS编码 | P01.02.03.004 |
| duration | 计划工期(天) | 12 |
| predecessors | 紧前工作及搭接关系 | P01.02.03.003, FS |
| weight | 权重(用于加权完成率) | 0.08 |
| owner | 责任人与班组 | 张工/钢筋一班 |
| milestone | 是否里程碑 | 否 |
搭接关系需支持四种类型:FS(完成—开始)、SS(开始—开始)、FF(完成—完成)、SF(开始—完成),并允许设置提前量(lead)或滞后量(lag)。例如“混凝土浇筑完成后养护3天再拆模”,可表达为 FS+3。
二、甘特图与关键路径法
甘特图负责“看得见时间”,CPM负责“算得出关键”。实现上,甘特图不是独立绘图组件,而是CPM计算结果的可视化投影:先由WBS与搭接关系构建网络图,再执行正推与逆推计算,得到每项工作的最早开始(ES)、最早完成(EF)、最迟开始(LS)、最迟完成(LF)和总时差(TF)。总时差为0的工作即关键工作,连成的路径即关键路径。
以某桥梁工程示例(数据为教学假设)为例:桩基施工12天,承台8天,墩身15天,盖梁10天,梁板架设6天,均按FS搭接。正推得总工期51天;逆推后各工作总时差均为0,说明该链即关键路径。若在承台与墩身之间插入“承台养护3天”的滞后量,总工期变为54天,关键路径不变但工期延长,这正是甘特图上需要高亮显示的敏感变化。
三、进度预警:把偏差变成可判断的信号
预警的核心不是“发消息”,而是定义偏差口径。工程上常用两个指标:进度偏差 SV = 已完成工作量对应计划值 − 计划工作量对应计划值;进度绩效指数 SPI = 已完成工作量对应计划值 ÷ 计划工作量对应计划值。当 SPI < 1 表示进度落后,SPI > 1 表示超前。预警分级建议按“偏差幅度 + 是否关键工作”双维度判定:
- 蓝色提示:非关键工作 SPI 在 0.95~1.00,仅记录,不推送。
- 黄色预警:SPI 在 0.90~0.95,或非关键工作消耗时差超过50%,推送责任人与专业工程师。
- 橙色预警:SPI 在 0.85~0.90,或关键工作出现负时差,推送项目经理并要求提交纠偏措施。
- 红色预警:SPI < 0.85,或关键路径累计延误超过总工期5%,触发专题会与工期索赔评估。
预警计算应放在每日定时任务中执行,而不是在页面打开时实时计算,避免大量工作包同时计算造成数据库压力。计算完成后写入预警快照表,记录触发时间、工作包、SPI、时差、等级和接收人,保证预警可追溯、可关闭、可升级。
四、进度填报与审批流程开发
现场填报的数据必须经过审批才能成为正式进度,否则会出现“班组自报完成80%,实际监理只认60%”的口径冲突。推荐流程为:班组填报 → 专业工程师初审 → 监理复核 → 项目经理确认 → 回写WBS完成率与甘特图。填报单需包含工作包编码、本期完成工程量、累计完成工程量、现场照片、异常说明;审批环节需支持退回修改并保留版本记录。
POST /api/progress/report
{
"wbsCode": "P01.02.01",
"period": "2025-06-01~2025-06-15",
"qtyDone": 320,
"qtyTotal": 800,
"photos": ["img_001.jpg", "img_002.jpg"],
"remark": "受降雨影响,实际完成低于计划"
}
// 审批通过后回写
UPDATE wbs_package
SET actual_percent = 320/800,
actual_finish = '2025-06-15',
spi = 0.40 / 0.55
WHERE wbs_code = 'P01.02.01';
回写时要注意:完成率按工程量加权,而不是按工作包个数平均;父节点完成率由子节点加权汇总;关键工作的实际完成时间一旦晚于计划完成时间,立即触发橙色预警并重新执行CPM计算,判断关键路径是否发生转移。只有把填报、审批、回写、重算、预警串成闭环,进度模块才真正具备管理价值,而不只是一个“填表工具”。