fix: 安全兼容采购规格繁简匹配 (#251)

This commit is contained in:
chengma
2026-08-17 15:20:35 +08:00
parent 1927e3edb6
commit 134514e382
4 changed files with 373 additions and 56 deletions
+55 -34
View File
@@ -53,6 +53,7 @@ from .util.select_color_size import (
color_selection_failure_reason,
select_color,
select_size,
size_selection_failure_reason,
)
@@ -1033,34 +1034,37 @@ class U2PddPurchaseAdapter(PddPurchaseAdapter):
color_selected = self._select_color(
device, panel_xml, color, action_delay=0.2
)
if not color_selected:
failed_xml = self._dump_hierarchy()
failure_reason = color_selection_failure_reason(
failed_xml, color
)
diagnostics: dict[str, Any] = {
"selection_failure": failure_reason,
}
artifact = self._save_last_xml(
"purchase-color-selection-mismatch"
)
if artifact is not None:
diagnostics["artifacts"] = [artifact]
messages = {
"target_not_visible": f"没有找到目标颜色:{color}",
"safe_target_missing": (
f"目标颜色没有完整可见的安全点击位置:{color}"
),
"selection_unconfirmed": (
f"点击颜色后页面没有确认已选中:{color}"
),
}
raise PddPurchaseError(
"PURCHASE_OPTIONS_MISMATCH",
messages[failure_reason],
step="purchase_select_options",
diagnostics=diagnostics,
)
if not color_selected:
failed_xml = self._dump_hierarchy()
failure_reason = color_selection_failure_reason(
failed_xml, color
)
diagnostics: dict[str, Any] = {
"selection_failure": failure_reason,
}
artifact = self._save_last_xml(
"purchase-color-selection-mismatch"
)
if artifact is not None:
diagnostics["artifacts"] = [artifact]
messages = {
"target_not_visible": f"没有找到目标颜色:{color}",
"target_ambiguous": (
f"目标颜色存在多个繁简等价候选,已停止采购:{color}"
),
"safe_target_missing": (
f"目标颜色没有完整可见的安全点击位置:{color}"
),
"selection_unconfirmed": (
f"点击颜色后页面没有确认已选中:{color}"
),
}
raise PddPurchaseError(
"PURCHASE_OPTIONS_MISMATCH",
messages[failure_reason],
step="purchase_select_options",
diagnostics=diagnostics,
)
size = checked.get("size")
if size:
latest_xml = self._dump_hierarchy()
@@ -1073,12 +1077,29 @@ class U2PddPurchaseAdapter(PddPurchaseAdapter):
size_selected = self._select_size(
device, latest_xml, size, action_delay=0.2
)
if not size_selected:
raise PddPurchaseError(
"PURCHASE_OPTIONS_MISMATCH",
f"没有精确选中尺码:{size}",
step="purchase_select_options",
)
if not size_selected:
failed_xml = self._dump_hierarchy()
failure_reason = size_selection_failure_reason(
failed_xml, size
)
messages = {
"target_not_visible": f"没有找到目标尺码:{size}",
"target_ambiguous": (
f"目标尺码存在多个繁简等价候选,已停止采购:{size}"
),
"safe_target_missing": (
f"目标尺码没有可靠的安全点击位置:{size}"
),
"selection_unconfirmed": (
f"点击尺码后页面没有确认已选中:{size}"
),
}
raise PddPurchaseError(
"PURCHASE_OPTIONS_MISMATCH",
messages[failure_reason],
step="purchase_select_options",
diagnostics={"selection_failure": failure_reason},
)
except PddPurchaseError:
raise
except Exception as exc: