ソースを参照

修改下载试卷时未下载音频文件的BUG

chenken 7 年 前
コミット
346740fb15

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

@@ -24,6 +24,8 @@ import cn.com.qmth.examcloud.common.util.excel.ExcelWriter;
 
 import com.qmth.cqb.paper.dao.ExportServiceManageRepo;
 import com.qmth.cqb.paper.dao.ExtractConfigRepo;
+import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
+import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.dto.ExportPaperInfoModel;
 import com.qmth.cqb.paper.dto.ObjectiveQuestionStructure;
 import com.qmth.cqb.paper.dto.PaperDetailExp;
@@ -34,6 +36,8 @@ import com.qmth.cqb.paper.model.ExamFile;
 import com.qmth.cqb.paper.model.ExportServiceManage;
 import com.qmth.cqb.paper.model.ExportStructure;
 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.model.QuestionTypeNum;
 import com.qmth.cqb.paper.rpc.ExamCourseClient;
 import com.qmth.cqb.paper.service.ExamFileService;
@@ -41,6 +45,8 @@ import com.qmth.cqb.paper.service.ExportStructureService;
 import com.qmth.cqb.paper.service.ExtractConfigFileService;
 import com.qmth.cqb.paper.service.ExtractConfigService;
 import com.qmth.cqb.paper.service.export.ExportPaperAbstractService;
+import com.qmth.cqb.question.model.QuestionAudio;
+import com.qmth.cqb.question.service.QuestionAudioService;
 import com.qmth.cqb.utils.FileDisposeUtil;
 import com.qmth.cqb.utils.SpringContextUtils;
 import com.qmth.cqb.utils.enums.ExamFileType;
@@ -76,6 +82,15 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
     @Autowired
     private ExtractConfigRepo extractConfigRepo;
     
+    @Autowired
+	private QuestionAudioService questionAudioService;
+    
+    @Autowired
+	private PaperRepo paperRepo;
+    
+    @Autowired
+    private PaperDetailUnitRepo paperDetailUnitRepo;
+    
 	@Value("${upyun.downloadUrl}")
 	protected String downloadUrl;
 	
@@ -158,11 +173,17 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 				makePaperStructure(exportStructure.getExamName(),paperIds,exportStructure);
 			}
 		}
+		//如果是普通类型的单个导出
+		if(exportModel.getExportWay()==ExportWay.SINGLE&&exportStructure.getExportType()==ExportType.NORMAL){
+			paperIds = getFinishPaperIds(exportModel);
+		}
 		//根据条件获取到文件下载路径,下载文件到服务器的downloadDirectory文件夹
 		List<ExamFile> examFiles = examFileService.findExamFileListByExportPaperInfoModel(exportModel);
 		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());
+				downloadQuestionAudio(papers,examFile);
 			}
 		}
 		//创建压缩文件名称
@@ -176,6 +197,27 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 		FileUtils.deleteQuietly(new File(zipDirectory));
 	}
 	
+	/**
+	 * 得到调卷规则中已完成的试卷的ID集合
+	 * @param exportModel
+	 * @return
+	 */
+	private List<String> getFinishPaperIds(ExportPaperInfoModel exportModel) {
+		List<String> paperIds = new ArrayList<String>();
+ 		ExtractConfig condition = new ExtractConfig();
+		condition.setExamId(Long.parseLong(exportModel.getExamId()));
+		condition.setCourseCode(exportModel.getCourseId());
+		ExtractConfig extractConfig = extractConfigService.findConfig(condition);
+		Map<String,String> finishedPaperIdMap = extractConfig.getFinishedPaperIdMap();
+		Set<Entry<String,String>> entry = finishedPaperIdMap.entrySet();
+		Iterator<Entry<String,String>> iterator = entry.iterator();
+		while(iterator.hasNext()){
+			String paperId = iterator.next().getValue();
+			paperIds.add(paperId);
+		}
+		return paperIds;
+	}
+
 	/**
 	 * 查询该考试下是否所有课程都制定了调卷规则
 	 * @param examId
@@ -292,4 +334,26 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
     	logger.info("批量生成试卷结构完成");
 	}
 
+	/**
+	 * 下载题目音频文件
+	 */
+	private void downloadQuestionAudio(List<Paper> papers,ExamFile examFile){
+		if(examFile.getExamFileType()==ExamFileType.PAPER){
+			for(Paper paper:papers){
+				if(paper.getOrgId().equals(examFile.getOrgId())
+						&&paper.getCourse().getCode().equals(examFile.getCourseId())){
+					List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaper(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());
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	
 }