yin 3 月之前
父節點
當前提交
a0e13beda9

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanOmrTaskController.java

@@ -44,9 +44,9 @@ public class ScanOmrTaskController extends BaseController {
 
     @ApiOperation(value = "随机识别对照任务获取")
     @RequestMapping(value = "/getTask", method = RequestMethod.POST)
-    public Result getTask(@RequestParam Long examId) {
+    public Result getTask(@RequestParam Long examId, @RequestParam(required = false) String coursePaperId) {
         SysUser user = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(omrTaskService.getTask(examId,user.getId()));
+        return ResultUtil.ok(omrTaskService.getTask(examId,coursePaperId,user.getId()));
     }
 
     @ApiOperation(value = "识别对照任务获取")

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

@@ -22,8 +22,8 @@ import com.qmth.teachcloud.mark.enums.OmrTaskStatus;
  */
 public interface ScanOmrTaskMapper extends BaseMapper<ScanOmrTask> {
 
-    List<Long> findUnMarked(@Param(value = "examId") Long examId, @Param(value = "pageNumber") int pageNumber,
-                                   @Param(value = "pageSize") int pageSize, @Param(value = "status") OmrTaskStatus status);
+    List<Long> findUnMarked(@Param(value = "examId") Long examId,@Param(value = "coursePaperId")String coursePaperId,@Param(value = "pageNumber") int pageNumber,
+                                   @Param(value = "pageSize") int pageSize, @Param(value = "status") OmrTaskStatus status,@Param("dpr") DataPermissionRule dpr);
 
     IPage<ScanStudentDto> listByExamIdAndStatusAndUserId(@Param("page") Page<ScanStudentDto> page,
                                                          @Param(value = "examId") Long examId,

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

@@ -26,7 +26,7 @@ public interface ScanOmrTaskService extends IService<ScanOmrTask> {
 	
 	List<ScanOmrTask> buildTask(@Param("c") ConditionType c, @Param("studentId") Long studentId);
 
-	ScanOmrStudent getTask(Long examId, Long userId);
+	ScanOmrStudent getTask(Long examId,String coursePaperId, Long userId);
 
 	ScanOmrTaskSaveDto submitTask(List<ScanOmrTaskResultDto> result, Long userId);
 

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

@@ -457,8 +457,8 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
         }
     }
     @Override
-    public ScanOmrStudent getTask(Long examId, Long userId) {
-        Long studentId = findWaitingTask(examId,userId);
+    public ScanOmrStudent getTask(Long examId,String coursePaperId, Long userId) {
+        Long studentId = findWaitingTask(examId,coursePaperId,userId);
         if (studentId == null) {
             throw ExceptionResultEnum.ERROR.exception("没有识别对照任务");
         }
@@ -482,11 +482,11 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
         return scanOmrStudent;
     }
 
-    private Long findWaitingTask(Long examId, Long userId) {
+    private Long findWaitingTask(Long examId,String coursePaperId, Long userId) {
         int retry = 0;
         Long studentId = null;
         while (studentId == null) {
-            List<Long> list = this.findStudentIdByStatus(examId, retry * 20, 20, OmrTaskStatus.WAITING);
+            List<Long> list = this.findStudentIdByStatus(examId, coursePaperId,retry * 20, 20, OmrTaskStatus.WAITING);
             if (list.isEmpty()) {
                 break;
             }
@@ -504,8 +504,11 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
         return studentId;
     }
 
-    private List<Long> findStudentIdByStatus(Long examId, int pageNumber, int pageSize, OmrTaskStatus status) {
-        return this.baseMapper.findUnMarked(examId, pageNumber, pageSize, status);
+    private List<Long> findStudentIdByStatus(Long examId,String coursePaperId, int pageNumber, int pageSize, OmrTaskStatus status) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(),
+                sysUser.getId(), ServletUtil.getRequest().getServletPath());
+        return this.baseMapper.findUnMarked(examId, coursePaperId,pageNumber, pageSize, status,dpr);
     }
 
     private List<ScanOmrTaskDto> toTaskVo(List<ScanOmrTask> tasks) {

+ 24 - 8
teachcloud-mark/src/main/resources/mapper/ScanOmrTaskMapper.xml

@@ -21,16 +21,32 @@
 			typeHandler="com.qmth.teachcloud.mark.handle.OmrTaskPageListTypeHandler" />
     </resultMap>
     
-    <select id="findUnMarked" resultType="com.qmth.teachcloud.mark.entity.ScanOmrTask">
-		select DISTINCT t.student_id
-		from scan_omr_task t
-		where t.exam_id=#{examId}
-		and
-		t.status=#{status}
-		order by t.id
+    <select id="findUnMarked" resultType="java.lang.Long">
+		select
+		s.id
+		from mark_student s
+		LEFT JOIN basic_course bc on s.course_id = bc.id
+		<if test="dpr != null and dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+			AND bc.teaching_room_id IN
+			<foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+				#{item}
+			</foreach>
+		</if>
+		<where>
+			and s.exam_id = #{examId}
+			<if test="coursePaperId != null and coursePaperId != ''">
+				and s.course_paper_id = #{coursePaperId}
+			</if>
+			and exists(select 1
+			from scan_omr_task t
+			where t.exam_id = #{examId}
+			and t.status=#{status}
+			and s.id = t.student_id
+			)
+		</where>
 		limit
 		#{pageNumber},#{pageSize}
-	</select>
+</select>
 	
 	<select id="listByExamIdAndStatusAndUserId" resultType="com.qmth.teachcloud.mark.dto.ScanStudentDto">
 		select