|
@@ -0,0 +1,201 @@
|
|
|
+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<ReviewReport> 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<ReviewItem> 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<String> answers=correctAnswer.getCorrect_answer();
|
|
|
+ int num=0;
|
|
|
+ for(int i=0;i<answers.size();i++){
|
|
|
+ if(answers.get(i).equals("1")){
|
|
|
+ num++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(num!=0){
|
|
|
+ for(int i=0;i<answers.size();i++){
|
|
|
+ String answer=answers.get(i);
|
|
|
+ if(answer.equals("1")){
|
|
|
+ JSONObject node=new JSONObject();
|
|
|
+ node.put("name", jobId + "/" + reportId + "/" + itemId+"/"+i);
|
|
|
+ node.put("location", jobId + "/" + reportId + "/" + jobId+i);
|
|
|
+ node.put("description", reviewItem.getType());
|
|
|
+ node.put("category", "CrowdReview");
|
|
|
+ node.put("weight", String.valueOf(Double.parseDouble(correctAnswer.getGrade())/num));
|
|
|
+ nodesArray.put(node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ JSONObject node=new JSONObject();
|
|
|
+ node.put("name", jobId + "/" + reportId + "/" + itemId);
|
|
|
+ node.put("location", jobId + "/" + reportId + "/" + jobId);
|
|
|
+ node.put("description", reviewItem.getType());
|
|
|
+ node.put("category", "CrowdReview");
|
|
|
+ node.put("weight", correctAnswer.getGrade());
|
|
|
+ nodesArray.put(node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ nodeJson.put("nodes",nodesArray);
|
|
|
+ BasicNode basicNode=new BasicNode(jobId,teacherId,nodesArray.toString());
|
|
|
+ System.out.println(nodeJson);
|
|
|
+ return basicNode;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public BasicNode generateCatchNode(String jobId,String workerId){
|
|
|
+ ReviewJob reviewJob=reviewJobDao.findJob(jobId);
|
|
|
+ ReviewPaper reviewPaper=reviewPaperDao.findPaper(reviewJob.getPaper_id());
|
|
|
+ List<ReviewReport> reviewReportList=reviewReportDao.getReportsByPaperId(reviewPaper.getId());
|
|
|
+ //构建catchNode
|
|
|
+ JSONArray catchNodeArray = new JSONArray();
|
|
|
+ for(ReviewReport reviewReport:reviewReportList){
|
|
|
+ String reportId=reviewReport.getId();
|
|
|
+ List<ReviewItem> 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<String> answers=reviewAnswer.getAnswers();
|
|
|
+ List<String> correctAnswers=reviewCorrectAnswer.getCorrect_answer();
|
|
|
+ int num=0;
|
|
|
+ for(int i=0;i<answers.size();i++){
|
|
|
+ if(answers.get(i).equals("1")){
|
|
|
+ num++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(num!=0){
|
|
|
+ List<JSONObject> multipleNodeList=new ArrayList<>();
|
|
|
+ boolean chooseWrong=false;
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }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 if(reviewItem.getType().equals("Single")) {
|
|
|
+ List<String> answers=reviewAnswer.getAnswers();
|
|
|
+ List<String> correctAnswers=reviewCorrectAnswer.getCorrect_answer();
|
|
|
+ boolean chooseWrong=false;
|
|
|
+ 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{
|
|
|
+ List<String> 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println(catchNodeArray);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|