Browse Source

增加评卷质量基本代码

luoshi 6 years ago
parent
commit
10b329f013

+ 61 - 51
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerDao.java

@@ -1,51 +1,61 @@
-package cn.com.qmth.stmms.biz.exam.dao;
-
-import java.util.List;
-
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.PagingAndSortingRepository;
-
-import cn.com.qmth.stmms.biz.exam.model.Marker;
-
-public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>, JpaSpecificationExecutor<Marker> {
-
-    @Query("select count(m) from Marker m where m.examId=?1")
-    public long countByExamId(int examId);
-
-    @Query("select count(m) from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3")
-    public long countByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number);
-
-    public List<Marker> findByExamId(int examId);
-
-    public List<Marker> findByExamIdAndSubjectCode(int examId, String subjectCode, Pageable page);
-
-    public List<Marker> findByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number,
-            Pageable page);
-
-    public List<Marker> findByLoginName(String loginName);
-
-    public List<Marker> findByLoginNameAndPassword(String loginName, String password);
-
-    @Modifying
-    @Query("delete from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3")
-    public void deleteByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number);
-
-    @Modifying
-    @Query("delete from Marker m where m.examId=?1 and m.subjectCode=?2")
-    public void deleteByExamIdAndSubjectCode(int examId, String subjectCode);
-
-    @Modifying
-    @Query("delete from Marker m where m.examId=?1")
-    public void deleteByExamId(int examId);
-    
-    @Query(value="select e.* from eb_marker e,m_library m where 1=1 and e.id = m.marker_id and m.student_id =?1",nativeQuery=true)
-    public List<Marker> findByStudentId(int studentId);
-
-    @Query("select count(m) from Marker m where m.loginName=?1")
-    public long countByLoginName(String loginName);
-
-    public List<Marker> findByMode(String common);
-}
+package cn.com.qmth.stmms.biz.exam.dao;
+
+import java.util.List;
+
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+
+public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>, JpaSpecificationExecutor<Marker> {
+
+    @Query("select count(m) from Marker m where m.examId=?1")
+    public long countByExamId(int examId);
+
+    @Query("select count(m) from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3")
+    public long countByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number);
+
+    public List<Marker> findByExamId(int examId);
+
+    public List<Marker> findByExamIdAndSubjectCode(int examId, String subjectCode, Pageable page);
+
+    public List<Marker> findByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number,
+            Pageable page);
+
+    public List<Marker> findByLoginName(String loginName);
+
+    public List<Marker> findByLoginNameAndPassword(String loginName, String password);
+
+    @Modifying
+    @Query("delete from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3")
+    public void deleteByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number);
+
+    @Modifying
+    @Query("delete from Marker m where m.examId=?1 and m.subjectCode=?2")
+    public void deleteByExamIdAndSubjectCode(int examId, String subjectCode);
+
+    @Modifying
+    @Query("delete from Marker m where m.examId=?1")
+    public void deleteByExamId(int examId);
+
+    @Modifying
+    @Query("update Marker m set m.finishCount=null, m.validCount=null, m.avgSpeed=null, m.avgScore=null, m.stdevScore=null "
+            + "where m.id=?1")
+    public void resetById(Integer id);
+
+    @Modifying
+    @Query("update Marker m set m.finishCount=null, m.validCount=null, m.avgSpeed=null, m.avgScore=null, m.stdevScore=null "
+            + "where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3")
+    public void resetByExamIdAndSubjectCodeAndGroupNumber(Integer examId, String subjectCode, Integer groupNumber);
+
+    @Query(value = "select e.* from eb_marker e,m_library m where 1=1 and e.id = m.marker_id and m.student_id =?1", nativeQuery = true)
+    public List<Marker> findByStudentId(int studentId);
+
+    @Query("select count(m) from Marker m where m.loginName=?1")
+    public long countByLoginName(String loginName);
+
+    public List<Marker> findByMode(String common);
+}

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

@@ -66,6 +66,21 @@ public class Marker implements Serializable {
     @Column(name = "top_count")
     private Integer topCount;
 
+    @Column(name = "finish_count")
+    private Integer finishCount;
+
+    @Column(name = "valid_count")
+    private Integer validCount;
+
+    @Column(name = "avg_speed")
+    private Double avgSpeed;
+
+    @Column(name = "avg_score")
+    private Double avgScore;
+
+    @Column(name = "stdev_score")
+    private Double stdevScore;
+
     @Transient
     @ExcelField(title = "科目(导入时可为空)", align = 2, sort = 20)
     private String subjectName;
@@ -268,4 +283,44 @@ public class Marker implements Serializable {
         this.topCount = topCount;
     }
 
+    public Integer getFinishCount() {
+        return finishCount;
+    }
+
+    public void setFinishCount(Integer finishCount) {
+        this.finishCount = finishCount;
+    }
+
+    public Integer getValidCount() {
+        return validCount;
+    }
+
+    public void setValidCount(Integer validCount) {
+        this.validCount = validCount;
+    }
+
+    public Double getAvgSpeed() {
+        return avgSpeed;
+    }
+
+    public void setAvgSpeed(Double avgSpeed) {
+        this.avgSpeed = avgSpeed;
+    }
+
+    public Double getAvgScore() {
+        return avgScore;
+    }
+
+    public void setAvgScore(Double avgScore) {
+        this.avgScore = avgScore;
+    }
+
+    public Double getStdevScore() {
+        return stdevScore;
+    }
+
+    public void setStdevScore(Double stdevScore) {
+        this.stdevScore = stdevScore;
+    }
+
 }

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

@@ -8,6 +8,7 @@ import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -96,6 +97,9 @@ public class MarkServiceImpl implements MarkService {
     @Autowired
     private MarkLockService lockService;
 
+    @Autowired
+    private AsyncTaskExecutor taskExecutor;
+
     /**
      * 某个大题已申请的评卷任务数量
      * 
@@ -387,6 +391,7 @@ public class MarkServiceImpl implements MarkService {
                 specialTagDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE);
                 libraryDao.resetByMarkerId(marker.getId(), LibraryStatus.WAITING, LibraryStatus.ARBITRATED,
                         LibraryStatus.WAIT_ARBITRATE);
+                markerDao.resetById(marker.getId());
             } else if (group.getStatus() == MarkStatus.TRIAL) {
                 trialTagDao.deleteByMarkerId(marker.getId());
                 trialTrackDao.deleteByMarkerId(marker.getId());
@@ -894,6 +899,8 @@ public class MarkServiceImpl implements MarkService {
                     group.getNumber());
             libraryDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber(), LibraryStatus.WAITING);
+            markerDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+                    group.getNumber());
         } else if (group.getStatus() == MarkStatus.TRIAL) {
             trialTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
@@ -904,6 +911,17 @@ public class MarkServiceImpl implements MarkService {
         releaseByGroup(group);
     }
 
+    /**
+     * 计算并更新指定评卷员的评卷质量指标
+     * 
+     * @param marker
+     */
+    @Override
+    @Transactional
+    public void updateQuality(Marker marker) {
+        // TODO
+    }
+
     private double sumTotalScore(Integer examId, String subjectCode) {
         Double score = groupDao.sumTotalScore(examId, subjectCode);
         return score != null ? score.doubleValue() : 0d;

+ 7 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/MarkService.java

@@ -223,4 +223,11 @@ public interface MarkService {
      */
     long markedCount(Marker marker);
 
+    /**
+     * 计算并更新指定评卷员的评卷质量指标
+     * 
+     * @param marker
+     */
+    void updateQuality(Marker marker);
+
 }

+ 38 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/thread/MarkerQualityThread.java

@@ -0,0 +1,38 @@
+package cn.com.qmth.stmms.biz.mark.thread;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.biz.mark.service.MarkService;
+
+/**
+ * 评卷员计算评卷质量指标工作线程
+ * 
+ * @author luoshi
+ *
+ */
+public class MarkerQualityThread implements Runnable {
+
+    protected static final Logger log = LoggerFactory.getLogger(MarkerQualityThread.class);
+
+    private Marker marker;
+
+    private MarkService markService;
+
+    public MarkerQualityThread(Marker marker, MarkService markService) {
+        this.marker = marker;
+        this.markService = markService;
+    }
+
+    @Override
+    public void run() {
+        log.info("start marker quality thread for id=" + marker.getId());
+        try {
+            markService.updateQuality(marker);
+            log.info("finish marker quality thread for id=" + marker.getId());
+        } catch (Exception e) {
+            log.error("marker quality thread error", e);
+        }
+    }
+}