xiatian преди 9 месеца
родител
ревизия
44ea84c16b

+ 61 - 50
src/main/java/cn/com/qmth/scancentral/controller/admin/ToolController.java

@@ -1,27 +1,42 @@
 package cn.com.qmth.scancentral.controller.admin;
 
-import cn.com.qmth.scancentral.bean.*;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.core.exception.ParameterException;
+
+import cn.com.qmth.scancentral.bean.ImportCetAbsentDomain;
+import cn.com.qmth.scancentral.bean.ImportExamDomain;
+import cn.com.qmth.scancentral.bean.ImportStudentDomain;
+import cn.com.qmth.scancentral.bean.ImportSubjectDomain;
+import cn.com.qmth.scancentral.bean.ImportUserDomain;
 import cn.com.qmth.scancentral.controller.BaseController;
-import cn.com.qmth.scancentral.entity.AnswerCardEntity;
 import cn.com.qmth.scancentral.entity.ExamEntity;
 import cn.com.qmth.scancentral.entity.QuestionEntity;
 import cn.com.qmth.scancentral.entity.SubjectEntity;
-import cn.com.qmth.scancentral.enums.LockType;
-import cn.com.qmth.scancentral.enums.SystemMode;
-import cn.com.qmth.scancentral.service.*;
-import cn.com.qmth.scancentral.vo.*;
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.boot.core.concurrent.service.ConcurrentService;
-import com.qmth.boot.core.exception.ParameterException;
-import com.qmth.boot.core.exception.ReentrantException;
+import cn.com.qmth.scancentral.service.ExamService;
+import cn.com.qmth.scancentral.service.QuestionService;
+import cn.com.qmth.scancentral.service.StudentService;
+import cn.com.qmth.scancentral.service.SubjectService;
+import cn.com.qmth.scancentral.service.UserService;
+import cn.com.qmth.scancentral.vo.CountVo;
+import cn.com.qmth.scancentral.vo.ExportCetMarkingQueryVo;
+import cn.com.qmth.scancentral.vo.ExportCetVo;
+import cn.com.qmth.scancentral.vo.ImportExamVo;
+import cn.com.qmth.scancentral.vo.ImportStudentQueryVo;
+import cn.com.qmth.scancentral.vo.ImportStudentVo;
+import cn.com.qmth.scancentral.vo.SubjectCheckVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
 
 @RestController
 @Api(tags = "本地工具接口")
@@ -40,18 +55,9 @@ public class ToolController extends BaseController {
     @Autowired
     private SubjectService subjectService;
 
-    @Autowired
-    private ToolExportService toolExportService;
-
     @Autowired
     private QuestionService questionService;
 
-    @Autowired
-    private AnswerCardService answerCardService;
-
-    @Autowired
-    private ConcurrentService concurrentService;
-
     @ApiOperation(value = "批量创建管理员用户接口")
     @PostMapping("/import/user")
     public CountVo importUser(@RequestBody List<ImportUserDomain> users) {
@@ -88,11 +94,11 @@ public class ToolController extends BaseController {
         return studentService.findByQuery(query);
     }
 
-    @ApiOperation(value = "检查并修复考生导出图片接口")
-    @PostMapping("/exam/student/check")
-    public void studentCheck(@RequestParam Long studentId) {
-        toolExportService.studentCheck(studentId);
-    }
+    // @ApiOperation(value = "检查并修复考生导出图片接口")
+    // @PostMapping("/exam/student/check")
+    // public void studentCheck(@RequestParam Long studentId) {
+    // toolExportService.studentCheck(studentId);
+    // }
 
     @ApiOperation(value = "获取考试详情")
     @RequestMapping(value = "/exam/info", method = RequestMethod.POST)
@@ -146,25 +152,30 @@ public class ToolController extends BaseController {
         return new CountVo(questionService.importQuestion(questionList));
     }
 
-    @ApiOperation(value = "保存卡格式")
-    @PostMapping("/import/card/save")
-    public Integer importCard(@RequestParam Long examId, @RequestParam String subjectCode,
-            @RequestParam Integer paperCount, @RequestParam Boolean singlePage, @RequestParam String md5,
-            @RequestParam(required = false) Integer dpi, @RequestParam MultipartFile file) {
-        if (!SystemMode.STANDALONE.equals(SystemMode.current())) {
-            throw new ParameterException("非独立模式不可调用");
-        }
-        if (concurrentService.getLock(LockType.CARD_SYNC + "-" + examId).tryLock()) {
-            try {
-                AnswerCardEntity card = answerCardService.save(null, examId, null, subjectCode, null, null, paperCount,
-                        singlePage, md5, dpi, file);
-                return card.getNumber();
-            } finally {
-                concurrentService.getLock(LockType.CARD_SYNC + "-" + examId).unlock();
-            }
-        } else {
-            throw new ReentrantException("正在同步卡格式,请稍后再试");
-        }
-    }
+    // @ApiOperation(value = "保存卡格式")
+    // @PostMapping("/import/card/save")
+    // public Integer importCard(@RequestParam Long examId, @RequestParam String
+    // subjectCode,
+    // @RequestParam Integer paperCount, @RequestParam Boolean singlePage,
+    // @RequestParam String md5,
+    // @RequestParam(required = false) Integer dpi, @RequestParam MultipartFile
+    // file) {
+    // if (!SystemMode.STANDALONE.equals(SystemMode.current())) {
+    // throw new ParameterException("非独立模式不可调用");
+    // }
+    // if (concurrentService.getLock(LockType.CARD_SYNC + "-" +
+    // examId).tryLock()) {
+    // try {
+    // AnswerCardEntity card = answerCardService.save(null, examId, null,
+    // subjectCode, null, null, paperCount,
+    // singlePage, md5, dpi, file);
+    // return card.getNumber();
+    // } finally {
+    // concurrentService.getLock(LockType.CARD_SYNC + "-" + examId).unlock();
+    // }
+    // } else {
+    // throw new ReentrantException("正在同步卡格式,请稍后再试");
+    // }
+    // }
 
 }

+ 2 - 0
src/main/java/cn/com/qmth/scancentral/service/StudentService.java

@@ -197,4 +197,6 @@ public interface StudentService extends IService<StudentEntity> {
     void resetAssignedCheck(Long examId, String subjectCode);
 
     int countCetMarking(ExportCetMarkingQueryVo query);
+
+    void updateImageCheckStatus(Long id, ImageCheckStatus failed);
 }

+ 3 - 0
src/main/java/cn/com/qmth/scancentral/service/ToolExportService.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.scancentral.service;
 
+import cn.com.qmth.scancentral.entity.StudentEntity;
 import cn.com.qmth.scancentral.enums.ImageTransferMode;
 
 public interface ToolExportService {
@@ -10,4 +11,6 @@ public interface ToolExportService {
 
     String getCetSliceUri(Long examId, String examNumber, String sliceName);
 
+    void studentCheckCet(StudentEntity student);
+
 }

+ 9 - 0
src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java

@@ -2619,4 +2619,13 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         }
     }
 
+    @Transactional
+    @Override
+    public void updateImageCheckStatus(Long id, ImageCheckStatus status) {
+        LambdaUpdateWrapper<StudentEntity> lw = new LambdaUpdateWrapper<>();
+        lw.set(StudentEntity::getImageCheckStatus, status);
+        lw.eq(StudentEntity::getId, id);
+        update(lw);
+    }
+
 }

+ 15 - 66
src/main/java/cn/com/qmth/scancentral/service/impl/ToolExportServiceImpl.java

@@ -61,14 +61,17 @@ public class ToolExportServiceImpl implements ToolExportService {
     @Autowired
     private AnswerCardService answerCardService;
 
+    @Autowired
+    private ToolExportService toolExportService;
+
     private String getOwSheetUri(Long examId, String subjectCode, String examNumber, Integer paperNumber,
-                                 Integer pageIndex) {
+            Integer pageIndex) {
         return String.format("%s/%s/%s/%s/%s/%s-%s.jpg", "sheet", examId, subjectCode, examNumber.substring(0, 4),
                 examNumber, paperNumber, pageIndex);
     }
 
     private String getOwSliceUri(Long examId, String subjectCode, String examNumber, Integer paperNumber,
-                                 Integer pageIndex, Integer index) {
+            Integer pageIndex, Integer index) {
         return String.format("%s/%s/%s/%s/%s/%s-%s-%s.jpg", "slice", examId, subjectCode, examNumber.substring(0, 4),
                 examNumber, paperNumber, pageIndex, index);
     }
@@ -93,37 +96,26 @@ public class ToolExportServiceImpl implements ToolExportService {
         try {
             student = studentService.getById(studentId);
             if (student == null) {
-                throw new ParameterException("未找到考生");
+                return;
             }
             if (ScanStatus.UNEXIST.equals(student.getStatus())) {
-                throw new ParameterException("考生还未扫描");
+                return;
             }
             if (student.getIncomplete()) {
                 throw new ParameterException("考生扫描结果缺页");
             }
             if (UploadStatus.WAITING_UPLOAD.equals(student.getFileUploadStatus())) {
-                throw new ParameterException("该考生转存任务待处理");
+                return;
             }
             if (UploadStatus.ERROR.equals(student.getFileUploadStatus())) {
                 throw new ParameterException("该考生图片转存任务出错");
             }
-            ExamEntity exam = examService.getById(student.getExamId());
-            if (exam.getImageTransferMode().equals(ImageTransferMode.OFF)) {
-                return;
-            }
-            if (ImageTransferMode.CET.equals(exam.getImageTransferMode())) {
-                studentCheckCet(student);
-            } else if (ImageTransferMode.OW.equals(exam.getImageTransferMode())) {
-                studentCheckOw(student);
-            } else {
-                throw new ParameterException("转存模式配置错误");
-            }
+            toolExportService.studentCheckCet(student);
         } catch (Exception e) {
             if (student != null) {
                 log.warn("图片检查异常!stuId:{} subjectCode:{} examNumber:{} err:{}", student.getId(),
                         student.getSubjectCode(), student.getExamNumber(), e.getMessage());
-                student.setImageCheckStatus(ImageCheckStatus.FAILED);
-                studentService.saveOrUpdate(student);
+                studentService.updateImageCheckStatus(student.getId(), ImageCheckStatus.FAILED);
             } else {
                 log.error("图片检查错误!err:{}", e.getMessage(), e);
             }
@@ -132,54 +124,8 @@ public class ToolExportServiceImpl implements ToolExportService {
         }
     }
 
-    private void studentCheckOw(StudentEntity student) {
-        List<StudentPaperEntity> spes = studentPaperService.findByStudentId(student.getId());
-        if (CollectionUtils.isEmpty(spes)) {
-            throw new ParameterException("没有扫描结果");
-        }
-        String imageTransferDir = sysProperty.getTransferDir();
-        int index = 0;
-        for (StudentPaperEntity spe : spes) {
-            List<PaperPageEntity> pgs = paperPageService.listByPaperId(spe.getPaperId());
-            if (CollectionUtils.isEmpty(pgs)) {
-                throw new ParameterException("没有扫描页信息");
-            }
-            for (PaperPageEntity pg : pgs) {
-                String sheetPath = pg.getSheetPath();
-                if (StringUtils.isBlank(sheetPath)) {
-                    throw new ParameterException("没有原图");
-                }
-                String mirrorSheetPath = getOwSheetUri(student.getExamId(), student.getSubjectCode(),
-                        student.getExamNumber(), spe.getPaperNumber(), pg.getPageIndex());
-                File targetSheetFile = new File(imageTransferDir + "/" + mirrorSheetPath);
-                if (!targetSheetFile.exists()) {
-                    try {
-                        FileUtils.copyToFile(fileStore.read(sheetPath), targetSheetFile);
-                    } catch (Exception e) {
-                        throw new StatusException("文件拷贝出错", e);
-                    }
-                }
-                List<String> slices = pg.getSlicePath();
-                if (CollectionUtils.isNotEmpty(slices)) {
-                    for (String slice : slices) {
-                        index++;
-                        String mirrorSlicePath = getOwSliceUri(student.getExamId(), student.getSubjectCode(),
-                                student.getExamNumber(), spe.getPaperNumber(), pg.getPageIndex(), index);
-                        File targetSliceFile = new File(imageTransferDir + "/" + mirrorSlicePath);
-                        if (!targetSliceFile.exists()) {
-                            try {
-                                FileUtils.copyToFile(fileStore.read(slice), targetSliceFile);
-                            } catch (Exception e) {
-                                throw new StatusException("文件拷贝出错", e);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    private void studentCheckCet(StudentEntity student) {
+    @Override
+    public void studentCheckCet(StudentEntity student) {
         List<StudentPaperEntity> spes = studentPaperService.findByStudentId(student.getId());
         if (CollectionUtils.isEmpty(spes)) {
             throw new ParameterException("没有扫描结果");
@@ -326,6 +272,9 @@ public class ToolExportServiceImpl implements ToolExportService {
             } catch (Exception e) {
                 throw new StatusException("文件拷贝出错", e);
             }
+            if (targetSliceFile.length() < 3 * 1024) {
+                throw new StatusException("文件大小有误");
+            }
         }
     }
 

+ 4 - 1
src/main/java/cn/com/qmth/scancentral/task/ImageCheckJob.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.scancentral.task;
 
 import cn.com.qmth.scancentral.entity.ExamEntity;
+import cn.com.qmth.scancentral.enums.ImageTransferMode;
 import cn.com.qmth.scancentral.service.ExamService;
 import cn.com.qmth.scancentral.service.ImageCheckService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -28,7 +29,9 @@ public class ImageCheckJob {
         List<ExamEntity> exams = examService.list(wrapper);
 
         for (ExamEntity exam : exams) {
-            imageCheckService.check(exam.getId());
+            if (exam.getImageTransferMode().equals(ImageTransferMode.CET)) {
+                imageCheckService.check(exam.getId());
+            }
         }
     }
 

+ 1 - 1
src/main/resources/mapper/StudentMapper.xml

@@ -637,7 +637,7 @@
         from sc_student
         where exam_id = #{examId}
           and file_upload_status = 'UPLOADED'
-          and image_check_status = 'WAITING'
+          and image_check_status in('WAITING','FAILED')
           and id > #{startId}
         limit #{batchSize}
     </select>