Explorar o código

Merge remote-tracking branch 'origin/dev_v2.2.2' into dev_v2.2.2

wangliang %!s(int64=3) %!d(string=hai) anos
pai
achega
044495de2b
Modificáronse 18 ficheiros con 291 adicións e 23 borrados
  1. 5 0
      distributed-print-business/pom.xml
  2. 14 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetail.java
  3. 27 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskDetail.java
  4. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  5. 6 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientServiceImpl.java
  6. 15 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  7. 14 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  8. 10 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  9. 14 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/PdfUtil.java
  10. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ClientController.java
  11. 3 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java
  12. 91 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  13. 1 0
      distributed-print/src/test/java/com/qmth/distributed/print/AuthHelpTest.java
  14. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  15. 10 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PageSizeEnum.java
  16. 45 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PdfTypeEnum.java
  17. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileStoreUtil.java
  18. 32 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileUtil.java

+ 5 - 0
distributed-print-business/pom.xml

@@ -197,6 +197,11 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>5.2.12.RELEASE</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 14 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetail.java

@@ -93,11 +93,15 @@ public class ExamDetail extends BaseEntity implements Serializable {
     @TableField("print_end_time")
     private Long printEndTime;
 
-    @ApiModelProperty(value = "附件id")
+    @ApiModelProperty(value = "合成pdf的A3附件id")
     @TableField(value = "attachment_id")
     private Long attachmentId;
 
-    @ApiModelProperty(value = "附件路径")
+    @ApiModelProperty(value = "题卡合成pdf的A3附件id")
+    @TableField(value = "card_attachment_id")
+    private Long cardAttachmentId;
+
+    @ApiModelProperty(value = "印品附件路径")
     @TableField("attachment_path")
     private String attachmentPath;
 
@@ -301,4 +305,12 @@ public class ExamDetail extends BaseEntity implements Serializable {
     public void setPrintHouseId(Long printHouseId) {
         this.printHouseId = printHouseId;
     }
+
+    public Long getCardAttachmentId() {
+        return cardAttachmentId;
+    }
+
+    public void setCardAttachmentId(Long cardAttachmentId) {
+        this.cardAttachmentId = cardAttachmentId;
+    }
 }

+ 27 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskDetail.java

@@ -39,6 +39,7 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
 
     @TableField("draw_count")
     private Integer drawCount;
+
     /**
      * [
      * {
@@ -53,6 +54,24 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
      * }
      * ]
      */
+    @ApiModelProperty(value = "原试卷附件")
+    @TableField("paper_original_attachment_ids")
+    private String paperOriginalAttachmentIds;
+    /**
+     * [
+     * {
+     * "type": "A",
+     * "attachmentId": 12,
+     * "totalPages": 3
+     * },
+     * {
+     * "type": "B",
+     * "attachmentId": 13,
+     * "totalPages": 2
+     * }
+     * ]
+     */
+    @ApiModelProperty(value = "转换后A3试卷附件")
     @TableField("paper_attachment_ids")
     private String paperAttachmentIds;
     /**
@@ -217,4 +236,12 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
     public void setOperateType(String operateType) {
         this.operateType = operateType;
     }
+
+    public String getPaperOriginalAttachmentIds() {
+        return paperOriginalAttachmentIds;
+    }
+
+    public void setPaperOriginalAttachmentIds(String paperOriginalAttachmentIds) {
+        this.paperOriginalAttachmentIds = paperOriginalAttachmentIds;
+    }
 }

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

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.*;
@@ -45,7 +46,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     PrintTaskTotalDto taskTotalData(Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Long printStartTime, Long printEndTime,Long printingHouseId);
 
-    String taskViewPDF(Long examDetailId);
+    List<JSONObject> taskViewPDF(Long examDetailId);
 
     /**
      * 查询有效的考务字段

+ 6 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientServiceImpl.java

@@ -241,6 +241,9 @@ public class ClientServiceImpl implements ClientService {
             }
 
             if (printContent.contains("CARD")) {
+                Map<String, String> totalCardPathUrl = teachcloudCommonService.filePreviewByAttachmentId(examDetail.getCardAttachmentId(), false);
+                finalMap.put("cardTotal", totalCardPathUrl);
+
                 // 生成题卡List
                 detailMap.put("card", spliceCardContent(studentList));
 
@@ -370,6 +373,9 @@ public class ClientServiceImpl implements ClientService {
         BasicAttachment attachment = basicAttachmentService.getById(examDetail.getAttachmentId());
         finalMap.put("total", attachment == null ? null : teachcloudCommonService.filePreviewByAttachmentId(attachment.getId(), false));
 
+        BasicAttachment cardAttachment = basicAttachmentService.getById(examDetail.getCardAttachmentId());
+        finalMap.put("cardTotal", cardAttachment == null ? null : teachcloudCommonService.filePreviewByAttachmentId(cardAttachment.getId(), false));
+
         ExamPrintPlan examPrintPlan = examPrintPlanService.getById(examDetail.getPrintPlanId());
         String variableContent = examPrintPlan.getVariableContent();
         String ordinaryContent = examPrintPlan.getOrdinaryContent();

+ 15 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -25,6 +25,7 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.MqTagEnum;
+import com.qmth.teachcloud.common.enums.PdfTypeEnum;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ConvertUtil;
@@ -147,13 +148,24 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     }
 
     @Override
-    public String taskViewPDF(Long examDetailId) {
+    public List<JSONObject> taskViewPDF(Long examDetailId) {
         ExamDetail examDetail = this.getById(examDetailId);
+        List<JSONObject> list = new ArrayList<>();
         if (examDetail.getAttachmentId() != null) {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("type", PdfTypeEnum.ALL_A3);
             BasicAttachment attachment = basicAttachmentService.getById(examDetail.getAttachmentId());
-            return attachment == null ? null : teachcloudCommonService.filePreview(attachment.getPath());
+            jsonObject.put("url",attachment == null ? null : teachcloudCommonService.filePreview(attachment.getPath()));
+            list.add(jsonObject);
         }
-        return null;
+        if (examDetail.getCardAttachmentId() != null) {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("type", PdfTypeEnum.CARD_A3);
+            BasicAttachment attachment = basicAttachmentService.getById(examDetail.getCardAttachmentId());
+            jsonObject.put("url",attachment == null ? null : teachcloudCommonService.filePreview(attachment.getPath()));
+            list.add(jsonObject);
+        }
+        return list;
     }
 
     @Transactional(rollbackFor = Exception.class)

+ 14 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -515,14 +515,17 @@ public class TaskLogicServiceImpl implements TaskLogicService {
 
                 createA4File(examPrintPlan, examDetail, basicSchool, ftlList, examDetailCourseList, ordinaryPdfList, variablePdfList);
 
-                //合并pdf
+                //合并A3(试卷+题卡+备用试卷+备用题卡)
                 String dirNameA3 = createPdfUtil.mergeA3Pdf(paperPdfList, examStudentPdfList, backupPaperPdfList, cardPdfList);
+                //合并A4(签到表+卷袋贴+登记表)
                 String dirNameA4 = createPdfUtil.mergeA4Pdf(variablePdfList, ordinaryPdfList);
+                //合并A3(题卡+备用题卡)
+                String dirNameCardA3 = createPdfUtil.mergeA3Pdf(examStudentPdfList, cardPdfList);
 
                 List<PdfDto> mergePdfDeleteList = new ArrayList<>();
                 mergePdfDeleteList.addAll(examStudentPdfList);
                 mergePdfDeleteList.addAll(cardPdfList);
-                BasicAttachment attachment = createPdfUtil.mergePdfSaveDb(dirNameA4, dirNameA3, tbTask, sysUser.getId(), examDetail, basicExamRule, mergePdfDeleteList);
+                BasicAttachment attachment = createPdfUtil.mergePdfSaveDb(dirNameA4, dirNameA3, dirNameCardA3, tbTask, sysUser.getId(), examDetail, basicExamRule, mergePdfDeleteList);
                 if (basicAttachmentList != null) {
                     basicAttachmentList.add(attachment);
                 }
@@ -807,7 +810,15 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             //查询examDetail
             List<ExamDetail> examDetailList = examDetailService.listByIds(Arrays.asList(arraysParams.getIds()));
             if (Objects.nonNull(examDetailList)) {
-                Set<Long> attachmentIds = examDetailList.stream().map(ExamDetail::getAttachmentId).collect(Collectors.toSet());
+                Set<Long> attachmentIds = new HashSet<>();
+                Set<Long> allAttachmentIds = examDetailList.stream().map(ExamDetail::getAttachmentId).collect(Collectors.toSet());
+                if(!CollectionUtils.isEmpty(allAttachmentIds)){
+                    attachmentIds.addAll(allAttachmentIds);
+                }
+                Set<Long> cardAttachmentIds = examDetailList.stream().map(ExamDetail::getCardAttachmentId).collect(Collectors.toSet());
+                if(!CollectionUtils.isEmpty(cardAttachmentIds)){
+                    attachmentIds.addAll(cardAttachmentIds);
+                }
                 List<BasicAttachment> basicAttachmentList = basicAttachmentService.listByIds(attachmentIds);
 
                 if (Objects.nonNull(basicAttachmentList) && basicAttachmentList.size() > 0) {

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java

@@ -663,6 +663,7 @@ public class CreatePdfUtil {
      *
      * @param dirNameA4
      * @param dirNameA3
+     * @param dirNameCardA3
      * @param tbTask
      * @param userId
      * @param examDetail
@@ -674,6 +675,7 @@ public class CreatePdfUtil {
     @Transactional
     public BasicAttachment mergePdfSaveDb(String dirNameA4,
                                           String dirNameA3,
+                                          String dirNameCardA3,
                                           TBTask tbTask,
                                           Long userId,
                                           ExamDetail examDetail,
@@ -695,6 +697,14 @@ public class CreatePdfUtil {
             tbTask.setImportFilePath(basicAttachment.getPath());
             examDetail.setAttachmentId(basicAttachment.getId());
         }
+        if (Objects.nonNull(dirNameCardA3)) {
+            dirNameCardA3 = dirNameCardA3.replaceAll("\\\\", "/");
+            localA3PdfFile = new File(stringJoiner.toString() + File.separator + dirNameCardA3);
+            basicAttachment = basicAttachmentService.saveAttachmentPdf(dirNameCardA3, userId);
+            tbTask.setImportFileName(basicAttachment.getName());
+            tbTask.setImportFilePath(basicAttachment.getPath());
+            examDetail.setCardAttachmentId(basicAttachment.getId());
+        }
         examDetail.setPagesA3(PdfUtil.getPdfPages(localA3PdfFile));
         examDetail.setPagesA4(PdfUtil.getPdfPages(localA4PdfFile));
         if (PrintMethodEnum.AUTO == basicExamRule.getPrintMethod()) {

+ 14 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/PdfUtil.java

@@ -157,20 +157,29 @@ public class PdfUtil {
      * @throws IOException
      */
     public static PageSizeEnum getPdfFormat(File file) throws IOException {
-
-
+        float min;
+        float max;
         Optional.ofNullable(file).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("文件不能为空"));
         PdfReader reader = new PdfReader(ByteArray.fromFile(file).value());
         int totalPages = reader.getNumberOfPages();
         PageSizeEnum pageSizeEnum = null;
-        for (int i = 1;i < totalPages;i ++){
+        for (int i = 1;i <= totalPages;i ++){
             Rectangle pageSize = reader.getPageSize(i);
+            float width = pageSize.getWidth();
+            float height = pageSize.getHeight();
+            if (width <= height){
+                min = width;
+                max = height;
+            }else {
+                min = height;
+                max = width;
+            }
             if (pageSizeEnum != null){
-                if (!pageSizeEnum.equals(PageSizeEnum.convertToEnum(pageSize.getWidth(), pageSize.getHeight()))){
+                if (!pageSizeEnum.equals(PageSizeEnum.convertToEnum(min, max))){
                     throw ExceptionResultEnum.ERROR.exception("上传的试卷pdf中存在纸张格式不一样的");
                 }
             }else {
-                pageSizeEnum = PageSizeEnum.convertToEnum(pageSize.getWidth(), pageSize.getHeight());
+                pageSizeEnum = PageSizeEnum.convertToEnum(min, max);
             }
         }
 

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

@@ -1,6 +1,5 @@
 package com.qmth.distributed.print.api;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.annotation.Aac;

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

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.api;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
@@ -315,8 +316,8 @@ public class ExamPrintPlanController {
     @ApiOperation(value = "印刷任务管理-查看PDF")
     @RequestMapping(value = "/task_view_pdf", method = RequestMethod.POST)
     public Result taskViewPDF(@RequestBody Map<String, Long> map) {
-        String path = examDetailService.taskViewPDF(map.get("examDetailId"));
-        return ResultUtil.ok((Object) path);
+        List<JSONObject> list = examDetailService.taskViewPDF(map.get("examDetailId"));
+        return ResultUtil.ok(list);
     }
 
     @ApiOperation(value = "印刷任务管理-批量下载PDF")

+ 91 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -15,6 +15,7 @@ import com.qmth.distributed.print.business.service.BasicVerifyCodeService;
 import com.qmth.distributed.print.business.service.ExamPrintPlanService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TBSyncTaskService;
+import com.qmth.distributed.print.business.util.PdfUtil;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.result.LoginResult;
 import com.qmth.teachcloud.common.bean.result.UserLoginCheckResult;
@@ -24,13 +25,15 @@ import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import com.qmth.teachcloud.common.service.*;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.common.util.*;
 import io.swagger.annotations.*;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.http.entity.ContentType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
@@ -38,6 +41,10 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
 import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -102,6 +109,9 @@ public class SysController {
     @Resource
     BasicCampusService basicCampusService;
 
+    @Resource
+    FileStoreUtil fileStoreUtil;
+
     /**
      * 登录
      *
@@ -272,6 +282,84 @@ public class SysController {
         return ResultUtil.ok(new EditResult(basicAttachment.getId(), teachcloudCommonService.filePreview(basicAttachment.getPath()), basicAttachment.getPages()));
     }
 
+    @ApiOperation(value = "考试试卷文件上传接口")
+    @RequestMapping(value = "/file/exam_paper_upload", method = RequestMethod.POST)
+    @Transactional
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    public Result fileExamPaperUpload(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
+                             @ApiParam(value = "上传文件类型", required = true) @RequestParam UploadFileEnum type) {
+        Map<String,EditResult> resultMap = new HashMap<>();
+        BasicAttachment basicOriginalAttachment = null;
+        BasicAttachment basicTranslateAttachment = null;
+        EditResult original = new EditResult();
+        EditResult translate = new EditResult();
+        File pdfOriginalFile = null;
+        File localTempFile = null;
+        try {
+            pdfOriginalFile = FileUtil.multipartFileToFile(file);
+            PageSizeEnum pageSizeEnum = PdfUtil.getPdfFormat(pdfOriginalFile);
+            switch (pageSizeEnum){
+                case A3:
+                    basicOriginalAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
+                    if (Objects.isNull(basicOriginalAttachment)) {
+                        throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
+                    }
+                    original.setId(basicOriginalAttachment.getId());
+                    original.setUrl(teachcloudCommonService.filePreview(basicOriginalAttachment.getPath()));
+                    original.setPages(basicOriginalAttachment.getPages());
+
+                    BeanUtils.copyProperties(original,translate);
+                    break;
+                case A4:
+                    basicOriginalAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
+                    if (Objects.isNull(basicOriginalAttachment)) {
+                        throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
+                    }
+                    original.setId(basicOriginalAttachment.getId());
+                    original.setUrl(teachcloudCommonService.filePreview(basicOriginalAttachment.getPath()));
+                    original.setPages(basicOriginalAttachment.getPages());
+
+                    String destUrl = SystemConstant.PDF_TEMP_FILES_DIR + File.separator + file.getOriginalFilename();
+                    localTempFile = new File(destUrl);
+                    OutputStream out = new FileOutputStream(localTempFile);
+                    PdfUtil.concatPDFs(new FileInputStream(pdfOriginalFile),out,false);
+                    // File转换成MutipartFile
+                    FileInputStream inputStream = new FileInputStream(localTempFile);
+                    MultipartFile multipartFile = new MockMultipartFile(localTempFile.getName(),localTempFile.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);
+                    basicTranslateAttachment = printCommonService.saveAttachment(multipartFile, DigestUtils.md5Hex(multipartFile.getBytes()), type);
+                    translate.setId(basicTranslateAttachment.getId());
+                    translate.setUrl(teachcloudCommonService.filePreview(basicTranslateAttachment.getPath()));
+                    translate.setPages(basicTranslateAttachment.getPages());
+                    break;
+                default:
+                    throw ExceptionResultEnum.ERROR.exception("请上传A4或A3格式的试卷文件");
+            }
+            resultMap.put("original",original);
+            resultMap.put("translate",translate);
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            if (Objects.nonNull(basicOriginalAttachment)) {
+                basicAttachmentService.deleteAttachment(basicOriginalAttachment);
+            }
+            if (Objects.nonNull(basicTranslateAttachment)) {
+                basicAttachmentService.deleteAttachment(basicTranslateAttachment);
+            }
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            if (Objects.nonNull(localTempFile)){
+                FileUtil.deleteFile(localTempFile);
+            }
+            if (Objects.nonNull(pdfOriginalFile)){
+                FileUtil.deleteFile(pdfOriginalFile);
+            }
+        }
+        return ResultUtil.ok(resultMap);
+    }
+
     @ApiOperation(value = "文件下载接口")
     @RequestMapping(value = "/file/download", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})

+ 1 - 0
distributed-print/src/test/java/com/qmth/distributed/print/AuthHelpTest.java

@@ -10,6 +10,7 @@ import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;

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

@@ -87,6 +87,7 @@ public class SystemConstant {
     public static final String REGULAR_EXPRESSION_OF_PHONE = "((\\d{3,4})|(\\(\\d{3,4}\\)-))?\\d{7,8}";
     public static final String SYS_USER = "sysUser";
     public static final List<Long> MENU_MANAGE = Arrays.asList(507L, 508L, 530L, 531L);
+    public static final float PAPER_DEVIATION = 2;
 
     /**
      * oss url过期时间

+ 10 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PageSizeEnum.java

@@ -1,5 +1,7 @@
 package com.qmth.teachcloud.common.enums;
 
+import com.qmth.teachcloud.common.contant.SystemConstant;
+
 /**
  * @Description: pdf格式 enum
  * @Param:
@@ -80,8 +82,11 @@ public enum PageSizeEnum {
      * @return
      */
     public static String convertToName(float width, float height) {
+        float deviation = SystemConstant.PAPER_DEVIATION;
         for (PageSizeEnum e : PageSizeEnum.values()) {
-            if (e.getWidth() == width && e.getHeight() == height) {
+            float standardWidth = e.getWidth();
+            float standardHeight = e.getHeight();
+            if (standardWidth - deviation <= width && width <= standardWidth + deviation && standardHeight - deviation <= height && height <= standardHeight + deviation){
                 return e.name();
             }
         }
@@ -96,8 +101,11 @@ public enum PageSizeEnum {
      * @return
      */
     public static PageSizeEnum convertToEnum(float width, float height) {
+        float deviation = SystemConstant.PAPER_DEVIATION;
         for (PageSizeEnum e : PageSizeEnum.values()) {
-            if (e.getWidth() == width && e.getHeight() == height) {
+            float standardWidth = e.getWidth();
+            float standardHeight = e.getHeight();
+            if (standardWidth - deviation <= width && width <= standardWidth + deviation && standardHeight - deviation <= height && height <= standardHeight + deviation){
                 return e;
             }
         }

+ 45 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PdfTypeEnum.java

@@ -0,0 +1,45 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 角色类型
+ * @Date: 2021/3/23.
+ */
+public enum PdfTypeEnum {
+
+    ALL_A3("所有A3合并文件"),
+    CARD_A3("题卡A3合并文件");
+
+    PdfTypeEnum(String desc) {
+        this.desc = desc;
+    }
+
+    private String desc;
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * @param hasAdmin 是否需要管理员
+     * @return
+     */
+    public static List<EnumResult> listTypes(boolean hasAdmin) {
+        List<EnumResult> list = new ArrayList<EnumResult>();
+        for (PdfTypeEnum value : PdfTypeEnum.values()) {
+            if (!hasAdmin && "ADMIN".equals(value.name())) {
+                continue;
+            }
+            EnumResult result = new EnumResult();
+            result.setName(value.name());
+            result.setOrdinal(value.ordinal());
+            result.setCode(null);
+            result.setDesc(value.getDesc());
+            list.add(result);
+        }
+        return list;
+    }
+
+}

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileStoreUtil.java

@@ -146,7 +146,7 @@ public class FileStoreUtil {
      * @return 存好的文件
      * @throws IOException 异常
      */
-    private File saveLocal(InputStream inputStream, String dirPath) throws IOException {
+    public File saveLocal(InputStream inputStream, String dirPath) throws IOException {
         File desFile = new File(dirPath);
         if (!desFile.exists()) {
             desFile.getParentFile().mkdirs(); //目标文件目录不存在的话需要创建目录

+ 32 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileUtil.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.common.util;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import org.apache.tomcat.util.http.fileupload.IOUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.crypto.Cipher;
 import javax.crypto.CipherOutputStream;
@@ -505,4 +506,35 @@ public class FileUtil {
         }
         return data;
     }
+
+    public static File multipartFileToFile(MultipartFile file) throws Exception {
+
+        File toFile = null;
+        if (file.equals("") || file.getSize() <= 0) {
+            file = null;
+        } else {
+            InputStream ins = null;
+            ins = file.getInputStream();
+            toFile = new File(file.getOriginalFilename());
+            inputStreamToFile(ins, toFile);
+            ins.close();
+        }
+        return toFile;
+    }
+
+    //获取流文件
+    private static void inputStreamToFile(InputStream ins, File file) {
+        try {
+            OutputStream os = new FileOutputStream(file);
+            int bytesRead = 0;
+            byte[] buffer = new byte[8192];
+            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
+                os.write(buffer, 0, bytesRead);
+            }
+            os.close();
+            ins.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }