空运人工价锁舱现拉补全舱位并拦清缺参;成交/报价填表与工单陆运费率展示同步收紧。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1780,8 +1780,12 @@ class AirTextInquiryFlow:
|
||||
extra,
|
||||
)
|
||||
from agent.redis_coord.quote_file import mark_quote_file_ready
|
||||
from agent.policy.deal_outcome import ensure_ticket_quoted
|
||||
|
||||
mark_quote_file_ready(sess.work_order_no)
|
||||
# 文件已出就必须让主账离开「询价中」,否则成交三态会被六态拒绝。
|
||||
ensure_ticket_quoted(self._ledger, work_order_no=sess.work_order_no)
|
||||
sess.status = sess.status or "已报价"
|
||||
sess.phase = "wait_deal"
|
||||
sess.allowed = (copy.BTN_DEAL, copy.BTN_LOST, copy.BTN_NEGOTIATE)
|
||||
sess.wait_version += 1
|
||||
@@ -1926,20 +1930,37 @@ class AirTextInquiryFlow:
|
||||
"""点成交/未成交/协商中:先整卡置灰,再入主账。未成交同一句带原因则一次记完。"""
|
||||
self._grey_clicked_card(reply, card_meta, replace_name=status)
|
||||
from agent.policy.deal_outcome import finish_deal_outcome, harvest_inline_lost_reason
|
||||
from agent.policy.sea_group_ops import _quote_fee_rows
|
||||
|
||||
quote = dict(sess.quote or {})
|
||||
status_now = str(sess.status or "").strip()
|
||||
usable_total = str(quote.get("total") or "").strip()
|
||||
if usable_total in {"", "-"}:
|
||||
usable_total = ""
|
||||
if not (
|
||||
usable_total
|
||||
or _quote_fee_rows(quote)
|
||||
or status_now in {"已报价", "协商中"}
|
||||
):
|
||||
reply(copy.deal_fail_no_quote(work_order_no=sess.work_order_no))
|
||||
return "deal_need_quote"
|
||||
inline = harvest_inline_lost_reason(source_text) if status == "未成交" else ""
|
||||
result = finish_deal_outcome(
|
||||
ledger=self._ledger,
|
||||
work_order_no=sess.work_order_no,
|
||||
outcome=status,
|
||||
facts=sess.facts,
|
||||
quote=sess.quote,
|
||||
quote=quote,
|
||||
business_line=sess.business_line,
|
||||
sales_name=sess.invited_sales_name,
|
||||
lost_reason=inline,
|
||||
)
|
||||
if not result.get("ok"):
|
||||
reply("主账状态更新失败,成交结果未入账。")
|
||||
err = str(result.get("error") or "")
|
||||
if (not usable_total and not _quote_fee_rows(quote)) or "询价中" in err:
|
||||
reply(copy.deal_fail_no_quote(work_order_no=sess.work_order_no))
|
||||
else:
|
||||
reply("主账状态更新失败,成交结果未入账。")
|
||||
return "ledger_fail"
|
||||
phase = str(result.get("phase") or "done")
|
||||
sess.status = status
|
||||
@@ -1976,7 +1997,12 @@ class AirTextInquiryFlow:
|
||||
sess.phase = "done"
|
||||
sess.allowed = ()
|
||||
self._save(sess)
|
||||
reply(copy.lost_reason_ack(str(result.get("lost_reason") or text)))
|
||||
reply(
|
||||
copy.lost_reason_ack(
|
||||
str(result.get("lost_reason") or text),
|
||||
work_order_no=sess.work_order_no,
|
||||
)
|
||||
)
|
||||
return "done"
|
||||
|
||||
def mark_wait_deal(self, sender_id: str, work_order_no: str) -> None:
|
||||
@@ -1990,8 +2016,10 @@ class AirTextInquiryFlow:
|
||||
if not no:
|
||||
return
|
||||
from agent.redis_coord.quote_file import mark_quote_file_ready
|
||||
from agent.policy.deal_outcome import ensure_ticket_quoted
|
||||
|
||||
mark_quote_file_ready(no)
|
||||
ensure_ticket_quoted(self._ledger, work_order_no=no)
|
||||
if not sender_id:
|
||||
return
|
||||
with self._lock:
|
||||
|
||||
Reference in New Issue
Block a user