package edu.nju.service; import edu.nju.dao.*; import edu.nju.entities.*; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class NodeService { @Autowired AnswerNodeDao answerNodeDao; @Autowired BasicNodeDao basicNodeDao; @Autowired ReviewItemDao reviewItemDao; @Autowired ReviewJobDao reviewJobDao; @Autowired ReviewPaperDao reviewPaperDao; @Autowired ReviewReportDao reviewReportDao; @Autowired ReviewCorrectAnswerDao reviewCorrectAnswerDao; @Autowired ReviewAnswerDao reviewAnswerDao; public BasicNode generateBasicNode(String jobId,String teacherId){ ReviewJob reviewJob=reviewJobDao.findJob(jobId); ReviewPaper reviewPaper=reviewPaperDao.findPaper(reviewJob.getPaper_id()); List reviewReportList=reviewReportDao.getReportsByPaperId(reviewPaper.getId()); //构建元node JSONObject nodeJson = new JSONObject(); JSONArray categoryArray=new JSONArray(); JSONObject categoryObject=new JSONObject(); categoryObject.put("name","CrowdReview"); categoryArray.put(categoryObject); nodeJson.put("categories",categoryArray); JSONArray nodesArray=new JSONArray(); for(ReviewReport reviewReport:reviewReportList){ String reportId=reviewReport.getId(); List reviewItemList=reviewItemDao.findItemsByReport(reportId); for(ReviewItem reviewItem:reviewItemList){ String itemId=reviewItem.getId(); ReviewCorrectAnswer correctAnswer=reviewCorrectAnswerDao.findCorrectAnswerByReportItem(reportId,itemId,jobId); if(reviewItem.getType().equals("Multiple")){ List answers=correctAnswer.getCorrect_answer(); int num=0; for(int i=0;i reviewReportList=reviewReportDao.getReportsByPaperId(reviewPaper.getId()); //构建catchNode JSONArray catchNodeArray = new JSONArray(); for(ReviewReport reviewReport:reviewReportList){ String reportId=reviewReport.getId(); List reviewItemList=reviewItemDao.findItemsByReport(reportId); for(ReviewItem reviewItem:reviewItemList){ String itemId=reviewItem.getId(); //此时reviewAnswer一定已经被创建 ReviewAnswer reviewAnswer=reviewAnswerDao.findAnswerByWorkerJobReportItem(jobId,reportId,workerId,itemId); ReviewCorrectAnswer reviewCorrectAnswer=reviewCorrectAnswerDao.findCorrectAnswerByReportItem(reportId,itemId,jobId); //多选题 if(reviewItem.getType().equals("Multiple")){ List answers=reviewAnswer.getAnswers(); List correctAnswers=reviewCorrectAnswer.getCorrect_answer(); int num=0; //共有几个正确选项 for(int i=0;i multipleNodeList=new ArrayList<>(); boolean chooseWrong=false; //是否作答 if(answers.size()!=correctAnswers.size()){ for (int i = 0; i < correctAnswers.size(); i++) { JSONObject node = new JSONObject(); node.put("category", "CrowdReview"); node.put("ifCatch", false); node.put("nodeName", jobId + "/" + reportId + "/" + itemId + "/" + i); multipleNodeList.add(node); } chooseWrong=true; }else { for (int i = 0; i < correctAnswers.size(); i++) { String correctAnswer = correctAnswers.get(i); String answer = answers.get(i); JSONObject node = new JSONObject(); if (correctAnswer.equals("1")) { if (answer.equals("1")) { node.put("category", "CrowdReview"); node.put("ifCatch", true); node.put("nodeName", jobId + "/" + reportId + "/" + itemId + "/" + i); } else { node.put("category", "CrowdReview"); node.put("ifCatch", false); node.put("nodeName", jobId + "/" + reportId + "/" + itemId + "/" + i); } multipleNodeList.add(node); } else if (correctAnswer.equals("")) { if (answer.equals("1")) { chooseWrong = true; break; } } } } //有一个选错,则多选题不得分 if(chooseWrong){ for(JSONObject node:multipleNodeList){ node.put("ifCatch",false); catchNodeArray.put(node); } } //否则按选中的个数得分 else{ for(JSONObject node:multipleNodeList){ catchNodeArray.put(node); } } } } //单选题 else if(reviewItem.getType().equals("Single")) { List answers=reviewAnswer.getAnswers(); List correctAnswers=reviewCorrectAnswer.getCorrect_answer(); boolean chooseWrong=false; if(answers.size()!=correctAnswers.size()){ chooseWrong=true; }else { for (int i = 0; i < correctAnswers.size(); i++) { String correctAnswer = correctAnswers.get(i); String answer = answers.get(i); if (!answer.equals(correctAnswer)) { chooseWrong = true; break; } } } JSONObject node=new JSONObject(); node.put("category", "CrowdReview"); node.put("nodeName", jobId + "/" + reportId + "/" + itemId); node.put("ifCatch",!chooseWrong); catchNodeArray.put(node); } //描述题和文件题,默认只要有作答就得分 else if(reviewItem.getType().equals("Description")){ List answers=reviewAnswer.getAnswers(); boolean hasContent=false; for(String answer:answers){ if(!answer.equals("")){ hasContent=true; break; } } JSONObject node=new JSONObject(); node.put("category", "CrowdReview"); node.put("nodeName", jobId + "/" + reportId + "/" + itemId); node.put("ifCatch",hasContent); catchNodeArray.put(node); }else if(reviewItem.getType().equals("File")){ List fileList=reviewAnswer.getFile_url(); boolean hasContent=false; for(String file:fileList){ if(!file.equals("")){ hasContent=true; break; } } JSONObject node=new JSONObject(); node.put("category", "CrowdReview"); node.put("nodeName", jobId + "/" + reportId + "/" + itemId); node.put("ifCatch",hasContent); catchNodeArray.put(node); } } } System.out.println(catchNodeArray); AnswerNode answerNode=new AnswerNode(jobId,workerId,catchNodeArray.toString(),"0"); return answerNode; } }