完善报价单填表与币种回填,并补齐账号末次登录、角色按钮权限与陆运全线匹配。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
linmianxun
2026-09-19 22:03:45 +08:00
co-authored by Cursor
parent 1a2e1d6cb2
commit e4743541f7
25 changed files with 2262 additions and 163 deletions
+42 -3
View File
@@ -179,15 +179,54 @@ class TestSheetMapParse(unittest.TestCase):
"routeRegions": [],
"mappingGaps": [],
}
# 无清单:保守旧优先
merged = merge_mapping_prefer_existing(old, new)
self.assertEqual(merged["fields"]["quote_no"], "S!B3") # 旧优先
self.assertEqual(merged["fields"]["pol"], "S!B5") # 旧保留
self.assertEqual(merged["fields"]["pod"], "S!B6") # 新补缺
self.assertEqual(merged["fields"]["quote_no"], "S!B3")
self.assertEqual(merged["fields"]["pol"], "S!B5")
self.assertEqual(merged["fields"]["pod"], "S!B6")
ids = [r["id"] for r in merged["feeRegions"]]
self.assertEqual(ids[0], "origin_charges")
self.assertEqual(merged["feeRegions"][0]["title"], "旧始发港")
self.assertIn("ocean_freight", ids)
def test_merge_replaces_misaligned_quote_no(self) -> None:
"""旧 quote_no 落在单选 B3 → 改用新坐标 F3。"""
from agent.llm.mode_sheet_map import merge_mapping_prefer_existing
inventory = [
"S!A3 | RFQ No: | A3:A3 | -",
"S!B3 | ○ Port to Port / 其它,3工作天回复 | B3:E3 | -",
"S!F3 | | F3:G3 | -",
]
old = {"fields": {"quote_no": "S!B3"}, "feeRegions": [], "routeRegions": []}
new = {"fields": {"quote_no": "S!F3"}, "feeRegions": [], "routeRegions": []}
merged = merge_mapping_prefer_existing(old, new, cell_inventory=inventory)
self.assertEqual(merged["fields"]["quote_no"], "S!F3")
def test_merge_keeps_aligned_quote_no_when_ai_drifts(self) -> None:
"""旧已在 RFQ 旁空格、新一轮漂到远处 → 仍保留旧坐标。"""
from agent.llm.mode_sheet_map import merge_mapping_prefer_existing
inventory = [
"S!A3 | RFQ No: | - | -",
"S!B3 | | - | -",
]
old = {"fields": {"quote_no": "S!B3"}, "feeRegions": [], "routeRegions": []}
new = {"fields": {"quote_no": "S!Z99"}, "feeRegions": [], "routeRegions": []}
merged = merge_mapping_prefer_existing(old, new, cell_inventory=inventory)
self.assertEqual(merged["fields"]["quote_no"], "S!B3")
def test_b3_radio_not_aligned(self) -> None:
from agent.llm.mode_sheet_map import _field_mapping_still_aligned
inventory = [
"S!A3 | RFQ No: | - | -",
"S!B3 | ○ Port to Port | - | -",
"S!F3 | WO202609190002 | - | -",
]
self.assertFalse(_field_mapping_still_aligned("quote_no", "S!B3", inventory))
self.assertTrue(_field_mapping_still_aligned("quote_no", "S!F3", inventory))
def test_invoke_retries_when_gaps(self) -> None:
calls: list[str] = []