确定运输方式前的多句询价带到所选方式并按该方式抽字段;成交已定后放舱不再推跟进,未成交原因不再被当成新询价。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-03 09:54:33 +08:00
co-authored by Cursor
parent d989154485
commit 0a14b4cc15
18 changed files with 620 additions and 28 deletions
@@ -230,6 +230,41 @@ class ContinueTicketTests(unittest.TestCase):
self.assertEqual(phase, "wait_deal")
self.assertFalse(any("成交" in x or copy.BTN_DEAL in x for x in replies))
def test_resume_spoken_deal_closes(self) -> None:
"""报价文件已出后,原话写工单号加已成交,要入账并回复,不能没反应。"""
ledger = MemoryLedger()
created = ledger.create_ticket(
sender_id="u6b", business_line="AIR", facts=COMPLETE_AIR
)
wo = created["work_order_no"]
ledger.upsert_quote(
work_order_no=wo,
quote={"total": "USD 1", "eta": "-", "valid_until": "-"},
to_status="已报价",
)
ledger.render_quote(
work_order_no=wo,
business_line="AIR",
facts=COMPLETE_AIR,
quote={"total": "USD 1"},
)
flow = AirTextInquiryFlow(ledger)
replies: list[str] = []
def reply(text: str, extra=None) -> None:
replies.append(text)
_ = extra
phase = flow.resume_historical(
sender_id="u6b",
work_order_no=wo,
reply=reply,
text=f"{wo}已成交",
)
self.assertEqual(phase, "done")
self.assertTrue(any("已记录为「已成交」" in x for x in replies))
self.assertIn(wo, "\n".join(replies))
def test_resume_missing_wo_asks(self) -> None:
flow = AirTextInquiryFlow(MemoryLedger())
replies: list[str] = []