陆运选项不全时改为复制填空清单,方便销售按编号回填。

停发填写样例图,同群只跟当前工单,重量体积统一为 KG/CBM。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-23 17:10:13 +08:00
co-authored by Cursor
parent 2334524bb8
commit 378bb892b3
33 changed files with 1204 additions and 265 deletions
+76 -13
View File
@@ -96,11 +96,13 @@ class AirTextInquiryTests(unittest.TestCase):
self.assertIn("目的地:克拉克", text)
self.assertIn("品名:茶叶", text)
self.assertIn("件数:10件", text)
self.assertIn("待补充:", text)
self.assertIn("重量:(如:100KGS)", text)
self.assertIn("体积:(如:2CBM)", text)
self.assertIn("包装类型:(如:托盘)", text)
self.assertIn("货源地(非必填)", text)
self.assertIn(copy.CLARIFY_PASTE_HINT, text)
self.assertNotIn("待补充:", text)
self.assertIn("1.重量(KG)(必填):\n(如:100)", text)
self.assertIn("2.体积(CBM)(必填):\n(如:2)", text)
self.assertIn("3.包装类型(必填):\n(如:托盘、散货)", text)
self.assertNotIn("重量:(如:", text)
self.assertIn("货源地(非必填):\n(如:东莞)", text)
def test_inquiry_card_matches_sales_format(self) -> None:
text = copy.inquiry_card(
@@ -128,8 +130,8 @@ class AirTextInquiryTests(unittest.TestCase):
"目的地:克拉克",
"品名:茶叶",
"件数:10件",
"重量:1",
"体积:8",
"重量(KG):1",
"体积(CBM):8",
"包装类型:托盘",
"报价日期:2026-09-12",
"工单已创建,正在查询TMS报价。",
@@ -199,7 +201,33 @@ class AirTextInquiryTests(unittest.TestCase):
injected_mode="",
)
self.assertEqual(phase, "need_mode")
self.assertIn("运输方式", self.replies[-1])
self.assertIn(copy.ASK_TRANSPORT, self.replies[-1])
self.assertIn("1.陆运", self.replies[-1])
self.assertIn("2.海运", self.replies[-1])
self.assertIn("3.空运", self.replies[-1])
def test_missing_mode_accepts_number_or_word(self) -> None:
"""未定运输方式时,回 3 或「空运」都走空运。"""
self.flow.on_text(
sender_id="u_mode_num",
text="帮我看看价格",
reply=self._reply,
injected_facts={},
injected_mode="",
)
phase = self.flow.on_text(sender_id="u_mode_num", text="3", reply=self._reply)
self.assertNotEqual(phase, "need_mode")
self.assertEqual(self.flow.session_of("u_mode_num").business_line, "AIR")
self.flow.on_text(
sender_id="u_mode_word",
text="帮我看看价格",
reply=self._reply,
injected_facts={},
injected_mode="",
)
phase = self.flow.on_text(sender_id="u_mode_word", text="空运", reply=self._reply)
self.assertNotEqual(phase, "need_mode")
self.assertEqual(self.flow.session_of("u_mode_word").business_line, "AIR")
def test_pack_bulk_cargo_accepted_as_user_said(self) -> None:
facts = dict(COMPLETE_AIR)
@@ -251,13 +279,48 @@ class AirTextInquiryTests(unittest.TestCase):
self.assertIn("请确认并补充以下信息", last)
self.assertIn("运输方式:空运", last)
self.assertIn("起运地:上海", last)
self.assertIn("待补充:", last)
self.assertIn(copy.CLARIFY_PASTE_HINT, last)
self.assertIn("目的地", last)
self.assertIn("件数", last)
self.assertIn("如:", last)
self.assertIn("报价日期:", last)
self.assertNotIn("报价日期:(如", last)
def test_clarify_paste_reply_fills_missing_required(self) -> None:
"""销售复制清单只填冒号后的值,空着的包装类型继续补问。"""
phase = self.flow.on_text(
sender_id="paste1",
text="空运询价",
reply=self._reply,
injected_facts={
"起运港": "南京",
"目的港": "吉隆坡",
"品名": "茶叶",
"报价日期": "2026-09-17",
},
injected_mode="AIR",
)
self.assertEqual(phase, "clarify")
phase = self.flow.on_text(
sender_id="paste1",
text=(
"1.件数(必填):10\n"
"(如:10)\n"
"2.重量(KG)(必填):10\n"
"(如:100)\n"
"3.体积(CBM)(必填):10\n"
"(如:2)\n"
"4.包装类型(必填):\n"
"(如:托盘、散货)"
),
reply=self._reply,
)
self.assertEqual(phase, "clarify")
last = self.replies[-1]
self.assertIn("件数:10件", last)
self.assertIn("包装类型(必填)", last)
self.assertNotIn("包装类型:托盘、散货", last)
def test_complete_air_hit_then_skip_adopt_excel_deal(self) -> None:
phase = self._on_text(
sender_id="u1",
@@ -272,7 +335,7 @@ class AirTextInquiryTests(unittest.TestCase):
self.assertIn("运输方式:空运", joined)
self.assertIn("起运地:上海", joined)
self.assertIn("目的地:洛杉矶", joined)
self.assertIn("重量:", joined)
self.assertIn("重量(KG):", joined)
self.assertIn("正在查询TMS报价", joined)
self.assertNotIn("【询价卡片】", joined)
self.assertNotIn("[test]", joined)
@@ -400,8 +463,8 @@ class AirTextInquiryTests(unittest.TestCase):
joined = "\n".join(self.replies)
self.assertIn("起运地:南京", joined)
self.assertIn("目的地:吉隆坡", joined)
self.assertIn("重量:", joined)
self.assertIn("体积:", joined)
self.assertIn("重量(KG):", joined)
self.assertIn("体积(CBM):", joined)
self.assertIn("包装类型:散货", joined)
self.assertIn("报价日期:2026-09-16", joined)
self.assertNotIn("重量(KG)", joined)
@@ -985,7 +1048,7 @@ class AirTextInquiryTests(unittest.TestCase):
self.assertIn("【WO202609140001报价方案】", text)
self.assertIn("工单号:WO202609140001", text)
self.assertIn("起运地:上海", text)
self.assertIn("体积:2.5", text)
self.assertIn("体积(CBM):2.5", text)
self.assertIn("空运费:USD 1,200", text)
self.assertNotIn("时效", text)
self.assertIn("报价有效期:2026-09-20", text)