Просмотр исходного кода

修复阈值计算和跳过问题

ting.yin 6 лет назад
Родитель
Сommit
86b9a83ff1

+ 4 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskRepo.java

@@ -128,5 +128,9 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
 	int countByWorkIdAndSubjectAndStageAndQuestionId(Long workId,Subject subject, MarkStage level, Long id);
 
 	List<MarkTask> findByWorkIdAndSecretNumber(Long workId, String secretNumber);
+	
+	 @Query(value = "SELECT max(t.randomSeq) FROM MarkTask t " +
+	            "WHERE t.workId = ?1 and t.subject = ?2 and t.markerId = ?3 and t.stage = ?4 and t.questionId = ?5 ")
+	Integer findRandomSeqByWorkIdAndSubjectAndMarkerIdAndStageAndQuestionId(Long workId, Subject subject, Long markerId, MarkStage stage, Long questionId);
 
 }

+ 4 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

@@ -223,7 +223,10 @@ public class MarkingService {
 	public MarkTask skip(Long markTaskId) {
 		try {
 			MarkTask m = markTaskRepo.findOne(markTaskId);
-			int randomSeq = markTaskRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndQuestionId(m.getWorkId(), m.getSubject(),m.getMarkerId(), m.getStage(), m.getQuestionId());
+			Integer randomSeq = markTaskRepo.findRandomSeqByWorkIdAndSubjectAndMarkerIdAndStageAndQuestionId(m.getWorkId(), m.getSubject(),m.getMarkerId(), m.getStage(), m.getQuestionId());
+			if(randomSeq == null){
+				randomSeq = 0;
+			}
 			m.setRandomSeq(randomSeq+1);
 			markTaskRepo.save(m);
 			return m;

+ 2 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/StageControlService.java

@@ -167,7 +167,7 @@ public class StageControlService {
         	int count = markTaskRepo.countByWorkIdAndSubjectAndStageAndResult(workId, markSubject.getSubject(), MarkStage.LEVEL, targetLevel.getCode());
         	int total = markTaskRepo.countByWorkIdAndSubjectAndStage(workId, markSubject.getSubject(), MarkStage.LEVEL);
         	
-        	if ((count + 1.0D) / total * 1.0D > pt / 100.D) {
+        	if ((count * 1.0D) / total * 1.0D > pt / 100.D) {
         		statusMap.put(markSubject.getId(), false);
         		throw new RuntimeException(targetLevel.getCode() + "档已满,占比总阀值已达" + pt + "%。");
         	}
@@ -177,7 +177,7 @@ public class StageControlService {
         	for (ExamQuestion examQuestion : examQuestions) {
         		int kdcount = markTaskRepo.countByWorkIdAndSubjectAndStageAndQuestionIdAndResult(workId, markSubject.getSubject(), MarkStage.LEVEL, examQuestion.getId(), targetLevel.getCode());
         		int kdtotal = markTaskRepo.countByWorkIdAndSubjectAndStageAndQuestionId(workId, markSubject.getSubject(),  MarkStage.LEVEL, examQuestion.getId());
-        		if ((kdcount + 1.0D) / kdtotal * 1.0D > kdpt / 100.D) {
+        		if ((kdcount * 1.0D) / kdtotal * 1.0D > kdpt / 100.D) {
         			statusMap.put(markSubject.getId(), false);
         			throw new RuntimeException(targetLevel.getCode() + "档已满,考点阀值已达" + kdpt + "%。");
         		}