main.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. """
  2. 功能:绑定试卷和填入音频次数
  3. author:pengchen
  4. 时间:2020/09/14
  5. """
  6. import config
  7. import datetime
  8. import pandas as pd
  9. from cloudinf import cloudInf
  10. def main():
  11. inf=cloudInf()
  12. #获取考试相关信息
  13. result=inf.findexam(protocal=config.protocal, domain=config.domain,examId=config.examId)
  14. examname=result.json()["name"]
  15. examType=result.json()["examType"]
  16. bindpaperList = pd.DataFrame(columns=["考试ID","考试名称", "课程代码", "课程名称", "卷型", "试卷名称", "绑定几率","是否有音频"])
  17. #获取课程相关信息
  18. result=inf.findcourse(protocal=config.protocal, domain=config.domain,examId=config.examId)
  19. courseLst=result.json()
  20. for course in courseLst:
  21. #获取所有试卷
  22. result=inf.getGenPaper(protocal=config.protocal, domain=config.domain, courseNo=course["courseCode"])
  23. paperList=result.json()
  24. #获取所有卷型
  25. result=inf.queryExamCoursePaperTypeLis(protocal=config.protocal, examId=config.examId,domain=config.domain,courseId=course["courseId"])
  26. paperGroupList=result.json()
  27. #根据条件过滤paperList
  28. audioconfigreqdataLst=[]
  29. exampaperList=[]
  30. for paperGroup in paperGroupList:
  31. filterLst=filterPaper(paperGroup["paperType"],paperList)
  32. if config.numberrule:
  33. number = min(int(config.numberrule), len(filterLst))
  34. else:
  35. number=len(filterLst)
  36. #计算weight
  37. numlst=split_integer(100,number)
  38. #开始生成绑定试卷
  39. for i in range(0,number):
  40. #生成绑定试卷值
  41. exampaper = {
  42. "groupCode": paperGroup["paperType"],
  43. "paper": {
  44. "id": filterLst[i]["id"]
  45. },
  46. "weight":numlst[i]
  47. }
  48. exampaperList.append(exampaper)
  49. audioconfigreqdata = {
  50. "courseCode": course["courseCode"],
  51. "examId": config.examId,
  52. "examName": examname,
  53. "groupCode": paperGroup["paperType"],
  54. "paper": {
  55. "id": filterLst[i]["id"]
  56. },
  57. "paperName": filterLst[i]["name"]
  58. }
  59. # 获取所有音频配置
  60. result = inf.getAudioConfig(protocal=config.protocal, data=[audioconfigreqdata],
  61. domain=config.domain)
  62. if len(result.json())==0:
  63. audioflag=False
  64. else:
  65. #修改配置信息并存入List
  66. audioflag=True
  67. # bindpaper = [config.examId, examname, course["courseCode"], course["name"], paperGroup["paperType"],
  68. # filterLst[i]["name"], numlst[i],audioflag]
  69. bindpaperList=bindpaperList.append(
  70. {"考试ID": config.examId, "考试名称": examname, "课程代码": course["courseCode"], "课程名称": course["courseName"],
  71. "卷型": paperGroup["paperType"], "试卷名称": filterLst[i]["name"], "绑定几率": numlst[i],
  72. "是否有音频": audioflag},ignore_index=True)
  73. # 开始获取音频信息
  74. audioconfigreqdataLst.append(audioconfigreqdata)
  75. #开始绑定试卷
  76. exampaperdata = {
  77. "examId": config.examId,
  78. "examName": examname,
  79. "examType": examType,
  80. "courseCode": course["courseCode"],
  81. "courseName": "",
  82. "callType": "WHOLE_SET",
  83. "scrambling_the_question_order": 0,
  84. "scrambling_the_option_order": 0,
  85. "examPaperList": exampaperList
  86. }
  87. print(exampaperdata)
  88. result = inf.bindpaper(protocal=config.protocal, data=exampaperdata, domain=config.domain)
  89. if result.status_code == 200:
  90. print(course["courseCode"], "bind paper success")
  91. else:
  92. print(course["courseCode"], "bind paper failed")
  93. #开始获取音频信息
  94. # 获取所有音频配置
  95. result = inf.getAudioConfig(protocal=config.protocal, data=audioconfigreqdataLst,
  96. domain=config.domain)
  97. # 将音频配置存入json文件中
  98. audioconfiglist = []
  99. for audioconfig in result.json():
  100. audioconfig["playTime"] = str(config.playtime)
  101. audioconfiglist.append(audioconfig)
  102. if audioconfiglist:
  103. result = inf.addAudioConfig(protocal=config.protocal, paperdata=audioconfiglist,
  104. domain=config.domain)
  105. if result.status_code == 200:
  106. print(course["courseCode"], "add audioconfig success")
  107. else:
  108. print(course["courseCode"], "add audioconfig failed")
  109. bindpaperList.to_excel("bindpaper.xlsx",index=False)
  110. def filterPaper(paperGroup,paperList):
  111. filterList=[]
  112. for paper in paperList:
  113. flag=True
  114. if config.timerule:
  115. #如果不为空,则按照此timerule匹配
  116. createtime=paper["createTime"]
  117. configcreatetime=config.timerule
  118. createtime=datetime.datetime.strptime(createtime,"%Y-%m-%d %H:%M:%S")
  119. configcreatetime=datetime.datetime.strptime(configcreatetime,"%Y-%m-%d %H:%M:%S")
  120. if createtime<configcreatetime:
  121. flag=False
  122. if config.keywordrule:
  123. keywordLst=config.keywordrule.split("#")
  124. if paper["name"].contains(paperGroup) or filterkeyword(paper["name"],keywordLst):
  125. pass
  126. else:
  127. flag=False
  128. if flag:
  129. filterList.append(paper)
  130. return filterList
  131. def filterkeyword(name,keywordlist):
  132. for keyword in keywordlist:
  133. if name.contains(keyword):
  134. return True
  135. return False
  136. def findpaper(papername,paperList):
  137. for paper in paperList:
  138. if paper["name"]==papername:
  139. return paper
  140. def split_integer(m, n):
  141. assert n > 0
  142. quotient = int(m / n)
  143. remainder = m % n
  144. if remainder > 0:
  145. return [quotient] * (n - remainder) + [quotient + 1] * remainder
  146. if remainder < 0:
  147. return [quotient - 1] * -remainder + [quotient] * (n + remainder)
  148. return [quotient] * n
  149. if __name__=="__main__":
  150. main()