xiatian 5 жил өмнө
parent
commit
3638973f9e
17 өөрчлөгдсөн 712 нэмэгдсэн , 459 устгасан
  1. 11 8
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/QuestionAudioController.java
  2. 45 20
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ClonePaperService.java
  3. 19 11
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ImportPaperService.java
  4. 10 10
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/UpYunService.java
  5. 54 54
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/config/SysProperty.java
  6. 41 18
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ExportPaperAbstractService.java
  7. 16 14
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExamFileServiceImpl.java
  8. 13 10
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportPaperServiceImpl.java
  9. 24 23
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportStructureServiceImpl.java
  10. 235 207
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportTemplateServiceImpl.java
  11. 9 5
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigFileServiceImpl.java
  12. 46 18
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigProviderServiceImpl.java
  13. 66 33
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigServiceImpl.java
  14. 8 3
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java
  15. 34 23
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/QuestionAudioServiceImpl.java
  16. 46 0
      examcloud-core-questions-starter/src/main/resources/aliyun.xml
  17. 35 2
      examcloud-core-questions-starter/src/main/resources/upyun.xml

+ 11 - 8
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/QuestionAudioController.java

@@ -1,10 +1,5 @@
 package cn.com.qmth.examcloud.core.questions.api.controller;
 
-import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
-import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
-import cn.com.qmth.examcloud.web.support.Naked;
-import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -13,6 +8,12 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
+import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
+import cn.com.qmth.examcloud.web.support.Naked;
+import io.swagger.annotations.ApiOperation;
+
 /**
  * @author chenken
  * @date 2017年8月2日 下午1:49:04
@@ -22,8 +23,8 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("${api_cqb}/")
 public class QuestionAudioController {
-    @Autowired
-    private SysProperty sysProperty;
+//    @Autowired
+//    private SysProperty sysProperty;
 
     @Autowired
     private QuestionAudioService questionAudioService;
@@ -43,7 +44,9 @@ public class QuestionAudioController {
 
         if (questionAudio != null) {
             //补全路径
-            questionAudio.setFileUrl(sysProperty.getDomain() + questionAudio.getFileUrl());
+//            questionAudio.setFileUrl(sysProperty.getDomain() + questionAudio.getFileUrl());
+        	//通用存储
+        	questionAudio.setFileUrl(FileStorageUtil.realPath(questionAudio.getFileUrl()));
         }
 
         return new ResponseEntity<>(questionAudio, HttpStatus.OK);

+ 45 - 20
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ClonePaperService.java

@@ -7,26 +7,45 @@
 
 package cn.com.qmth.examcloud.core.questions.service;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.UUID;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.google.common.collect.Lists;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.BeanCopierUtil;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.IoUtils;
 import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.exception.PaperException;
-import cn.com.qmth.examcloud.core.questions.dao.*;
-import cn.com.qmth.examcloud.core.questions.dao.entity.*;
+import cn.com.qmth.examcloud.core.questions.dao.PaperDetailRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperRepo;
+import cn.com.qmth.examcloud.core.questions.dao.QuesRepo;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Course;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Paper;
+import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetail;
+import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetailUnit;
+import cn.com.qmth.examcloud.core.questions.dao.entity.QuesOption;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
+import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
 import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.core.questions.service.impl.CourseService;
-import com.google.common.collect.Lists;
-import main.java.com.UpYun;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.*;
+import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
+import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 
 /**
  * 复制试卷接口类
@@ -51,8 +70,6 @@ public class ClonePaperService {
     @Autowired
     private QuesTypeNameService quesTypeNameService;
     @Autowired
-    private UpYunService upYunService;
-    @Autowired
     private SysProperty sysProperty;
     @Autowired
     private CourseService courseService;
@@ -238,7 +255,7 @@ public class ClonePaperService {
      * 处理试题的音频(下载上传到云存储)
      */
     private void dealQuestionAudios(Map<PaperDetail, List<PaperDetailUnit>> detailMaps, String userName) throws PaperException {
-        UpYun upYun = upYunService.getInstance();
+//        UpYun upYun = upYunService.getInstance();
         String copyAudioPath = UpYunService.TEMP_FILE_EXP + File.separator + userName + "_copyAudioPath";
         File copyAudioDir = new File(copyAudioPath);
         if (!copyAudioDir.exists()) {
@@ -254,18 +271,24 @@ public class ClonePaperService {
                 }
                 for (QuestionAudio audio : audioList) {
                     //定义文件下载名称,并下载音频文件
-                    String newAudioFileName = upYunService.randomUUID() + "_" + audio.getFileName();
+                    String newAudioFileName = randomUUID() + "_" + audio.getFileName();
                     File audioFile = new File(copyAudioPath + File.separator + newAudioFileName);
 
                     log.info("-->start readAudioFile:" + newAudioFileName);
-                    upYun.readFile(audio.getFileUrl(), audioFile);
+//                    upYun.readFile(audio.getFileUrl(), audioFile);
+                  //通用存储
+                    FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()), audioFile);
                     log.info("-->end readAudioFile:" + newAudioFileName);
 
                     //重新上传新的音频文件
                     String newPath = sysProperty.getRadioUploadPath() + newAudioFileName;
                     try {
-                        upYun.writeFile(newPath, audioFile, true);
-                        audio.setFileUrl(newPath);//设置新路径
+//                        upYun.writeFile(newPath, audioFile, true);
+                        //通用存储
+                		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
+                		env.setRelativePath(newPath);
+                		YunPathInfo pi=FileStorageUtil.saveFile("audioFile", env, audioFile,null);
+                        audio.setFileUrl(pi.getRelativePath());//设置新路径
                     } catch (Exception e) {
                         throw new PaperException("上传音频文件失败!");
                     } finally {
@@ -411,5 +434,7 @@ public class ClonePaperService {
         newPaper.setId(null);
         return newPaper;
     }
-
+    private String randomUUID() {
+        return UUID.randomUUID().toString().replaceAll("-", "");
+    }
 }

+ 19 - 11
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ImportPaperService.java

@@ -69,7 +69,9 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionType;
 import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.core.questions.service.impl.CourseService;
-import main.java.com.UpYun;
+import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
+import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 
 @Service
 public class ImportPaperService {
@@ -1951,7 +1953,7 @@ public class ImportPaperService {
         newQuestion = quesRepo.save(newQuestion);
         // 复制音频
         if (oldQuestion.getHasAudio() != null && oldQuestion.getHasAudio()) {
-            try {
+//            try {
                 // 查询旧音频
                 List<QuestionAudio> oldQuestionAudios = questionAudioService
                         .findQuestionAudiosByQuestionId(oldQuestion.getId());
@@ -1967,23 +1969,29 @@ public class ImportPaperService {
                     int randomNumber = random.nextInt(1000);
                     // 定义文件下载名称,下载音频文件
                     String newAudioFileName = newQuestion.getId() + "_" + randomNumber + "_" + oldAudio.getFileName();
-                    UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(),
-                            sysProperty.getPassword());
+//                    UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(),
+//                            sysProperty.getPassword());
                     // 下载音频
                     File audioFile = new File(copyAudioPath + File.separator + newAudioFileName);
                     try {
-                        upyun.readFile(oldAudio.getFileUrl(), audioFile);
+//                        upyun.readFile(oldAudio.getFileUrl(), audioFile);
+                      //通用存储
+                        FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(oldAudio.getFileUrl()), audioFile);
                     } catch (Exception e) {
                         log.error(e.getMessage(), e);
                         throw new RuntimeException("下载音频失败");
                     }
                     // 重新上传新的音频文件
-                    upyun.writeFile(sysProperty.getRadioUploadPath() + newAudioFileName, audioFile, true);
+//                    upyun.writeFile(sysProperty.getRadioUploadPath() + newAudioFileName, audioFile, true);
+                  //通用存储
+            		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
+            		env.setRelativePath(sysProperty.getRadioUploadPath() + newAudioFileName);
+            		YunPathInfo pi=FileStorageUtil.saveFile("audioFile", env, audioFile,null);
+            		
                     IoUtils.removeFile(audioFile);
 
                     // 拷贝旧对象
-                    QuestionAudio newAudio = new QuestionAudio(newQuestion.getId(), oldAudio.getFileName(),
-                            sysProperty.getRadioUploadPath() + newAudioFileName);
+                    QuestionAudio newAudio = new QuestionAudio(newQuestion.getId(), oldAudio.getFileName(),pi.getRelativePath());
                     newAudio.setCreateTime(new Date());
                     newAudio.setCreateUser(user.getDisplayName());
                     questionAudioService.saveQuestionAudio(newAudio, user);
@@ -2027,9 +2035,9 @@ public class ImportPaperService {
                     }
                 }
                 newQuestion = quesRepo.save(newQuestion);
-            } catch (IOException e) {
-                log.error(e.getMessage(), e);
-            }
+//            } catch (IOException e) {
+//                log.error(e.getMessage(), e);
+//            }
         }
         paperDetailUnit.setQuestion(newQuestion);
     }

+ 10 - 10
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/UpYunService.java

@@ -1,13 +1,13 @@
 package cn.com.qmth.examcloud.core.questions.service;
 
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
-import main.java.com.UpYun;
+import java.util.UUID;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.UUID;
+import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 
 @Service
 public class UpYunService {
@@ -18,13 +18,13 @@ public class UpYunService {
     @Autowired
     private SysProperty sysProperty;
 
-    public UpYun getInstance() {
-        UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-        upyun.setDebug(true);
-        upyun.setTimeout(15);
-        upyun.setApiDomain(UpYun.ED_AUTO);
-        return upyun;
-    }
+//    public UpYun getInstance() {
+//        UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//        upyun.setDebug(true);
+//        upyun.setTimeout(15);
+//        upyun.setApiDomain(UpYun.ED_AUTO);
+//        return upyun;
+//    }
 
     public String randomUUID() {
         return UUID.randomUUID().toString().replaceAll("-", "");

+ 54 - 54
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/config/SysProperty.java

@@ -6,17 +6,17 @@ import org.springframework.stereotype.Component;
 @Component
 public class SysProperty {
 
-    @Value("${$upyun.site.1.domain}")
-    protected String domain;
-
-    @Value("${$upyun.site.1.bucketName}")
-    protected String bucketName;
-
-    @Value("${$upyun.site.1.userName}")
-    protected String userName;
-
-    @Value("${$upyun.site.1.password}")
-    protected String password;
+//    @Value("${$upyun.site.1.domain}")
+//    protected String domain;
+//
+//    @Value("${$upyun.site.1.bucketName}")
+//    protected String bucketName;
+//
+//    @Value("${$upyun.site.1.userName}")
+//    protected String userName;
+//
+//    @Value("${$upyun.site.1.password}")
+//    protected String password;
 
     @Value("${upyun.uploadUrl}")
     private String uploadPath;
@@ -39,49 +39,49 @@ public class SysProperty {
     @Value("${question.reduplicate.similarity}")
     private Double reduplicateSimilarity;
 
-    public String getDomain() {
-        if (domain != null) {
-            return domain.trim();
-        }
-        return "";
-    }
-
-    public void setDomain(String domain) {
-        this.domain = domain;
-    }
-
-    public String getBucketName() {
-        if (bucketName != null) {
-            return bucketName.trim();
-        }
-        return "";
-    }
-
-    public void setBucketName(String bucketName) {
-        this.bucketName = bucketName;
-    }
-
-    public String getUserName() {
-        if (userName != null) {
-            return userName.trim();
-        }
-        return "";
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public String getPassword() {
-        if (password != null) {
-            return password.trim();
-        }
-        return "";
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
+//    public String getDomain() {
+//        if (domain != null) {
+//            return domain.trim();
+//        }
+//        return "";
+//    }
+//
+//    public void setDomain(String domain) {
+//        this.domain = domain;
+//    }
+//
+//    public String getBucketName() {
+//        if (bucketName != null) {
+//            return bucketName.trim();
+//        }
+//        return "";
+//    }
+//
+//    public void setBucketName(String bucketName) {
+//        this.bucketName = bucketName;
+//    }
+//
+//    public String getUserName() {
+//        if (userName != null) {
+//            return userName.trim();
+//        }
+//        return "";
+//    }
+//
+//    public void setUserName(String userName) {
+//        this.userName = userName;
+//    }
+//
+//    public String getPassword() {
+//        if (password != null) {
+//            return password.trim();
+//        }
+//        return "";
+//    }
+//
+//    public void setPassword(String password) {
+//        this.password = password;
+//    }
 
     public String getUploadPath() {
         if (uploadPath != null) {

+ 41 - 18
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ExportPaperAbstractService.java

@@ -73,9 +73,11 @@ import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.SubjectiveQuestionStructure;
 import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.core.questions.service.util.ExportPaperUtil;
+import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
+import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
-import main.java.com.UpYun;
 
 /**
  * @author chenken
@@ -1026,10 +1028,14 @@ public abstract class ExportPaperAbstractService {
             File zipFile = new File(TEMP_FILE_EXP + jsonDirectoryName + ZIP_SUFFIX);
             String zipUpyunFilePath = sysProperty.getUploadPath() + extractConfig.getOrgId() + "/" + jsonDirectoryName
                     + ZIP_SUFFIX;
-            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-            upyun.writeFile(zipUpyunFilePath, zipFile, true);
+//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//            upyun.writeFile(zipUpyunFilePath, zipFile, true);
+            //通用存储
+    		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
+    		env.setRelativePath(zipUpyunFilePath);
+    		YunPathInfo pi=FileStorageUtil.saveFile("computerTestFile", env, zipFile,null);
             // 保存数据库记录
-            ExamFile examFile = new ExamFile(computerTestPaper, extractConfig, zipUpyunFilePath,
+            ExamFile examFile = new ExamFile(computerTestPaper, extractConfig, pi.getRelativePath(),
                     ExamFileType.COMPUTERTEST_PACKAGE, ZIP_SUFFIX);
             examFile.setGroupCode(examPaper.getGroupCode());
             examFileService.saveExamFile(examFile, accessUser);
@@ -1132,7 +1138,8 @@ public abstract class ExportPaperAbstractService {
                                     + audio.getFileSuffixes();
                             oNum++;
                         }
-                        FileDisposeUtil.saveUrlAs(sysProperty.getDomain() + audio.getFileUrl(),
+                      //通用存储
+                        FileDisposeUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()),
                                 jsonDirectoryPath + File.separator + audioFileName);
                     }
                 }
@@ -1156,9 +1163,13 @@ public abstract class ExportPaperAbstractService {
             ExportPaperUtil.createPaperDocFile(accessUser.getRootOrgId(), paperExp, directory, paperFileName,
                     templateType);
             String paperFilePath = sysProperty.getUploadPath() + extractConfig.getOrgId() + "/" + paperFileName;
-            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-            upyun.writeFile(paperFilePath, file, true);
-            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, paperFilePath, examFileType, DOCX_SUFFIX);
+//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//            upyun.writeFile(paperFilePath, file, true);
+          //通用存储
+    		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
+    		env.setRelativePath(paperFilePath);
+    		YunPathInfo pi=FileStorageUtil.saveFile("paperOrAnswerFile", env, file,null);
+            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, pi.getRelativePath(), examFileType, DOCX_SUFFIX);
             examFile.setGroupCode(examPaper.getGroupCode());
             examFile.setFileName(extractConfig.getCourseName() + "_" + extractConfig.getCourseCode() + "_"
                     + examFileType.getName() + "_" + examFile.getGroupCode() + DOCX_SUFFIX);
@@ -1212,10 +1223,15 @@ public abstract class ExportPaperAbstractService {
             objectiveExcelExporter.write(objectiveFilename, objectiveQuestionStructureList, out);
 
             String objectiveFilePath = sysProperty.getUploadPath() + extractConfig.getOrgId() + "/" + objectiveFilename;
-            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-            upyun.writeFile(objectiveFilePath, file, true);
-
-            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, objectiveFilePath,
+//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//            upyun.writeFile(objectiveFilePath, file, true);
+            
+            //通用存储
+      		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
+      		env.setRelativePath(objectiveFilePath);
+      		YunPathInfo pi=FileStorageUtil.saveFile("objectiveQuestionStructures", env, file,null);
+
+            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, pi.getRelativePath(),
                     ExamFileType.PAPER_STRUCTURE_OBJECTIVE, EXCEL_SUFFIX);
             examFile.setGroupCode(examPaper.getGroupCode());
             examFile.setFileName(extractConfig.getCourseName() + "_" + extractConfig.getCourseCode() + "_"
@@ -1257,10 +1273,15 @@ public abstract class ExportPaperAbstractService {
 
             String subjectiveFilePath = sysProperty.getUploadPath() + extractConfig.getOrgId() + "/"
                     + subjectiveFileName;
-            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-            upyun.writeFile(subjectiveFilePath, file, true);
-
-            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, subjectiveFilePath,
+//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//            upyun.writeFile(subjectiveFilePath, file, true);
+
+            //通用存储
+      		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
+      		env.setRelativePath(subjectiveFilePath);
+      		YunPathInfo pi=FileStorageUtil.saveFile("subjectiveQuestionStructures", env, file,null);
+      		
+            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, pi.getRelativePath(),
                     ExamFileType.PAPER_STRUCTURE_SUBJECTIVE, EXCEL_SUFFIX);
             examFile.setGroupCode(examPaper.getGroupCode());
             examFile.setFileName(extractConfig.getCourseName() + "_" + extractConfig.getCourseCode() + "_"
@@ -1541,7 +1562,7 @@ public abstract class ExportPaperAbstractService {
     public void downloadAudio(PaperExp paperExp, String zipFileName) {
         // 先判断是否是音频试卷
         if (paperExp.getHasAudio() != null && paperExp.getHasAudio() == true) {
-            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
             // 取到所有大题
             List<PaperDetailExp> paperDetailExps = paperExp.getPaperDetails();
             if (paperDetailExps != null && paperDetailExps.size() > 0) {
@@ -1558,7 +1579,9 @@ public abstract class ExportPaperAbstractService {
                                             + "_" + getAudioFileName(audio, unit, paperDetailExp);
                                     File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator
                                             + audioFileName);
-                                    upyun.readFile(audio.getFileUrl(), file);
+//                                    upyun.readFile(audio.getFileUrl(), file);
+                                    //通用存储
+									FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()), file);
                                 }
                             }
                         }

+ 16 - 14
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExamFileServiceImpl.java

@@ -1,12 +1,9 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
-import cn.com.qmth.examcloud.api.commons.security.bean.User;
-import cn.com.qmth.examcloud.core.questions.dao.ExamFileRepo;
-import cn.com.qmth.examcloud.core.questions.dao.entity.ExamFile;
-import cn.com.qmth.examcloud.core.questions.service.ExamFileService;
-import cn.com.qmth.examcloud.core.questions.service.bean.dto.ExportPaperInfoModel;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
-import main.java.com.UpYun;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Example;
@@ -15,9 +12,12 @@ import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.core.questions.dao.ExamFileRepo;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExamFile;
+import cn.com.qmth.examcloud.core.questions.service.ExamFileService;
+import cn.com.qmth.examcloud.core.questions.service.bean.dto.ExportPaperInfoModel;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
 
 /**
  * @author chenken
@@ -33,8 +33,8 @@ public class ExamFileServiceImpl implements ExamFileService {
     @Autowired
     private MongoTemplate MongoTemplate;
 
-    @Autowired
-    private SysProperty sysProperty;
+//    @Autowired
+//    private SysProperty sysProperty;
 
     @Override
     public void saveExamFiles(List<ExamFile> examFileList, User accessUser) {
@@ -92,10 +92,12 @@ public class ExamFileServiceImpl implements ExamFileService {
         query.addCriteria(Criteria.where("examId").is(examFile.getExamId()));
         query.addCriteria(Criteria.where("courseId").is(examFile.getCourseId()));
         List<ExamFile> examFiles = MongoTemplate.find(query, ExamFile.class);
-        UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//        UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
         for (ExamFile examFile2 : examFiles) {
             //删除又拍云上的文件
-            upyun.deleteFile(examFile2.getFilePath());
+//            upyun.deleteFile(examFile2.getFilePath());
+        	//通用存储
+        	FileStorageUtil.deleteFile(examFile2.getFilePath());
         }
         examFileRepo.deleteAll(examFiles);
     }

+ 13 - 10
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportPaperServiceImpl.java

@@ -71,11 +71,10 @@ import cn.com.qmth.examcloud.core.questions.service.PaperService;
 import cn.com.qmth.examcloud.core.questions.service.PropertyService;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.QuestionDistributeDto;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.core.questions.service.converter.PrintExamPaperService;
 import cn.com.qmth.examcloud.core.questions.service.export.ExportPaperAbstractService;
 import cn.com.qmth.examcloud.core.questions.service.util.ExportPaperUtil;
-import main.java.com.UpYun;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
 
 @Service("exportPaperService")
 public class ExportPaperServiceImpl implements ExportPaperService {
@@ -120,8 +119,8 @@ public class ExportPaperServiceImpl implements ExportPaperService {
 //    @Autowired
 //    protected QuesPkgPathRepo quesPkgPathRepo;
 
-    @Autowired
-    private SysProperty sysProperty;
+//    @Autowired
+//    private SysProperty sysProperty;
     @Override
     public void exportPaperFile(String paperId, String serviceName, String exportContentList,
             HttpServletResponse response, String loginName, String examType, String psw, Long rootOrgId) {
@@ -246,10 +245,12 @@ public class ExportPaperServiceImpl implements ExportPaperService {
                                         String audioFileName = questionAudio.getId() + "_" + detail.getNumber() + "_"
                                                 + question.getNumber() + "_1_" + bodyNum + "."
                                                 + questionAudio.getFileSuffixes();
-                                        UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(),
-                                                sysProperty.getPassword());
+//                                        UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(),
+//                                                sysProperty.getPassword());
                                         File file = new File(jsonDirectory + File.separator + audioFileName);
-                                        upyun.readFile(questionAudio.getFileUrl(), file);
+//                                        upyun.readFile(questionAudio.getFileUrl(), file);
+                                        //通用存储
+    									FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(questionAudio.getFileUrl()), file);
                                         bodyNum++;
                                     }
                                 }
@@ -276,11 +277,13 @@ public class ExportPaperServiceImpl implements ExportPaperService {
                                                             + detail.getNumber() + "_" + question.getNumber() + "_2_"
                                                             + computerTestOption.getNumber() + "_" + optionNum + "."
                                                             + questionAudio.getFileSuffixes();
-                                                    UpYun upyun = new UpYun(sysProperty.getBucketName(),
-                                                            sysProperty.getUserName(), sysProperty.getPassword());
+//                                                    UpYun upyun = new UpYun(sysProperty.getBucketName(),
+//                                                            sysProperty.getUserName(), sysProperty.getPassword());
                                                     File file = new File(
                                                             jsonDirectory + File.separator + audioFileName);
-                                                    upyun.readFile(questionAudio.getFileUrl(), file);
+//                                                    upyun.readFile(questionAudio.getFileUrl(), file);
+                                                    //通用存储
+                									FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(questionAudio.getFileUrl()), file);
                                                     optionNum++;
                                                 }
                                             }

+ 24 - 23
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportStructureServiceImpl.java

@@ -1,19 +1,9 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
-import cn.com.qmth.examcloud.api.commons.security.bean.User;
-import cn.com.qmth.examcloud.core.questions.base.Model;
-import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
-import cn.com.qmth.examcloud.core.questions.dao.ExamFileRepo;
-import cn.com.qmth.examcloud.core.questions.dao.ExportStructureRepo;
-import cn.com.qmth.examcloud.core.questions.dao.ExtractConfigRepo;
-import cn.com.qmth.examcloud.core.questions.dao.entity.ExamFile;
-import cn.com.qmth.examcloud.core.questions.dao.entity.ExportStructure;
-import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
-import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionTypeNum;
-import cn.com.qmth.examcloud.core.questions.service.ExamFileService;
-import cn.com.qmth.examcloud.core.questions.service.ExportStructureService;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
-import main.java.com.UpYun;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -25,9 +15,18 @@ import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.core.questions.base.Model;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
+import cn.com.qmth.examcloud.core.questions.dao.ExamFileRepo;
+import cn.com.qmth.examcloud.core.questions.dao.ExportStructureRepo;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExamFile;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExportStructure;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
+import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionTypeNum;
+import cn.com.qmth.examcloud.core.questions.service.ExamFileService;
+import cn.com.qmth.examcloud.core.questions.service.ExportStructureService;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
 
 /**
  * @author chenken
@@ -47,14 +46,14 @@ public class ExportStructureServiceImpl implements ExportStructureService {
     @Autowired
     private ExamFileService examFileService;
 
-    @Autowired
-    private ExtractConfigRepo extractConfigRepo;
+//    @Autowired
+//    private ExtractConfigRepo extractConfigRepo;
 
     @Autowired
     private MongoTemplate mongoTemplate;
 
-    @Autowired
-    private SysProperty sysProperty;
+//    @Autowired
+//    private SysProperty sysProperty;
 
     @Override
     public void saveExportStructure(ExportStructure exportStructure, User user) {
@@ -147,9 +146,11 @@ public class ExportStructureServiceImpl implements ExportStructureService {
             List<ExamFile> list = examFileService.findExamFileListByExamFile(new ExamFile(exportStructure.getExamId(), exportStructure.getOrgId()));
             if (list.size() > 0) {
                 //根据 ExamFile 对象查询  filePath ,并删除又拍云上的文件 , 然后在删除表里面的数据
-                UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//                UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
                 for (int i = 0; i < list.size(); i++) {
-                    upyun.deleteFile(list.get(i).getFilePath());
+//                    upyun.deleteFile(list.get(i).getFilePath());
+                	//通用存储
+                	FileStorageUtil.deleteFile(list.get(i).getFilePath());
                 }
                 examFileRepo.deleteAll(list);
             }

+ 235 - 207
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportTemplateServiceImpl.java

@@ -33,232 +33,260 @@ import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.dao.ExportTemplateRepo;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExportTemplateEntity;
 import cn.com.qmth.examcloud.core.questions.service.ExportTemplateService;
-import cn.com.qmth.examcloud.web.bootstrap.PropertyHolder;
 import cn.com.qmth.examcloud.web.config.SystemProperties;
-import cn.com.qmth.examcloud.web.upyun.UpyunPathEnvironmentInfo;
-import cn.com.qmth.examcloud.web.upyun.UpyunService;
+import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
+//import cn.com.qmth.examcloud.web.upyun.UpyunPathEnvironmentInfo;
+//import cn.com.qmth.examcloud.web.upyun.UpyunService;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
 
 @Service("exportTemplateService")
 public class ExportTemplateServiceImpl implements ExportTemplateService {
 
-    protected ExamCloudLog log = ExamCloudLogFactory.getLog(this.getClass());
+	protected ExamCloudLog log = ExamCloudLogFactory.getLog(this.getClass());
 
-    private static final String ZIP_SUFFIX = "zip";
+	private static final String ZIP_SUFFIX = "zip";
 
-    @Autowired
-    private ExportTemplateRepo exportTemplateRepo;
+	@Autowired
+	private ExportTemplateRepo exportTemplateRepo;
 
-    @Autowired
-    private UpyunService upyunService;
-    @Autowired
-    private SystemProperties systemProperties;
-    @Override
-    public Page<ExportTemplateDto> getPage(Long rootOrgId, String fileName, String type, int curPage, int pageSize) {
-        Specification<ExportTemplateEntity> specification = (root, query, cb) -> {
-            List<Predicate> predicates = new ArrayList<>();
+	public static final String TEMP_FILE_EXP = "temp/exportTemplat/";
+//    @Autowired
+//    private UpyunService upyunService;
+	@Autowired
+	private SystemProperties systemProperties;
 
-            predicates.add(cb.equal(root.get("rootOrgId"), rootOrgId));
+	@Override
+	public Page<ExportTemplateDto> getPage(Long rootOrgId, String fileName, String type, int curPage, int pageSize) {
+		Specification<ExportTemplateEntity> specification = (root, query, cb) -> {
+			List<Predicate> predicates = new ArrayList<>();
 
-            if (StringUtils.isNotBlank(fileName)) {
-                predicates.add(cb.like(root.get("fileName"), toSqlSearchPattern(fileName)));
-            }
-            if (StringUtils.isNotBlank(type)) {
-                predicates.add(cb.like(root.get("type"), toSqlSearchPattern(type)));
-            }
+			predicates.add(cb.equal(root.get("rootOrgId"), rootOrgId));
 
-            return cb.and(predicates.toArray(new Predicate[predicates.size()]));
-        };
-        PageRequest pageRequest = PageRequest.of(curPage - 1, pageSize, Sort.by(Direction.DESC, "creationTime"));
+			if (StringUtils.isNotBlank(fileName)) {
+				predicates.add(cb.like(root.get("fileName"), toSqlSearchPattern(fileName)));
+			}
+			if (StringUtils.isNotBlank(type)) {
+				predicates.add(cb.like(root.get("type"), toSqlSearchPattern(type)));
+			}
 
-        Page<ExportTemplateEntity> page = exportTemplateRepo.findAll(specification, pageRequest);
-        List<ExportTemplateEntity> list = page.getContent();
-        List<ExportTemplateDto> retList = new ArrayList<ExportTemplateDto>();
-        if (list != null && list.size() > 0) {
-            String upyunFileUrl = PropertyHolder.getString("$upyun.site.1.domain");
-            for (ExportTemplateEntity e : list) {
-                ExportTemplateDto dto = new ExportTemplateDto();
-                BeanUtils.copyProperties(e, dto);
-                dto.setFullFilePath(upyunFileUrl + dto.getFilePath());
-                dto.setTypeName(ExportTemplateType.getName(dto.getType()));
-                retList.add(dto);
-            }
-        }
-        return new PageImpl<ExportTemplateDto>(retList, PageRequest.of(curPage - 1, pageSize), page.getTotalElements());
-    }
+			return cb.and(predicates.toArray(new Predicate[predicates.size()]));
+		};
+		PageRequest pageRequest = PageRequest.of(curPage - 1, pageSize, Sort.by(Direction.DESC, "creationTime"));
 
-    @Transactional
-    @Override
-    public void addFile(User user,Long rootOrgId, String templateName, String type, MultipartFile dataFile) {
-        if (StringUtils.isBlank(templateName)) {
-            throw new StatusException("10001", "模板名称不能为空");
-        }
-        if (!ExportTemplateType.checkCode(type)) {
-            throw new StatusException("10002", "模板类型错误");
-        }
-        ExportTemplateEntity e = new ExportTemplateEntity();
-        String fName = dataFile.getOriginalFilename();
-        e.setFileName(templateName);
-        e.setType(type);
-        e.setEnable(false);
-        e.setCreationTime(new Date());
-        e.setCreateUser(user.getDisplayName());
-        e.setFileKey(IdUtils.uuid());
-        e.setRootOrgId(rootOrgId);
-        String suffix = fName.substring(fName.lastIndexOf(".") + 1, fName.length());
-        e.setSuffix(suffix);
+		Page<ExportTemplateEntity> page = exportTemplateRepo.findAll(specification, pageRequest);
+		List<ExportTemplateEntity> list = page.getContent();
+		List<ExportTemplateDto> retList = new ArrayList<ExportTemplateDto>();
+		if (list != null && list.size() > 0) {
+//            String upyunFileUrl = PropertyHolder.getString("$upyun.site.1.domain");
+			for (ExportTemplateEntity e : list) {
+				ExportTemplateDto dto = new ExportTemplateDto();
+				BeanUtils.copyProperties(e, dto);
+//                dto.setFullFilePath(upyunFileUrl + dto.getFilePath());
+				// 通用存储
+				dto.setFullFilePath(FileStorageUtil.realPath(dto.getFilePath()));
+				dto.setTypeName(ExportTemplateType.getName(dto.getType()));
+				retList.add(dto);
+			}
+		}
+		return new PageImpl<ExportTemplateDto>(retList, PageRequest.of(curPage - 1, pageSize), page.getTotalElements());
+	}
 
-        String relativePath = e.getFileKey() + "." + e.getSuffix();
-        UpyunPathEnvironmentInfo env = new UpyunPathEnvironmentInfo();
-        env.setRootOrgId(rootOrgId.toString());
-        env.setRelativePath(relativePath);
-        String fpath = null;
-        InputStream is = null;
-        try {
-            is = dataFile.getInputStream();
-            fpath = upyunService.writeFile("export_template", env, is, null).getRelativePath();
-        } catch (IOException e1) {
-            throw new StatusException("10003", "模板上传出错");
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e1) {
-                    log.warn("InputStream close faild!");
-                }
-            }
-        }
-        e.setFilePath(fpath);
-        exportTemplateRepo.save(e);
-    }
+	@Transactional
+	@Override
+	public void addFile(User user, Long rootOrgId, String templateName, String type, MultipartFile dataFile) {
+		if (StringUtils.isBlank(templateName)) {
+			throw new StatusException("10001", "模板名称不能为空");
+		}
+		if (!ExportTemplateType.checkCode(type)) {
+			throw new StatusException("10002", "模板类型错误");
+		}
+		ExportTemplateEntity e = new ExportTemplateEntity();
+		String fName = dataFile.getOriginalFilename();
+		e.setFileName(templateName);
+		e.setType(type);
+		e.setEnable(false);
+		e.setCreationTime(new Date());
+		e.setCreateUser(user.getDisplayName());
+		e.setFileKey(IdUtils.uuid());
+		e.setRootOrgId(rootOrgId);
+		String suffix = fName.substring(fName.lastIndexOf(".") + 1, fName.length());
+		e.setSuffix(suffix);
 
-    @Transactional
-    @Override
-    public void delete(Long rootOrgId, Long id) {
-        exportTemplateRepo.deleteByRootOrgIdAndId(rootOrgId, id);
-    }
+		String relativePath = e.getFileKey() + "." + e.getSuffix();
+//        UpyunPathEnvironmentInfo env = new UpyunPathEnvironmentInfo();
+//        env.setRootOrgId(rootOrgId.toString());
+//        env.setRelativePath(relativePath);
+//        String fpath = null;
+//        InputStream is = null;
+//        try {
+//            is = dataFile.getInputStream();
+//            fpath = upyunService.writeFile("export_template", env, is, null).getRelativePath();
+//        } catch (IOException e1) {
+//            throw new StatusException("10003", "模板上传出错");
+//        } finally {
+//            if (is != null) {
+//                try {
+//                    is.close();
+//                } catch (IOException e1) {
+//                    log.warn("InputStream close faild!");
+//                }
+//            }
+//        }
+		// 通用存储
+		FileStoragePathEnvInfo env = new FileStoragePathEnvInfo();
+		env.setRootOrgId(rootOrgId.toString());
+		env.setRelativePath(relativePath);
+		InputStream is = null;
+		try {
+			is = dataFile.getInputStream();
+			String fpath = FileStorageUtil.saveFile("export_template", env, is, null).getRelativePath();
+			e.setFilePath(fpath);
+		} catch (IOException e1) {
+			throw new StatusException("10003", "模板上传出错");
+		} finally {
+			if (is != null) {
+				try {
+					is.close();
+				} catch (IOException e1) {
+					log.warn("InputStream close faild!");
+				}
+			}
+		}
 
-    @Transactional
-    @Override
-    public void enable(Long rootOrgId, Long id) {
-        ExportTemplateEntity et = exportTemplateRepo.findByIdAndRootOrgId(id, rootOrgId);
-        if (et != null) {
-            exportTemplateRepo.updateEnableByType(rootOrgId, et.getType(), false);
-            exportTemplateRepo.updateEnableById(rootOrgId, id, true);
-        } else {
-            throw new StatusException("30001", "模板不存在");
-        }
+		exportTemplateRepo.save(e);
+	}
 
-    }
+	@Transactional
+	@Override
+	public void delete(Long rootOrgId, Long id) {
+		exportTemplateRepo.deleteByRootOrgIdAndId(rootOrgId, id);
+	}
 
-    @Transactional
-    @Override
-    public void disenable(Long rootOrgId, Long id) {
-        exportTemplateRepo.updateEnableById(rootOrgId, id, false);
-    }
+	@Transactional
+	@Override
+	public void enable(Long rootOrgId, Long id) {
+		ExportTemplateEntity et = exportTemplateRepo.findByIdAndRootOrgId(id, rootOrgId);
+		if (et != null) {
+			exportTemplateRepo.updateEnableByType(rootOrgId, et.getType(), false);
+			exportTemplateRepo.updateEnableById(rootOrgId, id, true);
+		} else {
+			throw new StatusException("30001", "模板不存在");
+		}
 
-    private String toSqlSearchPattern(String column) {
-        if (StringUtils.isBlank(column)) {
-            return "%";
-        } else {
-            column = column.trim().replaceAll("\\s", "%");
-            column = "%" + column + "%";
-            return column;
-        }
-    }
-    @Override
-    public String getExportTemplateName(ExportTemplateType type, Long rootOrgId) {
-        String temPath = systemProperties.getTempDataDir();
-        List<ExportTemplateEntity> list = exportTemplateRepo.findByRootOrgIdAndTypeAndEnable(rootOrgId, type.getCode(),
-                true);
-        if (list == null || list.size() == 0) {
-            throw new StatusException("50001", "模板未设置或未启用");
-        }
-        if (list != null && list.size() > 1) {
-            throw new StatusException("50002", "存在多个启用的模板");
-        }
-        ExportTemplateEntity et = list.get(0);
-        String fileName = et.getFileKey() + "." + et.getSuffix();
-        String filePath = temPath + "/" + rootOrgId + "/" + fileName;
-        File f = new File(filePath);
-        if (!f.exists()) {
-            String upyunFileUrl = PropertyHolder.getString("$upyun.site.1.domain");
-            createExportTemplateFile(upyunFileUrl + et.getFilePath(), filePath);
-        }
-        return fileName;
-    }
+	}
 
-    private synchronized void createExportTemplateFile(String fileUrl, String localFilePath) {
-        File f = new File(localFilePath);
-        File dir = f.getParentFile();
-        try {
-            if (!dir.exists()) {
-                dir.mkdirs();
-            }
-            f.createNewFile();
-        } catch (IOException e) {
-            throw new StatusException("60001", "创建模板文件失败");
-        }
-        if (!FileDisposeUtil.saveUrlAs(fileUrl, localFilePath)) {
-            throw new StatusException("60002", "获取模板到本地失败");
-        }
-    }
-    @Override
-    public File getExportTemplateDirectory(ExportTemplateType type, Long rootOrgId) {
-        String temPath = systemProperties.getTempDataDir();
-        if(temPath==null) {
-            throw new StatusException("70000", "tempDataDir未设置");
-        }
-        List<ExportTemplateEntity> list = exportTemplateRepo.findByRootOrgIdAndTypeAndEnable(rootOrgId, type.getCode(),
-                true);
-        if (list == null || list.size() == 0) {
-            throw new StatusException("70001", "模板未设置或未启用");
-        }
-        if (list != null && list.size() > 1) {
-            throw new StatusException("70002", "存在多个启用的模板");
-        }
-        ExportTemplateEntity et = list.get(0);
-        if (!ZIP_SUFFIX.equals(et.getSuffix())) {
-            throw new StatusException("70003", "模板文件不是zip格式");
-        }
-        File dir = new File(temPath + "/" + rootOrgId + "/" + et.getFileKey() + "/");
-        if (dir.exists()) {
-            return dir;
-        } else {
-            String fileName = et.getFileKey() + "." + et.getSuffix();
-            String filePath = temPath + "/" + rootOrgId + "/" + fileName;
-            File f = new File(filePath);
-            if (!f.exists()) {
-                String upyunFileUrl = PropertyHolder.getString("$upyun.site.1.domain");
-                createExportTemplateDir(upyunFileUrl + et.getFilePath(), filePath, dir);
-            }
-            return dir;
-        }
-    }
+	@Transactional
+	@Override
+	public void disenable(Long rootOrgId, Long id) {
+		exportTemplateRepo.updateEnableById(rootOrgId, id, false);
+	}
 
-    private synchronized void createExportTemplateDir(String fileUrl, String localFilePath, File directory) {
-        File f = new File(localFilePath);
-        File dir = f.getParentFile();
-        try {
-            if (!dir.exists()) {
-                dir.mkdirs();
-            }
-            if (!directory.exists()) {
-                dir.mkdir();
-            }
-            f.createNewFile();
-        } catch (IOException e) {
-            throw new StatusException("80001", "创建模板文件失败");
-        }
-        if (!FileDisposeUtil.saveUrlAs(fileUrl, localFilePath)) {
-            throw new StatusException("80002", "获取模板到本地失败");
-        } else {
-            try {
-                FileDisposeUtil.unZipFiles(localFilePath, directory.getAbsolutePath());
-                f.delete();
-            } catch (IOException e) {
-                throw new StatusException("80003", "解压模板到本地失败");
-            }
-        }
-    }
-    
+	private String toSqlSearchPattern(String column) {
+		if (StringUtils.isBlank(column)) {
+			return "%";
+		} else {
+			column = column.trim().replaceAll("\\s", "%");
+			column = "%" + column + "%";
+			return column;
+		}
+	}
+
+	@Override
+	public String getExportTemplateName(ExportTemplateType type, Long rootOrgId) {
+		String temPath = systemProperties.getTempDataDir();
+		List<ExportTemplateEntity> list = exportTemplateRepo.findByRootOrgIdAndTypeAndEnable(rootOrgId, type.getCode(),
+				true);
+		if (list == null || list.size() == 0) {
+			throw new StatusException("50001", "模板未设置或未启用");
+		}
+		if (list != null && list.size() > 1) {
+			throw new StatusException("50002", "存在多个启用的模板");
+		}
+		ExportTemplateEntity et = list.get(0);
+		String fileName = et.getFileKey() + "." + et.getSuffix();
+		String filePath = temPath + "/" + rootOrgId + "/" + fileName;
+		File f = new File(filePath);
+		if (!f.exists()) {
+//			String upyunFileUrl = PropertyHolder.getString("$upyun.site.1.domain");
+			//通用存储
+			createExportTemplateFile(FileStorageUtil.realPath(et.getFilePath()), filePath);
+		}
+		return fileName;
+	}
+
+	private synchronized void createExportTemplateFile(String fileUrl, String localFilePath) {
+		File f = new File(localFilePath);
+		File dir = f.getParentFile();
+		try {
+			if (!dir.exists()) {
+				dir.mkdirs();
+			}
+			f.createNewFile();
+		} catch (IOException e) {
+			throw new StatusException("60001", "创建模板文件失败");
+		}
+		if (!FileDisposeUtil.saveUrlAs(fileUrl, localFilePath)) {
+			throw new StatusException("60002", "获取模板到本地失败");
+		}
+	}
+
+	@Override
+	public File getExportTemplateDirectory(ExportTemplateType type, Long rootOrgId) {
+		String temPath = systemProperties.getTempDataDir();
+		if (temPath == null) {
+			throw new StatusException("70000", "tempDataDir未设置");
+		}
+		List<ExportTemplateEntity> list = exportTemplateRepo.findByRootOrgIdAndTypeAndEnable(rootOrgId, type.getCode(),
+				true);
+		if (list == null || list.size() == 0) {
+			throw new StatusException("70001", "模板未设置或未启用");
+		}
+		if (list != null && list.size() > 1) {
+			throw new StatusException("70002", "存在多个启用的模板");
+		}
+		ExportTemplateEntity et = list.get(0);
+		if (!ZIP_SUFFIX.equals(et.getSuffix())) {
+			throw new StatusException("70003", "模板文件不是zip格式");
+		}
+		File dir = new File(temPath + "/" + rootOrgId + "/" + et.getFileKey() + "/");
+		if (dir.exists()) {
+			return dir;
+		} else {
+			String fileName = et.getFileKey() + "." + et.getSuffix();
+			String filePath = temPath + "/" + rootOrgId + "/" + fileName;
+			File f = new File(filePath);
+			if (!f.exists()) {
+//				String upyunFileUrl = PropertyHolder.getString("$upyun.site.1.domain");
+				//通用存储
+				createExportTemplateDir(FileStorageUtil.realPath(et.getFilePath()), filePath, dir);
+			}
+			return dir;
+		}
+	}
+
+	private synchronized void createExportTemplateDir(String fileUrl, String localFilePath, File directory) {
+		File f = new File(localFilePath);
+		File dir = f.getParentFile();
+		try {
+			if (!dir.exists()) {
+				dir.mkdirs();
+			}
+			if (!directory.exists()) {
+				dir.mkdir();
+			}
+			f.createNewFile();
+		} catch (IOException e) {
+			throw new StatusException("80001", "创建模板文件失败");
+		}
+		if (!FileDisposeUtil.saveUrlAs(fileUrl, localFilePath)) {
+			throw new StatusException("80002", "获取模板到本地失败");
+		} else {
+			try {
+				FileDisposeUtil.unZipFiles(localFilePath, directory.getAbsolutePath());
+				f.delete();
+			} catch (IOException e) {
+				throw new StatusException("80003", "解压模板到本地失败");
+			}
+		}
+	}
 }

+ 9 - 5
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigFileServiceImpl.java

@@ -62,7 +62,7 @@ import cn.com.qmth.examcloud.examwork.api.ExamCloudService;
 import cn.com.qmth.examcloud.examwork.api.bean.ExamCourseRelationBean;
 import cn.com.qmth.examcloud.examwork.api.request.GetExamCourseListReq;
 import cn.com.qmth.examcloud.examwork.api.response.GetExamCourseListResp;
-import main.java.com.UpYun;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
 
 /**
  * @author chenken
@@ -237,9 +237,11 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
         if (examFiles != null && examFiles.size() > 0) {
             for (int i = 0; i < examFiles.size(); i++) {
                 ExamFile examFile = examFiles.get(i);
-                UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//                UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
                 File file = new File(downloadDir + File.separator + examFile.getFileName());
-                upyun.readFile(examFile.getFilePath(), file);
+//                upyun.readFile(examFile.getFilePath(), file);
+                //通用存储
+				FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(examFile.getFilePath()), file);
 
                 if (examFile.getExamFileType() == ExamFileType.PAPER) {
                     Long examId = Long.parseLong(exportModel.getExamId());
@@ -310,9 +312,11 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
                             for (QuestionAudio audio : questionAudios) {
                                 String audioFileName = audio.getId() +
                                         "_" + exportPaperAbstractService.getAudioFileName(audio, unit, paperDetailExp);
-                                UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//                                UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
                                 File file = new File(downloadDir + File.separator + audioFileName);
-                                upyun.readFile(audio.getFileUrl(), file);
+//                                upyun.readFile(audio.getFileUrl(), file);
+                                //通用存储
+                				FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()), file);
                             }
                         }
                     }

+ 46 - 18
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigProviderServiceImpl.java

@@ -1,37 +1,63 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+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 java.util.stream.Collectors;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.logging.ExamCloudLog;
 import cn.com.qmth.examcloud.commons.logging.ExamCloudLogFactory;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
-import cn.com.qmth.examcloud.core.questions.dao.*;
-import cn.com.qmth.examcloud.core.questions.dao.entity.*;
-import cn.com.qmth.examcloud.core.questions.service.*;
+import cn.com.qmth.examcloud.core.questions.dao.AudioTimeConfigRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperDetailRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperRepo;
+import cn.com.qmth.examcloud.core.questions.dao.QuesRepo;
+import cn.com.qmth.examcloud.core.questions.dao.entity.AudioTimeConfig;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Paper;
+import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetail;
+import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetailUnit;
+import cn.com.qmth.examcloud.core.questions.dao.entity.QuesOption;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
+import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
+import cn.com.qmth.examcloud.core.questions.service.ExtractConfigProviderService;
+import cn.com.qmth.examcloud.core.questions.service.ExtractConfigService;
+import cn.com.qmth.examcloud.core.questions.service.PaperService;
+import cn.com.qmth.examcloud.core.questions.service.QuesService;
+import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
 import cn.com.qmth.examcloud.core.questions.service.bean.QuestionAnswerConvert;
 import cn.com.qmth.examcloud.core.questions.service.bean.extract.ExtractConfigPaper;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultPaper;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionGroup;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionStructureWrapper;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionUnitWrapper;
+import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestion;
+import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestionOption;
+import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestionStructure;
+import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestionUnit;
 import cn.com.qmth.examcloud.question.commons.core.question.QuestionType;
-import cn.com.qmth.examcloud.question.commons.core.question.*;
 import cn.com.qmth.examcloud.support.cache.CacheHelper;
 import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigCacheBean;
 import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigDetailCacheBean;
 import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigPaperCacheBean;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Example;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
 
 /**
  * @author weiwenhai
@@ -72,8 +98,8 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
     @Autowired
     private PaperService paperService;
 
-    @Autowired
-    private SysProperty sysProperty;
+//    @Autowired
+//    private SysProperty sysProperty;
 
     @Override
     public ExtractConfigCacheBean getExtractConfig(Long examId, String courseCode) {
@@ -518,7 +544,9 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
                     String questionAudioId = matchAudioName(containAStr, "a", "id");
                     QuestionAudio questionAudio = questionAudioService.findAudioById(questionAudioId);
                     if (questionAudio != null) {
-                        String url = sysProperty.getDomain() + questionAudio.getFileUrl();
+//                        String url = sysProperty.getDomain() + questionAudio.getFileUrl();
+                    	//通用存储
+                        String url = FileStorageUtil.realPath(questionAudio.getFileUrl());
                         if (playTime != null) {
                             containAStr += " question-audio url=\"" + url + "\" playTime=\"" + playTime + "\"" + "></a>";
                         } else {

+ 66 - 33
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigServiceImpl.java

@@ -1,21 +1,75 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
 
+import static cn.com.qmth.examcloud.core.questions.service.cache.Constants.CACHE_KEY_PAPER_FOR_DTO;
+import static cn.com.qmth.examcloud.core.questions.service.cache.Constants.DEFAULT_TIME_OUT;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+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 java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.nlpcn.commons.lang.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+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.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 org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.base.BeanCopierUtil;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
-import cn.com.qmth.examcloud.core.questions.base.question.*;
+import cn.com.qmth.examcloud.core.questions.base.question.PaperDetailDto;
+import cn.com.qmth.examcloud.core.questions.base.question.PaperDetailUnitDto;
+import cn.com.qmth.examcloud.core.questions.base.question.PaperDto;
+import cn.com.qmth.examcloud.core.questions.base.question.QuesOptionDto;
+import cn.com.qmth.examcloud.core.questions.base.question.QuestionDto;
+import cn.com.qmth.examcloud.core.questions.base.question.SubQuestionDto;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
-import cn.com.qmth.examcloud.core.questions.dao.*;
-import cn.com.qmth.examcloud.core.questions.dao.entity.*;
+import cn.com.qmth.examcloud.core.questions.dao.AudioTimeConfigRepo;
+import cn.com.qmth.examcloud.core.questions.dao.ExtractConfigRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperDetailRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitNativeRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperRepo;
+import cn.com.qmth.examcloud.core.questions.dao.entity.AudioTimeConfig;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Course;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Paper;
+import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetail;
+import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetailUnit;
+import cn.com.qmth.examcloud.core.questions.dao.entity.QuesOption;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
+import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
 import cn.com.qmth.examcloud.core.questions.service.ExtractConfigService;
 import cn.com.qmth.examcloud.core.questions.service.QuesService;
 import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
-import cn.com.qmth.examcloud.core.questions.service.bean.*;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
+import cn.com.qmth.examcloud.core.questions.service.bean.CouresInfo;
+import cn.com.qmth.examcloud.core.questions.service.bean.PaperDetailDtoAssembler;
+import cn.com.qmth.examcloud.core.questions.service.bean.PaperDetailUnitDtoAssembler;
+import cn.com.qmth.examcloud.core.questions.service.bean.PaperDtoAssembler;
+import cn.com.qmth.examcloud.core.questions.service.bean.SubQuestionDtoAssembler;
 import cn.com.qmth.examcloud.examwork.api.ExamCloudService;
 import cn.com.qmth.examcloud.examwork.api.bean.ExamBean;
 import cn.com.qmth.examcloud.examwork.api.bean.ExamCourseRelationBean;
@@ -23,31 +77,8 @@ import cn.com.qmth.examcloud.examwork.api.request.GetExamCourseListReq;
 import cn.com.qmth.examcloud.examwork.api.request.GetExamReq;
 import cn.com.qmth.examcloud.examwork.api.response.GetExamCourseListResp;
 import cn.com.qmth.examcloud.examwork.api.response.GetExamResp;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
-import org.apache.commons.lang3.StringUtils;
-import org.nlpcn.commons.lang.util.StringUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-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.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 org.springframework.util.Assert;
-import org.springframework.util.CollectionUtils;
-
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-import static cn.com.qmth.examcloud.core.questions.service.cache.Constants.CACHE_KEY_PAPER_FOR_DTO;
-import static cn.com.qmth.examcloud.core.questions.service.cache.Constants.DEFAULT_TIME_OUT;
 
 /**
  * @author chenken
@@ -85,9 +116,9 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 
     @Autowired
     private CourseService courseService;
-
-    @Autowired
-    private SysProperty sysProperty;
+//
+//    @Autowired
+//    private SysProperty sysProperty;
 
     @Autowired
     private PaperDtoAssembler paperDtoAssembler;
@@ -851,7 +882,9 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
                     String questionAudioId = matchAudioName(containAStr, "a", "id");
                     QuestionAudio questionAudio = questionAudioService.findAudioById(questionAudioId);
                     if (questionAudio != null) {
-                        String url = sysProperty.getDomain() + questionAudio.getFileUrl();
+//                        String url = sysProperty.getDomain() + questionAudio.getFileUrl();
+                        //通用存储
+                        String url = FileStorageUtil.realPath(questionAudio.getFileUrl());
                         if (questionDto.getPlayTime() != null) {
                             containAStr += " question-audio url=\"" + url + "\" playTime=\"" + questionDto.getPlayTime() + "\"" + "></a>";
                         } else {

+ 8 - 3
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java

@@ -95,7 +95,8 @@ import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperQuestionStruct
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.SubjectiveQuestionStructure;
 import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.core.questions.service.export.ExportPaperAbstractService;
-import main.java.com.UpYun;
+import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
 
 /**
  * @author chenken
@@ -1266,8 +1267,12 @@ public class PaperServiceImpl implements PaperService {
             }
 
             //上传到又拍云
-            UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-            upYun.writeFile(sysProperty.getRadioUploadPath() + mp3FileName, mp3File, true);
+//            UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//            upYun.writeFile(sysProperty.getRadioUploadPath() + mp3FileName, mp3File, true);
+            //通用存储
+    		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
+    		env.setRelativePath(sysProperty.getRadioUploadPath() + mp3FileName);
+    		FileStorageUtil.saveFile("audioFile", env, mp3File,null);
             IoUtils.removeFile(mp3File);
 
             //保存记录

+ 34 - 23
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/QuestionAudioServiceImpl.java

@@ -1,24 +1,29 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.Model;
-import cn.com.qmth.examcloud.core.questions.dao.QuesRepo;
 import cn.com.qmth.examcloud.core.questions.dao.QuestionAudioRepo;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuesOption;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
 import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
-import main.java.com.UpYun;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.Assert;
-
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import cn.com.qmth.examcloud.web.filestorage.FileStorageUtil;
 
 /**
  * @author chenken
@@ -32,11 +37,11 @@ public class QuestionAudioServiceImpl implements QuestionAudioService {
     @Autowired
     private QuestionAudioRepo questionAudioRepo;
 
-    @Autowired
-    private QuesRepo quesRepo;
-
-    @Autowired
-    private SysProperty sysProperty;
+//    @Autowired
+//    private QuesRepo quesRepo;
+//
+//    @Autowired
+//    private SysProperty sysProperty;
 
     @Override
     public void saveQuestionAudio(QuestionAudio questionAudio, User user) {
@@ -44,8 +49,10 @@ public class QuestionAudioServiceImpl implements QuestionAudioService {
         if (existQuestionAudio != null) {
             questionAudio.setId(existQuestionAudio.getId());
 
-            UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-            upYun.deleteFile(existQuestionAudio.getFileUrl());
+//            UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//            upYun.deleteFile(existQuestionAudio.getFileUrl());
+        	//通用存储
+            FileStorageUtil.deleteFile(existQuestionAudio.getFileUrl());
 
             questionAudioRepo.delete(existQuestionAudio);
         }
@@ -106,8 +113,10 @@ public class QuestionAudioServiceImpl implements QuestionAudioService {
             while (audioIterator.hasNext()) {
                 QuestionAudio audio = audioIterator.next();
                 if (!questionBodyAndOptionStr.contains(audio.getFileName())) {
-                    UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-                    upYun.deleteFile(audio.getFileUrl());
+//                    UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//                    upYun.deleteFile(audio.getFileUrl());
+                	//通用存储
+                    FileStorageUtil.deleteFile(audio.getFileUrl());
                     questionAudioRepo.delete(audio);
                 }
             }
@@ -192,8 +201,10 @@ public class QuestionAudioServiceImpl implements QuestionAudioService {
         Iterator<QuestionAudio> audioIterator = questionAudios.iterator();
         while (audioIterator.hasNext()) {
             QuestionAudio audio = audioIterator.next();
-            UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-            upYun.deleteFile(audio.getFileUrl());
+//            UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+//            upYun.deleteFile(audio.getFileUrl());
+        	//通用存储
+            FileStorageUtil.deleteFile(audio.getFileUrl());
         }
         questionAudioRepo.deleteAll(questionAudios);
     }

+ 46 - 0
examcloud-core-questions-starter/src/main/resources/aliyun.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sites>
+
+	<site>
+		<id>export_template</id>
+		<name>导出模板</name>
+		<aliyunId>1</aliyunId>
+		<maxSize>10M</maxSize>
+		<path>/question/export-template/${rootOrgId}/${relativePath}</path>
+	</site>
+	<site>
+		<id>computerTestFile</id>
+		<name>机考文件</name>
+		<aliyunId>1</aliyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
+	<site>
+		<id>paperOrAnswerFile</id>
+		<name>试卷或答案Word</name>
+		<aliyunId>1</aliyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
+	<site>
+		<id>objectiveQuestionStructures</id>
+		<name>客观题导出结构</name>
+		<aliyunId>1</aliyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
+	<site>
+		<id>subjectiveQuestionStructures</id>
+		<name>主观题导出结构</name>
+		<aliyunId>1</aliyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
+	<site>
+		<id>audioFile</id>
+		<name>试题音频文件</name>
+		<aliyunId>1</aliyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
+</sites>

+ 35 - 2
examcloud-core-questions-starter/src/main/resources/upyun.xml

@@ -8,6 +8,39 @@
 		<maxSize>10M</maxSize>
 		<path>/question/export-template/${rootOrgId}/${relativePath}</path>
 	</site>
-
-
+	<site>
+		<id>computerTestFile</id>
+		<name>机考文件</name>
+		<upyunId>1</upyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
+	<site>
+		<id>paperOrAnswerFile</id>
+		<name>试卷或答案Word</name>
+		<upyunId>1</upyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
+	<site>
+		<id>objectiveQuestionStructures</id>
+		<name>客观题导出结构</name>
+		<upyunId>1</upyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
+	<site>
+		<id>subjectiveQuestionStructures</id>
+		<name>主观题导出结构</name>
+		<upyunId>1</upyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
+	<site>
+		<id>audioFile</id>
+		<name>试题音频文件</name>
+		<upyunId>1</upyunId>
+		<maxSize>100M</maxSize>
+		<path>/${relativePath}</path>
+	</site>
 </sites>