浏览代码

提交导出试卷结构BUG

chenken 7 年之前
父节点
当前提交
cded20ceae

+ 7 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PaperDetailUnitExp.java

@@ -46,6 +46,13 @@ public class PaperDetailUnitExp implements Serializable,Comparable<PaperDetailUn
 		question.setQuesAnswer("#");
 		question.setQuesAnswer("#");
     	this.question = question;
     	this.question = question;
     }
     }
+    
+    public PaperDetailUnitExp(QuesStructType type,Question subQuestion){
+    	this.questionType = type;
+    	this.score = subQuestion.getScore();
+    	this.number = subQuestion.getNumber();
+    	this.question = subQuestion;
+    }
 
 
     public String getId() {
     public String getId() {
         return id;
         return id;

+ 47 - 27
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/ExportPaperAbstractService.java

@@ -388,14 +388,7 @@ public abstract class ExportPaperAbstractService {
     	List<ObjectiveQuestionStructure> objectiveQuestionStructureList = new ArrayList<ObjectiveQuestionStructure>();
     	List<ObjectiveQuestionStructure> objectiveQuestionStructureList = new ArrayList<ObjectiveQuestionStructure>();
     	for(PaperDetailExp paperDetailExp:paperDetailExps){
     	for(PaperDetailExp paperDetailExp:paperDetailExps){
     		for(PaperDetailUnitExp unit:paperDetailExp.getPaperDetailUnits()){
     		for(PaperDetailUnitExp unit:paperDetailExp.getPaperDetailUnits()){
-    			if(unit.getQuestionType() != QuesStructType.NESTED_ANSWER_QUESTION){
-    				objectiveQuestionStructureList.add(new ObjectiveQuestionStructure(paperExp,paperDetailExp,unit));
-    			}else{
-    				List<Question> subQuestions = unit.getQuestion().getSubQuestions();
-    				for(Question question:subQuestions){
-    					objectiveQuestionStructureList.add(new ObjectiveQuestionStructure(paperExp,paperDetailExp,question));
-    				}
-    			}
+    			objectiveQuestionStructureList.add(new ObjectiveQuestionStructure(paperExp,paperDetailExp,unit));
     		}
     		}
     	}
     	}
     	ExcelWriter objectiveExcelExporter = new ExcelWriter(ObjectiveQuestionStructure.class); 
     	ExcelWriter objectiveExcelExporter = new ExcelWriter(ObjectiveQuestionStructure.class); 
@@ -453,11 +446,10 @@ public abstract class ExportPaperAbstractService {
      * @param questionTypeNums
      * @param questionTypeNums
      */
      */
     public List<PaperDetailExp> fillObjectiveQuestions(List<PaperDetailExp> objectiveDetails,List<QuestionTypeNum> questionTypeNums) {
     public List<PaperDetailExp> fillObjectiveQuestions(List<PaperDetailExp> objectiveDetails,List<QuestionTypeNum> questionTypeNums) {
-    	//1.得到所有客观题的类型
+    	//1.得到所有客观题大题的类型
     	Set<QuesStructType> types = new HashSet<QuesStructType>();
     	Set<QuesStructType> types = new HashSet<QuesStructType>();
     	for(PaperDetailExp paperDetailExp:objectiveDetails){
     	for(PaperDetailExp paperDetailExp:objectiveDetails){
-    		List<PaperDetailUnitExp> paperDetailUnits = paperDetailExp.getPaperDetailUnits();
-    		types.add(paperDetailUnits.get(0).getQuestionType());
+    		types.add(QuesStructType.getQuesStructTypeById(paperDetailExp.getSortNumber()));
     	}
     	}
     	List<PaperDetailExp> paperDetailExps = new ArrayList<PaperDetailExp>();
     	List<PaperDetailExp> paperDetailExps = new ArrayList<PaperDetailExp>();
     	//如果没有单选
     	//如果没有单选
@@ -509,17 +501,36 @@ public abstract class ExportPaperAbstractService {
     private void addObjectiveQuestion(List<PaperDetailExp> paperDetailExps,List<PaperDetailExp> objectiveDetails,List<QuestionTypeNum> questionTypeNums,QuesStructType quesStructType){
     private void addObjectiveQuestion(List<PaperDetailExp> paperDetailExps,List<PaperDetailExp> objectiveDetails,List<QuestionTypeNum> questionTypeNums,QuesStructType quesStructType){
     	//得到当前题量
     	//得到当前题量
     	int currentSize = 0;
     	int currentSize = 0;
+    	/**
+    	 * 构建新的大题
+    	 * 遍历所有的客观大题,如果是符合的类型,就添加该大题
+    	 * 该大题中,如果有套题,要将该套题下的小题拆出来,添加到大题中,并删除原套题
+    	 */
 		for(PaperDetailExp paperDetailExp:objectiveDetails){
 		for(PaperDetailExp paperDetailExp:objectiveDetails){
-    		List<PaperDetailUnitExp> paperDetailUnits = paperDetailExp.getPaperDetailUnits();
-    		if(paperDetailUnits.get(0).getQuestionType() == quesStructType){
-    			paperDetailExps.add(paperDetailExp);
-    			for(PaperDetailUnitExp paperDetailUnitExp:paperDetailUnits){
-    				if(paperDetailUnitExp.getQuestionType() != QuesStructType.NESTED_ANSWER_QUESTION){
+    		if(paperDetailExp.getSortNumber() == quesStructType.getId()){
+    			PaperDetailExp newPaperDetailExp = new PaperDetailExp();
+    			List<PaperDetailUnitExp> newPaperDetailUnits = new ArrayList<PaperDetailUnitExp>();
+    			//得到大题下的所有小题
+        		List<PaperDetailUnitExp> paperDetailUnits = paperDetailExp.getPaperDetailUnits();
+        		for(PaperDetailUnitExp paperDetailUnitExp:paperDetailUnits){
+        			if(paperDetailUnitExp.getQuestionType() != QuesStructType.NESTED_ANSWER_QUESTION){
+        				newPaperDetailUnits.add(paperDetailUnitExp);
     					currentSize += 1;
     					currentSize += 1;
     				}else{
     				}else{
-    					currentSize += paperDetailUnitExp.getQuestion().getSubQuestions().size();
+    					List<Question> subQuestions = paperDetailUnitExp.getQuestion().getSubQuestions();
+    					if(subQuestions!=null&&subQuestions.size()>0){
+    						for(int i = 0;i<subQuestions.size();i++){
+        						newPaperDetailUnits.add(new PaperDetailUnitExp(quesStructType,subQuestions.get(i)));
+        					}
+        					currentSize += subQuestions.size();
+    					}
     				}
     				}
-    			}
+        		}
+        		//设置小题
+        		newPaperDetailExp.setPaperDetailUnits(newPaperDetailUnits);
+    			//设置大题题号
+        		newPaperDetailExp.setNumber(Integer.parseInt(quesStructType.getId()+""));
+    			paperDetailExps.add(newPaperDetailExp);
     		}
     		}
     	}
     	}
 		//计算差额、补齐试题
 		//计算差额、补齐试题
@@ -552,7 +563,7 @@ public abstract class ExportPaperAbstractService {
      * @param paperExp
      * @param paperExp
      * @return
      * @return
      */
      */
-    protected List<PaperDetailExp> getAllObjectiveDetails(PaperExp paperExp){
+    public List<PaperDetailExp> getAllObjectiveDetails(PaperExp paperExp){
     	List<PaperDetailExp> objectiveDetails = new ArrayList<PaperDetailExp>();
     	List<PaperDetailExp> objectiveDetails = new ArrayList<PaperDetailExp>();
     	for(PaperDetailExp paperDetailExp:paperExp.getPaperDetails()){
     	for(PaperDetailExp paperDetailExp:paperExp.getPaperDetails()){
     		if(paperDetailExp.getSortNumber()==1L
     		if(paperDetailExp.getSortNumber()==1L
@@ -569,7 +580,7 @@ public abstract class ExportPaperAbstractService {
      * @param paperExp
      * @param paperExp
      * @return
      * @return
      */
      */
-    protected List<PaperDetailExp> getAllSubjectiveDetails(PaperExp paperExp){
+    public List<PaperDetailExp> getAllSubjectiveDetails(PaperExp paperExp){
     	List<PaperDetailExp> subjectiveDetails = new ArrayList<PaperDetailExp>();
     	List<PaperDetailExp> subjectiveDetails = new ArrayList<PaperDetailExp>();
     	for(PaperDetailExp paperDetailExp:paperExp.getPaperDetails()){
     	for(PaperDetailExp paperDetailExp:paperExp.getPaperDetails()){
     		if(paperDetailExp.getSortNumber()==4L
     		if(paperDetailExp.getSortNumber()==4L
@@ -590,16 +601,25 @@ public abstract class ExportPaperAbstractService {
     protected void checkObjectiveDetailsNum(PaperExp paperExp,List<QuestionTypeNum> questionTypeNums) {
     protected void checkObjectiveDetailsNum(PaperExp paperExp,List<QuestionTypeNum> questionTypeNums) {
        List<PaperDetailExp> objectiveDetails = getAllObjectiveDetails(paperExp);
        List<PaperDetailExp> objectiveDetails = getAllObjectiveDetails(paperExp);
 	   for(QuestionTypeNum typeNum:questionTypeNums){
 	   for(QuestionTypeNum typeNum:questionTypeNums){
-		   int currentSize = 0;
+		   List<PaperDetailUnitExp> paperDetailUnits = new ArrayList<PaperDetailUnitExp>();
 		   for(PaperDetailExp paperDetailExp:objectiveDetails){
 		   for(PaperDetailExp paperDetailExp:objectiveDetails){
-		   		List<PaperDetailUnitExp> paperDetailUnits = paperDetailExp.getPaperDetailUnits();
-		   		if(paperDetailUnits.get(0).getQuestionType() == typeNum.getQuestionType());{
-		   			currentSize += paperDetailUnits.size();
-		   			break;
-		   		}
+			   if(paperDetailExp.getSortNumber() == typeNum.getQuestionType().getId()){
+				   paperDetailUnits.addAll(paperDetailExp.getPaperDetailUnits());
+			   }
+		   }
+		   int currentSize = 0; 
+		   for(PaperDetailUnitExp paperDetailUnitExp:paperDetailUnits){
+			   if(paperDetailUnitExp.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION){
+				   currentSize += paperDetailUnitExp.getQuestion().getSubQuestions().size();
+			   }else{
+				   currentSize++;
+			   }
 		   }
 		   }
 		   if(currentSize>typeNum.getQuantity()){
 		   if(currentSize>typeNum.getQuantity()){
-			   throw new RuntimeException("课程最大题量超出设定范围,请核实后重新设置导出规则!");
+			   throw new RuntimeException("试卷中"+typeNum.getQuestionType().getName()+"题题量超出设定范围"
+								   		+ ",当前试卷题量:"+currentSize
+								   		+ ",设定题量:"+typeNum.getQuantity()
+								   		+ ",请核实后重新设置导出规则!");
 		   }
 		   }
 	   }
 	   }
     }
     }

+ 10 - 16
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigFileServiceImpl.java

@@ -21,7 +21,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import cn.com.qmth.examcloud.common.dto.core.ExamCourseDto;
 import cn.com.qmth.examcloud.common.dto.core.ExamCourseDto;
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import cn.com.qmth.examcloud.common.util.excel.ExcelWriter;
 import cn.com.qmth.examcloud.common.util.excel.ExcelWriter;
 
 
@@ -368,30 +367,25 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 		List<SubjectiveQuestionStructure> subjectiveQuestionStructureList = new ArrayList<SubjectiveQuestionStructure>();
 		List<SubjectiveQuestionStructure> subjectiveQuestionStructureList = new ArrayList<SubjectiveQuestionStructure>();
 		
 		
 		ExportServiceManage esm = exportServiceManageRepo.findByOrgName(exportStructure.getOrgName());
 		ExportServiceManage esm = exportServiceManageRepo.findByOrgName(exportStructure.getOrgName());
+		if(esm==null){
+			esm = exportServiceManageRepo.findByOrgName("陕西师范大学");
+		}
     	ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils.getBeanById(esm.getExportServiceName());
     	ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils.getBeanById(esm.getExportServiceName());
-		
 		for(String paperId:paperIds){
 		for(String paperId:paperIds){
 			PaperExp paperExp = initPaperExpService.initPaperExp(paperId);
 			PaperExp paperExp = initPaperExpService.initPaperExp(paperId);
-			List<PaperDetailExp> objectiveDetails = new ArrayList<PaperDetailExp>();
-			for(PaperDetailExp paperDetailExp:paperExp.getPaperDetails()){
-				PaperDetailUnitExp unit = paperDetailExp.getPaperDetailUnits().get(0);
-				if(unit.getQuestionType() == QuesStructType.SINGLE_ANSWER_QUESTION
-						||unit.getQuestionType() == QuesStructType.MULTIPLE_ANSWER_QUESTION
-							||unit.getQuestionType() == QuesStructType.BOOL_ANSWER_QUESTION){
-					objectiveDetails.add(paperDetailExp);
-				}
-			}
-			//根据设置补齐客观题
-			exportPaperAbstractService.fillObjectiveQuestions(objectiveDetails, questionTypeNums);
+			//添加主观题
+			List<PaperDetailExp> objectiveDetails = exportPaperAbstractService.getAllObjectiveDetails(paperExp);
+			//得到补齐后的客观题大题
+			List<PaperDetailExp> paperDetailExps = exportPaperAbstractService.fillObjectiveQuestions(objectiveDetails, questionTypeNums);
 			List<ObjectiveQuestionStructure> objectiveList = new ArrayList<ObjectiveQuestionStructure>();
 			List<ObjectiveQuestionStructure> objectiveList = new ArrayList<ObjectiveQuestionStructure>();
-	    	for(PaperDetailExp paperDetailExp:objectiveDetails){
+	    	for(PaperDetailExp paperDetailExp:paperDetailExps){
 	    		for(PaperDetailUnitExp unit:paperDetailExp.getPaperDetailUnits()){
 	    		for(PaperDetailUnitExp unit:paperDetailExp.getPaperDetailUnits()){
 	    			objectiveList.add(new ObjectiveQuestionStructure(paperExp,paperDetailExp,unit));
 	    			objectiveList.add(new ObjectiveQuestionStructure(paperExp,paperDetailExp,unit));
 	    		}
 	    		}
 	    	}
 	    	}
 	    	objectiveQuestionStructureList.addAll(objectiveList);
 	    	objectiveQuestionStructureList.addAll(objectiveList);
-			
-	    	List<PaperDetailExp> subjectiveDetails = paperExp.getSubjectiveDetails();
+	    	//添加主观题
+	    	List<PaperDetailExp> subjectiveDetails = exportPaperAbstractService.getAllSubjectiveDetails(paperExp);
 	    	List<SubjectiveQuestionStructure> subjectiveList = new ArrayList<SubjectiveQuestionStructure>();
 	    	List<SubjectiveQuestionStructure> subjectiveList = new ArrayList<SubjectiveQuestionStructure>();
 	    	for(PaperDetailExp paperDetailExp:subjectiveDetails){
 	    	for(PaperDetailExp paperDetailExp:subjectiveDetails){
 	    		for(PaperDetailUnitExp unit:paperDetailExp.getPaperDetailUnits()){
 	    		for(PaperDetailUnitExp unit:paperDetailExp.getPaperDetailUnits()){