xiaofei 1 ano atrás
pai
commit
52b19d005c

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

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.api.mark;
 
 import java.util.List;
 
+import io.swagger.annotations.ApiParam;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,7 +37,7 @@ import io.swagger.annotations.ApiOperation;
 @Api(tags = "扫描-识别对照")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/task/omr")
-public class ScanOmrTaskController extends BaseController{
+public class ScanOmrTaskController extends BaseController {
     protected static final Logger log = LoggerFactory.getLogger(ScanOmrTaskController.class);
 
     @Autowired
@@ -72,13 +73,15 @@ public class ScanOmrTaskController extends BaseController{
 
     @ApiOperation(value = "识别对照任务列表")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
-    public Result list(@RequestParam Long examId,
-                          @RequestParam OmrTaskStatus status) {
-    	Long userId = null;
-    	if (status.equals(OmrTaskStatus.PROCESSED)) {
-			SysUser user = (SysUser) ServletUtil.getRequestUser();
-			userId = user.getId();
-		}
-        return ResultUtil.ok(omrTaskService.list(examId, status, userId));
+    public Result list(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                       @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                       @ApiParam(value = "课程试卷编号") @RequestParam(required = false) String coursePaperId,
+                       @ApiParam(value = "状态") @RequestParam OmrTaskStatus status) {
+        Long userId = null;
+        if (status.equals(OmrTaskStatus.PROCESSED)) {
+            SysUser user = (SysUser) ServletUtil.getRequestUser();
+            userId = user.getId();
+        }
+        return ResultUtil.ok(omrTaskService.list(examId, courseCode, coursePaperId, status, userId));
     }
 }

+ 9 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/answercard/AnswerCardVo.java

@@ -20,7 +20,9 @@ public class AnswerCardVo {
     private CardSource source;
     
     private Boolean needAdapte;
-    
+	// 是否能适配
+    private Boolean canAdapte;
+
     private String uri;
 
     private String md5;
@@ -127,5 +129,11 @@ public class AnswerCardVo {
 		this.adapteMd5 = adapteMd5;
 	}
 
+	public Boolean getCanAdapte() {
+		return canAdapte;
+	}
 
+	public void setCanAdapte(Boolean canAdapte) {
+		this.canAdapte = canAdapte;
+	}
 }

+ 12 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkProblemDto.java

@@ -5,6 +5,9 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.enums.mark.MarkProblemStatus;
 import com.qmth.teachcloud.common.enums.mark.MarkProblemType;
 
+import java.io.PrintStream;
+import java.util.List;
+
 public class MarkProblemDto {
 
     @JsonSerialize(using = ToStringSerializer.class)
@@ -33,6 +36,7 @@ public class MarkProblemDto {
     private String statusName;
     private Integer groupNumber;
     private String groupQuestions;
+    private List<String> sheetUrls;
 
     public Long getId() {
         return id;
@@ -201,4 +205,12 @@ public class MarkProblemDto {
     public void setGroupQuestions(String groupQuestions) {
         this.groupQuestions = groupQuestions;
     }
+
+    public List<String> getSheetUrls() {
+        return sheetUrls;
+    }
+
+    public void setSheetUrls(List<String> sheetUrls) {
+        this.sheetUrls = sheetUrls;
+    }
 }

+ 10 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentScoreDetailDto.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.dto.mark.score;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.enums.ScanStatus;
 
 import java.util.List;
 
@@ -31,6 +32,7 @@ public class StudentScoreDetailDto {
     private List<SheetUrlDto> sheetUrls;
     private Long examStartTime;
     private Long examEndTime;
+    private ScanStatus scanStatus;
 
     public Long getStudentId() {
         return studentId;
@@ -207,4 +209,12 @@ public class StudentScoreDetailDto {
     public void setExamEndTime(Long examEndTime) {
         this.examEndTime = examEndTime;
     }
+
+    public ScanStatus getScanStatus() {
+        return scanStatus;
+    }
+
+    public void setScanStatus(ScanStatus scanStatus) {
+        this.scanStatus = scanStatus;
+    }
 }

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

@@ -24,7 +24,11 @@ public interface ScanOmrTaskMapper extends BaseMapper<ScanOmrTask> {
 			@Param(value = "pageSize") int pageSize, @Param(value = "status") OmrTaskStatus status);
 
 	List<ScanStudentDto> listByExamIdAndStatusAndUserId(@Param(value = "examId") Long examId,
-			@Param(value = "status") OmrTaskStatus status, @Param(value = "userId") Long userId);
+														@Param("courseCode") String courseCode,
+														@Param("coursePaperId") String coursePaperId,
+														@Param(value = "status") OmrTaskStatus status,
+														@Param(value = "userId") Long userId,
+														@Param("dpr") DataPermissionRule dpr);
 
 	int getStudentCountByExamAndStatusAndUserId(@Param(value = "examId") Long examId,
 			@Param(value = "userId") Long userId, @Param(value = "status") OmrTaskStatus status);

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

@@ -39,7 +39,7 @@ public interface ScanOmrTaskService extends IService<ScanOmrTask> {
 
 	int getCount(Long examId, OmrTaskStatus status, String courseCode, String coursePaperId, DataPermissionRule dpr);
 
-	List<ScanStudentDto> list(Long examId, OmrTaskStatus status, Long userId);
+	List<ScanStudentDto> list(Long examId, String courseCode, String coursePaperId, OmrTaskStatus status, Long userId);
 
 	void saveTask(Long studentId);
 

+ 3 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkArbitrateHistoryServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkArbitrateStatus;
+import com.qmth.teachcloud.common.enums.mark.MarkMode;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -131,12 +132,12 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
             markArbitrateHistory = this.baseMapper.getArbitrateWaitingOne(examId, paperNumber, groupNumber);
         }
         if (markArbitrateHistory == null) {
-            throw ExceptionResultEnum.ERROR.exception("仲裁数据异常");
+            throw ExceptionResultEnum.ERROR.exception("没有待仲裁数据");
         }
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber());
         MarkArbitrateSettingDto markArbitrateSettingDto = new MarkArbitrateSettingDto();
         if (markPaper != null) {
-            markArbitrateSettingDto.setMarkMode(markPaper.getMarkMode().name());
+            markArbitrateSettingDto.setMarkMode(MarkMode.UNLIMITED.equals(markPaper.getMarkMode()) ? MarkMode.TRACK.name() : markPaper.getMarkMode().name());
             markArbitrateSettingDto.setCourseCode(markPaper.getCourseCode());
             markArbitrateSettingDto.setCourseName(markPaper.getCourseName());
             markArbitrateSettingDto.setPaperNumber(markPaper.getPaperNumber());

+ 4 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -99,6 +99,10 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
         if (markPaperOld == null) {
             throw ExceptionResultEnum.ERROR.exception("评卷设置数据不存在");
         }
+        // 评卷是否结束
+        if (MarkPaperStatus.FINISH.equals(markPaperOld.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("科目已结束评卷,无法修改参数");
+        }
         UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(MarkPaper::getMarkMode, markPaper.getMarkMode())
                 .set(MarkPaper::getForceMode, !MarkMode.UNLIMITED.equals(markPaper.getMarkMode()))

+ 4 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkProblemHistoryServiceImpl.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import javax.annotation.Resource;
 
+import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -50,6 +51,8 @@ public class MarkProblemHistoryServiceImpl extends ServiceImpl<MarkProblemHistor
 	@Resource
 	private MarkTaskService markTaskService;
 	@Resource
+	private TeachcloudCommonService teachcloudCommonService;
+	@Resource
 	private MarkService markService;
 	@Resource
 	private LockService lockService;
@@ -64,6 +67,7 @@ public class MarkProblemHistoryServiceImpl extends ServiceImpl<MarkProblemHistor
 			MarkStudent markStudent = markStudentService.getById(problemDto.getStudentId());
 			problemDto.setStudentName(markStudent.getStudentName());
 			problemDto.setStudentCode(markStudent.getStudentCode());
+			problemDto.setSheetUrls(teachcloudCommonService.filePreview(markStudent.getSheetPathList()));
 			problemDto.setProblemTypeName(problemDto.getType().getDesc());
 			problemDto.setStatusName(problemDto.getStatus().getName());
 			problemDto.setGroupQuestions(markQuestionService

+ 5 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -412,6 +412,11 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     public Boolean saveObjectiveInspectedTask(Long studentId, String answers) {
         Long userId = ServletUtil.getRequestUserId();
         MarkStudent student = this.getById(studentId);
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(student.getExamId(), student.getPaperNumber());
+        // 评卷是否结束
+        if (markPaper == null || MarkPaperStatus.FINISH.equals(markPaper.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("科目已结束评卷,无法打分");
+        }
         answers = StringUtils.trimToEmpty(answers);
         if (student != null) {
             student.setAnswers(answers.toUpperCase());

+ 1 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanAnswerCardServiceImpl.java

@@ -85,6 +85,7 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
         List<AnswerCardVo> answerCardVos = baseMapper.cardList(examId, coursePaperId, dpr);
         for (AnswerCardVo answerCardVo : answerCardVos) {
+            answerCardVo.setCanAdapte(scanPaperService.getCountByExamAndCardNumber(examId, answerCardVo.getNumber()) == 0);
             answerCardVo.setUri(fileStoreUtils.filePreview(answerCardVo.getUri()));
             answerCardVo.setAdapteUri(fileStoreUtils.filePreview(answerCardVo.getAdapteUri()));
         }

+ 8 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanOmrTaskServiceImpl.java

@@ -16,7 +16,9 @@ import com.qmth.teachcloud.common.enums.ScanStatus;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.enums.scan.ConditionType;
 import com.qmth.teachcloud.common.enums.scan.OmrField;
+import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.bean.OmrTaskItem;
 import com.qmth.teachcloud.mark.bean.OmrTaskPage;
 import com.qmth.teachcloud.mark.dto.*;
@@ -61,6 +63,8 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
     private MarkPaperService markPaperService;
     @Resource
     private TeachcloudCommonService teachcloudCommonService;
+    @Resource
+    private BasicRoleDataPermissionService basicRoleDataPermissionService;
 
     private static final String OMR_SUSPECT = "?";
 
@@ -604,8 +608,10 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
     }
 
     @Override
-    public List<ScanStudentDto> list(Long examId, OmrTaskStatus status, Long userId) {
-        return this.baseMapper.listByExamIdAndStatusAndUserId(examId, status, userId);
+    public List<ScanStudentDto> list(Long examId, String courseCode, String coursePaperId, OmrTaskStatus status, Long userId) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, userId, ServletUtil.getRequest().getServletPath());
+        return this.baseMapper.listByExamIdAndStatusAndUserId(examId, courseCode, coursePaperId, status, userId, dpr);
     }
 
     @Override

+ 2 - 1
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -66,7 +66,8 @@
             ms.check_time checkTime,
             ms.sheet_path sheetPath,
             ms.exam_start_time examStartTime,
-            ms.exam_end_time examEndTime
+            ms.exam_end_time examEndTime,
+            ms.scan_status scanStatus
         FROM
             mark_student ms
                 left join sys_user su on ms.check_user_id = su.id

+ 23 - 13
teachcloud-mark/src/main/resources/mapper/ScanOmrTaskMapper.xml

@@ -37,19 +37,29 @@
 			s.id studentId,
 			s.student_name,
 			s.student_code
-		from mark_student s where s.id in(
-			select DISTINCT(t.student_id)
-			from scan_omr_task t
-			where 
-			t.exam_id=#{examId}
-			and t.status=#{status}
-			<if test="userId == null or userId == ''">
-			and t.user_id is null
-			</if>
-			<if test="userId != null and userId != ''">
-			and t.user_id=#{userId}
-			</if>
-		)
+		from mark_student s
+			<where>
+				<if test="examId != null">
+					and s.exam_id = #{examId}
+				</if>
+				<if test="courseCode != null and courseCode != ''">
+					and s.course_code = #{courseCode}
+				</if>
+				<if test="coursePaperId != null and coursePaperId != ''">
+					and s.course_paper_id = #{coursePaperId}
+				</if>
+					and exists(select 1
+						from scan_omr_task t
+						where s.id = t.student_id
+						and t.status=#{status}
+						<if test="userId == null or userId == ''">
+						and t.user_id is null
+						</if>
+						<if test="userId != null and userId != ''">
+						and t.user_id=#{userId}
+						</if>
+				)
+			</where>
 	</select>
 	
 	<select id="getStudentCountByExamAndStatusAndUserId" resultType="int">