瀏覽代碼

Merge branch 'test' into dmy

MengyangDuan 5 年之前
父節點
當前提交
2f150369f4

+ 8 - 0
src/main/java/edu/nju/controller/AnalyzeController.java

@@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletResponse;
 
 import edu.nju.model.AnalyseVO;
 import edu.nju.model.BugDataVO;
+import edu.nju.model.HistoricalDataVO;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -341,4 +342,11 @@ public class AnalyzeController {
 			e.printStackTrace();
 		}
 	}
+
+	@RequestMapping(value = "/historicalData")
+	@ResponseBody
+	public HistoricalDataVO getHistoricalData(Long workerId,int caseTypeId){
+		return aservice.getHistoricalData(workerId, caseTypeId);
+	}
+
 }

+ 10 - 23
src/main/java/edu/nju/controller/ExtraController.java

@@ -9,6 +9,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import edu.nju.entities.*;
+import edu.nju.model.ExamVO;
+import edu.nju.model.PageExamVO;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -95,9 +97,16 @@ public class ExtraController {
 			e.printStackTrace();
 		}
 	}
+
+	//获得一场众测三级页面信息
+	@RequestMapping(value = "/getPageVo")
+	@ResponseBody
+	public PageExamVO findPage(Long examId, Long caseId) {
+		return extraService.findPageAndExam(examId,caseId);
+	}
 	
 	//使用worker_id获取测试报告
-	@RequestMapping(value = "/findByWorker")
+	@RequestMapping(value = "/findByWorkeer")
 	@ResponseBody
 	public void findByWorker(String case_take_id, String worker_id, HttpServletResponse response) {
 		try {
@@ -421,28 +430,6 @@ public class ExtraController {
 			e.printStackTrace();
 		}
 	}
-	
-	//获取页面json
-	@RequestMapping(value = "/getPageJson")
-	@ResponseBody
-	public void getPageJson(String caseId, HttpServletResponse response) {
-		try {
-			PrintWriter out = response.getWriter();
-			JSONObject result = new JSONObject();
-			Exam exam = extraService.getExam(caseId);
-			if(exam != null) { 
-				result.put("status", 200);
-				result.put("result", exam.getJson());
-			}
-			else { result.put("status", 500); }
-			out.print(result);
-			out.flush();
-			out.close();
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
 
 
 	@RequestMapping(value = "/updateTask", method = RequestMethod.POST)

+ 26 - 5
src/main/java/edu/nju/controller/ReviewAnalyzeController.java

@@ -1,12 +1,11 @@
 package edu.nju.controller;
 
+import edu.nju.entities.ReviewJob;
 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 org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -35,11 +34,33 @@ public class ReviewAnalyzeController {
     }
 
     //获取众审任务的结果excel
-    @RequestMapping(value = "/getJobExcel")
+    @RequestMapping(value = "/job/excel" , method = RequestMethod.GET)
     @ResponseBody
     public String getExcel (String jobId){
         String res = reviewAnalyzeService.getExcel(jobId);
-        return res==null?"errpr":res;
+        return res==null?"err0r":res;
     }
 
+    @RequestMapping(value = "/job/json", method = RequestMethod.GET)
+    @ResponseBody
+    public void getJson ( @RequestParam("id") String jobId , HttpServletResponse response){
+        try {
+            PrintWriter out = response.getWriter();
+            JSONObject job = reviewAnalyzeService.getJsonExport(jobId);
+            out.print(job);
+            out.flush();
+            out.close();
+        }catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+//    @RequestMapping(value = "/job/json", method = RequestMethod.GET)
+//    @ResponseBody
+//    public JSONObject getJson ( @RequestParam("id") String jobId , HttpServletResponse response){
+//        JSONObject job = reviewAnalyzeService.getJsonExport(jobId);
+//        return job;
+//    }
+
 }

+ 19 - 0
src/main/java/edu/nju/controller/ReviewPaperController.java

@@ -6,6 +6,7 @@ import edu.nju.entities.ReviewReport;
 import edu.nju.entities.ReviewWorker;
 import edu.nju.model.CrowdReviewReportDTO;
 import edu.nju.model.CrowdReviewReportVO;
+import edu.nju.service.ReviewAnalyzeService;
 import edu.nju.service.ReviewPaperService;
 import org.json.JSONArray;
 import org.json.JSONObject;
@@ -27,6 +28,9 @@ public class ReviewPaperController {
     @Autowired
     ReviewPaperService reviewPaperService;
 
+    @Autowired
+    ReviewAnalyzeService analyzeService;
+
     @RequestMapping(value = "/uploadReport", method = RequestMethod.POST)
     @ResponseBody
     public  CrowdReviewReportVO uploadReport(@RequestBody CrowdReviewReportDTO crowdReviewReportDTO){
@@ -151,5 +155,20 @@ public class ReviewPaperController {
         return url;
     }
 
+    @RequestMapping(value = "/answer", method = RequestMethod.GET)
+    @ResponseBody
+    public void getPaperAnswerJson (@RequestParam("paperId") String peperId, HttpServletResponse response ){
+        try {
+            PrintWriter out = response.getWriter();
+            JSONArray paperJson = analyzeService.getJsonExportByPaper(peperId);
+            out.print(paperJson);
+            out.flush();
+            out.close();
+        }catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
 
 }

+ 5 - 0
src/main/java/edu/nju/dao/ReportDao.java

@@ -60,5 +60,10 @@ public class ReportDao {
 		query.addCriteria(Criteria.where("task_id").is(task_id));
 		return mongoOperations.find(query, Report.class);
 	}
+	public List<Report> findReportsByWorker(String worker_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("worker_id").is(worker_id));
+		return mongoOperations.find(query, Report.class);
+	}
 	
 }

+ 75 - 0
src/main/java/edu/nju/model/ExamVO.java

@@ -0,0 +1,75 @@
+package edu.nju.model;
+
+import java.util.Date;
+
+public class ExamVO {
+    private Long id;
+
+    private Long caseId;
+
+    private int state;
+
+    private int caseTypeId;
+
+    private Date beginTime;
+
+    private Date endTime;
+
+    public ExamVO(Long id,Long caseId, int state, int caseTypeId, Date beginTime, Date endTime) {
+        this.id = id;
+        this.caseId=caseId;
+        this.state = state;
+        this.caseTypeId = caseTypeId;
+        this.beginTime = beginTime;
+        this.endTime = endTime;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getCaseId() {
+        return caseId;
+    }
+
+    public void setCaseId(Long caseId) {
+        this.caseId = caseId;
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public void setState(int state) {
+        this.state = state;
+    }
+
+    public int getCaseTypeId() {
+        return caseTypeId;
+    }
+
+    public void setCaseTypeId(int caseTypeId) {
+        this.caseTypeId = caseTypeId;
+    }
+
+    public Date getBeginTime() {
+        return beginTime;
+    }
+
+    public void setBeginTime(Date beginTime) {
+        this.beginTime = beginTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+}
+

+ 64 - 0
src/main/java/edu/nju/model/HistoricalDataVO.java

@@ -0,0 +1,64 @@
+package edu.nju.model;
+
+
+import java.util.List;
+
+public class HistoricalDataVO {
+    private int reportNum;
+
+    private List<Double>scoreList;  //各个报告的得分
+
+    private Double totalScore;   //报告总分
+
+    private int participateNum;   //参加的和本次考试类型有关的众包测试次数
+
+    private int totalParticipateNum;  //参加众包考试次数
+
+    public HistoricalDataVO(int reportNum, List<Double> scoreList, Double totalScore, int participateNum, int totalParticipateNum) {
+        this.reportNum = reportNum;
+        this.scoreList = scoreList;
+        this.totalScore = totalScore;
+        this.participateNum = participateNum;
+        this.totalParticipateNum = totalParticipateNum;
+    }
+
+    public int getReportNum() {
+        return reportNum;
+    }
+
+    public void setReportNum(int reportNum) {
+        this.reportNum = reportNum;
+    }
+
+    public List<Double> getScoreList() {
+        return scoreList;
+    }
+
+    public void setScoreList(List<Double> scoreList) {
+        this.scoreList = scoreList;
+    }
+
+    public Double getTotalScore() {
+        return totalScore;
+    }
+
+    public void setTotalScore(Double totalScore) {
+        this.totalScore = totalScore;
+    }
+
+    public int getParticipateNum() {
+        return participateNum;
+    }
+
+    public void setParticipateNum(int participateNum) {
+        this.participateNum = participateNum;
+    }
+
+    public int getTotalParticipateNum() {
+        return totalParticipateNum;
+    }
+
+    public void setTotalParticipateNum(int totalParticipateNum) {
+        this.totalParticipateNum = totalParticipateNum;
+    }
+}

+ 59 - 0
src/main/java/edu/nju/model/PageExamVO.java

@@ -0,0 +1,59 @@
+package edu.nju.model;
+
+public class PageExamVO {
+
+    private Long examId;
+
+    private Long caseId;
+
+    private ExamVO examVO;
+
+    private int caseTypeId;   //web:0 app:1
+
+    private String pageContent;
+
+    public PageExamVO(Long examId,Long caseId) {
+        this.examId = examId;
+        this.caseId = caseId;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long id) {
+        this.examId = id;
+    }
+
+    public Long getCaseId() {
+        return caseId;
+    }
+
+    public void setCaseId(Long caseId) {
+        this.caseId = caseId;
+    }
+
+    public ExamVO getExamVO() {
+        return examVO;
+    }
+
+    public void setExamVO(ExamVO examVO) {
+        this.examVO = examVO;
+    }
+
+    public int getCaseTypeId() {
+        return caseTypeId;
+    }
+
+    public void setCaseTypeId(int caseTypeId) {
+        this.caseTypeId = caseTypeId;
+    }
+
+    public String getPageContent() {
+        return pageContent;
+    }
+
+    public void setPageContent(String pageContent) {
+        this.pageContent = pageContent;
+    }
+}

+ 5 - 0
src/main/java/edu/nju/model/WebBrand.java

@@ -0,0 +1,5 @@
+package edu.nju.model;
+
+public enum WebBrand {
+    windows,linux,macos
+}

+ 33 - 4
src/main/java/edu/nju/service/AnalyzeService.java

@@ -4,11 +4,9 @@ import java.util.*;
 
 import edu.nju.dao.*;
 import edu.nju.entities.*;
-import edu.nju.model.AnalyseVO;
-import edu.nju.model.BugDataVO;
-import edu.nju.model.BugSeverity;
-import edu.nju.model.WorkerVO;
+import edu.nju.model.*;
 import edu.nju.util.HTTP;
+import org.apache.commons.lang3.EnumUtils;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -573,5 +571,36 @@ public class AnalyzeService {
 		return analyseVO;
 	}
 
+	public HistoricalDataVO getHistoricalData(Long workerId, int caseTypeId){
+		List<Report>reports=reportDao.findReportsByWorker(String.valueOf(workerId));
+		int reportNum=reports.size();
+		List<Double>reportScoreList=new ArrayList<>();
+		double totalScore=0;
+		int participateSimilarNum=0;
+		for(Report report:reports){
+			String reportId=report.getId();
+			List<String>bugIds=bdao.findByReport(reportId);
+			double score=0;
+			for(String bugId:bugIds){
+				BugScore bugScore=bsdao.findById(bugId);
+				if(bugScore!=null) {
+					score += bugScore.getGrade();
+				}
+			}
+			totalScore+=score;
+			reportScoreList.add(score);
+			int itemCaseType=1;
+			String brand=report.getDevice_os();
+			if(EnumUtils.isValidEnum(WebBrand.class, brand)){
+				itemCaseType=0;
+			}
+			if(itemCaseType==caseTypeId){
+				participateSimilarNum++;
+			}
+		}
+		HistoricalDataVO historicalDataVO=new HistoricalDataVO(reportNum,reportScoreList,totalScore,participateSimilarNum,reportNum);
+		return historicalDataVO;
+	}
+
 
 }

+ 43 - 2
src/main/java/edu/nju/service/ExtraService.java

@@ -9,9 +9,9 @@ import java.util.*;
 
 import edu.nju.dao.*;
 import edu.nju.entities.*;
-import edu.nju.model.BugRecurrent;
-import edu.nju.model.BugSeverity;
+import edu.nju.model.*;
 import edu.nju.util.*;
+import org.apache.commons.lang3.EnumUtils;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -276,6 +276,47 @@ public class ExtraService {
 		return null;
 	}
 
+	public PageExamVO findPageAndExam(long examId, long caseId){
+		PageExamVO pageExamVO=new PageExamVO(examId,caseId);
+		Exam examCase=getExam(String.valueOf(caseId));
+		pageExamVO.setPageContent(examCase.getJson());
+		String json=examCase.getPaper_type();
+		int caseTypeId=getPaperType(json);
+		pageExamVO.setCaseTypeId(caseTypeId);
+		Task task=taskDao.findById(String.valueOf(examId));
+		Date startTime=null;
+		Date endTime=null;
+		if(task!=null){
+			startTime=new Date(task.getStart_time());
+			endTime=new Date(task.getEnd_time());
+		}
+		ExamVO examVO=new ExamVO(examId,caseId,0,caseTypeId,startTime,endTime);
+		pageExamVO.setExamVO(examVO);
+		return pageExamVO;
+	}
+
+	private int getPaperType(String json){
+		//json=json.substring(1,json.length()-1);
+		JSONObject jsonObject = new JSONObject(json);
+		JSONArray jsonArray=jsonObject.getJSONArray("subTitles");
+		int caseTypeId=1;//这里只对WEB和APP进行了判断
+		for(int i=0;i<jsonArray.length();i++) {
+			JSONObject item = jsonArray.getJSONObject(i);
+			String label=item.getString("name");
+			if(label.equals("操作系统")){
+				JSONArray brandList=item.getJSONArray("value");
+				String brand=String.valueOf(brandList.get(0));
+				if(EnumUtils.isValidEnum(WebBrand.class, brand)){
+					caseTypeId=0;
+				}
+				break;
+			}
+		}
+		return caseTypeId;
+	}
+
+
+
 
 
 

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

@@ -9,6 +9,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.util.CellRangeAddress;
+import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -97,6 +98,80 @@ public class ReviewAnalyzeService {
     }
 
 
+    public JSONArray getJsonExportByPaper( String paperId ) {
+        List<ReviewJob> jobs =    reviewJobDao.findJobsByPaper(paperId);
+        JSONArray res = new JSONArray();
+        for (ReviewJob job : jobs){
+            res.put(getJsonExport(job.getId()));
+        }
+        return res;
+    }
+
+    public JSONObject getJsonExport ( String jobId){
+        ReviewJob job = reviewJobDao.findJob(jobId) ;
+        JSONObject res = new JSONObject();
+        JSONArray reportInfo = new JSONArray();
+        List<ReviewReport > reports = reviewReportDao.getReportsByPaperId(job.getPaper_id());
+        JSONObject reportJsonInfo ;
+        for( ReviewReport r : reports){ // 便利所有的报告,报告报告的信息 和 评审信息
+            reportJsonInfo = new JSONObject();
+            reportJsonInfo.put("info",new JSONObject(r));
+            List<ReviewItem> items = reviewItemDao.findItemsByReport(r.getId());
+            JSONArray itemArray = new JSONArray();
+            for (ReviewItem i : items){
+                JSONObject itemJson = new JSONObject();
+                itemJson.put("description" , i.getDescription());
+                List<ReviewAnswer> answers = reviewAnswerDao.getItemReportJobAnswers(i.getId(),r.getId(),jobId);
+                int [] answerCount = new int [i.getOptions().size()];
+                StringBuffer sb = new StringBuffer() ;
+                JSONArray answerTemp = new JSONArray();
+                JSONObject jsonTemp ;
+                itemJson.put("type",i.getType());
+                switch (i.getType()){
+                    case "Single" :
+                    case "Multiple":
+                        for(ReviewAnswer answer : answers){
+                            for( int ii = 0 ;ii < answer.getAnswers().size();ii++){
+                                answerCount[ii] ++;
+                            }
+                        }
+                        for( int ii =0;ii<i.getOptions().size();ii++){
+                            jsonTemp = new JSONObject();
+                            jsonTemp.put(i.getOptions().get(ii),answerCount[ii]);
+                            answerTemp.put(jsonTemp);
+                        }
+                        break;
+                    case "Description" :
+                        for(ReviewAnswer answer : answers){
+                            sb.append(answer.getAnswers().toString()+"\n");
+                        }
+                        jsonTemp = new JSONObject();
+                        jsonTemp.put(i.getDescription(),sb.toString());
+                        answerTemp.put(jsonTemp);
+                        break;
+                    case "File":
+                        for(ReviewAnswer answer : answers){
+                            sb.append(answer.getFile_url()+"\n");
+                        }
+                        jsonTemp = new JSONObject();
+                        jsonTemp.put(i.getDescription(),sb.toString());
+                        answerTemp.put(jsonTemp);
+                        break;
+                    default:
+                        break;
+                }
+                itemJson.put("answer",answerTemp);
+                itemArray.put(itemJson);
+            }
+            reportJsonInfo.put("checkItem",itemArray);
+            reportInfo.put(reportJsonInfo);
+        }
+        res.put("reportInfo",reportInfo);
+        res.put("jobInfo",new JSONObject(job));
+        return res;
+    }
+
+
 
     public String getExcel (String jobId){
         int rIndex = 0;