Bläddra i källkod

1.0.4 优化联调bug

xiaofei 1 år sedan
förälder
incheckning
606d6cb26f

+ 1 - 1
paper-library-business/src/main/java/com/qmth/paper/library/business/entity/PaperScanTask.java

@@ -77,7 +77,7 @@ public class PaperScanTask extends BaseEntity implements Serializable {
     /**
      * 已扫描学生数量
      */
-    @TableField(value = "scan_count", updateStrategy = FieldStrategy.IGNORED)
+    @TableField(value = "scan_student_count", updateStrategy = FieldStrategy.IGNORED)
     private Integer scanStudentCount;
 
     /**

+ 2 - 3
paper-library-business/src/main/java/com/qmth/paper/library/business/service/FileUploadService.java

@@ -3,15 +3,14 @@ package com.qmth.paper.library.business.service;
 
 import com.qmth.paper.library.business.bean.vo.FilePathVo;
 import com.qmth.paper.library.common.enums.UploadFileEnum;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.io.InputStream;
 
 public interface FileUploadService {
 
-    FilePathVo uploadFile(File sourceFile, UploadFileEnum uploadFileEnum, String fileName);
-
-    FilePathVo uploadFile(InputStream in, UploadFileEnum uploadFileEnum, String filePathName);
+    FilePathVo uploadFile(MultipartFile file, UploadFileEnum uploadFileEnum, String filePathName);
 
     File downloadFile(String path, String filePathName) throws Exception;
 

+ 2 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ClientServiceImpl.java

@@ -130,6 +130,8 @@ public class ClientServiceImpl implements ClientService {
                         .set(PaperScanTask::getScanCount, scanCount)
                         .eq(PaperScanTask::getId, paperScanTaskId);
                 paperScanTaskService.update(updateWrapper);
+
+                examStudentService.updateBindCount(examStudent.getId());
             }
             return true;
 

+ 30 - 11
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ExamStudentServiceImpl.java

@@ -66,6 +66,36 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
         // 验证
         ExamStudent byStudentCode = this.getByExamIdAndCourseCodeAndStudentCode(examStudent.getExamId(), examStudent.getCourseCode(), examStudent.getStudentCode());
         if (examStudent.getId() == null) {
+            if (StringUtils.isBlank(examStudent.getStudentCode())) {
+                throw ExceptionResultEnum.ERROR.exception("学号必填");
+            }
+            if (StringUtils.isBlank(examStudent.getStudentName())) {
+                throw ExceptionResultEnum.ERROR.exception("姓名必填");
+            }
+            if (StringUtils.isBlank(examStudent.getCourseCode())) {
+                throw ExceptionResultEnum.ERROR.exception("课程代码必填");
+            }
+            if (StringUtils.isBlank(examStudent.getCourseName())) {
+                throw ExceptionResultEnum.ERROR.exception("课程名称必填");
+            }
+
+            // 校验是否设置了存储方式
+            SimpleObject recognitionTypeSimpleObject = commonCacheService.getSysSetting(sysUser.getSchoolId()).get(SysSettingConstant.RECOGNITION_TYPE);
+            if (StringUtils.isBlank(recognitionTypeSimpleObject.getValue())) {
+                throw ExceptionResultEnum.ERROR.exception("识别方式未设置");
+            }
+            SimpleObject storeTypeSimpleObject = commonCacheService.getSysSetting(sysUser.getSchoolId()).get(SysSettingConstant.STORE_TYPE);
+            if (StringUtils.isBlank(storeTypeSimpleObject.getValue())) {
+                throw ExceptionResultEnum.ERROR.exception("文件存储方式未设置");
+            }
+            RecognitionTypeEnum recognitionType = RecognitionTypeEnum.valueOf(recognitionTypeSimpleObject.getValue());
+            StoreTypeEnum storeType = StoreTypeEnum.valueOf(storeTypeSimpleObject.getValue());
+            if (StoreTypeEnum.ROOM.equals(storeType) && StringUtils.isBlank(examStudent.getExamRoom())) {
+                throw ExceptionResultEnum.ERROR.exception("考场必填");
+            }
+            if (StoreTypeEnum.CLASS.equals(storeType) && StringUtils.isBlank(examStudent.getClassName())) {
+                throw ExceptionResultEnum.ERROR.exception("班级必填");
+            }
             if (byStudentCode != null) {
                 throw ExceptionResultEnum.ERROR.exception(String.format("学号[%s]在课程%s(%s)下已存在", examStudent.getStudentCode(), examStudent.getCourseName(), examStudent.getCourseCode()));
             }
@@ -79,17 +109,6 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
                 // 保存课程
                 examCourseService.saveStudentCourse(examStudent.getExamId(), examStudent);
                 // 保存任务(存在则更新考生数量)
-                // 校验是否设置了存储方式
-                SimpleObject recognitionTypeSimpleObject = commonCacheService.getSysSetting(sysUser.getSchoolId()).get(SysSettingConstant.RECOGNITION_TYPE);
-                if (StringUtils.isBlank(recognitionTypeSimpleObject.getValue())) {
-                    throw ExceptionResultEnum.ERROR.exception("识别方式未设置");
-                }
-                SimpleObject storeTypeSimpleObject = commonCacheService.getSysSetting(sysUser.getSchoolId()).get(SysSettingConstant.STORE_TYPE);
-                if (StringUtils.isBlank(storeTypeSimpleObject.getValue())) {
-                    throw ExceptionResultEnum.ERROR.exception("文件存储方式未设置");
-                }
-                RecognitionTypeEnum recognitionType = RecognitionTypeEnum.valueOf(recognitionTypeSimpleObject.getValue());
-                StoreTypeEnum storeType = StoreTypeEnum.valueOf(storeTypeSimpleObject.getValue());
                 paperScanTaskService.addScanTask(examStudent.getExamId(), recognitionType, storeType, examStudent);
             }
         } else {

+ 5 - 22
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/FileUploadServiceImpl.java

@@ -17,6 +17,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.*;
@@ -35,34 +36,16 @@ public class FileUploadServiceImpl implements FileUploadService {
     CommonCacheService commonCacheService;
 
     /**
-     * 上传文件
-     *
-     * @param sourceFile     上传文件
-     * @param uploadFileEnum 文件类型
-     * @param filePathName   文件路径名称
-     */
-    @Override
-    public FilePathVo uploadFile(File sourceFile, UploadFileEnum uploadFileEnum, String filePathName) {
-        try {
-            InputStream inputStream = new FileInputStream(sourceFile);
-            return uploadFile(inputStream, uploadFileEnum, filePathName);
-        } catch (FileNotFoundException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * @param in
+     * @param file
      * @param filePathName
      * @param uploadFileEnum
      * @return
      */
     @Override
-    public FilePathVo uploadFile(InputStream in, UploadFileEnum uploadFileEnum, String filePathName) {
-        InputStream inputStreamMd5 = in;
+    public FilePathVo uploadFile(MultipartFile file, UploadFileEnum uploadFileEnum, String filePathName) {
         try {
-            String md5 = DigestUtils.md5Hex(inputStreamMd5);
-            fileStoreUtil.fileUpload(filePathName, in, md5);
+            String md5 = DigestUtils.md5Hex(file.getInputStream());
+            fileStoreUtil.fileUpload(filePathName, file.getInputStream(), md5);
             String type = fileStoreUtil.isOssStore() ? SystemConstant.OSS : SystemConstant.LOCAL;
             return new FilePathVo(filePathName, uploadFileEnum, type, md5);
         } catch (Exception e) {

+ 3 - 3
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryCommonServiceImpl.java

@@ -279,13 +279,13 @@ public class PaperLibraryCommonServiceImpl implements PaperLibraryCommonService
         String sequenceStr = String.valueOf(sequence);
         try {
             int idx = 1;
-            String prefix = examStudent.getStudentName() + "-" + sequenceStr;
+            String prefix = examStudent.getStudentCode() + "-" + sequenceStr;
             for (MultipartFile file : files) {
                 String fileName = file.getOriginalFilename();
                 String suffix = fileName.substring(fileName.lastIndexOf("."));
                 // 目标文件名
                 String dirName = rootPath + File.separator + prefix + "-" + idx + suffix;
-                FilePathVo filePathVo = fileUploadService.uploadFile(file.getInputStream(), uploadFileEnum, dirName);
+                FilePathVo filePathVo = fileUploadService.uploadFile(file, uploadFileEnum, dirName);
                 objects.add(filePathVo);
                 idx++;
             }
@@ -315,7 +315,7 @@ public class PaperLibraryCommonServiceImpl implements PaperLibraryCommonService
                 String suffix = fileName.substring(fileName.lastIndexOf("."));
                 // 目标文件名
                 String dirName = rootPath + File.separator + prefix + "-" + idx + suffix;
-                FilePathVo filePathVo = fileUploadService.uploadFile(file.getInputStream(), uploadFileEnum, dirName);
+                FilePathVo filePathVo = fileUploadService.uploadFile(file, uploadFileEnum, dirName);
                 objects.add(filePathVo);
                 idx++;
             }

+ 24 - 14
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryServiceImpl.java

@@ -28,6 +28,7 @@ import com.qmth.paper.library.common.service.BasicSchoolService;
 import com.qmth.paper.library.common.service.CommonCacheService;
 import com.qmth.paper.library.common.service.SysUserService;
 import com.qmth.paper.library.common.util.*;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.json.JSONArray;
 import org.springframework.stereotype.Service;
@@ -36,6 +37,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -127,22 +129,36 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
 
     @Override
     public RecognitionResultVo recognition(PaperScanTask paperScanTask, String studentCode, MultipartFile file, Integer x, Integer y, Integer width, Integer height, Integer rotate) {
-        RecognitionResultVo recognitionResultVo = new RecognitionResultVo();
+        RecognitionResultVo recognitionResultVo = new RecognitionResultVo(studentCode, null);
         BasicSchool basicSchool = basicSchoolService.getById(paperScanTask.getSchoolId());
         String courseNameCode = String.format("%s(%s)", paperScanTask.getCourseName(), paperScanTask.getCourseCode());
         String cutRootPath = fileStoreUtil.buildPath(UploadFileEnum.CUT, true, basicSchool.getCode(), courseNameCode);
         // 裁剪识别区图片
-        File outFile = new File(cutRootPath, "bar-" + file.getName());
+        String fileName = file.getOriginalFilename();
+        String prefixFileName = fileName.substring(0, fileName.lastIndexOf("."));
+        String suffix = fileName.substring(fileName.lastIndexOf("."));
+        File outFile = new File(cutRootPath, prefixFileName + "-" + SystemConstant.getNanoId() + suffix);
         if (!outFile.exists()) {
             outFile.getParentFile().mkdirs();
         }
-        File subFile = ImageUtil.subImg((File) file, x, y, width, height, outFile);
-        if (subFile == null) {
-            return recognitionResultVo;
+        File tempFile = SystemConstant.getFileTempDirVar(suffix);
+        try {
+            FileUtils.copyInputStreamToFile(file.getInputStream(), tempFile);
+            ImageUtil.subImg(tempFile, x, y, width, height, outFile);
+            if (outFile == null) {
+                return recognitionResultVo;
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (tempFile.exists()) {
+                tempFile.delete();
+            }
         }
+
         // 旋转
         File rotateOutFile = new File(cutRootPath, "rotate" + file.getName());
-        File rotateFile = ImageUtil.rotate(subFile, rotate, rotateOutFile);
+        File rotateFile = ImageUtil.rotate(outFile, rotate, rotateOutFile);
 
         List<String> stringList = new ArrayList<>();
         String wordsResult = null;
@@ -156,7 +172,7 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
                     if (rotateFile.exists()) {
                         callHandwriting = ocrUtil.callHandwriting(rotateFile.getPath());
                     } else {
-                        callHandwriting = ocrUtil.callHandwriting(subFile.getPath());
+                        callHandwriting = ocrUtil.callHandwriting(outFile.getPath());
                     }
 
                     // 未联网提示
@@ -188,7 +204,7 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
                     if (rotateFile.exists()) {
                         result = BarCodeUtils.decode(rotateFile);
                     } else {
-                        result = BarCodeUtils.decode(subFile);
+                        result = BarCodeUtils.decode(outFile);
                     }
                     wordsResult = result;
                 } else {
@@ -202,12 +218,6 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
             recognitionResultVo.setBindResult(result);
             recognitionResultVo.setRecognizeResult(wordsResult);
 
-            if (outFile.exists()) {
-                outFile.delete();
-            }
-            if (subFile.exists()) {
-                subFile.delete();
-            }
             if (rotateOutFile.exists()) {
                 rotateOutFile.delete();
             }

+ 17 - 4
paper-library-common/src/main/java/com/qmth/paper/library/common/contant/SystemConstant.java

@@ -13,10 +13,7 @@ import com.qmth.paper.library.common.util.ServletUtil;
 import org.apache.commons.io.IOUtils;
 import org.springframework.cglib.beans.BeanMap;
 
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
 import java.lang.reflect.Field;
 import java.net.URLEncoder;
 import java.nio.charset.Charset;
@@ -68,6 +65,7 @@ public class SystemConstant {
     public static final String SIZE = "size";
     public static final String ZIP_SUFFIX = ".zip";
     public static final String SCAN_TASK_CODE_PREFIX = "T";
+    public static final String TMP_DIR = "java.io.tmpdir";
 
     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
     public static final int PAGE_SIZE_MIN = 10;
@@ -381,4 +379,19 @@ public class SystemConstant {
     public static String getNanoId() {
         return NanoIdUtils.randomNanoId();
     }
+
+    /**
+     * 获取临时文件
+     *
+     * @param suffix
+     * @return
+     */
+    public static File getFileTempDirVar(String suffix) {
+        File fileTmpDir = new File(System.getProperty(SystemConstant.TMP_DIR));
+        if (!fileTmpDir.exists()) {
+            fileTmpDir.mkdirs();
+        }
+        File file = new File(System.getProperty(SystemConstant.TMP_DIR), SystemConstant.getNanoId() + suffix);
+        return file;
+    }
 }