行宽 180 下把历史遗留的折行表达式合并,无语义改动。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
from django.contrib.auth import get_user_model
|
|
from django.db import models
|
|
|
|
from problem.models import Problem
|
|
from utils.shortcuts import rand_str
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class FlowchartSubmissionStatus:
|
|
PENDING = 0 # 等待AI评分
|
|
PROCESSING = 1 # AI评分中
|
|
COMPLETED = 2 # 评分完成
|
|
FAILED = 3 # 评分失败
|
|
|
|
|
|
class FlowchartSubmission(models.Model):
|
|
"""流程图提交模型"""
|
|
|
|
id = models.TextField(default=rand_str, primary_key=True, db_index=True)
|
|
|
|
# 基础信息
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="flowchart_submissions")
|
|
problem = models.ForeignKey(Problem, on_delete=models.CASCADE, related_name="flowchart_submissions")
|
|
|
|
# 提交内容
|
|
mermaid_code = models.TextField() # Mermaid代码
|
|
flowchart_data = models.JSONField(default=dict) # 流程图元数据
|
|
|
|
# 状态信息
|
|
status = models.IntegerField(default=FlowchartSubmissionStatus.PENDING)
|
|
create_time = models.DateTimeField(auto_now_add=True)
|
|
|
|
# AI评分结果
|
|
ai_score = models.FloatField(null=True, blank=True) # AI评分 (0-100)
|
|
ai_grade = models.CharField(max_length=10, null=True, blank=True) # 等级 (S/A/B/C)
|
|
ai_feedback = models.TextField(null=True, blank=True) # AI反馈
|
|
ai_suggestions = models.TextField(null=True, blank=True) # AI建议
|
|
ai_criteria_details = models.JSONField(default=dict) # 详细评分标准
|
|
|
|
# 处理信息
|
|
ai_provider = models.CharField(max_length=50, default="deepseek")
|
|
ai_model = models.CharField(max_length=50, default="deepseek-v4-flash")
|
|
processing_time = models.FloatField(null=True, blank=True) # AI处理耗时(秒)
|
|
evaluation_time = models.DateTimeField(null=True, blank=True) # 评分完成时间
|
|
|
|
class Meta:
|
|
db_table = "flowchart_submission"
|
|
ordering = ["-create_time"]
|
|
indexes = [
|
|
models.Index(fields=["user", "create_time"], name="flowchart_user_time_idx"),
|
|
models.Index(fields=["problem", "create_time"], name="flowchart_problem_time_idx"),
|
|
models.Index(fields=["status"], name="flowchart_status_idx"),
|
|
]
|
|
|
|
def __str__(self):
|
|
return f"FlowchartSubmission {self.id}"
|
|
|
|
def check_user_permission(self, user, check_share=True):
|
|
"""检查用户权限"""
|
|
if self.user_id == user.id or not user.is_regular_user() or self.problem.created_by_id == user.id:
|
|
return True
|
|
|
|
return False
|