Jelajahi Sumber

1.0.5 update

xiaofei 10 bulan lalu
induk
melakukan
49ccc547f7

+ 4 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperLibraryService.java

@@ -42,4 +42,8 @@ public interface PaperLibraryService extends IService<PaperLibrary> {
     int countScanStudentByScannerAndDate(Long createId, String scanDate);
 
     List<String> listBatchNo(Long studentId);
+
+    boolean deletePicture(Long paperLibraryId);
+
+    boolean rotatePictureUpload(Long paperLibraryId, boolean isFront, Integer rotate);
 }

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

@@ -99,8 +99,8 @@ public class BasicExamServiceImpl extends ServiceImpl<BasicExamMapper, BasicExam
             QueryWrapper<ExamStudent> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(ExamStudent::getExamId, id);
             int count = examStudentService.count(queryWrapper);
-            if (count != 0) {
-                throw ExceptionResultEnum.ERROR.exception("考试下已上传考生,不能删除");
+            if (count > 0) {
+                throw ExceptionResultEnum.ERROR.exception("考试已上传考生,不允许删除");
             }
             this.removeById(idLong);
         }

+ 7 - 1
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ClientServiceImpl.java

@@ -14,6 +14,8 @@ import com.qmth.paper.library.common.entity.ExamStudent;
 import com.qmth.paper.library.common.entity.SysPrivilege;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.UploadFileEnum;
+import com.qmth.paper.library.common.lock.LockService;
+import com.qmth.paper.library.common.lock.LockType;
 import com.qmth.paper.library.common.service.BasicBatchNumberService;
 import com.qmth.paper.library.common.service.SysPrivilegeService;
 import com.qmth.paper.library.common.util.ServletUtil;
@@ -49,7 +51,7 @@ public class ClientServiceImpl implements ClientService {
     @Resource
     private BusinessCacheService businessCacheService;
     @Resource
-    private BasicExamService basicExamService;
+    private LockService lockService;
     @Resource
     private BasicBatchNumberService basicBatchNumberService;
     @Resource
@@ -168,6 +170,7 @@ public class ClientServiceImpl implements ClientService {
             throw ExceptionResultEnum.ERROR.exception("versoFile(背面图片)为空");
         }
         try {
+            lockService.waitlock(LockType.UPLOAD_OTHER_FILE, paperScanTaskId, fileTypeId);
             String frontFileMd5 = DigestUtils.md5Hex(frontFile.getBytes());
             if (!Objects.equals(frontMd5, frontFileMd5)) {
                 throw ExceptionResultEnum.MD5_EQUALS_FALSE.exception();
@@ -191,6 +194,7 @@ public class ClientServiceImpl implements ClientService {
             if (basicFileType == null) {
                 throw ExceptionResultEnum.ERROR.exception("文件类型不存在,请重新选择");
             }
+            paperLibraryOther.setFileTypeId(fileTypeId);
 
             int maxSequence = paperLibraryOtherService.getMaxSequence(paperScanTaskId, fileTypeId);
             paperLibraryOther.setSequence(maxSequence);
@@ -201,6 +205,8 @@ public class ClientServiceImpl implements ClientService {
             return paperLibraryOtherService.save(paperLibraryOther);
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception("保存图片失败:" + e.getMessage());
+        }  finally {
+            lockService.unlock(LockType.UPLOAD_OTHER_FILE, paperScanTaskId, fileTypeId);
         }
     }
 }

+ 58 - 4
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryServiceImpl.java

@@ -29,10 +29,14 @@ import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.RecognitionTypeEnum;
 import com.qmth.paper.library.common.enums.StoreTypeEnum;
 import com.qmth.paper.library.common.enums.UploadFileEnum;
+import com.qmth.paper.library.common.lock.LockService;
+import com.qmth.paper.library.common.lock.LockType;
 import com.qmth.paper.library.common.service.BasicSchoolService;
 import com.qmth.paper.library.common.service.BasicSemesterService;
 import com.qmth.paper.library.common.service.CommonCacheService;
 import com.qmth.paper.library.common.util.*;
+import net.coobird.thumbnailator.Thumbnails;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.json.JSONArray;
@@ -46,6 +50,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -75,6 +80,8 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     private FileStoreUtil fileStoreUtil;
     @Resource
     private CommonCacheService commonCacheService;
+    @Resource
+    private LockService lockService;
 
     @Override
     public int countScanStudentCount(Long paperScanTaskId) {
@@ -100,7 +107,7 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
         }
 
         QueryWrapper<PaperLibrary> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(paperScanTaskId!= null, PaperLibrary::getPaperScanTaskId, paperScanTaskId)
+        queryWrapper.lambda().eq(paperScanTaskId != null, PaperLibrary::getPaperScanTaskId, paperScanTaskId)
                 .eq(PaperLibrary::getStudentId, studentId)
                 .orderByAsc(PaperLibrary::getSequence);
         List<PaperLibrary> paperLibraryList = this.list(queryWrapper);
@@ -256,7 +263,7 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     public boolean rebind(Long paperLibraryId, Long studentId) {
         PaperLibrary paperLibrary = this.getById(paperLibraryId);
         if (paperLibrary == null) {
-            throw ExceptionResultEnum.ERROR.exception("图片数据不存在");
+            throw ExceptionResultEnum.ERROR.exception("图片数据不存在");
         }
         // 自己绑定自己,直接返回
         if (paperLibrary.getStudentId() != null && paperLibrary.getStudentId().equals(studentId)) {
@@ -317,7 +324,7 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
                 // 目标文件名
                 String dirName = rootPath + File.separator + prefix + "-" + idx + suffix;
                 File file = new File(dirName);
-                if(!file.exists()){
+                if (!file.exists()) {
                     file.getParentFile().mkdirs();
                     file.createNewFile();
                 }
@@ -365,7 +372,54 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
 
     @Override
     public List<String> listBatchNo(Long studentId) {
-        return baseMapper.listBatchNo(studentId);
+        List<String> list = baseMapper.listBatchNo(studentId);
+        return list.stream().filter(m -> StringUtils.isNotBlank(m)).collect(Collectors.toList());
     }
 
+    @Transactional
+    @Override
+    public boolean deletePicture(Long paperLibraryId) {
+        PaperLibrary paperLibrary = this.getById(paperLibraryId);
+        if (paperLibrary == null) {
+            throw ExceptionResultEnum.ERROR.exception("图片数据不存在");
+        }
+        if (paperLibrary.getStudentId() != null) {
+            examStudentService.updateBindCount(paperLibrary.getStudentId());
+        }
+        return this.removeById(paperLibraryId);
+    }
+
+    @Override
+    public boolean rotatePictureUpload(Long paperLibraryId, boolean isFront, Integer rotate) {
+        File outputFile = null;
+        try {
+            lockService.waitlock(LockType.ROTATE_PICTURE, paperLibraryId, isFront);
+            PaperLibrary paperLibrary = this.getById(paperLibraryId);
+            if (paperLibrary == null) {
+                throw ExceptionResultEnum.ERROR.exception("图片数据不存在");
+            }
+            List<FilePathVo> filePathVoList = JSON.parseArray(paperLibrary.getPath(), FilePathVo.class);
+            if (CollectionUtils.isEmpty(filePathVoList) || filePathVoList.size() != 2) {
+                throw ExceptionResultEnum.ERROR.exception("图片路径数据错误");
+            }
+            // 取图片路径
+            FilePathVo filePathVo = filePathVoList.get(isFront ? 0 : 1);
+            // 旋转图片,并重新上传(文件名不变)
+            outputFile = SystemConstant.getFileTempVar(filePathVo.getPath().substring(filePathVo.getPath().lastIndexOf(SystemConstant.ORG_POINT)));
+            ImageUtil.rotate(fileUploadService.downloadInputStream(filePathVo.getPath(), filePathVo.getType()), rotate, outputFile);
+            if (outputFile.exists()) {
+                fileUploadService.uploadFile(outputFile, filePathVo.getUploadType(), filePathVo.getPath());
+            }
+            return true;
+        } catch (Exception e) {
+            throw ExceptionResultEnum.ERROR.exception("旋转图片保存失败:" + e.getMessage());
+        } finally {
+            if (outputFile != null && outputFile.exists()) {
+                outputFile.delete();
+            }
+            lockService.unlock(LockType.ROTATE_PICTURE, paperLibraryId, isFront);
+        }
+    }
+
+
 }

+ 4 - 7
paper-library-business/src/main/resources/mapper/PictureManageMapper.xml

@@ -21,13 +21,10 @@
         es.remark,
         es.bind_count bindCount
         FROM
-        exam_student es,
-        basic_semester bs,
-        basic_exam ea
-        WHERE
-        es.semester_id = bs.id
-        AND es.exam_id = ea.id
-        AND es.bind_count>0
+        exam_student es
+        left join basic_exam ea on es.exam_id = ea.id
+        left join basic_semester bs on es.semester_id = bs.id
+        WHERE es.bind_count>0
         <if test="semesterIds != null and semesterIds.size>0">
             AND bs.id IN
             <foreach collection="semesterIds" item="item" index="index" open="(" separator="," close=")">

+ 1 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/contant/SystemConstant.java

@@ -78,6 +78,7 @@ public class SystemConstant {
     public static final int PAGE_NUMBER_MIN = 1;
     public static final int IN_SIZE_MAX = 1000;
     public static final String COMMA = ",";
+    public static final String ORG_POINT = ".";
     public static final String HYPHEN = "-";
     public static final String ADMIN_CODE = "admin";
     public static final String AUTH = "auth";//命题老师id

+ 2 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/lock/LockType.java

@@ -5,6 +5,8 @@ public enum LockType {
     GET_SEQUENCE("获取图片自增数"),
     GET_ALPHABET("获取批次号前缀"),
     GET_OTHER_SEQUENCE("获取其它文件批次顺序号"),
+    UPLOAD_OTHER_FILE("上传其它文件"),
+    ROTATE_PICTURE("旋转图片"),
     SCAN_TASK_SEQUENCE("获取任务编号顺序号");
 
     private String name;

+ 15 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/util/ImageUtil.java

@@ -11,6 +11,7 @@ import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.Iterator;
 
 /**
@@ -87,4 +88,18 @@ public class ImageUtil {
         return outFile;
     }
 
+    public static File rotate(InputStream inputStream, int rotate, File outFile) {
+        try {
+            // rotate为0,不旋转
+            if (rotate == 0) {
+                Thumbnails.of(inputStream).toFile(outFile);
+            } else {
+                Thumbnails.of(inputStream).scale(0.8).rotate(rotate).toFile(outFile);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return outFile;
+    }
+
 }

+ 1 - 2
paper-library/src/main/java/com/qmth/paper/library/api/ClientController.java

@@ -144,8 +144,7 @@ public class ClientController {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
-        examStudentService.saveExamStudentFromClient(examStudent);
-        return ResultUtil.ok(true, "");
+        return ResultUtil.ok(examStudentService.saveExamStudentFromClient(examStudent));
     }
 
     @ApiOperation(value = "获取考场/班级")

+ 18 - 2
paper-library/src/main/java/com/qmth/paper/library/api/DocManageController.java

@@ -21,6 +21,7 @@ import com.qmth.paper.library.common.util.ServletUtil;
 import io.swagger.annotations.*;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.validation.constraints.Max;
@@ -125,12 +126,27 @@ public class DocManageController {
         return ResultUtil.ok(docManageService.pageOtherDetail(paperScanTaskId, pageNumber, pageSize));
     }
 
-
     @ApiOperation(value = "pdf图片生成")
     @PostMapping("/pdf/generate")
     @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = EditResult.class)})
     public Result pdfGenerate(DownLoadPaperParams params) {
         //TODO pdf生成
-       return ResultUtil.ok();
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "删除图片")
+    @PostMapping("/picture/delete")
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result deletePicture(@ApiParam(value = "图片ID", required = true) @RequestParam Long paperLibraryId) {
+        return ResultUtil.ok(paperLibraryService.deletePicture(paperLibraryId));
+    }
+
+    @ApiOperation(value = "保存图片")
+    @PostMapping("/picture/save")
+    @ApiResponses({@ApiResponse(code = 200, message = "保存图片成功", response = Result.class)})
+    public Result pictureUpload(@ApiParam(value = "图片ID", required = true) @RequestParam Long paperLibraryId,
+                                @ApiParam(value = "是否正面", required = true) @RequestParam boolean isFront,
+                                @ApiParam(value = "旋转角度") @RequestParam(defaultValue = "0") Integer rotate) {
+        return ResultUtil.ok(paperLibraryService.rotatePictureUpload(paperLibraryId, isFront, rotate));
     }
 }