员工岗位可重新启用;调价认空运航线;会话存档跳号补拉;陆运报价按车型列回填

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
linmianxun
2026-10-28 19:48:47 +08:00
co-authored by Cursor
parent 2b528758b4
commit 56ba8e93b5
62 changed files with 2960 additions and 793 deletions
@@ -2264,6 +2264,26 @@ class AirTextInquiryFlow:
)
return phase
def abandon_orphan_lost_wait(self, sess: FlowSession) -> None:
"""
主账已无此单,但仍停在「等未成交原因」:丢掉书签与进程内索引。
清数后常见:Redis 还挂着 WO,下一句永远 patch 失败,新询价也被抢走。
"""
sid = (sess.sender_id or "").strip()
no = (sess.work_order_no or "").strip()
if sid:
with self._lock:
self._by_sender.pop(sid, None)
self._delete_bookmark(sid)
if no:
with self._lock:
self._by_ticket.pop(no, None)
upper = no.upper()
for key in list(self._by_ticket.keys()):
if (key or "").upper() == upper:
self._by_ticket.pop(key, None)
def _capture_lost_reason(self, sess: FlowSession, text: str, reply: ReplyFn) -> str:
"""私聊未成交后收下原因,不再追问。"""
from agent.policy.deal_outcome import capture_lost_reason
@@ -2274,6 +2294,16 @@ class AirTextInquiryFlow:
reason=text,
)
if not result.get("ok"):
err = str(result.get("error") or "").strip()
# 清数后主账无单:不能再死循环「请再发一句」,否则挡死新询价。
if err in {"ticket_not_found", "not_found"}:
no = (sess.work_order_no or "").strip()
self.abandon_orphan_lost_wait(sess)
reply(
f"工单 {no or ''} 已不在系统中(可能已清数),无需再补未成交原因。"
"请直接发起新询价。"
)
return "orphan_cleared"
reply("未成交原因没有记下,请再发一句。")
return "wait_lost_reason"
sess.phase = "done"