Jelajahi Sumber

后台音频文件导入

weiwenhai 8 tahun lalu
induk
melakukan
4d2599af62

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

@@ -55,6 +55,7 @@ import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.paper.model.PaperSearchInfo;
 import com.qmth.cqb.question.dao.QuesBakRepo;
 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;
@@ -115,6 +116,9 @@ public class PaperService {
     @Autowired
     private QuestionAudioServiceImpl questionAudioService;
     
+    @Autowired
+	private QuestionAudioRepo questionAudioRepo;
+    
     @Value("${upyun.radioType}")
 	protected String radioType;
     
@@ -939,13 +943,13 @@ public class PaperService {
     			if(messageMap != null){
     				return messageMap;
     			}
-    			continue;
+    			messageMap = new HashMap<String, String>();
 			}else {
 				messageMap.put("errorMsg", fileName + "文件名称不对,无法识别为题干或选项 ");
 				return messageMap;
 			}
     	}
-    	messageMap.put("message", "OK!");
+    	messageMap.put("errorMsg", "OK");
     	return messageMap;
     }
     
@@ -1022,13 +1026,14 @@ public class PaperService {
     		outputStream.close();
     		//上传到又拍云
     		UpYun upYun = new UpYun(bucketName, userName, password);
-    		upYun.writeFile(upyunRadioPath, mp3File,true);
+    		upYun.writeFile(upyunRadioPath+mp3FileNameString, mp3File,true);
     		//删除服务器上文件
     		mp3File.delete();
     	}
     	//删除服务器文件夹
     	mp3Directory.delete();
     	saveQuestionAudio(files, paperId, accessUser);
+    	appendAudioTag(files,paperId);
     }
     
     /**
@@ -1039,11 +1044,12 @@ public class PaperService {
      */
     public void saveQuestionAudio(List<MultipartFile> files,String paperId,AccessUser accessUser){
     	for(MultipartFile file:files){
-    		String fileName = paperId + "_" + file.getOriginalFilename();
     		String questionId = ""; 
     		String numbers[] = file.getOriginalFilename().split("_");
     		//根据试卷id,查询该试卷
         	Paper paper = paperRepo.findOne(paperId);
+        	paper.setHasAudioQuestion(true);
+        	paperRepo.save(paper);
         	//根据试卷查询所有的小题
         	List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaper(paper);
         	for(PaperDetailUnit paperDetailUnit:paperDetailUnits){
@@ -1051,11 +1057,58 @@ public class PaperService {
         			questionId = paperDetailUnit.getQuestion().getId();
         		}
         	}
-        	String fileUrl = upyunRadioPath + fileName;
-        	QuestionAudio questionAudio = new QuestionAudio(questionId, fileName, fileUrl);
+        	QuestionAudio questionAudio = new QuestionAudio();
+        	questionAudio = questionAudioService.findByQuestionIdAndFileName(questionId, file.getOriginalFilename());
+        	if(questionAudio != null){
+        		questionAudioRepo.delete(questionAudio);
+        	}
+        	String fileUrl = upyunRadioPath + questionId+ "_" + file.getOriginalFilename();
+        	questionAudio = new QuestionAudio(paperId,questionId, file.getOriginalFilename(), fileUrl);
         	questionAudioService.saveQuestionAudio(questionAudio, accessUser);
     	}
     }
+    
+    /**
+     * 音频文件插入到标签
+     * @param files
+     * @param paperId
+     */
+    public void appendAudioTag(List<MultipartFile> files,String paperId){
+    	for(MultipartFile file:files){
+    		QuestionAudio questionAudio = questionAudioService.findByPaperIdAndFileName(paperId, file.getOriginalFilename());
+    		if(questionAudio == null){
+    			continue;
+    		}
+    		String numbers[] = file.getOriginalFilename().split("_");
+    		Question question = quesRepo.findOne(questionAudio.getQuestionId());
+    		question.setHasAudio(true);
+    		if(numbers[1].equals("1")){
+    			//Question question = quesRepo.findOne(questionAudio.getQuestionId());
+    			String quesBody = question.getQuesBody();
+    			String quesBodyNew = quesBody.substring(0, quesBody.lastIndexOf("</p>")) + "<a id=\\\"" + 
+    								 file.getOriginalFilename() + "\\\" name=\\\"" + file.getOriginalFilename() + "\\\"></a></p>";
+    			question.setQuesBody(quesBodyNew);
+    			quesRepo.save(question);
+    		}else {
+				//Question question = quesRepo.findOne(questionAudio.getQuestionId());
+				List<QuesOption> quesOptions = question.getQuesOptions();
+				List<QuesOption> quesOptionsNew = new ArrayList<QuesOption>();
+				for(QuesOption quesOption:quesOptions){
+					if(quesOption.getNumber().equals(CommonUtils.characterToNumber(numbers[2]).toString())){
+						String optionBody = quesOption.getOptionBody();
+						String optionBodyNew = optionBody.substring(0, optionBody.lastIndexOf("</p>")) + "<a id=\\\"" + 
+								 file.getOriginalFilename() + "\\\" name=\\\"" + file.getOriginalFilename() + "\\\"></a></p>";
+						quesOption.setOptionBody(optionBodyNew);
+					}
+					quesOptionsNew.add(quesOption);
+				}
+				question.setQuesOptions(quesOptionsNew);
+				quesRepo.save(question);
+			}
+    	}
+    	
+    }
+    
 }
 
 

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

@@ -581,11 +581,11 @@ public class PaperController {
     	AccessUser user = (AccessUser) request.getAttribute("accessUser");
     	try {
 			paperService.uploadRadio(files, paperId, null);
+			return new ResponseEntity(HttpStatus.OK);
 		} catch (IOException e) {
 			// TODO Auto-generated catch block
-			e.printStackTrace();
+			return new ResponseEntity(e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
 		}
-    	return null;
     }
 }
 

+ 131 - 146
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperDetailController.java

@@ -1,146 +1,131 @@
-package com.qmth.cqb.paper.web;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.commons.CommonsMultipartFile;
-
-import com.qmth.cqb.paper.dao.PaperDetailRepo;
-import com.qmth.cqb.paper.dao.PaperRepo;
-import com.qmth.cqb.paper.model.PaperDetail;
-import com.qmth.cqb.paper.model.PaperDetailUnit;
-import com.qmth.cqb.paper.service.PaperDetailService;
-import com.qmth.cqb.paper.service.PaperService;
-
-import cn.com.qmth.examcloud.common.uac.annotation.Uac;
-import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
-import cn.com.qmth.examcloud.common.uac.enums.RoleMeta;
-import cn.com.qmth.examcloud.common.uac.enums.UacPolicy;
-import io.swagger.annotations.ApiOperation;
-
-/**
- * Created by songyue on 16/12/28.
- */
-@RestController
-@RequestMapping("${api_cqb}/")
-public class PaperDetailController {
-
-    @Autowired
-    PaperDetailService paperDetailService;
-
-    @Autowired
-    PaperService paperService;
-    
-    @Autowired
-    PaperDetailRepo paperDetailRepo;
-
-    /**
-     * 获取大题对应的小题
-     * 
-     * @param detail_id
-     * @return
-     */
-    @ApiOperation(value = "获取大题对应的小题", notes = "获取大题对应的小题")
-    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
-    @GetMapping(value = "/paperDetail/units/{detail_id}")
-    public List<PaperDetailUnit> getUnitsByPaperDetailId(String detail_id) {
-        return paperDetailService.getUnitsByPaperDetailId(detail_id);
-    }
-
-    /**
-     * 获取大题
-     * 
-     * @param detail_id
-     * @return
-     */
-    @ApiOperation(value = "获取大题", notes = "获取大题")
-    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
-    @GetMapping(value = "/paperDetail/{detail_id}")
-    public PaperDetail getPaperDetailId(@PathVariable String detail_id) {
-        return paperDetailService.findById(detail_id);
-    }
-
-    /**
-     * 更新大题信息
-     * 
-     * @param pd
-     * @return
-     */
-    @ApiOperation(value = "更新试卷中的大题", notes = "更新试卷中的大题")
-    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
-    @PostMapping(value = "/updatePaperDetail/{paperId}")
-    public ResponseEntity updatePaperDetail( HttpServletRequest request,
-                                             @PathVariable String paperId, 
-                                             @RequestBody PaperDetail pd) {
-        AccessUser user = (AccessUser) request.getAttribute("accessUser");
-        PaperDetail paperDetail = paperDetailService.savePaperDetail(pd,paperId,user);
-        return new ResponseEntity(paperDetail, HttpStatus.OK);
-
-    }
-
-    /**
-     * 新增大题
-     * 
-     * @param pd
-     * @return
-     */
-    @ApiOperation(value = "新增大题", notes = "新增大题")
-    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
-    @PostMapping(value = "/paperDetail")
-    public ResponseEntity addPaperDetail(@RequestBody PaperDetail pd) {
-        PaperDetail paperDetail = paperDetailRepo.save(pd);
-        return new ResponseEntity(paperDetail, HttpStatus.OK);
-    }
-
-    /**
-     * 删除大题
-     * 
-     * @param detailId
-     * @return
-     */
-    @ApiOperation(value = "删除大题", notes = "删除大题")
-    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
-    @DeleteMapping(value = "/paperDetail/{detailId}")
-    public ResponseEntity removePaperDetail(@PathVariable String detailId) {
-        paperDetailService.deletePaperDetail(detailId);
-        return new ResponseEntity(detailId, HttpStatus.OK);
-    }
-
-    /**
-     * 根据试卷ID得到所有大题
-     * 
-     * @param paperId
-     * @return
-     */
-    @ApiOperation(value = "根据试卷ID得到所有大题", notes = "根据试卷ID得到所有大题")
-    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
-    @GetMapping(value = "/paperDetail/paper/{paperId}")
-    public ResponseEntity getPaperDetailsByPaperId(@PathVariable String paperId) {
-        return new ResponseEntity(paperService.findPaperDetailsById(paperId), HttpStatus.OK);
-    }
-    
-    
-    @ApiOperation(value = "上传音频文件", notes = "上传音频文件")
-    @PostMapping(value = "/uploadRadio")
-    public ResponseEntity uploadRadio(List<MultipartFile> files,HttpServletRequest request){
-    	for(MultipartFile file:files){
-    		System.out.println("名称:"+file.getOriginalFilename()+",大小:"+file.getSize());
-    	}
-    	return null;
-    }
-}
+package com.qmth.cqb.paper.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qmth.cqb.paper.dao.PaperDetailRepo;
+import com.qmth.cqb.paper.model.PaperDetail;
+import com.qmth.cqb.paper.model.PaperDetailUnit;
+import com.qmth.cqb.paper.service.PaperDetailService;
+import com.qmth.cqb.paper.service.PaperService;
+
+import cn.com.qmth.examcloud.common.uac.annotation.Uac;
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+import cn.com.qmth.examcloud.common.uac.enums.RoleMeta;
+import cn.com.qmth.examcloud.common.uac.enums.UacPolicy;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * Created by songyue on 16/12/28.
+ */
+@RestController
+@RequestMapping("${api_cqb}/")
+public class PaperDetailController {
+
+    @Autowired
+    PaperDetailService paperDetailService;
+
+    @Autowired
+    PaperService paperService;
+    
+    @Autowired
+    PaperDetailRepo paperDetailRepo;
+
+    /**
+     * 获取大题对应的小题
+     * 
+     * @param detail_id
+     * @return
+     */
+    @ApiOperation(value = "获取大题对应的小题", notes = "获取大题对应的小题")
+    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
+    @GetMapping(value = "/paperDetail/units/{detail_id}")
+    public List<PaperDetailUnit> getUnitsByPaperDetailId(String detail_id) {
+        return paperDetailService.getUnitsByPaperDetailId(detail_id);
+    }
+
+    /**
+     * 获取大题
+     * 
+     * @param detail_id
+     * @return
+     */
+    @ApiOperation(value = "获取大题", notes = "获取大题")
+    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
+    @GetMapping(value = "/paperDetail/{detail_id}")
+    public PaperDetail getPaperDetailId(@PathVariable String detail_id) {
+        return paperDetailService.findById(detail_id);
+    }
+
+    /**
+     * 更新大题信息
+     * 
+     * @param pd
+     * @return
+     */
+    @ApiOperation(value = "更新试卷中的大题", notes = "更新试卷中的大题")
+    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
+    @PostMapping(value = "/updatePaperDetail/{paperId}")
+    public ResponseEntity updatePaperDetail( HttpServletRequest request,
+                                             @PathVariable String paperId, 
+                                             @RequestBody PaperDetail pd) {
+        AccessUser user = (AccessUser) request.getAttribute("accessUser");
+        PaperDetail paperDetail = paperDetailService.savePaperDetail(pd,paperId,user);
+        return new ResponseEntity(paperDetail, HttpStatus.OK);
+
+    }
+
+    /**
+     * 新增大题
+     * 
+     * @param pd
+     * @return
+     */
+    @ApiOperation(value = "新增大题", notes = "新增大题")
+    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
+    @PostMapping(value = "/paperDetail")
+    public ResponseEntity addPaperDetail(@RequestBody PaperDetail pd) {
+        PaperDetail paperDetail = paperDetailRepo.save(pd);
+        return new ResponseEntity(paperDetail, HttpStatus.OK);
+    }
+
+    /**
+     * 删除大题
+     * 
+     * @param detailId
+     * @return
+     */
+    @ApiOperation(value = "删除大题", notes = "删除大题")
+    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
+    @DeleteMapping(value = "/paperDetail/{detailId}")
+    public ResponseEntity removePaperDetail(@PathVariable String detailId) {
+        paperDetailService.deletePaperDetail(detailId);
+        return new ResponseEntity(detailId, HttpStatus.OK);
+    }
+
+    /**
+     * 根据试卷ID得到所有大题
+     * 
+     * @param paperId
+     * @return
+     */
+    @ApiOperation(value = "根据试卷ID得到所有大题", notes = "根据试卷ID得到所有大题")
+    @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
+    @GetMapping(value = "/paperDetail/paper/{paperId}")
+    public ResponseEntity getPaperDetailsByPaperId(@PathVariable String paperId) {
+        return new ResponseEntity(paperService.findPaperDetailsById(paperId), HttpStatus.OK);
+    }
+    
+}

+ 3 - 0
cqb-question-resource/src/main/java/com/qmth/cqb/question/dao/QuestionAudioRepo.java

@@ -17,5 +17,8 @@ public interface QuestionAudioRepo extends MongoRepository<QuestionAudio, String
 	
 	public List<QuestionAudio> findByQuestionId(String questionId);
 	
+	public QuestionAudio findByQuestionIdAndFileName(String questionId,String fileName);
+	
+	public QuestionAudio findByPaperIdAndFileName(String paperId,String fileName);
 }
 

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

@@ -18,10 +18,16 @@ public class QuestionAudio implements Serializable{
 	private static final long serialVersionUID = 7190928471784053821L;
 
 	private String id;
+	
+	/**
+	 * 试卷Id
+	 */
+	private String paperId;
 	/**
 	 * 试题ID
 	 */
 	private String questionId;
+	
 	/**
 	 * 题干OR选项
 	private AudioPositionType audioPositionType;
@@ -43,7 +49,10 @@ public class QuestionAudio implements Serializable{
 	 */
 	private String createUser;
 	
-	public QuestionAudio(String questionId,String fileName,String fileUrl){
+	public QuestionAudio(){}
+	
+	public QuestionAudio(String paperId,String questionId,String fileName,String fileUrl){
+		this.paperId = paperId;
 		this.questionId = questionId;
 		this.fileName = fileName;
 		this.fileUrl = fileUrl;
@@ -85,5 +94,11 @@ public class QuestionAudio implements Serializable{
 	public void setCreateUser(String createUser) {
 		this.createUser = createUser;
 	}
+	public String getPaperId() {
+		return paperId;
+	}
+	public void setPaperId(String paperId) {
+		this.paperId = paperId;
+	}
 	
 }

+ 8 - 0
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuestionAudioService.java

@@ -30,5 +30,13 @@ public interface QuestionAudioService {
 	 * @return  
 	 */
 	public QuestionAudio findByQuestionIdAndFileName(String questionId,String fileName);
+	
+	/**
+	 * 根据paperId和文件名称查询对象
+	 * @param paperId
+	 * @param fileName
+	 * @return
+	 */
+	public QuestionAudio findByPaperIdAndFileName(String paperId,String fileName);
 }
 

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

@@ -29,7 +29,7 @@ public class QuestionAudioServiceImpl implements QuestionAudioService{
 	@Override
 	public void saveQuestionAudio(QuestionAudio questionAudio,AccessUser accessUser) {
 		questionAudio.setCreateTime(new Date());
-		questionAudio.setCreateUser(accessUser.getName());
+		//questionAudio.setCreateUser(accessUser.getName());
 		questionAudioRepo.save(questionAudio);
 	}
 
@@ -47,5 +47,13 @@ public class QuestionAudioServiceImpl implements QuestionAudioService{
 		return questionAudioRepo.findByQuestionIdAndFileName(questionId,fileName);
 	}
 
+	@Override
+	public QuestionAudio findByPaperIdAndFileName(String paperId,String fileName) {
+		if(StringUtils.isBlank(paperId)||StringUtils.isBlank(fileName)){
+			return null;
+		}
+		return questionAudioRepo.findByPaperIdAndFileName(paperId, fileName);
+	}
+
 }