NodeService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. package edu.nju.service;
  2. import edu.nju.dao.*;
  3. import edu.nju.entities.*;
  4. import org.json.JSONArray;
  5. import org.json.JSONObject;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. @Service
  11. public class NodeService {
  12. @Autowired
  13. AnswerNodeDao answerNodeDao;
  14. @Autowired
  15. BasicNodeDao basicNodeDao;
  16. @Autowired
  17. ReviewItemDao reviewItemDao;
  18. @Autowired
  19. ReviewJobDao reviewJobDao;
  20. @Autowired
  21. ReviewPaperDao reviewPaperDao;
  22. @Autowired
  23. ReviewReportDao reviewReportDao;
  24. @Autowired
  25. ReviewCorrectAnswerDao reviewCorrectAnswerDao;
  26. @Autowired
  27. ReviewAnswerDao reviewAnswerDao;
  28. public BasicNode generateBasicNode(String jobId,String teacherId){
  29. ReviewJob reviewJob=reviewJobDao.findJob(jobId);
  30. ReviewPaper reviewPaper=reviewPaperDao.findPaper(reviewJob.getPaper_id());
  31. List<ReviewReport> reviewReportList=reviewReportDao.getReportsByPaperId(reviewPaper.getId());
  32. //构建元node
  33. JSONObject nodeJson = new JSONObject();
  34. JSONArray categoryArray=new JSONArray();
  35. JSONObject categoryObject=new JSONObject();
  36. categoryObject.put("name","CrowdReview");
  37. categoryArray.put(categoryObject);
  38. nodeJson.put("categories",categoryArray);
  39. JSONArray nodesArray=new JSONArray();
  40. for(ReviewReport reviewReport:reviewReportList){
  41. String reportId=reviewReport.getId();
  42. List<ReviewItem> reviewItemList=reviewItemDao.findItemsByReport(reportId);
  43. for(ReviewItem reviewItem:reviewItemList){
  44. String itemId=reviewItem.getId();
  45. ReviewCorrectAnswer correctAnswer=reviewCorrectAnswerDao.findCorrectAnswerByReportItem(reportId,itemId,jobId);
  46. if(reviewItem.getType().equals("Multiple")){
  47. List<String> answers=correctAnswer.getCorrect_answer();
  48. int num=0;
  49. for(int i=0;i<answers.size();i++){
  50. if(answers.get(i).equals("1")){
  51. num++;
  52. }
  53. }
  54. if(num!=0){
  55. for(int i=0;i<answers.size();i++){
  56. String answer=answers.get(i);
  57. if(answer.equals("1")){
  58. JSONObject node=new JSONObject();
  59. node.put("name", jobId + "/" + reportId + "/" + itemId+"/"+i);
  60. node.put("location", jobId + "/" + reportId + "/" + itemId+"/"+i);
  61. node.put("description", reviewItem.getType());
  62. node.put("category", "CrowdReview");
  63. node.put("weight", String.valueOf(Double.parseDouble(correctAnswer.getGrade())/num));
  64. nodesArray.put(node);
  65. }
  66. }
  67. }
  68. }else {
  69. JSONObject node=new JSONObject();
  70. node.put("name", jobId + "/" + reportId + "/" + itemId);
  71. node.put("location", jobId + "/" + reportId + "/" + itemId);
  72. node.put("description", reviewItem.getType());
  73. node.put("category", "CrowdReview");
  74. node.put("weight", correctAnswer.getGrade());
  75. nodesArray.put(node);
  76. }
  77. }
  78. }
  79. nodeJson.put("nodes",nodesArray);
  80. BasicNode basicNode=new BasicNode(jobId,teacherId,nodesArray.toString());
  81. System.out.println(nodeJson);
  82. return basicNode;
  83. }
  84. public AnswerNode generateCatchNode(String jobId,String workerId){
  85. ReviewJob reviewJob=reviewJobDao.findJob(jobId);
  86. ReviewPaper reviewPaper=reviewPaperDao.findPaper(reviewJob.getPaper_id());
  87. List<ReviewReport> reviewReportList=reviewReportDao.getReportsByPaperId(reviewPaper.getId());
  88. //构建catchNode
  89. JSONArray catchNodeArray = new JSONArray();
  90. for(ReviewReport reviewReport:reviewReportList){
  91. String reportId=reviewReport.getId();
  92. List<ReviewItem> reviewItemList=reviewItemDao.findItemsByReport(reportId);
  93. for(ReviewItem reviewItem:reviewItemList){
  94. String itemId=reviewItem.getId();
  95. //此时reviewAnswer一定已经被创建
  96. ReviewAnswer reviewAnswer=reviewAnswerDao.findAnswerByWorkerJobReportItem(jobId,reportId,workerId,itemId);
  97. ReviewCorrectAnswer reviewCorrectAnswer=reviewCorrectAnswerDao.findCorrectAnswerByReportItem(reportId,itemId,jobId);
  98. //多选题
  99. if(reviewItem.getType().equals("Multiple")){
  100. List<String> answers=reviewAnswer.getAnswers();
  101. List<String> correctAnswers=reviewCorrectAnswer.getCorrect_answer();
  102. int num=0;
  103. //共有几个正确选项
  104. for(int i=0;i<correctAnswers.size();i++){
  105. if(correctAnswers.get(i).equals("1")){
  106. num++;
  107. }
  108. }
  109. if(num!=0){
  110. List<JSONObject> multipleNodeList=new ArrayList<>();
  111. boolean chooseWrong=false;
  112. //是否作答
  113. if(answers.size()!=correctAnswers.size()){
  114. for (int i = 0; i < correctAnswers.size(); i++) {
  115. JSONObject node = new JSONObject();
  116. node.put("category", "CrowdReview");
  117. node.put("ifCatch", false);
  118. node.put("nodeName", jobId + "/" + reportId + "/" + itemId + "/" + i);
  119. multipleNodeList.add(node);
  120. }
  121. chooseWrong=true;
  122. }else {
  123. for (int i = 0; i < correctAnswers.size(); i++) {
  124. String correctAnswer = correctAnswers.get(i);
  125. String answer = answers.get(i);
  126. JSONObject node = new JSONObject();
  127. if (correctAnswer.equals("1")) {
  128. if (answer.equals("1")) {
  129. node.put("category", "CrowdReview");
  130. node.put("ifCatch", true);
  131. node.put("nodeName", jobId + "/" + reportId + "/" + itemId + "/" + i);
  132. } else {
  133. node.put("category", "CrowdReview");
  134. node.put("ifCatch", false);
  135. node.put("nodeName", jobId + "/" + reportId + "/" + itemId + "/" + i);
  136. }
  137. multipleNodeList.add(node);
  138. } else if (correctAnswer.equals("")) {
  139. if (answer.equals("1")) {
  140. chooseWrong = true;
  141. break;
  142. }
  143. }
  144. }
  145. }
  146. //有一个选错,则多选题不得分
  147. if(chooseWrong){
  148. for(JSONObject node:multipleNodeList){
  149. node.put("ifCatch",false);
  150. catchNodeArray.put(node);
  151. }
  152. }
  153. //否则按选中的个数得分
  154. else{
  155. for(JSONObject node:multipleNodeList){
  156. catchNodeArray.put(node);
  157. }
  158. }
  159. }
  160. }
  161. //单选题
  162. else if(reviewItem.getType().equals("Single")) {
  163. List<String> answers=reviewAnswer.getAnswers();
  164. List<String> correctAnswers=reviewCorrectAnswer.getCorrect_answer();
  165. boolean chooseWrong=false;
  166. if(answers.size()!=correctAnswers.size()){
  167. chooseWrong=true;
  168. }else {
  169. for (int i = 0; i < correctAnswers.size(); i++) {
  170. String correctAnswer = correctAnswers.get(i);
  171. String answer = answers.get(i);
  172. if (!answer.equals(correctAnswer)) {
  173. chooseWrong = true;
  174. break;
  175. }
  176. }
  177. }
  178. JSONObject node=new JSONObject();
  179. node.put("category", "CrowdReview");
  180. node.put("nodeName", jobId + "/" + reportId + "/" + itemId);
  181. node.put("ifCatch",!chooseWrong);
  182. catchNodeArray.put(node);
  183. }
  184. //描述题和文件题,默认只要有作答就得分
  185. else if(reviewItem.getType().equals("Description")){
  186. List<String> answers=reviewAnswer.getAnswers();
  187. boolean hasContent=false;
  188. for(String answer:answers){
  189. if(!answer.equals("")){
  190. hasContent=true;
  191. break;
  192. }
  193. }
  194. JSONObject node=new JSONObject();
  195. node.put("category", "CrowdReview");
  196. node.put("nodeName", jobId + "/" + reportId + "/" + itemId);
  197. node.put("ifCatch",hasContent);
  198. catchNodeArray.put(node);
  199. }else if(reviewItem.getType().equals("File")){
  200. List<String> fileList=reviewAnswer.getFile_url();
  201. boolean hasContent=false;
  202. for(String file:fileList){
  203. if(!file.equals("")){
  204. hasContent=true;
  205. break;
  206. }
  207. }
  208. JSONObject node=new JSONObject();
  209. node.put("category", "CrowdReview");
  210. node.put("nodeName", jobId + "/" + reportId + "/" + itemId);
  211. node.put("ifCatch",hasContent);
  212. catchNodeArray.put(node);
  213. }
  214. }
  215. }
  216. System.out.println(catchNodeArray);
  217. AnswerNode answerNode=new AnswerNode(jobId,workerId,catchNodeArray.toString(),"0");
  218. return answerNode;
  219. }
  220. }