瀏覽代碼

提交master

weiwenhai 6 年之前
父節點
當前提交
35f37ba58c

+ 8 - 8
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/provider/ExtractConfigCloudServiceProvider.java

@@ -50,15 +50,15 @@ public class ExtractConfigCloudServiceProvider implements ExtractConfigCloudServ
 	public GetPaperResp getPaper(@RequestBody GetPaperReq paperReq) {
 		Long examId = paperReq.getExamId();
 		if (null == examId) {
-			throw new StatusException("Q-010036", "examId is null");
+			throw new StatusException("Q-010053", "examId is null");
 		}
 		String courseCode = paperReq.getCourseCode(); 
 		if(StringUtils.isBlank(courseCode)){
-			throw new StatusException("Q-010040", "courseCode is null");
+			throw new StatusException("Q-010057", "courseCode is null");
 		}
 		String groupCode = paperReq.getGroupCode();
 		if(StringUtils.isBlank(groupCode)){
-			throw new StatusException("Q-010045", "groupCode is null");
+			throw new StatusException("Q-010061", "groupCode is null");
 		}
 		Map<String, Object> map = extractConfigExamService.getDefaultPaper(paperReq.getExamId(),paperReq.getCourseCode(),paperReq.getGroupCode());
 		GetPaperResp resp = new GetPaperResp();
@@ -75,19 +75,19 @@ public class ExtractConfigCloudServiceProvider implements ExtractConfigCloudServ
 	public GetQuestionResp getQuestion(@RequestBody GetQuestionReq questionReq) {
 		Long examId = questionReq.getExamId();
 		if (null == examId) {
-			throw new StatusException("Q-010077", "examId is null");
+			throw new StatusException("Q-010078", "examId is null");
 		}
 		String courseCode = questionReq.getCourseCode(); 
 		if(StringUtils.isBlank(courseCode)){
-			throw new StatusException("Q-010081", "courseCode is null");
+			throw new StatusException("Q-010082", "courseCode is null");
 		}
 		String groupCode = questionReq.getGroupCode();
 		if(StringUtils.isBlank(groupCode)){
-			throw new StatusException("Q-010085", "groupCode is null");
+			throw new StatusException("Q-010086", "groupCode is null");
 		}
 		String questionId = questionReq.getQuestionId();
 		if(StringUtils.isBlank(questionId)){
-			throw new StatusException("Q-010089", "questionId is null");
+			throw new StatusException("Q-010090", "questionId is null");
 		}
 		DefaultQuestion defaultQuestion = extractConfigExamService.getDefaultQuestion(examId, courseCode, groupCode, questionId);
 		GetQuestionResp resp = new GetQuestionResp();
@@ -102,7 +102,7 @@ public class ExtractConfigCloudServiceProvider implements ExtractConfigCloudServ
 	public GetBasePaperResp getBasePaper(@RequestBody GetBasePaperReq req) {
 		String paperId = req.getPaperId();
 		if (null == paperId) {
-			throw new StatusException("Q-010104", "paperId is null");
+			throw new StatusException("Q-010105", "paperId is null");
 		}
 		DefaultPaper defaultPaper = extractConfigExamService.getBaseDefaultPaper(paperId);
 		GetBasePaperResp resp = new GetBasePaperResp();

+ 29 - 0
examcloud-core-questions-dao/src/main/java/cn/com/qmth/examcloud/core/questions/dao/entity/Question.java

@@ -7,8 +7,11 @@ import java.util.Map;
 
 import cn.com.qmth.examcloud.core.questions.dao.entity.Course;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Specialty;
+
 import org.springframework.data.annotation.Id;
+
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
+
 import org.springframework.data.annotation.Transient;
 
 /**
@@ -98,6 +101,16 @@ public class Question implements Serializable {
     private String difficulty;// 难度
     
     private List<String> propertyGroup;//试题属性组合(蓝图组卷使用)
+    
+    /**
+     * 试题标签,用于K12做查询条件
+     */
+    private Map<String, String> properties;
+    
+    /**
+	 * 是否脱离试卷存在,如果为true,是K12的导入题
+	 */
+	private Boolean isolated;
 
     @Transient
     private List<QuestionAudio> audioList;//音频列表(复制试卷使用,不存数据)
@@ -399,4 +412,20 @@ public class Question implements Serializable {
 		this.propertyGroup = propertyGroup;
 	}
 
+	public Map<String, String> getProperties() {
+		return properties;
+	}
+
+	public void setProperties(Map<String, String> properties) {
+		this.properties = properties;
+	}
+
+	public Boolean getIsolated() {
+		return isolated;
+	}
+
+	public void setIsolated(Boolean isolated) {
+		this.isolated = isolated;
+	}
+
 }

+ 0 - 3
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ExtractConfigProviderService.java

@@ -1,10 +1,7 @@
 package cn.com.qmth.examcloud.core.questions.service;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
-import cn.com.qmth.examcloud.core.questions.dao.entity.Paper;
 import cn.com.qmth.examcloud.question.core.paper.DefaultPaper;
 import cn.com.qmth.examcloud.question.core.question.DefaultQuestion;
 

+ 27 - 1
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/GenPaperService.java

@@ -874,9 +874,12 @@ public class GenPaperService {
      */
     @SuppressWarnings("unchecked")
     public Map<String, Object> genBluePaper(GenPaperDto genPaperDto) {
+    	log.debug("开始蓝图组卷.....");
         String msg = "";
         Map<String, Object> paperMsgMap = new HashMap<String, Object>();
         LinkedList<Question> questions = new LinkedList<Question>();
+        //查询试卷结构
+        long start = System.currentTimeMillis();
         PaperStruct paperStruct = paperStructRepo.findOne(genPaperDto.getPaperStructId());
         PaperContext paperContext = new PaperContext(paperStruct, genPaperDto.getConditions());
         List<UnitContext> unitContexts = new LinkedList<UnitContext>();
@@ -894,7 +897,10 @@ public class GenPaperService {
         }
         Set<PaperDetailUnit> spareUnits = new HashSet<PaperDetailUnit>();
     	spareUnits.addAll(unitList);
-    	for (PaperDetailUnit unit : spareUnits) {
+    	long total = (System.currentTimeMillis() - start) / 1000;
+    	log.debug("total:"+total);
+    	
+    	/*for (PaperDetailUnit unit : spareUnits) {
             Question question = unit.getQuestion();
             //根据questionId查询题库中大题来源
             List<PaperDetailUnit> units = unitRepo.findByQuestion(question);
@@ -907,7 +913,27 @@ public class GenPaperService {
             }
             question.setPropertyGroup(bulidPropertyGroup(question));
             questions.add(question);
+        }*/
+    	
+    	List<String> oIds = new ArrayList<String>();
+    	for (PaperDetailUnit unit : spareUnits) {
+    		oIds.add(unit.getQuestion().getId());
+    	}
+    	log.debug("total2.....--------实际原题数量:"+oIds.size());
+    	long start2 = System.currentTimeMillis();
+    	List<PaperDetailUnit> oDetailUnits = paperDetailUnitService.findByQuestionsAndPaperType(oIds, PaperType.IMPORT);
+    	long total2 = (System.currentTimeMillis() - start2) / 1000;
+    	log.debug("total2....."+total2+"--------查询原题数量:"+oDetailUnits.size());
+    	long start4 = System.currentTimeMillis();
+    	for(PaperDetailUnit oldUnit:oDetailUnits){
+    		if(oldUnit.getPaper().getPaperType() == PaperType.IMPORT){
+    			oldUnit.getQuestion().setQuesName(oldUnit.getPaperDetail().getName());
+    			oldUnit.getQuestion().setPropertyGroup(bulidPropertyGroup(oldUnit.getQuestion()));
+            	questions.add(oldUnit.getQuestion());
+    		}
         }
+    	long total4 = (System.currentTimeMillis() - start4) / 1000;
+    	log.debug("循环耗时....."+total4+"--------最终原题数量:"+questions.size());
         /*for (Paper oldPaper : papers) {
             List<PaperDetailUnit> unitList = unitRepo.findByPaperOrderByNumber(oldPaper);
             for (PaperDetailUnit unit : unitList) {

+ 141 - 1
examcloud-core-questions-starter/src/test/java/cn/com/qmth/examcloud/core/questions/starter/DdCollegeUtilTest.java

@@ -1,6 +1,9 @@
 package cn.com.qmth.examcloud.core.questions.starter;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -14,8 +17,10 @@ import org.springframework.test.context.junit4.SpringRunner;
 import cn.com.qmth.examcloud.commons.base.logging.ExamCloudLog;
 import cn.com.qmth.examcloud.commons.base.logging.ExamCloudLogFactory;
 import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitRepo;
+import cn.com.qmth.examcloud.core.questions.dao.QuesRepo;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Paper;
 import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetailUnit;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.service.temp.DdExcelService;
 import cn.com.qmth.examcloud.core.questions.service.temp.vo.TestOption;
 import cn.com.qmth.examcloud.core.questions.service.temp.vo.TestPaper;
@@ -77,6 +82,9 @@ public class DdCollegeUtilTest {
 	 
 	 @Autowired
 	 DdExcelService ddExcelService;
+	 
+	 @Autowired
+	 QuesRepo quesRepo;
 
 	/* @Test
 	 public void updatePaperType(){
@@ -105,7 +113,139 @@ public class DdCollegeUtilTest {
 			e.printStackTrace();
 		}
 	 }
-	
+	 
+	 @Test
+	 public void saveQuestionTest(){
+		 Map<String, String> map = new HashMap<String, String>();
+		 map.put("a", "a");
+		 Question question = new Question();
+		 question.setOrgId("wwh");
+		 question.setQuesBody("wwh");
+		 question.setQuesAnswer("wwh");
+		 question.setIsolated(true);
+		 question.setProperties(map);
+		 
+		 Map<String, String> map2 = new HashMap<String, String>();
+		 map2.put("a", "a");
+		 map2.put("b", "b");
+		 Question question2 = new Question();
+		 question2.setOrgId("wwh");
+		 question2.setQuesBody("wwh");
+		 question2.setQuesAnswer("wwh");
+		 question2.setIsolated(true);
+		 question2.setProperties(map2);
+		 
+		 Map<String, String> map3 = new HashMap<String, String>();
+		 map3.put("a", "a");
+		 map3.put("b", "b");
+		 map3.put("c", "c");
+		 Question question3 = new Question();
+		 question3.setOrgId("wwh");
+		 question3.setQuesBody("wwh");
+		 question3.setQuesAnswer("wwh");
+		 question3.setIsolated(true);
+		 question3.setProperties(map3);
+		 
+		 Map<String, String> map4 = new HashMap<String, String>();
+		 map4.put("d", "d");
+		 Question question4 = new Question();
+		 question4.setOrgId("wwh");
+		 question4.setQuesBody("wwh");
+		 question4.setQuesAnswer("wwh");
+		 question4.setIsolated(true);
+		 question4.setProperties(map4);
+		 
+		 List<Question> list = new ArrayList<Question>();
+		 list.add(question);
+		 list.add(question2);
+		 list.add(question3);
+		 list.add(question4);
+		 
+		 quesRepo.save(list);
+		 System.out.println("插入完毕...");
+	 }
+
+	 @Test
+	 public void queryQuestionTest(){
+		 Map<String, String> map = new HashMap<String, String>();
+		 map.put("a", "a");
+		 Query query = new Query();
+		 for(Map.Entry<String, String> entry:map.entrySet()){
+			 String key = "properties." + entry.getKey();
+			 query.addCriteria(Criteria.where(key).is(entry.getValue()));
+		 }
+		 long count = this.mongoTemplate.count(query, Question.class);
+		 List<Question> questionList = this.mongoTemplate.find(query, Question.class);
+		 System.out.println("第一次查询:");
+		 System.out.println("count:"+ count);
+		 for(Question question:questionList){
+			 System.out.println("question:"+question.getProperties());
+		 }
+		 
+		 Map<String, String> map2 = new HashMap<String, String>();
+		 map2.put("d", "d");
+		 Query query2 = new Query();
+		 for(Map.Entry<String, String> entry:map2.entrySet()){
+			 String key = "properties." + entry.getKey();
+			 query2.addCriteria(Criteria.where(key).is(entry.getValue()));
+		 }
+		 long count2 = this.mongoTemplate.count(query2, Question.class);
+		 List<Question> questionList2 = this.mongoTemplate.find(query2, Question.class);
+		 System.out.println("第二次查询:");
+		 System.out.println("count:"+ count2);
+		 for(Question question:questionList2){
+			 System.out.println("question:"+question.getProperties());
+		 }
+		 
+		 Map<String, String> map3 = new HashMap<String, String>();
+		 map3.put("a", "a");
+		 map3.put("b", "b");
+		 Query query3 = new Query();
+		 for(Map.Entry<String, String> entry:map3.entrySet()){
+			 String key = "properties." + entry.getKey();
+			 query3.addCriteria(Criteria.where(key).is(entry.getValue()));
+		 }
+		 long count3 = this.mongoTemplate.count(query3, Question.class);
+		 List<Question> questionList3 = this.mongoTemplate.find(query3, Question.class);
+		 System.out.println("第三次查询:");
+		 System.out.println("count:"+ count3);
+		 for(Question question:questionList3){
+			 System.out.println("question:"+question.getProperties());
+		 }
+		 
+		 Map<String, String> map4 = new HashMap<String, String>();
+		 map4.put("a", "a");
+		 map4.put("b", "b");
+		 map4.put("c", "c");
+		 Query query4 = new Query();
+		 for(Map.Entry<String, String> entry:map4.entrySet()){
+			 String key = "properties." + entry.getKey();
+			 query4.addCriteria(Criteria.where(key).is(entry.getValue()));
+		 }
+		 long count4 = this.mongoTemplate.count(query4, Question.class);
+		 List<Question> questionList4 = this.mongoTemplate.find(query4, Question.class);
+		 System.out.println("第四次查询:");
+		 System.out.println("count:"+ count4);
+		 for(Question question:questionList4){
+			 System.out.println("question:"+question.getProperties());
+		 }
+		 
+		 Map<String, String> map5 = new HashMap<String, String>();
+		 map5.put("a", "a");
+		 map5.put("d", "d");
+		 Query query5 = new Query();
+		 for(Map.Entry<String, String> entry:map5.entrySet()){
+			 String key = "properties." + entry.getKey();
+			 query5.addCriteria(Criteria.where(key).is(entry.getValue()));
+		 }
+		 long count5 = this.mongoTemplate.count(query5, Question.class);
+		 List<Question> questionList5 = this.mongoTemplate.find(query5, Question.class);
+		 System.out.println("第五次查询:");
+		 System.out.println("count:"+ count5);
+		 for(Question question:questionList5){
+			 System.out.println("question:"+question.getProperties());
+		 }
+	 }
 }