Bläddra i källkod

在reviewJob添加总工作量和单人工作时间字段,在reviewAnswer里添加is_finished字段。将分配部分的调用改到getReportsByWorkerJob里面

MengyangDuan 5 år sedan
förälder
incheckning
c389182b48

+ 14 - 14
src/main/java/edu/nju/controller/ReviewJobController.java

@@ -75,20 +75,20 @@ 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 = "/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

+ 18 - 0
src/main/java/edu/nju/dao/ReviewAnswerDao.java

@@ -81,4 +81,22 @@ public class ReviewAnswerDao {
         List<ReviewAnswer> answers= mongoOperations.find(query, ReviewAnswer.class);
         return answers;
     }
+
+    public ReviewAnswer findLastAnswerByWorkerJob(String jobId, String workerId){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("job_id").is(jobId).and("worker_id").is(workerId));
+        List<ReviewAnswer> answers= mongoOperations.find(query, ReviewAnswer.class);
+        if(answers==null||answers.size()==0){
+            return null;
+        }
+        return answers.get(answers.size()-1);
+    }
+
+//    public List<ReviewAnswer>getReportJobWorkerAnswers(String reportId,String jobId,String workerId){
+//        Query query = new Query();
+//        query.addCriteria(Criteria.where("worker_id").is(workerId).and("report_id").is(reportId).and("job_id").is(jobId));
+//        List<ReviewAnswer> answers= mongoOperations.find(query, ReviewAnswer.class);
+//        return answers;
+//    }
+
 }

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

@@ -51,4 +51,12 @@ public class ReviewGroupDao {
         return list;
     }
 
+    public ReviewGroup getGroupByWorkers(List<String>workerIds){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("workers_id").is(workerIds));
+        List<ReviewGroup>list = mongoOperations.find(query, ReviewGroup.class);
+        if(list == null||list.size() == 0) {return null;}
+        return list.get(0);
+    }
+
 }

+ 14 - 1
src/main/java/edu/nju/entities/ReviewAnswer.java

@@ -32,8 +32,10 @@ public class ReviewAnswer implements java.io.Serializable{
 
     private String grade;
 
+    private boolean is_finished;
+
     @PersistenceConstructor
-    public ReviewAnswer(String item_id,String report_id, List<String> answers, String worker_id, List<String> file_url,String job_id,String paper_id) {
+    public ReviewAnswer(String item_id,String report_id, List<String> answers, String worker_id, List<String> file_url,String job_id,String paper_id,boolean is_finished) {
         this.item_id = item_id;
         this.report_id=report_id;
         this.answers = answers;
@@ -42,6 +44,7 @@ public class ReviewAnswer implements java.io.Serializable{
         this.job_id=job_id;
         this.paper_id=paper_id;
         this.grade="";
+        this.is_finished=is_finished;
     }
     @PersistenceConstructor
     public ReviewAnswer(String item_id,String report_id,String worker_id,String job_id,String paper_id){
@@ -52,6 +55,8 @@ public class ReviewAnswer implements java.io.Serializable{
         this.job_id=job_id;
         this.paper_id=paper_id;
         this.answers=new ArrayList<>();
+        this.grade="";
+        this.is_finished=false;
     }
 
     public String getId() {
@@ -125,4 +130,12 @@ public class ReviewAnswer implements java.io.Serializable{
     public void setGrade(String grade) {
         this.grade = grade;
     }
+
+    public boolean getIs_finished() {
+        return is_finished;
+    }
+
+    public void setIs_finished(boolean is_finished) {
+        this.is_finished = is_finished;
+    }
 }

+ 21 - 0
src/main/java/edu/nju/entities/ReviewGroup.java

@@ -50,6 +50,27 @@ public class ReviewGroup implements java.io.Serializable{
         }
     }
 
+    public ReviewGroup(String id,String name, String description, List<String> workers_id, String job_id, List<String> report_id,List<String>paper_original_id,List<String>original_id) {
+        this.id=id;
+        this.name = name;
+        this.description = description;
+        this.workers_id = workers_id;
+        this.job_id = job_id;
+        this.report_id = report_id;
+        if(paper_original_id==null){
+            this.paper_original_id=new ArrayList<>();
+        }
+        else{
+            this.paper_original_id=paper_original_id;
+        }
+        if(original_id==null){
+            this.original_id=new ArrayList<>();
+        }
+        else{
+            this.original_id=original_id;
+        }
+    }
+
     public String getId() {
         return id;
     }

+ 26 - 8
src/main/java/edu/nju/entities/ReviewJob.java

@@ -65,17 +65,35 @@ public class ReviewJob implements java.io.Serializable{
         }
     }
     @PersistenceConstructor
-    public ReviewJob(String exam_id, String paper_id,String create_time) {
+    public ReviewJob(String id,String exam_id,String case_id, String name, String description, String create_time, String paper_id, String start_time, String end_time, Integer single_time,Integer total_workload,String group,Integer max_worker) {
+        this.id=id;
         this.exam_id=exam_id;
-        this.description = "";
-        this.name = "";
+        this.case_id=case_id;
+        this.description = description;
+        this.name = name;
         this.paper_id = paper_id;
         this.create_time = create_time;
-        this.start_time = "";
-        this.single_time=0;
-        this.total_workload=0;
-        this.end_time = "";
-        this.group = "";
+        this.start_time = start_time;
+        this.end_time = end_time;
+        if(single_time==null){
+            this.single_time=0;
+        }
+        else{
+            this.single_time=single_time;
+        }
+        if(total_workload==null){
+            this.total_workload=0;
+        }
+        else{
+            this.total_workload=total_workload;
+        }
+        this.group = group;
+        if(max_worker==null){
+            this.max_worker=0;
+        }
+        else{
+            this.max_worker=max_worker;
+        }
 
     }
 

+ 148 - 132
src/main/java/edu/nju/service/ReviewJobService.java

@@ -45,57 +45,68 @@ public class ReviewJobService {
 
     public JSONObject uploadJob(String jobId,String examId,String caseId,String name, String description, String paperId, String startTime, String endTime,int singleTime,int totalWorkload, List<String>workerList, String workerDistribution,String groupId,int maxWorker){
         JSONObject jsonObject=new JSONObject();
-        String checkResult=checkJobDistribution(workerDistribution);
-        if(!checkResult.equals("success")){
-            jsonObject.put("status","fail");
-            jsonObject.put("message",checkResult);
-            return jsonObject;
-        }
+//        String checkResult=checkJobDistribution(workerDistribution);
+//        if(!checkResult.equals("success")){
+//            jsonObject.put("status","fail");
+//            jsonObject.put("message",checkResult);
+//            return jsonObject;
+//        }
         //新建,否则是update
         if(jobId.equals("")) {
             ReviewJob newReviewJob = new ReviewJob(examId, caseId, name, description, Long.toString(System.currentTimeMillis()), paperId, startTime, endTime, singleTime,totalWorkload,groupId, maxWorker);
             jobId = jobDao.save(newReviewJob);
         }
-        //是教育版则调用分配服务
-        if(examId!=null&!examId.equals("")){
-            try {
-                invokeJobDistributionService(name, paperId, examId, singleTime, totalWorkload);
-            } catch (Exception e) {
-                jsonObject.put("status","fail");
-                jsonObject.put("jobId","分配服务调用失败");
-                return jsonObject;
-            }
+        else{
+            ReviewJob newReviewJob = new ReviewJob(jobId,examId, caseId, name, description, Long.toString(System.currentTimeMillis()), paperId, startTime, endTime, singleTime,totalWorkload,groupId, maxWorker);
+            jobId = jobDao.save(newReviewJob);
         }
-        //默认分配
-        if(workerDistribution.equals("")||workerDistribution.equals("[]")){
-            List<String>workerIds=new ArrayList<>();
-            for(int i=0;i<workerList.size();i++){
-                String workerIndex=workerList.get(i);
-                String workerId=reviewWorkerDao.save(new ReviewWorker(workerIndex,paperId,examId,jobId));
-                workerIds.add(workerId);
-            }
-            List<ReviewReport>reviewReports=reportDao.getReportsByPaperId(paperId);
-            List<String>reportIds=new ArrayList<>();
-            List<String>paperOriginalIds=new ArrayList<>();
-            List<String>originalIds=new ArrayList<>();
-            for(int i=0;i<reviewReports.size();i++) {
-                ReviewReport reviewReport=reviewReports.get(i);
-                reportIds.add(reviewReport.getId());
-                originalIds.add(reviewReport.getOriginal_id());
-                paperOriginalIds.add(paperId+"-"+reviewReport.getOriginal_id());
-            }
-            groupDao.save(new ReviewGroup("default","",workerIds,jobId,reportIds,paperOriginalIds,originalIds));
-            System.out.println("job存储成功");
+        List<String>workerIds=new ArrayList<>();
+        for(int i=0;i<workerList.size();i++){
+            String workerIndex=workerList.get(i);
+            String workerId=reviewWorkerDao.save(new ReviewWorker(workerIndex,paperId,examId,jobId));
+            workerIds.add(workerId);
         }
-        else {
-            saveJobDistribution(workerDistribution, jobId);
+        //是教育版则调用分配服务
+//        if(examId!=null&!examId.equals("")){
+        try {
+            invokeJobDistributionService(name, paperId, jobId, singleTime, totalWorkload);
+        } catch (Exception e) {
+            jsonObject.put("status","fail");
+            jsonObject.put("jobId","分配服务调用失败");
+            return jsonObject;
         }
+//        }
+//        //默认分配
+//        if(workerDistribution.equals("")||workerDistribution.equals("[]")){
+//            List<String>workerIds=new ArrayList<>();
+//            for(int i=0;i<workerList.size();i++){
+//                String workerIndex=workerList.get(i);
+//                String workerId=reviewWorkerDao.save(new ReviewWorker(workerIndex,paperId,examId,jobId));
+//                workerIds.add(workerId);
+//            }
+//            List<ReviewReport>reviewReports=reportDao.getReportsByPaperId(paperId);
+//            List<String>reportIds=new ArrayList<>();
+//            List<String>paperOriginalIds=new ArrayList<>();
+//            List<String>originalIds=new ArrayList<>();
+//            for(int i=0;i<reviewReports.size();i++) {
+//                ReviewReport reviewReport=reviewReports.get(i);
+//                reportIds.add(reviewReport.getId());
+//                originalIds.add(reviewReport.getOriginal_id());
+//                paperOriginalIds.add(paperId+"-"+reviewReport.getOriginal_id());
+//            }
+//            groupDao.save(new ReviewGroup("default","",workerIds,jobId,reportIds,paperOriginalIds,originalIds));
+//            System.out.println("job存储成功");
+//        }
+//        else {
+//            saveJobDistribution(workerDistribution, jobId);
+//        }
         jsonObject.put("status","success");
         jsonObject.put("jobId",jobId);
         return jsonObject;
     }
 
-    private void invokeJobDistributionService(String name,String paperId,String examId,int singleTime,int totalWorkload) throws Exception{
+    private void invokeJobDistributionService(String name,String paperId,String jobId,int singleTime,int totalWorkload) throws Exception{
+        String url = "http://129.211.26.227:8082/reportsDistribution/"+ jobId;
         ReviewPaper reviewPaper=reviewPaperService.getPaper(paperId);
         String type=reviewPaper.getType();
         ReviewPaperJson reviewPaperJson=reviewPaperService.getReviewPaperJson(paperId);
@@ -109,58 +120,58 @@ public class ReviewJobService {
         result.put("totalWorkload",totalWorkload);
         result.put("reports",reports);
         String jobJson=result.toString();
-        String invokeResult = HTTP.sendGet("http://129.211.26.227:8082/reportsDistribution/" + examId, jobJson);
-
+        HTTP.postBody(url,jobJson);
     }
 
-    private String checkJobDistribution(String workerDistribution){
-        try {
-            if(workerDistribution.equals("")||workerDistribution.equals("[]")){
-                return  "success";
-            }
-            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");
-                JSONArray jsonArray2=jsonObject.getJSONArray("report");
-            }
-        }catch (Exception e){
-            return "分配信息不正确:"+e.getMessage();
-        }
-        return "success";
-    }
+//    private String checkJobDistribution(String workerDistribution){
+//        try {
+//            if(workerDistribution.equals("")||workerDistribution.equals("[]")){
+//                return  "success";
+//            }
+//            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");
+//                JSONArray jsonArray2=jsonObject.getJSONArray("report");
+//            }
+//        }catch (Exception e){
+//            return "分配信息不正确:"+e.getMessage();
+//        }
+//        return "success";
+//    }
 
-    private void saveJobDistribution(String workerDistribution,String jobId){
-        String paperId=jobDao.findJob(jobId).getPaper_id();
-        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<>();
-            List<String>paperOriginalIds=new ArrayList<>();
-            List<String>originalIds=new ArrayList<>();
-            for(int j=0;j<jsonArray2.length();j++){
-                String originalId=String.valueOf(jsonArray2.get(j));
-                String paperOriginalId=paperId+"-"+originalId;
-                String reportId=reportDao.findReportByPaperOriginalId(paperId,originalId).getId();
-                paperOriginalIds.add(paperOriginalId);
-                reportIds.add(reportId);
-                originalIds.add(originalId);
-            }
-            groupDao.save(new ReviewGroup(name,desciption,workerIds,jobId,reportIds,paperOriginalIds,originalIds));
-        }
-    }
+//    private void saveJobDistribution(String workerDistribution,String jobId){
+//        String paperId=jobDao.findJob(jobId).getPaper_id();
+//        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<>();
+//            List<String>paperOriginalIds=new ArrayList<>();
+//            List<String>originalIds=new ArrayList<>();
+//            for(int j=0;j<jsonArray2.length();j++){
+//                String originalId=String.valueOf(jsonArray2.get(j));
+//                String paperOriginalId=paperId+"-"+originalId;
+//                String reportId=reportDao.findReportByPaperOriginalId(paperId,originalId).getId();
+//                paperOriginalIds.add(paperOriginalId);
+//                reportIds.add(reportId);
+//                originalIds.add(originalId);
+//            }
+//            groupDao.save(new ReviewGroup(name,desciption,workerIds,jobId,reportIds,paperOriginalIds,originalIds));
+//        }
+//    }
 
     public MessageVO uploadJobByJson(JobJsonDTO jobJsonDTO){
+        MessageVO messageVO=new MessageVO();
         String jobName=jobJsonDTO.getJob_name();
         String jobDescription=jobJsonDTO.getJob_description();
         String startTime=jobJsonDTO.getStart_time();
@@ -169,44 +180,49 @@ public class ReviewJobService {
         String caseId=jobJsonDTO.getCaseId();
         JSONArray workerList_Array=new JSONArray(jobJsonDTO.getWorker_list());
         String paperUrl=jobJsonDTO.getPaperUrl();
-        System.out.println("基本读取成功");
         List<String>workerList=new ArrayList<>();
         for(int i=0;i<workerList_Array.length();i++){
             workerList.add(String.valueOf(workerList_Array.get(i)));
         }
-        MessageVO messageVO=new MessageVO();
-        try {
-            String paperJson=readStringFromUrl(paperUrl);
-            JSONObject paperResult=reviewPaperService.uploadPaper(paperJson);
-            System.out.println("paperJson拉成功");
-            if(!paperResult.getString("status").equals("success")){
-                messageVO.setStatus("500");
-                messageVO.setMessage("创建paper失败");
-                return messageVO;
-            }
-            String paperId=paperResult.getString("paperId");
-            //是众测考试的话存对应的众测考试id
-            if (examId!=null&&(!examId.equals(""))){
-                crowdSourceToReviewPaperDao.save(new CrowdSourceToReviewPaper(paperId,examId+"-"+caseId,paperUrl));
-            }
-            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());
-            }
-            JSONObject jsonObject=uploadJob("",examId,caseId,jobName,jobDescription,paperId,startTime,endTime,0,0,workerList,"","",0);
-            // groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
-            if(jsonObject.getString("status").equals("success")) {
-                messageVO.setStatus("200");
-                messageVO.setMessage(jsonObject.getString("jobId"));
-            }
-            else{
+        ReviewJob reviewJob=jobDao.findJobByExamCase(examId,caseId);
+        if(reviewJob!=null){
+            String id=reviewJob.getId();
+            messageVO.setStatus("200");
+            messageVO.setMessage(id);
+        }
+        else {
+            try {
+                String paperJson = readStringFromUrl(paperUrl);
+                JSONObject paperResult = reviewPaperService.uploadPaper(paperJson);
+                System.out.println("paperJson拉成功");
+                if (!paperResult.getString("status").equals("success")) {
+                    messageVO.setStatus("500");
+                    messageVO.setMessage("创建paper失败");
+                    return messageVO;
+                }
+                String paperId = paperResult.getString("paperId");
+                //是众测考试的话存对应的众测考试id
+                if (examId != null && (!examId.equals(""))) {
+                    crowdSourceToReviewPaperDao.save(new CrowdSourceToReviewPaper(paperId, examId + "-" + caseId, paperUrl));
+                }
+                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());
+                }
+                JSONObject jsonObject = uploadJob("", examId, caseId, jobName, jobDescription, paperId, startTime, endTime, 0, 0, workerList, "", "", 0);
+                // groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
+                if (jsonObject.getString("status").equals("success")) {
+                    messageVO.setStatus("200");
+                    messageVO.setMessage(jsonObject.getString("jobId"));
+                } else {
+                    messageVO.setStatus("500");
+                    messageVO.setMessage(jsonObject.getString("message"));
+                }
+            } catch (IOException e) {
                 messageVO.setStatus("500");
-                messageVO.setMessage(jsonObject.getString("message"));
+                messageVO.setMessage(e.getMessage());
             }
-        } catch (IOException e) {
-            messageVO.setStatus("500");
-            messageVO.setMessage(e.getMessage());
         }
         return messageVO;
     }
@@ -237,21 +253,21 @@ public class ReviewJobService {
         }
     }
 
-    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.getOriginal_id());
-            jsonArray.put(jsonObject);
-        }
-        return jsonArray;
-
-    }
+//    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.getOriginal_id());
+//            jsonArray.put(jsonObject);
+//        }
+//        return jsonArray;
+//
+//    }
 
     public List<ReviewJob>getJobsByPaper(String paperId){
         return jobDao.findJobsByPaper(paperId);

+ 0 - 26
src/main/java/edu/nju/service/ReviewPaperService.java

@@ -379,32 +379,6 @@ public class ReviewPaperService {
             return url;
         }
         String workerId=reviewWorkerDao.save(new ReviewWorker(workerIndex,paperId,examId,jobId));
-        List<String>reportIndexs=new ArrayList<>();
-        String invokeResult = HTTP.sendGet("http://129.211.26.227:8082/reports2worker/" + examId, workerId);
-        if (invokeResult.startsWith("[")){
-            invokeResult.substring(1,invokeResult.length()-1);
-            String[]reports=invokeResult.split(",");
-            for(int i=0;i<reports.length;i++){
-                reportIndexs.add(reports[i]);
-            }
-        }else{
-            return "";
-        }
-        List<String>workerIds=new ArrayList<>();
-        workerIds.add(workerId);
-        List<String>reportIds=new ArrayList<>();
-        List<String>paperOriginalIds=new ArrayList<>();
-        List<String>originalIds=new ArrayList<>();
-        for(int i=0;i<reportIndexs.size();i++){
-            String originalId=reportIndexs.get(i);
-            ReviewReport reviewReport=reviewReportDao.findReportByPaperOriginalId(paperId,originalId);
-            String reportId=reviewReport.getId();
-            reportIds.add(reportId);
-            paperOriginalIds.add(paperId+"-"+originalId);
-            originalIds.add(originalId);
-        }
-        ReviewGroup reviewGroup=new ReviewGroup("","",workerIds,jobId,reportIds,paperOriginalIds,originalIds);
-        reviewGroupDao.save(reviewGroup);
         String url="http://47.99.140.117:"+port+"/report/review/job/"+jobId+"/"+workerId+"/0";
         return url;
         // TODO: 2019/12/13 对reviewWorker为null的情况返回错误提示 

+ 80 - 6
src/main/java/edu/nju/service/ReviewService.java

@@ -46,6 +46,9 @@ public class ReviewService {
     @Autowired
     ReviewPaperDao reviewPaperDao;
 
+    @Autowired
+    ReviewGroupDao reviewGroupDao;
+
 
 
     public ReviewAnswer getAnswerByWorkerJobReportItem(String jobId,String reportId,String workerId,String itemId){
@@ -99,14 +102,85 @@ public class ReviewService {
     }
 
     public List<ReviewReport>getReportsByWorkerJob(String worker_id,String job_id){
-        List<String>reportIds = groupDao.getReportsByUserJob(worker_id, job_id);
+        ReviewJob reviewJob=reviewJobDao.findJob(job_id);
+        String paperId=reviewJob.getPaper_id();
+//        List<String>workerIds=new ArrayList<>();
+//        workerIds.add(worker_id);
+        ReviewAnswer reviewAnswer=reviewAnswerDao.findLastAnswerByWorkerJob(job_id,worker_id);
+        String reportIndex="";
+        boolean isFinished=false;
+        //分配方式分为一次分一份report和一次分全部report,如果之前已经分配过,证明是一次分一份的情况,取最后一次分配的report及其完成情况传给分配服务,进行下一次分配
+        if(reviewAnswer!=null){
+            String reportId=reviewAnswer.getReport_id();
+            reportIndex=reportDao.findReviewReport(reportId).getOriginal_id();
+            isFinished=reviewAnswer.getIs_finished();
+//            List<String>originalIds=reviewGroup.getReport_id();
+//            List<String>reportIds=reviewGroup.getReport_id();
+//            List<String>paperOriginalIds=reviewGroup.getPaper_original_id();
+//            for(int i=0;i<reportIndexs.size();i++){
+//                String reoprtIndex=reportIndexs.get(i);
+//                if(!originalIds.contains(reoprtIndex)){
+//                    originalIds.add(reoprtIndex);
+//                    ReviewReport reviewReport=reviewReportDao.findReportByPaperOriginalId(paperId,reoprtIndex);
+//                    String reportId=reviewReport.getId();
+//                    reportIds.add(reportId);
+//                    paperOriginalIds.add(paperId+"-"+reoprtIndex);
+//                    originalIds.add(reoprtIndex);
+//                }
+//            }
+//            ReviewGroup updatedReviewGroup=new ReviewGroup(id,"","",workerIds,job_id,reportIds,paperOriginalIds,originalIds);
+//            reviewGroupDao.save(updatedReviewGroup);
+//            for(int i=0;i<reportIds.size();i++){
+//                ReviewReport reviewReport=reportDao.findReviewReport(reportIds.get(i));
+//                reports.add(reviewReport);
+//            }
+        }
+//        else {
+//            List<String> reportIds = new ArrayList<>();
+//            List<String> paperOriginalIds = new ArrayList<>();
+//            List<String> originalIds = new ArrayList<>();
+//            for (int i = 0; i < reportIndexs.size(); i++) {
+//                String originalId = reportIndexs.get(i);
+//                ReviewReport reviewReport = reviewReportDao.findReportByPaperOriginalId(paperId, originalId);
+//                reports.add(reviewReport);
+//                String reportId = reviewReport.getId();
+//                reportIds.add(reportId);
+//                paperOriginalIds.add(paperId + "-" + originalId);
+//                originalIds.add(originalId);
+//            }
+//            ReviewGroup newReviewGroup = new ReviewGroup("", "", workerIds, job_id, reportIds, paperOriginalIds, originalIds);
+//            reviewGroupDao.save(newReviewGroup);
+//        }
+        List<ReviewReport>reviewReports=getDistributedReportIndexs(job_id,paperId,worker_id,reportIndex,isFinished);
+        return reviewReports;
+    }
+
+    private List<ReviewReport>getDistributedReportIndexs(String jobId,String paperId, String workerId,String lastReportIndex,boolean isFinished){
+        List<String>reportIndexs=new ArrayList<>();
         List<ReviewReport>reports=new ArrayList<>();
-        if(reportIds==null||reportIds.size()==0){
-            return null;
-        }else{
-            for(int i=0;i<reportIds.size();i++){
-                reports.add(reportDao.findReviewReport(reportIds.get(i)));
+        JSONObject data=new JSONObject();
+        data.put("workerId",workerId);
+        data.put("lastReportIndex",lastReportIndex);
+        data.put("isFinished",isFinished);
+        String uploadJson=data.toString();
+        String invokeResult = null;
+        try {
+            invokeResult = HTTP.postBody("http://129.211.26.227:8082/reports2worker/" + jobId, uploadJson);
+        } catch (Exception e) {
+            return new ArrayList<>();
+        }
+        if (invokeResult.startsWith("[")){
+            invokeResult.substring(1,invokeResult.length()-1);
+            String[]reportArray=invokeResult.split(",");
+            for(int i=0;i<reportArray.length;i++){
+                reportIndexs.add(reportArray[i]);
             }
+        }else{
+            return new ArrayList<>();
+        }
+        for(int i=0;i<reportIndexs.size();i++){
+            ReviewReport reviewReport=reportDao.findReportByPaperOriginalId(paperId,reportIndexs.get(i));
+            reports.add(reviewReport);
         }
         return reports;
     }

+ 52 - 1
src/main/java/edu/nju/util/HTTP.java

@@ -1,5 +1,7 @@
 package edu.nju.util;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import org.json.JSONException;
 
 import java.io.*;
@@ -9,6 +11,7 @@ import java.net.URLConnection;
 import java.nio.charset.Charset;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.io.IOUtils;
 
 public class HTTP {
 
@@ -162,9 +165,57 @@ public class HTTP {
             }
             return true;
         } catch (Exception e) {
-            System.out.println("发送GET请求出现异常!" + e);
+            System.out.println("发送PUT请求出现异常!" + e);
             e.printStackTrace();
             return false;
         }
     }
+
+    public static String postBody(String urlPath, String json) throws Exception {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        String result = "";
+        try {
+            URL realUrl = new URL(urlPath);
+            // 打开和URL之间的连接
+            HttpURLConnection conn = (HttpURLConnection)realUrl.openConnection();
+            // 设置通用的请求属性
+            conn.setRequestMethod("POST");
+            // 发送POST请求必须设置下面的属性
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            conn.setUseCaches(false);
+            //设置请求属性
+            conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
+            conn.connect();
+            // 获取URLConnection对象对应的输出流
+            out = new PrintWriter(conn.getOutputStream());
+            // 发送请求参数
+            out.print(JSON.toJSONString(json));
+            // flush输出流的缓冲
+            out.flush();
+            // 定义BufferedReader输入流来读取URL的响应
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+            String line = "";
+            while ((line = in.readLine()) != null) {
+                result += line;
+            }
+        } catch (Exception e) {
+            throw new RuntimeException("远程通路异常"+e.toString());
+        }
+        // 使用finally块来关闭输出流、输入流
+        finally {
+            try {
+                if (out != null) {
+                    out.close();
+                }
+                if (in != null) {
+                    in.close();
+                }
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+        return result;
+    }
 }