Răsfoiți Sursa

问题卷新增提出评卷员属性,fixbug

ting.yin 3 ani în urmă
părinte
comite
94edaf54e2

+ 3 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -152,8 +152,9 @@ public interface ExamStudentDao extends PagingAndSortingRepository<ExamStudent,
             Date minUploadTime, Pageable page);
 
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=true and s.absent=false and s.breach=false "
-            + "and s.subjectiveStatus='TRIAL' and not exists (select l.id from TrialLibrary l where l.studentId=s.id and l.groupNumber=?3)")
-    public List<ExamStudent> findUnTrialStudent(Integer examId, String subjectCode, Integer groupNumber, Pageable page);
+            + "and s.subjectiveStatus=?4 and not exists (select l.id from TrialLibrary l where l.studentId=s.id and l.groupNumber=?3)")
+    public List<ExamStudent> findUnTrialStudent(Integer examId, String subjectCode, Integer groupNumber,
+            SubjectiveStatus status, Pageable page);
 
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=true and (s.absent=true or s.breach=true) and "
             + "exists (select l.id from MarkLibrary l where l.studentId=s.id)")

+ 3 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -733,7 +733,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         query.setPageNumber(1);
         query.setPageSize(1);
         query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
-        List<ExamStudent> list = studentDao.findUnTrialStudent(examId, subjectCode, groupNumber, query);
+        List<ExamStudent> list = studentDao.findUnTrialStudent(examId, subjectCode, groupNumber,
+                SubjectiveStatus.TRIAL, query);
         return list.isEmpty() ? null : list.get(0);
     }
 
@@ -1048,6 +1049,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         query.setAbsent(false);
         query.setUpload(true);
         query.setBreach(false);
+        query.addStatus(SubjectiveStatus.UNMARK);
         query.setPageNumber(1);
         query.setPageSize(200);
         query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));

+ 14 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/ProblemHistory.java

@@ -68,6 +68,12 @@ public class ProblemHistory implements Serializable {
     @Column(name = "secret_number")
     private String secretNumber;
 
+    /**
+     * 提出问题评卷员ID
+     */
+    @Column(name = "marker_id", nullable = true)
+    private Integer markerId;
+
     /**
      * 处理用户ID
      */
@@ -236,4 +242,12 @@ public class ProblemHistory implements Serializable {
         this.libraryId = libraryId;
     }
 
+    public Integer getMarkerId() {
+        return markerId;
+    }
+
+    public void setMarkerId(Integer markerId) {
+        this.markerId = markerId;
+    }
+
 }

+ 3 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkCronService.java

@@ -175,7 +175,7 @@ public class MarkCronService {
                     // 取一个的考生
                     ExamStudent student = studentService.randomStudent(examId, subject.getCode());
                     if (student == null) {
-                        return;
+                        break;
                     }
                     studentService.updateSubjectiveStatusAndTimeAndInspectorId(student.getId(), SubjectiveStatus.TRIAL,
                             null, null);
@@ -183,7 +183,7 @@ public class MarkCronService {
                 }
             }
             for (MarkGroup group : groups) {
-                buildTrialLibrary(subject.getTrialCount(), group);
+                buildTrialLibrary(trialCount, group);
             }
             // 生成正评任务
             // 试评状态的分组也提前生成
@@ -238,7 +238,7 @@ public class MarkCronService {
         }
     }
 
-    private void buildTrialLibrary(int trialCount, MarkGroup group) {
+    private void buildTrialLibrary(long trialCount, MarkGroup group) {
         while (trialCount > group.getLibraryCount()) {
             // 取一个未生成试评任务的考生
             ExamStudent student = studentService.randomUnTrialStudent(group.getExamId(), group.getSubjectCode(),

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

@@ -141,14 +141,8 @@ public class MarkServiceImpl implements MarkService {
      */
     @Override
     public int applyCount(MarkGroup group) {
-        int count = 0;
-        if (group.getStatus() == MarkStatus.TRIAL) {
-            TaskLock taskLock = TaskLockUtil.getTrialTask(getGroupKey(group));
-            count = taskLock.count();
-        } else if (group.getStatus() == MarkStatus.FORMAL) {
-            TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(group));
-            count = taskLock.count();
-        }
+        TaskLock taskLock = getTaskLock(group);
+        int count = taskLock.count();
         return count;
     }
 
@@ -166,17 +160,22 @@ public class MarkServiceImpl implements MarkService {
             group = groupDao.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
         }
         if (group != null) {
-            if (group.getStatus() == MarkStatus.FORMAL) {
-                TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(marker));
-                return taskLock.count(marker.getId());
-            } else if (group.getStatus() == MarkStatus.TRIAL) {
-                TaskLock taskLock = TaskLockUtil.getTrialTask(getGroupKey(marker));
-                return taskLock.count(marker.getId());
-            }
+            TaskLock taskLock = getTaskLock(group);
+            return taskLock.count(marker.getId());
         }
         return 0;
     }
 
+    private TaskLock getTaskLock(MarkGroup group) {
+        if (group.getStatus() == MarkStatus.FORMAL) {
+            return TaskLockUtil.getFormalTask(getGroupKey(group));
+
+        } else if (group.getStatus() == MarkStatus.TRIAL) {
+            return TaskLockUtil.getTrialTask(getGroupKey(group));
+        }
+        return null;
+    }
+
     /**
      * 某个评卷员已完成的评卷任务数量
      *
@@ -209,13 +208,8 @@ public class MarkServiceImpl implements MarkService {
      */
     @Override
     public void releaseByGroup(MarkGroup group) {
-        if (group.getStatus() == MarkStatus.TRIAL) {
-            TaskLock taskLock = TaskLockUtil.getTrialTask(getGroupKey(group));
-            taskLock.clear();
-        } else if (group.getStatus() == MarkStatus.FORMAL) {
-            TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(group));
-            taskLock.clear();
-        }
+        TaskLock taskLock = getTaskLock(group);
+        taskLock.clear();
     }
 
     /**
@@ -546,29 +540,30 @@ public class MarkServiceImpl implements MarkService {
         // 根据评卷状态选择读取不同的评卷任务
         if (group.getStatus() == MarkStatus.FORMAL) {
             MarkLibrary library = libraryDao.findOne(result.getLibraryId());
-            // 问题卷
-            if (library != null && result.isProblem()) {
-                // 状态更新
-                if (libraryDao.updateProblemResult(library.getId(), LibraryStatus.PROBLEM, marker.getId(), now,
-                        result.getSpent(), LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED,
-                        LibraryStatus.REJECTED) != 0) {
-                    saveProblemHistory(result, library);
-                    updateMarkedCount(group);
-                    // 未评完
-                    resetStudentGroup(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
-                            library.getGroupNumber());
-                    trackDao.deleteByLibraryId(library.getId());
-                    specialTagDao.deleteByLibraryId(library.getId());
-                    return SubmitResult.success(library);
-                }
-            }
             if (library != null && library.getExamId().equals(group.getExamId())
                     && library.getSubjectCode().equals(group.getSubjectCode())
-                    && library.getGroupNumber().equals(group.getNumber())
-                    && result.getMarkerScore() <= group.getTotalScore()) {
-                if (submitLibrary(library, marker, group, result)) {
-                    updateMarkedCount(group);
-                    return SubmitResult.success(library);
+                    && library.getGroupNumber().equals(group.getNumber())) {
+                // 问题卷
+                if (result.isProblem()) {
+                    // 状态更新
+                    if (libraryDao.updateProblemResult(library.getId(), LibraryStatus.PROBLEM, marker.getId(), now,
+                            result.getSpent(), LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED,
+                            LibraryStatus.REJECTED) != 0) {
+                        saveProblemHistory(result, library, marker);
+                        updateMarkedCount(group);
+                        // 未评完
+                        resetStudentGroup(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
+                                library.getGroupNumber());
+                        trackDao.deleteByLibraryId(library.getId());
+                        specialTagDao.deleteByLibraryId(library.getId());
+                        return SubmitResult.success(library);
+                    }
+                }
+                if (result.getMarkerScore() <= group.getTotalScore()) {
+                    if (submitLibrary(library, marker, group, result)) {
+                        updateMarkedCount(group);
+                        return SubmitResult.success(library);
+                    }
                 }
             }
         } else if (group.getStatus() == MarkStatus.TRIAL) {
@@ -599,7 +594,7 @@ public class MarkServiceImpl implements MarkService {
         return SubmitResult.faile();
     }
 
-    private void saveProblemHistory(MarkResult result, MarkLibrary library) {
+    private void saveProblemHistory(MarkResult result, MarkLibrary library, Marker marker) {
         ProblemHistory history = problemHistoryDao.findByLibraryIdAndStatus(library.getId(), HistoryStatus.WAITING);
         if (history == null) {
             history = new ProblemHistory();
@@ -614,6 +609,7 @@ public class MarkServiceImpl implements MarkService {
         history.setGroupNumber(library.getGroupNumber());
         history.setProblemId(result.getProblemTypeId());
         history.setStatus(HistoryStatus.WAITING);
+        history.setMarkerId(marker.getId());
         problemHistoryDao.save(history);
     }
 
@@ -646,9 +642,11 @@ public class MarkServiceImpl implements MarkService {
             return false;
         }
         // 未选做
-        if (result.isUnselective()) {
+        if (result.isUnselective() && group.isSelective()) {
             result.setMarkerScore(UN_SELECTIVE_SCORE);
             result.setScoreList(null);
+            trackDao.deleteByLibraryId(library.getId());
+            specialTagDao.deleteByLibraryId(library.getId());
         }
         // 尝试提交评卷结果
         Date now = new Date();

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ProblemHistoryController.java

@@ -95,8 +95,8 @@ public class ProblemHistoryController extends BaseExamController {
             student.setProblemType(problemMap.get(history.getProblemId()));
             student.setMarkTime(DateUtils.formatDateTime(history.getCreateTime()));
             student.setLibraryId(history.getLibraryId());
-            if (history.getUserId() != null) {
-                student.setMarkLogin(userService.findById(history.getUserId()).getLoginName());
+            if (history.getMarkerId() != null) {
+                student.setMarkLogin(userService.findByMarkerId(history.getMarkerId()).getLoginName());
             }
             list.add(student);
         }

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/groupAdd.jsp

@@ -78,9 +78,9 @@
         <caption><h4>${subject.code }-${subject.name } 主观题${subject.subjectiveScore }分</h4></caption>
         	<thead>
         	<tr>
-        		 <th>名称</th>
        			 <th>大题号</th>
         		 <th>小题号</th>
+        		 <th>名称</th>
         		 <th>分数</th>
         		 <th>是否选做题</th>
         		 <th></th>

+ 1 - 0
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -610,6 +610,7 @@ CREATE TABLE `m_problem_history`
     `problem_id`    int(11)     NOT NULL COMMENT '问题ID',
     `student_id`    int(11)     NOT NULL COMMENT '考生ID',
     `library_id`    int(11)     NOT NULL COMMENT '评卷任务ID',
+    `marker_id`     int(11)     NOT NULL COMMENT '评卷员ID',
     `status`        varchar(16)  DEFAULT NULL COMMENT '状态',
     `user_id`       int(11)      DEFAULT NULL COMMENT '处理人ID',
     `total_score`   double       DEFAULT NULL COMMENT '总分',