ソースを参照

add:评卷参数结构保存

caozixuan 3 年 前
コミット
126a07a34e
18 ファイル変更326 行追加23 行削除
  1. 43 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/marking/CardJpgResult.java
  2. 32 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/marking/ConvertJpgStorage.java
  3. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCardDetail.java
  4. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicTemplateService.java
  5. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardService.java
  6. 12 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPaperStructureService.java
  7. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java
  8. 25 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  9. 37 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java
  10. 6 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  11. 107 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/HtmlToJpgUtil.java
  12. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicTemplateController.java
  13. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java
  14. 9 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPaperStructureController.java
  15. 22 0
      distributed-print/src/test/java/com/qmth/distributed/print/ConvertUtilTest.java
  16. 9 0
      distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java
  17. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  18. 5 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ConvertUtil.java

+ 43 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/marking/CardJpgResult.java

@@ -0,0 +1,43 @@
+package com.qmth.distributed.print.business.bean.marking;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 题卡jpg文件返回结果
+ * @Author: CaoZixuan
+ * @Date: 2022-04-15
+ */
+public class CardJpgResult {
+    @ApiModelProperty("jpg文件名")
+    private String name;
+
+    @ApiModelProperty("jpg文件是题卡第几页")
+    private Integer index;
+
+    @ApiModelProperty("jpg文件预览路径")
+    private String path;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getIndex() {
+        return index;
+    }
+
+    public void setIndex(Integer index) {
+        this.index = index;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+}

+ 32 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/marking/ConvertJpgStorage.java

@@ -0,0 +1,32 @@
+package com.qmth.distributed.print.business.bean.marking;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 转化的pdf文件存储
+ * @Author: CaoZixuan
+ * @Date: 2022-04-15
+ */
+public class ConvertJpgStorage {
+    @ApiModelProperty("jpg附件id")
+    private Long attachmentId;
+
+    @ApiModelProperty("jpg是题卡的第几页")
+    private Integer index;
+
+    public Long getAttachmentId() {
+        return attachmentId;
+    }
+
+    public void setAttachmentId(Long attachmentId) {
+        this.attachmentId = attachmentId;
+    }
+
+    public Integer getIndex() {
+        return index;
+    }
+
+    public void setIndex(Integer index) {
+        this.index = index;
+    }
+}

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCardDetail.java

@@ -39,6 +39,9 @@ public class ExamCardDetail extends BaseEntity implements Serializable {
     @TableField("cust_attachment_id")
     private String custAttachmentId;
 
+    @TableField("jpg_attachment_info")
+    private String jpgAttachmentInfo;
+
     public Long getCardId() {
         return cardId;
     }
@@ -78,4 +81,12 @@ public class ExamCardDetail extends BaseEntity implements Serializable {
     public void setCustAttachmentId(String custAttachmentId) {
         this.custAttachmentId = custAttachmentId;
     }
+
+    public String getJpgAttachmentInfo() {
+        return jpgAttachmentInfo;
+    }
+
+    public void setJpgAttachmentInfo(String jpgAttachmentInfo) {
+        this.jpgAttachmentInfo = jpgAttachmentInfo;
+    }
 }

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicTemplateService.java

@@ -18,7 +18,7 @@ public interface BasicTemplateService extends IService<BasicTemplate> {
 
     IPage<TemplateDto> list(Boolean enable, String type, String name, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
 
-    boolean saveTemplate(BasicTemplate template);
+    boolean saveTemplate(BasicTemplate template) throws Exception;
 
     boolean enable(BasicTemplate template);
 

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardService.java

@@ -23,7 +23,7 @@ import java.util.List;
  */
 public interface ExamCardService extends IService<ExamCard> {
 
-    String saveExamCard(ExamCardParams examCardParams);
+    String saveExamCard(ExamCardParams examCardParams) throws Exception;
 
     IPage<CardCustDto> listCardCust(String schoolId, String status, String paperNumber, String userId, Long applyStartTime, Long applyEndTime, Long finishStartTime, Long finishEndTime, Integer pageNumber, Integer pageSize);
 
@@ -43,7 +43,7 @@ public interface ExamCardService extends IService<ExamCard> {
 
     IPage<ExamCard> listPage(String type, String title, String createMethod, Boolean enable, Long createStartTime, Long createEndTime, Integer pageNumber, Integer pageSize);
 
-    Long saveGeneric(GenericExamCardParams params);
+    Long saveGeneric(GenericExamCardParams params) throws Exception;
 
     Boolean deleteGeneric(Long id);
 }

+ 12 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPaperStructureService.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.marking.CardJpgResult;
 import com.qmth.distributed.print.business.bean.marking.EvaluationParameters;
 import com.qmth.distributed.print.business.entity.ExamPaperStructure;
 import com.qmth.distributed.print.business.enums.ExamPaperStructureStatusEnum;
@@ -44,8 +45,18 @@ public interface ExamPaperStructureService extends IService<ExamPaperStructure>
     /**
      * 更新客观题答案
      *
-     * @param id 试卷结构表Id
+     * @param id                 试卷结构表Id
      * @param objectiveStructure 客观题结构json
      */
     ExamPaperStructure updateObjectiveAnswer(Long id, String objectiveStructure);
+
+    /**
+     * 根据条件查找jpg文件路径
+     *
+     * @param examId      考试id
+     * @param courseCode  课程编号
+     * @param paperNumber 试卷编号
+     * @return 题卡jpg文件结果
+     */
+    List<CardJpgResult> findCardJpgFileByPaperNumber(Long examId, String courseCode, String paperNumber);
 }

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java

@@ -84,7 +84,7 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
 
     @Transactional
     @Override
-    public boolean saveTemplate(BasicTemplate template) {
+    public boolean saveTemplate(BasicTemplate template) throws Exception {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         template.setSchoolId(schoolId);

+ 25 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -7,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
+import com.qmth.distributed.print.business.bean.marking.ConvertJpgStorage;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.bean.params.GenericExamCardParams;
 import com.qmth.distributed.print.business.entity.*;
@@ -16,6 +18,7 @@ import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.distributed.print.business.enums.TemplateTypeEnum;
 import com.qmth.distributed.print.business.mapper.ExamCardMapper;
 import com.qmth.distributed.print.business.service.*;
+import com.qmth.distributed.print.business.util.HtmlToJpgUtil;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
@@ -24,6 +27,7 @@ import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.PageSizeEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
@@ -74,9 +78,12 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     @Resource
     BasicTemplateOrgService basicTemplateOrgService;
 
+    @Resource
+    HtmlToJpgUtil htmlToJpgUtil;
+
     @Transactional
     @Override
-    public String saveExamCard(ExamCardParams examCardParams) {
+    public String saveExamCard(ExamCardParams examCardParams) throws Exception {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser user = (SysUser) ServletUtil.getRequestUser();
 
@@ -112,6 +119,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             examCardDetail.setCardId(examCard.getId());
             examCardDetail.setContent(examCardParams.getContent());
             examCardDetail.setHtmlContent(examCardParams.getHtmlContent());
+            examCardDetail.setJpgAttachmentInfo(JSON.toJSONString(htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getTitle(),examCardParams.getHtmlContent(),PageSizeEnum.A3)));
             examCardDetail.setAttachmentId(examCardParams.getAttachmentId());
             examCardDetail.insertInfo(user.getId());
             examCardDetailService.save(examCardDetail);
@@ -137,6 +145,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             }
             examCardDetail.setContent(examCardParams.getContent());
             examCardDetail.setHtmlContent(examCardParams.getHtmlContent());
+            examCardDetail.setJpgAttachmentInfo(JSON.toJSONString(htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getTitle(),examCardParams.getHtmlContent(),PageSizeEnum.A3)));
             examCardDetail.setAttachmentId(examCardParams.getAttachmentId());
             examCardDetail.updateInfo(user.getId());
             examCardDetailService.updateById(examCardDetail);
@@ -297,7 +306,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
 
     @Transactional
     @Override
-    public Long saveGeneric(GenericExamCardParams params) {
+    public Long saveGeneric(GenericExamCardParams params) throws Exception {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 
@@ -337,6 +346,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             examCardDetail.setCreateId(sysUser.getId());
             examCardDetail.setCreateTime(System.currentTimeMillis());
             // 方式为上传
+            String htmlContent = "";
             if (CardCreateMethodEnum.UPLOAD.equals(params.getCreateMethod())) {
                 if (params.getAttachmentId() == null) {
                     throw ExceptionResultEnum.ERROR.exception("请上传模板文件");
@@ -348,15 +358,19 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
                 if (!".html".equalsIgnoreCase(attachment.getType())) {
                     throw ExceptionResultEnum.ERROR.exception("只能上传后缀为.html文件");
                 }
-                examCardDetail.setHtmlContent(teachcloudCommonService.readFileContent(attachment.getPath()));
+                htmlContent = teachcloudCommonService.readFileContent(attachment.getPath());
+                examCardDetail.setHtmlContent(htmlContent);
             }
             // 方式为自定义
             else if (CardCreateMethodEnum.STANDARD.equals(params.getCreateMethod()) || CardCreateMethodEnum.FREE.equals(params.getCreateMethod())) {
                 examCardDetail.setContent(params.getContent());
-                examCardDetail.setHtmlContent(params.getHtmlContent());
+                htmlContent = params.getHtmlContent();
+                examCardDetail.setHtmlContent(htmlContent);
             } else {
                 throw ExceptionResultEnum.ERROR.exception("题卡创建方式异常");
             }
+            List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getTitle(),htmlContent, PageSizeEnum.A3);
+            examCardDetail.setJpgAttachmentInfo(JSON.toJSONString(convertJpgStorageList));
             examCardDetailService.save(examCardDetail);
         }
         // 修改
@@ -378,6 +392,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             examCardDetail = examCardDetailService.getByCardId(params.getId());
             examCardDetail.setUpdateId(sysUser.getId());
             examCardDetail.setUpdateTime(System.currentTimeMillis());
+            String htmlContent = "";
             // 方式为上传
             if (CardCreateMethodEnum.UPLOAD.equals(params.getCreateMethod())) {
                 if (params.getAttachmentId() == null) {
@@ -390,17 +405,21 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
                 if (!".html".equalsIgnoreCase(attachment.getType())) {
                     throw ExceptionResultEnum.ERROR.exception("只能上传后缀为.html文件");
                 }
-                examCardDetail.setHtmlContent(teachcloudCommonService.readFileContent(attachment.getPath()));
+                htmlContent = teachcloudCommonService.readFileContent(attachment.getPath());
+                examCardDetail.setHtmlContent(htmlContent);
                 // 上传题卡,状态为提交
                 examCard.setStatus(CardStatusEnum.SUBMIT);
             }
             // 方式为自定义
             else if (CardCreateMethodEnum.STANDARD.equals(params.getCreateMethod()) || CardCreateMethodEnum.FREE.equals(params.getCreateMethod())) {
                 examCardDetail.setContent(params.getContent());
-                examCardDetail.setHtmlContent(params.getHtmlContent());
+                htmlContent = params.getHtmlContent();
+                examCardDetail.setHtmlContent(htmlContent);
             } else {
                 throw ExceptionResultEnum.ERROR.exception("题卡创建方式异常");
             }
+            List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getTitle(),htmlContent, PageSizeEnum.A3);
+            examCardDetail.setJpgAttachmentInfo(JSON.toJSONString(convertJpgStorageList));
             examCardDetailService.updateById(examCardDetail);
 
             //删除权限

+ 37 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java

@@ -12,12 +12,8 @@ import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.ExamPaperObjectiveStructureDto;
 import com.qmth.distributed.print.business.bean.dto.ExamPaperStructureDto;
 import com.qmth.distributed.print.business.bean.dto.ExamPaperSubjectiveStructureDto;
-import com.qmth.distributed.print.business.bean.marking.BasicPaperInfo;
-import com.qmth.distributed.print.business.bean.marking.EvaluationParameters;
-import com.qmth.distributed.print.business.bean.marking.PaperStructureInfo;
-import com.qmth.distributed.print.business.entity.ExamPaperStructure;
-import com.qmth.distributed.print.business.entity.ExamTask;
-import com.qmth.distributed.print.business.entity.ExamTaskDetail;
+import com.qmth.distributed.print.business.bean.marking.*;
+import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamPaperStructureStatusEnum;
 import com.qmth.distributed.print.business.enums.ExamPrintPlanSyncStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamPaperStructureMapper;
@@ -30,6 +26,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
+import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.sync.CloudMarkingTaskUtils;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -47,6 +44,7 @@ import javax.annotation.Resource;
 import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -81,6 +79,15 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
     @Resource
     ExamPaperGroupService examPaperGroupService;
 
+    @Resource
+    ExamCardService examCardService;
+
+    @Resource
+    ExamCardDetailService examCardDetailService;
+
+    @Resource
+    TeachcloudCommonService teachcloudCommonService;
+
     @Override
     public IPage<ExamPaperStructure> listByPropositionTeacherId(Long semesterId, Long examId, Integer pageNumber, Integer pageSize, String[] structureStatusEnums) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -297,6 +304,30 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
         return examPaperStructure;
     }
 
+    @Override
+    public List<CardJpgResult> findCardJpgFileByPaperNumber(Long examId, String courseCode, String paperNumber) {
+        Long examTaskId = examTaskService.getOne(new QueryWrapper<ExamTask>().lambda()
+                .eq(ExamTask::getExamId,examId)
+                .eq(ExamTask::getCourseCode,courseCode)
+                .eq(ExamTask::getPaperNumber,paperNumber)).getId();
+        Long cardId = examTaskDetailService.getOne(new QueryWrapper<ExamTaskDetail>().lambda()
+                .eq(ExamTaskDetail::getExamTaskId,examTaskId)).getCardId();
+        String jpgAttachmentInfo = examCardDetailService.getOne(new QueryWrapper<ExamCardDetail>().lambda()
+                .eq(ExamCardDetail::getCardId,cardId)).getJpgAttachmentInfo();
+
+        List<ConvertJpgStorage> convertJpgStorageList = JSONObject.parseArray(jpgAttachmentInfo,ConvertJpgStorage.class);
+
+        return convertJpgStorageList.stream().flatMap(e -> {
+            BasicAttachment basicAttachment = basicAttachmentService.getById(e.getAttachmentId());
+
+            CardJpgResult cardJpgResult = new CardJpgResult();
+            cardJpgResult.setName(basicAttachment.getName());
+            cardJpgResult.setIndex(e.getIndex());
+            cardJpgResult.setPath(teachcloudCommonService.filePreview(basicAttachment.getPath()));
+            return Stream.of(cardJpgResult);
+        }).collect(Collectors.toList());
+    }
+
     /**
      * 保存试卷结构
      *

+ 6 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -469,7 +469,12 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         }
         BasicAttachment basicAttachment = null;
         try {
-            SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+            // TODO: 2022/4/14 临时测试生成user
+//            SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+            SysUser requestUser = new SysUser();
+            requestUser.setId(1L);
+
+
             int temp = file.getOriginalFilename().lastIndexOf(".");
             String fileName = file.getOriginalFilename().substring(0, temp);
             String format = file.getOriginalFilename().substring(temp, file.getOriginalFilename().length());

+ 107 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/HtmlToJpgUtil.java

@@ -0,0 +1,107 @@
+package com.qmth.distributed.print.business.util;
+
+import com.qmth.distributed.print.business.bean.marking.ConvertJpgStorage;
+import com.qmth.distributed.print.business.service.PrintCommonService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicAttachment;
+import com.qmth.teachcloud.common.enums.PageSizeEnum;
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.common.util.ConvertUtil;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.http.entity.ContentType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.stereotype.Component;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @Description: 题卡html转化为
+ * @Author: CaoZixuan
+ * @Date: 2022-04-14
+ */
+@Component
+public class HtmlToJpgUtil {
+    @Lazy
+    @Resource
+    PrintCommonService printCommonService;
+
+    private final static Logger log = LoggerFactory.getLogger(HtmlToJpgUtil.class);
+
+    /**
+     * 转换html -> jpg : 生成本地临时文件
+     * @param cardTitle 题卡名称
+     * @param htmlContent html内容
+     * @param pageSizeEnum 转化pdf的纸张类型
+     */
+    public List<BasicAttachment> convertHtmlToJpg(String cardTitle, String htmlContent, PageSizeEnum pageSizeEnum) throws Exception {
+        // 本地存储目录
+        String rootPath = SystemConstant.TEMP_FILES_DIR + File.separator + System.currentTimeMillis();
+        // html临时路径
+        String htmlPath = rootPath + File.separator + "html" + File.separator + cardTitle + SystemConstant.HTML_PREFIX;
+        // pdf临时路径
+        String pdfPath = rootPath + File.separator + "pdf" + File.separator + cardTitle + SystemConstant.PDF_PREFIX;
+        // jpg临时路径
+        String jpgPath = rootPath + File.separator + "jpg" + File.separator + cardTitle;
+        List<BasicAttachment> basicAttachmentList = new ArrayList<>();
+        // html
+        try {
+            File htmlFile = new File(htmlPath);
+            if (!htmlFile.getParentFile().exists()) {
+                htmlFile.getParentFile().mkdirs();
+            }
+            // 生成html文件
+            FileCopyUtils.copy(htmlContent.getBytes(), htmlFile);
+            // 转pdf文件
+            File pdfFile = new File(pdfPath);
+            if (!pdfFile.getParentFile().exists()) {
+                pdfFile.getParentFile().mkdirs();
+            }
+            HtmlToPdfUtil.convert(htmlPath, pdfPath, pageSizeEnum);
+            // pdf文件转jpg
+            List<File> jpgFileList = ConvertUtil.pdfToImageFile(pdfPath,jpgPath);
+
+            for (File jpgFile : jpgFileList) {
+                InputStream inputStream = new FileInputStream(jpgFile);
+                MultipartFile multipartFile = new MockMultipartFile(jpgFile.getName(), jpgFile.getName(),
+                        ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);
+                BasicAttachment basicAttachment = printCommonService.saveAttachment(multipartFile, DigestUtils.md5Hex(multipartFile.getBytes()), UploadFileEnum.FILE);
+                basicAttachmentList.add(basicAttachment);
+            }
+        }catch (Exception e){
+            log.error(e.getMessage());
+        }finally {
+            ConvertUtil.delFolder(rootPath);
+        }
+        return basicAttachmentList;
+    }
+
+    /**
+     * 转换html -> jpg : 生成本地临时文件
+     * @param cardTitle 题卡名称
+     * @param htmlContent html内容
+     * @param pageSizeEnum 转化pdf的纸张类型
+     */
+    public List<ConvertJpgStorage> convertHtmlToJpgByCard(String cardTitle, String htmlContent, PageSizeEnum pageSizeEnum) throws Exception {
+        return this.convertHtmlToJpg(cardTitle,htmlContent,pageSizeEnum).stream().flatMap(e -> {
+            ConvertJpgStorage tmp = new ConvertJpgStorage();
+            String name = e.getName();
+            String index = name.substring(name.lastIndexOf("-") + 1);
+
+            tmp.setAttachmentId(e.getId());
+            tmp.setIndex(Integer.valueOf(index));
+            return Stream.of(tmp);
+        }).collect(Collectors.toList());
+    }
+}

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicTemplateController.java

@@ -82,7 +82,7 @@ public class BasicTemplateController {
      */
     @ApiOperation(value = "新增/修改")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
-    public Result save(@RequestBody BasicTemplate template) {
+    public Result save(@RequestBody BasicTemplate template) throws Exception {
         boolean isSuccess = basicTemplateService.saveTemplate(template);
         return ResultUtil.ok(isSuccess);
     }

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java

@@ -81,7 +81,7 @@ public class ExamCardController {
      */
     @ApiOperation(value = "新增/修改")
     @RequestMapping(value = "/save_generic", method = RequestMethod.POST)
-    public Result save(@RequestBody GenericExamCardParams params) {
+    public Result save(@RequestBody GenericExamCardParams params) throws Exception {
         Long id = examCardService.saveGeneric(params);
         return ResultUtil.ok(String.valueOf(id),"");
     }
@@ -108,7 +108,7 @@ public class ExamCardController {
      */
     @ApiOperation(value = "新建")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
-    public Result save(@RequestBody ExamCardParams examCardParams) {
+    public Result save(@RequestBody ExamCardParams examCardParams) throws Exception {
         String cardId = examCardService.saveExamCard(examCardParams);
         return ResultUtil.ok(cardId, "");
     }

+ 9 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPaperStructureController.java

@@ -136,5 +136,14 @@ public class ExamPaperStructureController {
         return ResultUtil.ok(list);
     }
 
+
+    @ApiOperation(value = "评卷参数设置-获取题卡图片")
+    @RequestMapping(value = "/find_jpg_file", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findCardJpgFileByPaperNumber(@ApiParam(value = "考试id",required = true) @RequestParam String examId,
+                                               @ApiParam(value = "课程代码",required = true) @RequestParam String courseCode,
+                                               @ApiParam(value = "试卷编号",required = true) @RequestParam String paperNumber) {
+        return ResultUtil.ok(examPaperStructureService.findCardJpgFileByPaperNumber(SystemConstant.convertIdToLong(examId),courseCode,paperNumber));
+    }
 }
 

ファイルの差分が大きいため隠しています
+ 22 - 0
distributed-print/src/test/java/com/qmth/distributed/print/ConvertUtilTest.java


+ 9 - 0
distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.distributed.print.business.bean.dto.examObject.ExamObjectDto;
+import com.qmth.distributed.print.business.bean.marking.CardJpgResult;
 import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
 import com.qmth.distributed.print.business.entity.ExamCardDetail;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
@@ -59,6 +60,8 @@ public class ServiceTest {
     private BasicPrintConfigService basicPrintConfigService;
     @Resource
     private ExamStudentMapper examStudentMapper;
+    @Resource
+    private ExamPaperStructureService examPaperStructureService;
 
 
     @Test
@@ -177,4 +180,10 @@ public class ServiceTest {
         System.out.println(JSON.toJSONString(examStudentList));
     }
 
+    @Test
+    public void findCardJpgFileByPaperNumber(){
+        List<CardJpgResult> resultList = examPaperStructureService.findCardJpgFileByPaperNumber(237292182900310016L,"yznwl","yznwl-0415-001");
+        System.out.println(JSON.toJSONString(resultList));
+    }
+
 }

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -70,6 +70,7 @@ public class SystemConstant {
     public static final String PDF_PREFIX = ".pdf";
     public static final String FTL_PREFIX = ".ftl";
     public static final String ZIP_PREFIX = ".zip";
+    public static final String JPG_PREFIX = ".jpg";
     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
     public static final int PAGE_NUMBER = 0;
     public static final int PAGE_SIZE = 10000000;

+ 5 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ConvertUtil.java

@@ -361,11 +361,12 @@ public class ConvertUtil {
         }
     }
 
-    public static void pdfToImageFile(String sourcePath,String targetPath) throws Exception {
+    public static List<File> pdfToImageFile(String sourcePath, String targetPath) throws Exception {
         PDDocument doc = null;
         ByteArrayOutputStream os = null;
         InputStream stream = null;
         OutputStream out = null;
+        List<File> fileList = new ArrayList<>();
         try {
             // pdf路径
             stream = new FileInputStream(sourcePath);
@@ -380,7 +381,7 @@ public class ConvertUtil {
                 ImageIO.write(bim, "jpg", os);
                 byte[] dataList = os.toByteArray();
                 // jpg文件转出路径
-                File file = new File(targetPath + i + ".jpg");
+                File file = new File(targetPath + "-" + (i + 1) + ".jpg");
                 if (!file.getParentFile().exists()) {
                     // 不存在则创建父目录及子文件
                     file.getParentFile().mkdirs();
@@ -388,6 +389,7 @@ public class ConvertUtil {
                 }
                 out = new FileOutputStream(file);
                 out.write(dataList);
+                fileList.add(file);
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -398,5 +400,6 @@ public class ConvertUtil {
             if (stream != null) stream.close();
             if (out != null) out.close();
         }
+        return fileList;
     }
 }

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません