Browse Source

提交通用题库BUG

chenken 7 năm trước cách đây
mục cha
commit
59ec65d8b3

+ 23 - 5
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/FileDisposeUtil.java

@@ -37,21 +37,39 @@ public class FileDisposeUtil {
 	private static final Logger logger = LoggerFactory.getLogger(FileDisposeUtil.class);
 	
 	public static boolean saveUrlAs(String fileUrl, String fileName) {
+		HttpURLConnection connection = null;
+		DataOutputStream out = null;
+		DataInputStream in = null;
 		try {
 			URL url = new URL(fileUrl);
-			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-			DataInputStream in = new DataInputStream(connection.getInputStream());
-			DataOutputStream out = new DataOutputStream(new FileOutputStream(fileName));
+			connection = (HttpURLConnection) url.openConnection();
+			in = new DataInputStream(connection.getInputStream());
+			out = new DataOutputStream(new FileOutputStream(fileName));
 			byte[] buffer = new byte[4096];
 			int count = 0;
 			while ((count = in.read(buffer)) > 0) {
 				out.write(buffer, 0, count);
 			}
-			out.close();
-			in.close();
 			return true;
 		} catch (Exception e) {
 			return false;
+		}finally {
+			try {
+				if (out != null) {
+					out.close();
+					out = null;
+				}
+				if (in != null) {
+					in.close();
+					in = null;
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			if (connection != null) {
+				connection.disconnect();
+				connection = null;
+			}
 		}
 	}
 	/**

+ 14 - 3
cqb-paper/src/main/java/com/qmth/cqb/paper/model/AudioTimeConfig.java

@@ -5,12 +5,11 @@ import java.util.Date;
 
 import org.springframework.data.mongodb.core.mapping.DBRef;
 
-import com.qmth.cqb.question.model.Question;
 
 
 /**
  * @author  	chenken
- * @date    	2017年8月10日 下午2:25:53
+ * @date    	017年8月10日 下午:5:53
  * @company 	QMTH
  * @description 音频播放次数设置
  */
@@ -19,7 +18,7 @@ public class AudioTimeConfig implements Serializable {
 	/**
 	 * 
 	 */
-	private static final long serialVersionUID = -3346664494126413527L;
+	private static final long serialVersionUID = -33466644941641357L;
 	private String id;
 	/**
 	 * 考试ID
@@ -69,6 +68,18 @@ public class AudioTimeConfig implements Serializable {
 		this.groupCode = groupCode;
 		this.questionId = questionId;
 	}
+	public AudioTimeConfig(String examId,String examName,String groupCode,String courseCode, PaperDetailUnit paperDetailUnit) {
+		this.examId = examId;
+		this.examName = examName;
+		this.courseCode = courseCode;
+		this.groupCode = groupCode;
+		this.paperDetailUnit = paperDetailUnit;
+		if(this.paperDetailUnit!=null){
+			this.questionId = this.paperDetailUnit.getQuestion().getId();
+			this.paper = this.paperDetailUnit.getPaper();
+		}
+	}
+
 	public String getId() {
 		return id;
 	}

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

@@ -48,6 +48,10 @@ public class ExamFile implements Serializable{
 	 * 考试类型
 	 */
 	private ExamType examType;
+	/**
+	 * 试卷类型
+	 */
+	private String groupCode;
 	/**
 	 * 课程ID
 	 */
@@ -106,6 +110,7 @@ public class ExamFile implements Serializable{
 				break;
 			}
 		}
+		this.groupCode = groupCode;
     	this.fileName = extractConfig.getCourseName()+"_"+
     				    extractConfig.getCourseCode()+"_"+
     				    examFileType.getName()+"_"+
@@ -235,6 +240,14 @@ public class ExamFile implements Serializable{
 	public void setOrgId(String orgId) {
 		this.orgId = orgId;
 	}
+
+	public String getGroupCode() {
+		return groupCode;
+	}
+
+	public void setGroupCode(String groupCode) {
+		this.groupCode = groupCode;
+	}
     
 }
 

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

@@ -25,6 +25,7 @@ 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.model.Question;
 import com.qmth.cqb.question.service.QuesService;
 
 /**
@@ -80,16 +81,14 @@ public class AudioTimeConfigServiceImpl implements AudioTimeConfigService{
 	    	//根据试卷查询所有小题
 	    	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());
+	    		if(paperDetailUnit.getQuestion().getHasAudio() != null 
+	    				&& paperDetailUnit.getQuestion().getHasAudio()){
 	    			quesService.formatQues(paperDetailUnit.getQuestion());
-	    			audioTimeCon.setPaperDetailUnit(paperDetailUnit);
-	    			audioTimeConfigList.add(audioTimeCon);
+	    			audioTimeConfigList.add(new AudioTimeConfig(audioTimeConfig.getExamId(),
+	    														audioTimeConfig.getExamName(),
+	    														audioTimeConfig.getGroupCode(),
+	    														audioTimeConfig.getCourseCode(),
+	    														paperDetailUnit));
 	    		}
 	    	}
 		}
@@ -105,46 +104,57 @@ public class AudioTimeConfigServiceImpl implements AudioTimeConfigService{
 	@Override
 	public List<AudioTimeConfig> findAudioTimeConfigByExamId(String examId,String courseCode) {
 		List<AudioTimeConfig> audioTimeConfigList = audioTimeConfigRepo.findByExamIdAndCourseCodeOrderByGroupCode(examId,courseCode);
+		//添加后面成为音频题的设置
+		addAudioTimeConfig(examId,courseCode,audioTimeConfigList);
+		//删除已经不是音频题的设置
+		deleteAudioTimeConfig(audioTimeConfigList);
+		return audioTimeConfigList;
+	}
+	
+	private void addAudioTimeConfig(String examId,String courseCode,List<AudioTimeConfig> audioTimeConfigList){
 		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);
-		
+		//添加后面成为音频题的设置
+		ExtractConfig extractConfig = extractConfigService.findConfig(new ExtractConfig(Long.valueOf(examId),courseCode));
 		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);
-	    		}
-	    	}
+		if(paperIdMap!=null&&paperIdMap.size()>0){
+			Set<Entry<String,String>> entrySet = paperIdMap.entrySet();
+			Iterator<Entry<String,String>> iterator = entrySet.iterator();
+			while(iterator.hasNext()){
+				Entry<String,String> entry = iterator.next();
+				Paper paper = paperRepo.findOne(entry.getValue());
+		    	//根据试卷查询所有小题
+		    	List<PaperDetailUnit> list = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
+		    	for(PaperDetailUnit paperDetailUnit:list){
+		    		if(paperDetailUnit.getQuestion().getHasAudio() != null 
+		    				&& paperDetailUnit.getQuestion().getHasAudio()){
+		    			if(questionIds.contains(paperDetailUnit.getQuestion().getId())){
+		    				continue;
+		    			}
+		    			audioTimeConfigList.add(new AudioTimeConfig(examId,extractConfig.getExamName(),entry.getKey(),courseCode,paperDetailUnit));
+		    		}
+		    	}
+			}
 		}
-		
+	}
+	
+	/**
+	 * 将题目已经不是音频题的对象从集合中删除,并将对象从数据库删除
+	 * @param audioTimeConfigList
+	 */
+	private void deleteAudioTimeConfig(List<AudioTimeConfig> audioTimeConfigList){
+		List<AudioTimeConfig> configs = new ArrayList<AudioTimeConfig>();
 		for(AudioTimeConfig audioTimeConfig : audioTimeConfigList){
+			Question question = audioTimeConfig.getPaperDetailUnit().getQuestion();
+			if(question.getHasAudio()==null||!question.getHasAudio()){
+				configs.add(audioTimeConfig);
+			}
 			quesService.formatQues(audioTimeConfig.getPaperDetailUnit().getQuestion());
 		}
-		return audioTimeConfigList;
+		audioTimeConfigList.removeAll(configs);
+		audioTimeConfigRepo.delete(configs);
 	}
 
 	@Override

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

@@ -66,7 +66,8 @@ public class ExamFileServiceImpl implements ExamFileService{
 		oldExamFile.setExamType(examFile.getExamType());
 		oldExamFile.setCourseId(examFile.getCourseId());
 		oldExamFile.setExamFileType(examFile.getExamFileType());
-		oldExamFile.setFileName(examFile.getFileName());
+		//oldExamFile.setFileName(examFile.getFileName());
+		oldExamFile.setGroupCode(examFile.getGroupCode());
 		oldExamFile = examFileRepo.findOne(Example.of(oldExamFile));
 		if(oldExamFile!=null){
 			//删除又拍云上的文件

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

@@ -11,6 +11,8 @@ import java.util.Set;
 
 import javax.servlet.http.HttpServletResponse;
 
+import main.java.com.UpYun;
+
 import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -100,6 +102,15 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 	@Value("${upyun.zipDirectory}")
 	private String zipDirectory;
 	
+	@Value("${upyun.bucketName}")
+	private String bucketName;
+	
+	@Value("${upyun.userName}")
+	private String userName;
+	
+	@Value("${upyun.password}")
+	private String password;
+	
 	@Override
 	public void saveExtractConfigAndBuildPaperFile(ExtractConfig extractConfig,Integer isbuildFile,AccessUser accessUser) throws Exception {
 		//查询试卷导出设置
@@ -112,10 +123,11 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 		extractConfig.setFinishedPaperIdMap(finishedPaperIdMap);
     	extractConfig.setIfFinish((short)1);
     	if(isbuildFile==1){
-    		Set<Entry<String,String>> entry = finishedPaperIdMap.entrySet();
-    		Iterator<Entry<String,String>> iterator = entry.iterator();
+    		Set<Entry<String,String>> entrySet = finishedPaperIdMap.entrySet();
+    		Iterator<Entry<String,String>> iterator = entrySet.iterator();
     		while(iterator.hasNext()){
-    			String paperId = iterator.next().getValue();
+    			Entry<String,String> entry = iterator.next();
+    			String paperId = entry.getValue();
     			uploadPaperFile(extractConfig,paperId,exportStructure,accessUser);
     		}
     	}
@@ -184,7 +196,9 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 		if(examFiles!=null&&examFiles.size()>0){
 			List<Paper> papers = paperRepo.findByIdIn(paperIds);
 			for(ExamFile examFile:examFiles){
-				FileDisposeUtil.saveUrlAs(downloadUrl+examFile.getFilePath(),downloadDirectory+File.separator+examFile.getFileName());
+				UpYun upyun = new UpYun(bucketName,userName,password);
+				File file = new File(downloadDirectory+File.separator+examFile.getFileName());
+				upyun.readFile(examFile.getFilePath(),file);
 				downloadQuestionAudio(papers,examFile);
 			}
 		}
@@ -348,8 +362,11 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 					for(PaperDetailUnit unit:paperDetailUnits){
 						if(unit.getQuestion().getHasAudio()!=null&&unit.getQuestion().getHasAudio()){
 							List<QuestionAudio> questionAudios = questionAudioService.findQuestionAudiosByQuestionId(unit.getQuestion().getId());
+							UpYun upyun = new UpYun(bucketName,userName,password);
 							for(QuestionAudio audio:questionAudios){
-								FileDisposeUtil.saveUrlAs(downloadUrl+audio.getFileUrl(),downloadDirectory+File.separator+examFile.getFileName()+"_"+audio.getFileName());
+								String audioFileName = examFile.getFileName().split("\\.")[0]+"_"+audio.getFileName();
+								File file = new File(downloadDirectory+File.separator+audioFileName);
+								upyun.readFile(audio.getFileUrl(),file);
 							}
 						}
 					}

+ 10 - 1
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuesService.java

@@ -16,8 +16,10 @@ import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
 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;
+import com.qmth.cqb.question.model.QuestionAudio;
 import com.qmth.cqb.question.model.QuestionSearchCondition;
 import com.qmth.cqb.utils.CommonUtils;
 import com.qmth.cqb.utils.word.DocxProcessUtil;
@@ -38,7 +40,9 @@ public class QuesService {
 
     @Autowired
     MongoTemplate mongoTemplate;
-
+    
+    @Autowired
+    QuestionAudioRepo questionAudioRepo;
     /**
      * 套题子题按序号自动生成ID
      *
@@ -132,6 +136,11 @@ public class QuesService {
         }
         if(question.getHasAudio()!=null&&question.getHasAudio()){
         	questionAudioService.deleteAudioNotInQuestion(question);
+        	//如果根据questionId查询不出音频了,将hasAudio设置为false
+			List<QuestionAudio> questionAudios = questionAudioRepo.findByQuestionId(question.getId());
+			if(questionAudios.size()==0){
+				question.setHasAudio(false);
+			}
         }
         return quesRepo.save(question);
     }

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

@@ -93,12 +93,6 @@ 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);
-			}
 		}
 	}