fix(review/flow): 章节退回联动作废标书(置rejected重派合成)+取消旧交付确认待办+G段cancelled待办重发——修甘肃实测bug:章节退回重写后文档停passed,新正文永远进不了交付物,待办僵尸指向旧版

This commit is contained in:
yumoqing 2026-09-16 17:24:48 +08:00
parent 1da6be3687
commit bede609b9e
2 changed files with 23 additions and 1 deletions

View File

@ -1386,7 +1386,9 @@ async def reconcile_project(sor, project_id, project_name=""):
await sor.sqlExe("COMMIT", {})
return acts + ["trimmed: delivery_confirm 已裁剪,标书直接置 delivered项目完成"]
ht = await find_human_task(sor, project_id, HT_DELIVERY_CONFIRM)
if not ht:
# cancelled/rejected 的旧待办视为不存在2026-09-16章节退回重写时联动作废
# 过旧待办,重合成后必须重发新版确认待办,否则卡 waiting 死锁)
if not ht or ht.get("status") in ("cancelled", "rejected"):
hid = await create_human_task(
sor, project_id, HT_DELIVERY_CONFIRM, "标书评分通过,请确认交付",
"标书已通过评分门限,请人工复核用印/密封/份数/递交后确认交付。")

View File

@ -163,6 +163,26 @@ async def review_chapter(chapter_id, score, max_score="", comments="", detail=""
who=who, agent_id=agent_id,
detail="%.2f/%.2f revise=%d" % (sc, ms, revise))
# ── 标书状态联动作废2026-09-16 甘肃项目实测 bug──
# 章节退回重写时,若 bid_documents 已合成且停在 draft/reviewing/passed
# 对账器 E 段只对「无文档 or 文档 rejected」派合成任务 → 重写后的新正文
# 永远进不了交付物(甘肃 bid_v1 即此状:章节被退回、文档仍 passed、
# 待办仍指向旧版)。退回即把当前标书置 rejected全章 approved 后
# 自动重派合成prev_version 递增出新版),形成完整闭环。
try:
await sor.sqlExe(
"UPDATE bid_documents SET status='rejected', updated_at=NOW() "
"WHERE project_id=${pid}$ AND status IN ('draft','reviewing','passed')",
{"pid": pid})
# 交付确认待办同步取消(指向旧版标书,留着=僵尸待办误导用户确认旧版)
await sor.sqlExe(
"UPDATE pipeline_human_tasks SET status='cancelled', updated_at=NOW() "
"WHERE project_id=${pid}$ AND task_type=${tt}$ AND status='pending'",
{"pid": pid, "tt": "bid_delivery_confirm"})
await sor.sqlExe("COMMIT", {})
except Exception as e: # noqa: BLE001
logger.warning("章节退回联动标书作废失败 pid=%s: %s", pid, e)
if revise > th["max_revise"]:
# 2026-09-16 标题级去重:多章各自达上限各发一条(旧代码类型级 dedup
# 第 2~N 章升级信号被第一条 general pending 吞掉——甘肃项目 1/2.1.5/2.2