Browse Source

生成元node

xujiawei 5 years ago
parent
commit
56317cee90

+ 59 - 0
src/main/java/edu/nju/controller/NodeController.java

@@ -0,0 +1,59 @@
+package edu.nju.controller;
+
+import edu.nju.entities.*;
+import edu.nju.model.ReviewWorkerVO;
+import edu.nju.service.NodeService;
+import edu.nju.service.ReviewService;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+
+@Controller
+@RequestMapping(value = "/node")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class NodeController {
+
+    @Autowired
+    NodeService nodeService;
+
+    @RequestMapping(value = "/generateBasicNode")
+    @ResponseBody
+    public void generateBasicNode(String jobId,String teacherId, HttpServletResponse response){
+        try {
+            PrintWriter out = response.getWriter();
+            BasicNode basicNode=nodeService.generateBasicNode(jobId,teacherId);
+            out.print(new JSONObject(basicNode));
+            out.flush();
+            out.close();
+        }catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+
+    @RequestMapping(value = "/generateCatchNode")
+    @ResponseBody
+    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));
+            out.flush();
+            out.close();
+        }catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+
+
+}

+ 5 - 5
src/main/java/edu/nju/controller/ReviewController.java

@@ -53,12 +53,12 @@ public class ReviewController {
 
     }
 
-    @RequestMapping(value = "/getAnswerByWorkerReportItem")
+    @RequestMapping(value = "/getAnswerByWorkerJobReportItem")
     @ResponseBody
-    public void getAnswerByWorkerReportItem(String reportId,String itemId,String workerId, HttpServletResponse response){
+    public void getAnswerByWorkerJobReportItem(String jobId,String reportId,String itemId,String workerId, HttpServletResponse response){
         try {
             PrintWriter out = response.getWriter();
-            ReviewAnswer answers = iservice.getAnswerByWorkerReportItem(reportId,workerId,itemId);
+            ReviewAnswer answers = iservice.getAnswerByWorkerJobReportItem(jobId,reportId,workerId,itemId);
             out.print(new JSONObject(answers));
             out.flush();
             out.close();
@@ -174,9 +174,9 @@ public class ReviewController {
 
     @RequestMapping(value = "/setGrade", method = RequestMethod.POST)
     @ResponseBody
-    public void setGrade(String itemId, String reportId, String workerId,String grade, HttpServletResponse response){
+    public void setGrade(String jobId,String itemId, String reportId, String workerId,String grade, HttpServletResponse response){
         JSONObject result = new JSONObject();
-        if(iservice.setGrade(itemId,reportId,workerId,grade)){
+        if(iservice.setGrade(jobId,itemId,reportId,workerId,grade)){
             result.put("status", "200");
         } else {
             result.put("status", "500");

+ 7 - 0
src/main/java/edu/nju/dao/AnswerNodeDao.java

@@ -0,0 +1,7 @@
+package edu.nju.dao;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class AnswerNodeDao {
+}

+ 7 - 0
src/main/java/edu/nju/dao/BasicNodeDao.java

@@ -0,0 +1,7 @@
+package edu.nju.dao;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class BasicNodeDao {
+}

+ 2 - 2
src/main/java/edu/nju/dao/ReviewAnswerDao.java

@@ -20,9 +20,9 @@ public class ReviewAnswerDao {
     @Autowired
     private MongoOperations mongoOperations;
 
-    public ReviewAnswer findAnswerByWorkerReportItem(String reportId,String workerId,String itemId){
+    public ReviewAnswer findAnswerByWorkerJobReportItem(String jobId, String reportId, String workerId, String itemId){
         Query query = new Query();
-        query.addCriteria(Criteria.where("report_id").is(reportId).and("worker_id").is(workerId).and("item_id").is(itemId));
+        query.addCriteria(Criteria.where("job_id").is(jobId).and("report_id").is(reportId).and("worker_id").is(workerId).and("item_id").is(itemId));
         List<ReviewAnswer> answers= mongoOperations.find(query, ReviewAnswer.class);
         if(answers==null||answers.size()==0){
             return null;

+ 6 - 0
src/main/java/edu/nju/dao/ReviewItemDao.java

@@ -58,6 +58,12 @@ public class ReviewItemDao {
         mongoOperations.remove(query,ReviewItem.class);
     }
 
+    public List<ReviewItem> findItemsByPaper(String paperId){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("paper_id").is(paperId));
+        return mongoOperations.find(query, ReviewItem.class);
+    }
+
 
 
 

+ 64 - 0
src/main/java/edu/nju/entities/AnswerNode.java

@@ -0,0 +1,64 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class AnswerNode {
+    @Id
+    private String id;
+    private String jobId;
+    private String workerId;
+    private String catchNodeJson;
+    private String grade;
+
+    @PersistenceConstructor
+    public AnswerNode(String id,String jobId,String workerId,String catchNodeJson,String grade){
+        this.id=id;
+        this.jobId=jobId;
+        this.workerId=workerId;
+        this.catchNodeJson=catchNodeJson;
+        this.grade=grade;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getJobId() {
+        return jobId;
+    }
+
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
+    }
+
+    public String getWorkerId() {
+        return workerId;
+    }
+
+    public void setWorkerId(String workerId) {
+        this.workerId = workerId;
+    }
+
+    public String getCatchNodeJson() {
+        return catchNodeJson;
+    }
+
+    public void setCatchNodeJson(String catchNodeJson) {
+        this.catchNodeJson = catchNodeJson;
+    }
+
+    public String getGrade() {
+        return grade;
+    }
+
+    public void setGrade(String grade) {
+        this.grade = grade;
+    }
+}

+ 56 - 0
src/main/java/edu/nju/entities/BasicNode.java

@@ -0,0 +1,56 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class BasicNode {
+
+    @Id
+    private String id;
+    private String jobId;
+    private String teacherId;
+    private String nodeJson;
+
+    @PersistenceConstructor
+    public BasicNode(String jobId,String teacherId,String nodeJson){
+        this.jobId=jobId;
+        this.teacherId=teacherId;
+        this.nodeJson=nodeJson;
+    }
+
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getJobId() {
+        return jobId;
+    }
+
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
+    }
+
+    public String getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(String teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getNodeJson() {
+        return nodeJson;
+    }
+
+    public void setNodeJson(String nodeJson) {
+        this.nodeJson = nodeJson;
+    }
+}

+ 1 - 1
src/main/java/edu/nju/entities/ReviewCorrectAnswer.java

@@ -46,7 +46,7 @@ public class ReviewCorrectAnswer implements java.io.Serializable{
         this.report_id = report_id;
         this.job_id = job_id;
         this.paper_id = paper_id;
-}
+    }
 
     public String getId() {
         return id;

+ 201 - 0
src/main/java/edu/nju/service/NodeService.java

@@ -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;
+    }
+
+
+}

+ 5 - 5
src/main/java/edu/nju/service/ReviewService.java

@@ -30,11 +30,11 @@ public class ReviewService {
 
 
 
-    public ReviewAnswer getAnswerByWorkerReportItem(String reportId,String workerId,String itemId){
-        ReviewAnswer reviewAnswer= answerDao.findAnswerByWorkerReportItem(reportId,workerId, itemId);
+    public ReviewAnswer getAnswerByWorkerJobReportItem(String jobId,String reportId,String workerId,String itemId){
+        ReviewAnswer reviewAnswer= answerDao.findAnswerByWorkerJobReportItem(jobId,reportId,workerId, itemId);
         if(reviewAnswer==null){
             ReviewWorker reviewWorker=reviewWorkerDao.find(workerId);
-            String jobId=reviewWorker.getJob_id();
+//            String jobId=reviewWorker.getJob_id();
             String paperId=reviewWorker.getPaper_id();
             reviewAnswer=new ReviewAnswer(itemId,reportId,workerId,jobId,paperId);
             answerDao.save(reviewAnswer);
@@ -131,9 +131,9 @@ public class ReviewService {
        return answerDao.getItemReportJobAnswers(itemId,reportId,jobId);
     }
 
-    public boolean setGrade(String itemId, String reportId, String workerId,String grade){
+    public boolean setGrade(String jobId,String itemId, String reportId, String workerId,String grade){
         try {
-            ReviewAnswer reviewAnswer=answerDao.findAnswerByWorkerReportItem(reportId,workerId,itemId);
+            ReviewAnswer reviewAnswer=answerDao.findAnswerByWorkerJobReportItem(jobId,reportId,workerId,itemId);
             if(reviewAnswer==null){
                 return false;
             }