fix: update patrol delete progress handling

This commit is contained in:
koko
2026-05-02 02:03:49 +08:00
parent 7c2b154c20
commit 1ecce13814
41 changed files with 313 additions and 158 deletions

View File

@@ -1792,6 +1792,10 @@ class PatrolDeleteTask:
f"国家 {country_name} 处理结束success={country_result['success']}"
f"deleted={country_result['deletedCount']}reopenRequired={requires_browser_reset}"
)
self._post_progress_result_safely(
task_id=task_id,
shop_name=shop_name,
)
if driver is not None:
self.log(f"店铺 {shop_name} 国家处理完成,正在关闭店铺")
@@ -1822,6 +1826,22 @@ class PatrolDeleteTask:
del runing_shop[shop_name]
self.log(f"店铺 {shop_name} 已从执行列表中移除")
def _post_progress_result_safely(
self,
task_id: int,
shop_name: str,
) -> None:
"""Submit a heartbeat-only payload so Java does not append duplicate result rows."""
try:
self.post_result(
task_id=task_id,
shop_name=shop_name,
shop_done=False,
heartbeat_only=True,
)
except Exception as exc:
self.log(f"店铺 {shop_name} 中间结果回传失败,继续执行: {str(exc)}", "WARNING")
def open_shop(self, max_retries: int, company_name: str, shop_name: str, iskill: bool = False) -> Optional[InventoryManage]:
error_info = ""
driver: Optional[InventoryManage] = None
@@ -1996,6 +2016,8 @@ class PatrolDeleteTask:
"type": "completeDraft",
"status": PatrolDeleteTask._string_result_field(item.get("tag")),
"quantity": quantity,
"deleteQuantity": "",
"processStatus": "",
}
)
self.log(f"trace_id={trace_id} 国家 {country_name} 补全草稿读取完成: rows={rows}")
@@ -2032,6 +2054,7 @@ class PatrolDeleteTask:
"status": status,
"quantity": InventoryManage._normalize_quantity_text(item.get("quantity")),
"deleteQuantity": str(deleted_count),
"processStatus": "已完成" if deleted_count > 0 else "",
}
)
section = {"country": country_name, "rows": rows} if rows else None
@@ -2116,6 +2139,7 @@ class PatrolDeleteTask:
cart_ratios: Optional[List[Dict[str, Any]]] = None,
error: str = "",
shop_done: bool = False,
heartbeat_only: bool = False,
):
"""回传巡店删除结果到 Java API。"""
from config import DELETE_BRAND_API_BASE
@@ -2130,6 +2154,8 @@ class PatrolDeleteTask:
}
if error:
shop_payload["error"] = error
elif heartbeat_only:
shop_payload["heartbeatOnly"] = True
else:
shop_payload["countrySections"] = self._normalize_country_sections_for_result(country_sections)
shop_payload["cartRatios"] = self._normalize_cart_ratios_for_result(cart_ratios)
@@ -2217,9 +2243,12 @@ class PatrolDeleteTask:
rows = []
for row in section.get("rows") or []:
if cls._is_complete_draft_result_row(row):
delete_quantity = cls._string_result_field(row.get("deleteQuantity"))
normalized_row = {
"status": cls._complete_draft_result_status(row),
"quantity": cls._string_result_field(row.get("quantity")),
"deleteQuantity": cls._string_result_field(row.get("deleteQuantity")),
"deleteQuantity": delete_quantity,
"processStatus": cls._complete_draft_process_status(row, delete_quantity),
}
else:
normalized_row = {
@@ -2255,6 +2284,19 @@ class PatrolDeleteTask:
row_type = str(row.get("type") or row.get("kind") or row.get("_kind") or "").strip()
return status in {"补全草稿", "商品信息草稿"} or tag == "补全草稿" or row_type == "completeDraft"
@staticmethod
def _complete_draft_result_status(row: Dict[str, Any]) -> str:
status = PatrolDeleteTask._string_result_field(row.get("status") or row.get("tag")).strip()
return status or "商品信息草稿"
@staticmethod
def _complete_draft_process_status(row: Dict[str, Any], delete_quantity: str) -> str:
process_status = PatrolDeleteTask._string_result_field(row.get("processStatus")).strip()
if process_status:
return process_status
match = re.search(r"\d+", str(delete_quantity or ""))
return "已完成" if match and int(match.group(0)) > 0 else ""
@classmethod
def _replace_complete_draft_rows(
cls,