fix(flow): 上游QC过滤须无条件执行且建任务留在无编排任务分支内——上一版结构错位致编排任务在办时每15秒重复建(实测2分钟堆9个)

This commit is contained in:
yumoqing 2026-09-04 16:28:29 +08:00
parent 7733ff31cf
commit 442de85cc3

View File

@ -582,15 +582,15 @@ async def reconcile_project(sor, project_id, project_name=""):
# (评分项 →(资质 ∥ 要求+骨架)→ 成本收益),编排意图归 PM; # (评分项 →(资质 ∥ 要求+骨架)→ 成本收益),编排意图归 PM;
# 依赖门禁由代码强制(dispatch_analysis_dim 校验上游 QC 全过)。 # 依赖门禁由代码强制(dispatch_analysis_dim 校验上游 QC 全过)。
# QC 退回重做仍走上面 qc_imp 分支,不受编排影响。 # QC 退回重做仍走上面 qc_imp 分支,不受编排影响。
if first_run_pending:
if await _open_orch_tasks(sor, project_id) > 0:
acts.append("waiting: PM 解析编排任务在办")
else:
# 2026-09-04 修复(中电新项目实测):上游 QC 未过的维度是合法等待, # 2026-09-04 修复(中电新项目实测):上游 QC 未过的维度是合法等待,
# 不是「掉链」——PM 即使接到编排任务也派发不了(dispatch_analysis_dim # 不是「掉链」——PM 即使接到编排任务也派发不了(dispatch_analysis_dim
# 依赖门禁拒绝)。把这类维度留在 pending 会让编排任务空转(无可派发维度 # 依赖门禁拒绝)。把这类维度留在 pending 会让编排任务空转(无可派发维度
# 即完成),空转轮次计入 orch_done → MAX_ORCH_ATTEMPT 轮后误抛 # 即完成),空转轮次计入 orch_done → MAX_ORCH_ATTEMPT 轮后误抛
# 「PM 解析编排掉链」人工待办。只有真正可派发的维度才驱动编排/掉链计数。 # 「PM 解析编排掉链」人工待办。只有真正可派发的维度才驱动编排/掉链计数。
# 注意:过滤必须无条件执行(放在「编排任务在办」判定之前)——上一版把
# 过滤塞进 else 分支、创建挪出分支外,导致编排任务在办时仍用未过滤列表
# 每 15 秒重复建任务(实测 2 分钟堆 9 个)。
if first_run_pending:
qc_passed = await _qc_passed_types(sor, project_id) qc_passed = await _qc_passed_types(sor, project_id)
dispatchable, waiting_up = [], [] dispatchable, waiting_up = [], []
for d, lb in first_run_pending: for d, lb in first_run_pending:
@ -603,6 +603,9 @@ async def reconcile_project(sor, project_id, project_name=""):
% "、".join(lb for _, lb in waiting_up)) % "、".join(lb for _, lb in waiting_up))
first_run_pending = dispatchable first_run_pending = dispatchable
if first_run_pending: if first_run_pending:
if await _open_orch_tasks(sor, project_id) > 0:
acts.append("waiting: PM 解析编排任务在办")
else:
_ft2 = _ft or await _latest_tender_file_ts(sor, project_id) _ft2 = _ft or await _latest_tender_file_ts(sor, project_id)
orch_done = await _orch_done_count(sor, project_id, since=_ft2 or '') orch_done = await _orch_done_count(sor, project_id, since=_ft2 or '')
if orch_done >= MAX_ORCH_ATTEMPT: if orch_done >= MAX_ORCH_ATTEMPT: