瀏覽代碼

生成catchNode

xujiawei 5 年之前
父節點
當前提交
a43b5b8368

+ 2 - 2
src/main/java/edu/nju/controller/NodeController.java

@@ -44,8 +44,8 @@ public class NodeController {
     public void generateCatchNode(String jobId,String workerId, HttpServletResponse response){
         try {
             PrintWriter out = response.getWriter();
-            BasicNode basicNode=nodeService.generateCatchNode(jobId,workerId);
-            out.print(new JSONObject(basicNode));
+            AnswerNode answerNode=nodeService.generateCatchNode(jobId,workerId);
+            out.print(new JSONObject(answerNode));
             out.flush();
             out.close();
         }catch (IOException e) {

+ 1 - 2
src/main/java/edu/nju/entities/AnswerNode.java

@@ -14,8 +14,7 @@ public class AnswerNode {
     private String grade;
 
     @PersistenceConstructor
-    public AnswerNode(String id,String jobId,String workerId,String catchNodeJson,String grade){
-        this.id=id;
+    public AnswerNode(String jobId,String workerId,String catchNodeJson,String grade){
         this.jobId=jobId;
         this.workerId=workerId;
         this.catchNodeJson=catchNodeJson;

+ 73 - 31
src/main/java/edu/nju/service/NodeService.java

@@ -69,7 +69,7 @@ public class NodeService {
                             if(answer.equals("1")){
                                 JSONObject node=new JSONObject();
                                 node.put("name", jobId + "/" + reportId + "/" + itemId+"/"+i);
-                                node.put("location", jobId + "/" + reportId + "/" + jobId+i);
+                                node.put("location", jobId + "/" + reportId + "/" + itemId+"/"+i);
                                 node.put("description", reviewItem.getType());
                                 node.put("category", "CrowdReview");
                                 node.put("weight", String.valueOf(Double.parseDouble(correctAnswer.getGrade())/num));
@@ -80,7 +80,7 @@ public class NodeService {
                 }else {
                     JSONObject node=new JSONObject();
                     node.put("name", jobId + "/" + reportId + "/" + itemId);
-                    node.put("location", jobId + "/" + reportId + "/" + jobId);
+                    node.put("location", jobId + "/" + reportId + "/" + itemId);
                     node.put("description", reviewItem.getType());
                     node.put("category", "CrowdReview");
                     node.put("weight", correctAnswer.getGrade());
@@ -95,7 +95,7 @@ public class NodeService {
     }
 
 
-    public BasicNode generateCatchNode(String jobId,String workerId){
+    public AnswerNode generateCatchNode(String jobId,String workerId){
         ReviewJob reviewJob=reviewJobDao.findJob(jobId);
         ReviewPaper reviewPaper=reviewPaperDao.findPaper(reviewJob.getPaper_id());
         List<ReviewReport> reviewReportList=reviewReportDao.getReportsByPaperId(reviewPaper.getId());
@@ -115,41 +115,62 @@ public class NodeService {
                     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")){
+                    //共有几个正确选项
+                    for(int i=0;i<correctAnswers.size();i++){
+                        if(correctAnswers.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(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);
+                            }
+                        }
                     }
                 }
                 //单选题
@@ -157,12 +178,16 @@ public class NodeService {
                     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;
+                    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();
@@ -172,7 +197,7 @@ public class NodeService {
                     catchNodeArray.put(node);
                 }
                 //描述题和文件题,默认只要有作答就得分
-                else{
+                else if(reviewItem.getType().equals("Description")){
                     List<String> answers=reviewAnswer.getAnswers();
                     boolean hasContent=false;
                     for(String answer:answers){
@@ -186,15 +211,32 @@ public class NodeService {
                     node.put("nodeName", jobId + "/" + reportId + "/" + itemId);
                     node.put("ifCatch",hasContent);
                     catchNodeArray.put(node);
+                }else if(reviewItem.getType().equals("File")){
+                    List<String> 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;
+
+
 
 
-        return null;
     }