Jelajahi Sumber

3.4.2 update

xiaofei 7 bulan lalu
induk
melakukan
ab603a4bea
16 mengubah file dengan 179 tambahan dan 106 penghapusan
  1. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/ExamDetailCourseInitMarkDto.java
  2. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamStudentServiceImpl.java
  3. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  4. 24 20
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/ImportLogicServiceImpl.java
  5. 1 0
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  6. 3 5
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java
  7. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintTaskController.java
  8. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanStudentController.java
  9. 19 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/ArraysParams.java
  10. 0 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/TaskTypeEnum.java
  11. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TBTaskService.java
  12. 19 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TBTaskServiceImpl.java
  13. 57 56
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkDocumentServiceImpl.java
  14. 39 18
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  15. 1 1
      teachcloud-obe/src/main/resources/mapper/ObeConditionMapper.xml
  16. 2 1
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/ExamDetailCourseInitMarkDto.java

@@ -13,6 +13,7 @@ public class ExamDetailCourseInitMarkDto {
     private String coursePaperId;
     private Integer serialNumber;
     private String paperType;
+    private Boolean openAb;
     private Long createId;
     private String packageCode;
 
@@ -80,6 +81,14 @@ public class ExamDetailCourseInitMarkDto {
         this.paperType = paperType;
     }
 
+    public Boolean getOpenAb() {
+        return openAb;
+    }
+
+    public void setOpenAb(Boolean openAb) {
+        this.openAb = openAb;
+    }
+
     public Long getCreateId() {
         return createId;
     }

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

@@ -143,7 +143,7 @@ public class BasicExamStudentServiceImpl extends ServiceImpl<BasicExamStudentMap
 
     @Override
     public void exportLogic(BasicExamStudentPageQuery query) {
-        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.BASIC_EXAM_STUDENT_EXPORT, null, (SysUser) ServletUtil.getRequestUser());
+        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.BASIC_EXAM_STUDENT_EXPORT, query.getSemesterId(), query.getExamId(), (SysUser) ServletUtil.getRequestUser());
         map.put("query", query);
         map.put("privilegeId", ServletUtil.getCurrentPrivilegeId());
         asyncBasicExamStudentExportService.exportTask(map);

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

@@ -1141,7 +1141,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         if (CollectionUtils.isEmpty(examTasks)) {
             throw ExceptionResultEnum.ERROR.exception("没有可导出数据");
         }
-        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.PAPER_AND_CARD_PDF_DOWNLOAD, null, (SysUser) ServletUtil.getRequestUser());
+        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.PAPER_AND_CARD_PDF_DOWNLOAD, semesterId, examId, (SysUser) ServletUtil.getRequestUser());
         map.put("examTasks", examTasks);
         asyncPaperReviewPdfExportService.exportTask(map);
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;

+ 24 - 20
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/ImportLogicServiceImpl.java

@@ -140,6 +140,8 @@ public class ImportLogicServiceImpl implements ImportLogicService {
         // 试卷编号->考试时间
         Map<String, String> paperNumberExamTimeMap = basicExamStudentList.stream().filter(m -> StringUtils.isNotBlank(m.getPaperNumber())).collect(Collectors.toMap(BasicExamStudent::getPaperNumber, m -> m.getExamStartTime() + "-" + m.getExamEndTime(), (v1, v2) -> v1));
         Map<String, Long> basicCourseIdMap = new HashMap<>();
+        // 课程id+教学班名称->任课老师Id
+        Map<String, Long> courseTeachClassTeacherMap = new HashMap<>();
         // 课程学号唯一
         List<String> courseCodeStudentCodeList = new ArrayList<>();
         // 课程+考生在数据库中已存在的试卷编号和导入文件中不致的数据
@@ -273,15 +275,15 @@ public class ImportLogicServiceImpl implements ImportLogicService {
                 }
 
                 // 校验同课程下,同一教学班只能有一个任课老师
-//                String courseTeachClassTeacherKey = basicExamStudent.getCourseId() + basicExamStudent.getTeachClassName();
-//                if (courseTeachClassTeacherMap.containsKey(courseTeachClassTeacherKey)) {
-//                    Long teacherId = courseTeachClassTeacherMap.get(courseTeachClassTeacherKey);
-//                    if ((teacherId == null && basicExamStudent.getTeacherId() != null) || (teacherId != null && basicExamStudent.getTeacherId() == null) || (teacherId != null && !teacherId.equals(basicExamStudent.getTeacherId()))) {
-//                        stringJoiner.add("同课程同教学班,只允许设置一个任课老师");
-//                    }
-//                } else {
-//                    courseTeachClassTeacherMap.put(courseTeachClassTeacherKey, basicExamStudent.getTeacherId());
-//                }
+                String courseTeachClassTeacherKey = basicExamStudent.getCourseId() + basicExamStudent.getTeachClassName();
+                if (courseTeachClassTeacherMap.containsKey(courseTeachClassTeacherKey)) {
+                    Long teacherId = courseTeachClassTeacherMap.get(courseTeachClassTeacherKey);
+                    if ((teacherId == null && basicExamStudent.getTeacherId() != null) || (teacherId != null && basicExamStudent.getTeacherId() == null) || (teacherId != null && !teacherId.equals(basicExamStudent.getTeacherId()))) {
+                        stringJoiner.add("同课程同教学班,只允许设置一个任课老师");
+                    }
+                } else {
+                    courseTeachClassTeacherMap.put(courseTeachClassTeacherKey, basicExamStudent.getTeacherId());
+                }
             }
 
             if (basicExamStudent.getCourseId() != null) {
@@ -391,6 +393,8 @@ public class ImportLogicServiceImpl implements ImportLogicService {
         Map<String, Long> basicCourseIdMap = new HashMap<>();
         // 课程学号唯一
         List<String> courseCodeStudentCodeList = new ArrayList<>();
+        // 课程id+教学班名称->任课老师Id
+        Map<String, Long> courseTeachClassTeacherMap = new HashMap<>();
         // 是否有错误提示
         boolean hasError = false;
 
@@ -450,17 +454,17 @@ public class ImportLogicServiceImpl implements ImportLogicService {
 
             if (basicExamStudent.getCourseId() != null) {
                 // 校验同课程下,同一教学班只能有一个任课老师
-//                if (StringUtils.isNotBlank(basicExamStudent.getTeachClassName())) {
-//                    String courseTeachClassTeacherKey = basicExamStudent.getCourseId() + basicExamStudent.getTeachClassName();
-//                    if (courseTeachClassTeacherMap.containsKey(courseTeachClassTeacherKey)) {
-//                        Long teacherId = courseTeachClassTeacherMap.get(courseTeachClassTeacherKey);
-//                        if (teacherId != null && basicExamStudent.getTeacherId() != null && !teacherId.equals(basicExamStudent.getTeacherId())) {
-//                            stringJoiner.add("同课程同教学班,只允许设置一个任课老师");
-//                        }
-//                    } else {
-//                        courseTeachClassTeacherMap.put(courseTeachClassTeacherKey, basicExamStudent.getTeacherId());
-//                    }
-//                }
+                if (StringUtils.isNotBlank(basicExamStudent.getTeachClassName())) {
+                    String courseTeachClassTeacherKey = basicExamStudent.getCourseId() + basicExamStudent.getTeachClassName();
+                    if (courseTeachClassTeacherMap.containsKey(courseTeachClassTeacherKey)) {
+                        Long teacherId = courseTeachClassTeacherMap.get(courseTeachClassTeacherKey);
+                        if (teacherId != null && basicExamStudent.getTeacherId() != null && !teacherId.equals(basicExamStudent.getTeacherId())) {
+                            stringJoiner.add("同课程同教学班,只允许设置一个任课老师");
+                        }
+                    } else {
+                        courseTeachClassTeacherMap.put(courseTeachClassTeacherKey, basicExamStudent.getTeacherId());
+                    }
+                }
 
                 // 校验课程+学号是否存在
                 if (StringUtils.isNotBlank(basicExamStudentImport.getStudentCode())) {

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

@@ -773,6 +773,7 @@
             edc.course_id courseId,
             edc.paper_number paperNumber,
             et.id coursePaperId,
+            et.open_ab openAb,
             edc.serial_number serialNumber,
             edc.paper_type paperType,
             et.user_id createId

+ 3 - 5
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java

@@ -235,11 +235,9 @@ public class ExamDetailController {
             printPlanIdList = new ArrayList<>();
         }
         List<Long> idList = printPlanIdList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList());
-        Long printId = null;
-        if (idList.size() > 0) {
-            printId = idList.get(0);
-        }
-        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.EXAMINATION_EXPORT, printId);
+
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.EXAMINATION_EXPORT, semesterId, examId, sysUser);
         map.put("semesterId", semesterId);
         map.put("examId", examId);
         map.put("printPlanIdList", idList);

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintTaskController.java

@@ -186,7 +186,7 @@ public class ExamPrintTaskController {
                 throw ExceptionResultEnum.ERROR.exception("状态为新建不能下载");
             }
         }
-        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.PRINT_PDF_DOWNLOAD, arraysParams, (SysUser) ServletUtil.getRequestUser());
+        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.PRINT_PDF_DOWNLOAD, arraysParams.getSemesterId(), arraysParams.getExamId(), (SysUser) ServletUtil.getRequestUser());
         asyncDownloadPdfTempleteService.exportTask(map);
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return Objects.nonNull(tbTask) ? ResultUtil.ok(new EditResult(tbTask.getId())) : ResultUtil.error("创建任务失败");

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanStudentController.java

@@ -70,7 +70,7 @@ public class ScanStudentController extends BaseController {
         return ResultUtil.ok(markStudentService.updateAssignConfirm(studentId, true));
     }
 
-    @ApiOperation(value = "识别缺考-任务确认")
+    @ApiOperation(value = "识别缺考-任务确认/取消")
     @PostMapping("confirm")
     public UpdateTimeVo confirm(@RequestParam Long examId, @RequestParam String coursePaperId, @RequestParam String studentCode,
             @RequestParam(required = false) Boolean omrAbsent) {

+ 19 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/ArraysParams.java

@@ -16,6 +16,9 @@ import java.io.Serializable;
  */
 public class ArraysParams implements Serializable {
 
+    private Long semesterId;
+    private Long examId;
+
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "数组id")
     @NotEmpty(message = "id不能为空")
@@ -29,6 +32,22 @@ public class ArraysParams implements Serializable {
         this.ids = ids;
     }
 
+    public Long getSemesterId() {
+        return semesterId;
+    }
+
+    public void setSemesterId(Long semesterId) {
+        this.semesterId = semesterId;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
     public Long[] getIds() {
         return ids;
     }

+ 0 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/TaskTypeEnum.java

@@ -22,7 +22,6 @@ public enum TaskTypeEnum {
     PRINT_PDF_DOWNLOAD("批量下载pdf"),
     PAPER_AND_CARD_PDF_DOWNLOAD("卷库查询管理试卷、空白题卡批量下载pdf"),
     DATA_CALCULATE("数据计算"),
-    CREATE_TASK_PRINT("发布印刷任务"),
     STATISTICS_IMPORT("命题统计导入"),
     SCORE_EXPORT("成绩导出"),
     SCORE_DOWNLOAD("成绩轨迹下载"),

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TBTaskService.java

@@ -88,6 +88,7 @@ public interface TBTaskService extends IService<TBTask> {
      * @return
      */
     Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum, ArraysParams arraysParams, SysUser sysUser);
+    Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum, Long semesterId, Long examId, SysUser sysUser);
 
     /**
      * 保存任务

+ 19 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TBTaskServiceImpl.java

@@ -183,6 +183,25 @@ public class TBTaskServiceImpl extends ServiceImpl<TBTaskMapper, TBTask> impleme
         return map;
     }
 
+    @Override
+    public Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum, Long semesterId, Long examId, SysUser sysUser) {
+        Map<String, Object> map = new HashMap<>();
+        try {
+            TBTask tbTask = saveTaskCommon(null, taskTypeEnum, map, sysUser);
+            tbTask.setSemesterId(semesterId);
+            tbTask.setExamId(examId);
+            this.save(tbTask);
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return map;
+    }
+
     @Override
     public Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum) {
         Map<String, Object> map = new HashMap<>();

+ 57 - 56
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkDocumentServiceImpl.java

@@ -12,6 +12,7 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.enums.ExamModelEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.mark.MarkMode;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.service.FileUploadService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
@@ -75,15 +76,15 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
         list.sort(Comparator.comparingInt(d -> d.getType().getValue()));
         for (MarkDocument d : list) {
             //
-            if(DocumentType.PAPER.equals(d.getType())){
+            if (DocumentType.PAPER.equals(d.getType())) {
                 List<String> urlList = new ArrayList<>();
-                if(StringUtils.isNotBlank(d.getFilePath())){
+                if (StringUtils.isNotBlank(d.getFilePath())) {
                     for (String s : JSON.parseArray(d.getFilePath(), String.class)) {
                         urlList.add(teachcloudCommonService.filePreview(s));
                     }
                     d.setFilePath(JSON.toJSONString(urlList));
                 }
-            } else{
+            } else {
                 d.setFilePath(teachcloudCommonService.filePreview(d.getFilePath()));
             }
         }
@@ -198,7 +199,7 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
             if (documentType.equals(DocumentType.PAPER)) {
                 if (StringUtils.isNotBlank(markPaper.getPaperFilePath())) {
                     List<String> urlList = new ArrayList<>();
-                    if(StringUtils.isNotBlank(markPaper.getPaperFilePath())){
+                    if (StringUtils.isNotBlank(markPaper.getPaperFilePath())) {
                         urlList = JSON.parseArray(markPaper.getPaperFilePath(), String.class);
                     }
                     markDocument.setFileCount(urlList.size());
@@ -220,8 +221,8 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
                 markDocument.setFileCount(1);
             } else if (documentType.equals(DocumentType.SHEET)) {
                 markDocument.setFileCount(markPaper.getUploadCount());
-                //                } else if (documentType.equals(DocumentType.TRACK)) {
-                //                    markDocument.setFileCount(markPaper.getUploadCount());
+            } else if (documentType.equals(DocumentType.TRACK)) {
+                markDocument.setFileCount(markPaper.getMarkMode().equals(MarkMode.TRACK) ? markPaper.getUploadCount() : 0);
             } else if (documentType.equals(DocumentType.SIGN)) {
                 List<ScanPackage> scanPackageList = scanPackageService.listByExamIdAndCoursePaperIdAndPackageCode(
                         markPaper.getExamId(), markPaper.getCoursePaperId(), null);
@@ -253,59 +254,59 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
                 DocumentType documentType = markDocument.getType();
 
                 switch (documentType) {
-                case SYLLABUS:
-                case PROCESS_SCORE:
-                case PAPER:
-                case ANSWER:
-                case PAPER_REPORT:
-                case CHECK_IN:
-                case CUSTOM:
-                    if (SystemConstant.strNotNull(path)) {
-                        FilePathVo filePathVo = JSON.parseObject(path, FilePathVo.class);
-                        String suffix = FilenameUtils.getExtension(filePathVo.getPath());
-                        filePath = tempFile.getPath() + File.separator + name + "." + suffix;
-                        File file = fileUploadService.downloadFile(markDocument.getFilePath(), filePath);
+                    case SYLLABUS:
+                    case PROCESS_SCORE:
+                    case PAPER:
+                    case ANSWER:
+                    case PAPER_REPORT:
+                    case CHECK_IN:
+                    case CUSTOM:
+                        if (SystemConstant.strNotNull(path)) {
+                            FilePathVo filePathVo = JSON.parseObject(path, FilePathVo.class);
+                            String suffix = FilenameUtils.getExtension(filePathVo.getPath());
+                            filePath = tempFile.getPath() + File.separator + name + "." + suffix;
+                            File file = fileUploadService.downloadFile(markDocument.getFilePath(), filePath);
+                            writer.write(file, file.getName());
+                            file.delete();
+                        }
+                        break;
+                    case APPROVE_RECORD:
+                    case SCORE_REPORT:
+                    case SHEET:
+                    case TRACK:
+                        break;
+                    case SCORE:
+                        ArchiveStudentQuery query = new ArchiveStudentQuery();
+                        query.setExamId(examId);
+                        query.setPaperNumber(paperNumber);
+
+                        filePath = tempFile.getPath() + File.separator + name + SystemConstant.EXCEL_PREFIX;
+                        File file = new File(filePath);
+                        OutputStream outputStream = new FileOutputStream(file);
+                        markStudentService.scoreExport(query, response);
                         writer.write(file, file.getName());
                         file.delete();
-                    }
-                    break;
-                case APPROVE_RECORD:
-                case SCORE_REPORT:
-                case SHEET:
-                case TRACK:
-                    break;
-                case SCORE:
-                    ArchiveStudentQuery query = new ArchiveStudentQuery();
-                    query.setExamId(examId);
-                    query.setPaperNumber(paperNumber);
-
-                    filePath = tempFile.getPath() + File.separator + name + SystemConstant.EXCEL_PREFIX;
-                    File file = new File(filePath);
-                    OutputStream outputStream = new FileOutputStream(file);
-                    markStudentService.scoreExport(query, response);
-                    writer.write(file, file.getName());
-                    file.delete();
-                    break;
-                case SIGN:
-                    MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
-                    if (markPaper == null) {
-                        throw ExceptionResultEnum.ERROR.exception("试卷不存在");
-                    }
-                    QueryWrapper<ScanPackage> wrapper = new QueryWrapper<>();
-                    LambdaQueryWrapper<ScanPackage> lw = wrapper.lambda();
-                    lw.eq(ScanPackage::getExamId, examId);
-                    lw.eq(ScanPackage::getCoursePaperId, markPaper.getCoursePaperId());
-                    lw.orderByAsc(ScanPackage::getPackageNo);
-                    List<ScanPackage> scanPackageList = scanPackageService.list(wrapper);
-                    if (CollectionUtils.isNotEmpty(scanPackageList)) {
-                        for (ScanPackage scanPackage : scanPackageList) {
-                            FilePathVo filePathVo = JSON.parseObject(scanPackage.getPath(), FilePathVo.class);
-                            filePath = tempFile.getPath() + File.separator + FilenameUtils.getName(filePathVo.getPath());
-                            File scanPackageFile = fileUploadService.downloadFile(scanPackage.getPath(), filePath);
-                            writer.write(scanPackageFile, name, scanPackageFile.getName());
-                            scanPackageFile.delete();
+                        break;
+                    case SIGN:
+                        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+                        if (markPaper == null) {
+                            throw ExceptionResultEnum.ERROR.exception("试卷不存在");
+                        }
+                        QueryWrapper<ScanPackage> wrapper = new QueryWrapper<>();
+                        LambdaQueryWrapper<ScanPackage> lw = wrapper.lambda();
+                        lw.eq(ScanPackage::getExamId, examId);
+                        lw.eq(ScanPackage::getCoursePaperId, markPaper.getCoursePaperId());
+                        lw.orderByAsc(ScanPackage::getPackageNo);
+                        List<ScanPackage> scanPackageList = scanPackageService.list(wrapper);
+                        if (CollectionUtils.isNotEmpty(scanPackageList)) {
+                            for (ScanPackage scanPackage : scanPackageList) {
+                                FilePathVo filePathVo = JSON.parseObject(scanPackage.getPath(), FilePathVo.class);
+                                filePath = tempFile.getPath() + File.separator + FilenameUtils.getName(filePathVo.getPath());
+                                File scanPackageFile = fileUploadService.downloadFile(scanPackage.getPath(), filePath);
+                                writer.write(scanPackageFile, name, scanPackageFile.getName());
+                                scanPackageFile.delete();
+                            }
                         }
-                    }
                 }
             }
             writer.close();

+ 39 - 18
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -598,7 +598,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                 // 根据卷型识别结果更新考生卷型,如果卷型识别结果异常则添加到卷型检查中
                 StringResult paperTypeResult = page.getPaperType();
 
-                if (abInfoVo.getOpenAb() && PaperTypeEnum.FILL.equals(abInfoVo.getPaperTypeStyle())) {
+                if (abInfoVo != null && abInfoVo.getOpenAb() && PaperTypeEnum.FILL.equals(abInfoVo.getPaperTypeStyle())) {
                     if (Objects.isNull(paperTypeResult)) {
                         // 卷型为空 (正常不会出现这种情况)
                         throw ExceptionResultEnum.ERROR.exception("开启卷型的试卷未检测到识别的卷型");
@@ -1114,11 +1114,17 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         }
         lw.eq(MarkStudent::getId, student.getId());
         update(lw);
-        scanOmrTaskService.deleteByStudentId(student.getExamId(), student.getId());
+
+        // 确认缺考清除客观题查检任务,取消缺考统计客观题分数
         if (!omrAbsent) {
             calculateObjectiveScore(student);
             scanOmrTaskService.saveTask(student.getId());
+        } else {
+            scanOmrTaskService.deleteByStudentId(student.getExamId(), student.getId());
         }
+        // 更新识别缺考值
+        updatePaperPageData(student.getId(), omrAbsent, null);
+
         markPaperService.updateUploadCount(examId, student.getPaperNumber(),
                 this.countUploadedByExamIdAndPaperNumber(examId, student.getPaperNumber()));
         markPaperService.updateAbsentCount(examId, student.getPaperNumber(),
@@ -1128,6 +1134,35 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         return UpdateTimeVo.create();
     }
 
+    private void updatePaperPageData(Long studentId, Boolean omrAbsent, String paperType) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        // 更改试卷和考生绑定关系的卷型
+        ScanStudentPaper scanStudentPaper = scanStudentPaperService.findByStudentIdAndPaperNumber(studentId, 1);
+        if (scanStudentPaper == null) {
+            throw ExceptionResultEnum.ERROR.exception("缺少考生和试卷绑定关系");
+        }
+        Long paperId = scanStudentPaper.getPaperId();
+        ScanPaperPage scanPaperPage = scanPaperPageService.findPaperIdAndIndex(paperId, 1);
+        if (scanPaperPage == null) {
+            throw ExceptionResultEnum.ERROR.exception("缺少试卷和页面绑定关系");
+        }
+        // 更新识别缺考结果
+        if (omrAbsent != null) {
+            if (scanPaperPage.getAbsent() != null) {
+                scanPaperPage.getAbsent().setResult(omrAbsent);
+            }
+        }
+        // 更新识别卷型结果
+        if (StringUtils.isNotBlank(paperType)) {
+            if (scanPaperPage.getPaperType() != null) {
+                scanPaperPage.getPaperType().setResult(paperType);
+            }
+        }
+        scanPaperPage.setUpdaterId(sysUser.getId());
+        scanPaperPage.setUpdateTime(System.currentTimeMillis());
+        scanPaperPageService.updateByMultiId(scanPaperPage);
+    }
+
     @Override
     public List<Long> findIdByExamIdAndPaperNumber(Long examId, String paperNumber) {
         return this.baseMapper.findIdByExamIdAndPaperNumber(examId, paperNumber);
@@ -2253,22 +2288,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     @Transactional
     @Override
     public UpdateTimeVo disposePaperTypeCheck(Long studentId, String paperType) {
-        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        // 更改试卷和考生绑定关系的卷型
-        ScanStudentPaper scanStudentPaper = scanStudentPaperService.findByStudentIdAndPaperNumber(studentId, 1);
-        if (scanStudentPaper == null) {
-            throw ExceptionResultEnum.ERROR.exception("缺少考生和试卷绑定关系");
-        }
-        Long paperId = scanStudentPaper.getPaperId();
-        ScanPaperPage scanPaperPage = scanPaperPageService.findPaperIdAndIndex(paperId, 1);
-        if (scanPaperPage == null) {
-            throw ExceptionResultEnum.ERROR.exception("缺少试卷和页面绑定关系");
-        }
-        StringResult paperTypeResult = scanPaperPage.getPaperType();
-        paperTypeResult.setResult(paperType);
-        scanPaperPage.setUpdaterId(requestUser.getId());
-        scanPaperPage.setUpdateTime(System.currentTimeMillis());
-        scanPaperPageService.updateByMultiId(scanPaperPage);
+        // 更新识别缺考值
+        updatePaperPageData(studentId, null, paperType);
 
         // 更改考生卷型和卷型检查状态
         UpdateWrapper<MarkStudent> markStudentUpdateWrapper = new UpdateWrapper<>();

+ 1 - 1
teachcloud-obe/src/main/resources/mapper/ObeConditionMapper.xml

@@ -53,7 +53,7 @@
                     AND oco.user_id = #{dpr.requestUserId}
                 </if>
                 <if test="dpr.courseUserId != null">
-                    AND EXISTS( SELECT 1 FROM (select course_code from teach_course where user_id = #{dpr.courseUserId}) tc WHERE tc.course_code = bc.code)
+                    AND EXISTS( SELECT 1 FROM (select course_id from teach_course where user_id = #{dpr.courseUserId}) tc WHERE tc.course_id = bc.id)
                 </if>
                 <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
                     AND bc.teaching_room_id IN

+ 2 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -125,7 +125,8 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                     if (markStudent != null) {
                         continue;
                     }
-                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), examStudent.getBasicStudentId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getSerialNumber(), basicCardRule.getExamNumberStyle().equals(ExamNumberStyleEnum.PRINT) ? examStudent.getPaperType() : null, examStudent.getStudentCode(), initExamDetailDto.getPackageCode(), initExamDetailDto.getExamPlace(), initExamDetailDto.getExamRoom(), initExamDetailDto.getExamStartTime(), initExamDetailDto.getExamEndTime(), dto.getCreateId());
+                    String paperType = basicCardRule.getExamNumberStyle().equals(ExamNumberStyleEnum.PRINT) || (basicCardRule.getExamNumberStyle().equals(ExamNumberStyleEnum.FILL) && !dto.getOpenAb()) ? examStudent.getPaperType() : null;
+                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), examStudent.getBasicStudentId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getSerialNumber(), paperType, examStudent.getStudentCode(), initExamDetailDto.getPackageCode(), initExamDetailDto.getExamPlace(), initExamDetailDto.getExamRoom(), initExamDetailDto.getExamStartTime(), initExamDetailDto.getExamEndTime(), dto.getCreateId());
                     if (student.getSecretNumber() == null) {
                         student.randomSecretNumber();
                         while (secretNumberSet.contains(student.getSecretNumber())