浏览代码

模块二不包含题干,没有小题

Feick 3 年之前
父节点
当前提交
722cce37d8

+ 5 - 5
src/main/java/com/yaoxiang/diagnosis/controller/IssueParseController.java

@@ -6,11 +6,11 @@ import com.yaoxiang.diagnosis.service.IssueParseService;
 import com.yaoxiang.diagnosis.util.CommonUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.FileCopyUtils;
-import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -30,8 +30,8 @@ public class IssueParseController {
 
     @ApiOperation(value = "上传试卷")
     @PostMapping("uploadPaper")
-    public Result uploadPaper(@RequestParam(defaultValue = "2") Long subjectId,
-                              String grade, Long chapterId, int section,
+    public Result uploadPaper(@RequestParam(defaultValue = "2") Long subjectId, String grade,
+                              @RequestParam(required = false) Long chapterId, int section,
                               @RequestBody MultipartFile file) throws IOException {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         FileCopyUtils.copy(file.getInputStream(), baos);
@@ -39,9 +39,9 @@ public class IssueParseController {
         String suffix = file.getOriginalFilename().substring(suffixIndex);
         String saveName = CommonUtil.randomUUID() + suffix;
         byte[] data = baos.toByteArray();
-        logger.info("正在上传试卷,subjectId={},chapterId={},grade={}", subjectId, grade, chapterId);
+        logger.info("正在上传试卷,subjectId={},chapterId={},grade={},section={}", subjectId, grade, chapterId, section);
         String url = fileService.upload(data, saveName);
-        if (StringUtils.isEmpty(url)) {
+        if (StringUtils.isBlank(url)) {
             return Result.fail("文件上传失败,请重试");
         }
         return issueParseService.uploadPaper(subjectId, grade, chapterId, section, data);

+ 5 - 16
src/main/java/com/yaoxiang/diagnosis/entity/IssuePaper.java

@@ -32,10 +32,7 @@ public class IssuePaper {
     private Date updatetime;
 
     @ApiModelProperty("选择的年级,模块二、三使用")
-    private String grade2;
-
-    @ApiModelProperty("选择的年级,模块二、三使用")
-    private String grade3;
+    private String grade;
 
     @ApiModelProperty("选择的章节Id,模块一使用,以 , 隔开")
     private String chapterIds;
@@ -91,20 +88,12 @@ public class IssuePaper {
         this.issues = issues;
     }
 
-    public String getGrade2() {
-        return grade2;
-    }
-
-    public void setGrade2(String grade2) {
-        this.grade2 = grade2;
-    }
-
-    public String getGrade3() {
-        return grade3;
+    public String getGrade() {
+        return grade;
     }
 
-    public void setGrade3(String grade3) {
-        this.grade3 = grade3;
+    public void setGrade(String grade) {
+        this.grade = grade;
     }
 
     public String getChapterIds() {

+ 1 - 2
src/main/java/com/yaoxiang/diagnosis/model/IssuePaperVo.java

@@ -22,7 +22,6 @@ public class IssuePaperVo {
     private String chapterIds;
 
     @ApiModelProperty("模块二三选择的年级")
-    private String grade2;
+    private String grade;
 
-    private String grade3;
 }

+ 7 - 11
src/main/java/com/yaoxiang/diagnosis/service/IssueLiteService.java

@@ -27,10 +27,6 @@ public class IssueLiteService {
         return true;
     }
 
-    @Transactional
-    public List<IssueLite> list(Long subjectId, String grade, int section) {
-        return new ArrayList<>();
-    }
 
     public List<IssueLite> list(List<Long> issueIds) {
         return issueLiteDao.findByIssueIdIn(issueIds);
@@ -38,7 +34,8 @@ public class IssueLiteService {
 
     public List<IssueLite> listAll(List<Long> issueIds) {
         List<IssueLite> list = issueLiteDao.findByIssueIdIn(issueIds);
-        List<IssueOption> options = issueOptionService.findByIssueLitIds(list.stream().map(IssueLite::getId).collect(Collectors.toList()));
+        List<Long> issueLiteIds = list.stream().map(IssueLite::getId).collect(Collectors.toList());
+        List<IssueOption> options = issueOptionService.findByIssueLitIds(issueLiteIds);
         options.sort(Comparator.comparing(IssueOption::getIssueLiteId));
         Map<Long, List<IssueOption>> group = options.stream().collect(Collectors.groupingBy(IssueOption::getIssueLiteId));
         for (IssueLite lite : list) {
@@ -48,12 +45,11 @@ public class IssueLiteService {
     }
 
     @Transactional
-    public boolean delete(Long subjectId, String grade, int section) {
-        List<IssueLite> liteList = list(subjectId, grade, section);
-
-        //TODO MindOption是否直接关联issue
-        //刪除小題
-        issueOptionService.deleteByIssueIds(liteList.stream().map(IssueLite::getId).collect(Collectors.toList()));
+    public boolean deleteByIssueIds(List<Long> issueIds) {
+        List<IssueLite> liteList = list(issueIds);
+        List<Long> issueLiteIds = liteList.stream().map(IssueLite::getId).collect(Collectors.toList());
+        //级联刪除小題
+        issueOptionService.deleteByIssueLiteIds(issueLiteIds);
         issueLiteDao.deleteAll(liteList);
         return true;
     }

+ 6 - 0
src/main/java/com/yaoxiang/diagnosis/service/IssueOptionService.java

@@ -34,4 +34,10 @@ public class IssueOptionService {
         issueOptionDao.deleteAll(list);
         return true;
     }
+
+    public boolean deleteByIssueLiteIds(List<Long> issueLiteIds){
+        List<IssueOption> list = findByIssueLitIds(issueLiteIds);
+        issueOptionDao.deleteAll(list);
+        return true;
+    }
 }

+ 1 - 2
src/main/java/com/yaoxiang/diagnosis/service/IssuePaperService.java

@@ -75,8 +75,7 @@ public class IssuePaperService {
             return false;
         }
         paper.setChapterIds(vo.getChapterIds());
-        paper.setGrade2(vo.getGrade2());
-        paper.setGrade3(vo.getGrade3());
+        paper.setGrade(vo.getGrade());
         issuePaperRepo.save(paper);
         return true;
     }

+ 25 - 0
src/main/java/com/yaoxiang/diagnosis/service/IssueParseSingleMindHandler.java

@@ -0,0 +1,25 @@
+package com.yaoxiang.diagnosis.service;
+
+import com.yaoxiang.diagnosis.entity.Issue;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class IssueParseSingleMindHandler extends IssueParseAdapter implements IssueParseHandler {
+    @Override
+    void parseQuestion(Issue issue, String code, List<XWPFParagraph> ps) {
+
+    }
+
+    @Override
+    public int getSection() {
+        return 2;
+    }
+
+    @Override
+    public Issue parse(String issueIndex, List<XWPFParagraph> list, Long subjectId, String grade, Long chapterId) {
+        return null;
+    }
+}

+ 51 - 13
src/main/java/com/yaoxiang/diagnosis/service/IssueService.java

@@ -39,7 +39,7 @@ public class IssueService {
         return true;
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public boolean delete(Long subjectId, String grade, Long chapterId, int section) {
         if (section == 1 && StringUtils.isBlank(grade)) {
             return delete(subjectId, chapterId);
@@ -54,6 +54,7 @@ public class IssueService {
      * @param chapterId 章节Id
      * @return 是否删除
      */
+    @Transactional(rollbackFor = Exception.class)
     private boolean delete(Long subjectId, Long chapterId) {
         List<Issue> list = issueDao.findBySubjectIdAndChapterId(subjectId, chapterId);
         issueOptionService.deleteByIssueIds(list.stream().map(Issue::getId).collect(Collectors.toList()));
@@ -62,23 +63,26 @@ public class IssueService {
     }
 
     /**
-     * 删除模块二三
+     * 根据科目、年级和模块删除试题
      *
      * @param subjectId 科目Id
      * @param grade     年级
      * @param section   模块
      * @return 是否成功
      */
+    @Transactional(rollbackFor = Exception.class)
     private boolean delete(Long subjectId, String grade, int section) {
 
         List<Issue> list = issueDao.findBySubjectIdAndGradeAndSection(subjectId, grade, section);
-
-        if (section != 1) {
-            issueLiteService.delete(subjectId, grade, section);
-        } else {
-            issueOptionService.deleteByIssueIds(list.stream().map(Issue::getId).collect(Collectors.toList()));
+        List<Long> issueIds = list.stream().map(Issue::getId).collect(Collectors.toList());
+        switch (section) {
+            case 3:
+                issueLiteService.deleteByIssueIds(issueIds);
+                break;
+            default:
+                issueOptionService.deleteByIssueIds(issueIds);
         }
-
+        //删除题目本体
         issueDao.deleteAll(list);
 
         return true;
@@ -89,9 +93,9 @@ public class IssueService {
         List<Long> chapterIds = Arrays.stream(paper.getChapterIds().split(",")).map(Long::valueOf).collect(Collectors.toList());
         List<Issue> list1 = listWithOption(subjectId, chapterIds);
 
-        List<Issue> list2 = listWithLite(subjectId, paper.getGrade2(), 2);
+        List<Issue> list2 = listWithOption(subjectId, paper.getGrade(), 2);
 
-        List<Issue> list3 = listWithLite(subjectId, paper.getGrade3(), 3);
+        List<Issue> list3 = listWithLite(subjectId, paper.getGrade(), 3);
 
         List<Issue> result = new ArrayList<>();
         result.addAll(list1);
@@ -101,6 +105,13 @@ public class IssueService {
 //        return issueDao.findBySubjectIdAndGrade(subjectId, grade);
     }
 
+    /**
+     * 获取模块一题目列表
+     *
+     * @param subjectId  科目Id
+     * @param chapterIds 章节Id列表
+     * @return result
+     */
     private List<Issue> listWithOption(Long subjectId, List<Long> chapterIds) {
         List<Issue> list = list(subjectId, chapterIds);
         List<IssueOption> options = issueOptionService.findByIssueIds(list.stream().map(Issue::getId).collect(Collectors.toList()));
@@ -112,12 +123,39 @@ public class IssueService {
         return list;
     }
 
+    /**
+     * 获取模块二题目列表
+     *
+     * @param subjectId 科目Id
+     * @param grade     年级
+     * @param section   2
+     * @return result
+     */
+    private List<Issue> listWithOption(Long subjectId, String grade, int section) {
+        List<Issue> list = list(subjectId, grade, section);
+        List<IssueOption> options = issueOptionService.findByIssueIds(list.stream().map(Issue::getId).collect(Collectors.toList()));
+        options.sort(Comparator.comparing(IssueOption::getIssueId));
+        Map<Long, List<IssueOption>> group = options.stream().collect(Collectors.groupingBy(IssueOption::getIssueId));
+        for (Issue issue : list) {
+            issue.setOptions(group.getOrDefault(issue.getId(), new ArrayList<>()));
+        }
+        return list;
+    }
+
+    /**
+     * 获取模块三题目列表
+     *
+     * @param subjectId 章节Id
+     * @param grade     年级
+     * @param section   3
+     * @return result
+     */
     private List<Issue> listWithLite(Long subjectId, String grade, int section) {
         List<Issue> list = list(subjectId, grade, section);
-        List<IssueLite> lites2 = issueLiteService.listAll(list.stream().map(Issue::getId).collect(Collectors.toList()));
-        Map<Long, List<IssueLite>> group2 = lites2.stream().collect(Collectors.groupingBy(IssueLite::getIssueId));
+        List<IssueLite> lites = issueLiteService.listAll(list.stream().map(Issue::getId).collect(Collectors.toList()));
+        Map<Long, List<IssueLite>> group = lites.stream().collect(Collectors.groupingBy(IssueLite::getIssueId));
         for (Issue issue : list) {
-            issue.setLites(group2.getOrDefault(issue.getId(), new ArrayList<>()));
+            issue.setLites(group.getOrDefault(issue.getId(), new ArrayList<>()));
         }
         return list;
     }