浏览代码

线上版本-图片旋转优化-20201118

xiaof 4 年之前
父节点
当前提交
32cc1e7629

+ 1 - 1
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/api/ImageApi.java

@@ -64,7 +64,7 @@ public class ImageApi {
         RotateTask rotateTask = new RotateTask(paper, degree, paperRepo, systemConfig, papers, imageConfig, studentRepo, ossUtil, aliYunOssConfig, imageServerConfig);
         queue.offer(rotateTask);
         while (queue.size() > 0) {
-            synchronized (paper.getId()) {
+            synchronized (this) {
                 executor.submit(queue.poll());
             }
         }

+ 206 - 207
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/util/RotateTask.java

@@ -56,233 +56,232 @@ public class RotateTask implements Runnable {
             String imagePath = null;
             String imageNew = null;
             String sliceMD5 = null;
-            synchronized (this) {
-                LOGGER.info("准备生成缩略和裁切旋转图:{}", start);
-                if (ParamCache.paramMap.get(paper.getWorkId()).getImageEncrypt() == 1) {
-                    try {
-                        Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
-                        String imageMd5 = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), paper.getAreaCode(), paper.getExamNumber(), student.getId());
-                        thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + imageMd5;
-                        thumbNew = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + imageMd5;
-                        imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + imageMd5;
-                        imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + imageMd5;
+            LOGGER.info("准备生成缩略和裁切旋转图:{}", start);
+            if (ParamCache.paramMap.get(paper.getWorkId()).getImageEncrypt() == 1) {
+                try {
+                    Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
+                    String imageMd5 = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), paper.getAreaCode(), paper.getExamNumber(), student.getId());
+                    thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + imageMd5;
+                    thumbNew = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + imageMd5;
+                    imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + imageMd5;
+                    imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + imageMd5;
 
-                        //缩略图旋转生成
-                        String thumbOldPath = thumbPath + ".jpg";
-                        String thumbTempPath = thumbPath + "temp.jpg";
-                        File thumbOldFile = new File(thumbOldPath);
-                        //读取原图
-                        File thumbTempFile = new File(thumbTempPath);
-                        InputStream is = new FileInputStream(thumbOldPath);
-                        OutputStream outputStream = new FileOutputStream(thumbTempPath);
-                        SystemConstant.writeStream(is, outputStream);
-                        is.close();
-                        outputStream.flush();
-                        outputStream.close();
+                    //缩略图旋转生成
+                    String thumbOldPath = thumbPath + ".jpg";
+                    String thumbTempPath = thumbPath + "temp.jpg";
+                    File thumbOldFile = new File(thumbOldPath);
+                    //读取原图
+                    File thumbTempFile = new File(thumbTempPath);
+                    InputStream is = new FileInputStream(thumbOldPath);
+                    OutputStream outputStream = new FileOutputStream(thumbTempPath);
+                    SystemConstant.writeStream(is, outputStream);
+                    is.close();
+                    outputStream.flush();
+                    outputStream.close();
 
-                        //原图旋转
-                        ImageCompression.rotate(thumbTempFile, thumbTempFile, degree);
-                        thumbOldFile.renameTo(new File(thumbNew + "_" + start + ".jpg"));
-                        thumbTempFile.renameTo(new File(thumbOldPath));
-                        //加密旋转图
-                        InputStream is1 = new ByteArrayInputStream(FileCopyUtils.copyToByteArray(thumbOldFile));
-                        OutputStream outputStream1 = new FileOutputStream(thumbOldFile);
-                        SystemConstant.writeStream(is1, outputStream1);
-                        is1.close();
-                        outputStream1.flush();
-                        outputStream1.close();
+                    //原图旋转
+                    ImageCompression.rotate(thumbTempFile, thumbTempFile, degree);
+                    thumbOldFile.renameTo(new File(thumbNew + "_" + start + ".jpg"));
+                    thumbTempFile.renameTo(new File(thumbOldPath));
+                    //加密旋转图
+                    InputStream is1 = new ByteArrayInputStream(FileCopyUtils.copyToByteArray(thumbOldFile));
+                    OutputStream outputStream1 = new FileOutputStream(thumbOldFile);
+                    SystemConstant.writeStream(is1, outputStream1);
+                    is1.close();
+                    outputStream1.flush();
+                    outputStream1.close();
 
-                        //裁切原图旋转生成
-                        String imageOldPath = imagePath + ".jpg";
-                        String imageTempPath = imagePath + "temp.jpg";
-                        File imageOldFile = new File(imageOldPath);
-                        //读取原图
-                        File imageTempFile = new File(imageTempPath);
-                        InputStream is2 = new FileInputStream(imageOldPath);
-                        OutputStream outputStream2 = new FileOutputStream(imageTempFile);
-                        SystemConstant.writeStream(is2, outputStream2);
-                        is2.close();
-                        outputStream2.flush();
-                        outputStream2.close();
+                    //裁切原图旋转生成
+                    String imageOldPath = imagePath + ".jpg";
+                    String imageTempPath = imagePath + "temp.jpg";
+                    File imageOldFile = new File(imageOldPath);
+                    //读取原图
+                    File imageTempFile = new File(imageTempPath);
+                    InputStream is2 = new FileInputStream(imageOldPath);
+                    OutputStream outputStream2 = new FileOutputStream(imageTempFile);
+                    SystemConstant.writeStream(is2, outputStream2);
+                    is2.close();
+                    outputStream2.flush();
+                    outputStream2.close();
 
-                        //原图旋转
-                        ImageCompression.rotate(imageTempFile, imageTempFile, degree);
-                        imageOldFile.renameTo(new File(imageNew + "_" + start + ".jpg"));
-                        imageTempFile.renameTo(new File(imageOldPath));
-                        //加密旋转图
-                        InputStream is3 = new ByteArrayInputStream(FileCopyUtils.copyToByteArray(imageOldFile));
-                        OutputStream outputStream3 = new FileOutputStream(imageOldFile);
-                        SystemConstant.writeStream(is3, outputStream3);
-                        is3.close();
-                        outputStream3.flush();
-                        outputStream3.close();
+                    //原图旋转
+                    ImageCompression.rotate(imageTempFile, imageTempFile, degree);
+                    imageOldFile.renameTo(new File(imageNew + "_" + start + ".jpg"));
+                    imageTempFile.renameTo(new File(imageOldPath));
+                    //加密旋转图
+                    InputStream is3 = new ByteArrayInputStream(FileCopyUtils.copyToByteArray(imageOldFile));
+                    OutputStream outputStream3 = new FileOutputStream(imageOldFile);
+                    SystemConstant.writeStream(is3, outputStream3);
+                    is3.close();
+                    outputStream3.flush();
+                    outputStream3.close();
 
-                        InputStream is4 = new FileInputStream(imageOldFile);
-                        sliceMD5 = DigestUtils.md5Hex(is4);
-                        is4.close();
-                    } catch (Exception e) {
-                        e.printStackTrace();
+                    InputStream is4 = new FileInputStream(imageOldFile);
+                    sliceMD5 = DigestUtils.md5Hex(is4);
+                    is4.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            } else {
+                if (imageConfig.isCustomSubject() && imageServerConfig.isAliyunOss()) {
+                    //阿里云oss图片旋转
+                    String thumbDirName = aliYunOssConfig.getThumbDir();
+                    String imageDirName = aliYunOssConfig.getImageDir();
+                    thumbDirName = thumbDirName.substring(thumbDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), thumbDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
+                    imageDirName = imageDirName.substring(imageDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), imageDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
+                    StringJoiner thumbSj = new StringJoiner("").add(thumbDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
+                    StringJoiner thumbNewSj = new StringJoiner("").add(thumbDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add("_").add(String.valueOf(start)).add(".jpg");
+                    StringJoiner imageSj = new StringJoiner("").add(imageDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
+                    StringJoiner imageNewSj = new StringJoiner("").add(imageDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add("_").add(String.valueOf(start)).add(".jpg");
+
+                    thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
+                    imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
+                    File thumbFile = ossUtil.ossDownload(thumbSj.toString(), thumbPath);
+                    File imageFile = ossUtil.ossDownload(imageSj.toString(), imagePath);
+                    ImageCompression.rotate(thumbFile, new File(thumbPath), degree);
+                    ImageCompression.rotate(imageFile, new File(imagePath), degree);
+                    FileInputStream in = new FileInputStream(new File(imagePath));
+                    sliceMD5 = DigestUtils.md5Hex(in);
+                    in.close();
+                    ossUtil.ossCopy(thumbSj.toString(), thumbNewSj.toString());
+                    ossUtil.ossCopy(imageSj.toString(), imageNewSj.toString());
+                    ossUtil.ossUpload(thumbSj.toString(), new FileInputStream(thumbFile));
+                    ossUtil.ossUpload(imageSj.toString(), new FileInputStream(imageFile));
+                    thumbFile.delete();
+                    imageFile.delete();
+                } else if (!imageConfig.isCustomSubject() && imageServerConfig.isAliyunOss()) {
+                    String fileName = paper.getExamNumber();
+                    Student student = studentRepo.findByWorkIdAndExamNumberAndTest(paper.getWorkId(), paper.getExamNumber(), "0");
+                    if (ParamCache.paramMap.get(paper.getWorkId()).getNameRule() == 1) {
+                        fileName = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), student.getAreaCode(), paper.getExamNumber(), student.getId());
                     }
-                } else {
-                    if (imageConfig.isCustomSubject() && imageServerConfig.isAliyunOss()) {
-                        //阿里云oss图片旋转
-                        String thumbDirName = aliYunOssConfig.getThumbDir();
-                        String imageDirName = aliYunOssConfig.getImageDir();
-                        thumbDirName = thumbDirName.substring(thumbDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), thumbDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
-                        imageDirName = imageDirName.substring(imageDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), imageDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
-                        StringJoiner thumbSj = new StringJoiner("").add(thumbDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
-                        StringJoiner thumbNewSj = new StringJoiner("").add(thumbDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add("_").add(String.valueOf(start)).add(".jpg");
-                        StringJoiner imageSj = new StringJoiner("").add(imageDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
-                        StringJoiner imageNewSj = new StringJoiner("").add(imageDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add("_").add(String.valueOf(start)).add(".jpg");
+                    long s0 = System.currentTimeMillis();
+                    LOGGER.info("===============OSS-生成缩略图、裁切图开始:原文件名{}================", fileName);
 
-                        thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
-                        imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
-                        File thumbFile = ossUtil.ossDownload(thumbSj.toString(), thumbPath);
-                        File imageFile = ossUtil.ossDownload(imageSj.toString(), imagePath);
-                        ImageCompression.rotate(thumbFile, new File(thumbPath), degree);
-                        ImageCompression.rotate(imageFile, new File(imagePath), degree);
-                        FileInputStream in = new FileInputStream(new File(imagePath));
-                        sliceMD5 = DigestUtils.md5Hex(in);
-                        in.close();
-                        ossUtil.ossCopy(thumbSj.toString(), thumbNewSj.toString());
-                        ossUtil.ossCopy(imageSj.toString(), imageNewSj.toString());
-                        ossUtil.ossUpload(thumbSj.toString(), new FileInputStream(thumbFile));
-                        ossUtil.ossUpload(imageSj.toString(), new FileInputStream(imageFile));
-                        thumbFile.delete();
-                        imageFile.delete();
-                    } else if (!imageConfig.isCustomSubject() && imageServerConfig.isAliyunOss()) {
-                        String fileName = paper.getExamNumber();
+                    //阿里云oss图片旋转
+                    StringJoiner thumbSj = new StringJoiner("/").add(imageServerConfig.getDir()).add(systemConfig.getThumbDir().replace("\\", "/")).add(String.valueOf(student.getWorkId())).add(paper.getSubject().name()).add(student.getAreaCode()).add(fileName + ".jpg");
+                    StringJoiner thumbNewSj = new StringJoiner("/").add(imageServerConfig.getDir()).add(systemConfig.getThumbDir().replace("\\", "/")).add(String.valueOf(student.getWorkId())).add(paper.getSubject().name()).add(student.getAreaCode()).add(fileName + "_" + start + ".jpg");
+                    StringJoiner imageSj = new StringJoiner("/").add(imageServerConfig.getDir()).add(systemConfig.getImageDir().replace("\\", "/")).add(String.valueOf(student.getWorkId())).add(paper.getSubject().name()).add(student.getAreaCode()).add(fileName + ".jpg");
+                    StringJoiner imageNewSj = new StringJoiner("/").add(imageServerConfig.getDir()).add(systemConfig.getImageDir().replace("\\", "/")).add(String.valueOf(student.getWorkId())).add(paper.getSubject().name()).add(student.getAreaCode()).add(fileName + "_" + start + ".jpg");
+
+                    thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
+                    imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
+                    long s1 = System.currentTimeMillis();
+                    LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},从OSS下载开始", fileName);
+                    File thumbFile = ossUtil.ossDownload(thumbSj.toString(), thumbPath);
+                    File imageFile = ossUtil.ossDownload(imageSj.toString(), imagePath);
+                    long s2 = System.currentTimeMillis();
+                    LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},从OSS下载结束,耗时:{}秒,开始旋转", fileName, (s2 - s1) / 1000);
+                    ImageCompression.rotate(thumbFile, new File(thumbPath), degree);
+                    ImageCompression.rotate(imageFile, new File(imagePath), degree);
+                    long s3 = System.currentTimeMillis();
+                    LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},旋转结束,耗时:{}秒,原文件重命名开始", fileName, (s3 - s2) / 1000);
+                    FileInputStream in = new FileInputStream(new File(imagePath));
+                    sliceMD5 = DigestUtils.md5Hex(in);
+                    in.close();
+                    ossUtil.ossCopy(thumbSj.toString(), thumbNewSj.toString());
+                    ossUtil.ossCopy(imageSj.toString(), imageNewSj.toString());
+                    long s4 = System.currentTimeMillis();
+                    LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},原文件重命名结束,耗时:{}秒,上传旋转图片开始", fileName, (s4 - s3) / 1000);
+                    ossUtil.ossUpload(thumbSj.toString(), new FileInputStream(thumbFile));
+                    ossUtil.ossUpload(imageSj.toString(), new FileInputStream(imageFile));
+                    long s5 = System.currentTimeMillis();
+                    LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},上传旋转图片结束,耗时:{}秒", fileName, (s5 - s4) / 1000);
+                    LOGGER.info("===============OSS-生成缩略图、裁切图结束:原文件名{},总耗时:{}秒================", fileName, (s5 - s0) / 1000);
+                    thumbFile.delete();
+                    imageFile.delete();
+                } else {
+                    String fileName = paper.getExamNumber();
+                    if (ParamCache.paramMap.get(paper.getWorkId()).getNameRule() == 1) {
                         Student student = studentRepo.findByWorkIdAndExamNumberAndTest(paper.getWorkId(), paper.getExamNumber(), "0");
-                        if (ParamCache.paramMap.get(paper.getWorkId()).getNameRule() == 1) {
-                            fileName = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), student.getAreaCode(), paper.getExamNumber(), student.getId());
+                        fileName = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), student.getAreaCode(), paper.getExamNumber(), student.getId());
+                    }
+                    thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
+                    thumbNew = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + fileName + "_" + start + ".jpg";
+                    imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
+                    imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                            + File.separator + paper.getAreaCode() + File.separator + fileName + "_" + start + ".jpg";
+                    LOGGER.info("生成缩略图开始:原文件名{},新文件名{}", fileName, fileName + "_" + start);
+                    File thumbFile = new File(thumbPath);
+                    if (thumbFile.exists()) {
+                        LOGGER.info("生成缩略图:原文件名{},重命名为新文件名开始", fileName);
+                        File thumbFileNew = new File(thumbNew);
+                        thumbFileNew.delete();
+                        thumbFile.renameTo(thumbFileNew);
+                        LOGGER.info("生成缩略图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
+                        try {
+                            ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
+                        } catch (IOException e) {
+                            //旋转失败,还原图片
+                            LOGGER.info("生成缩略图:失败。原文件名{},还原开始,错误原因:{}", fileName, e.getMessage());
+                            thumbFile.delete();
+                            new File(thumbNew).renameTo(thumbFile);
+                            LOGGER.info("生成缩略图:失败。原文件名{},还原结束", fileName);
                         }
-                        long s0 = System.currentTimeMillis();
-                        LOGGER.info("===============OSS-生成缩略图、裁切图开始:原文件名{}================", fileName);
 
-                        //阿里云oss图片旋转
-                        StringJoiner thumbSj = new StringJoiner("/").add(imageServerConfig.getDir()).add(systemConfig.getThumbDir().replace("\\", "/")).add(String.valueOf(student.getWorkId())).add(paper.getSubject().name()).add(student.getAreaCode()).add(fileName + ".jpg");
-                        StringJoiner thumbNewSj = new StringJoiner("/").add(imageServerConfig.getDir()).add(systemConfig.getThumbDir().replace("\\", "/")).add(String.valueOf(student.getWorkId())).add(paper.getSubject().name()).add(student.getAreaCode()).add(fileName + "_" + start + ".jpg");
-                        StringJoiner imageSj = new StringJoiner("/").add(imageServerConfig.getDir()).add(systemConfig.getImageDir().replace("\\", "/")).add(String.valueOf(student.getWorkId())).add(paper.getSubject().name()).add(student.getAreaCode()).add(fileName + ".jpg");
-                        StringJoiner imageNewSj = new StringJoiner("/").add(imageServerConfig.getDir()).add(systemConfig.getImageDir().replace("\\", "/")).add(String.valueOf(student.getWorkId())).add(paper.getSubject().name()).add(student.getAreaCode()).add(fileName + "_" + start + ".jpg");
+                        LOGGER.info("生成缩略图:原文件名{},旋转结束", fileName);
+                    }
 
-                        thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
-                        imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
-                        long s1 = System.currentTimeMillis();
-                        LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},从OSS下载开始", fileName);
-                        File thumbFile = ossUtil.ossDownload(thumbSj.toString(), thumbPath);
-                        File imageFile = ossUtil.ossDownload(imageSj.toString(), imagePath);
-                        long s2 = System.currentTimeMillis();
-                        LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},从OSS下载结束,耗时:{}秒,开始旋转", fileName, (s2 - s1) / 1000);
-                        ImageCompression.rotate(thumbFile, new File(thumbPath), degree);
-                        ImageCompression.rotate(imageFile, new File(imagePath), degree);
-                        long s3 = System.currentTimeMillis();
-                        LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},旋转结束,耗时:{}秒,原文件重命名开始", fileName, (s3 - s2) / 1000);
-                        FileInputStream in = new FileInputStream(new File(imagePath));
-                        sliceMD5 = DigestUtils.md5Hex(in);
-                        in.close();
-                        ossUtil.ossCopy(thumbSj.toString(), thumbNewSj.toString());
-                        ossUtil.ossCopy(imageSj.toString(), imageNewSj.toString());
-                        long s4 = System.currentTimeMillis();
-                        LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},原文件重命名结束,耗时:{}秒,上传旋转图片开始", fileName, (s4 - s3) / 1000);
-                        ossUtil.ossUpload(thumbSj.toString(), new FileInputStream(thumbFile));
-                        ossUtil.ossUpload(imageSj.toString(), new FileInputStream(imageFile));
-                        long s5 = System.currentTimeMillis();
-                        LOGGER.info("OSS-生成缩略图、裁切图:原文件名{},上传旋转图片结束,耗时:{}秒", fileName, (s5 - s4) / 1000);
-                        LOGGER.info("===============OSS-生成缩略图、裁切图结束:原文件名{},总耗时:{}秒================", fileName, (s5 - s0) / 1000);
+                    if (!thumbFile.exists()) {
+                        LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片开始", fileName);
                         thumbFile.delete();
-                        imageFile.delete();
+                        new File(thumbNew).renameTo(thumbFile);
+                        LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片结束", fileName);
                     } else {
-                        String fileName = paper.getExamNumber();
-                        if (ParamCache.paramMap.get(paper.getWorkId()).getNameRule() == 1) {
-                            Student student = studentRepo.findByWorkIdAndExamNumberAndTest(paper.getWorkId(), paper.getExamNumber(), "0");
-                            fileName = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), student.getAreaCode(), paper.getExamNumber(), student.getId());
-                        }
-                        thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
-                        thumbNew = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + fileName + "_" + start + ".jpg";
-                        imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
-                        imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                                + File.separator + paper.getAreaCode() + File.separator + fileName + "_" + start + ".jpg";
-                        LOGGER.info("生成缩略图开始:原文件名{},新文件名{}", fileName, fileName + "_" + start);
-                        File thumbFile = new File(thumbPath);
-                        if (thumbFile.exists()) {
-                            LOGGER.info("生成缩略图:原文件名{},重命名为新文件名开始", fileName);
-                            File thumbFileNew = new File(thumbNew);
-                            thumbFileNew.delete();
-                            thumbFile.renameTo(thumbFileNew);
-                            LOGGER.info("生成缩略图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
-                            try {
-                                ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
-                            } catch (IOException e) {
-                                //旋转失败,还原图片
-                                LOGGER.info("生成缩略图:失败。原文件名{},还原开始,错误原因:{}", fileName, e.getMessage());
-                                thumbFile.delete();
-                                new File(thumbNew).renameTo(thumbFile);
-                                LOGGER.info("生成缩略图:失败。原文件名{},还原结束", fileName);
-                            }
-
-                            LOGGER.info("生成缩略图:原文件名{},旋转结束", fileName);
-                        }
-
-                        if (!thumbFile.exists()) {
-                            LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片开始", fileName);
-                            thumbFile.delete();
-                            new File(thumbNew).renameTo(thumbFile);
-                            LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片结束", fileName);
-                        } else {
-                            LOGGER.info("生成缩略图:原文件名{},旋转成功", fileName);
-                        }
-                        LOGGER.info("生成缩略图结束:原文件名{}", fileName);
-
-                        LOGGER.info("生成裁切图开始:原文件名{},新文件名{}", fileName, fileName + "_" + start);
-                        File imageFile = new File(imagePath);
-                        if (imageFile.exists()) {
-                            LOGGER.info("生成裁切图:原文件名{},重命名为新文件名开始", fileName);
-                            File imageFileNew = new File(imageNew);
-                            imageFileNew.delete();
-                            imageFile.renameTo(imageFileNew);
-                            LOGGER.info("生成裁切图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
-                            try {
-                                ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
-                            } catch (IOException e) {
-                                //旋转失败,还原图片
-                                LOGGER.info("生成裁切图:失败。原文件名{},还原开始,错误原因:{}", fileName, e.getMessage());
-                                imageFile.delete();
-                                new File(imageNew).renameTo(imageFile);
-                                LOGGER.info("生成裁切图:失败。原文件名{},还原结束", fileName);
-                            }
+                        LOGGER.info("生成缩略图:原文件名{},旋转成功", fileName);
+                    }
+                    LOGGER.info("生成缩略图结束:原文件名{}", fileName);
 
-                            LOGGER.info("生成裁切图:原文件名{},旋转结束", fileName);
-                        }
-                        if (!imageFile.exists()) {
-                            LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片开始", fileName);
+                    LOGGER.info("生成裁切图开始:原文件名{},新文件名{}", fileName, fileName + "_" + start);
+                    File imageFile = new File(imagePath);
+                    if (imageFile.exists()) {
+                        LOGGER.info("生成裁切图:原文件名{},重命名为新文件名开始", fileName);
+                        File imageFileNew = new File(imageNew);
+                        imageFileNew.delete();
+                        imageFile.renameTo(imageFileNew);
+                        LOGGER.info("生成裁切图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
+                        try {
+                            ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
+                        } catch (IOException e) {
+                            //旋转失败,还原图片
+                            LOGGER.info("生成裁切图:失败。原文件名{},还原开始,错误原因:{}", fileName, e.getMessage());
                             imageFile.delete();
                             new File(imageNew).renameTo(imageFile);
-                            LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片结束", fileName);
-                        } else {
-                            LOGGER.info("生成裁切图:原文件名{},旋转成功", fileName);
+                            LOGGER.info("生成裁切图:失败。原文件名{},还原结束", fileName);
                         }
-                        LOGGER.info("生成裁切图结束:原文件名{}", fileName);
-                        FileInputStream in = new FileInputStream(new File(imagePath));
-                        sliceMD5 = DigestUtils.md5Hex(in);
-                        in.close();
+
+                        LOGGER.info("生成裁切图:原文件名{},旋转结束", fileName);
+                    }
+                    if (!imageFile.exists()) {
+                        LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片开始", fileName);
+                        imageFile.delete();
+                        new File(imageNew).renameTo(imageFile);
+                        LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片结束", fileName);
+                    } else {
+                        LOGGER.info("生成裁切图:原文件名{},旋转成功", fileName);
                     }
+                    LOGGER.info("生成裁切图结束:原文件名{}", fileName);
+                    FileInputStream in = new FileInputStream(new File(imagePath));
+                    sliceMD5 = DigestUtils.md5Hex(in);
+                    in.close();
                 }
-                long end = System.currentTimeMillis();
-                LOGGER.info("生成缩略和裁切旋转图耗时:{},sliceMD5:{}", (end - start) / 1000 + "s", sliceMD5);
-                paper.setSliceMD5(sliceMD5);
-                paperRepo.save(paper);
             }
+            long end = System.currentTimeMillis();
+            LOGGER.info("生成缩略和裁切旋转图耗时:{},sliceMD5:{}", (end - start) / 1000 + "s", sliceMD5);
+            paper.setSliceMD5(sliceMD5);
+            paperRepo.save(paper);
+
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         } catch (IOException ioe) {