ting.yin 1 жил өмнө
parent
commit
db572afea2

+ 6 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanOmrTaskMapper.java

@@ -25,4 +25,10 @@ public interface ScanOmrTaskMapper extends BaseMapper<ScanOmrTask> {
 	List<ScanStudentDto> listByExamIdAndStatusAndUserId(@Param(value = "examId") Long examId,
 			@Param(value = "status") OmrTaskStatus status, @Param(value = "userId") Long userId);
 
+	int getStudentCountByExamAndStatusAndUserId(@Param(value = "examId") Long examId,
+			@Param(value = "userId") Long userId, @Param(value = "status") OmrTaskStatus status);
+
+	int getStudentCountByExamAndStatus(@Param(value = "examId") Long examId,
+			@Param(value = "status") OmrTaskStatus status);
+
 }

+ 2 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanOmrTaskService.java

@@ -30,9 +30,9 @@ public interface ScanOmrTaskService extends IService<ScanOmrTask> {
 
 	ScanOmrTaskStatusDto getStatus(Long examId, Long userId);
 
-	int getStudentCountByExamAndStatusAndUserId(Long examId, Long userId, OmrTaskStatus status);
+	int getFinishStudentCountByExamAndUserId(Long examId, Long userId);
 
-	int getStudentCountByExamAndStatus(Long examId, OmrTaskStatus status);
+	int getTodoStudentCountByExam(Long examId);
 
 	void deleteByStudentId(Long examId, Long studentId);
 

+ 6 - 13
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanOmrTaskServiceImpl.java

@@ -531,26 +531,19 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
 	@Override
 	public ScanOmrTaskStatusDto getStatus(Long examId, Long userId) {
 		ScanOmrTaskStatusDto status = new ScanOmrTaskStatusDto();
-//		status.setFinishCount(this.getCountByExamAndStatusAndUserId(examId, userId, OmrTaskStatus.PROCESSED));
-//		status.setTodoCount(this.getCountByExamAndStatus(examId, OmrTaskStatus.WAITING));
+		status.setFinishCount(this.getFinishStudentCountByExamAndUserId(examId, userId));
+		status.setTodoCount(this.getTodoStudentCountByExam(examId));
 		return status;
 	}
 
 	@Override
-	public int getStudentCountByExamAndStatusAndUserId(Long examId, Long userId, OmrTaskStatus status) {
-		QueryWrapper<ScanOmrTask> wrapper = new QueryWrapper<>();
-		LambdaQueryWrapper<ScanOmrTask> lw = wrapper.lambda();
-		lw.eq(ScanOmrTask::getUserId, userId);
-		lw.eq(ScanOmrTask::getExamId, examId);
-		return this.count(wrapper);
+	public int getFinishStudentCountByExamAndUserId(Long examId, Long userId) {
+		return this.baseMapper.getStudentCountByExamAndStatusAndUserId(examId,userId,OmrTaskStatus.PROCESSED);
 	}
 
 	@Override
-	public int getStudentCountByExamAndStatus(Long examId, OmrTaskStatus status) {
-		QueryWrapper<ScanOmrTask> wrapper = new QueryWrapper<>();
-		LambdaQueryWrapper<ScanOmrTask> lw = wrapper.lambda();
-		lw.eq(ScanOmrTask::getExamId, examId);
-		return this.count(wrapper);
+	public int getTodoStudentCountByExam(Long examId) {
+		return this.baseMapper.getStudentCountByExamAndStatus(examId,OmrTaskStatus.WAITING);
 	}
 
 	@Transactional

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/TaskLockUtil.java

@@ -20,6 +20,9 @@ public class TaskLockUtil {
         for (TaskLock taskLock : formalTaskMap.values()) {
             taskLock.expire(timeoutMinute);
         }
+        for (TaskLock taskLock : inspectedStudentMap.values()) {
+            taskLock.expire(timeoutMinute);
+        }
     }
 
     public static TaskLock getOmrTask(String key) {

+ 26 - 1
teachcloud-mark/src/main/resources/mapper/ScanOmrTaskMapper.xml

@@ -32,7 +32,7 @@
 		#{pageNumber},#{pageSize}
 	</select>
 	
-	   <select id="listByExamIdAndStatusAndUserId" resultType="com.qmth.teachcloud.mark.dto.ScanStudentDto">
+	<select id="listByExamIdAndStatusAndUserId" resultType="com.qmth.teachcloud.mark.dto.ScanStudentDto">
 		select 
 			s.id,
 			s.student_name,
@@ -51,5 +51,30 @@
 			</if>
 		)
 	</select>
+	
+	<select id="getStudentCountByExamAndStatusAndUserId" resultType="int">
+		select count(DISTINCT(t.student_id))
+			from scan_omr_task t
+			where 
+			t.exam_id=#{examId}
+			and t.status=#{status}
+			and t.user_id=#{userId}
+			and t.student_id not in(
+				select t1.student_id
+				from scan_omr_task t1
+				where 
+				t1.exam_id=#{examId}
+				and t1.status!=#{status}
+				and t1.user_id is null 
+			)
+	</select>
+	
+	<select id="getStudentCountByExamAndStatus" resultType="int">
+		select count(DISTINCT(t.student_id))
+			from scan_omr_task t
+			where 
+			t.exam_id=#{examId}
+			and t.status=#{status}
+	</select>
 
 </mapper>