机器人回复补调用编码;集拼报价条带字段写到下一行,业务员落中文名。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -319,7 +319,12 @@ def apply_group_adjust(
|
||||
flow=flow,
|
||||
chat_id=room,
|
||||
work_order_no=no,
|
||||
facts=_facts_for_fill(facts, collab, business_line=line),
|
||||
facts=_facts_for_fill(
|
||||
facts,
|
||||
collab,
|
||||
business_line=line,
|
||||
sales_name=str(view.get("sales_name") or view.get("salesName") or ""),
|
||||
),
|
||||
quote=result.quote,
|
||||
sales_id=sender_id,
|
||||
business_line=line,
|
||||
|
||||
@@ -232,6 +232,19 @@ def overlay_labeled_facts(
|
||||
return {"filepath": str(tmp), "file_b64": out_b64}
|
||||
|
||||
|
||||
def _band_value_goes_below(ws, label_cell) -> bool:
|
||||
"""同一行凑齐业务员、客户名称、始发地,就是集拼询价条带。"""
|
||||
text = str(label_cell.value or "").replace(" ", "")
|
||||
if not any(key in text for key in ("客户名称", "业务员", "始发地", "货物类型")):
|
||||
return False
|
||||
hits = 0
|
||||
for cell in ws[label_cell.row]:
|
||||
compact = str(cell.value or "").replace(" ", "").replace(":", "").replace(":", "")
|
||||
if compact in {"业务员", "客户名称", "始发地", "货物类型", "条款", "发货日期"}:
|
||||
hits += 1
|
||||
return hits >= 3
|
||||
|
||||
|
||||
def _match_collab_label(text: str) -> tuple[str, ...] | None:
|
||||
raw = (text or "").replace(":", ":").strip()
|
||||
for marker, keys in _COLLAB_LABEL_MARKERS:
|
||||
@@ -241,7 +254,23 @@ def _match_collab_label(text: str) -> tuple[str, ...] | None:
|
||||
|
||||
|
||||
def _label_value_cell(ws, label_cell):
|
||||
"""标签右侧格子;合并标签则从合并区右边开始。"""
|
||||
"""标签右侧格子;合并标签则从合并区右边开始。
|
||||
|
||||
跨境集拼蓝条是「业务员 | 客户名称 | 始发地」,值在下一行。
|
||||
写到右侧会把客户名称填进「始发地」表头。
|
||||
"""
|
||||
if _band_value_goes_below(ws, label_cell):
|
||||
col = label_cell.column
|
||||
merged = getattr(ws, "merged_cells", None)
|
||||
if merged is not None:
|
||||
for rng in merged.ranges:
|
||||
if (
|
||||
rng.min_row <= label_cell.row <= rng.max_row
|
||||
and rng.min_col <= label_cell.column <= rng.max_col
|
||||
):
|
||||
col = rng.min_col
|
||||
break
|
||||
return ws.cell(row=label_cell.row + 1, column=col)
|
||||
row_idx = label_cell.row
|
||||
start_col = label_cell.column + 1
|
||||
merged = getattr(ws, "merged_cells", None)
|
||||
|
||||
@@ -678,7 +678,12 @@ def send_filled_sheet(
|
||||
flow=flow,
|
||||
chat_id=room,
|
||||
work_order_no=no,
|
||||
facts=_facts_for_fill(facts, collab, business_line=line or "SEA"),
|
||||
facts=_facts_for_fill(
|
||||
facts,
|
||||
collab,
|
||||
business_line=line or "SEA",
|
||||
sales_name=str(view.get("sales_name") or view.get("salesName") or ""),
|
||||
),
|
||||
quote=quote,
|
||||
sales_id=str(
|
||||
(sess.sender_id if sess else "")
|
||||
@@ -724,6 +729,7 @@ def _facts_for_fill(
|
||||
facts: dict[str, str],
|
||||
collab: dict[str, str],
|
||||
business_line: str = "SEA",
|
||||
sales_name: str = "",
|
||||
) -> dict[str, str]:
|
||||
"""
|
||||
询价字段 + 本单协同项。中文键和填表英文码一起带上。
|
||||
@@ -744,6 +750,11 @@ def _facts_for_fill(
|
||||
if oem:
|
||||
merged["oil_elec_mag"] = oem
|
||||
merged["是否含油,电,磁"] = oem
|
||||
# 报价单业务员写中文名。企微账号留给主账去对员工表,不要盖掉已有姓名。
|
||||
name = (sales_name or "").strip()
|
||||
if name and any("\u4e00" <= ch <= "\u9fff" for ch in name):
|
||||
merged["sales_name"] = name
|
||||
merged["业务员"] = name
|
||||
return merged
|
||||
|
||||
|
||||
@@ -1056,7 +1067,12 @@ def _persist_quote_sheet(
|
||||
result = renderer(
|
||||
work_order_no=no,
|
||||
business_line=line,
|
||||
facts=_facts_for_fill(facts, collab, business_line=line or "SEA"),
|
||||
facts=_facts_for_fill(
|
||||
facts,
|
||||
collab,
|
||||
business_line=line or "SEA",
|
||||
sales_name=str(view.get("sales_name") or view.get("salesName") or ""),
|
||||
),
|
||||
quote=quote,
|
||||
format="xlsx",
|
||||
sales_wecom_id=str(
|
||||
|
||||
@@ -16,8 +16,6 @@ from agent.redis_coord.runtime import get_redis_runtime
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
_TTL_SEC = 24 * 3600
|
||||
|
||||
|
||||
class BookmarkStore(Protocol):
|
||||
"""单测可注入;生产走 Redis。"""
|
||||
@@ -72,10 +70,10 @@ def save_flow_bookmark(
|
||||
return
|
||||
try:
|
||||
client = get_redis_runtime().client
|
||||
# 核对卡不设过期。确定前一直留着,离开核对或建单后由 delete 清掉。
|
||||
client.raw.set(
|
||||
client.key(FLOW_BOOKMARK, name, sid),
|
||||
json.dumps(payload, ensure_ascii=False),
|
||||
ex=_TTL_SEC,
|
||||
)
|
||||
except Exception:
|
||||
logger.exception("写询价书签失败 kind=%s sender=%s", name, sid)
|
||||
|
||||
@@ -16,8 +16,6 @@ from agent.redis_coord.runtime import get_redis_runtime
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
_TTL_SEC = 24 * 3600
|
||||
|
||||
|
||||
def save_pending_land_confirm(
|
||||
sender_id: str,
|
||||
@@ -42,10 +40,10 @@ def save_pending_land_confirm(
|
||||
}
|
||||
try:
|
||||
client = get_redis_runtime().client
|
||||
# 核对卡不设过期。建单成功后由 clear 清掉。
|
||||
client.raw.set(
|
||||
client.key(PENDING_LAND_CONFIRM, sid),
|
||||
json.dumps(payload, ensure_ascii=False),
|
||||
ex=_TTL_SEC,
|
||||
)
|
||||
logger.info(
|
||||
"land.pending saved sender=%s phase=%s wo=%s keys=%s",
|
||||
@@ -59,7 +57,7 @@ def save_pending_land_confirm(
|
||||
|
||||
|
||||
def load_pending_land_confirm(sender_id: str) -> dict[str, Any]:
|
||||
"""取出待确定陆运字段。没有或过期返回空。"""
|
||||
"""取出待确定陆运字段。没有则空。"""
|
||||
sid = (sender_id or "").strip()
|
||||
if not sid:
|
||||
return {}
|
||||
|
||||
Reference in New Issue
Block a user