""" 功能:一次性导出云阅卷需要的所有内容 时间:2020/03/17 author:pengchen """ import csv import os import cloudservice import config import htmlhandler import logger 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" def main(): result = cloudservice.queryExamMarkingInfo() if result: examRecordForMarkingBeanList = result['examRecordForMarkingBeanList'] for examRecordForMarkingBean in examRecordForMarkingBeanList: handleRecordData(examRecordForMarkingBean["courseId"], 1) with open(savepath, 'w', encoding='gbk', 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='gbk', newline='') as f: writer = csv.writer(f) writer.writerow(['准考证号', '卷型']) for row in mediaimportlist: writer.writerow(row) with open(student_savepath, 'w', encoding='gbk', 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: # examRecordDataId = str(examRecordForMarking["examRecordDataId"]); # if examRecordDataId != "39881554" and examRecordDataId != "39879641": # # logger.info("不用处理,跳过!examRecordDataId = %s" % examRecordDataId) # continue print("开始处理 examRecordDataId = %s" % 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 course["code"] in solvelist: logger.info("已包含课程代码:%s" % (course["code"])) else: print("开始处理课程代码:" + str(course["code"])) solvelist.append(course["code"]) handlePaperStruct(course["code"], examRecordForMarking["paperType"], examRecordForMarking["basePaperId"], course["name"]) if os.path.exists(savepath): logger.info("已处理,跳过!examRecordDataId = %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()