这两个枚举应保持为两个独立维度 AutomaticPipelineRecoveryAction`:产品和流水线接下来怎么走 这两个枚举应保持为两个独立维度AutomaticPipelineRecoveryAction产品和流水线接下来怎么走。AutomaticPipelineFailureNotificationPolicy何时、是否由通用调度器弹窗。不要让“是否弹窗”隐含在恢复动作里。比如同样是RequireReset有时需要立即弹窗有时设备已有专用告警界面只需等待复位。通知策略通用调度器行为Silent仅记录日志不更新面向操作员的失败提示不弹窗StatusOnly记录日志、失败码和产品状态不弹窗AfterSafeUnload暂不弹窗等待吹扫、下料等安全流程完成后在产品完成事件中弹窗ImmediatePopup记录状态后立即请求通用弹窗AlreadyNotified通用调度器不弹窗专用业务必须已处理提示并建议记录“已由 X 通知”审计信息恢复动作的职责则可以明确为恢复动作调度含义StopProduct当前产品不再进入后续测试阶段ContinueToPurgeAndUnload跳过测试继续吹扫并安全下料UnloadFromLoadingPosition产品尚未进入测试流程直接从上料位退料RequireReset中止自动调度保持故障现场等待人工复位核心判定可以压缩为一个明确的入口避免在各阶段散落ifstaticboolShouldShowPopup(AutomaticPipelineFailureNotificationPolicypolicy)policyisAutomaticPipelineFailureNotificationPolicy.ImmediatePopuporAutomaticPipelineFailureNotificationPolicy.AfterSafeUnload;但这里的AfterSafeUnload不能在失败当下直接调用弹窗。建议把它转换为“待通知”状态switch(handling.NotificationPolicy){caseImmediatePopup:ShowFailurePopup();break;caseAfterSafeUnload:product.PendingFailurePopuptrue;break;caseSilent:caseStatusOnly:caseAlreadyNotified:break;}在“产品已安全下料/产品流程已结束”的统一事件中处理if(product.PendingFailurePopup){ShowFailurePopup();product.PendingFailurePopupfalse;}优化计划定义统一策略对象例如AutomaticPipelineFailureHandling包含通知策略、恢复动作、失败码和失败原因。按“阶段 失败类型”建立策略表而不是让每个catch或 PLC 分支各自判断。将通知处理集中到HandleNotification将产品流转集中到ApplyRecoveryAction。以产品状态保存“待安全下料后提示”标记不能只依赖内存中的一次性回调。对不合理组合增加校验。例如AfterSafeUnload RequireReset需要业务明确说明若无法安全下料就不能等待下料后再提示。为每种策略组合测试三件事是否产生弹窗、弹窗时机、产品是否进入了正确的后续路径。建议保留现有枚举不用布尔值替代。它们表达的是业务语义而不是简单的“弹/不弹”通过集中映射和统一处理入口阅读与后续新增策略都会更稳定。