def judge_keguan(request): postjson = jh.post2json(request) action = postjson['action'] paperid = postjson['paperid'] ph = PaperHelper() ret = {'code': 404, 'info': 'unknown action ' + action} if action == 'judge_keguan': # take out each submit and compare with normal answer # then save the result into the model. print("paperId is" + paperid) paper = Paper.objects.get(pid=paperid) answerlist = TestRecord.objects.filter(Q(paperid=paperid) & Q(confirmed='no')) for var in answerlist: # print(var.answers) score = ph.JudgeKeguan(json.loads(var.answers), json.loads(paper.prolist)) # print(score) record = TestRecord.objects.get(Q(stuid=var.stuid) & Q(paperid=paperid) & Q(confirmed='no')) record.keguan_grade = json.dumps(score['score']) record.keguan_detail = json.dumps(score['detail']) record.save() pass ret = {'code': 200, 'info': 'ok'} ### pass elif action == 'clean_keguan': answerlist = TestRecord.objects.filter(Q(paperid=paperid) & Q(confirmed='no')).update(keguan_grade=-1, keguan_detail="") ret = {'code': 200, 'info': 'ok'} pass return HttpResponse(json.dumps(ret), content_type="application/json")
def judge_zhuguan(request): postjson = jh.post2json(request) action = postjson['action'] paperid = postjson['paperid'] ph = PaperHelper() ret = {'code': 404, 'info': 'unknown action ' + action} if action == 'getans': stuid = postjson['stuid'] student = TestRecord.objects.get(Q(stuid=stuid) & Q(paperid=paperid)) zhuguan = ph.GetZhuguan(json.loads(student.answers)) judge = {} has_judge = 0 if student.zhuguan_grade != -1: judge = student.zhuguan_detail judge = json.loads(judge) has_judge = 1 # print(zhuguan) ret = {'code': 200, 'count': zhuguan['count'], 'list': zhuguan['zhuguan_list'], 'has_judge': has_judge, 'judge': judge, 'confirmed': student.confirmed} pass elif action == 'submit': stuid = postjson['stuid'] record = TestRecord.objects.get(Q(stuid=stuid) & Q(paperid=paperid) & Q(confirmed='no')) record.zhuguan_grade = json.dumps(postjson['score']) record.zhuguan_detail = json.dumps(postjson['detail']) record.save() ret = {'code': 200, 'info': 'ok'} pass elif action == 'clean_zhuguan': answerlist = TestRecord.objects.filter(Q(paperid=paperid) & Q(confirmed='no')).update(zhuguan_grade=-1, zhuguan_detail="") ret = {'code': 200, 'info': 'ok'} pass elif action == 'getpro': paper = Paper.objects.get(pid=paperid) pro = ph.GetProb(json.loads(paper.prolist)['question_list'], postjson['proid']) ret = {'code': 200, 'problem': pro['problem'], 'right': pro['right']} pass elif action == 'nextid': records = TestRecord.objects.filter(Q(paperid=paperid) & Q(zhuguan_grade=-1) & Q(confirmed='no')) if records.count() == 0: ret = {'code': 201, 'info': 'no next student is found'} else: ret = {'code': 200, 'nextid': records[0].stuid} pass return HttpResponse(json.dumps(ret), content_type="application/json")
def auto_save(request): ret = {'code': 403, 'info': 'denied method ' + request.method} ph = PaperHelper() if request.method == 'POST': # acquire paperid from form postjson = jh.post2json(request) print(postjson) paperid = postjson['paperid'] storeid = postjson['storeid'] print(paperid) paperdb = Paper.objects.get(pid=paperid) original_prolist = json.loads(paperdb.prolist) prolist = postjson['prolist'] for pro in prolist: if pro['valid'] == 'false': continue problem = pro['problem'] ptype = pro['type'] if ptype == '主观题': ptype = 'zhuguan' else: ptype = 'keguan' point = pro['point'] right = pro['right'] wrong1 = pro['wrong1'] wrong2 = pro['wrong2'] wrong3 = pro['wrong3'] ph.AddPro(original_prolist, problem, ptype, point, right, wrong1, wrong2, wrong3) paperdb.prolist = json.dumps(original_prolist) paperdb.save() ''' paperdb = Paper.objects.get(pid = paperid) original_prolist = json.loads(paperdb.prolist) ph.AddPro(original_prolist, problem["problem"], problem["ptype"], problem["point"], problem["right"], problem["wrong1"], problem["wrong2"], problem["wrong3"]) paperdb.prolist = json.dumps(original_prolist) paperdb.save() ''' # delete file after used ret = {'code': 200, 'info': 'ok'} pass return HttpResponse(json.dumps(ret), content_type="application/json")
def modify_paper_stulist(request): postjson = jh.post2json(request) paperid = postjson['paperid'] action = postjson['action'] ph = PaperHelper() ret = {'code': 404, 'info': 'unknown action' + action} # TODO(LOW): verify paperid whether existing ### print(paperid) paperdb = Paper.objects.get(pid=paperid) if (action == 'addstu'): stulist = postjson['stulist'] stuarray = stulist.split(';') original_stulist = json.loads(paperdb.stulist) count = 0 for var in stuarray: # TODO(LOW): verify var(stuid) whether existing # result = UserList.objects.filter(username=var) if not result.exists(): continue if (var == ''): continue ph.AddStu(original_stulist, var) count += 1 paperdb.stulist = json.dumps(original_stulist) paperdb.save() ret = {'code': 200, 'info': 'ok', 'count': count} elif (action == 'delstu'): stu_to_del = postjson['stu_to_del'] original_stulist = json.loads(paperdb.stulist) ph.DelStu(original_stulist, stu_to_del) paperdb.stulist = json.dumps(original_stulist) paperdb.save() ret = {'code': 200, 'info': 'ok', 'deleted': stu_to_del} elif (action == 'cleanstu'): original_stulist = json.loads(paperdb.stulist) gradelist = json.loads(paperdb.stulist) count = original_stulist['count'] empty_list = ph.CreateStuList() paperdb.stulist = json.dumps(empty_list) paperdb.save() ret = {'code': 200, 'info': 'ok', 'count': count} return HttpResponse(json.dumps(ret), content_type="application/json")
def judge_manage(request): ret = {'code': 200, 'info': 'ok'} postjson = jh.post2json(request) action = postjson['action'] paperid = postjson['paperid'] ph = PaperHelper() if action == 'getans': ret = {'code': 200, 'info': 'ok'} # build the list of all students' answers retlist = [] illulist = [0, 0, 0, 0, 0] db = TestRecord.objects.filter(paperid=paperid) for var in db: retlist.append(claRecord(var.paperid, var.stuid, var.submit_time, var.answers, var.keguan_grade, var.keguan_detail, var.zhuguan_grade, var.zhuguan_detail, var.total_score, var.confirmed)) print(var.total_score) if not var.confirmed == "yes": continue if (var.total_score < 60): illulist[0] += 1 elif var.total_score >= 90: illulist[4] += 1 else: illulist[int((var.total_score - 50) / 10)] += 1 print(illulist) jsonarr = json.dumps(retlist, default=lambda o: o.__dict__, sort_keys=True) loadarr = json.loads(jsonarr) ret = {'code': 200, 'info': 'ok', 'anslist': loadarr, 'illulist': illulist} ### elif action == 'delans': # delete the specified answer sheet from records stuname = postjson['stuname'] TestRecord.objects.filter(Q(stuid=stuname) & Q(paperid=paperid) & Q(confirmed='no')).delete() ret = {'code': 200, 'info': 'ok'} ### elif action == 'submit': records = TestRecord.objects.filter(Q(paperid=paperid) & Q(confirmed='no')) for var in records: record = TestRecord.objects.get(Q(stuid=var.stuid) & Q(paperid=paperid) & Q(confirmed='no')) record.confirmed = 'yes' record.total_score = record.keguan_grade + record.zhuguan_grade record.save() pass ret = {'code': 200, 'info': 'ok'} pass return HttpResponse(json.dumps(ret), content_type="application/json")
def result_manage(request): ph = PaperHelper() ret = {'code': 404, 'info': 'unknown method ' + request.method} if request.method == 'GET': paperid = request.GET.get('paperid') stuid = request.session['login_name'] db = Paper.objects.get(pid=paperid) paper_pro = json.loads(db.prolist) db1 = TestRecord.objects.get(paperid=paperid, stuid=stuid) stu_res = json.loads(db1.answers) zhuguan_grd = json.loads(db1.zhuguan_detail) test = ph.Paper2Result(paper_pro, stu_res, zhuguan_grd) ### subcount = TestRecord.objects.filter(paperid=paperid).count() infoname_t = UserInfo.objects.filter(username=db.teaname).values("name")[0]["name"] test_info = json.dumps(claPaper(db.pid, db.pname, db.teaname, db.penabled, 'notused', 'notused', str(subcount), infoname_t), default=lambda o: o.__dict__, sort_keys=True) test_info = json.loads(test_info) # print(test) ret = {'code': 200, 'info': 'ok', 'test': test, 'test_info': test_info} return HttpResponse(json.dumps(ret), content_type="application/json")