完善验收采集调度与截图管理

This commit is contained in:
2026-09-01 16:18:00 +08:00
parent af340206a5
commit 292bd3a126
7 changed files with 401 additions and 44 deletions

View File

@@ -102,9 +102,54 @@ def list_evidences(params: dict[str, Any]) -> dict[str, Any]:
if not 1 <= limit <= 100:
raise TaskError("OCR_EVIDENCE_LIMIT_INVALID", "limit 必须在 1 到 100 之间", 422)
query["limit"] = limit
return _get("/xhs/ocr/dashboard/evidences", query) or {
data = _get("/xhs/ocr/dashboard/evidences", query) or {
"items": [], "total": 0, "limit": limit, "is_complete": False,
}
if Config.EVIDENCE_ADMIN_BASE_URL and query.get("batch_key") and query.get("question_code"):
try:
response = SESSION.get(
f"{Config.EVIDENCE_ADMIN_BASE_URL}/api/evidences",
params={"batch_key": query["batch_key"], "question_code": query["question_code"]},
timeout=min(Config.CRAWLER_TIMEOUT_SECONDS, 10),
)
response.raise_for_status()
manual_items = (response.json().get("data") or [])
items = data.setdefault("items", [])
existing_urls = {str(item.get("cos_url") or "") for item in items}
object_indexes = {
str(item.get("cos_object_key")): index for index, item in enumerate(items)
if item.get("cos_object_key")
}
for item in manual_items:
url = str(item.get("cos_url") or "")
object_key = str(item.get("cos_object_key") or "")
if object_key and object_key in object_indexes:
items[object_indexes[object_key]] = item
existing_urls.add(url)
elif url and url not in existing_urls:
items.append(item)
if object_key:
object_indexes[object_key] = len(items) - 1
existing_urls.add(url)
evidence_type_order = {
"body_ranking": 0, "first_screen": 1, "reference_source": 2,
"before": 3, "after": 3, "before_after": 3, "viral_note": 4,
}
items.sort(key=lambda item: (
evidence_type_order.get(str(item.get("evidence_type") or ""), 99),
1 if (
item.get("image_id") is not None
or "/manual-evidences/" in str(item.get("cos_object_key") or "")
or item.get("upload_source") == "holy-backend"
) else 0,
str(item.get("created_at") or ""),
int(item.get("sort_order") or 0),
int(item.get("image_id") or item.get("evidence_id") or item.get("id") or 0),
))
data["total"] = len(data.get("items") or [])
except (requests.RequestException, ValueError):
pass
return data
def export_evidences(params: dict[str, Any]) -> tuple[io.BytesIO, str, int]: