check.py 9.4 KB

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