落地销售调价:按自然语言改价并单独记销售价,拉群和后台不再把调后价当成 TMS 原价。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-20 14:40:20 +08:00
co-authored by Cursor
parent e4743541f7
commit 26dd5d72a1
36 changed files with 2795 additions and 176 deletions
+26 -4
View File
@@ -92,6 +92,12 @@ class SeaTextInquiryFlow(AirTextInquiryFlow):
and not (injected_facts and injected_mode)
):
return self._capture_lost_reason(sess, text, reply)
if sess:
from agent.policy.quote_adjust_ops import try_private_adjust
adjusted = try_private_adjust(self, sess, text, reply)
if adjusted:
return adjusted
snap = extract_inquiry_snapshot(
text,
@@ -271,6 +277,7 @@ class SeaTextInquiryFlow(AirTextInquiryFlow):
self._save(sess)
return "ledger_fail"
sess.quote = quote
copy.remember_tms_quote(sess, quote)
sess.status = "已报价"
sess.phase = "wait_collab"
sess.allowed = (copy.BTN_PULL_COLLAB, copy.BTN_SKIP_COLLAB)
@@ -283,6 +290,7 @@ class SeaTextInquiryFlow(AirTextInquiryFlow):
first_or_same=first,
history_work_order_no=history_wo,
status="已报价",
business_line=sess.business_line or "SEA",
)
return "wait_collab"
@@ -347,35 +355,44 @@ class SeaTextInquiryFlow(AirTextInquiryFlow):
first_or_same: str = "first",
history_work_order_no: str = "",
status: str = "已报价",
business_line: str = "",
) -> None:
"""
先发完整价格明细文本,再发带按钮的卡。
企微只发卡时,引用条超长会被截断;文本不受限。
"""
line = (business_line or getattr(self, "business_line", "") or "SEA").upper()
if line not in {"SEA", "LAND"}:
line = "SEA"
src = dict(quote or {})
src["business_line"] = line
reply(
copy.sea_quote_detail_text(
work_order_no=work_order_no,
quote=quote,
quote=src,
first_or_same=first_or_same,
history_work_order_no=history_work_order_no,
status=status,
business_line=line,
)
)
reply(
copy.sea_tms_hit_card(
work_order_no=work_order_no,
quote=quote,
quote=src,
first_or_same=first_or_same,
history_work_order_no=history_work_order_no,
status=status,
business_line=line,
),
copy.sea_tms_hit_wecom_payload(
work_order_no=work_order_no,
quote=quote,
quote=src,
first_or_same=first_or_same,
history_work_order_no=history_work_order_no,
status=status,
business_line=line,
),
)
@@ -388,6 +405,7 @@ class SeaTextInquiryFlow(AirTextInquiryFlow):
first_or_same=sess.first_or_same,
history_work_order_no=sess.history_work_order_no,
status=sess.status or "已报价",
business_line=sess.business_line or "SEA",
)
return "wait_collab"
if sess.business_line == "SEA" and sess.phase == "tms_miss":
@@ -541,6 +559,8 @@ class SeaTextInquiryFlow(AirTextInquiryFlow):
allowed_keys=keys,
)
ticket_view = ticket if isinstance(ticket, dict) else {}
tms = copy.resolve_tms_quote(sess, ticket_view)
brief = copy.sea_group_brief(
work_order_no=no,
facts=sess.facts,
@@ -548,7 +568,9 @@ class SeaTextInquiryFlow(AirTextInquiryFlow):
collab_facts=sess.collab_facts,
sales_name=sales_name,
product_names=product_names,
has_price=bool(sess.quote and sess.status == "已报价"),
has_price=bool(tms or sess.quote),
tms_quote=tms,
product_quote=sess.quote if copy.quote_is_product(sess.quote) else None,
transport_mode=self._group_brief_mode(sess),
)
client.send_group(chat_id=chat_id, content=brief)