Explorar o código

增加测试上传试卷接口,上传后试卷不会保存,但图片还是会上传

4228306 %!s(int64=5) %!d(string=hai) anos
pai
achega
c01fe4191d

+ 21 - 0
src/main/java/com/yaoxiang/diagnosis/controller/PaperController.java

@@ -107,4 +107,25 @@ public class PaperController {
         }
         return paperService.uploadPaper(paperVo, paperTemplateId, url, data);
     }
+
+    @ApiOperation(value = "测试上传试卷")
+    @PostMapping("uploadPaperTest")
+    @ApiImplicitParam(name = "paperTemplateId", value = "试卷模板Id 默认1")
+    public Result uploadPaperTest(PaperVo paperVo,
+                              @RequestParam(defaultValue = "1") Long paperTemplateId,
+                              @RequestBody MultipartFile file) throws IOException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        FileCopyUtils.copy(file.getInputStream(), baos);
+        int suffixIndex = file.getOriginalFilename().lastIndexOf(".");
+        String suffix = file.getOriginalFilename().substring(suffixIndex);
+        String saveName = CommonUtil.randomUUID() + suffix;
+        byte[] data = baos.toByteArray();
+//        byte[] clone = data.clone();
+//        String url = fileService.upload(data, UploadProperties.DOC_PATH, saveName);
+//        String url = fileService.upload(data, saveName);
+//        if (StringUtils.isEmpty(url)) {
+//            return Result.fail("文件上传失败,请重试");
+//        }
+        return paperService.uploadPaperTest(paperVo, paperTemplateId, "", data);
+    }
 }

+ 28 - 0
src/main/java/com/yaoxiang/diagnosis/service/PaperService.java

@@ -253,6 +253,34 @@ public class PaperService {
         return addWithQuestion(paper);
 //        return Result.ok(paper);
     }
+    @Transactional(rollbackFor = Exception.class)
+    public Result uploadPaperTest(PaperVo paperVo, Long templateId, String url, byte[] data) {
+        Paper paper = init(paperVo, url);
+        paper.setRemark(remarkTemplateRepo.getOne(paperVo.getRemarkId()).getRemark());
+        XWPFDocument document = WordUtil.open(data);
+        PaperTemplate template = paperTemplateService.getOrDefault(templateId);
+        if (template == null) {
+            return Result.fail(String.format("未找到试卷模板Id为 %s 的模板", templateId));
+        }
+        logger.info("parsing paper,url is {}", url);
+        parsePaper(paper, template, document);
+        logger.info("parse paper finished,url is {}", url);
+        paper.setStatus(1);
+        paper.setTotalScore(100);
+        paper.setQuestionNum(paper.getQuestions().size());
+        paper.setDuration(paper.getQuestionNum() * 2);
+        //TODO 这里要根据实际情况改
+//        paper.setSectionDurations("100,20,20");
+//        paper.setSectionRests("2,2,2");
+//        paper.setSectionNums("50,10,10");
+        WordUtil.close(document);
+        //TODO due ability score
+        //TODO convert parse exception to reason
+        //TODO use parallel
+//        Result<Paper> paperResult = add(paper);
+//        return addWithQuestion(paper);
+        return Result.ok(paper);
+    }
 
     private Map<String, List<XWPFParagraph>> initSections(Paper paper, String sectionPattern, String questionPattern, String picturePattern, List<XWPFParagraph> paragraphs) {
         //保证顺序

+ 1 - 1
src/main/java/com/yaoxiang/diagnosis/word/WordService.java

@@ -284,7 +284,7 @@ public class WordService {
             logger.debug("run pos " + (i++) + " embed picture size " + pictures.size());
 //            String img = "<img src=\"%s\" style=\"width: %spt;height: %spt\" />";
             //图片水平居中
-            String img = "<p style=\"text-align:center\"><img src=\"%s\" style=\"max-width: %spx;center\" /></p>";
+            String img = "<p style=\"text-align:center\"><img src=\"%s\" style=\"max-width:100%; width:%spx; center\" /></p>";
             if (CommonUtil.notEmpty(pictures)) {
                 //只处理第一张图片
                 XWPFPicture pp = pictures.get(0);