exportExamRecord.py 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. """
  2. 功能:一次性导出云阅卷需要的所有内容
  3. 时间:2020/03/17
  4. author:pengchen
  5. """
  6. import csv
  7. import os
  8. import cloudservice
  9. import config
  10. import htmlhandler
  11. import logger
  12. questionlist = []
  13. solvelist = []
  14. examstudentlist = []
  15. mediaimportlist = []
  16. question_cookie = {}
  17. output = config.outputpath + "/" + str(config.examId)
  18. if not os.path.exists(output):
  19. os.makedirs(output)
  20. savepath = output + "/" + "question.csv"
  21. student_savepath = output + "/" + "examstudent.csv"
  22. mediaimport_savepath = output + "/" + "mediaimport.csv"
  23. def main():
  24. result = cloudservice.queryExamMarkingInfo()
  25. if result:
  26. examRecordForMarkingBeanList = result['examRecordForMarkingBeanList']
  27. for examRecordForMarkingBean in examRecordForMarkingBeanList:
  28. handleRecordData(examRecordForMarkingBean["courseId"], 1)
  29. with open(savepath, 'w', encoding='gbk', newline='') as f:
  30. writer = csv.writer(f)
  31. writer.writerow(['科目代码', '科目名称', '大题名称', 'main_number', 'sub_number', '分值'])
  32. for row in questionlist:
  33. writer.writerow(row)
  34. with open(mediaimport_savepath, 'w', encoding='gbk', newline='') as f:
  35. writer = csv.writer(f)
  36. writer.writerow(['准考证号', '卷型'])
  37. for row in mediaimportlist:
  38. writer.writerow(row)
  39. with open(student_savepath, 'w', encoding='gbk', newline='') as f:
  40. writer = csv.writer(f)
  41. writer.writerow(["课程代码", "课程名称", "准考证号", "学号", "姓名"])
  42. for row in examstudentlist:
  43. writer.writerow(row)
  44. def handleRecordData(courseId, next):
  45. result = cloudservice.queryExamValidRecordData(courseId, next);
  46. if result:
  47. examRecordForMarkingBeanList = result["examRecordForMarkingBeanList"]
  48. if len(examRecordForMarkingBeanList) > 0:
  49. for examRecordForMarking in examRecordForMarkingBeanList:
  50. # examRecordDataId = str(examRecordForMarking["examRecordDataId"]);
  51. # if examRecordDataId != "39881554" and examRecordDataId != "39879641":
  52. # # logger.info("不用处理,跳过!examRecordDataId = %s" % examRecordDataId)
  53. # continue
  54. print("开始处理 examRecordDataId = %s" % str(examRecordForMarking["examRecordDataId"]))
  55. # 取试卷题目
  56. course = cloudservice.getCourse(examRecordForMarking['courseId'])["courseList"][0]
  57. examstudent = cloudservice.queryExamStudent(examRecordForMarking["examStudentId"])
  58. mediaimportlist.append(
  59. [examRecordForMarking["examRecordDataId"], examRecordForMarking["paperType"]])
  60. examstudentlist.append([examstudent["courseCode"], examstudent["courseName"],
  61. examRecordForMarking["examRecordDataId"], examstudent["identityNumber"],
  62. examstudent["studentName"]])
  63. output = config.outputpath + "/" + str(config.examId) + "/" + str(course["code"]) + "-" + \
  64. examRecordForMarking["paperType"]
  65. if not os.path.exists(output):
  66. os.makedirs(output)
  67. savepath = output + "/" + str(examRecordForMarking["examRecordDataId"]) + ".json"
  68. if course["code"] in solvelist:
  69. logger.info("已包含课程代码:%s" % (course["code"]))
  70. else:
  71. print("开始处理课程代码:" + str(course["code"]))
  72. solvelist.append(course["code"])
  73. handlePaperStruct(course["code"], examRecordForMarking["paperType"],
  74. examRecordForMarking["basePaperId"], course["name"])
  75. if os.path.exists(savepath):
  76. logger.info("已处理,跳过!examRecordDataId = %s" % str(examRecordForMarking["examRecordDataId"]))
  77. continue
  78. # #取每个人试卷的内容
  79. # subjectdetail = cloudservice.querySubjectInfo(examRecordForMarking["examRecordDataId"])
  80. # questionbeanlist=handleStudentPaperDetail(examRecordForMarking["examRecordDataId"],subjectdetail,course["code"],examRecordForMarking["paperType"])
  81. # # 存储到本地
  82. # with open(savepath, "w", encoding="utf-8") as file:
  83. # json_str = json.dumps(questionbeanlist, indent=4, ensure_ascii=False)
  84. # file.write(json_str)
  85. # logger.info("examRecordId %s handle end" % (str(examRecordForMarking["examRecordDataId"])))
  86. next = result["next"]
  87. handleRecordData(examRecordForMarking['courseId'], next)
  88. def handleStudentPaperDetail(examRecordid, subjectdetail, courseCode, paperType):
  89. questionBeanList = []
  90. querySubjectiveAnswerBeanList = subjectdetail["querySubjectiveAnswerBeanList"]
  91. question_unit_number = 1
  92. lastquestionId = None
  93. for querySubjectiveAnswerBean in querySubjectiveAnswerBeanList:
  94. questionId = querySubjectiveAnswerBean["questionId"]
  95. main_number = querySubjectiveAnswerBean["mainNumber"]
  96. sub_number = querySubjectiveAnswerBean["order"]
  97. studentanswer = querySubjectiveAnswerBean["studentAnswer"]
  98. mainbodyblocklist = None
  99. if lastquestionId == questionId:
  100. question_unit_number = question_unit_number + 1 # 下一道主观题
  101. else:
  102. lastquestionId = questionId
  103. question_unit_number = 1
  104. if questionId in question_cookie:
  105. questiondata = question_cookie[questionId]
  106. else:
  107. questiondata = cloudservice.getQuestion(questionId, courseCode, paperType)
  108. question_cookie[questionId] = questiondata
  109. if questiondata["defaultQuestion"]["masterVersion"]["body"]:
  110. # 套题处理
  111. mainquestionbody = questiondata["defaultQuestion"]["masterVersion"]["body"]
  112. mainbodyblocklist = htmlhandler.splitQuestionBody(mainquestionbody)
  113. questionUnitList = questiondata["defaultQuestion"]["masterVersion"]["questionUnitList"]
  114. current_subjective_number = 1
  115. for questionUnit in questionUnitList:
  116. sub_ques_body = questionUnit["body"]
  117. print(questionUnit["questionType"])
  118. if questionUnit["questionType"] == "FILL_UP" or questionUnit["questionType"] == "ESSAY":
  119. if current_subjective_number == question_unit_number:
  120. questionBean = {
  121. "mainNumber": main_number,
  122. "subNumber": sub_number,
  123. "studentAnswer": {
  124. "sections": []
  125. },
  126. "answer": {
  127. "sections": []
  128. },
  129. "body": {
  130. "sections": []
  131. }
  132. }
  133. quesbodyblocklist = htmlhandler.splitQuestionBody(sub_ques_body)
  134. if mainbodyblocklist:
  135. questionBean["body"]["sections"] = mainbodyblocklist + quesbodyblocklist
  136. else:
  137. questionBean["body"]["sections"] = quesbodyblocklist
  138. questionBean["studentAnswer"]["sections"] = htmlhandler.splitQuesitonStudentAnswer(examRecordid,
  139. studentanswer,
  140. questionUnit[
  141. "answerType"],
  142. questionUnit[
  143. "questionType"])
  144. questionBean["answer"]["sections"] = htmlhandler.splitQuesitonAnswer(questionUnit["rightAnswer"][0])
  145. questionBeanList.append(questionBean)
  146. current_subjective_number = current_subjective_number + 1
  147. return questionBeanList
  148. def handlePaperStruct(courseCode, groupCode, paperId, courseName):
  149. result = cloudservice.queryPaperStruct(courseCode, groupCode, paperId, courseName)
  150. if result:
  151. questionGroupList = result["defaultPaper"]["questionGroupList"]
  152. main_number = 1
  153. order = 1
  154. for questionGroup in questionGroupList:
  155. questionWrapperList = questionGroup["questionWrapperList"]
  156. for questionWrapper in questionWrapperList:
  157. questionUnitWrapperList = questionWrapper["questionUnitWrapperList"]
  158. for questionUnitWrapper in questionUnitWrapperList:
  159. questionbean = []
  160. if questionUnitWrapper["questionType"] == "ESSAY" or questionUnitWrapper[
  161. "questionType"] == "FILL_UP":
  162. questionbean.append(courseCode)
  163. questionbean.append(courseName)
  164. questionbean.append("第%d大题" % (main_number))
  165. questionbean.append(main_number)
  166. questionbean.append(order)
  167. questionScore = questionUnitWrapper["questionScore"]
  168. questionbean.append(questionScore)
  169. questionlist.append(questionbean)
  170. order = order + 1
  171. main_number = main_number + 1
  172. else:
  173. solvelist.remove(courseCode)
  174. if __name__ == "__main__":
  175. main()