from django.db import models class Conversation(models.Model): """ 审核智能体会话主对象。 会话与资料包一一绑定,标题默认使用解析出的产品名称, 节点结果使用 JSON 挂载,便于页面按节点展示。 """ STATUS_PENDING = "pending" STATUS_PROCESSING = "processing" STATUS_COMPLETED = "completed" STATUS_REVIEW_REQUIRED = "review_required" STATUS_BLOCKED = "blocked" STATUS_FAILED = "failed" conversation_id = models.CharField(max_length=64, unique=True, db_index=True) title = models.CharField(max_length=255) product_name = models.CharField(max_length=255, blank=True, db_index=True) batch_id = models.CharField(max_length=64, blank=True, db_index=True) task_status = models.CharField(max_length=32, default=STATUS_PENDING, db_index=True) node_results = models.JSONField(default=list, blank=True) latest_summary = models.JSONField(default=dict, blank=True) created_at = models.DateTimeField(auto_now_add=True, db_index=True) updated_at = models.DateTimeField(auto_now=True) last_run_at = models.DateTimeField(null=True, blank=True) class Meta: ordering = ["-updated_at", "-created_at"] def __str__(self) -> str: return self.title def get_task_status_display_text(self) -> str: """返回会话阶段的中文展示文案。""" return { self.STATUS_PENDING: "处理中", self.STATUS_PROCESSING: "处理中", self.STATUS_COMPLETED: "已完成", self.STATUS_REVIEW_REQUIRED: "待复核", self.STATUS_BLOCKED: "已阻断", self.STATUS_FAILED: "失败", "success": "已完成", }.get(self.task_status, self.task_status)