""" 功能:一次性导出云阅卷需要的所有内容 时间:2020/03/17 author:pengchen """ import cloudservice import config import os import json import logger import htmlhandler import csv questionlist=[] solvelist=[] examstudentlist=[] mediaimportlist=[] question_cookie={} output = config.outputpath + "/" + str(config.examId) if not os.path.exists(output): os.makedirs(output) savepath = output + "/" + "question.csv" student_savepath=output + "/" + "examstudent.csv" mediaimport_savepath=output + "/" + "mediaimport.csv" #coursecodelst=["10021","10118","10451","10533","10737","10054",""] def main(): result=cloudservice.queryExamMarkingInfo() if result: examRecordForMarkingBeanList = result['examRecordForMarkingBeanList'] for examRecordForMarkingBean in examRecordForMarkingBeanList: handleRecordData(examRecordForMarkingBean["courseId"],1) # with open(savepath, 'w', encoding='utf-8', newline='') as f: # writer = csv.writer(f) # writer.writerow(['科目代码','科目名称','大题名称','main_number','sub_number','分值']) # for row in questionlist: # writer.writerow(row) # with open(mediaimport_savepath, 'w', encoding='utf-8', newline='') as f: # writer = csv.writer(f) # writer.writerow(['准考证号', '卷型']) # for row in mediaimportlist: # writer.writerow(row) # with open(student_savepath, 'w', encoding='utf-8', newline='') as f: # writer = csv.writer(f) # writer.writerow(["课程代码", "课程名称", "准考证号", "学号", "姓名"]) # for row in examstudentlist: # writer.writerow(row) def handleRecordData(courseId,next): result=cloudservice.queryExamValidRecordData(courseId,next); if result: examRecordForMarkingBeanList=result["examRecordForMarkingBeanList"] if len(examRecordForMarkingBeanList) > 0: for examRecordForMarking in examRecordForMarkingBeanList: # 取试卷题目 logger.info("examRecordId %s handle start" % (str(examRecordForMarking["examRecordDataId"]))) course = cloudservice.getCourse(examRecordForMarking['courseId'])["courseList"][0] # examstudent = cloudservice.queryExamStudent(examRecordForMarking["examStudentId"]) # mediaimportlist.append( # [examRecordForMarking["examRecordDataId"], examRecordForMarking["paperType"]]) # examstudentlist.append([examstudent["courseCode"], examstudent["courseName"], # examRecordForMarking["examRecordDataId"], examstudent["identityNumber"], # examstudent["studentName"]]) # output = config.outputpath + "/" + str(config.examId) + "/" + str(course["code"]) + "-" + \ # examRecordForMarking["paperType"] # if not os.path.exists(output): # os.makedirs(output) # savepath = output + "/" + str(examRecordForMarking["examRecordDataId"]) + ".json" if examRecordForMarking["basePaperId"] in solvelist: pass else: solvelist.append(examRecordForMarking["basePaperId"]) handlePaperStruct(course["code"], examRecordForMarking["paperType"], examRecordForMarking["basePaperId"], course["name"]) # if course["code"] in solvelist: # logger.info("已包含%s"%(course["code"])) # else: # logger.info("开始处理" + str(course["code"])) # solvelist.append(course["code"]) # handlePaperStruct(course["code"],examRecordForMarking["paperType"],examRecordForMarking["basePaperId"],course["name"]) # if os.path.exists(savepath): # logger.info("已有%s记录不再次进行处理" % str(examRecordForMarking["examRecordDataId"])) # continue # #取每个人试卷的内容 # subjectdetail = cloudservice.querySubjectInfo(examRecordForMarking["examRecordDataId"]) # questionbeanlist=handleStudentPaperDetail(examRecordForMarking["examRecordDataId"],subjectdetail,course["code"],examRecordForMarking["paperType"]) # # 存储到本地 # with open(savepath, "w", encoding="utf-8") as file: # json_str = json.dumps(questionbeanlist, indent=4, ensure_ascii=False) # file.write(json_str) logger.info("examRecordId %s handle end" % (str(examRecordForMarking["examRecordDataId"]))) next = result["next"] handleRecordData(examRecordForMarking['courseId'], next) def handleStudentPaperDetail(examRecordid,subjectdetail,courseCode,paperType): questionBeanList = [] querySubjectiveAnswerBeanList = subjectdetail["querySubjectiveAnswerBeanList"] question_unit_number = 1 lastquestionId = None for querySubjectiveAnswerBean in querySubjectiveAnswerBeanList: questionId = querySubjectiveAnswerBean["questionId"] main_number = querySubjectiveAnswerBean["mainNumber"] sub_number = querySubjectiveAnswerBean["order"] studentanswer = querySubjectiveAnswerBean["studentAnswer"] mainbodyblocklist = None if lastquestionId == questionId: question_unit_number = question_unit_number + 1 # 下一道主观题 else: lastquestionId = questionId question_unit_number = 1 if questionId in question_cookie: questiondata=question_cookie[questionId] else: questiondata = cloudservice.getQuestion(questionId, courseCode, paperType) question_cookie[questionId]=questiondata if questiondata["defaultQuestion"]["masterVersion"]["body"]: # 套题处理 mainquestionbody = questiondata["defaultQuestion"]["masterVersion"]["body"] mainbodyblocklist = htmlhandler.splitQuestionBody(mainquestionbody) questionUnitList = questiondata["defaultQuestion"]["masterVersion"]["questionUnitList"] current_subjective_number = 1 for questionUnit in questionUnitList: sub_ques_body = questionUnit["body"] print(questionUnit["questionType"]) if questionUnit["questionType"] == "FILL_UP" or questionUnit["questionType"] == "ESSAY": if current_subjective_number == question_unit_number: questionBean = { "mainNumber": main_number, "subNumber": sub_number, "studentAnswer": { "sections": [] }, "answer": { "sections": [] }, "body": { "sections": [] } } quesbodyblocklist = htmlhandler.splitQuestionBody(sub_ques_body) if mainbodyblocklist: questionBean["body"]["sections"] = mainbodyblocklist + quesbodyblocklist else: questionBean["body"]["sections"] = quesbodyblocklist questionBean["studentAnswer"]["sections"] =htmlhandler.splitQuesitonStudentAnswer(examRecordid,studentanswer, questionUnit["answerType"], questionUnit["questionType"]) questionBean["answer"]["sections"] = htmlhandler.splitQuesitonAnswer(questionUnit["rightAnswer"][0]) questionBeanList.append(questionBean) current_subjective_number = current_subjective_number + 1 return questionBeanList def handlePaperStruct(courseCode,groupCode,paperId,courseName): result=cloudservice.queryPaperStruct(courseCode,groupCode,paperId,courseName) if result: questionGroupList = result["defaultPaper"]["questionGroupList"] main_number = 1 order = 1 for questionGroup in questionGroupList: questionWrapperList = questionGroup["questionWrapperList"] for questionWrapper in questionWrapperList: questionUnitWrapperList = questionWrapper["questionUnitWrapperList"] for questionUnitWrapper in questionUnitWrapperList: questionbean = [] if questionUnitWrapper["questionType"] == "ESSAY" or questionUnitWrapper["questionType"] == "FILL_UP": questionbean.append(courseCode) questionbean.append(courseName) questionbean.append("第%d大题" % (main_number)) questionbean.append(main_number) questionbean.append(order) questionScore = questionUnitWrapper["questionScore"] questionbean.append(questionScore) questionlist.append(questionbean) order = order + 1 main_number = main_number + 1 else: solvelist.remove(courseCode) if __name__=="__main__": main()