소스 검색

质量监控仲裁数

xiatian 10 달 전
부모
커밋
d8d8c2d8fa

+ 5 - 0
install/mysql/init/stmms_ft.sql

@@ -418,6 +418,11 @@ CREATE TABLE `eb_marker`
     `avg_score`    double      DEFAULT NULL COMMENT '平均分',
     `avg_speed`    double      DEFAULT NULL COMMENT '平均时长',
     `stdev_score`  double      DEFAULT NULL COMMENT '标准差',
+    `finish_count_na` int(11)     DEFAULT NULL COMMENT '完成数量不含仲裁',
+    `valid_count_na`  int(11)     DEFAULT NULL COMMENT '有效数量不含仲裁',
+    `avg_score_na`    double      DEFAULT NULL COMMENT '平均分不含仲裁',
+    `avg_speed_na`    double      DEFAULT NULL COMMENT '平均时长不含仲裁',
+    `stdev_score_na`  double      DEFAULT NULL COMMENT '标准差不含仲裁',
     `mark_setting` text        DEFAULT NULL COMMENT '个性化评卷参数设置',
     PRIMARY KEY (`id`),
     KEY `index1` (`user_id`),

+ 7 - 0
install/mysql/upgrade/1.5.1.sql

@@ -1,5 +1,12 @@
 -- 1.5.1
 USE `stmms_ft`;
+ALTER TABLE eb_marker ADD COLUMN `finish_count_na` int(11)     DEFAULT NULL COMMENT '完成数量不含仲裁';
+ALTER TABLE eb_marker ADD COLUMN `valid_count_na`  int(11)     DEFAULT NULL COMMENT '有效数量不含仲裁';
+ALTER TABLE eb_marker ADD COLUMN `avg_score_na`    double      DEFAULT NULL COMMENT '平均分不含仲裁';
+ALTER TABLE eb_marker ADD COLUMN `avg_speed_na`    double      DEFAULT NULL COMMENT '平均时长不含仲裁';
+ALTER TABLE eb_marker ADD COLUMN `stdev_score_na`  double      DEFAULT NULL COMMENT '标准差不含仲裁';
+
+
 delete from b_privilege t where t.code in ('exam_report_subject','exam_report_subject_range');
 delete from b_role_privilege t where t.privilege_code in ('exam_report_subject','exam_report_subject_range');
 delete from b_role_privilege t where t.privilege_code in ('exam_mark-group-add','exam_mark-group-edit','exam_mark-group-reset_edit','exam_mark-group-delete');

+ 6 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerDao.java

@@ -44,6 +44,12 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
             + "where m.id=?1")
     public void updateQualityById(Integer id, int finishCount, int validCount, double avgSpeed, double avgScore,
             double stdevScore);
+    
+    @Modifying
+    @Query("update Marker m set m.finishCountNa=?2, m.validCountNa=?3, m.avgSpeedNa=?4, m.avgScoreNa=?5, m.stdevScoreNa=?6 "
+            + "where m.id=?1")
+    public void updateQualityNoArbitrateById(Integer id, int finishCount, int validCount, double avgSpeed, double avgScore,
+            double stdevScore);
 
     @Modifying
     @Query("update Marker m set m.finishCount=null, m.validCount=null, m.avgSpeed=null, m.avgScore=null, m.stdevScore=null "

+ 54 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Marker.java

@@ -58,6 +58,19 @@ public class Marker implements Serializable {
 
     @Column(name = "stdev_score")
     private Double stdevScore;
+    @Column(name = "finish_count_na")
+    private Integer finishCountNa;
+
+    @Column(name = "valid_count_na")
+    private Integer validCountNa;
+    @Column(name = "avg_speed_na")
+    private Double avgSpeedNa;
+
+    @Column(name = "avg_score_na")
+    private Double avgScoreNa;
+
+    @Column(name = "stdev_score_na")
+    private Double stdevScoreNa;
 
     /**
      * 个性化评卷参数设置
@@ -325,4 +338,45 @@ public class Marker implements Serializable {
 		this.arbitrateRatio = arbitrateRatio;
 	}
 
+	public Integer getFinishCountNa() {
+		return finishCountNa;
+	}
+
+	public void setFinishCountNa(Integer finishCountNa) {
+		this.finishCountNa = finishCountNa;
+	}
+
+	public Integer getValidCountNa() {
+		return validCountNa;
+	}
+
+	public void setValidCountNa(Integer validCountNa) {
+		this.validCountNa = validCountNa;
+	}
+
+	public Double getAvgSpeedNa() {
+		return avgSpeedNa;
+	}
+
+	public void setAvgSpeedNa(Double avgSpeedNa) {
+		this.avgSpeedNa = avgSpeedNa;
+	}
+
+	public Double getAvgScoreNa() {
+		return avgScoreNa;
+	}
+
+	public void setAvgScoreNa(Double avgScoreNa) {
+		this.avgScoreNa = avgScoreNa;
+	}
+
+	public Double getStdevScoreNa() {
+		return stdevScoreNa;
+	}
+
+	public void setStdevScoreNa(Double stdevScoreNa) {
+		this.stdevScoreNa = stdevScoreNa;
+	}
+
+
 }

+ 41 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -1486,7 +1486,12 @@ public class MarkServiceImpl implements MarkService {
     @Transactional
     public void updateQuality(Marker marker) {
         List<MarkLibrary> list = libraryDao.findByMarkerId(marker.getId());
-        int finishCount = 0;
+        updateQualityWithArbitrate(marker, list);
+        updateQualityNoArbitrate(marker, list);
+        markerLastUpdateTime.put(marker.getId(), System.currentTimeMillis());
+    }
+    private void updateQualityWithArbitrate(Marker marker,List<MarkLibrary> list) {
+    	int finishCount = 0;
         int validCount = 0;
         double sumScore = 0;
         double sumScore2 = 0;
@@ -1515,7 +1520,41 @@ public class MarkServiceImpl implements MarkService {
             }
         }
         markerDao.updateQualityById(marker.getId(), finishCount, validCount, avgSpent / 1000, avgScore, stdevScore);
-        markerLastUpdateTime.put(marker.getId(), System.currentTimeMillis());
+    }
+    
+    private void updateQualityNoArbitrate(Marker marker,List<MarkLibrary> list) {
+    	int finishCount = 0;
+        int validCount = 0;
+        double sumScore = 0;
+        double sumScore2 = 0;
+        double avgScore = 0;
+        double stdevScore = 0;
+        double sumSpent = 0;
+        double avgSpent = 0;
+        for (MarkLibrary library : list) {
+        	if (library.getStatus() == LibraryStatus.ARBITRATED || library.getStatus() == LibraryStatus.WAIT_ARBITRATE) {
+        		continue;
+        	}
+            finishCount++;
+            if (library.getStatus() == LibraryStatus.MARKED || library.getStatus() == LibraryStatus.INSPECTED) {
+                validCount++;
+            }
+            double score = library.getMarkerScore() != null && library.getMarkerScore() != UN_SELECTIVE_SCORE
+                    ? library.getMarkerScore()
+                    : 0;
+            int spent = library.getMarkerSpent() != null ? library.getMarkerSpent() : 0;
+
+            sumScore += score;
+            sumScore2 += Math.pow(score, 2);
+            sumSpent += spent;
+            if (finishCount > 0) {
+                avgScore = sumScore / finishCount;
+                avgSpent = sumSpent / finishCount;
+                // 递归法计算标准差
+                stdevScore = Math.sqrt(sumScore2 / finishCount - Math.pow(sumScore / finishCount, 2));
+            }
+        }
+        markerDao.updateQualityNoArbitrateById(marker.getId(), finishCount, validCount, avgSpent / 1000, avgScore, stdevScore);
     }
 
     @Override

+ 18 - 8
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkQualityController.java

@@ -115,19 +115,29 @@ public class MarkQualityController extends BaseExamController {
                 group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                         marker.getSubjectCode(), false, group.getNumber()));
                 marker.setGroup(group);
-                int arbitrateCount=(int)libraryService.countByMarkerAndStatus(marker.getId(),LibraryStatus.WAIT_ARBITRATE,  LibraryStatus.ARBITRATED);
+                if(marker.getFinishCount()==null) {
+                	marker.setFinishCount(0);
+                }
+                if(marker.getFinishCountNa()==null) {
+                	marker.setFinishCountNa(0);
+                }
+                if(marker.getRejectCount()==null) {
+                	marker.setRejectCount(0);
+                }
                 if(query.getNoArbitrate()!=null&&query.getNoArbitrate()) {
-                	if(marker.getFinishCount()!=null&&marker.getFinishCount()!=0) {
-                		marker.setFinishCount(marker.getFinishCount()-arbitrateCount);
-                	}
+            		marker.setFinishCount(marker.getFinishCountNa());
+            		marker.setValidCount(marker.getValidCountNa());
+            		marker.setAvgScore(marker.getAvgScoreNa());
+            		marker.setAvgSpeed(marker.getAvgSpeedNa());
+            		marker.setStdevScore(marker.getStdevScoreNa());
                 	marker.setArbitrateCount(0);
                 	marker.setArbitrateRatio("0%");
                 }else {
-                	marker.setArbitrateCount(arbitrateCount);
-                	if(marker.getFinishCount()!=null&&marker.getFinishCount()!=0) {
-                		marker.setArbitrateRatio(Calculator.percentage(arbitrateCount, marker.getFinishCount(), 2));
-                	}else {
+                	marker.setArbitrateCount(marker.getFinishCount()-marker.getFinishCountNa());
+                	if(marker.getFinishCount()==0) {
                 		marker.setArbitrateRatio("0%");
+                	}else {
+                		marker.setArbitrateRatio(Calculator.percentage(marker.getArbitrateCount(), marker.getFinishCount(), 2));
                 	}
                 }
             }