ting.yin 5 年之前
父节点
当前提交
f762f7d961

+ 2 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/ProblemHistoryDao.java

@@ -33,8 +33,6 @@ public interface ProblemHistoryDao extends JpaRepository<ProblemHistory, Integer
     @Query("select distinct l.subjectCode from ProblemHistory l where l.examId=?1 ")
     List<String> findProblemSubjectCode(Integer examId);
 
-    ProblemHistory findByStudentIdAndStatus(Integer studentId, HistoryStatus status);
-
     @Modifying
     @Query("delete from ProblemHistory s where s.studentId in (select m.studentId from MarkLibrary m where m.markerId=?1 ) ")
     void deleteByMarkerId(Integer markerId);
@@ -43,4 +41,6 @@ public interface ProblemHistoryDao extends JpaRepository<ProblemHistory, Integer
     @Query("delete from ProblemHistory s where s.examId=?1 and s.subjectCode=?2 and s.groupNumber=?3  ")
     void deleteByExamIdAndSubjectCodeAndGroupNumber(Integer examId, String subjectCode, Integer groupNumber);
 
+    ProblemHistory findByLibraryIdAndStatus(Integer libraryId, HistoryStatus status);
+
 }

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

@@ -132,12 +132,15 @@ public class MarkCronService {
         // 获取主观题总分大于0的科目
         List<ExamSubject> subjects = subjectService.list(examId, 0);
         for (ExamSubject subject : subjects) {
-            List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, subject.getCode(), MarkStatus.FORMAL);
+            List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, subject.getCode(),
+                    MarkStatus.FORMAL);
             for (MarkGroup markGroup : groups) {
-                List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subject.getCode(), markGroup.getNumber());
+                List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subject.getCode(),
+                        markGroup.getNumber());
                 for (Marker marker : markers) {
                     try {
                         if (markService.needUpdateQuality(marker, markerActiveExpireMinute)) {
+                            log.info("start auto-update markerId: " + marker.getId());
                             markService.updateQuality(marker);
                         }
                     } catch (Exception e) {
@@ -153,7 +156,8 @@ public class MarkCronService {
         List<ExamSubject> subjects = subjectService.listSubjectiveScore(examId, 0d);
         for (ExamSubject subject : subjects) {
             // 清除缺考考生和违纪考生
-            List<ExamStudent> list = studentService.findAbsentOrBreachLibraryStudent(subject.getExamId(), subject.getCode());
+            List<ExamStudent> list = studentService.findAbsentOrBreachLibraryStudent(subject.getExamId(),
+                    subject.getCode());
             if (list != null) {
                 for (ExamStudent student : list) {
                     try {
@@ -168,14 +172,15 @@ public class MarkCronService {
             }
             // 处理正常考生
             // 生成试评任务
-            List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(subject.getExamId(), subject.getCode(), MarkStatus.TRIAL);
+            List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(subject.getExamId(), subject.getCode(),
+                    MarkStatus.TRIAL);
             for (MarkGroup group : groups) {
                 buildTrialLibrary(campusMap, group);
             }
             // 生成正评任务
             // 试评状态的分组也提前生成
-            groups = groupService
-                    .findByExamAndSubjectAndStatus(subject.getExamId(), subject.getCode(), MarkStatus.FORMAL, MarkStatus.TRIAL);
+            groups = groupService.findByExamAndSubjectAndStatus(subject.getExamId(), subject.getCode(),
+                    MarkStatus.FORMAL, MarkStatus.TRIAL);
             for (MarkGroup group : groups) {
                 buildFormalLibrary(subject, campusMap, group);
             }
@@ -185,8 +190,8 @@ public class MarkCronService {
     private void buildFormalLibrary(ExamSubject subject, Map<String, Campus> campusMap, MarkGroup group) {
         Date lastBuildTime = group.getBuildTime();
         int count = 0;
-        ExamStudent student = studentService
-                .findUnLibraryStudent(group.getExamId(), group.getSubjectCode(), group.getNumber(), lastBuildTime);
+        ExamStudent student = studentService.findUnLibraryStudent(group.getExamId(), group.getSubjectCode(),
+                group.getNumber(), lastBuildTime);
         while (student != null) {
             // 补充学习中心集合
             Campus campus = getCampus(student, campusMap);
@@ -199,8 +204,8 @@ public class MarkCronService {
                 lockService.watch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
                 lockService.watch(LockType.STUDENT, student.getId());
                 // 上锁后重复验证分组状态
-                if (!groupService.validateStatus(group.getExamId(), group.getSubjectCode(), group.getNumber(), MarkStatus.FORMAL,
-                        MarkStatus.TRIAL)) {
+                if (!groupService.validateStatus(group.getExamId(), group.getSubjectCode(), group.getNumber(),
+                        MarkStatus.FORMAL, MarkStatus.TRIAL)) {
                     break;
                 }
                 // 上锁后重复验证考生状态
@@ -210,13 +215,16 @@ public class MarkCronService {
                     count++;
                 }
             } catch (Exception e) {
-                log.error("build formal library error for studentId=" + student.getId() + ", groupNumber=" + group.getNumber(), e);
+                log.error(
+                        "build formal library error for studentId=" + student.getId() + ", groupNumber="
+                                + group.getNumber(), e);
             } finally {
                 lockService.unwatch(LockType.STUDENT, student.getId());
                 lockService.unwatch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
             }
             // 取下一个考生
-            student = studentService.findUnLibraryStudent(group.getExamId(), group.getSubjectCode(), group.getNumber(), lastBuildTime);
+            student = studentService.findUnLibraryStudent(group.getExamId(), group.getSubjectCode(), group.getNumber(),
+                    lastBuildTime);
         }
         // 有新任务创建,同时正评状态,此时才需要更新任务数量
         if (count > 0) {
@@ -231,7 +239,8 @@ public class MarkCronService {
     private void buildTrialLibrary(Map<String, Campus> campusMap, MarkGroup group) {
         while (group.getTrialCount() > group.getLibraryCount()) {
             // 随机取一个未生成试评任务的考生
-            ExamStudent student = studentService.randomUnTrialStudent(group.getExamId(), group.getSubjectCode(), group.getNumber());
+            ExamStudent student = studentService.randomUnTrialStudent(group.getExamId(), group.getSubjectCode(),
+                    group.getNumber());
             if (student == null) {
                 return;
             }
@@ -246,7 +255,8 @@ public class MarkCronService {
                 lockService.watch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
                 lockService.watch(LockType.STUDENT, student.getId());
                 // 上锁后重新验证分组状态
-                if (!groupService.validateStatus(group.getExamId(), group.getSubjectCode(), group.getNumber(), MarkStatus.TRIAL)) {
+                if (!groupService.validateStatus(group.getExamId(), group.getSubjectCode(), group.getNumber(),
+                        MarkStatus.TRIAL)) {
                     break;
                 }
                 // 上锁后重复验证考生状态
@@ -256,7 +266,9 @@ public class MarkCronService {
                     markService.updateMarkedCount(group);
                 }
             } catch (Exception e) {
-                log.error("build trial library error for studentId=" + student.getId() + ", groupNumber=" + group.getNumber(), e);
+                log.error(
+                        "build trial library error for studentId=" + student.getId() + ", groupNumber="
+                                + group.getNumber(), e);
             } finally {
                 lockService.unwatch(LockType.STUDENT, student.getId());
                 lockService.unwatch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());

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

@@ -452,21 +452,11 @@ public class MarkServiceImpl implements MarkService {
         if (group.getStatus() == MarkStatus.FORMAL) {
             MarkLibrary library = libraryDao.findOne(result.getLibraryId());
             if (library != null && result.isProblem()) {
-                ProblemHistory history = new ProblemHistory();
-                history.setCreateTime(new Date());
-                history.setExamId(library.getExamId());
-                history.setExamNumber(library.getExamNumber());
-                history.setStudentId(library.getStudentId());
-                history.setLibraryId(library.getId());
-                history.setSubjectCode(library.getSubjectCode());
-                history.setGroupNumber(library.getGroupNumber());
-                history.setProblemId(result.getReason());
-                history.setStatus(HistoryStatus.WAITING);
-                problemHistoryService.save(history);
                 // 状态更新
                 Date now = new Date();
                 if (libraryDao.updateProblemResult(library.getId(), LibraryStatus.PROBLEM, marker.getId(), now,
                         result.getSpent(), LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED) != 0) {
+                    saveProblemHistory(result, library);
                     updateMarkedCount(group);
                     releaseLibrary(library, marker);
                     return true;
@@ -517,6 +507,23 @@ public class MarkServiceImpl implements MarkService {
         return false;
     }
 
+    private void saveProblemHistory(MarkResult result, MarkLibrary library) {
+        ProblemHistory history = problemHistoryDao.findByLibraryIdAndStatus(library.getId(), HistoryStatus.WAITING);
+        if (history == null) {
+            history = new ProblemHistory();
+        }
+        history.setCreateTime(new Date());
+        history.setExamId(library.getExamId());
+        history.setExamNumber(library.getExamNumber());
+        history.setStudentId(library.getStudentId());
+        history.setLibraryId(library.getId());
+        history.setSubjectCode(library.getSubjectCode());
+        history.setGroupNumber(library.getGroupNumber());
+        history.setProblemId(result.getReason());
+        history.setStatus(HistoryStatus.WAITING);
+        problemHistoryService.save(history);
+    }
+
     /**
      * 评卷员提交某个正评任务
      *
@@ -673,7 +680,7 @@ public class MarkServiceImpl implements MarkService {
             trackDao.deleteByLibraryId(library.getId());
             specialTagDao.deleteByLibraryId(library.getId());
             updateMarkedCount(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
-            problemHistoryService.resetByStudentId(library.getStudentId(), userId);
+            problemHistoryService.resetByLibraryId(library.getId(), userId);
             return true;
         } else {
             return false;

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

@@ -58,8 +58,8 @@ public class ProblemHistoryServiceImpl extends BaseQueryService<ProblemHistory>
 
     @Transactional
     @Override
-    public boolean resetByStudentId(Integer studentId, Integer userId) {
-        ProblemHistory history = historyDao.findByStudentIdAndStatus(studentId, HistoryStatus.WAITING);
+    public boolean resetByLibraryId(Integer libraryId, Integer userId) {
+        ProblemHistory history = historyDao.findByLibraryIdAndStatus(libraryId, HistoryStatus.WAITING);
         if (history != null) {
             history.setUserId(userId);
             history.setUpdateTime(new Date());

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/ProblemHistoryService.java

@@ -15,6 +15,6 @@ public interface ProblemHistoryService {
 
     ProblemHistorySearchQuery findByQuery(ProblemHistorySearchQuery query);
 
-    boolean resetByStudentId(Integer studentId, Integer userId);
+    boolean resetByLibraryId(Integer libraryId, Integer userId);
 
 }

+ 1 - 0
stmms-web/src/main/webapp/static/i18n/messages.properties

@@ -129,6 +129,7 @@ mark.warning.task.finish=\u8bc4\u5377\u4efb\u52a1\u5df2\u5b8c\u6210
 mark.warning.task.loading=\u8bc4\u5377\u4efb\u52a1\u6b63\u5728\u52a0\u8f7d\u4e2d
 mark.warning.close=\u5173\u95ed
 mark.warning.success=\u56de\u8bc4\u6210\u529f\uff0c\u603b\u5206\uff1a
+mark.warning.problem=\u56de\u8bc4\u95ee\u9898\u5377\u6210\u529f
 #json-view
 mark.json.loading=\u6b63\u5728\u52a0\u8f7d\u4e2d
 mark.json.student.answer=\u8003\u751f\u7b54\u6848\uff1a

+ 1 - 0
stmms-web/src/main/webapp/static/i18n/messages_en.properties

@@ -129,6 +129,7 @@ mark.warning.task.finish=marking task finished
 mark.warning.task.loading=task loading
 mark.warning.close=close
 mark.warning.success=submit success,score: 
+mark.warning.problem=submit problem success
 #json-view
 mark.json.loading=loading...
 mark.json.student.answer=student answer:

+ 1 - 0
stmms-web/src/main/webapp/static/i18n/messages_ja.properties

@@ -129,6 +129,7 @@ mark.warning.task.finish=\u3059\u3079\u3066\u306e\u30bf\u30b9\u30af\u306f\u5b8c\
 mark.warning.task.loading=\u30bf\u30b9\u30af\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0
 mark.warning.close=\u30af\u30ed\u30fc\u30ba
 mark.warning.success=\u30ec\u30d3\u30e5\u30fc\u6210\u529f\u3001\u7dcf\u5f97\u70b9\uff1a
+mark.warning.problem=\u30ec\u30d3\u30e5\u30fc\u554f\u984c\u7528\u7d19\u6210\u529f
 #json-view
 mark.json.loading=\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0
 mark.json.student.answer=\u53d7\u9a13\u751f\u306e\u7b54\u3048\uff1a

+ 1 - 0
stmms-web/src/main/webapp/static/i18n/messages_zh.properties

@@ -129,6 +129,7 @@ mark.warning.task.finish=\u8bc4\u5377\u4efb\u52a1\u5df2\u5b8c\u6210
 mark.warning.task.loading=\u8bc4\u5377\u4efb\u52a1\u6b63\u5728\u52a0\u8f7d\u4e2d
 mark.warning.close=\u5173\u95ed
 mark.warning.success=\u56de\u8bc4\u6210\u529f\uff0c\u603b\u5206\uff1a
+mark.warning.problem=\u56de\u8bc4\u95ee\u9898\u5377\u6210\u529f
 #json-view
 mark.json.loading=\u6b63\u5728\u52a0\u8f7d\u4e2d
 mark.json.student.answer=\u8003\u751f\u7b54\u6848\uff1a