فهرست منبع

接口调试和分词包更新

gaoxing 8 سال پیش
والد
کامیت
cb6cafbf48

+ 2 - 3
cqb-comm-utils/pom.xml

@@ -183,11 +183,10 @@
             <version>1.3.2</version>
         </dependency>
 
-        <dependency>
+       <dependency>
             <groupId>org.ansj</groupId>
             <artifactId>ansj_seg</artifactId>
-            <version>5.0.1</version>
+            <version>5.1.1</version>
         </dependency>
-
     </dependencies>
 </project>

+ 10 - 0
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/model/GenPaperDto.java

@@ -32,6 +32,8 @@ public class GenPaperDto implements Serializable {
 
     private RandomGenPaperPolicy simpleGenPaperPolicy;
 
+    private Integer genNumber;// 生成试卷套数
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }
@@ -108,6 +110,14 @@ public class GenPaperDto implements Serializable {
         this.simpleGenPaperPolicy = simpleGenPaperPolicy;
     }
 
+    public Integer getGenNumber() {
+        return genNumber;
+    }
+
+    public void setGenNumber(Integer genNumber) {
+        this.genNumber = genNumber;
+    }
+
     public static long getSerialversionuid() {
         return serialVersionUID;
     }

+ 37 - 9
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/web/GenPaperController.java

@@ -3,8 +3,6 @@ package com.qmth.cqb.genpaper.web;
 import java.util.HashMap;
 import java.util.Map;
 
-import com.qmth.cqb.genpaper.model.GenPaperDto;
-import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -16,6 +14,8 @@ import org.springframework.web.bind.annotation.RestController;
 import com.qmth.cqb.genpaper.model.GenPaperDto;
 import com.qmth.cqb.genpaper.service.GenPaperService;
 
+import io.swagger.annotations.ApiOperation;
+
 /**
  * Created by songyue on 16/12/28.
  */
@@ -26,14 +26,33 @@ public class GenPaperController {
     @Autowired
     GenPaperService genPaperService;
 
-    @ApiOperation(value="简易随机组卷",notes="简易随机组卷")
+    @ApiOperation(value = "简易随机组卷", notes = "简易随机组卷")
     @PostMapping("/genPaper/simple")
     public ResponseEntity genPaperSimple(@RequestBody GenPaperDto genPaperDto) {
         Map<String, Object> paperMap = new HashMap<String, Object>();
-        if (genPaperDto.getSimpleGenPaperPolicy().getKey() == 1L) {
-            paperMap = genPaperService.genPaperByQuestionNum(genPaperDto);
-        } else if (genPaperDto.getSimpleGenPaperPolicy().getKey() == 2L) {
-            paperMap = genPaperService.genPaperByScore(genPaperDto);
+        if (genPaperDto.getGenNumber() == 1) {
+            if (genPaperDto.getSimpleGenPaperPolicy().getKey() == 1L) {
+                paperMap = genPaperService.genPaperByQuestionNum(genPaperDto);
+            } else if (genPaperDto.getSimpleGenPaperPolicy().getKey() == 2L) {
+                paperMap = genPaperService.genPaperByScore(genPaperDto);
+            }
+        } else if (genPaperDto.getGenNumber() > 1) {
+            if (genPaperDto.getSimpleGenPaperPolicy().getKey() == 1L) {
+                for (int i = 1; i <= genPaperDto.getGenNumber(); i++) {
+                    genPaperDto.setPaperName(genPaperDto.getPaperName() + "_" + i);
+                    paperMap.putAll(genPaperService.genPaperByQuestionNum(genPaperDto));
+                    genPaperDto.setPaperName("");
+                }
+
+            } else if (genPaperDto.getSimpleGenPaperPolicy().getKey() == 2L) {
+                for (int i = 1; i <= genPaperDto.getGenNumber(); i++) {
+                    genPaperDto.setPaperName(genPaperDto.getPaperName() + "_" + i);
+                    paperMap.putAll(genPaperService.genPaperByScore(genPaperDto));
+                    genPaperDto.setPaperName("");
+                }
+
+            }
+
         }
         if (paperMap.get("msg").equals("success")) {
             return new ResponseEntity(paperMap, HttpStatus.OK);
@@ -43,10 +62,19 @@ public class GenPaperController {
 
     }
 
-    @ApiOperation(value="精细组卷",notes="精细组卷")
+    @ApiOperation(value = "精细组卷", notes = "精细组卷")
     @PostMapping("/genPaper/normal")
     public ResponseEntity genPaperNormal(@RequestBody GenPaperDto genPaperDto) {
-        Map<String, Object> paperMap = genPaperService.genPaper(genPaperDto);
+        Map<String, Object> paperMap = new HashMap<String, Object>();
+        if (genPaperDto.getGenNumber() > 1) {
+            for (int i = 1; i <= genPaperDto.getGenNumber(); i++) {
+                genPaperDto.setPaperName(genPaperDto.getPaperName() + "_" + i);
+                paperMap.putAll(genPaperService.genPaper(genPaperDto));
+                genPaperDto.setPaperName("");
+            }
+        } else if (genPaperDto.getGenNumber() == 1) {
+            paperMap = genPaperService.genPaper(genPaperDto);
+        }
         if (paperMap.get("msg").equals("success")) {
             return new ResponseEntity(paperMap, HttpStatus.OK);
         } else {

+ 2 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/dao/PaperDetailUnitRepo.java

@@ -6,6 +6,7 @@ import org.springframework.data.mongodb.repository.MongoRepository;
 import org.springframework.data.repository.query.QueryByExampleExecutor;
 
 import com.qmth.cqb.paper.model.PaperDetailUnit;
+import com.qmth.cqb.question.model.Question;
 
 import java.util.List;
 
@@ -13,4 +14,5 @@ import java.util.List;
 public interface PaperDetailUnitRepo extends MongoRepository<PaperDetailUnit, String>,QueryByExampleExecutor<PaperDetailUnit> {
     List<PaperDetailUnit> findByPaperDetail(PaperDetail paperDetail);
     List<PaperDetailUnit> findByPaper(Paper paper);
+    List<PaperDetailUnit> findByQuestion(Question question);
 }

+ 30 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -7,6 +7,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 import java.util.stream.Collectors;
 
 import org.apache.commons.io.FileUtils;
@@ -19,6 +20,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import com.google.gson.Gson;
+import com.qmth.cqb.base.dao.CourseRepo;
 import com.qmth.cqb.paper.dao.PaperDetailRepo;
 import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
 import com.qmth.cqb.paper.dao.PaperRepo;
@@ -61,6 +63,10 @@ public class ImportPaperService {
 
     @Autowired
     PaperService paperService;
+    
+
+    @Autowired
+    CourseRepo courseRepo;
 
     /**
      * 获取上传文件
@@ -748,4 +754,28 @@ public class ImportPaperService {
         question.setQuesPkg(DocxProcessUtil.getPkgByte(wordMLPackage));
     }
 
+    
+    
+    /**
+     * 构造一张空白的导入类型试卷
+     * 
+     * @param courseNo
+     * @param courseName
+     * @param paperName
+     * @return
+     */
+    public Paper saveBlankPaper(String courseNo, String paperName) {
+        Paper paper = new Paper();
+        String courseName = courseRepo.findByCourseNo(courseNo).getCourseName();
+        initPaper(paper, paperName);
+        paper.setCourseNo(courseNo);
+        paper.setCourseName(courseName);
+        PaperDetail pd = new PaperDetail();
+        pd.setId(UUID.randomUUID().toString());
+        pd.setNumber(1);
+        pd.setPaper(paper);
+        paperRepo.save(paper);
+        paperDetailRepo.save(pd);
+        return paper;
+    }
 }

+ 407 - 319
cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java

@@ -1,368 +1,456 @@
 package com.qmth.cqb.paper.service;
 
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Service;
 
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 import com.google.gson.Gson;
+import com.qmth.cqb.paper.dao.ExamPaperRepo;
 import com.qmth.cqb.paper.dao.PaperDetailRepo;
 import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
+import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.dto.PaperDetailExp;
 import com.qmth.cqb.paper.dto.PaperDetailUnitExp;
 import com.qmth.cqb.paper.dto.PaperExp;
-import com.qmth.cqb.paper.model.*;
+import com.qmth.cqb.paper.model.ExamPaper;
+import com.qmth.cqb.paper.model.Paper;
+import com.qmth.cqb.paper.model.PaperDetail;
+import com.qmth.cqb.paper.model.PaperDetailUnit;
+import com.qmth.cqb.paper.model.PaperSearchInfo;
+import com.qmth.cqb.question.dao.QuesBakRepo;
 import com.qmth.cqb.question.dao.QuesRepo;
-import com.qmth.cqb.question.model.QuesOption;
 import com.qmth.cqb.question.model.Question;
+import com.qmth.cqb.question.model.QuestionBak;
 import com.qmth.cqb.question.service.QuesService;
 import com.qmth.cqb.utils.BeanCopierUtil;
 import com.qmth.cqb.utils.CommonUtils;
 import com.qmth.cqb.utils.enums.PaperStatus;
 import com.qmth.cqb.utils.enums.PaperType;
-import org.apache.commons.collections4.IteratorUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Example;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Service;
 
-import com.qmth.cqb.paper.dao.ExamPaperRepo;
-import com.qmth.cqb.paper.dao.PaperRepo;
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 
 /**
  * Created by songyue on 16/12/28.
  */
 @Service
 public class PaperService {
-	
-	@Autowired
-	PaperRepo paperRepo;
-	
-	@Autowired
-	PaperDetailService paperDetailService;
-	
-	@Autowired
-	ExamPaperRepo examPaperRepo;
-
-	@Autowired
-	PaperDetailRepo paperDetailRepo;
-
-	@Autowired
-	PaperDetailUnitRepo paperDetailUnitRepo;
-
-	@Autowired
-	QuesRepo quesRepo;
-
-	@Autowired
-	Gson gson;
-
-	@Autowired
-	PaperDetailUnitService paperDetailUnitService;
-
-	@Autowired
-	QuesService quesService;
-
-	/**
-	 * 查询所有已导入试卷
-	 * @param paperSearchInfo
-	 * @param curPage
-	 * @param pageSize
-	 * @return
-	 */
-	public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo,
-									   int curPage,
-									   int pageSize){
-		formatPaperSearchInfo(paperSearchInfo);
-		Paper importPaper = BeanCopierUtil.copyProperties(paperSearchInfo,Paper.class);
-		importPaper.setPaperType(PaperType.IMPORT);
-		return paperRepo.findAll(Example.of(importPaper),new PageRequest(curPage - 1,pageSize));
-	}
-
-	/**
-	 * 保存试卷
-	 * @param paperExp
-	 * @return
+
+    @Autowired
+    PaperRepo paperRepo;
+
+    @Autowired
+    PaperDetailService paperDetailService;
+
+    @Autowired
+    ExamPaperRepo examPaperRepo;
+
+    @Autowired
+    PaperDetailRepo paperDetailRepo;
+
+    @Autowired
+    PaperDetailUnitRepo paperDetailUnitRepo;
+
+    @Autowired
+    QuesRepo quesRepo;
+
+    @Autowired
+    QuesBakRepo quesBakRepo;
+
+    @Autowired
+    Gson gson;
+
+    @Autowired
+    PaperDetailUnitService paperDetailUnitService;
+
+    @Autowired
+    QuesService quesService;
+
+    /**
+     * 查询所有已导入试卷
+     * 
+     * @param paperSearchInfo
+     * @param curPage
+     * @param pageSize
+     * @return
+     */
+    public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
+        formatPaperSearchInfo(paperSearchInfo);
+        Paper importPaper = BeanCopierUtil.copyProperties(paperSearchInfo, Paper.class);
+        importPaper.setPaperType(PaperType.IMPORT);
+        return paperRepo.findAll(Example.of(importPaper), new PageRequest(curPage - 1, pageSize));
+    }
+
+    /**
+     * 保存试卷
+     * 
+     * @param paperExp
+     * @return
      */
-	public Paper savePaper(PaperExp paperExp){
-		Paper paper = BeanCopierUtil.copyProperties(paperExp,Paper.class);
-		formatPaper(paper);
-		return paperRepo.save(paper);
-	}
-
-	/**
-	 * 查询所有已组试卷
-	 * @param paperSearchInfo
-	 * @param curPage
-	 * @param pageSize
-	 * @return
-	 */
-	public Page<Paper> getGenPapers(PaperSearchInfo paperSearchInfo,
-									int curPage,
-									int pageSize){
-		formatPaperSearchInfo(paperSearchInfo);
-		Paper importPaper = BeanCopierUtil.copyProperties(paperSearchInfo,Paper.class);
-		importPaper.setPaperType(PaperType.GENERATE);
-		return paperRepo.findAll(Example.of(importPaper),new PageRequest(curPage - 1,pageSize));
-	}
-	
-	/**
-	 * 查询考试试卷
-	 * @param id
-	 * @param courseCode
-	 * @param groupCode
-	 * @return
-	 */
-    public List<Paper> listExamPapers(long id,String courseCode,String groupCode){
-    	List<Paper> papers = new ArrayList<Paper>();
-     	ExamPaper examPaper = new ExamPaper();
-    	examPaper.setExamId(id);
-    	examPaper.setCourseCode(courseCode);
-    	examPaper.setGroupCode(groupCode);
-    	Example<ExamPaper> example = Example.of(examPaper); 
-    	List<ExamPaper> examPapers = examPaperRepo.findAll(example);
-    	for(ExamPaper ePaper:examPapers){
-    		Paper paper = paperRepo.findOne(ePaper.getPaperId());
-    		papers.add(paper);
-    	}
-		return papers;
+    public Paper savePaper(PaperExp paperExp) {
+        Paper paper = BeanCopierUtil.copyProperties(paperExp, Paper.class);
+        formatPaper(paper);
+        return paperRepo.save(paper);
     }
-    
-    
+
+    /**
+     * 查询所有已组试卷
+     * 
+     * @param paperSearchInfo
+     * @param curPage
+     * @param pageSize
+     * @return
+     */
+    public Page<Paper> getGenPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
+        formatPaperSearchInfo(paperSearchInfo);
+        Paper importPaper = BeanCopierUtil.copyProperties(paperSearchInfo, Paper.class);
+        importPaper.setPaperType(PaperType.GENERATE);
+        return paperRepo.findAll(Example.of(importPaper), new PageRequest(curPage - 1, pageSize));
+    }
+
+    /**
+     * 查询考试试卷
+     * 
+     * @param id
+     * @param courseCode
+     * @param groupCode
+     * @return
+     */
+    public List<Paper> listExamPapers(long id, String courseCode, String groupCode) {
+        List<Paper> papers = new ArrayList<Paper>();
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(id);
+        examPaper.setCourseCode(courseCode);
+        examPaper.setGroupCode(groupCode);
+        Example<ExamPaper> example = Example.of(examPaper);
+        List<ExamPaper> examPapers = examPaperRepo.findAll(example);
+        for (ExamPaper ePaper : examPapers) {
+            Paper paper = paperRepo.findOne(ePaper.getPaperId());
+            papers.add(paper);
+        }
+        return papers;
+    }
+
     /**
      * 设置考试试卷
+     * 
      * @param examId
      * @param courseCode
      * @param groupCode
      * @param paperId
      * @return
      */
-    public void joinToExamPaper(long examId,
-								String courseCode,
-								String groupCode,
-								String paperId){
-		ExamPaper examPaper = new ExamPaper();
-		examPaper.setExamId(examId);
-		examPaper.setGroupCode(groupCode);
-		examPaper.setCourseCode(courseCode);
-		examPaper.setPaperId(paperId);
-		examPaperRepo.save(examPaper);
+    public void joinToExamPaper(long examId, String courseCode, String groupCode, String paperId) {
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(examId);
+        examPaper.setGroupCode(groupCode);
+        examPaper.setCourseCode(courseCode);
+        examPaper.setPaperId(paperId);
+        examPaperRepo.save(examPaper);
     }
-    
-    public void releaseExamPaper(long examId,
-									String courseCode,
-									String groupCode,
-									String paperId){
-		ExamPaper examPaper = new ExamPaper();
-		examPaper.setExamId(examId);
-		examPaper.setGroupCode(groupCode);
-		examPaper.setCourseCode(courseCode);
-		examPaper.setPaperId(paperId);
-		examPaperRepo.delete(examPaper);
+
+    public void releaseExamPaper(long examId, String courseCode, String groupCode, String paperId) {
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(examId);
+        examPaper.setGroupCode(groupCode);
+        examPaper.setCourseCode(courseCode);
+        examPaper.setPaperId(paperId);
+        examPaperRepo.delete(examPaper);
     }
-    
-    
-    public Set<String> listGroupCodes(long examId,String courseCode){
-    	Set<String> groupSet = new HashSet<String>();
-    	ExamPaper examPaper = new ExamPaper();
-    	examPaper.setExamId(examId);
-		examPaper.setCourseCode(courseCode);
-		List<ExamPaper> examPapers = examPaperRepo.findAll(Example.of(examPaper));
-		for(ExamPaper expaper:examPapers){
-			groupSet.add(expaper.getGroupCode());
-		}
-		return groupSet;
+
+    public Set<String> listGroupCodes(long examId, String courseCode) {
+        Set<String> groupSet = new HashSet<String>();
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(examId);
+        examPaper.setCourseCode(courseCode);
+        List<ExamPaper> examPapers = examPaperRepo.findAll(Example.of(examPaper));
+        for (ExamPaper expaper : examPapers) {
+            groupSet.add(expaper.getGroupCode());
+        }
+        return groupSet;
     }
-    
-    
-    public void deletGroupCode(long examId,String courseCode,String groupCode){
-    	ExamPaper examPaper = new ExamPaper();
-    	examPaper.setExamId(examId);
-		examPaper.setCourseCode(courseCode);
-		examPaper.setCourseCode(courseCode);
-		examPaperRepo.delete(examPaper);
+
+    public void deletGroupCode(long examId, String courseCode, String groupCode) {
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(examId);
+        examPaper.setCourseCode(courseCode);
+        examPaper.setCourseCode(courseCode);
+        examPaperRepo.delete(examPaper);
     }
-    
-    
+
     /**
      * 根据试卷ID获取试卷下面的大题
+     * 
      * @param id
      * @return
      */
-    public List<PaperDetail> findPaperDetailsById(String id){
+    public List<PaperDetail> findPaperDetailsById(String id) {
         return paperDetailService.getPaperDetailsByPaper(paperRepo.findOne(id));
     }
 
-	/**
-	 * 批量删除试卷
-	 * @param paperIds
+    /**
+     * 批量删除试卷
+     * 
+     * @param paperIds
+     */
+    public void deletePapers(List<String> paperIds) {
+        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
+        paperDetailService.deletePaperDetailsByPapers(papers);
+        paperRepo.delete(papers);
+    }
+
+    /**
+     * 批量通过试卷
+     * 
+     * @param paperIds
+     */
+    public void passPapers(List<String> paperIds) {
+        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
+        papers.stream().forEach(paper -> {
+            paper.setPaperStatus(PaperStatus.PASS);
+        });
+        paperRepo.save(papers);
+    }
+
+    /**
+     * 批量不通过试卷
+     * 
+     * @param paperIds
+     */
+    public void noPassPapers(List<String> paperIds) {
+        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
+        papers.stream().forEach(paper -> {
+            paper.setPaperStatus(PaperStatus.NOPASS);
+        });
+        paperRepo.save(papers);
+    }
+
+    /**
+     * 批量待审核试卷
+     * 
+     * @param paperIds
      */
-	public void deletePapers(List<String> paperIds){
-		List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
-		paperDetailService.deletePaperDetailsByPapers(papers);
-		paperRepo.delete(papers);
-	}
-
-	/**
-	 * 批量通过试卷
-	 * @param paperIds
-	 */
-	public void passPapers(List<String> paperIds){
-		List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
-		papers.stream().forEach(paper -> {paper.setPaperStatus(PaperStatus.PASS);});
-		paperRepo.save(papers);
-	}
-
-	/**
-	 * 批量不通过试卷
-	 * @param paperIds
-	 */
-	public void noPassPapers(List<String> paperIds){
-		List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
-		papers.stream().forEach(paper -> {paper.setPaperStatus(PaperStatus.NOPASS);});
-		paperRepo.save(papers);
-	}
-
-	/**
-	 * 批量待审核试卷
-	 * @param paperIds
-	 */
-	public void backPapers(List<String> paperIds){
-		List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
-		papers.stream().forEach(paper -> {paper.setPaperStatus(PaperStatus.DRAFT);});
-		paperRepo.save(papers);
-	}
-
-	/**
-	 * 初始化导出试卷DTO
-	 * @param id
-	 * @return
-	 */
-	public PaperExp getPaperDto(String id){
-
-		//获取paper
-		Paper paper = paperRepo.findOne(id);
-
-		//创建paperDto
-		PaperExp paperExp = BeanCopierUtil.copyProperties(paper,PaperExp.class);
-		//获取大题
-		List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
-		List<PaperDetailExp> paperDetailExps =
-				BeanCopierUtil.copyPropertiesOfList(paperDetails,PaperDetailExp.class);
-		paperExp.setPaperDetails(paperDetailExps);
-
-		//封装小题
-		for(int i = 0; i < paperDetailExps.size(); i++){
-			List<PaperDetailUnit> paperDetailUnits =
-					paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
-			List<PaperDetailUnitExp> paperDetailUnitExps =
-					BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,PaperDetailUnitExp.class);
-			paperDetailExps.get(i).setPaperDetailUnits(paperDetailUnitExps);
-		}
-		//初始化试卷内容
-		initPaper(paperExp);
-
-		return paperExp;
-	}
-
-	/**
-	 * 初始化试卷内容(增加序号)
-	 * @param paperExp
-	 */
-	public void initPaper(PaperExp paperExp){
-		if(paperExp.getPaperDetails() == null || paperExp.getPaperDetails().size() == 0){
-			return;
-		}
-		int mainNum = 0;
-		int subNum = 0;
-		Collections.sort(paperExp.getPaperDetails());
-		for(PaperDetailExp paperDetail: paperExp.getPaperDetails()){
-			//大题序号
-			paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
-			paperDetail.setNumber(++mainNum);
-			if(paperDetail.getPaperDetailUnits() == null ||
-					paperDetail.getPaperDetailUnits().size() == 0){
-				return;
-			}
-			//小题序号
-			for(PaperDetailUnitExp paperDetailUnit:paperDetail.getPaperDetailUnits()){
-
-				quesService.formatQuesUnit(paperDetailUnit.getQuestion());
-
-				List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
-				//套题序号
-				if(subQuesList != null && subQuesList.size() > 0){
-					for(Question subQues:subQuesList){
-						Map<String,String> params = new HashMap<String,String>();
-						params.put("number",String.valueOf(++subNum));
-						subQues.setQuesParams(params);
-						quesService.formatQuesUnit(subQues);
-					}
-				}else{
-					paperDetailUnit.setNumber(++subNum);
-				}
-			}
-		}
-	}
-
-
-	/**
-	 * 格式化查询条件
-	 * @param paperSearchInfo
+    public void backPapers(List<String> paperIds) {
+        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
+        papers.stream().forEach(paper -> {
+            paper.setPaperStatus(PaperStatus.DRAFT);
+        });
+        paperRepo.save(papers);
+    }
+
+    /**
+     * 初始化导出试卷DTO
+     * 
+     * @param id
+     * @return
+     */
+    public PaperExp getPaperDto(String id) {
+
+        // 获取paper
+        Paper paper = paperRepo.findOne(id);
+
+        // 创建paperDto
+        PaperExp paperExp = BeanCopierUtil.copyProperties(paper, PaperExp.class);
+        // 获取大题
+        List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
+        List<PaperDetailExp> paperDetailExps = BeanCopierUtil.copyPropertiesOfList(paperDetails, PaperDetailExp.class);
+        paperExp.setPaperDetails(paperDetailExps);
+
+        // 封装小题
+        for (int i = 0; i < paperDetailExps.size(); i++) {
+            List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
+            List<PaperDetailUnitExp> paperDetailUnitExps = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,
+                    PaperDetailUnitExp.class);
+            paperDetailExps.get(i).setPaperDetailUnits(paperDetailUnitExps);
+        }
+        // 初始化试卷内容
+        initPaper(paperExp);
+
+        return paperExp;
+    }
+
+    /**
+     * 初始化试卷内容(增加序号)
+     * 
+     * @param paperExp
      */
-	public void formatPaperSearchInfo(PaperSearchInfo paperSearchInfo){
-		if(StringUtils.isEmpty(paperSearchInfo.getCourseNo())){
-			paperSearchInfo.setCourseNo(null);
-		}
-		if(StringUtils.isEmpty(paperSearchInfo.getCreateTime())){
-			paperSearchInfo.setCreateTime(null);
-		}
-		if(StringUtils.isEmpty(paperSearchInfo.getCreator())){
-			paperSearchInfo.setCreator(null);
-		}
-		if(StringUtils.isEmpty(paperSearchInfo.getName())){
-			paperSearchInfo.setName(null);
-		}
-	}
-
-	/**
-	 * 填充大题小题数量与分数
-	 * @param paper
-	 */
-	public void formatPaper(Paper paper){
-		List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
-
-		//计算各大题总分
-		for(PaperDetail paperDetail:paperDetails){
-			List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetail);
-			if(paperDetailUnits.size() > 0){
-				int count = 0;
-				double score = 0;
-				PaperDetailUnit firstUnit = paperDetailUnits.get(0);
-				QuesStructType questionType = firstUnit.getQuestionType();
-				if(!questionType.equals(QuesStructType.NESTED_ANSWER_QUESTION)){
-					score = paperDetailUnits.stream().map(PaperDetailUnit::getQuestion)
-							.mapToDouble(Question::getScore).sum();
-					count = paperDetailUnits.size();
-				}else{
-					Question question = firstUnit.getQuestion();
-					List<Question> subQuestions = question.getSubQuestions();
-					score = subQuestions.stream().mapToDouble(Question::getScore).sum();
-					count = subQuestions.size();
-				}
-				paperDetail.setScore(score);
-				paperDetail.setUnitCount(count);
-			}
-		}
-		//计算试卷总分
-		double totalScore = paperDetails.stream().mapToDouble(PaperDetail::getScore).sum();
-		int totalCount = paperDetails.stream().mapToInt(PaperDetail::getUnitCount).sum();
-		paper.setUnitCount(totalCount);
-		paper.setPaperDetailCount(paperDetails.size());
-		paper.setTotalScore(totalScore);
-		paperDetailRepo.save(paperDetails);
-		paperRepo.save(paper);
-	}
+    public void initPaper(PaperExp paperExp) {
+        if (paperExp.getPaperDetails() == null || paperExp.getPaperDetails().size() == 0) {
+            return;
+        }
+        int mainNum = 0;
+        int subNum = 0;
+        Collections.sort(paperExp.getPaperDetails());
+        for (PaperDetailExp paperDetail : paperExp.getPaperDetails()) {
+            // 大题序号
+            paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
+            paperDetail.setNumber(++mainNum);
+            if (paperDetail.getPaperDetailUnits() == null || paperDetail.getPaperDetailUnits().size() == 0) {
+                return;
+            }
+            // 小题序号
+            for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
+
+                quesService.formatQuesUnit(paperDetailUnit.getQuestion());
+
+                List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
+                // 套题序号
+                if (subQuesList != null && subQuesList.size() > 0) {
+                    for (Question subQues : subQuesList) {
+                        Map<String, String> params = new HashMap<String, String>();
+                        params.put("number", String.valueOf(++subNum));
+                        subQues.setQuesParams(params);
+                        quesService.formatQuesUnit(subQues);
+                    }
+                } else {
+                    paperDetailUnit.setNumber(++subNum);
+                }
+            }
+        }
+    }
+
+    /**
+     * 格式化查询条件
+     * 
+     * @param paperSearchInfo
+     */
+    public void formatPaperSearchInfo(PaperSearchInfo paperSearchInfo) {
+        if (StringUtils.isEmpty(paperSearchInfo.getCourseNo())) {
+            paperSearchInfo.setCourseNo(null);
+        }
+        if (StringUtils.isEmpty(paperSearchInfo.getCreateTime())) {
+            paperSearchInfo.setCreateTime(null);
+        }
+        if (StringUtils.isEmpty(paperSearchInfo.getCreator())) {
+            paperSearchInfo.setCreator(null);
+        }
+        if (StringUtils.isEmpty(paperSearchInfo.getName())) {
+            paperSearchInfo.setName(null);
+        }
+    }
+
+    /**
+     * 填充大题小题数量与分数
+     * 
+     * @param paper
+     */
+    public void formatPaper(Paper paper) {
+        List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
+        // 计算试卷总分
+        List<PaperDetailUnit> paperDetailUnitAll = paperDetailUnitRepo.findByPaper(paper);
+        double totalScore = 0;
+        for (PaperDetailUnit unit : paperDetailUnitAll) {
+            if (unit.getScore() != null) {
+                totalScore += unit.getScore();
+            }
+
+        }
+        // 计算各大题总分
+        for (PaperDetail paperDetail : paperDetails) {
+            List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetail);
+            if (paperDetailUnits.size() > 0) {
+                int count = 0;
+                double score = 0;
+                PaperDetailUnit firstUnit = paperDetailUnits.get(0);
+                QuesStructType questionType = firstUnit.getQuestionType();
+                if (!questionType.equals(QuesStructType.NESTED_ANSWER_QUESTION)) {
+                    for (PaperDetailUnit unit : paperDetailUnits) {
+                        if (unit.getQuestion().getScore() != null) {
+                            score += unit.getQuestion().getScore();
+                        }
+                    }
+                    count = paperDetailUnits.size();
+                } else {
+                    Question question = firstUnit.getQuestion();
+                    List<Question> subQuestions = question.getSubQuestions();
+                    score = subQuestions.stream().mapToDouble(Question::getScore).sum();
+                    count = subQuestions.size();
+                }
+                paperDetail.setScore(score);
+                paperDetail.setUnitCount(count);
+            }
+        }
+        paper.setUnitCount(paperDetailUnitAll.size());
+        paper.setPaperDetailCount(paperDetails.size());
+        paper.setTotalScore(totalScore);
+        paperDetailRepo.save(paperDetails);
+        paperRepo.save(paper);
+    }
+
+    /**
+     * 先备份准备删掉的试题,然后再删掉
+     * 
+     * @param questionId
+     * @return
+     */
+    public List<String> deleteImportQuestionById(String questionId) {
+        Question ques = quesRepo.findOne(questionId);
+        List<PaperDetailUnit> pdus = CommonUtils.toList(paperDetailUnitRepo.findByQuestion(ques));
+        List<String> paperNames = new ArrayList<String>();
+        List<PaperDetailUnit> needPdus = new ArrayList<PaperDetailUnit>();// 需要删除的小题
+        List<Paper> papers = new ArrayList<Paper>();
+        for (PaperDetailUnit pdu : pdus) {
+            if (PaperType.GENERATE == pdu.getPaper().getPaperType()) {
+                paperNames.add(pdu.getPaper().getName());
+                needPdus.add(pdu);
+                if (!papers.contains(pdu.getPaper())) {
+                    papers.add(pdu.getPaper());
+                }
+
+            }
+        }
+        if (paperNames.size() == 0) {// 此试题没有被组卷调用,则可以删除此试题
+            paperDetailUnitRepo.delete(needPdus);
+            quesBakRepo.save(BeanCopierUtil.copyProperties(ques, QuestionBak.class));
+            quesRepo.delete(ques);
+            for (Paper paper : papers) {
+                formatPaper(paper);
+            }
+
+        }
+        return paperNames;
+    }
+
+    /**
+     * 向试卷中插入一个试题
+     * 
+     * @param paperId
+     * @param paperDetailId
+     * @return
+     */
+    public Paper insertQuestionToPaper(String paperId, String paperDetailId, Question question) {
+        question = quesRepo.save(question);
+        Paper paper = paperRepo.findOne(paperId);
+        PaperDetail pd = paperDetailRepo.findOne(paperDetailId);
+        PaperDetailUnit pdu = new PaperDetailUnit();
+        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperDetail(pd);
+        pdu.setPaper(paper);
+        pdu.setQuestionType(question.getQuestionType());
+        pdu.setQuestion(question);
+        pdu.setCreateTime(CommonUtils.getCurDateTime());
+        pdu.setPaperDetail(pd);
+        pdus.add(pdu);
+        Collections.sort(pdus);
+        pdu.setNumber(pdus.indexOf(pdu) + 1);
+        if (question.getScore() == null || question.getScore() == 0d) {
+            pdu.setScore(0d);
+        } else {
+            pdu.setScore(question.getScore());
+        }
+        paperDetailUnitRepo.save(pdu);
+        formatPaper(paper);
+        return paper;
+
+    }
 
 }

+ 30 - 16
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ImportPaperController.java

@@ -1,20 +1,22 @@
 package com.qmth.cqb.paper.web;
 
-import com.qmth.cqb.paper.dao.PaperRepo;
-import com.qmth.cqb.paper.service.PaperService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import java.io.File;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
+import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.service.ImportPaperService;
-import org.springframework.web.multipart.commons.CommonsMultipartFile;
+import com.qmth.cqb.paper.service.PaperService;
 
-import java.io.*;
-import java.util.HashMap;
-import java.util.Map;
+import io.swagger.annotations.ApiOperation;
 
 /**
  * Created by songyue on 16/12/28.
@@ -22,9 +24,9 @@ import java.util.Map;
 @RestController
 @RequestMapping("${api_cqb}/")
 public class ImportPaperController {
-	
-	@Autowired
-	ImportPaperService importPaperService;
+
+    @Autowired
+    ImportPaperService importPaperService;
 
     @Autowired
     PaperRepo paperRepo;
@@ -34,17 +36,29 @@ public class ImportPaperController {
 
     /**
      * 导入试卷
+     * 
      * @param paperName
      * @param file
      * @return
      */
-    @ApiOperation(value="导入试卷",notes="导入试卷")
+    @ApiOperation(value = "导入试卷", notes = "导入试卷")
     @PostMapping(value = "/importPaper")
-    public String importPaper(@RequestParam String paperName,
-                                      @RequestParam("file") CommonsMultipartFile file){
+    public String importPaper(@RequestParam String paperName, @RequestParam("file") CommonsMultipartFile file) {
         File tempFile = importPaperService.getUploadFile(file);
-        String returnStr = importPaperService.ImportPaper(paperName,tempFile);
+        String returnStr = importPaperService.ImportPaper(paperName, tempFile);
         return returnStr;
     }
 
+    /**
+     * 新增一张空白试卷
+     * 
+     * @param paper
+     * @return
+     */
+    @ApiOperation(value = "保存导入类型空白试卷", notes = "保存导入类型空白试卷")
+    @PostMapping(value = "/importPaper/saveBlankPaper/{courseNo}/{paperName}")
+    public ResponseEntity saveBlankPaper(@PathVariable String courseNo, @PathVariable String paperName) {
+        return new ResponseEntity(importPaperService.saveBlankPaper(courseNo, paperName), HttpStatus.OK);
+    }
+
 }

+ 37 - 4
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperController.java

@@ -5,8 +5,9 @@ import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.dto.PaperExp;
 import com.qmth.cqb.paper.model.Paper;
 import com.qmth.cqb.paper.model.PaperSearchInfo;
-import com.qmth.cqb.paper.service.ExportPaperService;
 import com.qmth.cqb.paper.service.PaperService;
+import com.qmth.cqb.question.model.Question;
+
 import io.swagger.annotations.ApiOperation;
 
 import java.util.Arrays;
@@ -20,8 +21,6 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletResponse;
-
 /**
  * Created by songyue on 16/12/28.
  */
@@ -55,7 +54,7 @@ public class PaperController {
      */
     @ApiOperation(value="保存试卷",notes="保存试卷")
     @PutMapping(value = "/paper")
-    public ResponseEntity getPaperById(@RequestBody PaperExp paper){
+    public ResponseEntity savePaperById(@RequestBody PaperExp paper){
         return new ResponseEntity(paperService.savePaper(paper),HttpStatus.OK);
     }
 
@@ -224,4 +223,38 @@ public class PaperController {
       paperService.deletGroupCode(Long.parseLong(examId), courseCode, groupCode);
         return new ResponseEntity(HttpStatus.OK);
     }
+    
+    /**
+     * 
+     * 删除导入试卷中的试题
+     * 
+     * @param examId
+     * @param courseCode
+     * @param groupCode
+     * @return
+     */
+    @ApiOperation(value = "删除导入试卷中的试题", notes = "删除导入试卷中的试题")
+    @DeleteMapping(value = "/paper/deleteQuestion/{questionId}/")
+    public ResponseEntity deleteGroup(@PathVariable String questionId) {
+        List<String> paperNames = paperService.deleteImportQuestionById(questionId);
+        return new ResponseEntity(paperNames, HttpStatus.OK);
+    }
+
+    /**
+     * 
+     * 向导入试卷中的新增试题
+     * 
+     * @param paperId
+     * @param paperDetailId
+     * @param question
+     * @return
+     */
+    @ApiOperation(value = "向导入试卷中的新增试题", notes = "向导入试卷中的新增试题")
+    @PostMapping(value = "/paper/addQuestion/{paperId}/{paperDetailId}")
+    public ResponseEntity insertQuestionToPaper(@PathVariable String paperId, 
+                                                @PathVariable String paperDetailId,
+                                                @RequestBody Question question) {
+        return new ResponseEntity(paperService.insertQuestionToPaper(paperId, paperDetailId, question), HttpStatus.OK);
+
+    }
 }

+ 84 - 65
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperDetailController.java

@@ -1,11 +1,5 @@
 package com.qmth.cqb.paper.web;
 
-import com.qmth.cqb.paper.model.PaperDetail;
-import com.qmth.cqb.paper.model.PaperDetailUnit;
-import com.qmth.cqb.paper.service.PaperDetailService;
-
-import io.swagger.annotations.ApiOperation;
-
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,74 +14,99 @@ import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.qmth.cqb.paper.model.PaperDetail;
+import com.qmth.cqb.paper.model.PaperDetailUnit;
+import com.qmth.cqb.paper.service.PaperDetailService;
+import com.qmth.cqb.paper.service.PaperService;
+
+import io.swagger.annotations.ApiOperation;
+
 /**
  * Created by songyue on 16/12/28.
  */
 @RestController
 @RequestMapping("${api_cqb}/")
 public class PaperDetailController {
-	@Autowired
-	PaperDetailService paperDetailService;
-	
-		
-	/**
-	 * 获取大题对应的小题
-	 * @param detail_id
-	 * @return
-	 */
-	@ApiOperation(value="获取大题对应的小题",notes="获取大题对应的小题")
-	@GetMapping(value = "/paperDetail/units/{detail_id}")
-	public List<PaperDetailUnit> getUnitsByPaperDetailId(String detail_id){
-		return paperDetailService.getUnitsByPaperDetailId(detail_id);
-	}
-		 
-	/**
-	 * 获取大题
-	 * @param detail_id
-	 * @return
-	 */
-	@ApiOperation(value="获取大题",notes="获取大题")
-	@GetMapping(value = "/paperDetail/{detail_id}")
-	public PaperDetail getPaperDetailId(@PathVariable String detail_id){
-		return paperDetailService.findById(detail_id);
-	}
 
+    @Autowired
+    PaperDetailService paperDetailService;
+
+    @Autowired
+    PaperService paperService;
+
+    /**
+     * 获取大题对应的小题
+     * 
+     * @param detail_id
+     * @return
+     */
+    @ApiOperation(value = "获取大题对应的小题", notes = "获取大题对应的小题")
+    @GetMapping(value = "/paperDetail/units/{detail_id}")
+    public List<PaperDetailUnit> getUnitsByPaperDetailId(String detail_id) {
+        return paperDetailService.getUnitsByPaperDetailId(detail_id);
+    }
+
+    /**
+     * 获取大题
+     * 
+     * @param detail_id
+     * @return
+     */
+    @ApiOperation(value = "获取大题", notes = "获取大题")
+    @GetMapping(value = "/paperDetail/{detail_id}")
+    public PaperDetail getPaperDetailId(@PathVariable String detail_id) {
+        return paperDetailService.findById(detail_id);
+    }
+
+    /**
+     * 更新大题信息
+     * 
+     * @param pd
+     * @return
+     */
+    @ApiOperation(value = "更新大题", notes = "更新大题")
+    @PutMapping(value = "/paperDetail")
+    public ResponseEntity updatePaperDetail(@ModelAttribute PaperDetail pd) {
+        PaperDetail paperDetail = paperDetailService.savePaperDetail(pd);
+        return new ResponseEntity(paperDetail, HttpStatus.OK);
 
-	/**
-	 * 更新大题信息
-	 * @param pd
-	 * @return
-	 */
-	@ApiOperation(value="更新大题",notes="更新大题")
-	@PutMapping(value = "/paperDetail")
-	public ResponseEntity updatePaperDetail(@ModelAttribute PaperDetail pd){
-		PaperDetail paperDetail = paperDetailService.savePaperDetail(pd);
-		return new ResponseEntity(paperDetail,HttpStatus.OK);
+    }
 
-	}
+    /**
+     * 新增大题
+     * 
+     * @param pd
+     * @return
+     */
+    @ApiOperation(value = "新增大题", notes = "新增大题")
+    @PostMapping(value = "/paperDetail")
+    public ResponseEntity addPaperDetail(@ModelAttribute PaperDetail pd) {
+        PaperDetail paperDetail = paperDetailService.savePaperDetail(pd);
+        return new ResponseEntity(paperDetail, HttpStatus.OK);
+    }
 
-	/**
-	 * 新增大题
-	 * @param pd
-	 * @return
-	 */
-	@ApiOperation(value="新增大题",notes="新增大题")
-	@PostMapping(value = "/paperDetail")
-	public ResponseEntity addPaperDetail(@ModelAttribute PaperDetail pd){
-		PaperDetail paperDetail = paperDetailService.savePaperDetail(pd);
-		return new ResponseEntity(paperDetail,HttpStatus.OK);
-	}
+    /**
+     * 删除大题
+     * 
+     * @param detail_id
+     * @return
+     */
+    @ApiOperation(value = "删除大题", notes = "删除大题")
+    @DeleteMapping(value = "/paperDetail/{detail_id}")
+    public ResponseEntity removePaperDetail(@PathVariable String detail_id) {
+        paperDetailService.deletePaperDetail(detail_id);
+        return new ResponseEntity(detail_id, HttpStatus.OK);
+    }
 
-	/**
-	 * 删除大题
-	 * @param detail_id
-	 * @return
-	 */
-	@ApiOperation(value="删除大题",notes="删除大题")
-	@DeleteMapping(value = "/paperDetail/{detail_id}")
-	public ResponseEntity removePaperDetail(@PathVariable String detail_id){
-		paperDetailService.deletePaperDetail(detail_id);
-		return new ResponseEntity(detail_id,HttpStatus.OK);
-	}
-	
+    /**
+     * 根据试卷ID得到所有大题
+     * 
+     * @param paperId
+     * @return
+     */
+    @ApiOperation(value = "根据试卷ID得到所有大题", notes = "根据试卷ID得到所有大题")
+    @GetMapping(value = "/paperDetail/paper/{paperId}")
+    public ResponseEntity getPaperDetailsByPaperId(@PathVariable String paperId) {
+        return new ResponseEntity(paperService.findPaperDetailsById(paperId), HttpStatus.OK);
+    }
 }

+ 10 - 0
cqb-question-resource/src/main/java/com/qmth/cqb/question/dao/QuesBakRepo.java

@@ -0,0 +1,10 @@
+package com.qmth.cqb.question.dao;
+
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.repository.query.QueryByExampleExecutor;
+
+import com.qmth.cqb.question.model.QuestionBak;
+
+public interface QuesBakRepo extends MongoRepository<QuestionBak, String>, QueryByExampleExecutor<QuestionBak> {
+
+}

+ 192 - 0
cqb-question-resource/src/main/java/com/qmth/cqb/question/model/QuestionBak.java

@@ -0,0 +1,192 @@
+package com.qmth.cqb.question.model;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.data.annotation.Id;
+
+import com.qmth.cqb.utils.CommonUtils;
+import com.qmth.cqb.utils.word.DocxProcessUtil;
+
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+
+public class QuestionBak implements Serializable {
+
+    private static final long serialVersionUID = -1247428210124550964L;
+
+    @Id
+    private String id;
+
+    private String quesBody;// 题干,默认为html
+
+    private String quesBodyWord;// 题干word
+
+    private byte[] quesPkg;// 试题wordpkg对象序列化数据
+
+    private String quesAnswer;// 答案,默认为html
+
+    private String quesAnswerWord;// 答案word
+
+    private String quesAnswerAnalysis;// 答案解析,默认为html
+
+    private String quesAnswerAnalysisWord;// 答案word解析
+
+    private List<QuesOption> quesOptions;// 试题选项
+
+    private List<QuesResource> quesResource;// 试题resource(试题资源库集合,适用于多媒体介质试题)
+
+    private QuesStructType questionType;// 试题结构类型
+
+    private String createTime;// 创建时间
+
+    private String updateTime;// 更新时间
+
+    private List<Question> subQuestions;// 子题目,用于套题
+
+    private Double score;// 预设分值
+
+    private Map<String, String> quesParams;// 试题属性
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getQuesBody() {
+        return quesBody;
+    }
+
+    public void setQuesBody(String quesBody) {
+        this.quesBody = quesBody;
+    }
+
+    public String getQuesBodyWord() {
+        return quesBodyWord;
+    }
+
+    public void setQuesBodyWord(String quesBodyWord) {
+        this.quesBodyWord = quesBodyWord;
+    }
+
+    public String getQuesAnswer() {
+        return quesAnswer;
+    }
+
+    public void setQuesAnswer(String quesAnswer) {
+        this.quesAnswer = quesAnswer;
+    }
+
+    public String getQuesAnswerWord() {
+        return quesAnswerWord;
+    }
+
+    public void setQuesAnswerWord(String quesAnswerWord) {
+        this.quesAnswerWord = quesAnswerWord;
+    }
+
+    public String getQuesAnswerAnalysis() {
+        return quesAnswerAnalysis;
+    }
+
+    public void setQuesAnswerAnalysis(String quesAnswerAnalysis) {
+        this.quesAnswerAnalysis = quesAnswerAnalysis;
+    }
+
+    public String getQuesAnswerAnalysisWord() {
+        return quesAnswerAnalysisWord;
+    }
+
+    public void setQuesAnswerAnalysisWord(String quesAnswerAnalysisWord) {
+        this.quesAnswerAnalysisWord = quesAnswerAnalysisWord;
+    }
+
+    public List<QuesOption> getQuesOptions() {
+        return quesOptions;
+    }
+
+    public void setQuesOptions(List<QuesOption> quesOptions) {
+        this.quesOptions = quesOptions;
+    }
+
+    public List<QuesResource> getQuesResource() {
+        return quesResource;
+    }
+
+    public void setQuesResource(List<QuesResource> quesResource) {
+        this.quesResource = quesResource;
+    }
+
+    public QuesStructType getQuestionType() {
+        return questionType;
+    }
+
+    public void setQuestionType(QuesStructType questionType) {
+        this.questionType = questionType;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(String updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public List<Question> getSubQuestions() {
+        return subQuestions;
+    }
+
+    public void setSubQuestions(List<Question> subQuestions) {
+        this.subQuestions = subQuestions;
+    }
+
+    public Map<String, String> getQuesParams() {
+        return quesParams;
+    }
+
+    public void setQuesParams(Map<String, String> quesParams) {
+        this.quesParams = quesParams;
+    }
+
+    public byte[] getQuesPkg() {
+        return quesPkg;
+    }
+
+    public WordprocessingMLPackage getPkgObj() {
+        if (this.quesPkg != null && this.quesPkg.length > 0) {
+            return DocxProcessUtil.getPkg(this.quesPkg);
+        } else {
+            return null;
+        }
+
+    }
+
+    public void setQuesPkg(byte[] quesPkg) {
+        this.quesPkg = quesPkg;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public QuestionBak() {
+        this.createTime = CommonUtils.getCurDateTime();
+    }
+}

+ 8 - 2
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuesService.java

@@ -36,9 +36,15 @@ public class QuesService {
         if (question.getQuesOptions() != null && question.getQuesOptions().size() > 0) {
             List<QuesOption> quesOptions = question.getQuesOptions();
             List<QuesOption> saveQuesOptions = saveQues.getQuesOptions();
-            for (int i = 0; i < quesOptions.size(); i++) {
-                saveQuesOptions.get(i).setOptionBody(quesOptions.get(i).getOptionBody());
+            if (saveQuesOptions.size() != quesOptions.size()) {
+                saveQues.setQuesOptions(quesOptions);
+            } else {
+                for (int i = 0; i < quesOptions.size(); i++) {
+                    saveQuesOptions.get(i).setOptionBody(quesOptions.get(i).getOptionBody());
+
+                }
             }
+
         }
         quesRepo.save(saveQues);
     }