Selaa lähdekoodia

debug 众审结束后自动更新bug分数到众测和主站,加日志

xujiawei 5 vuotta sitten
vanhempi
commit
967c8d393a

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

@@ -65,9 +65,9 @@ public class ReviewAnalyzeController {
 
     @RequestMapping(value = "/job/crowdReviewGradeToCrowdTest", method = RequestMethod.GET)
     @ResponseBody
-    public JSONObject crowdReviewGradeToCrowdTest (String jobId , HttpServletResponse response){
+    public String crowdReviewGradeToCrowdTest (String jobId , HttpServletResponse response){
         JSONObject result = reviewAnalyzeService.crowdReviewGradeToCrowdTest(jobId);
-        return result;
+        return result.toString();
     }
 
 

+ 159 - 81
src/main/java/edu/nju/service/AnalyzeService.java

@@ -1,5 +1,6 @@
 package edu.nju.service;
 
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 
 import edu.nju.dao.*;
@@ -9,8 +10,16 @@ import edu.nju.util.HTTP;
 import org.apache.commons.lang3.EnumUtils;
 import org.json.JSONArray;
 import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
 
 @Service
 public class AnalyzeService {
@@ -50,6 +59,9 @@ public class AnalyzeService {
 
 	@Autowired
 	TestCaseDao testCaseDao;
+
+
+	Logger logger= LoggerFactory.getLogger(RecommendService.class);
 	
 	//获取所有bug
 	public List<String> getValid(String case_take_id) {
@@ -213,83 +225,122 @@ public class AnalyzeService {
 
 	//todo 搞清楚究竟是通过哪种方式写回主站分数
 	public JSONArray getScores(String case_take_id) {
-		Map<String, Integer> reviewScore = new HashMap<String, Integer>(); //评审他人bug得分
-		Map<String, Integer> bugScore = new HashMap<String, Integer>(); //系统或专家评审你的bug得分
-		Map<String, Integer> finalScores = new HashMap<String, Integer>(); //计算bug得分
-		JSONArray json = new JSONArray();
-
-		//获取所有bugID
-		List<String> bugIdList = getValid(case_take_id);
-		//获取bug本身得分
-		for(String bugId: bugIdList) {
-			BugScore temp = bsdao.findById(bugId);
-			if(temp != null) {bugScore.put(bugId, temp.getGrade());}
-			else {bugScore.put(bugId, 0);}
-		}
-
-		//计算树状bug得分
-		countScore(case_take_id, finalScores, bugScore);
-
-		//计算审查得分
-		for(String bug: bugIdList) {
-			BugMirror mirror = mdao.findById(bug);
-			if(mirror == null) { continue; }
-			int grade = bugScore.getOrDefault(bug, 0);
-			int thumbsScore=0;
-			if(grade>=0&&grade<3){
-				thumbsScore=-2;
-			}else if(grade<5){
-				thumbsScore=-1;
-			}else if(grade<8){
-				thumbsScore=1;
-			}else{
-				thumbsScore=2;
-			}
-			//点赞点踩积分减分
-			ThumsUp(thumbsScore,reviewScore,mirror);
-		}
-		int maxReviewScore=0;
-		int maxReportScore=0;
-		for(Map.Entry<String, Integer> entry : reviewScore.entrySet()) {
-			//审查得分低于零分按零分算
-			if(entry.getValue() < 0) { reviewScore.put(entry.getKey(), 0); }
-			if(entry.getValue()>maxReviewScore){
-				maxReviewScore=entry.getValue();
-			}
-		}
-
-		//将bug得分汇总为report得分
-		Map<String, Integer> reportScore = new HashMap<String, Integer>();
-		for(String bugId: bugIdList) {
-			BugMirror mirror = mdao.findById(bugId);
-			if(mirror == null) { continue; }
-			String reportId=mirror.getReport_id();
-			//出现过bug和bugMirror中没有reportId的问题,需要单独检查
-			if(reportId!=null) {
-				reportScore.put(reportId, finalScores.getOrDefault(bugId, 0) + reportScore.getOrDefault(reportId, 0));
-				if (reportScore.get(reportId) > maxReportScore) {
-					maxReportScore = reportScore.get(reportId);
+//		Map<String, Integer> reviewScore = new HashMap<String, Integer>(); //评审他人bug得分
+//		Map<String, Integer> bugScore = new HashMap<String, Integer>(); //系统或专家评审你的bug得分
+//		Map<String, Integer> finalScores = new HashMap<String, Integer>(); //计算bug得分
+//		JSONArray json = new JSONArray();
+//
+//		//获取所有bugID
+//		List<String> bugIdList = getValid(case_take_id);
+//		logger.info(String.valueOf(bugIdList.size()));
+//		//获取bug本身得分
+//		for(String bugId: bugIdList) {
+//			BugScore temp = bsdao.findById(bugId);
+//			if(temp != null) {bugScore.put(bugId, temp.getGrade());}
+//			else {bugScore.put(bugId, 0);}
+//		}
+//
+//		//计算树状bug得分
+//		countScore(case_take_id, finalScores, bugScore);
+//
+//		//计算审查得分
+//		for(String bug: bugIdList) {
+//			BugMirror mirror = mdao.findById(bug);
+//			if(mirror == null) { continue; }
+//			int grade = bugScore.getOrDefault(bug, 0);
+//			int thumbsScore=0;
+//			if(grade>=0&&grade<3){
+//				thumbsScore=-2;
+//			}else if(grade<5){
+//				thumbsScore=-1;
+//			}else if(grade<8){
+//				thumbsScore=1;
+//			}else{
+//				thumbsScore=2;
+//			}
+//			//点赞点踩积分减分
+//			ThumsUp(thumbsScore,reviewScore,mirror);
+//		}
+//		int maxReviewScore=0;
+//		int maxReportScore=0;
+//		for(Map.Entry<String, Integer> entry : reviewScore.entrySet()) {
+//			//审查得分低于零分按零分算
+//			if(entry.getValue() < 0) { reviewScore.put(entry.getKey(), 0); }
+//			if(entry.getValue()>maxReviewScore){
+//				maxReviewScore=entry.getValue();
+//			}
+//		}
+//
+//		//将bug得分汇总为report得分
+//		Map<String, Integer> reportScore = new HashMap<String, Integer>();
+//		for(String bugId: bugIdList) {
+//			BugMirror mirror = mdao.findById(bugId);
+//			if(mirror == null) { continue; }
+//			String reportId=mirror.getReport_id();
+//			//出现过bug和bugMirror中没有reportId的问题,需要单独检查
+//			if(reportId!=null) {
+//				reportScore.put(reportId, finalScores.getOrDefault(bugId, 0) + reportScore.getOrDefault(reportId, 0));
+//				if (reportScore.get(reportId) > maxReportScore) {
+//					maxReportScore = reportScore.get(reportId);
+//				}
+//			}
+//		}
+//		//确保被除数不为0
+//		if(maxReportScore==0){
+//			maxReportScore=1;
+//		}
+//		if(maxReviewScore==0){
+//			maxReviewScore=1;
+//		}
+//		//得分要以最高分为满分
+//		for(Map.Entry<String, Integer> entry : reportScore.entrySet()) {
+//			JSONObject json_temp = new JSONObject();
+//			json_temp.put("report_id", entry.getKey());
+//			json_temp.put("worker_id", findWorkerId(entry.getKey()));
+//			json_temp.put("名字", report_trans(entry.getKey()));
+//			json_temp.put("报告得分", (entry.getValue()/maxReportScore)*100);
+//			json_temp.put("审查得分", (reviewScore.getOrDefault(entry.getKey(), 0)/maxReviewScore)*100);
+//			json.put(json_temp);
+//		}
+
+		List<Report> reportList=reportDao.findByCaseTakeId(case_take_id);
+		HashMap<String,Integer> hashMap=new HashMap<>();
+		int maxScore=0;
+		for(Report report:reportList){
+			String workerId=report.getWorker_id();
+			hashMap.put(workerId,0);
+			List<Bug> bugList=bdao.findByReport(report.getId(),case_take_id);
+//			logger.info(String.valueOf(bugList.size()));
+			for(Bug bug:bugList){
+				if(bug!=null) {
+					logger.info(bug.getId());
+					BugScore bugScore = bsdao.findById(bug.getId());
+					int score = hashMap.get(workerId);
+					if (bugScore != null) {
+						score += bugScore.getGrade();
+						logger.info(String.valueOf(bugScore.getGrade()));
+					}
+					if (score > maxScore) {
+						maxScore = score;
+					}
+					hashMap.put(workerId, score);
 				}
 			}
 		}
-		//确保被除数不为0
-		if(maxReportScore==0){
-			maxReportScore=1;
-		}
-		if(maxReviewScore==0){
-			maxReviewScore=1;
-		}
-		//得分要以最高分为满分
-		for(Map.Entry<String, Integer> entry : reportScore.entrySet()) {
+		logger.info(String.valueOf(maxScore));
+		JSONArray json = new JSONArray();
+		for(Map.Entry<String, Integer> entry : hashMap.entrySet()) {
+			String key=entry.getKey();
+			int value=entry.getValue();
+			value=(value*100/maxScore);
 			JSONObject json_temp = new JSONObject();
-			json_temp.put("report_id", entry.getKey());
-			json_temp.put("worker_id", findWorkerId(entry.getKey()));
-			json_temp.put("名字", report_trans(entry.getKey()));
-			json_temp.put("报告得分", (entry.getValue()/maxReportScore)*100);
-			json_temp.put("审查得分", (reviewScore.getOrDefault(entry.getKey(), 0)/maxReviewScore)*100);
+			json_temp.put("worker_id",key);
+			json_temp.put("score",value);
 			json.put(json_temp);
 		}
 		//把分写回主站
+//		logger.info("计算结束");
+		logger.info(json.toString());
 		writeScores(case_take_id, json);
 		return json;
 	}
@@ -413,24 +464,51 @@ public class AnalyzeService {
 	}
 
 	private void writeScores(String case_take_id, JSONArray array) {
-		String host = "http://www.mooctest.net";
-		String url = "/api/common/uploadCaseScore";
+//		String host = "http://www.mooctest.net";
+//		String url = "/api/common/uploadCaseScore";
+//		String[] ids = case_take_id.split("-");
+//		String param1 = "caseId=" + ids[0] + "&examId=" + ids[1];
+//		for(int i = 0; i < array.length(); i ++) {
+//			JSONObject json = (JSONObject)array.get(i);
+//			String worker_id = json.get("worker_id").toString();
+//			//报告得分*0.7+审查得分*0.3
+////			int bugScore=Integer.parseInt(json.get("报告得分").toString());
+////			int reviewScore=Integer.parseInt(json.get("审查得分").toString());
+//			double score =  json.getDouble("score");
+//			if(worker_id.equals("")) { continue; }
+//			if(score<0){
+//				score=0;
+//			}
+//			if(score > 100) { score = 100; }
+//			String param2 = "&userId=" + worker_id + "&score=" + score;
+//			HTTP.sendPut(host, url, param1 + param2);
+//			logger.info("---------------");
+//			logger.info(worker_id);
+//		}
+		RestTemplate template = new RestTemplate();
+		String url = "http://www.mooctest.net/api/common/uploadCaseScore";
 		String[] ids = case_take_id.split("-");
-		String param1 = "caseId=" + ids[0] + "&examId=" + ids[1];
 		for(int i = 0; i < array.length(); i ++) {
+			MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
+
 			JSONObject json = (JSONObject)array.get(i);
 			String worker_id = json.get("worker_id").toString();
-			//报告得分*0.7+审查得分*0.3
-			int bugScore=Integer.parseInt(json.get("报告得分").toString());
-			int reviewScore=Integer.parseInt(json.get("审查得分").toString());
-			double score =  bugScore*0.7+reviewScore*0.3;
-			if(score <= 0 || worker_id.equals("")) { continue; }
-			if(score > 100) { score = 100; }
-			String param2 = "&userId=" + worker_id + "&score=" + score;
-			HTTP.sendPut(host, url, param1 + param2);
+			paramMap.add("examId", ids[1]);
+			paramMap.add("caseId", ids[0]);
+			paramMap.add("userId", worker_id);
+			paramMap.add("score", json.getDouble("score"));
+			template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+			HttpHeaders headers = new HttpHeaders();
+			HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap, headers);
+			template.put(url, httpEntity);
+			logger.info("workerId:" +worker_id);
+			logger.info("score:" +json.getDouble("score"));
 		}
+
+
 	}
 
+
 	private String report_trans(String report_id) {
 		String name = studao.findById(report_id);
 		if(name == null || name.equals("null")) { return report_id;}

+ 15 - 5
src/main/java/edu/nju/service/ReviewAnalyzeService.java

@@ -11,6 +11,8 @@ import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.json.JSONArray;
 import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -46,6 +48,9 @@ public class ReviewAnalyzeService {
     AnalyzeService analyzeService;
 
 
+    Logger logger= LoggerFactory.getLogger(RecommendService.class);
+
+
     public JSONObject analyzeItem(String itemId,String reportId,String jobId){
         JSONObject jsonObject=new JSONObject();
         ReviewItem reviewItem=reviewItemDao.findById(itemId);
@@ -287,13 +292,18 @@ public class ReviewAnalyzeService {
                 result.put("status","500");
                 result.put("计算工人分数并上传","不存在该job");
             }else {
-                String caseId =reviewJob.getCase_id();
-                String examId=reviewJob.getExam_id();
-                String caseTakeId =caseId+"-"+examId;
-                JSONArray json=analyzeService.getScores(caseTakeId);
+//                String caseId =reviewJob.getCase_id();
+//                String examId=reviewJob.getExam_id();
+//                String caseTakeId =caseId+"-"+examId;
+                List<ReviewReport> reviewReportList = reviewReportDao.getReportsByPaperId(reviewJob.getPaper_id());
+                Bug bug=bugDao.findByid(reviewReportList.get(0).getOriginal_id());
+                logger.info(bug.getId());
+                logger.info(bug.getCase_take_id());
+                JSONArray json=analyzeService.getScores(bug.getCase_take_id());
+                logger.info(json.toString());
                 result.put("status","200");
                 result.put("计算工人分数并上传","成功");
-                result.put("jsonArray",json);
+                result.put("jsonArray",json.toString());
             }
         }
         return result;

+ 7 - 0
src/main/java/edu/nju/util/HTTP.java

@@ -2,6 +2,7 @@ package edu.nju.util;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import edu.nju.service.RecommendService;
 import org.json.JSONException;
 
 import java.io.*;
@@ -12,9 +13,13 @@ import java.nio.charset.Charset;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class HTTP {
 
+    static Logger logger= LoggerFactory.getLogger(RecommendService.class);
+
     /**
      * 向指定URL发送GET方法的请求
      *
@@ -143,6 +148,7 @@ public class HTTP {
     public static boolean sendPut(String host, String url, String param) {
         try {
             String urlNameString = url + "?" + param;
+            logger.info(urlNameString);
             URL realUrl = new URL(urlNameString);
             // 打开和URL之间的连接
             HttpURLConnection connection;
@@ -165,6 +171,7 @@ public class HTTP {
             }
             return true;
         } catch (Exception e) {
+            logger.info("发送put出错");
             System.out.println("发送PUT请求出现异常!" + e);
             e.printStackTrace();
             return false;