浏览代码

提交音频相关BUG

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

+ 3 - 3
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/service/GenPaperService.java

@@ -72,7 +72,7 @@ public class GenPaperService {
         }
         List<Paper> papers = (List<Paper>) paperRepo.findAll(genPaperDto.getPaperIds());
         for (Paper oldPaper : papers) {
-            List<PaperDetailUnit> unitList = unitRepo.findByPaper(oldPaper);
+            List<PaperDetailUnit> unitList = unitRepo.findByPaperOrderByNumber(oldPaper);
             for (PaperDetailUnit unit : unitList) {
                 Question question = unit.getQuestion();
                 question.setQuesName(unit.getPaperDetail().getName());
@@ -164,7 +164,7 @@ public class GenPaperService {
         if (paperMap != null && paperMap.size() > 0) {
             for (String paperId : paperMap.keySet()) {
                 Double totalScore = paperMap.get(paperId);
-                List<PaperDetailUnit> unitList = unitRepo.findByPaper(paperRepo.findOne(paperId));
+                List<PaperDetailUnit> unitList = unitRepo.findByPaperOrderByNumber(paperRepo.findOne(paperId));
                 Collections.shuffle(unitList);// 随机乱序之后再根据分数取题
                 double sum = 0;
                 for (PaperDetailUnit pdu : unitList) {
@@ -204,7 +204,7 @@ public class GenPaperService {
         if (paperMap != null && paperMap.size() > 0) {
             for (String paperId : paperMap.keySet()) {
                 int needQuesNum = paperMap.get(paperId).intValue();// 需要抽取的试题数量
-                List<PaperDetailUnit> unitList = unitRepo.findByPaper(paperRepo.findOne(paperId));
+                List<PaperDetailUnit> unitList = unitRepo.findByPaperOrderByNumber(paperRepo.findOne(paperId));
                 Collections.shuffle(unitList);// 随机乱序之后再取题
                 List<PaperDetailUnit> nestedUnits = new ArrayList<PaperDetailUnit>();// 已选的试题集合
                 List<Integer> otherQuesNum = new ArrayList<Integer>();

+ 1 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/dao/PaperDetailUnitRepo.java

@@ -14,7 +14,7 @@ import java.util.List;
 
 public interface PaperDetailUnitRepo extends MongoRepository<PaperDetailUnit, String>,QueryByExampleExecutor<PaperDetailUnit> {
     List<PaperDetailUnit> findByPaperDetailOrderByNumber(PaperDetail paperDetail);
-    List<PaperDetailUnit> findByPaper(Paper paper);
+    List<PaperDetailUnit> findByPaperOrderByNumber(Paper paper);
     List<PaperDetailUnit> findByQuestion(Question question);
     List<PaperDetailUnit> findByQuestionIn(List<Question> questionList);
     PaperDetailUnit findById(String id);

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

@@ -360,7 +360,7 @@ public class PaperService {
         if (papers.get(0).getPaperType() == PaperType.IMPORT) {
             List<Question> quesList = new ArrayList<Question>();
             for (Paper paper : papers) {
-                List<PaperDetailUnit> paperUnits = paperDetailUnitRepo.findByPaper(paper);
+                List<PaperDetailUnit> paperUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
                 for (PaperDetailUnit pdu : paperUnits) {
                     if (pdu.getQuestion() != null) {
                         quesList.add(pdu.getQuestion());
@@ -446,34 +446,34 @@ public class PaperService {
      * @return
      */
     public PaperExp getPaperDto(String id) {
-
-        // 获取paper
         Paper paper = paperRepo.findOne(id);
+        List<PaperDetailUnit> paperDetailUnitsByPaper = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
+        for(int i = 0;i<paperDetailUnitsByPaper.size();i++){
+        	PaperDetailUnit unit = paperDetailUnitsByPaper.get(i);
+        	unit.setNumber(i+1);
+        }
+        paperDetailUnitRepo.save(paperDetailUnitsByPaper);
         // 创建paperDto
-        PaperExp paperExp = BeanCopierUtil.copyProperties(paper, PaperExp.class);
+        PaperExp paperExp = BeanCopierUtil.copyProperties(paper,PaperExp.class);
         paperExp.setCourse(paper.getCourse());
         // 获取大题
         List<PaperDetail> paperDetails = paperDetailRepo.findByPaperOrderByNumber(paper);
         List<PaperDetailExp> paperDetailExps = BeanCopierUtil.copyPropertiesOfList(paperDetails, PaperDetailExp.class);
-        paperExp.setPaperDetails(paperDetailExps);
-
         // 封装小题
         for (int i = 0; i < paperDetailExps.size(); i++) {
             List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetailOrderByNumber(paperDetails.get(i));
             if (paperDetailUnits != null && paperDetailUnits.size() > 0) {
-                List<PaperDetailUnitExp> paperDetailUnitExps = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,
-                        PaperDetailUnitExp.class);
+                List<PaperDetailUnitExp> paperDetailUnitExps = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,PaperDetailUnitExp.class);
                 // 选择题,套题下选择题 选项顺序重新排列
                 reorderChoicequestionOption(paperDetailUnitExps);
                 paperDetailExps.get(i).setPaperDetailUnits(paperDetailUnitExps);
             } else {
                 paperDetailExps.get(i).setUnitCount(0);
             }
-
         }
+        paperExp.setPaperDetails(paperDetailExps);
         // 初始化试卷内容
         initPaper(paperExp);
-
         return paperExp;
     }
 
@@ -533,14 +533,11 @@ public class PaperService {
             return;
         }
         int mainNum = 0;
-        int subNum = 0;
-        Collections.sort(paperExp.getPaperDetails());
         List<PaperDetailExp> paperDetailExpList = paperExp.getPaperDetails();
         for (PaperDetailExp paperDetail : paperDetailExpList) {
             // 大题序号
             paperDetail.setNumber(++mainNum);
             paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
-            // 小题序号
             if (paperDetail != null && paperDetail.getPaperDetailUnits() != null
                     && paperDetail.getPaperDetailUnits().size() > 0) {
                 for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
@@ -549,21 +546,17 @@ public class PaperService {
                         List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
                         // 套题序号
                         if (subQuesList != null && subQuesList.size() > 0) {
-                            int index = subNum;
+                            int index = 0;
                             for (Question subQues : subQuesList) {
                                 Map<String, String> params = new HashMap<String, String>();
-                                params.put("number", String.valueOf(++subNum));
+                                params.put("number", String.valueOf(++index));
                                 subQues.setQuesParams(params);
                                 quesService.formatQuesUnit(subQues);
                             }
                             String quesBodyHtml = relaceQuestionIdx(paperDetailUnit.getQuestion().getQuesBody(), index);
                             paperDetailUnit.getQuestion().setQuesBody(quesBodyHtml);
-                        } else {
-                            paperDetailUnit.setNumber(++subNum);
                         }
-
                     }
-
                 }
             }
         }
@@ -597,14 +590,15 @@ public class PaperService {
     public void formatPaper(Paper paper, AccessUser user) {
         List<PaperDetail> paperDetails = paperDetailRepo.findByPaperOrderByNumber(paper);
         // 计算试卷总分
-        List<PaperDetailUnit> paperDetailUnitAll = paperDetailUnitRepo.findByPaper(paper);
+        List<PaperDetailUnit> paperDetailUnitAll = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
         int allQuesCount = 0;
         double totalScore = 0;
-        for (PaperDetailUnit unit : paperDetailUnitAll) {
+        for (int i = 0;i<paperDetailUnitAll.size();i++) {
+        	PaperDetailUnit unit = paperDetailUnitAll.get(i);
             if (unit.getScore() != null) {
                 totalScore += unit.getScore();
             }
-
+            unit.setNumber(i+1);
         }
         // 计算各大题总分
         for (PaperDetail paperDetail : paperDetails) {
@@ -622,7 +616,6 @@ public class PaperService {
                             && unit.getQuestion().getSubQuestions().size() > 0) {
                         nestQusNum += unit.getQuestion().getSubQuestions().size() - 1;
                     }
-
                 }
                 count = paperDetailUnits.size() + nestQusNum;
                 paperDetail.setScore(score);
@@ -739,7 +732,7 @@ public class PaperService {
         // Map<String, String> quesParams = new HashMap<String, String>();
         // quesParams.put("courseName", paper.getCourseName());
         // ques.setQuesParams(quesParams);
-        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaper(paper);
+        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
         for (PaperDetailUnit pdu : pdus) {
             selectedIds.add(pdu.getQuestion().getId());
         }
@@ -904,17 +897,24 @@ public class PaperService {
     	Map<String, String> messageMap = new HashMap<String, String>();
     	//判断文件名中格式是否正确
     	for(String fileName: filesName){
-    		String fileTpye[]  = fileName.split("\\.");
-    		String fileType = fileTpye[fileTpye.length-1];
+    		String[] fileNames  = fileName.split("\\.");
+    		String fileType = fileNames[fileNames.length-1];
     		if(radioType.indexOf(fileType)<0){
-    			messageMap.put("errorMsg", fileName+"文件格式不对");
+    			messageMap.put("errorMsg", fileName+"文件格式不正确,当前支持格式:"+radioType);
+    			return messageMap;
+    		}
+    		String pattern_01  = "\\d+_[1|2]_\\d{1,2}";				//题干正则
+    		String pattern_02 = "\\d+_[1|2]_[A-Z|a-z]_\\d{1,2}";	//选项正则
+    		if(!(Pattern.matches(pattern_01,fileNames[0])||
+    				Pattern.matches(pattern_02,fileNames[0]))){
+    			messageMap.put("errorMsg", fileName+"文件名格式不正确,请检查");
     			return messageMap;
     		}
     	}
     	//根据试卷id,查询该试卷
     	Paper paper = paperRepo.findOne(paperId);
     	//根据试卷查询所有的小题
-    	List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaper(paper);
+    	List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
     	String names = "";
     	for(PaperDetailUnit paperDetailUnit:paperDetailUnits){
     		names = names + paperDetailUnit.getNumber().toString() + ",";
@@ -1006,7 +1006,7 @@ public class PaperService {
     		//根据试卷查询所有的小题,根据文件名匹配出当前小题ID
     		String questionId = ""; 
     		String numbers[] = file.getOriginalFilename().split("_");
-        	List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaper(paper);
+        	List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
         	for(PaperDetailUnit paperDetailUnit:paperDetailUnits){
         		if(paperDetailUnit.getNumber().toString().equals(numbers[0])){
         			questionId = paperDetailUnit.getQuestion().getId();

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

@@ -486,7 +486,7 @@ public abstract class ExportPaperAbstractService {
      */
     protected List<WordprocessingMLPackage> getPkgList(String id){
         Paper paper = paperRepo.findOne(id);
-        List<WordprocessingMLPackage> wordMLPackages = paperDetailUnitRepo.findByPaper(paper)
+        List<WordprocessingMLPackage> wordMLPackages = paperDetailUnitRepo.findByPaperOrderByNumber(paper)
                 .stream().map(PaperDetailUnit::getQuestion).collect(Collectors.toList())
                 .stream().map(Question::getPkgObj).collect(Collectors.toList());
         return wordMLPackages;

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

@@ -72,7 +72,7 @@ public class AudioTimeConfigServiceImpl implements AudioTimeConfigService{
 			//判断是否为音频卷
 		    if(paper != null && paper.getHasAudio() != null && paper.getHasAudio() == true){
 		    	//根据试卷查询所有小题
-		    	List<PaperDetailUnit> list = paperDetailUnitRepo.findByPaper(paper);
+		    	List<PaperDetailUnit> list = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
 		    	for(PaperDetailUnit paperDetailUnit:list){
 		    		if(paperDetailUnit.getQuestion().getHasAudio() != null && paperDetailUnit.getQuestion().getHasAudio() == true){
 		    			AudioTimeConfig audioTimeCon = new AudioTimeConfig();

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

@@ -345,7 +345,7 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 				if(paper.getHasAudio()!=null&&paper.getHasAudio()){
 					if(paper.getOrgId().equals(examFile.getOrgId())
 							&&paper.getCourse().getCode().equals(examFile.getCourseId())){
-						List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaper(paper);
+						List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
 						for(PaperDetailUnit unit:paperDetailUnits){
 							if(unit.getQuestion().getHasAudio()!=null&&unit.getQuestion().getHasAudio()){
 								List<QuestionAudio> questionAudios = questionAudioService.findQuestionAudiosByQuestionId(unit.getQuestion().getId());

+ 1 - 5
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java

@@ -204,7 +204,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	@Override
 	public boolean checkIsAllQbjectiveQuestion(String paperId) {
 		Paper paper = paperRepo.findOne(paperId);
-		List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaper(paper);
+		List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
 		for(PaperDetailUnit paperDetailUnit:paperDetailUnits){
 			Question question = paperDetailUnit.getQuestion();
 			//填空或问答
@@ -429,16 +429,12 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		PaperDto paperDto = BeanCopierUtil.copyProperties(paper, PaperDto.class);
         // 获取大题
         List<PaperDetail> paperDetails = paperDetailRepo.findByPaperOrderByNumber(paper);
-        //大题根据number进行排序 PaperDetail 对象中有compareTo方法
-        Collections.sort(paperDetails);
         List<PaperDetailDto> paperDetailDtos = BeanCopierUtil.copyPropertiesOfList(paperDetails, PaperDetailDto.class);
         paperDto.setPaperDetails(paperDetailDtos);
         // 封装小题
         for (int i = 0; i < paperDetailDtos.size(); i++) {
         	//根据大题查出大题下面的小题
             List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetailOrderByNumber(paperDetails.get(i));
-            //小题根据number进行排序 perDetailUnit 对象中有compareTo方法
-            Collections.sort(paperDetailUnits);
 			//设置答案
 			setAnswer(paperDetailUnits);
             List<PaperDetailUnitDto> paperDetailUnitDtos = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,PaperDetailUnitDto.class);

+ 8 - 9
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuesService.java

@@ -5,10 +5,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Set;
 
-import cn.com.qmth.examcloud.common.dto.core.Course;
-import cn.com.qmth.examcloud.common.dto.core.enums.CourseLevel;
-import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
-import com.qmth.cqb.utils.enums.PaperType;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
@@ -23,7 +19,6 @@ 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.model.QuestionSearchCondition;
-import com.qmth.cqb.utils.BeanCopierUtil;
 import com.qmth.cqb.utils.CommonUtils;
 import com.qmth.cqb.utils.word.DocxProcessUtil;
 
@@ -37,6 +32,9 @@ public class QuesService {
 
     @Autowired
     QuesRepo quesRepo;
+    
+    @Autowired
+    QuestionAudioService questionAudioService;
 
     @Autowired
     MongoTemplate mongoTemplate;
@@ -118,7 +116,7 @@ public class QuesService {
      * @param question
      */
     public Question saveQues(Question question) {
-        String now = CommonUtils.getCurDateTime();
+    	String now = CommonUtils.getCurDateTime();
         Question saveQues = null;
         if (StringUtils.isNotEmpty(question.getId())) {
             saveQues = quesRepo.findOne(question.getId());
@@ -128,13 +126,14 @@ public class QuesService {
             question.setUpdateTime(now);
             updateSubId(question);
             updateQuesWord(question);
-            return quesRepo.save(question);
         } else {
             updateMainInfo(saveQues, question);
             updateQuesWord(saveQues);
-            return quesRepo.save(saveQues);
         }
-
+        if(question.getHasAudio()!=null&&question.getHasAudio()){
+        	questionAudioService.deleteAudioNotInQuestion(question);
+        }
+        return quesRepo.save(question);
     }
 
     /**

+ 6 - 1
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuestionAudioService.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
+import com.qmth.cqb.question.model.Question;
 import com.qmth.cqb.question.model.QuestionAudio;
 
 /**
@@ -30,6 +31,10 @@ public interface QuestionAudioService {
 	 * @return  
 	 */
 	public QuestionAudio findByQuestionIdAndFileName(String questionId,String fileName);
-	
+	/**
+	 * 删除不在试题中的音频
+	 * @param question
+	 */
+	public void deleteAudioNotInQuestion(Question question);
 }
 

+ 26 - 0
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/impl/QuestionAudioServiceImpl.java

@@ -1,6 +1,7 @@
 package com.qmth.cqb.question.service.impl;
 
 import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
 
 import main.java.com.UpYun;
@@ -14,6 +15,8 @@ import org.springframework.util.Assert;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
 import com.qmth.cqb.question.dao.QuestionAudioRepo;
+import com.qmth.cqb.question.model.QuesOption;
+import com.qmth.cqb.question.model.Question;
 import com.qmth.cqb.question.model.QuestionAudio;
 import com.qmth.cqb.question.service.QuestionAudioService;
 
@@ -65,6 +68,29 @@ public class QuestionAudioServiceImpl implements QuestionAudioService{
 		return questionAudioRepo.findByQuestionIdAndFileName(questionId,fileName);
 	}
 
+	@Override
+	public void deleteAudioNotInQuestion(Question question) {
+		if(question.getHasAudio()!=null&&question.getHasAudio()){
+			List<QuestionAudio> questionAudios = questionAudioRepo.findByQuestionId(question.getId());
+			StringBuffer buffer = new StringBuffer();
+			buffer.append(question.getQuesBody());
+			if(question.getQuesOptions()!=null&&question.getQuesOptions().size()>0){
+				for(QuesOption option:question.getQuesOptions()){
+					buffer.append(option.getOptionBody());
+				}
+			}
+			String questionBodyAndOptionStr = buffer.toString();
+			Iterator<QuestionAudio> audioIterator = questionAudios.iterator();
+			while(audioIterator.hasNext()){
+				QuestionAudio audio = audioIterator.next();
+				if(!questionBodyAndOptionStr.contains(audio.getFileName())){
+					UpYun upYun = new UpYun(bucketName, userName, password);
+					upYun.deleteFile(audio.getFileUrl());
+					questionAudioRepo.delete(audio);
+				}
+			}
+		}
+	}
 
 }
 

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

@@ -2,7 +2,7 @@
 spring.data.mongodb.uri=mongodb://192.168.1.99:27017/comm-ques-bank
 spring.data.mongodb.grid-fs-database=comm-ques-bank
 spring.data.mongodb.database=comm-ques-bank
-eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
+eureka.client.serviceUrl.defaultZone=http://127.0.0.1:1111/eureka/
 spring.application.name=ExamCloud-service-question
 
 spring.redis.host=127.0.0.1
@@ -17,7 +17,7 @@ upyun.audio.maxsize=5
 upyun.downloadUrl=http://exam-cloud-test.b0.upaiyun.com
 upyun.downloadDirectory=paperDirectory
 upyun.zipDirectory=paperZipDirectory
-upyun.radioType=mp3,wma
+upyun.radioType=mp3
 
 
 spring.datasource.url=jdbc:mysql://192.168.1.99:3306/exam_cloud_test?useUnicode=true&characterEncoding=UTF-8

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

@@ -17,7 +17,7 @@ upyun.audio.maxsize=5
 upyun.downloadUrl=http://exam-cloud-test.b0.upaiyun.com
 upyun.downloadDirectory=paperDirectory
 upyun.zipDirectory=paperZipDirectory
-upyun.radioType=mp3,wma
+upyun.radioType=mp3
 
 
 spring.datasource.url=jdbc:mysql://qmthmysql.mysql.rds.aliyuncs.com:3306/exam_cloud?useUnicode=true&characterEncoding=UTF-8

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

@@ -16,7 +16,7 @@ upyun.audio.maxsize=5
 upyun.downloadUrl=http://exam-cloud-test.b0.upaiyun.com
 upyun.downloadDirectory=paperDirectory
 upyun.zipDirectory=paperZipDirectory
-upyun.radioType=mp3,wma
+upyun.radioType=mp3
 
 
 spring.datasource.url=jdbc:mysql://192.168.1.99:3306/exam_cloud_test?useUnicode=true&characterEncoding=UTF-8