فهرست منبع

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

xiaof 4 سال پیش
والد
کامیت
3cdd69cca8

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

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

+ 12 - 7
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/util/RotateTask.java

@@ -217,18 +217,18 @@ public class RotateTask implements Runnable {
                         File thumbFile = new File(thumbPath);
                         File thumbFile = new File(thumbPath);
                         if (thumbFile.exists()) {
                         if (thumbFile.exists()) {
                             LOGGER.info("生成缩略图:原文件名{},重命名为新文件名开始", fileName);
                             LOGGER.info("生成缩略图:原文件名{},重命名为新文件名开始", fileName);
-                            thumbFile.renameTo(new File(thumbNew));
+                            File thumbFileNew = new File(thumbNew);
+                            thumbFileNew.delete();
+                            thumbFile.renameTo(thumbFileNew);
                             LOGGER.info("生成缩略图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
                             LOGGER.info("生成缩略图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
-                            InputStream is = new FileInputStream(thumbNew);
                             try {
                             try {
                                 ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
                                 ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
                             } catch (IOException e) {
                             } catch (IOException e) {
                                 //旋转失败,还原图片
                                 //旋转失败,还原图片
-                                LOGGER.info("生成缩略图:失败。原文件名{},还原开始", fileName);
+                                LOGGER.info("生成缩略图:失败。原文件名{},还原开始,错误原因:{}", fileName, e.getMessage());
+                                thumbFile.delete();
                                 new File(thumbNew).renameTo(thumbFile);
                                 new File(thumbNew).renameTo(thumbFile);
                                 LOGGER.info("生成缩略图:失败。原文件名{},还原结束", fileName);
                                 LOGGER.info("生成缩略图:失败。原文件名{},还原结束", fileName);
-                            } finally {
-                                is.close();
                             }
                             }
                             LOGGER.info("生成缩略图:原文件名{},旋转结束", fileName);
                             LOGGER.info("生成缩略图:原文件名{},旋转结束", fileName);
 
 
@@ -236,6 +236,7 @@ public class RotateTask implements Runnable {
 
 
                         if (!thumbFile.exists() || thumbFile.length() == 0) {
                         if (!thumbFile.exists() || thumbFile.length() == 0) {
                             LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片开始", fileName);
                             LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片开始", fileName);
+                            thumbFile.delete();
                             new File(thumbNew).renameTo(thumbFile);
                             new File(thumbNew).renameTo(thumbFile);
                             LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片结束", fileName);
                             LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片结束", fileName);
                         } else {
                         } else {
@@ -246,15 +247,18 @@ public class RotateTask implements Runnable {
                         LOGGER.info("生成裁切图开始:原文件名{},新文件名{}", fileName, fileName + "_" + start);
                         LOGGER.info("生成裁切图开始:原文件名{},新文件名{}", fileName, fileName + "_" + start);
                         File imageFile = new File(imagePath);
                         File imageFile = new File(imagePath);
                         if (imageFile.exists()) {
                         if (imageFile.exists()) {
+                            File imageFileNew = new File(imageNew);
+                            imageFileNew.delete();
                             LOGGER.info("生成裁切图:原文件名{},重命名为新文件名开始", fileName);
                             LOGGER.info("生成裁切图:原文件名{},重命名为新文件名开始", fileName);
-                            imageFile.renameTo(new File(imageNew));
+                            imageFile.renameTo(imageFileNew);
                             LOGGER.info("生成裁切图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
                             LOGGER.info("生成裁切图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
                             InputStream is = new FileInputStream(imageNew);
                             InputStream is = new FileInputStream(imageNew);
                             try {
                             try {
                                 ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
                                 ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
                             } catch (IOException e) {
                             } catch (IOException e) {
                                 //旋转失败,还原图片
                                 //旋转失败,还原图片
-                                LOGGER.info("生成裁切图:失败。原文件名{},还原开始", fileName);
+                                LOGGER.info("生成裁切图:失败。原文件名{},还原开始,错误原因:{}", fileName, e.getMessage());
+                                imageFile.delete();
                                 new File(imageNew).renameTo(imageFile);
                                 new File(imageNew).renameTo(imageFile);
                                 LOGGER.info("生成裁切图:失败。原文件名{},还原结束", fileName);
                                 LOGGER.info("生成裁切图:失败。原文件名{},还原结束", fileName);
                             } finally {
                             } finally {
@@ -264,6 +268,7 @@ public class RotateTask implements Runnable {
                         }
                         }
                         if (!imageFile.exists() || imageFile.length() == 0) {
                         if (!imageFile.exists() || imageFile.length() == 0) {
                             LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片开始", fileName);
                             LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片开始", fileName);
+                            imageFile.delete();
                             new File(imageNew).renameTo(imageFile);
                             new File(imageNew).renameTo(imageFile);
                             LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片结束", fileName);
                             LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片结束", fileName);
                         } else {
                         } else {