Bladeren bron

增加组合卷接口

Feick 3 jaren geleden
bovenliggende
commit
ebd4b8b718
28 gewijzigde bestanden met toevoegingen van 411 en 255 verwijderingen
  1. 15 6
      pom.xml
  2. 12 5
      src/main/java/com/yaoxiang/diagnosis/controller/IssueChapterController.java
  3. 4 1
      src/main/java/com/yaoxiang/diagnosis/controller/IssueController.java
  4. 39 5
      src/main/java/com/yaoxiang/diagnosis/controller/IssuePaperController.java
  5. 1 1
      src/main/java/com/yaoxiang/diagnosis/controller/IssueParseController.java
  6. 5 3
      src/main/java/com/yaoxiang/diagnosis/dao/IssueDao.java
  7. 11 0
      src/main/java/com/yaoxiang/diagnosis/dao/IssueLiteDao.java
  8. 0 7
      src/main/java/com/yaoxiang/diagnosis/dao/IssueMindDao.java
  9. 3 1
      src/main/java/com/yaoxiang/diagnosis/dao/IssueOptionDao.java
  10. 15 0
      src/main/java/com/yaoxiang/diagnosis/dao/IssuePaperRepo.java
  11. 5 5
      src/main/java/com/yaoxiang/diagnosis/entity/Issue.java
  12. 2 2
      src/main/java/com/yaoxiang/diagnosis/entity/IssueLite.java
  13. 10 0
      src/main/java/com/yaoxiang/diagnosis/entity/IssueOption.java
  14. 28 17
      src/main/java/com/yaoxiang/diagnosis/entity/IssuePaper.java
  15. 0 69
      src/main/java/com/yaoxiang/diagnosis/entity/IssuePaperInfo.java
  16. 0 69
      src/main/java/com/yaoxiang/diagnosis/entity/IssuePaperMapper.java
  17. 28 0
      src/main/java/com/yaoxiang/diagnosis/model/IssuePaperVo.java
  18. 60 0
      src/main/java/com/yaoxiang/diagnosis/service/IssueLiteService.java
  19. 0 42
      src/main/java/com/yaoxiang/diagnosis/service/IssueMindService.java
  20. 4 0
      src/main/java/com/yaoxiang/diagnosis/service/IssueOptionService.java
  21. 83 0
      src/main/java/com/yaoxiang/diagnosis/service/IssuePaperService.java
  22. 1 4
      src/main/java/com/yaoxiang/diagnosis/service/IssueParseAdapter.java
  23. 3 3
      src/main/java/com/yaoxiang/diagnosis/service/IssueParseService.java
  24. 1 1
      src/main/java/com/yaoxiang/diagnosis/service/IssueParseWordHandler.java
  25. 72 9
      src/main/java/com/yaoxiang/diagnosis/service/IssueService.java
  26. 1 1
      src/main/java/com/yaoxiang/diagnosis/service/PaperResultService.java
  27. 4 0
      src/main/java/com/yaoxiang/diagnosis/util/DateUtil.java
  28. 4 4
      src/main/resources/application-dev.properties

+ 15 - 6
pom.xml

@@ -18,7 +18,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.0.RELEASE</version>
+        <version>2.5.4</version>
         <relativePath/>
     </parent>
 
@@ -70,11 +70,12 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>com.aliyun.oss</groupId>-->
-<!--            <artifactId>aliyun-sdk-oss</artifactId>-->
-<!--            <version>2.8.3</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.13</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
@@ -156,6 +157,14 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

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

@@ -9,9 +9,13 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
-@Api("issueChapter")
+@Api(tags = "组合卷章节")
 @RestController
 @RequestMapping("issueChapter")
 public class IssueChapterController {
@@ -20,9 +24,12 @@ public class IssueChapterController {
     private IssueChapterService issueChapterService;
 
     @GetMapping("list")
-    public List<IssueChapter> list(@RequestParam(defaultValue = "2") Long subjectId,
-                                   List<String> grades,
-                                   @RequestParam(defaultValue = "人教版") String publisher) {
-        return issueChapterService.findBy(subjectId, grades, publisher);
+    public Map<String, List<IssueChapter>> list(@RequestParam(defaultValue = "2") Long subjectId,
+                                                @RequestParam(defaultValue = "7X,7Y,8X,8Y,9X,9Y") List<String> grades,
+                                                @RequestParam(defaultValue = "人教版") String publisher) {
+
+        List<IssueChapter> list = issueChapterService.findBy(subjectId, grades, publisher);
+        list.sort(Comparator.comparing(IssueChapter::getChapter));
+        return list.stream().collect(Collectors.groupingBy(IssueChapter::getGrade, LinkedHashMap::new, Collectors.toList()));
     }
 }

+ 4 - 1
src/main/java/com/yaoxiang/diagnosis/controller/IssueController.java

@@ -3,6 +3,7 @@ package com.yaoxiang.diagnosis.controller;
 import com.yaoxiang.diagnosis.service.IssueService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -10,7 +11,8 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 
-@Api(tags = "issue")
+@Slf4j
+@Api(tags = "组合卷题目")
 @RestController
 @RequestMapping("issue")
 public class IssueController {
@@ -22,6 +24,7 @@ public class IssueController {
     @PostMapping("delete")
     public boolean delete(@RequestParam(defaultValue = "2") Long subjectId,
                           String grade, Long chapterId, int section) {
+        log.info("delete issue,subjectId={},grade={},chapterId={},section={}", subjectId, grade, chapterId, section);
         return issueService.delete(subjectId, grade, chapterId, section);
     }
 

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

@@ -1,19 +1,53 @@
 package com.yaoxiang.diagnosis.controller;
 
-import com.yaoxiang.diagnosis.service.IssueParseService;
+import com.yaoxiang.diagnosis.entity.IssuePaper;
+import com.yaoxiang.diagnosis.model.IssuePaperVo;
+import com.yaoxiang.diagnosis.model.Result;
+import com.yaoxiang.diagnosis.service.IssuePaperService;
 import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 
-@Api(tags = "issuePaper")
+@Api(tags = "组合卷")
 @RequestMapping("issuePaper")
 @RestController
 public class IssuePaperController {
 
     @Resource
-    private IssueParseService issueParseService;
+    private IssuePaperService issuePaperService;
 
+    @PostMapping("add")
+    public Result<IssuePaper> add(@RequestBody IssuePaperVo vo) {
+        IssuePaper paper = issuePaperService.add(vo);
+        return new Result<>(paper != null, paper);
+    }
 
+    @PostMapping("update")
+    public Result update(@RequestBody IssuePaperVo vo) {
+        boolean result = issuePaperService.update(vo);
+        return new Result(result);
+    }
+
+    @ApiOperation("获取组合卷列表")
+    @GetMapping("list")
+    public Result list(Long subjectId, @RequestParam(required = false) String name) {
+        List<IssuePaper> data = issuePaperService.list(subjectId, name);
+        return Result.ok(data);
+    }
+
+    @ApiOperation("获取组合卷详情")
+    @GetMapping("get")
+    public Result<IssuePaper> get(Long id) {
+        IssuePaper paper = issuePaperService.get(id);
+        return new Result<>(paper != null, paper);
+    }
+
+    @PostMapping("delete")
+    public Result delete(Long id) {
+        boolean result = issuePaperService.delete(id);
+        return new Result(result);
+    }
 }

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

@@ -17,7 +17,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
-@Api(tags = "issueParse")
+@Api(tags = "组合卷解析")
 @RestController
 @RequestMapping("issueParse")
 public class IssueParseController {

+ 5 - 3
src/main/java/com/yaoxiang/diagnosis/dao/IssueDao.java

@@ -5,9 +5,11 @@ import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;
 
-public interface IssueDao extends JpaRepository<Issue,Long> {
+public interface IssueDao extends JpaRepository<Issue, Long> {
 
-    List<Issue> findBySubjectIdAndChapterId(Long subjectId,Long chapterId);
+    List<Issue> findBySubjectIdAndChapterId(Long subjectId, Long chapterId);
 
-    List<Issue> findBySubjectIdAndGrade(Long subjectId,String grade);
+    List<Issue> findBySubjectIdAndChapterIdIn(Long subjectId, List<Long> chapterIds);
+
+    List<Issue> findBySubjectIdAndGradeAndSection(Long subjectId, String grade, int section);
 }

+ 11 - 0
src/main/java/com/yaoxiang/diagnosis/dao/IssueLiteDao.java

@@ -0,0 +1,11 @@
+package com.yaoxiang.diagnosis.dao;
+
+import com.yaoxiang.diagnosis.entity.IssueLite;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface IssueLiteDao extends JpaRepository<IssueLite, Long> {
+
+    List<IssueLite> findByIssueIdIn(List<Long> issueIds);
+}

+ 0 - 7
src/main/java/com/yaoxiang/diagnosis/dao/IssueMindDao.java

@@ -1,7 +0,0 @@
-package com.yaoxiang.diagnosis.dao;
-
-import com.yaoxiang.diagnosis.entity.IssueMind;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface IssueMindDao extends JpaRepository<IssueMind,Long> {
-}

+ 3 - 1
src/main/java/com/yaoxiang/diagnosis/dao/IssueOptionDao.java

@@ -5,7 +5,9 @@ import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;
 
-public interface IssueOptionDao extends JpaRepository<IssueOption,Long> {
+public interface IssueOptionDao extends JpaRepository<IssueOption, Long> {
 
     List<IssueOption> findByIssueIdIn(List<Long> issueIds);
+
+    List<IssueOption> findByIssueLiteIdIn(List<Long> issueLiteIds);
 }

+ 15 - 0
src/main/java/com/yaoxiang/diagnosis/dao/IssuePaperRepo.java

@@ -0,0 +1,15 @@
+package com.yaoxiang.diagnosis.dao;
+
+import com.yaoxiang.diagnosis.entity.IssuePaper;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface IssuePaperRepo extends JpaRepository<IssuePaper, Long> {
+
+    List<IssuePaper> findBySubjectIdAndNameLike(Long subjectId,String name);
+
+    List<IssuePaper> findByNameLike(String name);
+
+    List<IssuePaper> findBySubjectId(Long subjectId);
+}

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

@@ -56,7 +56,7 @@ public class Issue {
     private List<IssueOption> options;
 
     @Transient
-    private List<IssueMind> minds;
+    private List<IssueLite> lites;
 
     public Long getId() {
         return id;
@@ -154,11 +154,11 @@ public class Issue {
         this.options = options;
     }
 
-    public List<IssueMind> getMinds() {
-        return minds;
+    public List<IssueLite> getLites() {
+        return lites;
     }
 
-    public void setMinds(List<IssueMind> minds) {
-        this.minds = minds;
+    public void setLites(List<IssueLite> lites) {
+        this.lites = lites;
     }
 }

+ 2 - 2
src/main/java/com/yaoxiang/diagnosis/entity/IssueMind.java → src/main/java/com/yaoxiang/diagnosis/entity/IssueLite.java

@@ -9,8 +9,8 @@ import java.util.Date;
 import java.util.List;
 
 @Entity
-@ApiModel("模块二小题")
-public class IssueMind {
+@ApiModel("模块二三的小题")
+public class IssueLite {
 
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

+ 10 - 0
src/main/java/com/yaoxiang/diagnosis/entity/IssueOption.java

@@ -18,6 +18,8 @@ public class IssueOption {
 
     private Long issueId;
 
+    private Long issueLiteId;
+
     private int section;
 
     @Lob
@@ -60,6 +62,14 @@ public class IssueOption {
         this.issueId = issueId;
     }
 
+    public Long getIssueLiteId() {
+        return issueLiteId;
+    }
+
+    public void setIssueLiteId(Long issueLiteId) {
+        this.issueLiteId = issueLiteId;
+    }
+
     public int getSection() {
         return section;
     }

+ 28 - 17
src/main/java/com/yaoxiang/diagnosis/entity/IssuePaper.java

@@ -31,14 +31,17 @@ public class IssuePaper {
     @Column(nullable = false)
     private Date updatetime;
 
-    @Transient
-    private List<IssuePaperMapper> mappers;
+    @ApiModelProperty("选择的年级,模块二、三使用")
+    private String grade2;
 
-    @Transient
-    private List<Issue> issues;
+    @ApiModelProperty("选择的年级,模块二、三使用")
+    private String grade3;
+
+    @ApiModelProperty("选择的章节Id,模块一使用,以 , 隔开")
+    private String chapterIds;
 
     @Transient
-    private List<IssuePaperInfo> info;
+    private List<Issue> issues;
 
     public Long getId() {
         return id;
@@ -80,14 +83,6 @@ public class IssuePaper {
         this.updatetime = updatetime;
     }
 
-    public List<IssuePaperMapper> getMappers() {
-        return mappers;
-    }
-
-    public void setMappers(List<IssuePaperMapper> mappers) {
-        this.mappers = mappers;
-    }
-
     public List<Issue> getIssues() {
         return issues;
     }
@@ -96,11 +91,27 @@ public class IssuePaper {
         this.issues = issues;
     }
 
-    public List<IssuePaperInfo> getInfo() {
-        return info;
+    public String getGrade2() {
+        return grade2;
+    }
+
+    public void setGrade2(String grade2) {
+        this.grade2 = grade2;
+    }
+
+    public String getGrade3() {
+        return grade3;
+    }
+
+    public void setGrade3(String grade3) {
+        this.grade3 = grade3;
+    }
+
+    public String getChapterIds() {
+        return chapterIds;
     }
 
-    public void setInfo(List<IssuePaperInfo> info) {
-        this.info = info;
+    public void setChapterIds(String chapterIds) {
+        this.chapterIds = chapterIds;
     }
 }

+ 0 - 69
src/main/java/com/yaoxiang/diagnosis/entity/IssuePaperInfo.java

@@ -1,69 +0,0 @@
-package com.yaoxiang.diagnosis.entity;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-@Entity
-@ApiModel("组题模块及章节选择")
-public class IssuePaperInfo {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    private Long pid;
-
-    @ApiModelProperty("选择的年级,模块二、三使用")
-    private String selectedGrade;
-
-    @ApiModelProperty("选择的章节Id,模块一使用,以 , 隔开")
-    private String selectedChapters;
-
-    @ApiModelProperty("选择的模块")
-    private int section;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getPid() {
-        return pid;
-    }
-
-    public void setPid(Long pid) {
-        this.pid = pid;
-    }
-
-    public String getSelectedGrade() {
-        return selectedGrade;
-    }
-
-    public void setSelectedGrade(String selectedGrade) {
-        this.selectedGrade = selectedGrade;
-    }
-
-    public String getSelectedChapters() {
-        return selectedChapters;
-    }
-
-    public void setSelectedChapters(String selectedChapters) {
-        this.selectedChapters = selectedChapters;
-    }
-
-    public int getSection() {
-        return section;
-    }
-
-    public void setSection(int section) {
-        this.section = section;
-    }
-}

+ 0 - 69
src/main/java/com/yaoxiang/diagnosis/entity/IssuePaperMapper.java

@@ -1,69 +0,0 @@
-package com.yaoxiang.diagnosis.entity;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import javax.persistence.*;
-
-@Entity
-@ApiModel("组卷题目与选项")
-@Table(indexes = @Index(name = "issuePaperIndex",columnList = "pid,issueId",unique = true))
-public class IssuePaperMapper {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @ApiModelProperty("所属试题Id,与IssuePaper关联")
-    private Long pid;
-
-    @Column(nullable = false, columnDefinition = " int default 1")
-    @ApiModelProperty("针对整套试题的题目编号")
-    private int number;//题目显式编号1,2,3
-
-    @ApiModelProperty("题目Id,与Issue关联")
-    private Long issueId;
-
-    @ApiModelProperty("所属模块")
-    private int section;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getPid() {
-        return pid;
-    }
-
-    public void setPid(Long pid) {
-        this.pid = pid;
-    }
-
-    public int getNumber() {
-        return number;
-    }
-
-    public void setNumber(int number) {
-        this.number = number;
-    }
-
-    public Long getIssueId() {
-        return issueId;
-    }
-
-    public void setIssueId(Long issueId) {
-        this.issueId = issueId;
-    }
-
-    public int getSection() {
-        return section;
-    }
-
-    public void setSection(int section) {
-        this.section = section;
-    }
-}

+ 28 - 0
src/main/java/com/yaoxiang/diagnosis/model/IssuePaperVo.java

@@ -0,0 +1,28 @@
+package com.yaoxiang.diagnosis.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@ApiModel("组卷")
+@Data
+public class IssuePaperVo {
+
+    private Long id;
+
+    private Long subjectId = 2L;
+
+    private String name;
+
+    @ApiModelProperty("人教版")
+    private String publisher = "人教版";
+
+    @ApiModelProperty("章节Id列表")
+    private String chapterIds;
+
+    @ApiModelProperty("模块二三选择的年级")
+    private String grade2;
+
+    private String grade3;
+}

+ 60 - 0
src/main/java/com/yaoxiang/diagnosis/service/IssueLiteService.java

@@ -0,0 +1,60 @@
+package com.yaoxiang.diagnosis.service;
+
+import com.yaoxiang.diagnosis.dao.IssueLiteDao;
+import com.yaoxiang.diagnosis.entity.IssueLite;
+import com.yaoxiang.diagnosis.entity.IssueOption;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class IssueLiteService {
+
+    @Resource
+    private IssueLiteDao issueLiteDao;
+
+    @Resource
+    private IssueOptionService issueOptionService;
+
+    @Transactional
+    public boolean adds(List<IssueLite> list) {
+        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);
+    }
+
+    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()));
+        options.sort(Comparator.comparing(IssueOption::getIssueLiteId));
+        Map<Long, List<IssueOption>> group = options.stream().collect(Collectors.groupingBy(IssueOption::getIssueLiteId));
+        for (IssueLite lite : list) {
+            lite.setOptions(group.getOrDefault(lite.getId(), new ArrayList<>()));
+        }
+        return list;
+    }
+
+    @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()));
+        issueLiteDao.deleteAll(liteList);
+        return true;
+    }
+}

+ 0 - 42
src/main/java/com/yaoxiang/diagnosis/service/IssueMindService.java

@@ -1,42 +0,0 @@
-package com.yaoxiang.diagnosis.service;
-
-import com.yaoxiang.diagnosis.dao.IssueMindDao;
-import com.yaoxiang.diagnosis.entity.IssueMind;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-public class IssueMindService {
-
-    @Resource
-    private IssueMindDao issueMindDao;
-
-    @Resource
-    private IssueOptionService issueOptionService;
-
-    @Transactional
-    public boolean adds(List<IssueMind> list) {
-        return true;
-    }
-
-    @Transactional
-    public List<IssueMind> list(Long subjectId, String grade) {
-        return new ArrayList<>();
-    }
-
-    @Transactional
-    public boolean delete(Long subjectId, String grade) {
-        List<IssueMind> mindList = list(subjectId, grade);
-
-        //TODO MindOption是否直接关联issue
-        //刪除小題
-        issueOptionService.deleteByIssueIds(mindList.stream().map(IssueMind::getId).collect(Collectors.toList()));
-        issueMindDao.deleteAll(mindList);
-        return true;
-    }
-}

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

@@ -25,6 +25,10 @@ public class IssueOptionService {
         return issueOptionDao.findByIssueIdIn(issueIds);
     }
 
+    public List<IssueOption> findByIssueLitIds(List<Long> issueLiteIds) {
+        return issueOptionDao.findByIssueLiteIdIn(issueLiteIds);
+    }
+
     public boolean deleteByIssueIds(List<Long> issueIds) {
         List<IssueOption> list = findByIssueIds(issueIds);
         issueOptionDao.deleteAll(list);

+ 83 - 0
src/main/java/com/yaoxiang/diagnosis/service/IssuePaperService.java

@@ -0,0 +1,83 @@
+package com.yaoxiang.diagnosis.service;
+
+import com.yaoxiang.diagnosis.dao.IssuePaperRepo;
+import com.yaoxiang.diagnosis.entity.Issue;
+import com.yaoxiang.diagnosis.entity.IssuePaper;
+import com.yaoxiang.diagnosis.model.IssuePaperVo;
+import com.yaoxiang.diagnosis.util.CodeUtil;
+import com.yaoxiang.diagnosis.util.ObjectUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class IssuePaperService {
+
+    @Resource
+    private IssuePaperRepo issuePaperRepo;
+    @Resource
+    private IssueService issueService;
+
+    @Transactional(rollbackFor = Exception.class)
+    public IssuePaper add(IssuePaperVo vo) {
+        IssuePaper paper = ObjectUtil.convert(vo, IssuePaper.class);
+        if (paper == null) {
+            return null;
+        }
+        if (StringUtils.isBlank(paper.getName())) {
+            paper.setName(CodeUtil.generateByDate(4, CodeUtil.DIGEST));
+        }
+        paper.setId(null);
+        issuePaperRepo.save(paper);
+        return paper;
+    }
+
+    @Transactional(readOnly = true)
+    public List<IssuePaper> list(Long subjectId, String name) {
+        boolean blank = StringUtils.isBlank(name);
+        if (subjectId == null && blank) {
+            return issuePaperRepo.findAll();
+        } else if (subjectId == null) {
+            return issuePaperRepo.findByNameLike(name);
+        } else if (blank) {
+            return issuePaperRepo.findBySubjectId(subjectId);
+        } else {
+            return issuePaperRepo.findBySubjectIdAndNameLike(subjectId, name);
+        }
+    }
+
+    @Transactional(readOnly = true)
+    public IssuePaper get(Long id) {
+        Optional<IssuePaper> optional = issuePaperRepo.findById(id);
+        if (!optional.isPresent()) {
+            return null;
+        }
+        IssuePaper result = optional.get();
+        List<Issue> list = issueService.listAll(result);
+        result.setIssues(list);
+        return result;
+    }
+
+    @Transactional
+    public boolean delete(Long id) {
+        issuePaperRepo.deleteById(id);
+        return true;
+    }
+
+    @Transactional
+    public boolean update(IssuePaperVo vo) {
+        IssuePaper paper = get(vo.getId());
+        if (paper == null) {
+            return false;
+        }
+        paper.setChapterIds(vo.getChapterIds());
+        paper.setGrade2(vo.getGrade2());
+        paper.setGrade3(vo.getGrade3());
+        issuePaperRepo.save(paper);
+        return true;
+    }
+}

+ 1 - 4
src/main/java/com/yaoxiang/diagnosis/service/IssueParseAdapter.java

@@ -30,11 +30,8 @@ public abstract class IssueParseAdapter implements IssueParseHandler {
     public static final String SUFFIX_PATTERN = "#";
 
     public static final List<String> TOPIC1 = Arrays.asList(QUESTION_PATTERN, ANSWER_PATTERN, TAG_PATTERN);
-
-    protected final Pattern issuePattern = Pattern.compile("\\d+");
-
     private static final Logger logger = LoggerFactory.getLogger(IssueParseAdapter.class);
-
+    protected final Pattern issuePattern = Pattern.compile("\\d+");
     @Resource
     private FileService fileService;
 

+ 3 - 3
src/main/java/com/yaoxiang/diagnosis/service/IssueParseService.java

@@ -33,16 +33,16 @@ public class IssueParseService {
 
     public Result uploadPaper(Long subjectId, String grade, Long chapterId, int section, byte[] data) {
         XWPFDocument document = WordUtil.open(data);
-        List<Issue> issues = parseIssues(document, subjectId,grade, chapterId, section);
+        List<Issue> issues = parseIssues(document, subjectId, grade, chapterId, section);
         WordUtil.close(document);
         issueService.adds(issues);
         return Result.ok(issues);
     }
 
-    private List<Issue> parseIssues(XWPFDocument document, Long subjectId,String grade, Long chapterId, int section) {
+    private List<Issue> parseIssues(XWPFDocument document, Long subjectId, String grade, Long chapterId, int section) {
         List<XWPFParagraph> paragraphs = document.getParagraphs();
         Assert.notEmpty(paragraphs, "未检测到段落,请检查上传的文档");
-        List<Issue> result = handlerMap.get(section).parse(paragraphs, subjectId,grade, chapterId);
+        List<Issue> result = handlerMap.get(section).parse(paragraphs, subjectId, grade, chapterId);
         return result;
     }
 

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

@@ -29,7 +29,7 @@ public class IssueParseWordHandler extends IssueParseAdapter implements IssuePar
 
     @Override
     public Issue parse(String issueIndex, List<XWPFParagraph> list, Long subjectId, String grade, Long chapterId) {
-        Issue issue = init(subjectId, grade,chapterId, getSection());
+        Issue issue = init(subjectId, grade, chapterId, getSection());
         Map<String, List<XWPFParagraph>> group = initGroup(list, TOPIC1);
 
         Matcher matcher = issuePattern.matcher(issueIndex);

+ 72 - 9
src/main/java/com/yaoxiang/diagnosis/service/IssueService.java

@@ -2,14 +2,19 @@ package com.yaoxiang.diagnosis.service;
 
 import com.yaoxiang.diagnosis.dao.IssueDao;
 import com.yaoxiang.diagnosis.entity.Issue;
+import com.yaoxiang.diagnosis.entity.IssueLite;
+import com.yaoxiang.diagnosis.entity.IssueOption;
+import com.yaoxiang.diagnosis.entity.IssuePaper;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 public class IssueService {
 
@@ -20,7 +25,7 @@ public class IssueService {
     private IssueOptionService issueOptionService;
 
     @Resource
-    private IssueMindService issueMindService;
+    private IssueLiteService issueLiteService;
 
     @Transactional(rollbackFor = Exception.class)
     public boolean adds(List<Issue> list) {
@@ -28,7 +33,7 @@ public class IssueService {
         for (Issue issue : data) {
             issueOptionService.adds(issue.getId(), issue.getOptions());
             if (issue.getSection() > 1) {
-                issueMindService.adds(issue.getMinds());
+                issueLiteService.adds(issue.getLites());
             }
         }
         return true;
@@ -43,7 +48,7 @@ public class IssueService {
     }
 
     /**
-     * 删除模块一
+     * 删除模块一的某个章节
      *
      * @param subjectId 科目Id
      * @param chapterId 章节Id
@@ -66,13 +71,12 @@ public class IssueService {
      */
     private boolean delete(Long subjectId, String grade, int section) {
 
-        List<Issue> list = issueDao.findBySubjectIdAndGrade(subjectId, grade);
+        List<Issue> list = issueDao.findBySubjectIdAndGradeAndSection(subjectId, grade, section);
 
         if (section != 1) {
-            issueMindService.delete(subjectId, grade);
-        }else {
+            issueLiteService.delete(subjectId, grade, section);
+        } else {
             issueOptionService.deleteByIssueIds(list.stream().map(Issue::getId).collect(Collectors.toList()));
-            issueDao.deleteAll(list);
         }
 
         issueDao.deleteAll(list);
@@ -80,6 +84,65 @@ public class IssueService {
         return true;
     }
 
+    public List<Issue> listAll(IssuePaper paper) {
+        Long subjectId = paper.getSubjectId();
+        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> list3 = listWithLite(subjectId, paper.getGrade3(), 3);
+
+        List<Issue> result = new ArrayList<>();
+        result.addAll(list1);
+        result.addAll(list2);
+        result.addAll(list3);
+        return result;
+//        return issueDao.findBySubjectIdAndGrade(subjectId, grade);
+    }
+
+    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()));
+        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;
+    }
+
+    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));
+        for (Issue issue : list) {
+            issue.setLites(group2.getOrDefault(issue.getId(), new ArrayList<>()));
+        }
+        return list;
+    }
+
+    /**
+     * 获取模块一
+     *
+     * @param subjectId  科目Id
+     * @param chapterIds 章节Id列表
+     * @return 题目
+     */
+    public List<Issue> list(Long subjectId, List<Long> chapterIds) {
+        return issueDao.findBySubjectIdAndChapterIdIn(subjectId, chapterIds);
+    }
+
+    /**
+     * 获取模块二三
+     *
+     * @param subjectId 科目Id
+     * @param grade     年级
+     * @param section   模块
+     * @return 题目
+     */
+    public List<Issue> list(Long subjectId, String grade, int section) {
+        return issueDao.findBySubjectIdAndGradeAndSection(subjectId, grade, section);
+    }
 
-//    public boolean add(Issue issue){}
 }

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

@@ -48,7 +48,7 @@ public class PaperResultService {
     @Resource
     private SubjectService subjectService;
 
-//    @PersistenceContext
+    //    @PersistenceContext
 //    private EntityManager entityManager;
     @Resource
     private UserService userService;

+ 4 - 0
src/main/java/com/yaoxiang/diagnosis/util/DateUtil.java

@@ -23,6 +23,10 @@ public class DateUtil {
         return format(new Date(), DATE);
     }
 
+    public static String format(String pattern) {
+        return format(new Date(), pattern);
+    }
+
     public static String format(long time) {
         return format(new Date(time));
     }

+ 4 - 4
src/main/resources/application-dev.properties

@@ -16,10 +16,10 @@ spring.datasource.testWhileIdle=true
 spring.datasource.testOnBorrow=false
 spring.datasource.testOnReturn=false
 
-management.endpoints.web.exposure.include=*
-management.server.address=127.0.0.1
-management.endpoint.shutdown.enabled=true
-management.endpoint.health.show-details=always
+#management.endpoints.web.exposure.include=*
+#management.server.address=127.0.0.1
+#management.endpoint.shutdown.enabled=true
+#management.endpoint.health.show-details=always
 
 spring.redis.database=0
 spring.redis.password=134679258Aa_