Quellcode durchsuchen

添加对考试的统计接口

MengyangDuan vor 5 Jahren
Ursprung
Commit
3aec221e89

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

@@ -7,6 +7,7 @@ import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
 
+import edu.nju.model.AnalyseVO;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -311,4 +312,11 @@ public class AnalyzeController {
 			e.printStackTrace();
 		}
 	}
+
+	@RequestMapping(value = "/analyseExam")
+	@ResponseBody
+	public AnalyseVO analyseExam(String caseId, String taskId){
+		AnalyseVO analyseVO=aservice.getReviewAnalyseVO(caseId, taskId);
+		return analyseVO;
+	}
 }

+ 1 - 1
src/main/java/edu/nju/controller/ReviewAnalyzeController.java

@@ -6,7 +6,6 @@ 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.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletResponse;
@@ -40,4 +39,5 @@ public class ReviewAnalyzeController {
     public String getExcel (String jobId){
         return reviewAnalyzeService.getExcel(jobId)?"1111":"tmd";
     }
+
 }

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

@@ -55,10 +55,10 @@ public class ReviewJobController {
 
     @RequestMapping(value = "/uploadJob", method = RequestMethod.POST)
     @ResponseBody
-    public void uploadJob(String name, String description, String paperId, String startTime, String endTime, @RequestParam("workerList")List<String>workerList, String workerDistribution,boolean isCrossValidation,int validationNum,int maxWorker, HttpServletResponse response){
+    public void uploadJob(String name, String description, String paperId, String startTime, String endTime, @RequestParam("workerList")List<String>workerList, String workerDistribution,int maxWorker, HttpServletResponse response){
         try {
             PrintWriter out = response.getWriter();
-            JSONObject jsonObject = reviewJobService.uploadJob("","","",name, description, paperId, startTime, endTime, workerList, workerDistribution,isCrossValidation,validationNum,maxWorker);
+            JSONObject jsonObject = reviewJobService.uploadJob("","","",name, description, paperId, startTime, endTime, workerList, workerDistribution,maxWorker);
             out.print(jsonObject);
             out.flush();
             out.close();
@@ -92,8 +92,8 @@ public class ReviewJobController {
 
     @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,boolean isCrossValidation,int validationNum, int maxWorker,HttpServletResponse response){
-        JSONObject result = reviewJobService.updateJob(jobId, name, description, paperId, startTime, endTime, workerList, workerDistribution,isCrossValidation,validationNum,maxWorker);
+    public void updateJob(String jobId, String name, String description, String paperId,String startTime, String endTime,@RequestParam("workerList")List<String>workerList,String workerDistribution, int maxWorker,HttpServletResponse response){
+        JSONObject result = reviewJobService.updateJob(jobId, name, description, paperId, startTime, endTime, workerList, workerDistribution,maxWorker);
         try {
             PrintWriter out = response.getWriter();
             out.print(result);

+ 1 - 31
src/main/java/edu/nju/entities/ReviewJob.java

@@ -28,14 +28,10 @@ public class ReviewJob implements java.io.Serializable{
 
     private String group;
 
-    private boolean isCrossValidation;
-
-    private int validationNum;
-
     private int max_worker;
 
     @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,Boolean isCrossValidation,Integer validationNum,Integer max_worker) {
+    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,Integer max_worker) {
         this.exam_id=exam_id;
         this.case_id=case_id;
         this.description = description;
@@ -45,16 +41,6 @@ public class ReviewJob implements java.io.Serializable{
         this.start_time = start_time;
         this.end_time = end_time;
         this.group = group;
-        if(isCrossValidation==null){
-            this.isCrossValidation=false;
-        }
-        else
-            this.isCrossValidation=isCrossValidation;
-        if(isCrossValidation==null){
-            this.validationNum=0;
-        }
-        else
-            this.validationNum=validationNum;
         if(max_worker==null){
             this.max_worker=0;
         }
@@ -147,22 +133,6 @@ public class ReviewJob implements java.io.Serializable{
         this.group = group;
     }
 
-    public boolean isCrossValidation() {
-        return isCrossValidation;
-    }
-
-    public void setCrossValidation(boolean crossValidation) {
-        isCrossValidation = crossValidation;
-    }
-
-    public int getValidationNum() {
-        return validationNum;
-    }
-
-    public void setValidationNum(int validationNum) {
-        this.validationNum = validationNum;
-    }
-
     public String getCase_id() {
         return case_id;
     }

+ 110 - 0
src/main/java/edu/nju/model/AnalyseVO.java

@@ -0,0 +1,110 @@
+package edu.nju.model;
+
+import java.util.List;
+import java.util.Map;
+
+public class AnalyseVO {
+
+    private long startTime;
+
+    private long endTime;
+
+    private String taskName;
+
+    private int reportNum;
+
+    private int bugNum;
+
+    private int testCaseNum;
+
+    private Map<Integer,Integer> gradeDistrubute;
+
+    private List<WorkerVO>workerRank;
+
+    private Map<String,Integer>workerDistribute;
+
+    public AnalyseVO(long startTime, long endTime, String taskName, int reportNum, int bugNum, int testCaseNum, Map<Integer, Integer> gradeDistrubute, List<WorkerVO> workerRank,Map<String,Integer>workerDistribute) {
+        this.startTime = startTime;
+        this.endTime = endTime;
+        this.taskName=taskName;
+        this.reportNum = reportNum;
+        this.bugNum = bugNum;
+        this.testCaseNum = testCaseNum;
+        this.gradeDistrubute = gradeDistrubute;
+        this.workerRank = workerRank;
+        this.workerDistribute=workerDistribute;
+    }
+
+    public long getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(long startTime) {
+        this.startTime = startTime;
+    }
+
+    public long getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(long endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getTaskName() {
+        return taskName;
+    }
+
+    public void setTaskName(String taskName) {
+        this.taskName = taskName;
+    }
+
+
+    public int getReportNum() {
+        return reportNum;
+    }
+
+    public void setReportNum(int reportNum) {
+        this.reportNum = reportNum;
+    }
+
+    public int getBugNum() {
+        return bugNum;
+    }
+
+    public void setBugNum(int bugNum) {
+        this.bugNum = bugNum;
+    }
+
+    public int getTestCaseNum() {
+        return testCaseNum;
+    }
+
+    public void setTestCaseNum(int testCaseNum) {
+        this.testCaseNum = testCaseNum;
+    }
+
+    public Map<Integer, Integer> getGradeDistrubute() {
+        return gradeDistrubute;
+    }
+
+    public void setGradeDistrubute(Map<Integer, Integer> gradeDistrubute) {
+        this.gradeDistrubute = gradeDistrubute;
+    }
+
+    public List<WorkerVO> getWorkerRank() {
+        return workerRank;
+    }
+
+    public void setWorkerRank(List<WorkerVO> workerRank) {
+        this.workerRank = workerRank;
+    }
+
+    public Map<String, Integer> getWorkerDistribute() {
+        return workerDistribute;
+    }
+
+    public void setWorkerDistribute(Map<String, Integer> workerDistribute) {
+        this.workerDistribute = workerDistribute;
+    }
+}

+ 22 - 0
src/main/java/edu/nju/model/ReviewTaskVO.java

@@ -0,0 +1,22 @@
+package edu.nju.model;
+
+public class ReviewTaskVO {
+
+    private String caseId;
+
+    private String taskId;
+
+    private long startTime;
+
+    private long endTime;
+
+    private String name;
+
+    private String description;
+
+    private String appName;
+
+    private String testType;
+
+
+}

+ 53 - 0
src/main/java/edu/nju/model/WorkerVO.java

@@ -0,0 +1,53 @@
+package edu.nju.model;
+
+public class WorkerVO {
+    private String id;
+
+    private String name;
+
+    private String school;
+
+    private int grade;
+
+    public WorkerVO() {
+    }
+
+    public WorkerVO(String id, String name, String school,int grade) {
+        this.id = id;
+        this.name = name;
+        this.school = school;
+        this.grade=grade;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSchool() {
+        return school;
+    }
+
+    public void setSchool(String school) {
+        this.school = school;
+    }
+
+    public int getGrade() {
+        return grade;
+    }
+
+    public void setGrade(int grade) {
+        this.grade = grade;
+    }
+}

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

@@ -4,6 +4,8 @@ import java.util.*;
 
 import edu.nju.dao.*;
 import edu.nju.entities.*;
+import edu.nju.model.AnalyseVO;
+import edu.nju.model.WorkerVO;
 import edu.nju.util.HTTP;
 import org.json.JSONArray;
 import org.json.JSONObject;
@@ -39,6 +41,15 @@ public class AnalyzeService {
 
 	@Autowired
 	BugSimilarScoreDao bugSimilarScoreDao;
+
+	@Autowired
+	ReportDao reportDao;
+
+	@Autowired
+	TaskDao taskDao;
+
+	@Autowired
+	TestCaseDao testCaseDao;
 	
 	//获取所有bug
 	public List<String> getValid(String case_take_id) {
@@ -410,5 +421,104 @@ public class AnalyzeService {
 		return true;
 	}
 
+	public AnalyseVO getReviewAnalyseVO(String caseId, String taskId){
+		Task task=taskDao.findById(taskId);
+		long startTime=0;
+		long endTime=0;
+		String taskName="";
+		double writeMins=0.0;
+		if(task!=null) {
+			startTime = task.getStart_time();
+			endTime = task.getEnd_time();
+			taskName = task.getName();
+			writeMins = task.getTotal_mins();
+		}
+		String caseTakeId=caseId+"-"+taskId;
+		List<Bug>bugs=bdao.findByCaseid(caseTakeId);
+		int bugNum=bugs.size();
+		List<Report>reports=reportDao.findByCaseTakeId(caseTakeId);
+		int participateNum=reports.size();
+		int testCaseNum=0;
+		for(Report report:reports){
+			List<TestCase>testCases=testCaseDao.findByReport(report.getId());
+			if(testCases!=null){
+				testCaseNum+=testCases.size();
+			}
+		}
+		Map<Integer,Integer>gradeDistribution=new HashMap<>();
+		Map<String,Integer>workerDistribution=new HashMap<>();
+		for(Bug bug:bugs){
+			BugScore bugScore=bsdao.findById(bug.getId());
+			String reportId=bug.getReport_id();
+			if(reportId!=null) {
+				Report report = reportDao.findById(reportId);
+				if(report !=null) {
+					String workerId=report.getWorker_id();
+					if (workerId!=null) {
+						int grade=0;
+						if(bugScore!=null) {
+							grade = bugScore.getGrade();
+							if (gradeDistribution.containsKey(grade)) {
+								gradeDistribution.replace(grade, gradeDistribution.get(grade) + 1);
+							} else {
+								gradeDistribution.put(grade, 1);
+							}
+						}
+						if (workerDistribution.containsKey(workerId)) {
+							workerDistribution.replace(workerId, workerDistribution.get(workerId) + grade);
+						} else {
+							workerDistribution.put(workerId, grade);
+						}
+					}
+				}
+			}
+		}
+		//分数排序
+		List<Map.Entry<String, Integer>> list = new ArrayList<>(workerDistribution.entrySet());
+		Collections.sort(list, new Comparator<Map.Entry<String, Integer>>()
+		{
+			@Override
+			public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)
+			{
+				return o2.getValue().compareTo(o1.getValue());
+
+			}
+		});
+		List<WorkerVO>workerVOS=new ArrayList<>();
+		Map<String,Integer>provinceDistribute=new HashMap<>();
+		for(int i=0;i<list.size();i++) {
+			String workerId = list.get(i).getKey();
+			int grade=list.get(i).getValue();
+			String result = HTTP.sendGet("http://114.55.91.83:8191/api/user/" + workerId, "");
+			String name = "";
+			String school = "";
+			String province="";
+			if (result != null && !result.equals("")) {
+				JSONObject json = new JSONObject(result);
+				if (json.has("name") && !json.isNull("name")) {
+					name = json.getString("name");
+				}
+				if (json.has("school") && !json.isNull("school")) {
+					school = json.getString("school");
+				}
+				if (json.has("province") && !json.isNull("province")) {
+					province = json.getString("province");
+					if(province.endsWith("省")){
+						province=province.substring(0,province.length()-1);
+					}
+					if (provinceDistribute.containsKey(province)) {
+						provinceDistribute.replace(province, provinceDistribute.get(province) + 1);
+					} else {
+						provinceDistribute.put(province, 1);
+					}
+				}
+			}
+			WorkerVO workerVO=new WorkerVO(workerId,name,school,grade);
+			workerVOS.add(workerVO);
+		}
+		AnalyseVO analyseVO=new AnalyseVO(startTime,endTime,taskName,participateNum,bugNum,testCaseNum,gradeDistribution,workerVOS,provinceDistribute);
+		return analyseVO;
+	}
+
 
 }

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

@@ -34,6 +34,7 @@ public class ReviewAnalyzeService {
     @Autowired
     ReviewReportDao reviewReportDao;
 
+
     public JSONObject analyzeItem(String itemId,String reportId,String jobId){
         JSONObject jsonObject=new JSONObject();
         ReviewItem reviewItem=reviewItemDao.findById(itemId);

+ 12 - 8
src/main/java/edu/nju/service/ReviewJobService.java

@@ -42,17 +42,17 @@ public class ReviewJobService {
         return jobDao.findJobs();
     }
 
-    public JSONObject uploadJob(String jobId,String examId,String caseId,String name, String description, String paperId, String startTime, String endTime, List<String>workerList, String workerDistribution,boolean isCrossValidation,int validationNum,int maxWorker){
+    public JSONObject uploadJob(String jobId,String examId,String caseId,String name, String description, String paperId, String startTime, String endTime, List<String>workerList, String workerDistribution,int maxWorker){
         JSONObject jsonObject=new JSONObject();
         String checkResult=checkJobDistribution(workerDistribution);
         ReviewPaper reviewPaper=reviewPaperService.getPaper(paperId);
-        if((!workerDistribution.equals(""))&&(!checkResult.equals("success"))){
+        if(!checkResult.equals("success")){
             jsonObject.put("status","fail");
             jsonObject.put("message",checkResult);
             return jsonObject;
         }
         if(jobId.equals("")) {
-            ReviewJob newReviewJob = new ReviewJob(examId, caseId, name, description, Long.toString(System.currentTimeMillis()), paperId, startTime, endTime, "", isCrossValidation, validationNum,maxWorker);
+            ReviewJob newReviewJob = new ReviewJob(examId, caseId, name, description, Long.toString(System.currentTimeMillis()), paperId, startTime, endTime, "", maxWorker);
             jobId = jobDao.save(newReviewJob);
         }
         if(workerDistribution.equals("")||workerDistribution.equals("[]")){
@@ -73,6 +73,7 @@ public class ReviewJobService {
                 paperOriginalIds.add(paperId+"-"+reviewReport.getOriginal_id());
             }
             groupDao.save(new ReviewGroup("default","",workerIds,jobId,reportIds,paperOriginalIds,originalIds));
+            System.out.println("job存储成功");
         }
         else {
             saveJobDistribution(workerDistribution, jobId);
@@ -84,6 +85,9 @@ public class ReviewJobService {
 
     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);
@@ -135,6 +139,7 @@ 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)));
@@ -143,6 +148,7 @@ public class ReviewJobService {
         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失败");
@@ -158,7 +164,7 @@ public class ReviewJobService {
             for(int i=0;i<reports.size();i++){
                 reportIds.add(reports.get(i).getId());
             }
-            JSONObject jsonObject=uploadJob("",examId,caseId,jobName,jobDescription,paperId,startTime,endTime,workerList,"",false,0,0);
+            JSONObject jsonObject=uploadJob("",examId,caseId,jobName,jobDescription,paperId,startTime,endTime,workerList,"",0);
             // groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
             if(jsonObject.getString("status").equals("success")) {
                 messageVO.setStatus("200");
@@ -175,19 +181,17 @@ public class ReviewJobService {
         return messageVO;
     }
 
-    public JSONObject updateJob(String jobId,String name, String description, String paperId,String startTime, String endTime,List<String>workerList,String workerDistribution,boolean isCrossValidation,int validationNum,int maxWorker){
+    public JSONObject updateJob(String jobId,String name, String description, String paperId,String startTime, String endTime,List<String>workerList,String workerDistribution,int maxWorker){
         ReviewJob reviewJob=jobDao.findJob(jobId);
         reviewJob.setName(name);
         reviewJob.setDescription(description);
         reviewJob.setStart_time(startTime);
         reviewJob.setEnd_time(endTime);
-        reviewJob.setCrossValidation(isCrossValidation);
-        reviewJob.setValidationNum(validationNum);
         reviewJob.setMax_worker(maxWorker);
         jobDao.save(reviewJob);
         groupDao.removeByJob(jobId);
         reviewWorkerDao.removeByJob(jobId);
-        JSONObject jsonObject1=uploadJob(jobId,"","",name,description,paperId,startTime,endTime,workerList,workerDistribution,isCrossValidation,validationNum,maxWorker);
+        JSONObject jsonObject1=uploadJob(jobId,"","",name,description,paperId,startTime,endTime,workerList,workerDistribution,maxWorker);
         return jsonObject1;
     }