xiatian 11 months ago
parent
commit
16784cc5a2

+ 36 - 0
src/main/java/cn/com/qmth/am/bean/DataKey.java

@@ -0,0 +1,36 @@
+package cn.com.qmth.am.bean;
+
+import java.util.Objects;
+
+public class DataKey {
+	private int index;
+	private String key;
+	public int getIndex() {
+		return index;
+	}
+	public void setIndex(int index) {
+		this.index = index;
+	}
+	public String getKey() {
+		return key;
+	}
+	public void setKey(String key) {
+		this.key = key;
+	}
+	@Override
+	public int hashCode() {
+		return Objects.hash(key);
+	}
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		DataKey other = (DataKey) obj;
+		return Objects.equals(key, other.key);
+	}
+	
+}

+ 67 - 1
src/main/java/cn/com/qmth/am/controller/AdminController.java

@@ -5,8 +5,12 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.servlet.http.HttpServletResponse;
@@ -25,6 +29,7 @@ import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.core.concurrent.service.ConcurrentService;
 
+import cn.com.qmth.am.bean.DataKey;
 import cn.com.qmth.am.config.SysProperty;
 import cn.com.qmth.am.entity.QuestionEntity;
 import cn.com.qmth.am.entity.StudentScoreEntity;
@@ -87,13 +92,74 @@ public class AdminController {
 							.doubleValue();
 					sb.append(q.getSubjectCode() + "|" + q.getMainNumber() + "|" + q.getSubNumber() + "| 相关系数:" + ret
 							+ "| 人评均分:" + avg2 + "| 机评均分:" + avg1 +"| 题数:"+scores.size()+ " \r\n");
+					fill(scores, sb);
 				} catch (Exception e) {
-					sb.append(q.getSubjectCode() + "|" + q.getMainNumber() + "|" + q.getSubNumber() + "| 相关系数:- \r\n");
+					sb.append(q.getSubjectCode() + "|" + q.getMainNumber() + "|" + q.getSubNumber() + "| 相关系数出错:- \r\n");
 				}
 			}
 		}
 		returnJson(sb.toString(), response);
 	}
+	
+	private void fill(List<StudentScoreEntity> scores,StringBuilder sb) {
+		int total=scores.size();
+		int st=0;
+		Map<DataKey,Integer> ret=new HashMap<>();
+		for(StudentScoreEntity s:scores) {
+			DataKey k=getKey(s.getAiScore()-s.getMarkingScore());
+			Integer tem=ret.get(k);
+			if(tem==null) {
+				tem=0;
+			}
+			ret.put(k, tem+1);
+		}
+		List<DataKey> ks=new ArrayList<>(ret.keySet());
+		ks.sort(new Comparator<DataKey>() {
+			@Override
+			public int compare(DataKey o1, DataKey o2) {
+				int c1 = o1.getIndex();
+				int c2 = o2.getIndex();
+				if (c1 < c2) {
+					return -1;
+				} else if (c1 > c2) {
+					return 1;
+				} else {
+					return 0;
+				}
+			}
+		});
+		for(DataKey k:ks) {
+			Integer c=ret.get(k);
+			if(k.getIndex()<=2) {
+				st=st+c;
+			}
+			sb.append("      "+k.getKey()+"  "+c+"  "+Calculator.percentage(c, total, 2)+ " \r\n");
+		}
+		sb.append("      3分差值:"+st+"  "+Calculator.percentage(st, total, 2)+ " \r\n");
+	}
+	
+	private static DataKey getKey(double s) {
+		if(s<0) {
+			s=0-s;
+		}
+		if(s==0) {
+			DataKey r=new DataKey();
+			r.setKey("[0,0]");
+			r.setIndex(-1);
+			return r;
+		}
+		int i=0;
+		for(;;) {
+			if(i<s&&s<=i+1) {
+				DataKey r=new DataKey();
+				r.setKey("("+i+","+(i+1)+"]");
+				r.setIndex(i);
+				return r;
+			}
+			i++;
+		}
+	}
+	
 
 	@ApiOperation(value = "进度详情")
 	@RequestMapping(value = "info", method = RequestMethod.GET)

+ 7 - 0
src/main/java/cn/com/qmth/am/utils/Calculator.java

@@ -190,4 +190,11 @@ public class Calculator {
         BigDecimal b2 = new BigDecimal(v2);
         return String.valueOf(b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue());
     }
+    
+    public static String percentage(double v1, double v2, int len) {
+        BigDecimal b1 = new BigDecimal(v1);
+        BigDecimal b2 = new BigDecimal(v2);
+        BigDecimal b3 = new BigDecimal(100);
+        return b1.divide(b2, len+2, BigDecimal.ROUND_HALF_UP).multiply(b3).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue()+"%";
+    }
 }