|
@@ -0,0 +1,109 @@
|
|
|
+package cn.com.qmth.stmms.api.controller;
|
|
|
+
|
|
|
+import java.awt.Color;
|
|
|
+import java.awt.Font;
|
|
|
+import java.awt.Graphics2D;
|
|
|
+import java.awt.image.BufferedImage;
|
|
|
+import java.io.ByteArrayInputStream;
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileNotFoundException;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import javax.imageio.ImageIO;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
+import org.springframework.web.bind.annotation.PathVariable;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+
|
|
|
+import cn.com.qmth.stmms.admin.utils.UpyunConfig;
|
|
|
+import cn.com.qmth.stmms.biz.campus.model.Campus;
|
|
|
+import cn.com.qmth.stmms.biz.campus.service.CampusService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
+import cn.com.qmth.stmms.biz.utils.PictureTag;
|
|
|
+import cn.com.qmth.stmms.common.upyun.UpYun;
|
|
|
+import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
|
|
|
+
|
|
|
+@Controller("pictureController")
|
|
|
+@RequestMapping("/api")
|
|
|
+public class PictureController {
|
|
|
+
|
|
|
+ protected static final Logger log = LoggerFactory.getLogger(PictureController.class);
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CampusService campusService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExamStudentService studentService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UpyunConfig config;
|
|
|
+
|
|
|
+ @Value("${sheet.image.server}")
|
|
|
+ private String sheetServer;
|
|
|
+
|
|
|
+ @Value("${file.root}")
|
|
|
+ private String baseDir;
|
|
|
+
|
|
|
+ @RequestMapping("/sheet/{examId}/{examNumber}-{index}")
|
|
|
+ public void getSheet(HttpServletResponse response, @PathVariable Integer examId, @PathVariable String examNumber,
|
|
|
+ @PathVariable Integer index, @RequestParam(required = false, defaultValue = "true") Boolean withTag)
|
|
|
+ throws IOException {
|
|
|
+ ExamStudent student = studentService.findByExamIdAndExamNumber(examId, examNumber);
|
|
|
+ if (student == null || !student.isUpload() || index < 1 || index > student.getSheetCount()) {
|
|
|
+ response.sendError(HttpStatus.NOT_FOUND.value());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ BufferedImage image = getSheetImage(student, index);
|
|
|
+ if (withTag != null && withTag.booleanValue()) {
|
|
|
+ List<PictureTag> tags = studentService.buildSheetTags(student).get(index);
|
|
|
+ if (!tags.isEmpty()) {
|
|
|
+ BufferedImage newImg = new BufferedImage(image.getWidth(), image.getHeight(),
|
|
|
+ BufferedImage.TYPE_INT_RGB);
|
|
|
+ Graphics2D g = newImg.createGraphics();
|
|
|
+ g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
|
|
|
+ g.setColor(Color.RED);
|
|
|
+ g.setFont(new Font("Arial", Font.PLAIN, 50));
|
|
|
+ for (PictureTag tag : tags) {
|
|
|
+ g.drawString(tag.getContent(), tag.getLeft(), tag.getTop());
|
|
|
+ }
|
|
|
+ g.dispose();
|
|
|
+ image = newImg;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ response.setContentType("image/jpeg");
|
|
|
+ ImageIO.write(image, "jpg", response.getOutputStream());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("get sheet error", e);
|
|
|
+ response.reset();
|
|
|
+ response.sendError(HttpStatus.NOT_FOUND.value());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private BufferedImage getSheetImage(ExamStudent student, int index) throws FileNotFoundException, IOException {
|
|
|
+ Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
|
|
|
+ String url = PictureUrlBuilder.getSheetUrl(student.getExamId(), campus.getId(), student.getSubjectCode(),
|
|
|
+ student.getExamNumber(), index);
|
|
|
+ if (StringUtils.isNotBlank(baseDir)) {
|
|
|
+ return ImageIO.read(new File(baseDir, url));
|
|
|
+ } else {
|
|
|
+ UpYun upyun = new UpYun(config.getSheetBucket(), config.getSheetUsername(), config.getSheetPassword());
|
|
|
+ ByteArrayOutputStream ous = new ByteArrayOutputStream();
|
|
|
+ upyun.readFile(url, ous);
|
|
|
+ return ImageIO.read(new ByteArrayInputStream(ous.toByteArray()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|