Browse Source

重构部分代码,增加spring-cloud配置与多环境配置

宋悦 8 năm trước cách đây
mục cha
commit
975014c2ee
21 tập tin đã thay đổi với 288 bổ sung30 xóa
  1. 6 0
      cqb-base/src/main/java/com/qmth/cqb/base/web/CourseController.java
  2. 1 0
      cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java
  3. 3 0
      cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/web/GenPaperController.java
  4. 43 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PaperExp.java
  5. 1 1
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExportPaperService.java
  6. 115 5
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java
  7. 3 1
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractController.java
  8. 3 4
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/ImportPaperController.java
  9. 14 2
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperController.java
  10. 5 1
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperDetailUnitController.java
  11. 5 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperStructController.java
  12. 1 1
      cqb-question-resource/src/main/java/com/qmth/cqb/question/model/Question.java
  13. 30 0
      cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuesService.java
  14. 20 12
      cqb-question-resource/src/main/java/com/qmth/cqb/question/web/QuesController.java
  15. 10 1
      cqb-starter/pom.xml
  16. 4 0
      cqb-starter/src/main/java/com/qmth/cqb/App.java
  17. 3 0
      cqb-starter/src/main/resources/application-dev.properties
  18. 3 0
      cqb-starter/src/main/resources/application-prod.properties
  19. 3 0
      cqb-starter/src/main/resources/application-test.properties
  20. 3 2
      cqb-starter/src/main/resources/application.properties
  21. 12 0
      pom.xml

+ 6 - 0
cqb-base/src/main/java/com/qmth/cqb/base/web/CourseController.java

@@ -2,6 +2,7 @@ package com.qmth.cqb.base.web;
 
 import java.util.List;
 
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -34,6 +35,7 @@ public class CourseController {
      * 获取全部课程
      * @return
      */
+    @ApiOperation(value="获取全部课程",notes="获取全部课程")
     @GetMapping(value = "/course/{curPage}/{pageSize}")
     public ResponseEntity getAllCourse(@ModelAttribute Course searchCondition,
                                        @PathVariable int curPage,
@@ -47,6 +49,7 @@ public class CourseController {
      * @param course
      * @return
      */
+    @ApiOperation(value="更新课程",notes="更新课程")
     @PutMapping(value = "/course")
     public ResponseEntity updateCourse(@ModelAttribute Course course){
     	return new ResponseEntity(courseRepo.save(course),HttpStatus.OK);
@@ -57,6 +60,7 @@ public class CourseController {
      * @param course
      * @return
      */
+    @ApiOperation(value="新增课程",notes="新增课程")
     @PostMapping(value = "/course")
     public ResponseEntity addCourse(@ModelAttribute Course course){
     	return new ResponseEntity(courseRepo.save(course),HttpStatus.OK);
@@ -67,6 +71,7 @@ public class CourseController {
      * @param coruse_id
      * @return
      */
+    @ApiOperation(value="删除课程",notes="删除课程")
     @DeleteMapping(value = "/course/{coruse_id}")
     public ResponseEntity removeCourse(@PathVariable String coruse_id){
         courseRepo.delete(coruse_id);
@@ -78,6 +83,7 @@ public class CourseController {
      * @param keyword
      * @return
      */
+    @ApiOperation(value="根据课程名称或者课程编号获取课程信息",notes="根据课程名称或者课程编号获取课程信息")
     @GetMapping(value = "/course")
     public ResponseEntity getCourseByKeyword(@RequestParam String keyword){
         return new ResponseEntity(courseService.findCoursesByKeyword(keyword),

+ 1 - 0
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java

@@ -688,6 +688,7 @@ public final class DocxProcessUtil {
      * @return
      */
     public static WordprocessingMLPackage getPkg(byte [] bytes){
+        if(bytes.length == 0)return null;
         InputStream inputStream = new ByteArrayInputStream(bytes);
         WordprocessingMLPackage wordMLPackage = null;
         try {

+ 3 - 0
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/web/GenPaperController.java

@@ -1,6 +1,7 @@
 package com.qmth.cqb.genpaper.web;
 
 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;
@@ -22,11 +23,13 @@ public class GenPaperController {
     @Autowired
     GenPaperService genPaperService;
 
+    @ApiOperation(value="简易随机组卷",notes="简易随机组卷")
     @PostMapping("/genPaper/simple")
     public ResponseEntity genPaperSimple(@RequestBody GenPaperDto genPaperDto){
         return new ResponseEntity("", HttpStatus.OK);
     }
 
+    @ApiOperation(value="精细组卷",notes="精细组卷")
     @PostMapping("/genPaper/normal")
     public ResponseEntity genPaperNormal(@RequestBody GenPaperDto genPaperDto){
         return new ResponseEntity("", HttpStatus.OK);

+ 43 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PaperExp.java

@@ -1,5 +1,8 @@
 package com.qmth.cqb.paper.dto;
 
+import com.qmth.cqb.utils.enums.PaperStatus;
+import com.qmth.cqb.utils.enums.PaperType;
+
 import java.io.Serializable;
 import java.util.Map;
 import java.util.*;
@@ -19,6 +22,14 @@ public class PaperExp implements Serializable{
 
     private Double totalScore;//试卷总分
 
+    private PaperStatus paperStatus;//试卷状态(待审核、通过、不通过)
+
+    private PaperType paperType;//试卷类型(导入、组卷)
+
+    private String courseNo;
+
+    private String courseName;
+
     private List<PaperDetailExp> paperDetails;
 
     private Map<String,String> params;//导入试卷属性
@@ -59,6 +70,38 @@ public class PaperExp implements Serializable{
         this.totalScore = totalScore;
     }
 
+    public PaperStatus getPaperStatus() {
+        return paperStatus;
+    }
+
+    public void setPaperStatus(PaperStatus paperStatus) {
+        this.paperStatus = paperStatus;
+    }
+
+    public PaperType getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(PaperType paperType) {
+        this.paperType = paperType;
+    }
+
+    public String getCourseNo() {
+        return courseNo;
+    }
+
+    public void setCourseNo(String courseNo) {
+        this.courseNo = courseNo;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
     public List<PaperDetailExp> getPaperDetails() {
         return paperDetails;
     }

+ 1 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExportPaperService.java

@@ -148,7 +148,7 @@ public class ExportPaperService {
         Paper paper = paperRepo.findOne(id);
         List<WordprocessingMLPackage> wordMLPackages = paperDetailUnitRepo.findByPaper(paper)
                 .stream().map(PaperDetailUnit::getQuestion).collect(Collectors.toList())
-                .stream().map(Question::getQuesPkgObj).collect(Collectors.toList());
+                .stream().map(Question::getPkgObj).collect(Collectors.toList());
         return wordMLPackages;
     }
 

+ 115 - 5
cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java

@@ -4,7 +4,17 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.qmth.cqb.paper.model.PaperSearchInfo;
+import com.google.gson.Gson;
+import com.qmth.cqb.paper.dao.PaperDetailRepo;
+import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
+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.question.dao.QuesRepo;
+import com.qmth.cqb.question.model.QuesOption;
+import com.qmth.cqb.question.model.Question;
+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;
@@ -19,9 +29,6 @@ import org.springframework.stereotype.Service;
 
 import com.qmth.cqb.paper.dao.ExamPaperRepo;
 import com.qmth.cqb.paper.dao.PaperRepo;
-import com.qmth.cqb.paper.model.ExamPaper;
-import com.qmth.cqb.paper.model.Paper;
-import com.qmth.cqb.paper.model.PaperDetail;
 
 /**
  * Created by songyue on 16/12/28.
@@ -38,6 +45,24 @@ public class PaperService {
 	@Autowired
 	ExamPaperRepo examPaperRepo;
 
+	@Autowired
+	PaperDetailRepo paperDetailRepo;
+
+	@Autowired
+	PaperDetailUnitRepo paperDetailUnitRepo;
+
+	@Autowired
+	QuesRepo quesRepo;
+
+	@Autowired
+	Gson gson;
+
+	@Autowired
+	PaperDetailUnitService paperDetailUnitService;
+
+	@Autowired
+	QuesService quesService;
+
 	/**
 	 * 查询所有已导入试卷
 	 * @param paperSearchInfo
@@ -54,6 +79,16 @@ public class PaperService {
 		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);
+		return paperRepo.save(paper);
+	}
+
 	/**
 	 * 查询所有已组试卷
 	 * @param paperSearchInfo
@@ -191,12 +226,87 @@ public class PaperService {
 	 * 批量待审核试卷
 	 * @param paperIds
 	 */
-	public void initPapers(List<String> 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;
+		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.formatQues(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);
+					}
+				}else{
+					paperDetailUnit.setNumber(++subNum);
+				}
+			}
+		}
+	}
+
+
+	/**
+	 * 格式化查询条件
+	 * @param paperSearchInfo
+     */
 	public void formatPaperSearchInfo(PaperSearchInfo paperSearchInfo){
 		if(StringUtils.isEmpty(paperSearchInfo.getCourseNo())){
 			paperSearchInfo.setCourseNo(null);

+ 3 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractController.java

@@ -8,6 +8,7 @@ import com.qmth.cqb.paper.service.PaperService;
 import java.util.Arrays;
 import java.util.List;
 
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.ModelAttribute;
@@ -26,7 +27,8 @@ public class ExtractController {
     
     @Autowired
     PaperService paperService;
-    
+
+	@ApiOperation(value="抽取试卷",notes="抽取试卷")
     @GetMapping(value = "/extract/{exam_id}/{course_code}/{group_code}")
     public Paper extract(@PathVariable String exam_id,@PathVariable String course_code,
     		@PathVariable String group_code){

+ 3 - 4
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ImportPaperController.java

@@ -2,7 +2,8 @@ package com.qmth.cqb.paper.web;
 
 import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.service.PaperService;
-import org.apache.commons.io.IOUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -11,10 +12,7 @@ import org.springframework.web.bind.annotation.*;
 import com.qmth.cqb.paper.service.ImportPaperService;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
-import javax.servlet.http.HttpServletRequest;
 import java.io.*;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * Created by songyue on 16/12/28.
@@ -38,6 +36,7 @@ public class ImportPaperController {
      * @param file
      * @return
      */
+    @ApiOperation(value="导入试卷",notes="导入试卷")
     @PostMapping(value = "/importPaper")
     public ResponseEntity importPaper(@RequestParam String paperName,
                                       @RequestParam("file") CommonsMultipartFile file){

+ 14 - 2
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperController.java

@@ -1,6 +1,7 @@
 package com.qmth.cqb.paper.web;
 
 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.PaperService;
@@ -37,7 +38,18 @@ public class PaperController {
     @ApiOperation(value="根据Id获取试卷",notes="根据Id获取试卷")
     @GetMapping(value = "/paper/{paperId}")
     public ResponseEntity getPaperById(@PathVariable String paperId){
-        return new ResponseEntity(paperRepo.findOne(paperId),HttpStatus.OK);
+        return new ResponseEntity(paperService.getPaperDto(paperId),HttpStatus.OK);
+    }
+
+    /**
+     * 保存试卷
+     * @param paper
+     * @return
+     */
+    @ApiOperation(value="保存试卷",notes="保存试卷")
+    @PutMapping(value = "/paper")
+    public ResponseEntity getPaperById(@RequestBody PaperExp paper){
+        return new ResponseEntity(paperService.savePaper(paper),HttpStatus.OK);
     }
 
     /**
@@ -117,7 +129,7 @@ public class PaperController {
     @ApiOperation(value="批量待审核试卷",notes="批量待审核试卷")
     @PutMapping(value = "/paper/draft")
     public ResponseEntity initPapers(@RequestBody PaperSearchInfo paperSearchInfo){
-        paperService.initPapers(Arrays.asList(paperSearchInfo.getPaperIds()));
+        paperService.backPapers(Arrays.asList(paperSearchInfo.getPaperIds()));
         return new ResponseEntity(HttpStatus.OK);
     }
 

+ 5 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperDetailUnitController.java

@@ -33,6 +33,7 @@ public class PaperDetailUnitController {
 	 * @param unit_id
 	 * @return
 	 */
+	@ApiOperation(value="获取小题对应的试题",notes="获取小题对应的试题")
 	@GetMapping(value = "/paperDetailUnit/question/{unit_id}")
 	public Question getQuestionByUnitId(String unit_id){
 		return unitService.getQuestionByPaperDetailUnitId(unit_id);
@@ -43,7 +44,7 @@ public class PaperDetailUnitController {
 	 * @param unit_id
 	 * @return
 	 */
-	@ApiOperation(value="获取单个小题",notes="获取单个小题")
+	@ApiOperation(value="获取小题",notes="获取小题")
 	@GetMapping(value = "/paperDetailUnit/{unit_id}")
 	public PaperDetailUnit getPaperDetailUnitId(@PathVariable String unit_id){
 		return unitService.findById(unit_id);
@@ -55,6 +56,7 @@ public class PaperDetailUnitController {
 	 * @param pdu
 	 * @return
 	 */
+	@ApiOperation(value="更新小题",notes="更新小题")
 	@PutMapping(value = "/paperDetailUnit")
 	public ResponseEntity updatePaperDetailUnit(@ModelAttribute PaperDetailUnit pdu){
 		PaperDetailUnit pdUnit = unitService.savePaperDetailUnit(pdu);
@@ -67,6 +69,7 @@ public class PaperDetailUnitController {
 	 * @param pdu
 	 * @return
 	 */
+	@ApiOperation(value="新增小题",notes="新增小题")
 	@PostMapping(value = "/paperDetailUnit")
 	public ResponseEntity addPaperDetailUnit(@ModelAttribute PaperDetailUnit pdu){
 		PaperDetailUnit pdUnit = unitService.savePaperDetailUnit(pdu);
@@ -78,6 +81,7 @@ public class PaperDetailUnitController {
 	 * @param unit_id
 	 * @return
 	 */
+	@ApiOperation(value="删除小题",notes="删除小题")
 	@DeleteMapping(value = "/paperDetailUnit/{unit_id}")
 	public ResponseEntity removePaperDetailUnit(@PathVariable String unit_id){
 		unitService.deletePaperDetailUnit(unit_id);

+ 5 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperStructController.java

@@ -1,5 +1,6 @@
 package com.qmth.cqb.paper.web;
 
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -30,6 +31,7 @@ public class PaperStructController {
      * @param 
      * @return
      */
+    @ApiOperation(value="获取试卷结构",notes="获取试卷结构")
     @GetMapping(value = "/paperStructure/{id}")
     public PaperStruct getPaperStructureById(@PathVariable String id){
         return paperStructService.findById(id);
@@ -41,6 +43,7 @@ public class PaperStructController {
      * @param 
      * @return
      */
+    @ApiOperation(value="更新试卷结构",notes="更新试卷结构")
     @PutMapping(value = "/paperStructure")
     public ResponseEntity updatePaperStructure(@ModelAttribute PaperStruct ps){
     	PaperStruct paperStruct = paperStructService.savePaperStructure(ps);
@@ -53,6 +56,7 @@ public class PaperStructController {
      * @param ps
      * @return
      */
+    @ApiOperation(value="新增试卷结构",notes="新增试卷结构")
     @PostMapping(value = "/paperStructure")
     public ResponseEntity addPaperStructure(@ModelAttribute PaperStruct ps){
     	PaperStruct paperStruct = paperStructService.savePaperStructure(ps);
@@ -64,6 +68,7 @@ public class PaperStructController {
      * @param id
      * @return
      */
+    @ApiOperation(value="删除试卷结构",notes="删除试卷结构")
     @DeleteMapping(value = "/paperStructure/{id}")
     public ResponseEntity removePaperStructure(@PathVariable String id){
     	paperStructService.deletePaperStructure(id);

+ 1 - 1
cqb-question-resource/src/main/java/com/qmth/cqb/question/model/Question.java

@@ -166,7 +166,7 @@ public class Question implements Serializable{
         return quesPkg;
     }
 
-    public WordprocessingMLPackage getQuesPkgObj(){
+    public WordprocessingMLPackage getPkgObj(){
         return DocxProcessUtil.getPkg(this.quesPkg);
     }
 

+ 30 - 0
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuesService.java

@@ -35,4 +35,34 @@ public class QuesService {
         Question ques = BeanCopierUtil.copyProperties(searchCondition,Question.class);
         return quesRepo.findAll(Example.of(ques),new PageRequest(curPage - 1,pageSize));
     }
+
+    /**
+     * 按ID获取试题
+     * @param id
+     * @return
+     */
+    public Question findById(String id){
+        Question question = quesRepo.findOne(id);
+        formatQues(question);
+        return question;
+    }
+
+    /**
+     * 去除试题中的word
+     * @param question
+     */
+    public void formatQues(Question question){
+        question.setQuesBodyWord(null);
+        question.setQuesAnswerWord(null);
+        question.setQuesAnswerAnalysisWord(null);
+        question.setQuesPkg(new byte[0]);
+        if(question.getQuesOptions() != null && question.getQuesOptions().size() > 0){
+            question.getQuesOptions().stream().forEach(quesOption -> {
+                quesOption.setOptionBodyWord(null);});
+        }
+        if(question.getSubQuestions() != null && question.getSubQuestions().size() > 0){
+            question.getSubQuestions().stream().forEach(subQues->{
+                formatQues(subQues);});
+        }
+    }
 }

+ 20 - 12
cqb-question-resource/src/main/java/com/qmth/cqb/question/web/QuesController.java

@@ -19,14 +19,7 @@ import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.ModelAttribute;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * Created by songyue on 16/12/28.
@@ -49,7 +42,7 @@ public class QuesController {
      * @param id
      * @return
      */
-    @ApiOperation(value="获取单个试题",notes="获取单个试题")
+    @ApiOperation(value="获取试题",notes="获取试题")
     @GetMapping(value = "/question/{id}")
     public ResponseEntity getQuesById(@PathVariable String id){
         return new ResponseEntity(quesRepo.findOne(id),HttpStatus.OK);
@@ -61,7 +54,7 @@ public class QuesController {
      */
     @ApiOperation(value="分页查询试题",notes="分页查询试题")
     @GetMapping(value = "/question/{curPage}/{pageSize}")
-    public ResponseEntity getAllQuestion(@ModelAttribute QuestionSearchCondition searchCondition,                                              @PathVariable int curPage,
+    public ResponseEntity getAllQuestion(@ModelAttribute QuestionSearchCondition searchCondition,                                                @PathVariable int curPage,
                                          @PathVariable int pageSize){
       return new ResponseEntity(quesService.findAll(searchCondition, curPage, pageSize),
               HttpStatus.OK);
@@ -74,7 +67,7 @@ public class QuesController {
      */
     @ApiOperation(value="更新试题",notes="更新试题")
     @PutMapping(value = "/question")
-    public ResponseEntity updateQuestion(@ModelAttribute Question question){
+    public ResponseEntity updateQuestion(@RequestBody Question question){
         return new ResponseEntity(quesRepo.save(question),HttpStatus.OK);
     	
     }
@@ -86,7 +79,7 @@ public class QuesController {
      */
     @ApiOperation(value="新增试题",notes="新增试题")
     @PostMapping(value = "/question")
-    public ResponseEntity addQuestion(@ModelAttribute Question question){
+    public ResponseEntity addQuestion(@RequestBody Question question){
       return new ResponseEntity(quesRepo.save(question),HttpStatus.CREATED);
     }
 
@@ -101,4 +94,19 @@ public class QuesController {
     	quesRepo.delete(id);
     	return new ResponseEntity(HttpStatus.OK);
     }
+
+    /**
+     * 删除套题子题
+     * @param id
+     * @return
+     */
+    @ApiOperation(value="删除套题子题",notes="删除套题子题")
+    @PutMapping(value = "/question/{id}/{number}")
+    public ResponseEntity removeQuestion(@PathVariable String id,@PathVariable String number){
+        Question question = quesRepo.findOne(id);
+        List<Question> subQuestions = question.getSubQuestions();
+        subQuestions.remove(Integer.parseInt(number));
+        return new ResponseEntity(quesRepo.save(question),HttpStatus.OK);
+    }
+
 }

+ 10 - 1
cqb-starter/pom.xml

@@ -84,10 +84,19 @@
             <artifactId>spring-boot-devtools</artifactId>
             <optional>true</optional>
         </dependency>
-        
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-feign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-eureka</artifactId>
+        </dependency>
 
     </dependencies>
 
+
     <build>
         <plugins>
             <plugin>

+ 4 - 0
cqb-starter/src/main/java/com/qmth/cqb/App.java

@@ -6,6 +6,8 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
 import org.springframework.context.annotation.Bean;
 import org.springframework.web.multipart.MultipartResolver;
 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
@@ -15,6 +17,8 @@ import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  *
  */
 @SpringBootApplication
+@EnableEurekaClient
+@EnableFeignClients
 @EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
 public class App {
 

+ 3 - 0
cqb-starter/src/main/resources/application-dev.properties

@@ -0,0 +1,3 @@
+spring.data.mongodb.uri=mongodb://localhost:27017/comm-ques-bank
+spring.data.mongodb.grid-fs-database=comm-ques-bank
+eureka.client.serviceUrl.defaultZone=http://192.168.1.88:1111/eureka/

+ 3 - 0
cqb-starter/src/main/resources/application-prod.properties

@@ -0,0 +1,3 @@
+spring.data.mongodb.uri=mongodb://localhost:27017/comm-ques-bank
+spring.data.mongodb.grid-fs-database=comm-ques-bank
+eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

+ 3 - 0
cqb-starter/src/main/resources/application-test.properties

@@ -0,0 +1,3 @@
+spring.data.mongodb.uri=mongodb://localhost:27017/comm-ques-bank
+spring.data.mongodb.grid-fs-database=comm-ques-bank
+eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

+ 3 - 2
cqb-starter/src/main/resources/application.properties

@@ -1,5 +1,6 @@
-spring.data.mongodb.uri=mongodb://localhost:27017/comm-ques-bank
-spring.data.mongodb.grid-fs-database=comm-ques-bank
+spring.profiles.active=dev
 server.port=8888
 logging.config=classpath:log4j2.xml
+spring.application.name=ExamCloud-service-question
+hystrix.command.default.execution.timeout.enabled=false
 api_cqb=/api/ecs_ques

+ 12 - 0
pom.xml

@@ -37,6 +37,18 @@
   <dependencies>
   </dependencies>
 
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.springframework.cloud</groupId>
+        <artifactId>spring-cloud-dependencies</artifactId>
+        <version>Brixton.RELEASE</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
   <build>
     <plugins>
       <plugin>