瀏覽代碼

修改题库因音频功能产生的BUG

chenken 7 年之前
父節點
當前提交
48170c8d95

+ 14 - 2
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/enums/PaperType.java

@@ -4,10 +4,22 @@ package com.qmth.cqb.utils.enums;
  * Created by songyue on 17/3/15.
  */
 public enum PaperType {
-
+	/**
+	 * 导入
+	 */
     IMPORT(1L,"导入"),
+    /**
+     * 组卷
+     */
     GENERATE(2L,"组卷"),
-    PREVIEW(3L,"调卷规则预览卷");
+    /**
+     * 调卷规则预览卷
+     */
+    PREVIEW(3L,"调卷规则预览卷"),
+    /**
+     * 考生考卷
+     */
+    STUDENT_EXAM(4L,"考生考卷");
 
 
     private Long id;

+ 3 - 0
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java

@@ -707,6 +707,9 @@ public final class DocxProcessUtil {
         RelationshipsPart relationshipsPart = wordMLPackage.getMainDocumentPart().getRelationshipsPart();
 
         for (WordprocessingMLPackage wp : wordMLPackages) {
+        	if(wp==null){
+        		continue;
+        	}
             // 获取资源文件存储
             ZipPartStore partStore = (ZipPartStore) wp.getSourcePartStore();
             // 获取图片资源定义

+ 27 - 2
cqb-paper/src/main/java/com/qmth/cqb/paper/model/PaperDetailUnit.java

@@ -9,6 +9,8 @@ import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.DBRef;
 
 import com.qmth.cqb.question.model.Question;
+import com.qmth.cqb.utils.CommonUtils;
+import com.qmth.cqb.utils.enums.PaperType;
 
 import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 
@@ -47,6 +49,8 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
     private String creator;// 创建人id
 
     private String createTime;// 创建时间
+    
+    private PaperType paperType;
 
     public String getId() {
         return id;
@@ -163,8 +167,20 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
     public void setOptionOrder(String optionOrder) {
         this.optionOrder = optionOrder;
     }
-
-    public void setSubScoreList(List<Double> subScoreList) {
+    
+    public PaperType getPaperType() {
+		return paperType;
+	}
+
+	public void setPaperType(PaperType paperType) {
+		if(paper!=null){
+			this.paperType = paper.getPaperType();
+		}else{
+			this.paperType = paperType;
+		}
+	}
+
+	public void setSubScoreList(List<Double> subScoreList) {
         this.subScoreList = subScoreList;
         if (subScoreList != null) {
             double totalScore = 0;
@@ -180,6 +196,15 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
 
     public PaperDetailUnit() {
     }
+    
+    public PaperDetailUnit(Paper paper,PaperDetail paperDetail,Question question) {
+        this.paper = paper;
+        this.questionType = question.getQuestionType();
+        this.question = question;
+        this.createTime = CommonUtils.getCurDateTime();
+        this.paperDetail = paperDetail;
+        this.score = 0d;
+    }
 
     @Override
     public int compareTo(PaperDetailUnit unit) {

+ 3 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigService.java

@@ -9,6 +9,7 @@ import java.util.Map;
 
 
 
+
 import org.springframework.data.domain.Page;
 
 import cn.com.qmth.examcloud.common.dto.question.QuestionDto;
@@ -16,6 +17,7 @@ import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
 import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.paper.model.Paper;
+import com.qmth.cqb.utils.enums.PaperType;
 
 /**
  * 
@@ -62,7 +64,7 @@ public interface ExtractConfigService {
 	 * @param upSetOptionOrder		选项乱序		1:乱序  0:不乱序
 	 * @return
 	 */
-	public Paper recombinationPaper(Paper paper,int upSetQuestionOrder,int upSetOptionOrder);
+	public Paper recombinationPaper(Paper paper,PaperType paperType,int upSetQuestionOrder,int upSetOptionOrder);
 	/**
 	 * 根据courseNo和orgId取出所有被引用的试卷 ID
 	 * @return

+ 14 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperDetailUnitService.java

@@ -4,6 +4,9 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
 import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
@@ -13,6 +16,7 @@ import com.qmth.cqb.paper.model.PaperDetail;
 import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.question.model.Question;
 import com.qmth.cqb.question.service.QuesService;
+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;
@@ -28,6 +32,9 @@ public class PaperDetailUnitService {
 
     @Autowired
     PaperService paperService;
+    
+    @Autowired
+    MongoTemplate mongoTemplate;
 
     /**
      * 根据Id获得对应的试题对象
@@ -129,4 +136,11 @@ public class PaperDetailUnitService {
         }
         paperDetailUnitRepo.delete(units);
     }
+    
+    public List<PaperDetailUnit> findByQuestionAndPaperTypes(Question question,List<PaperType> paperTypes){
+    	Query query = new Query();
+    	query.addCriteria(Criteria.where("paperType").in(paperTypes));
+    	query.addCriteria(Criteria.where("question").is(question));
+    	return this.mongoTemplate.find(query, PaperDetailUnit.class);
+    }
 }

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

@@ -447,12 +447,14 @@ 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());
@@ -598,6 +600,7 @@ public class PaperService {
             if (unit.getScore() != null) {
                 totalScore += unit.getScore();
             }
+            //重新设置序号
             unit.setNumber(i+1);
         }
         // 计算各大题总分
@@ -656,7 +659,6 @@ public class PaperService {
                     paperNames.add(pdu.getPaper().getName());
                 }
             }
-
         }
 
         if (paperNames.size() == 0) {
@@ -665,9 +667,8 @@ public class PaperService {
             quesBakRepo.save(BeanCopierUtil.copyProperties(ques, QuestionBak.class));
             quesRepo.delete(ques);
             for (Paper paper : papers) {
-                formatPaper(paper, user);
+                formatPaper(paper,user);
             }
-
         }
         return paperNames;
     }
@@ -693,8 +694,7 @@ public class PaperService {
         pdu.setCreateTime(CommonUtils.getCurDateTime());
         pdu.setPaperDetail(pd);
         pdus.add(pdu);
-        Collections.sort(pdus);
-        pdu.setNumber(pdus.indexOf(pdu) + 1);
+        pdu.setNumber(pdus.size());
         pdu.setScore(0d);
         paperDetailUnitRepo.save(pdu);
         formatPaper(paper, user);
@@ -754,21 +754,10 @@ public class PaperService {
         List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperDetailOrderByNumber(pd);
         List<PaperDetailUnit> saveUnits = new ArrayList<PaperDetailUnit>();
         for (Question ques : questions) {
-            PaperDetailUnit pdu = new PaperDetailUnit();
-            pdu.setPaper(paper);
-            pdu.setQuestionType(ques.getQuestionType());
-            pdu.setQuestion(ques);
-            pdu.setCreateTime(CommonUtils.getCurDateTime());
-            pdu.setPaperDetail(pd);
-            pdu.setScore(0d);
-            pdus.add(pdu);
+            PaperDetailUnit pdu = new PaperDetailUnit(paper,pd,ques);
+            pdu.setNumber(pdus.size());//暂时设置为原集合的最大size
             saveUnits.add(pdu);
         }
-        Collections.sort(pdus);
-        for (int i = 0; i < saveUnits.size(); i++) {
-            saveUnits.get(i).setNumber(pdus.indexOf(saveUnits.get(i)) + 1);
-        }
-
         paperDetailUnitRepo.save(saveUnits);
         formatPaper(paper, user);
         return paper;
@@ -900,11 +889,11 @@ public class PaperService {
     		String[] fileNames  = fileName.split("\\.");
     		String fileType = fileNames[fileNames.length-1];
     		if(radioType.indexOf(fileType)<0){
-    			messageMap.put("errorMsg", fileName+"文件格式不正确,当前支持格式:"+radioType);
+    			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}";	//选项正则
+    		String pattern_01  = "\\d+_1_\\d{1,2}";				//题干正则
+    		String pattern_02 = "\\d+_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+"文件名格式不正确,请检查");
@@ -1004,19 +993,28 @@ public class PaperService {
     			throw new RuntimeException("音频文件大小超过5M,不能上传"); 
     		}
     		//根据试卷查询所有的小题,根据文件名匹配出当前小题ID
-    		String questionId = ""; 
+    		Question question = null; 
     		String numbers[] = file.getOriginalFilename().split("_");
         	List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
         	for(PaperDetailUnit paperDetailUnit:paperDetailUnits){
         		if(paperDetailUnit.getNumber().toString().equals(numbers[0])){
-        			questionId = paperDetailUnit.getQuestion().getId();
+        			question = paperDetailUnit.getQuestion();
         		}
         	}
-        	uploadAudioFile(paperId,questionId,file,accessUser);
-        	appendAudioTag(file.getOriginalFilename(),questionId);
+        	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);
+        	}
     	}
-    	paper.setHasAudio(true);
-    	paperRepo.save(paper);
     	//删除服务器文件夹
     	String mp3DirectoryPath = TEMP_FILE_EXP + File.separator + paperId;
     	File mp3Directory = new File(mp3DirectoryPath);

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

@@ -189,7 +189,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		}
 		String basePaperId = basePaper.getId();
 		logger.info("将原始试卷:"+basePaperId+"根据规则重新组卷");
-    	Paper newPaper = this.recombinationPaper(basePaper, 
+    	Paper newPaper = this.recombinationPaper(basePaper,PaperType.STUDENT_EXAM,
 						        				 extractConfig.getScrambling_the_question_order(), 
 						        				 extractConfig.getScrambling_the_option_order());
     	logger.info("根据新试卷 paperId:"+newPaper.getId()+"组装PaperDto后返回");
@@ -240,6 +240,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
         	String key = entry.getKey();
         	//根据原有试卷重新组卷得到新试卷
         	Paper newPaper = this.recombinationPaper(entry.getValue(), 
+        											 PaperType.PREVIEW,
 							        				 extractConfig.getScrambling_the_question_order(), 
 							        				 extractConfig.getScrambling_the_option_order());
         	finishedPaperIdMap.put(key, newPaper.getId());
@@ -254,10 +255,10 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	 * @param upSetOptionOrder		客观题选项乱序		1:乱序  0:不乱序
 	 * @return
 	 */
-	public Paper recombinationPaper(Paper paper,int upSetQuestionOrder,int upSetOptionOrder){
+	public Paper recombinationPaper(Paper paper,PaperType paperType,int upSetQuestionOrder,int upSetOptionOrder){
 		List<PaperDetail> paperDetails = paperDetailRepo.findByPaperOrderByNumber(paper);
 		paper.setId(null);
-		paper.setPaperType(PaperType.PREVIEW);//试卷类型为调卷规则预览卷
+		paper.setPaperType(paperType);
 		Paper newPaper = paperRepo.save(paper);//重新保存成新的paper
 		for(int i = 0;i<paperDetails.size();i++){
 			PaperDetail paperDetail = paperDetails.get(i);
@@ -278,6 +279,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 			for(int j = 0;j<paperDetailUnits.size();j++){
 				//重新设置保存PaperDetailUnit
 				PaperDetailUnit paperDetailUnit = paperDetailUnits.get(j);
+				paperDetailUnit.setPaperType(newPaper.getPaperType());
 				paperDetailUnit.setPaper(newPaper);				//关联新Paper
 				paperDetailUnit.setPaperDetail(newPaperDetail); //关联新paperDetail
 				paperDetailUnit.setNumber(j+1);					//重新设置序号

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

@@ -578,7 +578,7 @@ public class PaperController {
     public ResponseEntity uploadRadio(List<MultipartFile> files,@PathVariable String paperId,HttpServletRequest request){
     	AccessUser user = (AccessUser) request.getAttribute("accessUser");
     	try {
-			paperService.uploadRadio(files, paperId, null);
+			paperService.uploadRadio(files, paperId, user);
 			return new ResponseEntity(HttpStatus.OK);
 		} catch (Exception e) {
 			e.printStackTrace();