xiaofei hace 1 año
padre
commit
66b4fa0beb
Se han modificado 26 ficheros con 128 adiciones y 148 borrados
  1. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java
  2. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamStudentService.java
  3. 2 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamStudentServiceImpl.java
  4. 3 5
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  5. 1 1
      distributed-print-business/src/main/resources/mapper/ExamPrintPlanMapper.xml
  6. 1 0
      distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml
  7. 4 4
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  8. 1 0
      distributed-print/install/mysql/init/teachcloud_db.sql
  9. 3 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanLogController.java
  10. 14 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanLog.java
  11. 1 4
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanOmrTaskMapper.java
  12. 1 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkQuestionService.java
  13. 2 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java
  14. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanLogService.java
  15. 1 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanOmrTaskService.java
  16. 4 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java
  17. 11 17
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java
  18. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  19. 12 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  20. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanLogServiceImpl.java
  21. 6 11
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanOmrTaskServiceImpl.java
  22. 2 2
      teachcloud-mark/src/main/resources/mapper/MarkUserGroupMapper.xml
  23. 28 61
      teachcloud-mark/src/main/resources/mapper/ScanOmrTaskMapper.xml
  24. 15 13
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java
  25. 2 2
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/PrintFinishService.java
  26. 8 9
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java

@@ -53,5 +53,5 @@ public interface ExamStudentMapper extends BaseMapper<ExamStudent> {
 
     ExamStudent listByExamDetailCourseIdLimit1(@Param("schoolId") Long schoolId, @Param("examDetailCourseId") Long examDetailCourseId);
 
-    List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(@Param("examDetailCourseId") Long examDetailCourseId);
+    List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(@Param("examDetailCourseId") Long examDetailCourseId, @Param("paperType") String paperType);
 }

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamStudentService.java

@@ -41,7 +41,7 @@ public interface ExamStudentService extends IService<ExamStudent> {
 
     ExamStudent listByExamDetailCourseIdLimit1(Long schoolId, Long examDetailCourseId);
 
-    List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(Long examDetailCourseId);
+    List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(Long examDetailCourseId, String paperType);
 
     int countByExamDetailCourseIdAndStudentCode(Long examDetailCourseId, String studentCode);
 

+ 2 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamStudentServiceImpl.java

@@ -11,7 +11,6 @@ import com.qmth.distributed.print.business.entity.ExamStudent;
 import com.qmth.distributed.print.business.mapper.ExamDetailCourseMapper;
 import com.qmth.distributed.print.business.mapper.ExamStudentMapper;
 import com.qmth.distributed.print.business.service.ExamStudentService;
-import com.qmth.teachcloud.mark.entity.MarkStudent;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
@@ -107,8 +106,8 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
     }
 
     @Override
-    public List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(Long examDetailCourseId) {
-        return this.baseMapper.listByExamDetailCourseIdNotIntMarkStudent(examDetailCourseId);
+    public List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(Long examDetailCourseId, String paperType) {
+        return this.baseMapper.listByExamDetailCourseIdNotIntMarkStudent(examDetailCourseId, paperType);
     }
 
     @Override

+ 3 - 5
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -473,7 +473,7 @@
                 and b.course_code = #{courseCode}
             </if>
         </where>
-        order by 0 + cast(c.student_code as char)
+        order by c.student_code
     </select>
     <select id="listStudentByExamDetailCourseId" resultType="java.util.Map">
         SELECT
@@ -699,7 +699,7 @@
             edc.course_name courseName,
             edc.paper_number paperNumber,
             edc.course_paper_id coursePaperId,
-            edcpt.paper_type paperType,
+            edc.paper_type paperType,
             et.user_id createId,
             ed.exam_start_time examStartTime,
             ed.exam_end_time examEndTime,
@@ -712,8 +712,6 @@
                 LEFT JOIN
             exam_task et ON ed.exam_id = et.exam_id AND edc.paper_number = et.paper_number
                 LEFT JOIN
-            exam_detail_course_paper_type edcpt ON edc.id = edcpt.exam_detail_course_id
-                LEFT JOIN
             basic_exam be ON be.id = ed.exam_id
         WHERE
             ed.status = #{printStatus}
@@ -726,6 +724,6 @@
                               ed.exam_id = mp.exam_id
                             AND edc.paper_number = mp.paper_number
                             AND mp.status = #{markStatus})
-        GROUP BY ed.school_id , be.semester_id, ed.exam_id , edc.course_code , edc.course_name , edc.paper_number , edc.course_paper_id , edcpt.paper_type , et.user_id, ed.exam_start_time, ed.exam_end_time
+        GROUP BY ed.school_id , be.semester_id, ed.exam_id , edc.course_code , edc.course_name , edc.paper_number , edc.course_paper_id , edc.paper_type , et.user_id, ed.exam_start_time, ed.exam_end_time
     </select>
 </mapper>

+ 1 - 1
distributed-print-business/src/main/resources/mapper/ExamPrintPlanMapper.xml

@@ -105,7 +105,7 @@
                 </if>
             </if>
         </where>
-        ORDER BY a.id DESC
+        ORDER BY a.create_time DESC
     </select>
 
     <select id="list" resultType="com.qmth.distributed.print.business.bean.result.PrintPlanBrief">

+ 1 - 0
distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml

@@ -245,6 +245,7 @@
             exam_student es
         WHERE
             es.exam_detail_course_id = #{examDetailCourseId}
+          AND es.paper_type = #{paperType}
           AND NOT EXISTS( SELECT
                               1
                           FROM

+ 4 - 4
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -144,13 +144,13 @@
                 and a.start_time &lt;= #{endTime}
             </if>
             <if test="userName != null and userName != ''">
-                and c.real_name like concat('%',#{userName},'%')
+                and c.real_name like concat(#{userName},'%')
             </if>
             <if test="createName != null and createName != ''">
-                and d.real_name like concat('%',#{createName},'%')
+                and d.real_name like concat(#{createName},'%')
             </if>
         </where>
-        order by a.id desc
+        order by a.create_time desc
     </select>
     <select id="listUser" resultType="com.qmth.teachcloud.common.bean.dto.BlurryUserDto">
         SELECT
@@ -262,7 +262,7 @@
                 and c.real_name like concat('%',#{userName},'%')
             </if>
         </where>
-        order by a.id desc
+        order by a.create_time desc
     </select>
     <select id="listTaskReviewUnaudited" resultType="com.qmth.distributed.print.business.bean.dto.ExamTaskDto">
         select

+ 1 - 0
distributed-print/install/mysql/init/teachcloud_db.sql

@@ -1940,6 +1940,7 @@ CREATE TABLE  IF NOT EXISTS `scan_log` (
       `school_code` VARCHAR(20) NOT NULL COMMENT '学校代码',
       `device_code` VARCHAR(50) NOT NULL COMMENT '设备号',
       `file_name` VARCHAR(45) NOT NULL COMMENT '文件名',
+      `type` VARCHAR(10) NOT NULL COMMENT '错误文件类型,崩溃异常文件:COLLAPSE,正常文件:NORMAL',
       `md5` VARCHAR(45) NOT NULL COMMENT '扫描端日志',
       `path` VARCHAR(45) NULL COMMENT '文件存储路径',
       `upload_time` BIGINT(20) NULL COMMENT '上传时间',

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

@@ -46,8 +46,9 @@ public class ScanLogController {
     public Result upload(@ApiParam(value = "学校代码", required = true) @RequestParam String schoolCode,
                          @ApiParam(value = "设备编号", required = true) @RequestParam String deviceCode,
                          @ApiParam(value = "文件", required = true) @RequestParam MultipartFile file,
-                         @ApiParam(value = "md5", required = true) @RequestParam String md5) {
-        return ResultUtil.ok(scanLogService.uploadLogFile(schoolCode, deviceCode, file, md5));
+                         @ApiParam(value = "md5", required = true) @RequestParam String md5,
+                         @ApiParam(value = "错误文件类型,崩溃异常文件:COLLAPSE,正常文件:NORMAL", required = true) @RequestParam String type) {
+        return ResultUtil.ok(scanLogService.uploadLogFile(schoolCode, deviceCode, file, md5, type));
     }
 
     /**

+ 14 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanLog.java

@@ -37,6 +37,10 @@ public class ScanLog implements Serializable {
     @MppMultiId(value = "file_name")
     private String fileName;
 
+    @ApiModelProperty(value = "错误文件类型,崩溃异常文件:COLLAPSE,正常文件:NORMAL")
+    @MppMultiId(value = "type")
+    private String type;
+
     @ApiModelProperty(value = "扫描端日志")
     private String md5;
 
@@ -53,10 +57,11 @@ public class ScanLog implements Serializable {
     public ScanLog() {
     }
 
-    public ScanLog(String schoolCode, String deviceCode, String fileName) {
+    public ScanLog(String schoolCode, String deviceCode, String fileName, String type) {
         this.schoolCode = schoolCode;
         this.deviceCode = deviceCode;
         this.fileName = fileName;
+        this.type = type;
     }
 
     public String getSchoolCode() {
@@ -83,6 +88,14 @@ public class ScanLog implements Serializable {
         this.fileName = fileName;
     }
 
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
     public String getMd5() {
         return md5;
     }

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

@@ -30,10 +30,7 @@ public interface ScanOmrTaskMapper extends BaseMapper<ScanOmrTask> {
 														@Param("markPaperStatus") String markPaperStatus, @Param("dpr") DataPermissionRule dpr);
 
 	int getStudentCountByExamAndStatusAndUserId(@Param(value = "examId") Long examId,
-												@Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param(value = "userId") Long userId, @Param(value = "status") OmrTaskStatus status, @Param("markPaperStatus") String markPaperStatus, @Param("dpr") DataPermissionRule dpr);
-
-	int getStudentCountByExamAndStatus(@Param(value = "examId") Long examId,
-									   @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param(value = "status") OmrTaskStatus status, @Param("markPaperStatus") String markPaperStatus, @Param("dpr") DataPermissionRule dpr);
+												@Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param(value = "status") String status, @Param("markPaperStatus") String markPaperStatus, @Param("dpr") DataPermissionRule dpr);
 
     int countOmrTask(@Param("scanOmrTask") ScanOmrTask scanOmrTask, @Param("dpr") DataPermissionRule dpr);
 }

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

@@ -28,11 +28,9 @@ public interface MarkQuestionService extends IService<MarkQuestion> {
      */
     String assembleGroupQuestionsByExamIdAndPaperNumberAndNumber(Long examId, String paperNumber, Integer groupNumber);
 
-    List<MarkQuestion> listQuestionByExamIdAndPaperNumber(Long examId, String paperNumber);
+    List<MarkQuestion> listQuestionByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType);
 
     void saveQuestions(MarkQuestionParams markQuestionParams);
-    
-    List<MarkQuestion> listQuestionByExamIdAndPaperNumber(Long examId, String paperNumber,Boolean isObjective);
 
     List<MarkQuestion> listQuestionByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer number, Boolean isObjective);
 

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

@@ -139,4 +139,6 @@ public interface MarkStudentService extends IService<MarkStudent> {
     int countAbsentByExamIdAndPaperNumber(Long examId, String paperNumber);
 
     List<MarkStudent> listScanCollegeByExamIdAndCourseCodeAndCoursePaperId(Long examId, String courseCode, String coursePaperId, String status, DataPermissionRule dpr);
+
+    int countUnexistByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType);
 }

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

@@ -18,7 +18,7 @@ import javax.validation.constraints.Min;
  */
 public interface ScanLogService extends IService<ScanLog> {
 
-    boolean uploadLogFile(String schoolCode, String deviceCode, MultipartFile file, String md5);
+    boolean uploadLogFile(String schoolCode, String deviceCode, MultipartFile file, String md5, String type);
 
     IPage<ScanLog> listScanLog(String schoolCode, Integer pageNumber, Integer pageSize);
 }

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

@@ -32,9 +32,7 @@ public interface ScanOmrTaskService extends IService<ScanOmrTask> {
 
 	ScanOmrTaskStatusDto getStatus(Long examId, String courseCode, String coursePaperId);
 
-	int getFinishStudentCountByExamAndUserId(Long examId, String courseCode, String coursePaperId, Long userId, DataPermissionRule dpr);
-
-	int getTodoStudentCountByExam(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr);
+	int getFinishStudentCountByExamAndUserId(Long examId, String courseCode, String coursePaperId, String status,DataPermissionRule dpr);
 
 	void deleteByStudentId(Long examId, Long studentId);
 

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

@@ -149,6 +149,10 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
                         throw ExceptionResultEnum.ERROR.exception(courseInfo + "考生未全部评完,无法结束评卷");
                     }
                     // 识别缺考未做完,不能结束
+                    if (markStudentService.countUnexistByExamIdAndPaperNumberAndPaperType(examId, paperNumber, markPaper.getPaperType()) > 0) {
+                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "未全部扫描完成,无法结束评卷");
+                    }
+                    // 识别缺考未做完,不能结束
                     if (markStudentService.countOmrAbsentStudent(examId, paperNumber, markPaper.getPaperType(), false) > 0) {
                         throw ExceptionResultEnum.ERROR.exception(courseInfo + "识别缺考未全部确认,无法结束评卷");
                     }

+ 11 - 17
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java

@@ -55,11 +55,15 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
     }
 
     @Override
-    public List<MarkQuestion> listQuestionByExamIdAndPaperNumber(Long examId, String paperNumber) {
+    public List<MarkQuestion> listQuestionByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType) {
         QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkQuestion::getExamId, examId)
-                .eq(MarkQuestion::getPaperNumber, paperNumber)
-                .orderByAsc(MarkQuestion::getMainNumber)
+        LambdaQueryWrapper<MarkQuestion> lambdaQueryWrapper = queryWrapper.lambda();
+        lambdaQueryWrapper.eq(MarkQuestion::getExamId, examId)
+                .eq(MarkQuestion::getPaperNumber, paperNumber);
+        if (StringUtils.isNotBlank(paperType)) {
+            lambdaQueryWrapper.eq(MarkQuestion::getPaperType, paperType);
+        }
+        lambdaQueryWrapper.orderByAsc(MarkQuestion::getMainNumber)
                 .orderByAsc(MarkQuestion::getSubNumber);
         return this.list(queryWrapper);
     }
@@ -83,7 +87,7 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
         }
 
         // 查询已有结构信息
-        List<MarkQuestion> markQuestionList = this.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
+        List<MarkQuestion> markQuestionList = this.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
         if (CollectionUtils.isEmpty(markQuestionList)) {
             for (MarkQuestion question : questions) {
                 if (question.getTotalScore() <= 0) {
@@ -131,7 +135,7 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
             this.saveOrUpdateBatch(saveOrUpdateList);
         }
         // 更新客观题满分、主观题满分、总分
-        List<MarkQuestion> markQuestions = this.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
+        List<MarkQuestion> markQuestions = this.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
         Double objectiveScore = markQuestions.stream().filter(m -> m.getObjective()).collect(Collectors.summingDouble(m -> m.getTotalScore()));
         Double subjectiveScore = markQuestions.stream().filter(m -> !m.getObjective()).collect(Collectors.summingDouble(m -> m.getTotalScore()));
         Double totalScore = markQuestions.stream().collect(Collectors.summingDouble(m -> m.getTotalScore()));
@@ -237,7 +241,7 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
     public MarkQuestionDto pageQuestionsByExamIdAndPaperNumber(Long examId, String paperNumber, String paperType, boolean canCreate) {
         MarkQuestionDto markQuestionDto = new MarkQuestionDto();
         markQuestionDto.setCanCreate(canCreate);
-        List<MarkQuestion> markQuestionList = this.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
+        List<MarkQuestion> markQuestionList = this.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
         long subjectiveCount = markQuestionList.stream().filter(m -> !m.getObjective() && m.getTotalScore() != null).count();
         markQuestionDto.setQuestionSubmit(subjectiveCount > 0);
         long objectiveCount = markQuestionList.stream().filter(m -> m.getObjective() && StringUtils.isNotBlank(m.getAnswer())).count();
@@ -287,14 +291,4 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
         this.remove(updateWrapper);
     }
 
-    @Override
-    public List<MarkQuestion> listQuestionByExamIdAndPaperNumber(Long examId, String paperNumber, Boolean isObjective) {
-        QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkQuestion::getExamId, examId)
-                .eq(MarkQuestion::getPaperNumber, paperNumber)
-                .eq(MarkQuestion::getObjective, isObjective)
-                .orderByAsc(MarkQuestion::getMainNumber)
-                .orderByAsc(MarkQuestion::getSubNumber);
-        return this.list(queryWrapper);
-    }
 }

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

@@ -250,7 +250,7 @@ public class MarkServiceImpl implements MarkService {
         double maxScore = 0;
         double minScore = 0;
         for (MarkTask markTask : list) {
-            if (!markTask.getStatus().equals(MarkTaskStatus.PROBLEM)) {
+            if (!markTask.getStatus().equals(MarkTaskStatus.PROBLEM) && !markTask.getStatus().equals(MarkTaskStatus.WAIT_ARBITRATE)) {
                 finishCount++;
             }
             if (markTask.getHeaderId() != null) {

+ 12 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -1020,7 +1020,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     }
 
     private void fillObjective(ScoreReportVo ret, Long examId, String paperNumber) {
-        List<MarkQuestion> qs = markQuestionService.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
+        List<MarkQuestion> qs = markQuestionService.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
         List<MarkStudent> students = listByExamIdAndPaperNumberAndAbsent(examId, paperNumber, false);
         Map<String, QuestionVo> map = new HashMap<>();
         List<QuestionVo> list = new ArrayList<>();
@@ -1148,4 +1148,15 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     public List<MarkStudent> listScanCollegeByExamIdAndCourseCodeAndCoursePaperId(Long examId, String courseCode, String coursePaperId, String status, DataPermissionRule dpr) {
         return this.baseMapper.listScanCollegeByExamIdAndCourseCodeAndCoursePaperId(examId, courseCode, coursePaperId, status, dpr);
     }
+
+    @Override
+    public int countUnexistByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType) {
+        MarkStudent markStudent = new MarkStudent();
+        markStudent.setExamId(examId);
+        markStudent.setPaperNumber(paperNumber);
+        markStudent.setScanStatus(ScanStatus.UNEXIST);
+        markStudent.setPaperType(paperType);
+        markStudent.setMarkPaperStatus(MarkPaperStatus.FORMAL.name());
+        return baseMapper.selectCountByQuery(markStudent, null);
+    }
 }

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

@@ -34,10 +34,10 @@ public class ScanLogServiceImpl extends MppServiceImpl<ScanLogMapper, ScanLog> i
     private FileUploadService fileUploadService;
 
     @Override
-    public boolean uploadLogFile(String schoolCode, String deviceCode, MultipartFile file, String md5) {
+    public boolean uploadLogFile(String schoolCode, String deviceCode, MultipartFile file, String md5, String type) {
         try {
             String fileName = file.getOriginalFilename();
-            ScanLog scanLog = this.selectByMultiId(new ScanLog(schoolCode, deviceCode, fileName));
+            ScanLog scanLog = this.selectByMultiId(new ScanLog(schoolCode, deviceCode, fileName, type));
             if (scanLog == null) {
                 scanLog = new ScanLog();
                 scanLog.setSchoolCode(schoolCode);

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

@@ -438,9 +438,9 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
         List<String> value = new ArrayList<>();
         if (item.getSecondResult() != null) {
             value.add(item.getSecondResult());
-        }else if (item.getFirstResult() != null && item.getSecondResult() == null) {
+        } else if (item.getFirstResult() != null && item.getSecondResult() == null) {
             value.add(item.getFirstResult());
-        }else{
+        } else {
             value.add(item.getOmrResult());
         }
         return value;
@@ -567,19 +567,14 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
         SysUser user = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(user.getSchoolId(), user.getId(), ServletUtil.getRequest().getServletPath());
         ScanOmrTaskStatusDto status = new ScanOmrTaskStatusDto();
-        status.setFinishCount(this.getFinishStudentCountByExamAndUserId(examId, courseCode, coursePaperId, user.getId(), dpr));
-        status.setTodoCount(this.getTodoStudentCountByExam(examId, courseCode, coursePaperId, dpr));
+        status.setFinishCount(this.getFinishStudentCountByExamAndUserId(examId, courseCode, coursePaperId, OmrTaskStatus.PROCESSED.name(), dpr));
+        status.setTodoCount(this.getFinishStudentCountByExamAndUserId(examId, courseCode, coursePaperId, OmrTaskStatus.WAITING.name(), dpr));
         return status;
     }
 
     @Override
-    public int getFinishStudentCountByExamAndUserId(Long examId, String courseCode, String coursePaperId, Long userId, DataPermissionRule dpr) {
-        return this.baseMapper.getStudentCountByExamAndStatusAndUserId(examId, courseCode, coursePaperId, userId, OmrTaskStatus.PROCESSED, MarkPaperStatus.FORMAL.name(), dpr);
-    }
-
-    @Override
-    public int getTodoStudentCountByExam(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr) {
-        return this.baseMapper.getStudentCountByExamAndStatus(examId, courseCode, coursePaperId, OmrTaskStatus.WAITING, MarkPaperStatus.FORMAL.name(), dpr);
+    public int getFinishStudentCountByExamAndUserId(Long examId, String courseCode, String coursePaperId, String status, DataPermissionRule dpr) {
+        return this.baseMapper.getStudentCountByExamAndStatusAndUserId(examId, courseCode, coursePaperId, status, MarkPaperStatus.FORMAL.name(), dpr);
     }
 
     @Transactional

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

@@ -98,7 +98,7 @@
                 AND mug.group_number = #{groupNumber}
             </if>
             <if test="loginName != null and loginName != ''">
-                AND su.login_name like concat('%',#{loginName},'%')
+                AND su.real_name like concat(#{loginName},'%')
             </if>
             <if test="className != null and className != ''">
                 AND EXISTS (select 1 from mark_user_class muc
@@ -130,7 +130,7 @@
                 AND mug.group_number = #{groupNumber}
             </if>
             <if test="loginName != null and loginName != ''">
-                AND su.login_name = #{loginName}
+                AND su.real_name like concat(#{loginName}, '%')
             </if>
     </select>
 

+ 28 - 61
teachcloud-mark/src/main/resources/mapper/ScanOmrTaskMapper.xml

@@ -69,72 +69,39 @@
 	</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 
-			)
-			and exists (select 1 from mark_student ms left join sys_user su on ms.create_id = su.id
-			            where t.student_id = ms.id
-						<if test="courseCode != null and courseCode != ''">
-							and ms.course_code = #{courseCode}
-						</if>
-						<if test="coursePaperId != null and coursePaperId != ''">
-							and ms.course_paper_id = #{coursePaperId}
-						</if>
-						<if test="dpr != null">
-							<if test="dpr.requestUserId != null">
-								AND ms.create_id = #{dpr.requestUserId}
-							</if>
-							<if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
-								AND su.org_id IN
-								<foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
-									#{item}
-								</foreach>
-							</if>
-						</if>
-						and exists (select 1 from mark_paper mp where ms.exam_id = mp.exam_id and ms.course_paper_id = mp.course_paper_id and ms.paper_type = mp.paper_type and mp.status = #{markPaperStatus})
-			            )
-	</select>
-	
-	<select id="getStudentCountByExamAndStatus" resultType="int">
-		select count(DISTINCT(t.student_id))
+		select
+			count(1)
+		from mark_student s left join sys_user su on s.create_id = su.id
+		<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 mark_paper mp where s.exam_id = mp.exam_id and s.course_paper_id = mp.course_paper_id and s.paper_type = mp.paper_type and mp.status = #{markPaperStatus})
+			and exists(select 1
 			from scan_omr_task t
-			where 
-			t.exam_id=#{examId}
+			where s.id = t.student_id
 			and t.status=#{status}
-			and exists(select 1 from mark_student ms left join sys_user su on ms.create_id = su.id where t.student_id = ms.id
-			    <if test="courseCode != null and courseCode != ''">
-					and ms.course_code = #{courseCode}
-				</if>
-				<if test="coursePaperId != null and coursePaperId != ''">
-					and ms.course_paper_id = #{coursePaperId}
-				</if>
-			    <if test="markPaperStatus != null">
-					and exists(select 1 from mark_paper mp where ms.exam_id = mp.exam_id and ms.paper_number = mp.paper_number and ms.paper_type = mp.paper_type and mp.status = #{markPaperStatus})
+			<if test="dpr != null">
+				<if test="dpr.requestUserId != null">
+					AND s.create_id = #{dpr.requestUserId}
 				</if>
-				<if test="dpr != null">
-					<if test="dpr.requestUserId != null">
-						AND ms.create_id = #{dpr.requestUserId}
-					</if>
-					<if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
-						AND su.org_id IN
-						<foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
-							#{item}
-						</foreach>
-					</if>
+				<if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+					AND su.org_id IN
+					<foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+						#{item}
+					</foreach>
 				</if>
-			    )
+			</if>
+			)
+		</where>
 	</select>
+
     <select id="countOmrTask" resultType="java.lang.Integer">
 		SELECT
 			COUNT(1)

+ 15 - 13
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

@@ -150,19 +150,21 @@ public class JobServiceImpl implements JobService {
         long startTime = DateDisposeUtils.parseDate("2023-11-17 00:00:00").getTime();
         List<ExamDetailCourseInitMarkDto> examDetailCourseInitMarkDtoList = examDetailService.listPrintFinishExamDetailCourse(ExamDetailStatusEnum.FINISH.name(), startTime, MarkPaperStatus.FINISH.name());
         for (ExamDetailCourseInitMarkDto dto : examDetailCourseInitMarkDtoList) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(dto.getSchoolId(), dto.getSemesterId(), dto.getExamId(), dto.getPaperNumber(), dto.getPaperType(), PushTypeEnum.INIT_MARK_DATA, "");
-            try {
-                printFinishService.insertMarkPaper(dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getPackageCodes(), dto.getCreateId(), dto.getPaperType());
-                printFinishService.insertMarkStudent(dto);
-                printFinishService.insertScanAnswerCardAndMarkQuestion(dto);
-                tbSyncTask.setResult(TaskResultEnum.SUCCESS);
-            } catch (Exception e) {
-                tbSyncTask.setResult(TaskResultEnum.ERROR);
-                log.info("结束同步失败:" + DateDisposeUtils.dateTimeNow(DateDisposeUtils.YYYY_MM_DD_HH_MM_SS));
-            } finally {
-                tbSyncTask.setStatus(TaskStatusEnum.FINISH);
-                tbSyncTaskService.updateById(tbSyncTask);
-                log.info("结束同步数据:" + DateDisposeUtils.dateTimeNow(DateDisposeUtils.YYYY_MM_DD_HH_MM_SS));
+            for (String paperType : dto.getPaperType().split(",")) {
+                TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(dto.getSchoolId(), dto.getSemesterId(), dto.getExamId(), dto.getPaperNumber(), paperType, PushTypeEnum.INIT_MARK_DATA, "");
+                try {
+                    printFinishService.insertMarkPaper(dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getPackageCodes(), dto.getCreateId(), paperType);
+                    printFinishService.insertMarkStudent(dto, paperType);
+                    printFinishService.insertScanAnswerCardAndMarkQuestion(dto, paperType);
+                    tbSyncTask.setResult(TaskResultEnum.SUCCESS);
+                } catch (Exception e) {
+                    tbSyncTask.setResult(TaskResultEnum.ERROR);
+                    log.info("结束同步失败:" + DateDisposeUtils.dateTimeNow(DateDisposeUtils.YYYY_MM_DD_HH_MM_SS));
+                } finally {
+                    tbSyncTask.setStatus(TaskStatusEnum.FINISH);
+                    tbSyncTaskService.updateById(tbSyncTask);
+                    log.info("结束同步数据:" + DateDisposeUtils.dateTimeNow(DateDisposeUtils.YYYY_MM_DD_HH_MM_SS));
+                }
             }
         }
     }

+ 2 - 2
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/PrintFinishService.java

@@ -10,9 +10,9 @@ public interface PrintFinishService {
 
     void insertMarkPaper(Long examId, String courseCode, String courseName, String paperNumber, String coursePaperId, String packageCode, Long userId, String paperType);
 
-    void insertMarkStudent(ExamDetailCourseInitMarkDto examDetail);
+    void insertMarkStudent(ExamDetailCourseInitMarkDto examDetail, String paperType);
 
-    void insertScanAnswerCardAndMarkQuestion(ExamDetailCourseInitMarkDto dto);
+    void insertScanAnswerCardAndMarkQuestion(ExamDetailCourseInitMarkDto dto, String paperType);
 
     void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, PaperInfoVo paperInfoVo, String content);
 

+ 8 - 9
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -105,7 +105,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
 
     @Transactional
     @Override
-    public void insertMarkStudent(ExamDetailCourseInitMarkDto dto) {
+    public void insertMarkStudent(ExamDetailCourseInitMarkDto dto, String paperType) {
         try {
             List<MarkStudent> markStudentList = new ArrayList<>();
             Set<String> secretNumberSet = new HashSet<>();
@@ -115,13 +115,13 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                 if (examDetail == null) {
                     continue;
                 }
-                List<ExamStudent> examStudentList = examStudentService.listByExamDetailCourseIdNotIntMarkStudent(examDetailCourseId);
+                List<ExamStudent> examStudentList = examStudentService.listByExamDetailCourseIdNotIntMarkStudent(examDetailCourseId, paperType);
                 for (ExamStudent examStudent : examStudentList) {
                     MarkStudent markStudent = markStudentService.getById(examStudent.getId());
                     if (markStudent != null) {
                         continue;
                     }
-                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getPaperType(), examStudent.getStudentCode(), examStudent.getStudentName(), examDetail.getPackageCode(), examDetail.getExamPlace(), examDetail.getExamRoom(), examStudent.getCollegeName(), examStudent.getMajorName(), examStudent.getClazzName(), dto.getExamStartTime(), dto.getExamEndTime(), dto.getCreateId());
+                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), dto.getCoursePaperId(), paperType, examStudent.getStudentCode(), examStudent.getStudentName(), examDetail.getPackageCode(), examDetail.getExamPlace(), examDetail.getExamRoom(), examStudent.getCollegeName(), examStudent.getMajorName(), examStudent.getClazzName(), dto.getExamStartTime(), dto.getExamEndTime(), dto.getCreateId());
                     if (student.getSecretNumber() == null) {
                         student.randomSecretNumber();
                         while (secretNumberSet.contains(student.getSecretNumber())
@@ -136,7 +136,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
             if (CollectionUtils.isNotEmpty(markStudentList)) {
                 markStudentService.saveBatch(markStudentList);
                 // 更新mark_paper表student_count字段
-                markPaperService.updateStudentCountByExamIdAndPaperNumberAndPaperType(dto.getExamId(), dto.getPaperNumber(), dto.getPaperType());
+                markPaperService.updateStudentCountByExamIdAndPaperNumberAndPaperType(dto.getExamId(), dto.getPaperNumber(), paperType);
             }
         } catch (Exception e) {
             log.info("考生同步阅卷失败");
@@ -144,8 +144,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
     }
 
     @Override
-    public void insertScanAnswerCardAndMarkQuestion(ExamDetailCourseInitMarkDto dto) {
-        String paperType = dto.getPaperType();
+    public void insertScanAnswerCardAndMarkQuestion(ExamDetailCourseInitMarkDto dto, String paperType) {
         if (StringUtils.isNotBlank(paperType)) {
             ExamTaskDetail examTaskDetail = examTaskDetailService.findByExamIdAndCourseCodeAndPaperNumber(dto.getSchoolId(), dto.getExamId(), dto.getCourseCode(), dto.getPaperNumber());
             List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds(), paperType);
@@ -157,7 +156,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                         continue;
                     }
                     // 解析卡格式中试卷结构并保存
-                    this.insertMarkQuestion(dto.getExamId(), dto.getPaperNumber(), dto.getPaperType(), examCard.getContent());
+                    this.insertMarkQuestion(dto.getExamId(), dto.getPaperNumber(), paperType, examCard.getContent());
                     // 生成并保存卡格式文件(后缀为.json)
                     this.insertScanAnswerCard(dto, paperInfoVo, examCard.getContent());
                 }
@@ -237,7 +236,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
             if (CollectionUtils.isEmpty(structList)) {
                 return;
             }
-            List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
+            List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, paperType);
             // 第一次新增
             if (CollectionUtils.isEmpty(markQuestionList)) {
                 List<MarkQuestion> markQuestions = new ArrayList<>();
@@ -259,7 +258,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                 }
                 markQuestionService.saveBatch(markQuestions);
             } else {
-                List<ScanAnswerCard> scanAnswerCardList = scanAnswerCardService.listByExamIdAndPaperNumber(examId, paperNumber);
+//                List<ScanAnswerCard> scanAnswerCardList = scanAnswerCardService.listByExamIdAndPaperNumber(examId, paperNumber);
 //                if (CollectionUtils.isNotEmpty(scanAnswerCardList)) {
 //                    for (ScanAnswerCard scanAnswerCard : scanAnswerCardList) {
 //                        int count = scanPaperService.getCountByExamAndCardNumber(examId, scanAnswerCard.getNumber());