from datetime import timedelta from django.core.management.base import BaseCommand from django.utils import timezone from university.models import OnlineExam, UserOnlineExam, UserOnlineExamFace, OnlineExamEvent class Command(BaseCommand): def handle(self, *args, **options): # 将考生的状态从 “报名成功” 改为 “准备参加” for exam in OnlineExam.objects.extra( where=[ "TIMESTAMPDIFF(SECOND, start_at, NOW()) >= 0" ]): exam.useronlineexam_set\ .filter(status=UserOnlineExam.STATUS_REGISTERED)\ .update(status=UserOnlineExam.STATUS_WAIT) # 检查考生照片抓拍是否正常上报,超过 2 分钟未上报的需要记录 last_2_minute = timezone.now() - timedelta(minutes=2) user_exmas = UserOnlineExam.objects\ .filter(status=UserOnlineExam.STATUS_UNDERWAY)\ .values_list('user_id', 'online_exam_id', 'id') exam_faces = UserOnlineExamFace.objects\ .filter(created_at__gte=last_2_minute)\ .values_list('user_id', 'online_exam_id', 'user_online_exam_id') for user_id, online_exam_id, user_exam_id in (set(user_exmas) - set(exam_faces)): OnlineExamEvent.objects.create( user_id=user_id, online_exam_id=online_exam_id, user_online_exam_id=user_exam_id, event_type=OnlineExamEvent.EVENT_FACE_CHECK_FAILED, comment='超过两分钟未上报抓拍照片' )