Bläddra i källkod

美术阅卷10月新增需求-新增旋转图片生成和加密

wangliang 5 år sedan
förälder
incheckning
a8a0da2a73

+ 6 - 3
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -77,6 +77,7 @@ public class DataUploadService {
         LOGGER.info("准备生成裁切原图和缩略图:{}", start);
         OutputStream outputStream = null;
         OutputStream outputStreamTemp = null;
+        File imageFileTemp = null;
         try {
             FileInputStream sheetIn = null;
             FileInputStream slicein = null;
@@ -92,7 +93,7 @@ public class DataUploadService {
 
                 String imageMd5 = MD5Util.getImageRuleMd5(student.getWorkId(), subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
                 File imageFile = new File(imageDir + File.separator + imageMd5 + ".jpg");
-                File imageFileTemp = new File(imageDir + File.separator + imageMd5 + "temp.jpg");
+                imageFileTemp = new File(imageDir + File.separator + imageMd5 + "temp.jpg");
                 LOGGER.info("image存放目录:{}", imageFile.getPath());
                 outputStream = new FileOutputStream(imageFile);
                 outputStreamTemp = new FileOutputStream(imageFileTemp);
@@ -125,8 +126,6 @@ public class DataUploadService {
                 ImageIO.write(bufferedImage, "jpg", os);
                 in = new ByteArrayInputStream(os.toByteArray());
 
-                //原图删除
-                imageFileTemp.delete();
                 writeStream(in, outputStream);
                 long end = System.currentTimeMillis();
                 LOGGER.info("生成原图和缩略图耗时:{}", (end - start) / 1000 + "s");
@@ -215,6 +214,10 @@ public class DataUploadService {
                 outputStreamTemp.flush();
                 outputStreamTemp.close();
             }
+            //原图删除
+            if (Objects.nonNull(imageFileTemp) && imageFileTemp.exists()) {
+                imageFileTemp.delete();
+            }
         }
     }
 

+ 8 - 2
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/WaterMarkUtils.java

@@ -13,6 +13,7 @@ import java.awt.*;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
 import java.io.*;
+import java.util.Objects;
 
 /**
  * Created by yuanpan on 2017/12/13.
@@ -178,15 +179,20 @@ public class WaterMarkUtils {
         writer.write(null, new IIOImage(watermarked, null, null), jepgParams);
         writer.dispose();
         w.dispose();
-        source.delete();
 
         inputStream = new FileInputStream(destinationTemp);
-        destinationTemp.delete();
         outputStream.flush();
         File watermarkFile = new File(destinationPath + ".jpg");
         LOGGER.info("watermark存放目录:{}", watermarkFile.getPath());
         outputStream = new FileOutputStream(watermarkFile);
         SystemConstant.writeStream(inputStream, outputStream);
+
+        if (Objects.nonNull(source) && source.exists()) {
+            source.delete();
+        }
+        if (Objects.nonNull(destinationTemp) && destinationTemp.exists()) {
+            destinationTemp.delete();
+        }
         long end = System.currentTimeMillis();
         LOGGER.info("生成水印图耗时:{}", (end - start) / 1000 + "s");
     }

+ 6 - 3
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/api/CollectApi.java

@@ -236,6 +236,7 @@ public class CollectApi {
         InputStream inputStream = null;
         OutputStream outputStream = null;
         OutputStream outputStreamTemp = null;
+        File imageFileTemp = null;
         try {
             inputStream = request.getInputStream();
 //            inputStream = new FileInputStream(srcFile);
@@ -251,7 +252,7 @@ public class CollectApi {
 
             String imageMd5 = MD5Util.getImageRuleMd5(workId, subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
             File imageFile = new File(imageDir + File.separator + imageMd5 + ".jpg");
-            File imageFileTemp = new File(imageDir + File.separator + imageMd5 + "temp.jpg");
+            imageFileTemp = new File(imageDir + File.separator + imageMd5 + "temp.jpg");
             LOGGER.info("image存放目录:{}", imageFile.getPath());
             outputStream = new FileOutputStream(imageFile);
             outputStreamTemp = new FileOutputStream(imageFileTemp);
@@ -288,8 +289,6 @@ public class CollectApi {
             ImageIO.write(bufferedImage, "jpg", os);
             inputStream = new ByteArrayInputStream(os.toByteArray());
 
-            //原图删除
-            imageFileTemp.delete();
 //            inputStream = new FileInputStream(thumbFileTemp);
             //缩略图删除
 //            thumbFileTemp.delete();
@@ -318,6 +317,10 @@ public class CollectApi {
                 outputStreamTemp.flush();
                 outputStreamTemp.close();
             }
+            //原图删除
+            if (Objects.nonNull(imageFileTemp) && imageFileTemp.exists()) {
+                imageFileTemp.delete();
+            }
         }
     }
 

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

@@ -1,22 +1,19 @@
 package cn.com.qmth.stmms.ms.collect.api;
 
-import java.util.HashSet;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
 import cn.com.qmth.stmms.ms.collect.util.RotateTask;
+import cn.com.qmth.stmms.ms.commons.config.ImageConfig;
 import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
 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 org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashSet;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * Created by zhengmin on 2017/2/24.
@@ -30,24 +27,30 @@ public class ImageApi {
 
     @Autowired
     private SystemConfig systemConfig;
-    
+
+    @Autowired
+    ImageConfig imageConfig;
+
+    @Autowired
+    StudentRepo studentRepo;
+
     private ExecutorService executor = Executors.newFixedThreadPool(10);
-    
+
     private HashSet<String> papers = new HashSet<String>();
 
-    @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())){
-        	executor.submit(new RotateTask(paper,degree,paperRepo,systemConfig,papers));
-        	papers.add(paper.getExamNumber());
+    @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())) {
+            executor.submit(new RotateTask(paper, degree, paperRepo, systemConfig, papers, imageConfig, studentRepo));
+            papers.add(paper.getExamNumber());
         }
         return new ResponseEntity(HttpStatus.OK);
     }
-    
-    @RequestMapping(value = "process",method = RequestMethod.GET)
-    public ResponseEntity process(){
-    	return new ResponseEntity(papers.size(),HttpStatus.OK);
+
+    @RequestMapping(value = "process", method = RequestMethod.GET)
+    public ResponseEntity process() {
+        return new ResponseEntity(papers.size(), HttpStatus.OK);
     }
 
 }

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

@@ -1,73 +1,154 @@
 package cn.com.qmth.stmms.ms.collect.util;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashSet;
-
-import org.apache.commons.codec.digest.DigestUtils;
-
+import cn.com.qmth.stmms.ms.commons.config.ImageConfig;
 import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
+import cn.com.qmth.stmms.ms.commons.constant.SystemConstant;
+import cn.com.qmth.stmms.ms.commons.utils.MD5Util;
 import cn.com.qmth.stmms.ms.commons.utils.image.ImageCompression;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
+import cn.com.qmth.stmms.ms.core.domain.Student;
 import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.slf4j.LoggerFactory;
+
+import java.io.*;
+import java.util.HashSet;
+import java.util.Objects;
 
-public class RotateTask  implements Runnable {
-	
+public class RotateTask implements Runnable {
+    private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(RotateTask.class);
+    ImageConfig imageConfig;
+    StudentRepo studentRepo;
     private Paper paper;
     private int degree;
     private PaperRepo paperRepo;
     private SystemConfig systemConfig;
     private HashSet<String> papers;
 
-    public RotateTask(Paper paper,int degree, PaperRepo paperRepo, SystemConfig systemConfig, HashSet<String> papers) {
-    	this.paper = paper;
+    public RotateTask(Paper paper, int degree, PaperRepo paperRepo, SystemConfig systemConfig, HashSet<String> papers, ImageConfig imageConfig, StudentRepo studentRepo) {
+        this.paper = paper;
         this.degree = degree;
         this.paperRepo = paperRepo;
         this.systemConfig = systemConfig;
         this.papers = papers;
+        this.imageConfig = imageConfig;
+        this.studentRepo = studentRepo;
     }
 
-	@Override
-	public void run() {
-		long start = System.currentTimeMillis();
-		try {
-			String thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-					+ File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
-			String thumbNew =  systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-	    			+ File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() +"_" + start + ".jpg";
-			File thumbFile = new File(thumbPath);
-			if (thumbFile.exists()) {
-				thumbFile.renameTo(new File(thumbNew));
-				InputStream is = new FileInputStream(thumbNew);
-				ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
-				is.close();
-			}
-			
-		    String imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-		    			+ File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
-		    String imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-		    			+ File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() +"_" + start + ".jpg";
-			File imageFile = new File(imagePath);
-			if (imageFile.exists()) {
-				imageFile.renameTo(new File(imageNew));
-				InputStream is = new FileInputStream(imageNew);
-				ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
-				is.close();
-			}
-	        FileInputStream in = new FileInputStream(new File(imagePath));
-	        String sliceMD5 = DigestUtils.md5Hex(in);
-			paper.setSliceMD5(sliceMD5);
-			paperRepo.save(paper);
-			in.close();
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		} catch (IOException ioe) {
-			ioe.printStackTrace();
-		} finally {
-			papers.remove(paper.getExamNumber());
-		}
-	}
+    @Override
+    public void run() {
+        long start = System.currentTimeMillis();
+        try {
+            String thumbPath = null;
+            String thumbNew = null;
+            String imagePath = null;
+            String imageNew = null;
+            String sliceMD5 = null;
+            LOGGER.info("准备生成缩略和裁切旋转图:{}", start);
+            if (imageConfig.isImageEnc()) {
+                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);
+                //生成旋转图
+                File thumbNewFile = new File(thumbNew + "_" + start + ".jpg");
+                thumbTempFile.renameTo(thumbNewFile);
+                ImageCompression.rotate(thumbNewFile, thumbTempFile, degree);
+                thumbOldFile.renameTo(thumbNewFile);
+                is = new FileInputStream(thumbTempFile);
+                File thumbRotate = new File(thumbPath + ".jpg");
+                outputStream = new FileOutputStream(thumbRotate);
+                SystemConstant.writeStream(is, outputStream);
+
+                //裁切原图旋转生成
+                String imageOldPath = imagePath + ".jpg";
+                String imageTempPath = imagePath + "temp.jpg";
+                File imageOldFile = new File(imageOldPath);
+                //读取指定路径下面的文件
+                File imageTempFile = new File(imageTempPath);
+                is = new FileInputStream(imageOldPath);
+                outputStream = new FileOutputStream(imageTempFile);
+                SystemConstant.writeStream(is, outputStream);
+                //生成旋转图
+                File imageNewFile = new File(imageNew + "_" + start + ".jpg");
+                imageTempFile.renameTo(imageNewFile);
+                ImageCompression.rotate(imageNewFile, imageTempFile, degree);
+                imageOldFile.renameTo(imageNewFile);
+                is = new FileInputStream(imageTempFile);
+                File imageRotate = new File(imagePath + ".jpg");
+                outputStream = new FileOutputStream(imageRotate);
+                SystemConstant.writeStream(is, outputStream);
+
+                is = new FileInputStream(imageRotate);
+                sliceMD5 = DigestUtils.md5Hex(is);
+                if (Objects.nonNull(is)) {
+                    is.close();
+                }
+                if (Objects.nonNull(outputStream)) {
+                    outputStream.flush();
+                    outputStream.close();
+                }
+                if (Objects.nonNull(thumbTempFile) && thumbTempFile.exists()) {
+                    thumbTempFile.delete();
+                }
+                if (Objects.nonNull(imageTempFile) && imageTempFile.exists()) {
+                    imageTempFile.delete();
+                }
+            } else {
+                thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                        + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
+                thumbNew = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                        + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + "_" + start + ".jpg";
+                imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                        + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
+                imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                        + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + "_" + start + ".jpg";
+                File thumbFile = new File(thumbPath);
+                if (thumbFile.exists()) {
+                    thumbFile.renameTo(new File(thumbNew));
+                    InputStream is = new FileInputStream(thumbNew);
+                    ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
+                    is.close();
+                }
+
+                File imageFile = new File(imagePath);
+                if (imageFile.exists()) {
+                    imageFile.renameTo(new File(imageNew));
+                    InputStream is = new FileInputStream(imageNew);
+                    ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
+                    is.close();
+                }
+                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);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException ioe) {
+            ioe.printStackTrace();
+        } finally {
+            papers.remove(paper.getExamNumber());
+        }
+    }
 }

+ 4 - 4
stmms-ms-commons/src/main/java/cn/com/qmth/stmms/ms/commons/utils/image/ImageCompression.java

@@ -32,7 +32,7 @@ public class ImageCompression {
         int sizeHeight = config.getMinHeight();
 
         if (config.getPercent() != null && config.getPercent() > 0 && config.getPercent() <= 100) {
-            float percent = (float)config.getPercent() / 100;
+            float percent = (float) config.getPercent() / 100;
             sizeWidth = (int) (sizeWidth * percent);
             sizeHeight = (int) (sizeHeight * percent);
             if (sizeWidth < config.getMinWith()) {
@@ -63,8 +63,8 @@ public class ImageCompression {
         Thumbnails.of(image).scale(1f).outputQuality(1f).rotate(degree).outputFormat("jpg").toFile(out);
     }
 
-    public static void imageThumbnail(File in,File out,ImageCompressionConfig config) throws IOException{
-        if(config == null){
+    public static void imageThumbnail(File in, File out, ImageCompressionConfig config) throws IOException {
+        if (config == null) {
             Thumbnails.of(in).scale(1f).outputQuality(1f).outputFormat("jpg").toFile(out);
             return;
         }
@@ -79,6 +79,6 @@ public class ImageCompression {
             width = sizeHeight;
             height = sizeWidth;
         }
-        Thumbnails.of(in).size(width,height).outputQuality(1f).outputFormat("jpg").toFile(out);
+        Thumbnails.of(in).size(width, height).outputQuality(1f).outputFormat("jpg").toFile(out);
     }
 }

+ 1 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java

@@ -120,8 +120,7 @@ public class MarkTaskApi {
     /**
      * 跳过评卷任务
      *
-     * @param markTask 评卷你任务id
-     * @param body     评卷内容
+     * @param markTaskId 评卷你任务id
      * @return
      */
     @RequestMapping(value = "{markTaskId}/skip", method = RequestMethod.POST)

+ 35 - 4
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskAssembler.java

@@ -1,9 +1,13 @@
 package cn.com.qmth.stmms.ms.marking.assembler;
 
+import cn.com.qmth.stmms.ms.commons.config.ImageConfig;
 import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
+import cn.com.qmth.stmms.ms.commons.constant.SystemConstant;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
+import cn.com.qmth.stmms.ms.core.domain.Student;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
+import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -17,7 +21,14 @@ public class MarkTaskAssembler {
     @Autowired
     private SystemConfig systemConfig;
 
+    @Autowired
+    ImageConfig imageConfig;
+
+    @Autowired
+    StudentRepo studentRepo;
+
     public MarkTaskDTO toDTO(MarkTask markTask) {
+
         MarkTaskDTO markTaskDTO = null;
         if (markTask != null) {
             markTaskDTO = new MarkTaskDTO();
@@ -36,8 +47,18 @@ public class MarkTaskAssembler {
             }
             markTaskDTO.setSn(markTask.getSecretNumber());
             markTaskDTO.setRedoLevel(paper.getRedoLevel());
-            String imgSrc = systemConfig.getImageUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
-            String thumbSrc = systemConfig.getThumbUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+            String imgSrc = null;
+            String thumbSrc = null;
+            if (imageConfig.isImageEnc()) {
+                Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
+                imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
+                thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
+            } else {
+                imgSrc = systemConfig.getImageUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+                thumbSrc = systemConfig.getThumbUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+            }
+//            String imgSrc = systemConfig.getImageUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+//            String thumbSrc = systemConfig.getThumbUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
             markTaskDTO.setThumbSrc(thumbSrc);
             markTaskDTO.setImgSrc(imgSrc);
             markTaskDTO.setSample(paper.isSample());
@@ -65,8 +86,18 @@ public class MarkTaskAssembler {
             }
             markTaskDTO.setSn(markTask.getSecretNumber());
             markTaskDTO.setRedoLevel(paper.getRedoLevel());
-            String imgSrc = systemConfig.getImageUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
-            String thumbSrc = systemConfig.getThumbUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+            String imgSrc = null;
+            String thumbSrc = null;
+            if (imageConfig.isImageEnc()) {
+                Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
+                imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
+                thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
+            } else {
+                imgSrc = systemConfig.getImageUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+                thumbSrc = systemConfig.getThumbUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+            }
+//            String imgSrc = systemConfig.getImageUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+//            String thumbSrc = systemConfig.getThumbUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
             markTaskDTO.setThumbSrc(thumbSrc);
             markTaskDTO.setImgSrc(imgSrc);
             markTaskDTO.setSample(paper.isSample());