删除无用代码并且新增流程图相关内容
This commit is contained in:
138
flowchart/views/oj.py
Normal file
138
flowchart/views/oj.py
Normal file
@@ -0,0 +1,138 @@
|
||||
from utils.api import APIView
|
||||
from account.decorators import login_required
|
||||
from flowchart.models import FlowchartSubmission, FlowchartSubmissionStatus
|
||||
from flowchart.serializers import (
|
||||
CreateFlowchartSubmissionSerializer,
|
||||
FlowchartSubmissionSerializer,
|
||||
FlowchartSubmissionListSerializer
|
||||
)
|
||||
from flowchart.tasks import evaluate_flowchart_task
|
||||
|
||||
class FlowchartSubmissionAPI(APIView):
|
||||
@login_required
|
||||
def post(self, request):
|
||||
"""创建流程图提交"""
|
||||
serializer = CreateFlowchartSubmissionSerializer(data=request.data)
|
||||
if not serializer.is_valid():
|
||||
return self.error(serializer.errors)
|
||||
|
||||
data = serializer.validated_data
|
||||
|
||||
# 验证题目存在
|
||||
try:
|
||||
from problem.models import Problem
|
||||
problem = Problem.objects.get(_id=data['problem_id'])
|
||||
except Problem.DoesNotExist:
|
||||
return self.error("Problem doesn't exist")
|
||||
|
||||
# 验证题目是否允许流程图提交
|
||||
if not problem.allow_flowchart:
|
||||
return self.error("This problem does not allow flowchart submission")
|
||||
|
||||
# 创建提交记录
|
||||
submission = FlowchartSubmission.objects.create(
|
||||
user=request.user,
|
||||
problem=problem,
|
||||
mermaid_code=data['mermaid_code'],
|
||||
flowchart_data=data.get('flowchart_data', {})
|
||||
)
|
||||
|
||||
# 启动AI评分任务
|
||||
evaluate_flowchart_task.send(submission.id)
|
||||
|
||||
return self.success({
|
||||
'submission_id': submission.id,
|
||||
'status': 'pending'
|
||||
})
|
||||
|
||||
@login_required
|
||||
def get(self, request):
|
||||
"""获取流程图提交详情"""
|
||||
submission_id = request.GET.get('id')
|
||||
if not submission_id:
|
||||
return self.error("submission_id is required")
|
||||
|
||||
try:
|
||||
submission = FlowchartSubmission.objects.get(id=submission_id)
|
||||
except FlowchartSubmission.DoesNotExist:
|
||||
return self.error("Submission doesn't exist")
|
||||
|
||||
if not submission.check_user_permission(request.user):
|
||||
return self.error("No permission for this submission")
|
||||
|
||||
serializer = FlowchartSubmissionSerializer(submission)
|
||||
return self.success(serializer.data)
|
||||
|
||||
class FlowchartSubmissionListAPI(APIView):
|
||||
@login_required
|
||||
def get(self, request):
|
||||
"""获取流程图提交列表"""
|
||||
user_id = request.GET.get('user_id')
|
||||
problem_id = request.GET.get('problem_id')
|
||||
offset = int(request.GET.get('offset', 0))
|
||||
limit = int(request.GET.get('limit', 20))
|
||||
|
||||
queryset = FlowchartSubmission.objects.select_related('user', 'problem')
|
||||
|
||||
# 权限过滤
|
||||
if not request.user.is_admin_role():
|
||||
queryset = queryset.filter(user=request.user)
|
||||
|
||||
# 其他过滤条件
|
||||
if user_id:
|
||||
queryset = queryset.filter(user_id=user_id)
|
||||
if problem_id:
|
||||
queryset = queryset.filter(problem_id=problem_id)
|
||||
|
||||
total = queryset.count()
|
||||
submissions = queryset[offset:offset + limit]
|
||||
|
||||
serializer = FlowchartSubmissionListSerializer(submissions, many=True)
|
||||
|
||||
return self.success({
|
||||
'results': serializer.data,
|
||||
'total': total
|
||||
})
|
||||
|
||||
|
||||
class FlowchartSubmissionRetryAPI(APIView):
|
||||
@login_required
|
||||
def post(self, request):
|
||||
"""重新触发AI评分"""
|
||||
submission_id = request.data.get('submission_id')
|
||||
if not submission_id:
|
||||
return self.error("submission_id is required")
|
||||
|
||||
try:
|
||||
submission = FlowchartSubmission.objects.get(id=submission_id)
|
||||
except FlowchartSubmission.DoesNotExist:
|
||||
return self.error("Submission doesn't exist")
|
||||
|
||||
# 检查权限
|
||||
if not submission.check_user_permission(request.user):
|
||||
return self.error("No permission for this submission")
|
||||
|
||||
# 检查是否可以重新评分
|
||||
if submission.status not in [FlowchartSubmissionStatus.FAILED, FlowchartSubmissionStatus.COMPLETED]:
|
||||
return self.error("Submission is not in a state that allows retry")
|
||||
|
||||
# 重置状态并重新启动AI评分
|
||||
submission.status = FlowchartSubmissionStatus.PENDING
|
||||
submission.ai_score = None
|
||||
submission.ai_grade = None
|
||||
submission.ai_feedback = None
|
||||
submission.ai_suggestions = None
|
||||
submission.ai_criteria_details = {}
|
||||
submission.processing_time = None
|
||||
submission.evaluation_time = None
|
||||
submission.save()
|
||||
|
||||
# 重新启动AI评分任务
|
||||
evaluate_flowchart_task.send(submission.id)
|
||||
|
||||
return self.success({
|
||||
'submission_id': submission.id,
|
||||
'status': 'pending',
|
||||
'message': 'AI evaluation restarted'
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user