Răsfoiți Sursa

Merge branch 'master' of https://git.oschina.net/songyue123456/comm-ques-bank into dev0410

luoshi@qmth.com.cn 8 ani în urmă
părinte
comite
dbbb4e2893

+ 50 - 28
cqb-base/src/main/java/com/qmth/cqb/base/web/CourseController.java

@@ -2,17 +2,26 @@ 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;
-import org.springframework.web.bind.annotation.*;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import com.google.gson.Gson;
 import com.qmth.cqb.base.dao.CourseRepo;
 import com.qmth.cqb.base.model.Course;
 import com.qmth.cqb.base.service.CourseService;
 
+import io.swagger.annotations.ApiOperation;
+
 /**
  * Created by songyue on 16/12/26.
  */
@@ -23,83 +32,96 @@ public class CourseController {
 
     @Autowired
     Gson gson;
-    
+
     @Autowired
     CourseRepo courseRepo;
 
     @Autowired
     CourseService courseService;
 
-
     /**
      * 获取全部课程
+     * 
      * @return
      */
-    @ApiOperation(value="获取全部课程",notes="获取全部课程")
+    @ApiOperation(value = "获取全部课程", notes = "获取全部课程")
     @GetMapping(value = "/course/{curPage}/{pageSize}")
-    public ResponseEntity getAllCourse(@ModelAttribute Course searchCondition,
-                                       @PathVariable int curPage,
-                                       @PathVariable int pageSize){
-        return new ResponseEntity(courseService.findAll(searchCondition,curPage,pageSize),
-                HttpStatus.OK);
+    public ResponseEntity getAllCourse(@ModelAttribute Course searchCondition, @PathVariable int curPage,
+            @PathVariable int pageSize) {
+        return new ResponseEntity(courseService.findAll(searchCondition, curPage, pageSize), HttpStatus.OK);
     }
 
     /**
      * 更新课程
+     * 
      * @param course
      * @return
      */
-    @ApiOperation(value="更新课程",notes="更新课程")
+    @ApiOperation(value = "更新课程", notes = "更新课程")
     @PutMapping(value = "/course")
-    public ResponseEntity updateCourse(@ModelAttribute Course course){
-    	return new ResponseEntity(courseRepo.save(course),HttpStatus.OK);
+    public ResponseEntity updateCourse(@ModelAttribute Course course) {
+        return new ResponseEntity(courseRepo.save(course), HttpStatus.OK);
     }
 
     /**
      * 新增课程
+     * 
      * @param course
      * @return
      */
-    @ApiOperation(value="新增课程",notes="新增课程")
+    @ApiOperation(value = "新增课程", notes = "新增课程")
     @PostMapping(value = "/course")
-    public ResponseEntity addCourse(@ModelAttribute Course course){
-    	return new ResponseEntity(courseRepo.save(course),HttpStatus.OK);
+    public ResponseEntity addCourse(@ModelAttribute Course course) {
+        return new ResponseEntity(courseRepo.save(course), HttpStatus.OK);
     }
 
     /**
      * 删除课程
+     * 
      * @param coruse_id
      * @return
      */
-    @ApiOperation(value="删除课程",notes="删除课程")
+    @ApiOperation(value = "删除课程", notes = "删除课程")
     @DeleteMapping(value = "/course/{coruse_id}")
-    public ResponseEntity removeCourse(@PathVariable String coruse_id){
+    public ResponseEntity removeCourse(@PathVariable String coruse_id) {
         courseRepo.delete(coruse_id);
-    	return new ResponseEntity(HttpStatus.OK);
+        return new ResponseEntity(HttpStatus.OK);
     }
-    
+
     /**
      * 根据课程名称或者课程编号获取课程信息
+     * 
      * @param keyword
      * @return
      */
-    @ApiOperation(value="根据课程名称或者课程编号获取课程信息",notes="根据课程名称或者课程编号获取课程信息")
+    @ApiOperation(value = "根据课程名称或者课程编号获取课程信息", notes = "根据课程名称或者课程编号获取课程信息")
     @GetMapping(value = "/course")
-    public ResponseEntity getCourseByKeyword(@RequestParam String keyword){
-        return new ResponseEntity(courseService.findCoursesByKeyword(keyword),
-                HttpStatus.OK);
+    public ResponseEntity getCourseByKeyword(@RequestParam String keyword) {
+        return new ResponseEntity(courseService.findCoursesByKeyword(keyword), HttpStatus.OK);
     }
 
     /**
      * 根据课程编号获取课程信息
+     * 
      * @param courseNo
      * @return
      */
-    @ApiOperation(value="根据课程编号获取课程信息",notes="根据课程编号获取课程信息")
+    @ApiOperation(value = "根据课程编号获取课程信息", notes = "根据课程编号获取课程信息")
     @GetMapping(value = "/course/{courseNo}")
-    public ResponseEntity getCourseByNo(@PathVariable String courseNo){
-        return new ResponseEntity(courseRepo.findByCourseNo(courseNo),
-                HttpStatus.OK);
+    public ResponseEntity getCourseByNo(@PathVariable String courseNo) {
+        return new ResponseEntity(courseRepo.findByCourseNo(courseNo), HttpStatus.OK);
+    }
+
+    /**
+     * 查询所有课程
+     *
+     * @return
+     */
+    @ApiOperation(value = " 查询所有课程", notes = "查询所有课程")
+    @GetMapping(value = "/course/allCourses")
+    public ResponseEntity getAllCourses() {
+        List<Course> courses = courseRepo.findAll();
+        return new ResponseEntity(courses, HttpStatus.OK);
     }
 
 }

+ 6 - 4
cqb-paper/src/main/java/com/qmth/cqb/paper/dao/PaperRepo.java

@@ -3,21 +3,23 @@ package com.qmth.cqb.paper.dao;
 import java.util.List;
 import java.util.Map;
 
-import com.qmth.cqb.utils.enums.PaperStatus;
-import com.qmth.cqb.utils.enums.PaperType;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.mongodb.repository.MongoRepository;
 import org.springframework.data.repository.query.QueryByExampleExecutor;
 
 import com.qmth.cqb.paper.model.Paper;
+import com.qmth.cqb.utils.enums.PaperStatus;
+import com.qmth.cqb.utils.enums.PaperType;
 
-public interface PaperRepo extends MongoRepository<Paper, String>,QueryByExampleExecutor<Paper> {
+public interface PaperRepo extends MongoRepository<Paper, String>, QueryByExampleExecutor<Paper> {
 
     List<Paper> findByParams(Map params);
 
     Page<Paper> findByPaperType(PaperType paperType, Pageable pageable);
 
-    Page<Paper> findByPaperStatus(PaperStatus paperStatus,Pageable pageable);
+    Page<Paper> findByPaperStatus(PaperStatus paperStatus, Pageable pageable);
+
+    Paper findByName(String name);
 
 }

+ 15 - 5
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -86,11 +86,14 @@ public class ImportPaperService {
     /**
      * 导入试卷
      *
+     * @param paperName
+     * @param courseNo
      * @param file
      * @return
      */
-    public String ImportPaper(String paperName, File file) {
-        String errorInfo = processImportPaper(paperName, file);
+    public String ImportPaper(String paperName, String courseNo, File file) {
+        String errorInfo = paperService.checkPaperName(paperName);
+        errorInfo += processImportPaper(paperName, courseNo, file);
         if (StringUtils.isEmpty(errorInfo)) {
             return "success";
         } else {
@@ -138,7 +141,7 @@ public class ImportPaperService {
      *
      * @param file
      */
-    public String processImportPaper(String paperName, File file) {
+    public String processImportPaper(String paperName, String courseNo, File file) {
 
         WordprocessingMLPackage wordMLPackage;
         WordprocessingMLPackage tmpWordMlPackage;
@@ -159,6 +162,8 @@ public class ImportPaperService {
             // 创建试卷类
             Paper paper = new Paper();
 
+            paper.setCourseNo(courseNo);
+
             // 设置试卷
             initPaper(paper, paperName);
 
@@ -782,9 +787,13 @@ public class ImportPaperService {
      * @param paperName
      * @return
      */
-    public Paper saveBlankPaper(String courseNo, String paperName) {
+    public String saveBlankPaper(String courseNo, String paperName) {
         Paper paper = new Paper();
         String courseName = courseRepo.findByCourseNo(courseNo).getCourseName();
+        String msg = paperService.checkPaperName(paperName);
+        if (msg != null) {
+            return msg;
+        }
         initPaper(paper, paperName);
         paper.setCourseNo(courseNo);
         paper.setCourseName(courseName);
@@ -794,6 +803,7 @@ public class ImportPaperService {
         pd.setPaper(paper);
         paperRepo.save(paper);
         paperDetailRepo.save(pd);
-        return paper;
+        msg = "success";
+        return msg;
     }
 }

+ 16 - 3
cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java

@@ -499,7 +499,7 @@ public class PaperService {
         Paper paper = paperRepo.findOne(paperId);
         PaperDetail pd = paperDetailRepo.findOne(paperDetailId);
         List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperDetail(pd);
-        List<PaperDetailUnit> saveUnits = paperDetailUnitRepo.findByPaperDetail(pd);
+        List<PaperDetailUnit> saveUnits = new ArrayList<PaperDetailUnit>();
         for (Question ques : questions) {
             PaperDetailUnit pdu = new PaperDetailUnit();
             pdu.setPaper(paper);
@@ -508,8 +508,6 @@ public class PaperService {
             pdu.setCreateTime(CommonUtils.getCurDateTime());
             pdu.setPaperDetail(pd);
             pdus.add(pdu);
-            Collections.sort(pdus);
-            pdu.setNumber(pdus.indexOf(pdu) + 1);
             if (ques.getScore() == null || ques.getScore() == 0d) {
                 pdu.setScore(0d);
             } else {
@@ -517,9 +515,24 @@ public class PaperService {
             }
             saveUnits.add(pdu);
         }
+        Collections.sort(pdus);
+        for (int i = 0; i < saveUnits.size(); i++) {
+            saveUnits.get(i).setNumber(pdus.indexOf(saveUnits.get(i)) + 1);
+        }
+
         paperDetailUnitRepo.save(saveUnits);
         formatPaper(paper);
         return paper;
+    }
+
+    public String checkPaperName(String paperName) {
+        String msg = null;
+        Paper paper = paperRepo.findByName(paperName);
+        if (paper != null) {
+            msg = "试卷名称重复,请重新命名";
+        }
+        return msg;
 
     }
+
 }

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

@@ -1,6 +1,8 @@
 package com.qmth.cqb.paper.web;
 
 import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -43,10 +45,19 @@ public class ImportPaperController {
      */
     @ApiOperation(value = "导入试卷", notes = "导入试卷")
     @PostMapping(value = "/importPaper")
-    public String importPaper(@RequestParam String paperName, @RequestParam("file") CommonsMultipartFile file) {
+    public ResponseEntity importPaper(  @RequestParam String paperName, 
+                                @RequestParam String courseNo,
+                                @RequestParam("file") CommonsMultipartFile file) {
         File tempFile = importPaperService.getUploadFile(file);
-        String returnStr = importPaperService.ImportPaper(paperName, tempFile);
-        return returnStr;
+        String returnStr = importPaperService.ImportPaper(paperName, courseNo, tempFile);
+        Map map = new HashMap();      
+        if (returnStr.equals("success")) {
+            return new ResponseEntity(returnStr, HttpStatus.OK);
+        } else {
+            map.put("errorMsg", returnStr);
+            return new ResponseEntity(map, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+        //return returnStr;
     }
 
     /**
@@ -58,7 +69,12 @@ public class ImportPaperController {
     @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);
+        String msg = importPaperService.saveBlankPaper(courseNo, paperName);
+        if (msg.equals("success")) {
+            return new ResponseEntity(msg, HttpStatus.OK);
+        } else {
+            return new ResponseEntity(msg, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
 
 }

+ 142 - 73
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperController.java

@@ -2,23 +2,25 @@ package com.qmth.cqb.paper.web;
 
 import com.google.gson.Gson;
 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.Paper;
 import com.qmth.cqb.paper.model.PaperSearchInfo;
 import com.qmth.cqb.paper.service.PaperService;
 import com.qmth.cqb.question.model.Question;
 
+import com.qmth.cqb.utils.StringSimilarityUtils;
 import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 import io.swagger.annotations.ApiOperation;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -38,68 +40,76 @@ public class PaperController {
     @Autowired
     Gson gson;
 
+    @Value("${question.reduplicate.similarity}")
+    private double reduplicateSimilarity;
+
     /**
      * 根据Id获取试卷
+     *
      * @param paperId
      * @return
      */
-    @ApiOperation(value="根据Id获取试卷",notes="根据Id获取试卷")
+    @ApiOperation(value = "根据Id获取试卷", notes = "根据Id获取试卷")
     @GetMapping(value = "/paper/{paperId}")
-    public ResponseEntity getPaperById(@PathVariable String paperId){
-        return new ResponseEntity(gson.toJson(paperService.getPaperDto(paperId)),HttpStatus.OK);
+    public ResponseEntity getPaperById(@PathVariable String paperId) {
+        return new ResponseEntity(gson.toJson(paperService.getPaperDto(paperId)), HttpStatus.OK);
     }
 
     /**
      * 保存试卷
+     *
      * @param paper
      * @return
      */
-    @ApiOperation(value="保存试卷",notes="保存试卷")
+    @ApiOperation(value = "保存试卷", notes = "保存试卷")
     @PutMapping(value = "/paper")
-    public ResponseEntity savePaperById(@RequestBody PaperExp paper){
-        return new ResponseEntity(paperService.savePaper(paper),HttpStatus.OK);
+    public ResponseEntity savePaperById(@RequestBody PaperExp paper) {
+        return new ResponseEntity(paperService.savePaper(paper), HttpStatus.OK);
     }
 
     /**
      * 查询所有导入试卷
+     *
      * @param paperSearchInfo
      * @param curPage
      * @param pageSize
      * @return
      */
-    @ApiOperation(value="查询所有导入试卷",notes="查询所有导入试卷")
+    @ApiOperation(value = "查询所有导入试卷", notes = "查询所有导入试卷")
     @GetMapping(value = "/importPaper/{curPage}/{pageSize}")
     public ResponseEntity getImportPapers(@ModelAttribute PaperSearchInfo paperSearchInfo,
                                           @PathVariable int curPage,
-                                          @PathVariable int pageSize){
+                                          @PathVariable int pageSize) {
         return new ResponseEntity(paperService.getImportPapers(paperSearchInfo,
-                curPage, pageSize),HttpStatus.OK);
+                curPage, pageSize), HttpStatus.OK);
     }
 
     /**
      * 查询所有已组试卷
+     *
      * @param paperSearchInfo
      * @param curPage
      * @param pageSize
      * @return
      */
-    @ApiOperation(value="查询所有已组试卷",notes="查询所有已组试卷")
+    @ApiOperation(value = "查询所有已组试卷", notes = "查询所有已组试卷")
     @GetMapping(value = "/genPaper/{curPage}/{pageSize}")
     public ResponseEntity getGenPapers(@ModelAttribute PaperSearchInfo paperSearchInfo,
                                        @PathVariable int curPage,
-                                       @PathVariable int pageSize){
+                                       @PathVariable int pageSize) {
         return new ResponseEntity(paperService.getGenPapers(paperSearchInfo,
-                curPage, pageSize),HttpStatus.OK);
+                curPage, pageSize), HttpStatus.OK);
     }
 
     /**
      * 删除试卷
+     *
      * @param paperIds
      * @return
      */
-    @ApiOperation(value="删除试卷",notes="删除试卷")
+    @ApiOperation(value = "删除试卷", notes = "删除试卷")
     @DeleteMapping(value = "/paper/{paperIds}")
-    public ResponseEntity delPaper(@PathVariable String paperIds){
+    public ResponseEntity delPaper(@PathVariable String paperIds) {
         List<String> paperList = Stream.of(paperIds.split(",")).collect(Collectors.toList());
         paperService.deletePapers(paperList);
         return new ResponseEntity(HttpStatus.OK);
@@ -107,36 +117,39 @@ public class PaperController {
 
     /**
      * 批量通过试卷
+     *
      * @param paperSearchInfo
      * @return
      */
-    @ApiOperation(value="批量通过试卷",notes="批量通过试卷")
+    @ApiOperation(value = "批量通过试卷", notes = "批量通过试卷")
     @PutMapping(value = "/paper/pass")
-    public ResponseEntity passPapers(@RequestBody PaperSearchInfo paperSearchInfo){
+    public ResponseEntity passPapers(@RequestBody PaperSearchInfo paperSearchInfo) {
         paperService.passPapers(Arrays.asList(paperSearchInfo.getPaperIds()));
         return new ResponseEntity(HttpStatus.OK);
     }
 
     /**
      * 批量不通过试卷
+     *
      * @param paperSearchInfo
      * @return
      */
-    @ApiOperation(value="批量不通过试卷",notes="批量不通过试卷")
+    @ApiOperation(value = "批量不通过试卷", notes = "批量不通过试卷")
     @PutMapping(value = "/paper/noPass")
-    public ResponseEntity noPassPapers(@RequestBody PaperSearchInfo paperSearchInfo){
+    public ResponseEntity noPassPapers(@RequestBody PaperSearchInfo paperSearchInfo) {
         paperService.noPassPapers(Arrays.asList(paperSearchInfo.getPaperIds()));
         return new ResponseEntity(HttpStatus.OK);
     }
 
     /**
      * 批量待审核试卷
+     *
      * @param paperSearchInfo
      * @return
      */
-    @ApiOperation(value="批量待审核试卷",notes="批量待审核试卷")
+    @ApiOperation(value = "批量待审核试卷", notes = "批量待审核试卷")
     @PutMapping(value = "/paper/draft")
-    public ResponseEntity initPapers(@RequestBody PaperSearchInfo paperSearchInfo){
+    public ResponseEntity initPapers(@RequestBody PaperSearchInfo paperSearchInfo) {
         paperService.backPapers(Arrays.asList(paperSearchInfo.getPaperIds()));
         return new ResponseEntity(HttpStatus.OK);
     }
@@ -144,93 +157,95 @@ public class PaperController {
 
     /**
      * 获取卷库考试试卷
+     *
      * @param examId
      * @param courseCode
      * @param groupCode
      * @return
      */
-    @ApiOperation(value="获取卷库考试试卷",notes="获取卷库考试试卷")
+    @ApiOperation(value = "获取卷库考试试卷", notes = "获取卷库考试试卷")
     @GetMapping(value = "/paper/list/{examId}/{courseCode}/{groupCode}")
     public List<Paper> listPaperById(@PathVariable String examId,
                                      @PathVariable String courseCode,
-                                     @PathVariable String groupCode){
+                                     @PathVariable String groupCode) {
         return paperService.listExamPapers(Long.parseLong(examId), courseCode, groupCode);
     }
-    
+
     /**
      * 新增考试试卷
+     *
      * @param examId
      * @param courseCode
      * @param groupCode
      * @param paperId
      * @return
      */
-    @ApiOperation(value="新增考试试卷",notes="新增考试试卷")
+    @ApiOperation(value = "新增考试试卷", notes = "新增考试试卷")
     @PostMapping(value = "/paper/join/{examId}/{courseCode}/{groupCode}/{paperId}")
     public ResponseEntity joinExamPaper(@PathVariable String examId,
-    		                            @PathVariable String courseCode,
-    		                            @PathVariable String groupCode,
-    		                            @PathVariable String paperId){
-      paperService.joinToExamPaper(Long.parseLong(examId),courseCode, groupCode, paperId);
-          return new ResponseEntity(HttpStatus.OK);
+                                        @PathVariable String courseCode,
+                                        @PathVariable String groupCode,
+                                        @PathVariable String paperId) {
+        paperService.joinToExamPaper(Long.parseLong(examId), courseCode, groupCode, paperId);
+        return new ResponseEntity(HttpStatus.OK);
     }
-    
+
     /**
      * 删除考试试卷
+     *
      * @param examId
      * @param courseCode
      * @param groupCode
      * @param paperId
      * @return
      */
-    @ApiOperation(value="删除考试试卷",notes="删除考试试卷")
+    @ApiOperation(value = "删除考试试卷", notes = "删除考试试卷")
     @DeleteMapping(value = "/paper/release/{examId}/{courseCode}/{groupCode}/{paperId}")
     public ResponseEntity releaseExamPaper(@PathVariable String examId,
                                            @PathVariable String courseCode,
                                            @PathVariable String groupCode,
-                                           @PathVariable String paperId){
+                                           @PathVariable String paperId) {
 
-      paperService.releaseExamPaper(Long.parseLong(examId),courseCode, groupCode, paperId);
+        paperService.releaseExamPaper(Long.parseLong(examId), courseCode, groupCode, paperId);
         return new ResponseEntity(HttpStatus.OK);
     }
-    
+
     /**
      * 获取卷库考试试卷类型集合
+     *
      * @param examId
      * @param courseCode
      * @return
      */
-    @ApiOperation(value="获取考试试卷类型集合",notes="获取考试试卷类型集合")
+    @ApiOperation(value = "获取考试试卷类型集合", notes = "获取考试试卷类型集合")
     @GetMapping(value = "/paper/groupCode/{examId}/{courseCode}")
     public Set<String> listGroup(@PathVariable String examId,
-                                 @PathVariable String courseCode){
+                                 @PathVariable String courseCode) {
         return paperService.listGroupCodes(Long.parseLong(examId), courseCode);
     }
-    
-    
+
+
     /**
      * 删除考试试卷类型
+     *
      * @param examId
      * @param courseCode
      * @param groupCode
      * @return
      */
-    @ApiOperation(value="删除考试试卷类型",notes="删除考试试卷类型")
+    @ApiOperation(value = "删除考试试卷类型", notes = "删除考试试卷类型")
     @DeleteMapping(value = "/paper/groupCode/{examId}/{courseCode}/{groupCode}")
     public ResponseEntity deleteGroup(@PathVariable String examId,
                                       @PathVariable String courseCode,
-                                      @PathVariable String groupCode){
-      paperService.deletGroupCode(Long.parseLong(examId), courseCode, groupCode);
-      return new ResponseEntity(HttpStatus.OK);
+                                      @PathVariable String groupCode) {
+        paperService.deletGroupCode(Long.parseLong(examId), courseCode, groupCode);
+        return new ResponseEntity(HttpStatus.OK);
     }
-    
+
     /**
-     * 
      * 删除导入试卷中的试题
-     * 
-     * @param examId
-     * @param courseCode
-     * @param groupCode
+     *
+     * @param questionId
      * @return
      */
     @ApiOperation(value = "删除导入试卷中的试题", notes = "删除导入试卷中的试题")
@@ -241,9 +256,8 @@ public class PaperController {
     }
 
     /**
-     * 
      * 向导入试卷中的新增试题
-     * 
+     *
      * @param paperId
      * @param paperDetailId
      * @param question
@@ -251,59 +265,114 @@ public class PaperController {
      */
     @ApiOperation(value = "向导入试卷中的新增试题", notes = "向导入试卷中的新增试题")
     @PostMapping(value = "/paper/addQuestion/{paperId}/{paperDetailId}")
-    public ResponseEntity insertQuestionToPaper(@PathVariable String paperId, 
+    public ResponseEntity insertQuestionToPaper(@PathVariable String paperId,
                                                 @PathVariable String paperDetailId,
                                                 @RequestBody Question question) {
         return new ResponseEntity(paperService.insertQuestionToPaper(paperId, paperDetailId, question), HttpStatus.OK);
 
     }
-    
+
+    @ApiOperation(value = "获取试卷的重复试题", notes = "获取试卷的重复试题")
+    @GetMapping(value = "/paper/{paperId}/reduplicate-questions")
+    public ResponseEntity reduplicateQuestions(@PathVariable String paperId) {
+
+        List<PaperDetailUnitExp> allPaperDetailUnitList = new ArrayList<>();
+//        List<String> reduplicateId = new ArrayList<>();
+        List<Set<String>> reduplicateId = new ArrayList<>();
+
+        PaperExp paperExp = paperService.getPaperDto(paperId);
+        List<PaperDetailExp> paperDetailExpList = paperExp.getPaperDetails();
+        for (PaperDetailExp paperDetailExp : paperDetailExpList) {
+            allPaperDetailUnitList.addAll(paperDetailExp.getPaperDetailUnits());
+        }
+
+        int length = allPaperDetailUnitList.size();
+        for (int i = 0; i < length - 1; i++) {
+            for (int j = i + 1; j < length; j++) {
+                PaperDetailUnitExp paperDetailUnitExp1 = allPaperDetailUnitList.get(i);
+                PaperDetailUnitExp paperDetailUnitExp2 = allPaperDetailUnitList.get(j);
+                double similarity = StringSimilarityUtils.getSimilarityWithCosinesBySeg(paperDetailUnitExp1.getQuestion().getQuesBody(), paperDetailUnitExp2.getQuestion().getQuesBody());
+                if (similarity > reduplicateSimilarity) {
+                    boolean found = false;
+                    for (int k = 0; k < reduplicateId.size(); k++) {
+                        if (reduplicateId.get(k).contains(paperDetailUnitExp1.getId()) && !reduplicateId.get(k).contains(paperDetailUnitExp2.getId())) {
+                            found = true;
+                            reduplicateId.get(k).add(paperDetailUnitExp2.getId());
+                            break;
+                        } else if (!reduplicateId.get(k).contains(paperDetailUnitExp1.getId()) && reduplicateId.get(k).contains(paperDetailUnitExp2.getId())) {
+                            found = true;
+                            reduplicateId.get(k).add(paperDetailUnitExp1.getId());
+                            break;
+                        } else if (reduplicateId.get(k).contains(paperDetailUnitExp1.getId()) && reduplicateId.get(k).contains(paperDetailUnitExp2.getId())) {
+                            found = true;
+                            //两个题都在分组里,就不加了
+                            break;
+                        }
+                    }
+
+                    if (!found) {
+                        Set<String> redupSet = new HashSet<>();
+
+                        redupSet.add(paperDetailUnitExp1.getId());
+                        redupSet.add(paperDetailUnitExp2.getId());
+                        reduplicateId.add(redupSet);
+                    }
+//                    reduplicateId.add(paperDetailUnitExp1.getId());
+//                    reduplicateId.add(paperDetailUnitExp2.getId());
+                }
+            }
+        }
+        return new ResponseEntity(reduplicateId, HttpStatus.OK);
+
+    }
+
     /**
      * 根据试题获取试卷名称
-     * @param 
+     *
+     * @param
      * @return
      */
-    @ApiOperation(value="获取试题所在的试卷名称",notes="获取试题所在的试卷名称")
+    @ApiOperation(value = "获取试题所在的试卷名称", notes = "获取试题所在的试卷名称")
     @GetMapping(value = "/paper/listNames/{questionId}")
-    public ResponseEntity getPaperNamesByQuesId(@PathVariable String questionId){
-        return new ResponseEntity(paperService.getPaperNamesByQuestionId(questionId),HttpStatus.OK);
+    public ResponseEntity getPaperNamesByQuesId(@PathVariable String questionId) {
+        return new ResponseEntity(paperService.getPaperNamesByQuestionId(questionId), HttpStatus.OK);
     }
-    
+
     /**
      * 根据试题获取试卷名称
-     * @param 
+     *
+     * @param
      * @return
      */
-    @ApiOperation(value="查询用于选题的试题列表",notes="查询用于选题的试题列表")
+    @ApiOperation(value = "查询用于选题的试题列表", notes = "查询用于选题的试题列表")
     @GetMapping(value = "/paper/listQuestion/{paperId}/{curPage}/{pageSize}")
     public ResponseEntity listQuestionforSelect(@PathVariable String paperId,
                                                 @PathVariable int curPage,
                                                 @PathVariable int pageSize,
-                                                @RequestParam(name = "quesType") String quesType){
-        if(StringUtils.isNotEmpty(quesType)){          
-            return new ResponseEntity(paperService.listQuestionforSelect(paperId,curPage,pageSize,QuesStructType.valueOf(quesType)),HttpStatus.OK);
+                                                @RequestParam(name = "quesType") String quesType) {
+        if (StringUtils.isNotEmpty(quesType)) {
+            return new ResponseEntity(paperService.listQuestionforSelect(paperId, curPage, pageSize, QuesStructType.valueOf(quesType)), HttpStatus.OK);
         } else {
-            return new ResponseEntity(paperService.listQuestionforSelect(paperId,curPage,pageSize,null),HttpStatus.OK);
+            return new ResponseEntity(paperService.listQuestionforSelect(paperId, curPage, pageSize, null), HttpStatus.OK);
         }
-       
+
     }
-    
+
     /**
-     * 
      * 向试卷中某道大题插入多道试题(已存在的试题)
-     * 
+     *
      * @param paperId
      * @param paperDetailId
-     * @param question
+     * @param questions
      * @return
      */
     @ApiOperation(value = "向导入试卷中的新增试题", notes = "向导入试卷中的新增试题")
     @PostMapping(value = "/paper/selectQuestions/{paperId}/{paperDetailId}")
-    public ResponseEntity selectQuestionsToPaper(@PathVariable String paperId, 
+    public ResponseEntity selectQuestionsToPaper(@PathVariable String paperId,
                                                  @PathVariable String paperDetailId,
                                                  @RequestBody List<Question> questions) {
         return new ResponseEntity(paperService.selectQuestionsToPaper(paperId, paperDetailId, questions), HttpStatus.OK);
 
     }
-    
+
 }

+ 7 - 10
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperDetailController.java

@@ -7,10 +7,8 @@ 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.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -35,7 +33,7 @@ public class PaperDetailController {
 
     @Autowired
     PaperService paperService;
-    
+
     @Autowired
     PaperRepo paperRepo;
 
@@ -71,8 +69,7 @@ public class PaperDetailController {
      */
     @ApiOperation(value = "更新试卷中的大题", notes = "更新试卷中的大题")
     @PostMapping(value = "/updatePaperDetail/{paperId}")
-    public ResponseEntity updatePaperDetail(@PathVariable String paperId,
-                                            @RequestBody PaperDetail pd) {
+    public ResponseEntity updatePaperDetail(@PathVariable String paperId, @RequestBody PaperDetail pd) {
         pd.setPaper(paperRepo.findOne(paperId));
         PaperDetail paperDetail = paperDetailService.savePaperDetail(pd);
         return new ResponseEntity(paperDetail, HttpStatus.OK);
@@ -95,14 +92,14 @@ public class PaperDetailController {
     /**
      * 删除大题
      * 
-     * @param detail_id
+     * @param detailId
      * @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);
+    @DeleteMapping(value = "/paperDetail/{detailId}")
+    public ResponseEntity removePaperDetail(@PathVariable String detailId) {
+        paperDetailService.deletePaperDetail(detailId);
+        return new ResponseEntity(detailId, HttpStatus.OK);
     }
 
     /**

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

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

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

@@ -4,3 +4,4 @@ logging.config=classpath:log4j2.xml
 spring.application.name=ExamCloud-service-question
 hystrix.command.default.execution.timeout.enabled=false
 api_cqb=/api/ecs_ques
+question.reduplicate.similarity=0.6