feat: integrate govdoc platform updates

This commit is contained in:
wren
2026-05-18 14:35:25 +08:00
parent a73826dc1d
commit 1bacfe41b7
10 changed files with 2151 additions and 92 deletions
@@ -7,7 +7,7 @@ import json
import mimetypes
import time
from dataclasses import dataclass
from datetime import datetime
from datetime import date, datetime
from pathlib import Path
from typing import Any
@@ -60,6 +60,20 @@ class GovdocServiceImpl(IGovdocService):
self.OssService = OssService or OssServiceImpl()
self.Storage = StorageAdapter()
def _parse_date_filter(self, value: str | None, field_name: str) -> date | None:
if value is None:
return None
normalized = value.strip()
if not normalized:
return None
try:
return date.fromisoformat(normalized)
except ValueError as exc:
raise LeauditException(
StatusCodeEnum.HTTP_400_BAD_REQUEST,
f"{field_name} 格式非法,应为 YYYY-MM-DD",
) from exc
# ── 文档 ──────────────────────────────────────────────
async def UploadDocument(
@@ -250,12 +264,14 @@ class GovdocServiceImpl(IGovdocService):
if resultStatus:
filters.append("COALESCE(gr.result_status, '') = :result_status")
params["result_status"] = resultStatus.strip()
if dateFrom:
filters.append("d.created_at >= CAST(:date_from AS date)")
params["date_from"] = dateFrom.strip()
if dateTo:
filters.append("d.created_at < (CAST(:date_to AS date) + INTERVAL '1 day')")
params["date_to"] = dateTo.strip()
parsedDateFrom = self._parse_date_filter(dateFrom, "dateFrom")
parsedDateTo = self._parse_date_filter(dateTo, "dateTo")
if parsedDateFrom:
filters.append("d.created_at::date >= :date_from")
params["date_from"] = parsedDateFrom
if parsedDateTo:
filters.append("d.created_at::date <= :date_to")
params["date_to"] = parsedDateTo
whereClause = " AND ".join(filters)
@@ -901,9 +917,10 @@ class GovdocServiceImpl(IGovdocService):
artifact = await self._get_report_artifact(runId, "html_report")
if not artifact:
return {"runId": runId, "htmlUrl": ""}
content = await self.OssService.DownloadBytes(str(artifact["oss_url"]))
return {
"runId": runId,
"htmlUrl": await self.OssService.PresignGetUrl(str(artifact["oss_url"])),
"html": content.decode("utf-8"),
}
async def GetReportDocx(self, runId: int) -> dict[str, Any]: