Browse Source

1. 增加人员分配的实现
2。增加对每个答案的统计功能

MengyangDuan 5 years ago
parent
commit
8e1faa0e82

+ 36 - 0
src/main/java/edu/nju/controller/ReviewAnalyzeController.java

@@ -0,0 +1,36 @@
+package edu.nju.controller;
+
+import edu.nju.service.ReviewAnalyzeService;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+@Controller
+@RequestMapping(value = "/reviewAnalyze")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class ReviewAnalyzeController {
+    @Autowired
+    ReviewAnalyzeService reviewAnalyzeService;
+
+    @RequestMapping(value = "/analyzeItem")
+    @ResponseBody
+    public void analyzeItem(String itemId, HttpServletResponse response){
+        try {
+            PrintWriter out = response.getWriter();
+            JSONObject jsonObject=reviewAnalyzeService.analyzeItem(itemId);
+            out.print(jsonObject);
+            out.flush();
+            out.close();
+        }catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+}

+ 15 - 0
src/main/java/edu/nju/controller/ReviewJobController.java

@@ -83,6 +83,21 @@ public class ReviewJobController {
         return result;
     }
 
+    @RequestMapping(value = "/getWorkerDistribution")
+    @ResponseBody
+    public void getWorkerDistribution(String jobId,HttpServletResponse response){
+        try {
+            PrintWriter out = response.getWriter();
+            JSONArray workerDistribution = reviewJobService.getJobDistribution(jobId);
+            out.print(workerDistribution);
+            out.flush();
+            out.close();
+        }catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
     @RequestMapping(value = "/updateJob", method = RequestMethod.POST)
     @ResponseBody
     public void updateJob(String jobId, String name, String description, String paperId,String startTime, String endTime,@RequestParam("workerList")List<String>workerList,String workerDistribution, HttpServletResponse response){

+ 37 - 1
src/main/java/edu/nju/dao/ReviewAnswerDao.java

@@ -1,13 +1,18 @@
 package edu.nju.dao;
 
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBObject;
 import edu.nju.entities.ReviewAnswer;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.AggregationResults;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Repository;
 
-import java.util.List;
+import java.util.*;
 
 @Repository
 public class ReviewAnswerDao {
@@ -45,4 +50,35 @@ public class ReviewAnswerDao {
         List<ReviewAnswer> answers= mongoOperations.find(query, ReviewAnswer.class);
         return answers;
     }
+
+    public List<ReviewAnswer>getAnswersByItem(String itemId){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("item_id").is(itemId));
+        List<ReviewAnswer> answers= mongoOperations.find(query, ReviewAnswer.class);
+        return answers;
+    }
+
+    public List<ReviewAnswer> getAnswersByJob(String jobId){
+//        String[] field = {"report_id","item_id"}; 		//分组的依据,根据那些参数进行分组
+//        Aggregation aggregation1 = Aggregation.newAggregation(
+//                Aggregation.match(Criteria.where("job_id").is(jobId)),	//条件筛选    可以跟好几个条件
+//                Aggregation.group(field).count().as("sum"),		//分组统计收藏量    ,as 起别名
+//                Aggregation.sort(new Sort(Sort.Direction.DESC, "sum"))  //按照收藏量倒叙排序
+//        );
+//        //执行
+//        AggregationResults<BasicDBObject> outputTypeCount1 = mongoOperations.aggregate(aggregation1, "collect", BasicDBObject.class);
+//        //迭代器进行迭代
+//        Map<String,String>result=new HashMap<>();
+//        for (Iterator<BasicDBObject> iterator = outputTypeCount1.iterator(); iterator.hasNext(); ) {
+//            DBObject obj = iterator.next();
+//            String sum = obj.get("sum").toString();
+//            String itemId = obj.get("sum").toString();
+//            result.put(itemId,sum);
+//        }
+//        return result;
+        Query query = new Query();
+        query.addCriteria(Criteria.where("job_id").is(jobId));
+        List<ReviewAnswer> answers= mongoOperations.find(query, ReviewAnswer.class);
+        return answers;
+    }
 }

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

@@ -44,5 +44,11 @@ public class ReviewGroupDao {
         return list.get(0);
     }
 
+    public List<ReviewGroup>getGroupsByJob(String job_id){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("job_id").is(job_id));
+        List<ReviewGroup>list = mongoOperations.find(query, ReviewGroup.class);
+        return list;
+    }
 
 }

+ 2 - 0
src/main/java/edu/nju/entities/ReviewJob.java

@@ -28,6 +28,8 @@ public class ReviewJob implements java.io.Serializable{
 
     private String group;
 
+    //private boolean
+
     @PersistenceConstructor
     public ReviewJob(String exam_id,String case_id, String name, String description, String create_time, String paper_id, String start_time, String end_time, String group) {
         this.exam_id=exam_id;

+ 71 - 0
src/main/java/edu/nju/service/ReviewAnalyzeService.java

@@ -0,0 +1,71 @@
+package edu.nju.service;
+
+import edu.nju.dao.ReviewAnswerDao;
+import edu.nju.dao.ReviewItemDao;
+import edu.nju.entities.ReviewAnswer;
+import edu.nju.entities.ReviewItem;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class ReviewAnalyzeService {
+    @Autowired
+    ReviewAnswerDao reviewAnswerDao;
+    @Autowired
+    ReviewItemDao reviewItemDao;
+
+    public JSONObject analyzeItem(String itemId){
+        JSONObject jsonObject=new JSONObject();
+        ReviewItem reviewItem=reviewItemDao.findById(itemId);
+        String type=reviewItem.getType();
+        List<ReviewAnswer>reviewAnswers=reviewAnswerDao.getAnswersByItem(itemId);
+        if(type.equals("File")){
+            Map<String,List<String>>map=new HashMap<>();
+            for(int i=0;i<reviewAnswers.size();i++){
+                ReviewAnswer reviewAnswer=reviewAnswers.get(i);
+                List<String>urls=reviewAnswer.getFile_url();
+                if(urls.size()!=0){
+                    String workerId=reviewAnswer.getWorker_id();
+                    map.put(workerId,urls);
+                }
+            }
+            jsonObject=new JSONObject(map);
+        }
+        else if(type.equals("Description")){
+            Map<String,String>map=new HashMap<>();
+            for(int i=0;i<reviewAnswers.size();i++){
+                ReviewAnswer reviewAnswer=reviewAnswers.get(i);
+                List<String>answers=reviewAnswer.getAnswers();
+                if(answers.size()!=0){
+                    String answer=answers.get(0);
+                    String workerId=reviewAnswer.getWorker_id();
+                    map.put(workerId,answer);
+                }
+            }
+            jsonObject=new JSONObject(map);
+        }
+        else{
+            Map<String,Integer>map=new HashMap<>();
+            for(int i=0;i<reviewAnswers.size();i++){
+                ReviewAnswer reviewAnswer=reviewAnswers.get(i);
+                List<String>answers=reviewAnswer.getAnswers();
+                for(int j=0;i<answers.size();j++){
+                    String answerIndex=answers.get(j);
+                    if(map.containsKey(answerIndex)){
+                        map.replace(answerIndex,map.get(answerIndex)+1);
+                    }
+                    else{
+                        map.put(answerIndex,1);
+                    }
+                }
+            }
+            jsonObject=new JSONObject(map);
+        }
+        return jsonObject;
+    }
+}

+ 46 - 4
src/main/java/edu/nju/service/ReviewJobService.java

@@ -40,7 +40,7 @@ public class ReviewJobService {
         return jobDao.findJobs();
     }
 
-    public String uploadJob(String examId,String caseId,String name, String description, String paperId, String startTime, String endTime, @RequestParam(name = "workerList") List<String>workerList, String workerDistribution){
+    public String uploadJob(String examId,String caseId,String name, String description, String paperId, String startTime, String endTime, List<String>workerList, String workerDistribution){
         ReviewJob reviewJob=new ReviewJob(examId,caseId,name,description,Long.toString(System.currentTimeMillis()),paperId,startTime,endTime,"");
         String jobId=jobDao.save(reviewJob);
         List<String>workerIds=new ArrayList<>();
@@ -53,11 +53,31 @@ public class ReviewJobService {
         List<String>reportIds=new ArrayList<>();
         for(int i=0;i<reviewReports.size();i++)
             reportIds.add(reviewReports.get(i).getId());
-        groupDao.save(new ReviewGroup("default","",workerIds,jobId,reportIds));
+        saveJobDistribution(workerDistribution,jobId);
         return jobId;
     }
 
-    public MessageVO uploadJobByJson(@RequestBody JobJsonDTO jobJsonDTO){
+    private void saveJobDistribution(String workerDistribution,String jobId){
+        JSONArray jsonArray=new JSONArray(workerDistribution);
+        for(int i=0;i<jsonArray.length();i++){
+            JSONObject jsonObject=jsonArray.getJSONObject(i);
+            String name=jsonObject.getString("name");
+            String desciption=jsonObject.getString("description");
+            JSONArray jsonArray1=jsonObject.getJSONArray("worker");
+            List<String>workerIds=new ArrayList<>();
+            for(int j=0;j<jsonArray1.length();j++){
+                workerIds.add(String.valueOf(jsonArray1.get(j)));
+            }
+            JSONArray jsonArray2=jsonObject.getJSONArray("report");
+            List<String>reportIds=new ArrayList<>();
+            for(int j=0;j<jsonArray2.length();j++){
+                reportIds.add(String.valueOf(jsonArray1.get(j)));
+            }
+            groupDao.save(new ReviewGroup(name,desciption,workerIds,jobId,reportIds));
+        }
+    }
+
+    public MessageVO uploadJobByJson(JobJsonDTO jobJsonDTO){
         String jobName=jobJsonDTO.getJob_name();
         String jobDescription=jobJsonDTO.getJob_description();
         String startTime=jobJsonDTO.getStart_time();
@@ -80,7 +100,13 @@ public class ReviewJobService {
                 return messageVO;
             }
             String paperId=paperResult.getString("paperId");
+            List<ReviewReport>reports=reviewPaperService.getReportsByPaperId(paperId);
+            List<String>reportIds=new ArrayList<>();
+            for(int i=0;i<reports.size();i++){
+                reportIds.add(reports.get(i).getId());
+            }
             String jobId=uploadJob(examId,caseId,jobName,jobDescription,paperId,startTime,endTime,workerList,"");
+            groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
             messageVO.setStatus("200");
             messageVO.setMessage(jobId);
         } catch (IOException e) {
@@ -109,7 +135,7 @@ public class ReviewJobService {
             List<String>reportIds=new ArrayList<>();
             for(int i=0;i<reviewReports.size();i++)
                 reportIds.add(reviewReports.get(i).getId());
-            groupDao.save(new ReviewGroup("default","",workerIds,jobId,reportIds));
+            saveJobDistribution(workerDistribution,jobId);
             return true;
         } catch (Exception e) {
             e.printStackTrace();
@@ -129,4 +155,20 @@ public class ReviewJobService {
             return false;
         }
     }
+
+    public JSONArray getJobDistribution(String jobId){
+        List<ReviewGroup>reviewGroups=groupDao.getGroupsByJob(jobId);
+        JSONArray jsonArray=new JSONArray();
+        for(int i=0;i<reviewGroups.size();i++){
+            ReviewGroup reviewGroup=reviewGroups.get(i);
+            JSONObject jsonObject=new JSONObject();
+            jsonObject.put("name",reviewGroup.getName());
+            jsonObject.put("description",reviewGroup.getDescription());
+            jsonObject.put("worker",reviewGroup.getWorkers_id());
+            jsonObject.put("report",reviewGroup.getReport_id());
+            jsonArray.put(jsonObject);
+        }
+        return jsonArray;
+
+    }
 }

+ 0 - 10
src/main/java/edu/nju/service/ReviewService.java

@@ -94,16 +94,6 @@ public class ReviewService {
         return items;
     }
 
-    public List<String> getReportsByItem(String item_id){
-        ReviewItem item=itemDao.findById(item_id);
-        if(item==null){
-            return null;
-        }
-        else{
-            return item.getReport_id();
-        }
-    }
-
     public List<ReviewWorkerVO>getWorkersByJob(String jobId){
         List<ReviewWorker>reviewWorkers=reviewWorkerDao.getWorkersByJob(jobId);
         List<ReviewWorkerVO>reviewWorkerVOS=new ArrayList<>();