Explorar el Código

线下版本-图片旋转-20201019

xiaof hace 4 años
padre
commit
376ad84238

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

@@ -9,15 +9,23 @@ import cn.com.qmth.stmms.ms.commons.utils.OssUtil;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
 import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
+import javafx.scene.transform.Rotate;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.awt.image.RasterOp;
 import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.Queue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
 
 /**
  * Created by zhengmin on 2017/2/24.
@@ -25,6 +33,8 @@ import java.util.concurrent.Executors;
 @RestController
 @RequestMapping("api/images")
 public class ImageApi {
+    private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ImageApi.class);
+
 
     @Autowired
     private PaperRepo paperRepo;
@@ -47,17 +57,25 @@ public class ImageApi {
     @Resource
     ImageServerConfig imageServerConfig;
 
-    private ExecutorService executor = Executors.newFixedThreadPool(10);
+    private ExecutorService executor = Executors.newFixedThreadPool(1);
 
     private HashSet<String> papers = new HashSet<String>();
 
+    LinkedBlockingQueue<RotateTask> queue = new LinkedBlockingQueue<>();
+
     @RequestMapping(value = "{paperId}/rotate", method = RequestMethod.GET)
     public ResponseEntity rotate(@PathVariable Long paperId, @RequestParam int degree) {
         Paper paper = paperRepo.findOne(paperId);
-        if (!papers.contains(paper.getExamNumber())) {
+        /*if (!papers.contains(paper.getExamNumber())) {
             executor.submit(new RotateTask(paper, degree, paperRepo, systemConfig, papers, imageConfig, studentRepo, ossUtil, aliYunOssConfig, imageServerConfig));
             papers.add(paper.getExamNumber());
+        }*/
+        RotateTask rotateTask = new RotateTask(paper, degree, paperRepo, systemConfig, papers, imageConfig, studentRepo, ossUtil, aliYunOssConfig, imageServerConfig);
+        queue.offer(rotateTask);
+        while (queue.size() > 0) {
+            executor.submit(queue.poll());
         }
+
         return new ResponseEntity(HttpStatus.OK);
     }
 

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

@@ -56,8 +56,8 @@ public class RotateTask implements Runnable {
             String imagePath = null;
             String imageNew = null;
             String sliceMD5 = null;
-            synchronized (paper.getId()) {
-                LOGGER.info("准备生成缩略和裁切旋转图:{}", start);
+            synchronized (this) {
+                LOGGER.info("准备生成缩略和裁切旋转图:{}, paperId:{}", start, paper.getId());
                 if (ParamCache.paramMap.get(paper.getWorkId()).getImageEncrypt() == 1) {
                     try {
                         Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());