重启后仍能跳过协同出方案,未成交可同一句带原因;海陆有价卡改为直接生成报价单。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-23 18:45:28 +08:00
co-authored by Cursor
parent 378bb892b3
commit 84207bb4e5
18 changed files with 414 additions and 32 deletions
@@ -659,5 +659,57 @@ class LandLostReasonTests(unittest.TestCase):
self.assertTrue(any(t == "已记下未成交原因:价格高。" for t in replies))
class LandSkipAfterRestartTests(unittest.TestCase):
def test_skip_collab_after_restart_from_ledger(self) -> None:
"""
陆运已报价主账也会收成 wait_adopt。进程无书签时点「不需要协同」仍须出方案卡。
"""
ledger = MemoryLedger()
facts = {
"起运港": "广州",
"目的港": "深圳",
"品名": "衣服",
"体积": "100CBM",
"毛重": "50kg",
"运输类型": "国内运输拼车",
"线路类别": "国内长途/零担",
"运输分类": "急件",
}
created = ledger.create_ticket(
sender_id="u-land-skip", business_line="LAND", facts=facts
)
wo = created["work_order_no"]
ledger.upsert_quote(
work_order_no=wo,
quote={"total": "CNY 800", "source_label": "TMS 标准报价"},
to_status="已报价",
)
view = ledger.get_for_agent(work_order_no=wo, sender_id="u-land-skip")
self.assertEqual(view.get("wait_phase"), "wait_adopt")
restarted = LandTextInquiryFlow(ledger)
replies: list[str] = []
def reply(text: str, extra=None) -> str:
replies.append(text)
_ = extra
return ""
phase = restarted.on_button(
sender_id="u-land-skip",
action=copy.BTN_SKIP_COLLAB,
reply=reply,
card_meta={
"event_key": f"skip_collab:{wo}",
"task_id": f"price-{wo}-land",
"response_code": "rc-land-skip",
},
)
self.assertEqual(phase, "wait_adopt")
joined = "\n".join(replies)
self.assertIn("已跳过内部协同", joined)
self.assertIn(f"{wo}报价方案", joined)
if __name__ == "__main__":
unittest.main()