Explorar el Código

修改通用题库BUG

chenken hace 7 años
padre
commit
e88af3fdc3

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

@@ -21,7 +21,7 @@ public interface AudioTimeConfigRepo  extends MongoRepository<AudioTimeConfig,St
 	 */
 	public void deleteByExamIdAndCourseCode(String examId,String courseCode);
 	
-	List<AudioTimeConfig> findByExamIdAndCourseCode(String examId,String courseCode);
+	List<AudioTimeConfig> findByExamIdAndCourseCodeOrderByGroupCode(String examId,String courseCode);
 	
 }
 

+ 13 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PaperExp.java

@@ -53,6 +53,11 @@ public class PaperExp implements Serializable{
 
     private String courseLevel;
 
+    /**
+     * 不参与持久化,只做查询显示使用
+     * 是否包含音频题
+     */
+    private Boolean hasAudio;
     
     public static long getSerialVersionUID() {
         return serialVersionUID;
@@ -200,5 +205,13 @@ public class PaperExp implements Serializable{
 	public void setCourse(Course course) {
 		this.course = course;
 	}
+
+	public Boolean getHasAudio() {
+		return hasAudio;
+	}
+
+	public void setHasAudio(Boolean hasAudio) {
+		this.hasAudio = hasAudio;
+	}
     
 }

+ 0 - 13
cqb-paper/src/main/java/com/qmth/cqb/paper/model/Paper.java

@@ -62,11 +62,6 @@ public class Paper implements Serializable {
     private String orgId;
 
     private Map<String, String> params;// 导入试卷属性
-    
-    /**
-     * 是否包含音频题
-     */
-    private Boolean hasAudio;
 
     public static long getSerialVersionUID() {
         return serialVersionUID;
@@ -220,14 +215,6 @@ public class Paper implements Serializable {
 		this.level = level;
 	}
 
-    public Boolean getHasAudio() {
-		return hasAudio;
-	}
-
-	public void setHasAudio(Boolean hasAudio) {
-		this.hasAudio = hasAudio;
-	}
-
 	public Course getCourse() {
         return course;
     }

+ 1 - 5
cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/ComputerTestPaper.java

@@ -61,11 +61,7 @@ public class ComputerTestPaper {
 		this.courseName = paper.getCourse().getName();
 		this.totalScore = paper.getTotalScore();
 		this.detailCount = paper.getPaperDetailCount();
-		if(paper.getHasAudio()==null||!paper.getHasAudio()){
-			this.hasVideo = 0;
-		}else{
-			this.hasVideo = 1;
-		}
+		this.hasVideo = 0;//初始值为0
 		this.groupCode = groupCode;
 	}
 	

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

@@ -17,8 +17,6 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import com.qmth.cqb.utils.exception.PaperException;
-
 import main.java.com.UpYun;
 
 import org.apache.commons.io.FileUtils;
@@ -26,7 +24,12 @@ import org.apache.commons.lang3.StringUtils;
 import org.nlpcn.commons.lang.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.domain.*;
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort.Direction;
 import org.springframework.data.domain.Sort.Order;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -36,6 +39,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 import org.springframework.web.multipart.MultipartFile;
 
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+
 import com.google.gson.Gson;
 import com.qmth.cqb.paper.dao.ExamPaperRepo;
 import com.qmth.cqb.paper.dao.PaperDetailRepo;
@@ -62,9 +68,7 @@ import com.qmth.cqb.utils.BeanCopierUtil;
 import com.qmth.cqb.utils.CommonUtils;
 import com.qmth.cqb.utils.enums.PaperStatus;
 import com.qmth.cqb.utils.enums.PaperType;
-
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
-import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+import com.qmth.cqb.utils.exception.PaperException;
 
 /**
  * Created by songyue on 16/12/28.
@@ -447,14 +451,6 @@ public class PaperService {
      */
     public PaperExp getPaperDto(String id) {
         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.setCourse(paper.getCourse());
@@ -540,12 +536,15 @@ public class PaperService {
             // 大题序号
             paperDetail.setNumber(++mainNum);
             paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
-            if (paperDetail != null && paperDetail.getPaperDetailUnits() != null
-                    && paperDetail.getPaperDetailUnits().size() > 0) {
+            if (paperDetail != null && paperDetail.getPaperDetailUnits() != null&& paperDetail.getPaperDetailUnits().size() > 0) {
                 for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
-                    if (paperDetailUnit.getQuestion() != null) {
-                        quesService.formatQuesUnit(paperDetailUnit.getQuestion());
-                        List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
+                	Question question = paperDetailUnit.getQuestion();
+                    if (question != null) {
+                    	if(question.getHasAudio()!=null&&question.getHasAudio()){
+                    		paperExp.setHasAudio(true);	//设置试卷含有音频
+                    	}
+                        quesService.formatQuesUnit(question);
+                        List<Question> subQuesList = question.getSubQuestions();
                         // 套题序号
                         if (subQuesList != null && subQuesList.size() > 0) {
                             int index = 0;
@@ -555,8 +554,8 @@ public class PaperService {
                                 subQues.setQuesParams(params);
                                 quesService.formatQuesUnit(subQues);
                             }
-                            String quesBodyHtml = relaceQuestionIdx(paperDetailUnit.getQuestion().getQuesBody(), index);
-                            paperDetailUnit.getQuestion().setQuesBody(quesBodyHtml);
+                            String quesBodyHtml = relaceQuestionIdx(question.getQuesBody(), index);
+                            question.setQuesBody(quesBodyHtml);
                         }
                     }
                 }
@@ -1003,17 +1002,6 @@ public class PaperService {
         	}
         	uploadAudioFile(paperId,question.getId(),file,accessUser);
         	appendAudioTag(file.getOriginalFilename(),question.getId());
-        	//将所有关联了此试题的试卷(类型为IMPORT或者GENERATE)都设置为hasAudio=true
-        	List<PaperType> paperTypes = new ArrayList<PaperType>();
-        	paperTypes.add(PaperType.GENERATE);
-        	paperTypes.add(PaperType.IMPORT);
-        	List<PaperDetailUnit> paperDetailUnitsByQuestion = paperDetailUnitService.findByQuestionAndPaperTypes(question,paperTypes);
-        	for(PaperDetailUnit unit:paperDetailUnitsByQuestion){
-        		Paper paper2 = unit.getPaper();
-        		paper2.setHasAudio(true);
-        		paper2.setLastModifyName(accessUser.getName());
-        		paperRepo.save(paper2);
-        	}
     	}
     	//删除服务器文件夹
     	String mp3DirectoryPath = TEMP_FILE_EXP + File.separator + paperId;
@@ -1100,4 +1088,7 @@ public class PaperService {
 		}
     }
     	
+    public void checkPaperAudio(String paperId){
+    	
+    }
 }

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

@@ -700,6 +700,7 @@ public abstract class ExportPaperAbstractService {
 			List<Block> blocks = section.getBlocks();
 			for(Block block:blocks){
 				if("audio".equals(block.getType())){
+					computerTestPaper.setHasVideo(1);
 					PaperDetailUnit paperDetailUnit = paperDetailUnitRepo.findById(computerTestQuestion.getId());
 					QuestionAudio audio = questionAudioService.findByQuestionIdAndFileName(paperDetailUnit.getQuestion().getId(),block.getValue());
 					if(audio!=null){

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

@@ -3,8 +3,11 @@ package com.qmth.cqb.paper.service.impl;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,9 +20,11 @@ import com.qmth.cqb.paper.dao.AudioTimeConfigRepo;
 import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
 import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.model.AudioTimeConfig;
+import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.paper.model.Paper;
 import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.paper.service.AudioTimeConfigService;
+import com.qmth.cqb.paper.service.ExtractConfigService;
 import com.qmth.cqb.question.service.QuesService;
 
 /**
@@ -43,6 +48,9 @@ public class AudioTimeConfigServiceImpl implements AudioTimeConfigService{
 	@Autowired
 	private QuesService quesService;
 	
+	@Autowired
+	private ExtractConfigService extractConfigService;
+	
 	@Override
 	public void saveAudioTimeConfig(List<AudioTimeConfig> audioTimeConfigs,AccessUser user) {
 		this.deleteByExamIdAndCourseCode(audioTimeConfigs.get(0).getExamId(),audioTimeConfigs.get(0).getCourseCode());
@@ -69,25 +77,21 @@ public class AudioTimeConfigServiceImpl implements AudioTimeConfigService{
 		List<AudioTimeConfig> audioTimeConfigList = new ArrayList<AudioTimeConfig>();
 		for(AudioTimeConfig audioTimeConfig:audioTimeConfigModelList){
 			Paper paper = paperRepo.findOne(audioTimeConfig.getPaper().getId());
-			//判断是否为音频卷
-		    if(paper != null && paper.getHasAudio() != null && paper.getHasAudio() == true){
-		    	//根据试卷查询所有小题
-		    	List<PaperDetailUnit> list = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
-		    	for(PaperDetailUnit paperDetailUnit:list){
-		    		if(paperDetailUnit.getQuestion().getHasAudio() != null && paperDetailUnit.getQuestion().getHasAudio() == true){
-		    			AudioTimeConfig audioTimeCon = new AudioTimeConfig();
-		    			audioTimeCon.setExamId(audioTimeConfig.getExamId());
-		    			audioTimeCon.setExamName(audioTimeConfig.getExamName());
-		    			audioTimeCon.setGroupCode(audioTimeConfig.getGroupCode());
-		    			audioTimeCon.setPaper(paper);
-		    			audioTimeCon.setCourseCode(audioTimeConfig.getCourseCode());
-		    			quesService.formatQues(paperDetailUnit.getQuestion());
-		    			audioTimeCon.setPaperDetailUnit(paperDetailUnit);
-		    			audioTimeConfigList.add(audioTimeCon);
-		    		}
-		    	}
-		    	
-		    }
+	    	//根据试卷查询所有小题
+	    	List<PaperDetailUnit> list = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
+	    	for(PaperDetailUnit paperDetailUnit:list){
+	    		if(paperDetailUnit.getQuestion().getHasAudio() != null && paperDetailUnit.getQuestion().getHasAudio() == true){
+	    			AudioTimeConfig audioTimeCon = new AudioTimeConfig();
+	    			audioTimeCon.setExamId(audioTimeConfig.getExamId());
+	    			audioTimeCon.setExamName(audioTimeConfig.getExamName());
+	    			audioTimeCon.setGroupCode(audioTimeConfig.getGroupCode());
+	    			audioTimeCon.setPaper(paper);
+	    			audioTimeCon.setCourseCode(audioTimeConfig.getCourseCode());
+	    			quesService.formatQues(paperDetailUnit.getQuestion());
+	    			audioTimeCon.setPaperDetailUnit(paperDetailUnit);
+	    			audioTimeConfigList.add(audioTimeCon);
+	    		}
+	    	}
 		}
 		return audioTimeConfigList;
 	}
@@ -100,11 +104,47 @@ public class AudioTimeConfigServiceImpl implements AudioTimeConfigService{
 
 	@Override
 	public List<AudioTimeConfig> findAudioTimeConfigByExamId(String examId,String courseCode) {
-		List<AudioTimeConfig> list = audioTimeConfigRepo.findByExamIdAndCourseCode(examId,courseCode);
-		for(AudioTimeConfig audioTimeConfig : list){
+		List<AudioTimeConfig> audioTimeConfigList = audioTimeConfigRepo.findByExamIdAndCourseCodeOrderByGroupCode(examId,courseCode);
+		List<String> questionIds = new ArrayList<String>();
+		for(AudioTimeConfig audioTimeConfig:audioTimeConfigList){
+			questionIds.add(audioTimeConfig.getQuestionId());
+		}
+		ExtractConfig condition = new ExtractConfig();
+		condition.setExamId(Long.valueOf(examId));
+		condition.setCourseCode(courseCode);
+		ExtractConfig extractConfig = extractConfigService.findConfig(condition);
+		
+		Map<String,String> paperIdMap = extractConfig.getFinishedPaperIdMap();
+		Set<Entry<String,String>> entrySet = paperIdMap.entrySet();
+		Iterator<Entry<String,String>> iterator = entrySet.iterator();
+		while(iterator.hasNext()){
+			Entry<String,String> entry = iterator.next();
+			String groupCode = entry.getKey();
+			String paperId = entry.getValue();
+			Paper paper = paperRepo.findOne(paperId);
+	    	//根据试卷查询所有小题
+	    	List<PaperDetailUnit> list = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
+	    	for(PaperDetailUnit paperDetailUnit:list){
+	    		if(paperDetailUnit.getQuestion().getHasAudio() != null && paperDetailUnit.getQuestion().getHasAudio() == true){
+	    			if(questionIds.contains(paperDetailUnit.getQuestion().getId())){
+	    				continue;
+	    			}
+	    			AudioTimeConfig audioTimeConfig = new AudioTimeConfig();
+	    			audioTimeConfig.setExamId(examId);
+	    			audioTimeConfig.setExamName(extractConfig.getExamName());
+	    			audioTimeConfig.setGroupCode(groupCode);
+	    			audioTimeConfig.setPaper(paper);
+	    			audioTimeConfig.setCourseCode(courseCode);
+	    			audioTimeConfig.setPaperDetailUnit(paperDetailUnit);
+	    			audioTimeConfigList.add(audioTimeConfig);
+	    		}
+	    	}
+		}
+		
+		for(AudioTimeConfig audioTimeConfig : audioTimeConfigList){
 			quesService.formatQues(audioTimeConfig.getPaperDetailUnit().getQuestion());
 		}
-		return list;
+		return audioTimeConfigList;
 	}
 
 	@Override

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

@@ -6,8 +6,8 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import javax.servlet.http.HttpServletResponse;
 
@@ -342,16 +342,14 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 	private void downloadQuestionAudio(List<Paper> papers,ExamFile examFile){
 		if(examFile.getExamFileType()==ExamFileType.PAPER){
 			for(Paper paper:papers){
-				if(paper.getHasAudio()!=null&&paper.getHasAudio()){
-					if(paper.getOrgId().equals(examFile.getOrgId())
-							&&paper.getCourse().getCode().equals(examFile.getCourseId())){
-						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());
-								for(QuestionAudio audio:questionAudios){
-									FileDisposeUtil.saveUrlAs(downloadUrl+audio.getFileUrl(),downloadDirectory+File.separator+examFile.getFileName()+"_"+audio.getFileName());
-								}
+				if(paper.getOrgId().equals(examFile.getOrgId())
+						&&paper.getCourse().getCode().equals(examFile.getCourseId())){
+					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());
+							for(QuestionAudio audio:questionAudios){
+								FileDisposeUtil.saveUrlAs(downloadUrl+audio.getFileUrl(),downloadDirectory+File.separator+examFile.getFileName()+"_"+audio.getFileName());
 							}
 						}
 					}

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

@@ -9,14 +9,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
-
-
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import com.qmth.cqb.base.dao.CourseRepo;
-import com.qmth.cqb.base.model.Course;
-
 import org.apache.commons.lang3.StringUtils;
 import org.nlpcn.commons.lang.util.StringUtil;
 import org.slf4j.Logger;
@@ -44,6 +39,8 @@ 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.util.GsonUtil;
 
+import com.qmth.cqb.base.dao.CourseRepo;
+import com.qmth.cqb.base.model.Course;
 import com.qmth.cqb.paper.dao.AudioTimeConfigRepo;
 import com.qmth.cqb.paper.dao.ExportServiceManageRepo;
 import com.qmth.cqb.paper.dao.ExtractConfigRepo;

+ 1 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperController.java

@@ -585,4 +585,5 @@ public class PaperController {
 			return new ResponseEntity(e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
 		}
     }
+    
 }

+ 1 - 1
cqb-question-resource/src/main/java/com/qmth/cqb/question/model/QuestionAudio.java

@@ -87,5 +87,5 @@ public class QuestionAudio implements Serializable{
 	public void setCreateUser(String createUser) {
 		this.createUser = createUser;
 	}
-	
+
 }

+ 11 - 1
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/impl/QuestionAudioServiceImpl.java

@@ -14,6 +14,7 @@ import org.springframework.util.Assert;
 
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
+import com.qmth.cqb.question.dao.QuesRepo;
 import com.qmth.cqb.question.dao.QuestionAudioRepo;
 import com.qmth.cqb.question.model.QuesOption;
 import com.qmth.cqb.question.model.Question;
@@ -32,6 +33,9 @@ public class QuestionAudioServiceImpl implements QuestionAudioService{
 	@Autowired
 	private QuestionAudioRepo questionAudioRepo;
 	
+	@Autowired
+	private QuesRepo quesRepo;
+	
 	@Value("${upyun.bucketName}")
 	protected String bucketName;
 	
@@ -50,7 +54,7 @@ public class QuestionAudioServiceImpl implements QuestionAudioService{
     		questionAudioRepo.delete(questionAudio2);
     	}
 		questionAudio.setCreateTime(new Date());
-		//questionAudio.setCreateUser(accessUser.getName());
+		questionAudio.setCreateUser(accessUser.getName());
 		questionAudioRepo.save(questionAudio);
 	}
 
@@ -89,6 +93,12 @@ public class QuestionAudioServiceImpl implements QuestionAudioService{
 					questionAudioRepo.delete(audio);
 				}
 			}
+			//如果根据questionId查询不出音频了,将hasAudio设置为false
+			List<QuestionAudio> questionAudios02 = questionAudioRepo.findByQuestionId(question.getId());
+			if(questionAudios02.size()==0){
+				question.setHasAudio(false);
+				quesRepo.save(question);
+			}
 		}
 	}