diff --git a/groups/views.py b/groups/views.py index 442245fa..334b3c71 100644 --- a/groups/views.py +++ b/groups/views.py @@ -479,7 +479,7 @@ def exam_rate(request): # 员工数 user_count = s_models.User.objects.filter(usecomp=i, deletemark=1).count() # 参加考试员工数/考次数 - base = s_models.ExamTestDetail.objects.filter(user__usecomp=i, user__deletemark=1, ison=1).exclude(examtest__nousecomps__contains=','+str(i.partid)+',') + base = s_models.ExamTestDetail.objects.filter(user__usecomp=i, user__deletemark=1, testnum__gte=1).exclude(examtest__nousecomps__contains=','+str(i.partid)+',') if start: base = base.filter(examtest__starttime__gte=start) if end: diff --git a/safesite/models.py b/safesite/models.py index 06795899..ab2e52c2 100644 --- a/safesite/models.py +++ b/safesite/models.py @@ -764,6 +764,8 @@ class ExamTest(models.Model): # 考试表 createuser = models.ForeignKey( User, blank=True, null=True, on_delete=models.CASCADE, related_name='kscjr') qrcode = models.CharField(max_length=200, blank=True, null=True) + retest_count = models.IntegerField('允许重考次数', default=10) + class ExamTestDetail(models.Model): # 考试详情表 @@ -776,7 +778,7 @@ class ExamTestDetail(models.Model): # 考试详情表 endtime = models.DateTimeField(null=True, blank=True) took = models.IntegerField(default=0) # 耗时 rights = models.IntegerField(default=1) # 正确数 - ison = models.IntegerField(default=0) # 未参加0/已参加1/ + ison = models.IntegerField(default=0) # 可参加0/已参加1/ passcode = models.IntegerField(default=0) # 是否通过 testdetail = JSONField(null=True, blank=True) score = models.FloatField(default=0) # 得分 diff --git a/safesite/templates/examtestdetail.html b/safesite/templates/examtestdetail.html index 52bbf657..ea617e52 100644 --- a/safesite/templates/examtestdetail.html +++ b/safesite/templates/examtestdetail.html @@ -83,7 +83,7 @@ 参考时间 - 用时 + 用时(s) 答题详情 @@ -100,7 +100,7 @@ {{$value.user__name}} {{$value.user__ubelongpart__partname}} {{if $value.ison==0}} - 未参加 + 可参加 {{else}} 已参加 {{/if}} diff --git a/safesite/views.py b/safesite/views.py index 15e543c5..e6119923 100644 --- a/safesite/views.py +++ b/safesite/views.py @@ -6222,6 +6222,8 @@ def apiexamtest(req): obj.passscore = data['passscore'] obj.duration = data['duration'] obj.createuser = User.objects.get(userid=userid) + if 'retest_count' in data and data['retest_count']: + obj.retest_count = data['retest_count'] obj.save() obj.qrcode = makeqr_examtest( 'https://safeyun.ctcshe.com/miniprogram/examtest?id='+str(obj.id)) @@ -6317,6 +6319,8 @@ def apiexamtest(req): obj.ispublic = 1 else: obj.ispublic = 0 + if 'retest_count' in data and data['retest_count']: + obj.retest_count = data['retest_count'] obj.save() obj.qrcode = makeqr_examtest( 'https://safeyun.ctcshe.com/miniprogram/examtest?id='+str(obj.id)) @@ -6375,32 +6379,37 @@ def apiexamtest(req): elif a == 'detail2': id = req.GET.get('id') a = ExamTest.objects.filter(id=id).values('id', 'num', 'name', 'starttime', 'endtime', 'duration', 'totalscore', - 'passscore', 'exampaper__total', 'createtime', 'state', 'exampaper__name', 'createuser__name', 'type', 'qrcode')[0] + 'passscore', 'exampaper__total', 'createtime', 'state', 'exampaper__name', 'createuser__name', 'type', 'qrcode', 'retest_count')[0] a['notinTime'] = 0 if a['starttime'] > datetime.now(): a['notinTime'] = 1 if 'endtime' in a and a['endtime'] < datetime.now(): a['notinTime'] = 1 objs = ExamTestDetail.objects.filter(examtest__id=id).order_by('-score','-took').values( - 'id', 'user__name', 'user__ubelongpart__partname', 'took', 'score', 'ison', 'passcode','starttime') + 'id', 'user__name', 'user__ubelongpart__partname', 'took', 'score', 'ison', 'passcode','starttime', 'testnum') a['cjrydetail'] = list(objs) a['ison'] = 0 - tests = ExamTestDetail.objects.filter(examtest__id=id,user__userid=userid)#考试记录 - if tests.exists(): - a['ison'] = tests[0].ison + a['testnum'] = 0 + queryset = ExamTestDetail.objects.filter(examtest__id=id,user__userid=userid) + if queryset.exists(): + a['ison'] = queryset[0].ison + a['testnum'] = queryset[0].testnum return HttpResponse(json.dumps(a, cls=MyEncoder), content_type="application/json") elif a == 'detail': id = req.GET.get('id') a = ExamTest.objects.filter(id=id).values('id', 'num', 'name', 'starttime', 'endtime', 'duration', 'totalscore', - 'passscore', 'exampaper__total', 'createtime', 'state', 'exampaper__name', 'createuser__name', 'type', 'qrcode')[0] + 'passscore', 'exampaper__total', 'createtime', 'state', 'exampaper__name', 'createuser__name', 'type', 'qrcode', 'retest_count')[0] a['notinTime'] = 0 if a['starttime'] > datetime.now(): a['notinTime'] = 1 if 'endtime' in a and a['endtime'] < datetime.now(): a['notinTime'] = 1 a['ison'] = 0 - if ExamTestDetail.objects.filter(examtest__id=id,user__userid=userid,ison=1).exists(): - a['ison'] = 1 + a['testnum'] = 0 + queryset = ExamTestDetail.objects.filter(examtest__id=id,user__userid=userid) + if queryset.exists(): + a['ison'] = queryset[0].ison + a['testnum'] = queryset[0].testnum return HttpResponse(json.dumps(a, cls=MyEncoder), content_type="application/json") elif a == 'detailtm': id = req.GET.get('id')