|
@@ -1,73 +1,154 @@
|
|
package cn.com.qmth.stmms.ms.collect.util;
|
|
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.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.commons.utils.image.ImageCompression;
|
|
import cn.com.qmth.stmms.ms.core.domain.Paper;
|
|
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.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 Paper paper;
|
|
private int degree;
|
|
private int degree;
|
|
private PaperRepo paperRepo;
|
|
private PaperRepo paperRepo;
|
|
private SystemConfig systemConfig;
|
|
private SystemConfig systemConfig;
|
|
private HashSet<String> papers;
|
|
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.degree = degree;
|
|
this.paperRepo = paperRepo;
|
|
this.paperRepo = paperRepo;
|
|
this.systemConfig = systemConfig;
|
|
this.systemConfig = systemConfig;
|
|
this.papers = papers;
|
|
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());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|