weiwenhai hace 7 años
padre
commit
1a311a4fc4

+ 10 - 7
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/service/core/api/GenPaperController.java

@@ -17,6 +17,7 @@ import cn.com.qmth.examcloud.core.questions.service.bean.dto.GenPaperDto;
 import cn.com.qmth.examcloud.core.questions.service.impl.GenPaperService;
 import cn.com.qmth.examcloud.core.questions.service.PaperService;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
+import cn.com.qmth.examcloud.core.questions.base.enums.RandomGenPaperPolicy;
 import cn.com.qmth.examcloud.commons.web.security.annotation.Uac;
 import cn.com.qmth.examcloud.commons.web.security.bean.User;
 import cn.com.qmth.examcloud.commons.web.security.entity.AccessUser;
@@ -70,21 +71,23 @@ public class GenPaperController extends ControllerSupport {
 			}
 			//如果是组一套试卷
 			if (genPaperDto.getGenNumber() == 1) {
-				//判断抽题类型  按数量  按分数   genPaperDto.getSimpleGenPaperPolicy() == RandomGenPaperPolicy.BY_QUESTIONNUM
-	            if (genPaperDto.getSimpleGenPaperPolicy().getKey() == 1L) {
-	                paperMap = genPaperService.genPaperByQuestionNumW(genPaperDto,user);
+				//判断抽题类型  按数量  按分数  
+	            if (genPaperDto.getSimpleGenPaperPolicy() == RandomGenPaperPolicy.BY_QUESTIONNUM) {
+	            	//按题目数量组卷
+	                paperMap = genPaperService.genPaperByQuestionNum(genPaperDto,user);
 	            }else {
-	                paperMap = genPaperService.genPaperByScoreW(genPaperDto,user);
+	            	// 按分数 组卷
+	                paperMap = genPaperService.genPaperByScore(genPaperDto,user);
 	            }
 	        }else {
 	        	//如果是组多套试卷
 				for(int i = 1; i <= genPaperDto.getGenNumber(); i++){
 					genPaperDto.setPaperName(paperName + "_" + i);
 					//判断抽题类型  按数量  按分数
-					if (genPaperDto.getSimpleGenPaperPolicy().getKey() == 1L) {
-		                paperMap.putAll(genPaperService.genPaperByQuestionNumW(genPaperDto,user));
+					if (genPaperDto.getSimpleGenPaperPolicy() == RandomGenPaperPolicy.BY_QUESTIONNUM) {
+		                paperMap.putAll(genPaperService.genPaperByQuestionNum(genPaperDto,user));
 		            }else {
-		            	paperMap.putAll(genPaperService.genPaperByScoreW(genPaperDto,user));
+		            	paperMap.putAll(genPaperService.genPaperByScore(genPaperDto,user));
 		            }
 				}
 			}

+ 18 - 3
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ExportPaperAbstractService.java

@@ -62,6 +62,7 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.ExportStructure;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
 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.QuestionPkgPath;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionTypeNum;
 import cn.com.qmth.examcloud.core.questions.dao.entity.computerTestModel.Block;
 import cn.com.qmth.examcloud.core.questions.dao.entity.computerTestModel.ComputerTestOption;
@@ -563,6 +564,10 @@ public abstract class ExportPaperAbstractService {
 		for(int i=0;i<optionList.size();i++){
     		QuesOption quesOption = optionList.get(i);
             List<Object> pList = getPlist(quesOption);
+            if(pList == null || pList.size()== 0){
+            	four ++;
+            	continue;
+            }
         	//判断是否为纯文本
         	boolean isText = DocxProcessUtil.isText((P)pList.get(0));
             if(isText){
@@ -661,10 +666,15 @@ public abstract class ExportPaperAbstractService {
     		String tmpStr = DocxProcessUtil.BODY_HEADER + optionBodyWordMl + DocxProcessUtil.BODY_TAIL;
     		Body body = (Body)XmlUtils.unmarshalString(tmpStr,Context.jc,Body.class);
             List<Object> pList = body.getContent();
+            P p = null;
+            if(pList == null || pList.size() == 0){
+				p = new P();
+			}else {
+				p = (P)pList.get(0);
+			}
             //首选项添加tabs标签
     		if(i%4==0){
     			isAddTbale = true;
-				P p = (P) pList.get(0);
 				//添加tabs标签
 				addTabs(p,3);
                 StringBuffer pWordMl = new StringBuffer();
@@ -675,7 +685,7 @@ public abstract class ExportPaperAbstractService {
                 }
                 quesOption.setOptionBodyWord(pWordMl.toString());
     		}else{
-				String tmpText = DocxProcessUtil.getPText((P)pList.get(0));
+				String tmpText = DocxProcessUtil.getPText(p);
 				optionMerge(optionList.get((i/4)*4),tmpText,isAddTbale);
 				quesOption.setOptionBodyWord("");
     		}
@@ -1385,7 +1395,12 @@ public abstract class ExportPaperAbstractService {
 
     private WordprocessingMLPackage getPkgObj(Question question){
 		String pkgPathId = question.getQuesPkgPathId();
-		byte[] pkgByte = quesPkgPathRepo.findFirstById(pkgPathId).getQuesPkg();
+		QuestionPkgPath quesPkg = quesPkgPathRepo.findFirstById(pkgPathId);
+		if(quesPkg == null){
+			 byte[] bytes=new byte[0];
+			return DocxProcessUtil.getPkg(bytes);
+		}
+		byte[] pkgByte = quesPkg.getQuesPkg();
 		return DocxProcessUtil.getPkg(pkgByte);
 	}
     

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

@@ -185,7 +185,7 @@ public class GenPaperService {
     /**
      * 按分数在选定的试卷中随机抽取题,组成一套新的试卷
      */
-    public Map<String, Object> genPaperByScore(GenPaperDto genPaperDto) {
+    public Map<String, Object> genPaperByScoreG(GenPaperDto genPaperDto) {
         String msg = "";
         Map<String, Object> paperMsgMap = new HashMap<String, Object>();
         Map<String, Double> paperMap = genPaperDto.getSimpleParams();
@@ -227,17 +227,16 @@ public class GenPaperService {
      * @param 	type
      * @return	Map<String, Object>
      */
-    public Map<String, Object> genPaperByScoreW(GenPaperDto genPaperDto,User user) {
-    	//定义返回给前端的集合
-    	Map<String, Object> paperMsgMap = new HashMap<String, Object>();
-    	//获取所有试卷与抽题数
-    	Map<String, Double> paperMap = genPaperDto.getSimpleParams();
-    	paperMsgMap = extractByQuestioScore(paperMap,paperMsgMap,genPaperDto,user);
+    public Map<String, Object> genPaperByScore(GenPaperDto genPaperDto,User user) {
+    	Map<String, Object> paperMsgMap = extractByQuestioScore(genPaperDto,user);
     	return paperMsgMap;
     }
     
     //通过题目分数组卷
-    private Map<String, Object> extractByQuestioScore(Map<String, Double> paperMap,Map<String, Object> paperMsgMap,GenPaperDto genPaperDto,User user){
+    private Map<String, Object> extractByQuestioScore(GenPaperDto genPaperDto,User user){
+    	Map<String, Object> paperMsgMap = new HashMap<String, Object>();
+    	//获取所有试卷与抽题数
+    	Map<String, Double> paperMap = genPaperDto.getSimpleParams();
     	if(paperMap != null && paperMap.size()>0){
     		//定义随机选中的小题集合
     		List<PaperDetailUnit> selectedUnits = new ArrayList<PaperDetailUnit>();
@@ -306,21 +305,16 @@ public class GenPaperService {
      * @param 	type
      * @return	Map<String, Object>
      */
-    public Map<String, Object> genPaperByQuestionNumW(GenPaperDto genPaperDto,User user) {
-    	//定义返回给前端的集合
-    	
-    	//Map<String, Object> paperMsgMap = new HashMap<String, Object>();
-    	
-    	//获取所有试卷与抽题数
-    	//Map<String, Double> paperMap = genPaperDto.getSimpleParams();
-    	
-    	Map<String, Object> paperMsgMap = extractByQuestionNum(genPaperDto.getSimpleParams(),genPaperDto,user);
+    public Map<String, Object> genPaperByQuestionNum(GenPaperDto genPaperDto,User user) {
+    	Map<String, Object> paperMsgMap = extractByQuestionNum(genPaperDto,user);
     	return paperMsgMap;
     }
     
     //通过题目数量组卷
-    private Map<String, Object> extractByQuestionNum(Map<String, Double> paperMap,GenPaperDto genPaperDto,User user){
+    private Map<String, Object> extractByQuestionNum(GenPaperDto genPaperDto,User user){
     	Map<String, Object> paperMsgMap = new HashMap<String, Object>();
+    	//获取所有试卷与抽题数
+    	Map<String, Double> paperMap = genPaperDto.getSimpleParams();
     	if(paperMap != null && paperMap.size()>0){
     		//定义随机选中的小题集合
     		List<PaperDetailUnit> selectedUnits = new ArrayList<PaperDetailUnit>();
@@ -335,9 +329,12 @@ public class GenPaperService {
     			//计算所有题目数量
     			int questionSum = countQuestions(unitList);
     			if(needNumber>questionSum){
-    				//unitList.get(0).getPaper.getName();
-    				Paper paper = paperRepo.findOne(paperId);
-    				paperMsgMap.put("msg", "\""+paper.getName()+"\"试卷,题源不够");
+    				if(questionSum == 0){
+    					Paper paper = paperRepo.findOne(paperId);
+        				paperMsgMap.put("msg", "\""+ paper.getName()+"\"试卷,题源不够");
+    				}else {
+    					paperMsgMap.put("msg", "\""+unitList.get(0).getPaper().getName()+"\"试卷,题源不够");
+					}
                     return paperMsgMap;
     			}
     			//生成随机抽取的题号
@@ -516,7 +513,7 @@ public class GenPaperService {
 	}
     
     //gaoxing
-    public Map<String, Object> genPaperByQuestionNum(GenPaperDto genPaperDto) {
+    public Map<String, Object> genPaperByQuestionNumG(GenPaperDto genPaperDto) {
         String msg = "";
         Map<String, Object> paperMsgMap = new HashMap<String, Object>();
         Map<String, Double> paperMap = genPaperDto.getSimpleParams();