运输类型/内件属性改为从API获取:删除field_mapping映射和默认值,界面新增运输类型下拉框(transmode数组填充),结果表格增加运输类型列
This commit is contained in:
@@ -23,8 +23,6 @@
|
|||||||
"证件类型": "身份证",
|
"证件类型": "身份证",
|
||||||
"保价金额": "",
|
"保价金额": "",
|
||||||
"代收货款": "",
|
"代收货款": "",
|
||||||
"运输类型": "基本",
|
|
||||||
"内件属性": "其他",
|
|
||||||
"件数": "1",
|
"件数": "1",
|
||||||
"保价标志": "不保价",
|
"保价标志": "不保价",
|
||||||
"回单标志": "无回单",
|
"回单标志": "无回单",
|
||||||
|
|||||||
@@ -315,6 +315,8 @@ class PickupEngine:
|
|||||||
self._sender_realname: dict = {}
|
self._sender_realname: dict = {}
|
||||||
# 地址匹配结果
|
# 地址匹配结果
|
||||||
self._address_match: dict = {}
|
self._address_match: dict = {}
|
||||||
|
# 运输类型(由 UI 下拉框选择,来自 transmode 数组的 propertyCode)
|
||||||
|
self._transport_type: str = ""
|
||||||
|
|
||||||
def _ulog(self, msg: str) -> None:
|
def _ulog(self, msg: str) -> None:
|
||||||
_lu(msg)
|
_lu(msg)
|
||||||
@@ -490,7 +492,7 @@ class PickupEngine:
|
|||||||
start_time = datetime.now()
|
start_time = datetime.now()
|
||||||
result = {"status": "失败", "message": "", "postage": "", "time": "", "寄达地": "",
|
result = {"status": "失败", "message": "", "postage": "", "time": "", "寄达地": "",
|
||||||
"单号": row.get("单号", "").strip(), "重量": row.get("重量", "").strip(),
|
"单号": row.get("单号", "").strip(), "重量": row.get("重量", "").strip(),
|
||||||
"产品": "", "客户": "", "寄达地区划代码": "", "寄件人姓名": "", "寄件地址": ""}
|
"产品": "", "客户": "", "运输类型": "", "寄达地区划代码": "", "寄件人姓名": "", "寄件地址": ""}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await self._check_pause()
|
await self._check_pause()
|
||||||
@@ -550,6 +552,7 @@ class PickupEngine:
|
|||||||
result["寄达地区划代码"] = form_data.get("receiverDistrictNo", "")
|
result["寄达地区划代码"] = form_data.get("receiverDistrictNo", "")
|
||||||
result["寄件人姓名"] = form_data.get("senderLinker", "")
|
result["寄件人姓名"] = form_data.get("senderLinker", "")
|
||||||
result["寄件地址"] = form_data.get("senderAddr", "")
|
result["寄件地址"] = form_data.get("senderAddr", "")
|
||||||
|
result["运输类型"] = form_data.get("transferType", "")
|
||||||
|
|
||||||
elapsed = (datetime.now() - start_time).total_seconds()
|
elapsed = (datetime.now() - start_time).total_seconds()
|
||||||
if submit_result.get("success"):
|
if submit_result.get("success"):
|
||||||
@@ -857,6 +860,9 @@ class PickupEngine:
|
|||||||
ipt = self._product_detail.get("innerpartsType", "")
|
ipt = self._product_detail.get("innerpartsType", "")
|
||||||
if ipt:
|
if ipt:
|
||||||
form["contentsAttribute"] = str(ipt)
|
form["contentsAttribute"] = str(ipt)
|
||||||
|
# 运输类型(UI 下拉框选择,来自 transmode 数组)
|
||||||
|
if self._transport_type:
|
||||||
|
form["transferType"] = self._transport_type
|
||||||
|
|
||||||
if self._customer_choice:
|
if self._customer_choice:
|
||||||
# senders 用全名(带前缀如 qxsm-穹诩商贸),sender 用短名
|
# senders 用全名(带前缀如 qxsm-穹诩商贸),sender 用短名
|
||||||
|
|||||||
@@ -37,8 +37,6 @@ BUILTIN_FIELD_MAP: dict[str, str] = {
|
|||||||
"保价金额": "insuranceAmount",
|
"保价金额": "insuranceAmount",
|
||||||
"代收货款": "codAmount",
|
"代收货款": "codAmount",
|
||||||
# ── 系统保留字段(通常不需要在 Excel 中填写,只用默认值)──
|
# ── 系统保留字段(通常不需要在 Excel 中填写,只用默认值)──
|
||||||
"运输类型": "transferType",
|
|
||||||
"内件属性": "contentsAttribute",
|
|
||||||
"件数": "quantity",
|
"件数": "quantity",
|
||||||
"保价标志": "insuranceFlag",
|
"保价标志": "insuranceFlag",
|
||||||
"回单标志": "receiptFlag",
|
"回单标志": "receiptFlag",
|
||||||
@@ -129,49 +127,6 @@ CODE_MAP: dict[str, dict[str, str]] = {
|
|||||||
"证件类型": {
|
"证件类型": {
|
||||||
"身份证": "01",
|
"身份证": "01",
|
||||||
},
|
},
|
||||||
"运输类型": {
|
|
||||||
"基本": "1",
|
|
||||||
"陆运": "3",
|
|
||||||
},
|
|
||||||
"内件属性": {
|
|
||||||
"其他": "00",
|
|
||||||
"身份证": "01",
|
|
||||||
"录取通知书": "02",
|
|
||||||
"法院专递": "03",
|
|
||||||
"护照": "04",
|
|
||||||
"通行证": "05",
|
|
||||||
"签证": "06",
|
|
||||||
"驾驶证": "07",
|
|
||||||
"保险文书": "08",
|
|
||||||
"银行票据": "09",
|
|
||||||
"行驶证": "10",
|
|
||||||
"交通违章通知书": "11",
|
|
||||||
"纳税申报": "12",
|
|
||||||
"到货通知书": "13",
|
|
||||||
"公证书": "14",
|
|
||||||
"学生档案": "15",
|
|
||||||
"准考证": "16",
|
|
||||||
"成绩单": "17",
|
|
||||||
"药监批件": "18",
|
|
||||||
"移动配送": "19",
|
|
||||||
"劳动仲裁": "20",
|
|
||||||
"合格证": "21",
|
|
||||||
"健康证": "22",
|
|
||||||
"火车票": "23",
|
|
||||||
"房证": "24",
|
|
||||||
"企业代码证": "25",
|
|
||||||
"教材": "26",
|
|
||||||
"福利彩票": "27",
|
|
||||||
"病历": "28",
|
|
||||||
"银企对账单": "29",
|
|
||||||
"学位证书": "30",
|
|
||||||
"车辆档案": "31",
|
|
||||||
"交房通知书": "32",
|
|
||||||
"车牌": "36",
|
|
||||||
"信用卡": "41",
|
|
||||||
"检察专递": "53",
|
|
||||||
"法院专递回执": "54",
|
|
||||||
},
|
|
||||||
"保价标志": {
|
"保价标志": {
|
||||||
"不保价": "1",
|
"不保价": "1",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ class App:
|
|||||||
self.fv_force_sender_name = BooleanVar()
|
self.fv_force_sender_name = BooleanVar()
|
||||||
self.fv_sender_addr = StringVar()
|
self.fv_sender_addr = StringVar()
|
||||||
self.fv_force_sender_addr = BooleanVar()
|
self.fv_force_sender_addr = BooleanVar()
|
||||||
|
self.fv_transport_type = StringVar()
|
||||||
|
|
||||||
# 搜索基础设施(懒加载)
|
# 搜索基础设施(懒加载)
|
||||||
self._search_bridge = None
|
self._search_bridge = None
|
||||||
@@ -139,6 +140,7 @@ class App:
|
|||||||
self._customer_cached_choice = None
|
self._customer_cached_choice = None
|
||||||
self._customer_cached_detail = None
|
self._customer_cached_detail = None
|
||||||
self._sender_realname_cached = None
|
self._sender_realname_cached = None
|
||||||
|
self._transmode_map = {} # {propertyName: propertyCode}
|
||||||
|
|
||||||
self._build_ui()
|
self._build_ui()
|
||||||
|
|
||||||
@@ -253,6 +255,15 @@ class App:
|
|||||||
Entry(r4, textvariable=self.fv_sender_addr, width=20).pack(side="left", padx=5)
|
Entry(r4, textvariable=self.fv_sender_addr, width=20).pack(side="left", padx=5)
|
||||||
Checkbutton(r4, text="强制覆盖", variable=self.fv_force_sender_addr).pack(side="left", padx=5)
|
Checkbutton(r4, text="强制覆盖", variable=self.fv_force_sender_addr).pack(side="left", padx=5)
|
||||||
|
|
||||||
|
# Row 5: 运输类型 | 下拉框(产品选择后自动填充)
|
||||||
|
r5 = Frame(fixed_frame)
|
||||||
|
r5.pack(fill=X, pady=2)
|
||||||
|
Label(r5, text="运输类型:", width=12, anchor="e").pack(side="left")
|
||||||
|
self.fv_transport_combo = ttk.Combobox(r5, textvariable=self.fv_transport_type,
|
||||||
|
state="readonly", width=18)
|
||||||
|
self.fv_transport_combo.pack(side="left", padx=5)
|
||||||
|
Label(r5, text="(产品选择后自动填充)", fg="gray", font=("", 8)).pack(side="left")
|
||||||
|
|
||||||
# ── 进度条 ──
|
# ── 进度条 ──
|
||||||
progress_frame = Frame(self.root)
|
progress_frame = Frame(self.root)
|
||||||
progress_frame.pack(fill=X, padx=10, pady=2)
|
progress_frame.pack(fill=X, padx=10, pady=2)
|
||||||
@@ -267,9 +278,9 @@ class App:
|
|||||||
result_frame = LabelFrame(self.root, text="提交结果", padx=10, pady=5)
|
result_frame = LabelFrame(self.root, text="提交结果", padx=10, pady=5)
|
||||||
result_frame.pack(fill="both", expand=True, padx=10, pady=5)
|
result_frame.pack(fill="both", expand=True, padx=10, pady=5)
|
||||||
|
|
||||||
columns = ("单号", "处理状态", "重量", "产品", "客户", "寄达地区划代码", "寄件人姓名", "寄件地址")
|
columns = ("单号", "处理状态", "重量", "产品", "客户", "运输类型", "寄达地区划代码", "寄件人姓名", "寄件地址")
|
||||||
self.result_tree = ttk.Treeview(result_frame, columns=columns, show="headings", height=8)
|
self.result_tree = ttk.Treeview(result_frame, columns=columns, show="headings", height=8)
|
||||||
col_widths = [140, 80, 60, 110, 110, 110, 80, 160]
|
col_widths = [140, 80, 60, 100, 100, 70, 100, 80, 140]
|
||||||
for col, width in zip(columns, col_widths):
|
for col, width in zip(columns, col_widths):
|
||||||
self.result_tree.heading(col, text=col)
|
self.result_tree.heading(col, text=col)
|
||||||
self.result_tree.column(col, width=width, anchor="center")
|
self.result_tree.column(col, width=width, anchor="center")
|
||||||
@@ -411,6 +422,7 @@ class App:
|
|||||||
result.get("重量", ""),
|
result.get("重量", ""),
|
||||||
result.get("产品", ""),
|
result.get("产品", ""),
|
||||||
result.get("客户", ""),
|
result.get("客户", ""),
|
||||||
|
result.get("运输类型", ""),
|
||||||
result.get("寄达地区划代码", ""),
|
result.get("寄达地区划代码", ""),
|
||||||
result.get("寄件人姓名", ""),
|
result.get("寄件人姓名", ""),
|
||||||
result.get("寄件地址", ""),
|
result.get("寄件地址", ""),
|
||||||
@@ -577,6 +589,18 @@ class App:
|
|||||||
biz_no = choice.get("bizProductNo", "")
|
biz_no = choice.get("bizProductNo", "")
|
||||||
if biz_id and biz_no and self._search_api:
|
if biz_id and biz_no and self._search_api:
|
||||||
self._product_cached_detail = self._search_api.select_product(biz_id, biz_no)
|
self._product_cached_detail = self._search_api.select_product(biz_id, biz_no)
|
||||||
|
# 从产品详情中提取运输类型选项(transmode 数组)
|
||||||
|
detail = self._product_cached_detail
|
||||||
|
if isinstance(detail, dict):
|
||||||
|
transmode = detail.get("transmode", [])
|
||||||
|
if isinstance(transmode, list) and transmode:
|
||||||
|
codes = [item["propertyCode"] for item in transmode if "propertyCode" in item]
|
||||||
|
names = [item["propertyName"] for item in transmode if "propertyName" in item]
|
||||||
|
self._transmode_map = dict(zip(names, codes))
|
||||||
|
self.fv_transport_combo["values"] = names
|
||||||
|
# 默认选中最后一项
|
||||||
|
if names:
|
||||||
|
self.fv_transport_type.set(names[-1])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._log(f"[error] 获取产品详情失败: {e}")
|
self._log(f"[error] 获取产品详情失败: {e}")
|
||||||
self._product_cached_detail = {}
|
self._product_cached_detail = {}
|
||||||
@@ -757,6 +781,9 @@ class App:
|
|||||||
_engine._customer_detail = self._customer_cached_detail
|
_engine._customer_detail = self._customer_cached_detail
|
||||||
if self._sender_realname_cached is not None:
|
if self._sender_realname_cached is not None:
|
||||||
_engine._sender_realname = self._sender_realname_cached
|
_engine._sender_realname = self._sender_realname_cached
|
||||||
|
transport_name = self.fv_transport_type.get()
|
||||||
|
if transport_name and self._transmode_map:
|
||||||
|
_engine._transport_type = self._transmode_map.get(transport_name, "")
|
||||||
|
|
||||||
self._update_status("启动中...")
|
self._update_status("启动中...")
|
||||||
try:
|
try:
|
||||||
@@ -842,6 +869,8 @@ class App:
|
|||||||
self._customer_cached_choice = None
|
self._customer_cached_choice = None
|
||||||
self._customer_cached_detail = None
|
self._customer_cached_detail = None
|
||||||
self._sender_realname_cached = None
|
self._sender_realname_cached = None
|
||||||
|
self.fv_transport_type.set("")
|
||||||
|
self._transmode_map = {}
|
||||||
|
|
||||||
def _pause(self):
|
def _pause(self):
|
||||||
global _engine
|
global _engine
|
||||||
|
|||||||
Reference in New Issue
Block a user