Bläddra i källkod

Merge branch 'xjw' of http://git.mooctest.net/summer/crowdsource-backend into xjw

xujiawei 5 år sedan
förälder
incheckning
4c000cdc53

+ 6 - 0
pom.xml

@@ -133,6 +133,12 @@
             <version>2.1.0.RELEASE</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+            <version>3.8.0</version>
+        </dependency>
+
 
 
 

+ 6 - 1
src/main/java/edu/nju/controller/ExtraController.java

@@ -485,6 +485,11 @@ public class ExtraController {
 		}
 	}
 
-
+	@RequestMapping(value = "/reportsToReviewPaper")
+	@ResponseBody
+	public String getTask(String case_take_id) {
+		String uploadUrl = extraService.reportsToReviewPaper(case_take_id);
+		return uploadUrl;
+	}
 
 }

+ 30 - 0
src/main/java/edu/nju/dao/CrowdSourceToReviewPaperDao.java

@@ -0,0 +1,30 @@
+package edu.nju.dao;
+
+import edu.nju.entities.CrowdSourceToReviewPaper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+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;
+
+@Repository
+public class CrowdSourceToReviewPaperDao {
+
+    @Autowired
+    private MongoOperations mongoOperations;
+
+    public String save(CrowdSourceToReviewPaper paper) {
+        mongoOperations.save(paper);
+        return paper.getId();
+    }
+
+    public CrowdSourceToReviewPaper getByCaseTakeId(String caseTakeId){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("case_take_id").is(caseTakeId));
+        List<CrowdSourceToReviewPaper> list = mongoOperations.find(query,CrowdSourceToReviewPaper.class);
+        if(list.size() == 0 || list == null) {return null;}
+        return list.get(0);
+    }
+}

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

@@ -24,6 +24,14 @@ public class ReviewReportDao {
         return list.get(0);
     }
 
+    public ReviewReport findReportByPaperOriginalId(String paperId,String originalId){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("paper_id").is(paperId).and("original_id").is(originalId));
+        List<ReviewReport> list = mongoOperations.find(query,ReviewReport.class);
+        if(list.size() == 0 || list == null) {return null;}
+        return list.get(0);
+    }
+
     public String save(ReviewReport report) {
         mongoOperations.save(report);
         return report.getId();

+ 57 - 0
src/main/java/edu/nju/entities/CrowdSourceToReviewPaper.java

@@ -0,0 +1,57 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class CrowdSourceToReviewPaper implements java.io.Serializable {
+
+    private static final long serialVersionUID = 4856003776471853656L;
+
+    @Id
+    private String id;
+
+    private String review_paper_id;
+
+    private String case_take_id;
+
+    private String url;
+
+    public CrowdSourceToReviewPaper(String review_paper_id, String case_take_id, String url) {
+        this.review_paper_id = review_paper_id;
+        this.case_take_id = case_take_id;
+        this.url = url;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getReview_paper_id() {
+        return review_paper_id;
+    }
+
+    public void setReview_paper_id(String review_paper_id) {
+        this.review_paper_id = review_paper_id;
+    }
+
+    public String getCase_take_id() {
+        return case_take_id;
+    }
+
+    public void setCase_take_id(String case_take_id) {
+        this.case_take_id = case_take_id;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+}

+ 32 - 1
src/main/java/edu/nju/entities/ReviewGroup.java

@@ -3,6 +3,7 @@ package edu.nju.entities;
 import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Document
@@ -21,15 +22,32 @@ public class ReviewGroup implements java.io.Serializable{
 
     private String job_id;
 
+    //此处的report_id实际上是paper_id+original_id
     private List<String> report_id;
 
+    private List<String>paper_original_id;
 
-    public ReviewGroup(String name, String description, List<String> workers_id, String job_id, List<String> report_id) {
+    private List<String>original_id;
+
+
+    public ReviewGroup(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.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() {
@@ -80,6 +98,19 @@ public class ReviewGroup implements java.io.Serializable{
         this.report_id = report_id;
     }
 
+    public List<String> getPaper_original_id() {
+        return paper_original_id;
+    }
 
+    public void setPaper_original_id(List<String> paper_original_id) {
+        this.paper_original_id = paper_original_id;
+    }
 
+    public List<String> getOriginal_id() {
+        return original_id;
+    }
+
+    public void setOriginal_id(List<String> original_id) {
+        this.original_id = original_id;
+    }
 }

+ 2 - 0
src/main/java/edu/nju/service/AnalyzeService.java

@@ -372,4 +372,6 @@ public class AnalyzeService {
 	private boolean checkSimilarity(Bug bug1,Bug bug2){
 		return true;
 	}
+
+
 }

+ 99 - 0
src/main/java/edu/nju/service/ExtraService.java

@@ -1,10 +1,16 @@
 package edu.nju.service;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
 import java.util.*;
 
 import edu.nju.dao.*;
 import edu.nju.entities.*;
+import edu.nju.util.FormatJson;
 import edu.nju.util.HTTP;
+import edu.nju.util.OssAliyun;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,6 +35,15 @@ public class ExtraService {
 
 	@Autowired
 	TaskDao taskDao;
+
+	@Autowired
+	BugMirrorDao mirrorDao;
+
+	@Autowired
+	ReviewPaperService reviewPaperService;
+
+	@Autowired
+	CrowdSourceToReviewPaperDao crowdSourceToReviewPaperDao;
 	
 	//测试用例相关
 	public String saveTestCase(String report_id, String name, String front, String behind, String description) {
@@ -168,5 +183,89 @@ public class ExtraService {
 		}
 	}
 
+	public String reportsToReviewPaper(String case_take_id){
+		int[]options={1,2,3,4,5,6,7,8,9,10};
+		try {
+			CrowdSourceToReviewPaper crowdSourceToReviewPaper=crowdSourceToReviewPaperDao.getByCaseTakeId(case_take_id);
+			if(crowdSourceToReviewPaper!=null){
+				String url=crowdSourceToReviewPaper.getUrl();
+				return url;
+			}
+			JSONObject result=new JSONObject();
+			List<Bug>bugs=bugDao.findByCaseid(case_take_id);
+			JSONArray reportArray=new JSONArray();
+			int[]indexArray=new int[bugs.size()];
+			for(int i=0;i<bugs.size();i++) {
+				Bug bug=bugs.get(i);
+				BugMirror mirror=mirrorDao.findById(bug.getId());
+				JSONObject jsonObject = new JSONObject();
+				jsonObject.put("index",i);
+				indexArray[i]=i;
+				jsonObject.put("name",bug.getTitle());
+				jsonObject.put("original_id",bug.getId());
+				String description="";
+				description+=bug.getDescription()+"\n";
+				description+=bug.getBug_page()+"\n";
+				description+=bug.getBug_category()+"\n";
+				description+=bug.getSeverity()+"\n";
+				description+=bug.getRecurrent()+"\n";
+				description+=bug.getCreate_time_millis()+"\n";
+				description+=mirror.getGood().size()+"\n";
+				description+=mirror.getBad().size();
+				jsonObject.put("description",description);
+				//JSONArray urlArray=new JSONArray();
+				String[]urlArray=new String[1];
+				urlArray[0]=bug.getImg_url();
+				//JSONObject temp=new JSONObject(bug.getImg_url());
+				//urlArray.put(temp);
+				jsonObject.put("img_url",urlArray);
+				JSONArray fileArray=new JSONArray();
+				jsonObject.put("file_url",fileArray);
+				reportArray.put(jsonObject);
+			}
+			result.put("report_list",reportArray);
+			result.put("description","");
+			result.put("name","");
+			result.put("create_time",String.valueOf(System.currentTimeMillis()));
+			result.put("type","众测任务");
+			result.put("application_url","");
+			result.put("requirement_url","");
+			JSONArray itemGroupArray=new JSONArray();
+			JSONObject itemGroupObject=new JSONObject();
+			JSONArray itemArray=new JSONArray();
+			JSONObject itemObject=new JSONObject();
+			itemObject.put("index",0);
+			itemObject.put("description","请评分");
+			itemObject.put("is_required",true);
+			itemObject.put("type","Single");
+			itemObject.put("options",options);
+			itemArray.put(itemObject);
+			itemGroupObject.put("report_list",indexArray);
+			itemGroupObject.put("item_list",itemArray);
+			itemGroupArray.put(itemGroupObject);
+			result.put("item_group_list",itemGroupArray);
+			String jsonString = FormatJson.formatJson(result.toString());
+			// 将格式化后的字符串写入文件
+			String fileName=case_take_id+".json";
+			File file=new File(fileName);
+			Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
+			write.write(jsonString);
+			write.flush();
+			write.close();
+			//OssAliyun.uploadFile("paperjson/"+case_take_id,file);
+			JSONObject jsonObject=reviewPaperService.uploadPaper(result.toString());
+			String paperId=jsonObject.getString("paperId");
+			String url="http://mooctest-site.oss-cn-shanghai.aliyuncs.com/paperjson/"+case_take_id;
+			crowdSourceToReviewPaperDao.save(new CrowdSourceToReviewPaper(paperId,case_take_id,url));
+			return url;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+
+
+
 
 }

+ 21 - 7
src/main/java/edu/nju/service/ReviewJobService.java

@@ -62,9 +62,15 @@ public class ReviewJobService {
             }
             List<ReviewReport>reviewReports=reportDao.getReportsByPaperId(paperId);
             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));
+            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));
         }
         else {
             saveJobDistribution(workerDistribution, jobId);
@@ -91,6 +97,7 @@ public class ReviewJobService {
     }
 
     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);
@@ -103,10 +110,17 @@ public class ReviewJobService {
             }
             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++){
-                reportIds.add(String.valueOf(jsonArray1.get(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));
+            groupDao.save(new ReviewGroup(name,desciption,workerIds,jobId,reportIds,paperOriginalIds,originalIds));
         }
     }
 
@@ -139,7 +153,7 @@ public class ReviewJobService {
                 reportIds.add(reports.get(i).getId());
             }
             JSONObject jsonObject=uploadJob("",examId,caseId,jobName,jobDescription,paperId,startTime,endTime,workerList,"",false,0);
-           // groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
+            // groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
             if(jsonObject.getString("status").equals("success")) {
                 messageVO.setStatus("200");
                 messageVO.setMessage(jsonObject.getString("jobId"));
@@ -191,7 +205,7 @@ public class ReviewJobService {
             jsonObject.put("name",reviewGroup.getName());
             jsonObject.put("description",reviewGroup.getDescription());
             jsonObject.put("worker",reviewGroup.getWorkers_id());
-            jsonObject.put("report",reviewGroup.getReport_id());
+            jsonObject.put("report",reviewGroup.getPaper_original_id());
             jsonArray.put(jsonObject);
         }
         return jsonArray;

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

@@ -412,6 +412,7 @@ public class ReviewPaperService {
         reviewGroupDao.save(reviewGroup);
         String url="http://47.99.140.117:9090/report/review/job/"+jobId+"/"+workerId+"/0";
         return url;
+        // TODO: 2019/12/13 对reviewWorker为null的情况返回错误提示 
     }