diff --git a/apps/audit/models.py b/apps/audit/models.py index 7132245..b1b8749 100644 --- a/apps/audit/models.py +++ b/apps/audit/models.py @@ -99,3 +99,11 @@ class NotificationRecord(models.Model): def __str__(self) -> str: return f"{self.notify_reason}:{self.batch_id}" + + def get_message_status_display_text(self) -> str: + """返回通知状态的中文展示文案。""" + return { + self.STATUS_PENDING: "处理中", + self.STATUS_SENT: "已发送", + self.STATUS_FAILED: "失败", + }.get(self.message_status, self.message_status) diff --git a/apps/audit/services.py b/apps/audit/services.py index 6b805d4..3e395af 100644 --- a/apps/audit/services.py +++ b/apps/audit/services.py @@ -7,6 +7,36 @@ from .models import AgentAuditLog, NotificationRecord SUPPORTED_NOTIFY_REASONS = {"task_completed", "task_failed"} +RISK_STATUS_DISPLAY = { + "high": "已阻断", + "medium": "待复核", + "low": "已完成", + "failed": "失败", + "processing": "处理中", + "pending": "处理中", +} + +EXPORT_STATUS_DISPLAY = { + "completed": "已完成", + "draft_only": "待复核", + "review_required": "待复核", + "manual_review": "待复核", + "blocked": "已阻断", + "failed": "失败", + "processing": "处理中", + "pending": "处理中", +} + +CONVERSATION_STATUS_DISPLAY = { + "success": "已完成", + "completed": "已完成", + "review_required": "待复核", + "blocked": "已阻断", + "failed": "失败", + "processing": "处理中", + "pending": "处理中", +} + def create_audit_log( scenario_id: str, @@ -138,11 +168,15 @@ def build_history_rows(logs) -> list[dict]: "conversation": conversation, "batch_scale": f"{batch.file_count} 份 / {batch.page_count} 页" if batch else "-", "batch_status": batch.get_import_status_display_text() if batch else "-", - "conversation_status": conversation.task_status if conversation else "-", - "risk_status": structured_output.get("highest_risk_level") - or structured_output.get("risk_level") - or "-", - "notify_status": notification.message_status if notification else "-", + "conversation_status": _get_conversation_status_display_text( + conversation.task_status if conversation else "-" + ), + "risk_status": _get_risk_status_display_text( + structured_output.get("highest_risk_level") + or structured_output.get("risk_level") + or "-" + ), + "notify_status": notification.get_message_status_display_text() if notification else "-", "notify_reason": notification.notify_reason if notification else "-", } ) @@ -161,13 +195,13 @@ def build_history_metrics(history_rows: list[dict]) -> list[dict]: """ total_count = len(history_rows) success_count = sum(1 for row in history_rows if row["log"].status == "success") - notify_sent_count = sum(1 for row in history_rows if row.get("notify_status") == "sent") - blocked_count = sum(1 for row in history_rows if row.get("risk_status") == "high") + notify_sent_count = sum(1 for row in history_rows if row.get("notify_status") == "已发送") + blocked_count = sum(1 for row in history_rows if row.get("risk_status") == "已阻断") return [ {"label": "处理任务数", "value": total_count, "note": "按当前筛选条件回看执行留痕。"}, {"label": "成功执行", "value": success_count, "note": "执行完成并写入审计快照。"}, - {"label": "通知已发送", "value": notify_sent_count, "note": "已生成 sent 状态的通知留痕。"}, - {"label": "高风险阻断", "value": blocked_count, "note": "风险等级为 high 的处理记录。"}, + {"label": "通知已发送", "value": notify_sent_count, "note": "已生成已发送状态的通知留痕。"}, + {"label": "高风险阻断", "value": blocked_count, "note": "当前风险状态为已阻断的处理记录。"}, ] @@ -187,15 +221,33 @@ def build_detail_summary(log: AgentAuditLog, conversation, notifications) -> dic ) latest_notification = notifications.first() if hasattr(notifications, "first") else None return { - "export_status": structured_output.get("export_status") or (export_node or {}).get("status", "-"), + "export_status": _get_export_status_display_text( + structured_output.get("export_status") or (export_node or {}).get("status", "-") + ), "download_url": structured_output.get("download_url", ""), "output_file_name": output_file.get("file_name", ""), "output_file_relative_path": output_file.get("relative_path", ""), "export_mode": output_file.get("export_mode", ""), "template_name": structured_output.get("template_name", ""), "template_version": structured_output.get("template_version", ""), - "draft_export_status": structured_output.get("draft_export_status", ""), - "formal_export_status": structured_output.get("formal_export_status", ""), + "draft_export_status": _get_export_status_display_text( + structured_output.get("draft_export_status", "") + ), + "formal_export_status": _get_export_status_display_text( + structured_output.get("formal_export_status", "") + ), "blocked_items": structured_output.get("blocked_items") or [], "notification_receipt": latest_notification.receipt if latest_notification else {}, } + + +def _get_risk_status_display_text(status: str) -> str: + return RISK_STATUS_DISPLAY.get(status, status or "-") + + +def _get_export_status_display_text(status: str) -> str: + return EXPORT_STATUS_DISPLAY.get(status, status or "-") + + +def _get_conversation_status_display_text(status: str) -> str: + return CONVERSATION_STATUS_DISPLAY.get(status, status or "-") diff --git a/templates/audit/log_detail.html b/templates/audit/log_detail.html index e23020b..4b41e1a 100644 --- a/templates/audit/log_detail.html +++ b/templates/audit/log_detail.html @@ -100,7 +100,7 @@