소스 검색

模板设定

xiatian 5 년 전
부모
커밋
fa02bc7b01
40개의 변경된 파일2417개의 추가작업 그리고 1268개의 파일을 삭제
  1. 36 37
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/ExportPaperController.java
  2. 97 0
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/ExportTemplateController.java
  3. 10 2
      examcloud-core-questions-base/pom.xml
  4. 47 34
      examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/FileDisposeUtil.java
  5. 127 0
      examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/dto/ExportTemplateDto.java
  6. 62 0
      examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/enums/ExportTemplateType.java
  7. 32 0
      examcloud-core-questions-dao/src/main/java/cn/com/qmth/examcloud/core/questions/dao/ExportTemplateRepo.java
  8. 121 0
      examcloud-core-questions-dao/src/main/java/cn/com/qmth/examcloud/core/questions/dao/entity/ExportTemplateEntity.java
  9. 17 19
      examcloud-core-questions-dao/src/main/java/cn/com/qmth/examcloud/core/questions/dao/entity/base/IdEntity.java
  10. 8 5
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ExportPaperService.java
  11. 24 0
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ExportTemplateService.java
  12. 71 56
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/converter/PrintExamPaperService.java
  13. 45 33
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/BjhkExportPaperService.java
  14. 41 30
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/BjjtExportPaperService.java
  15. 45 33
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/BjsfExportPaperService.java
  16. 47 35
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/CqdxExportPaperService.java
  17. 48 35
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/CugbExportPaperService.java
  18. 45 33
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/DbsfExportPaperService.java
  19. 66 48
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/DzkdExportPaperService.java
  20. 420 276
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ExportPaperAbstractService.java
  21. 48 37
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/FdsfExportPaperService.java
  22. 45 33
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/FjsfExportPaperService.java
  23. 41 30
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/HnsfExportPaperService.java
  24. 35 25
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/HzkjExportPaperService.java
  25. 45 33
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/NkdxExportPaperService.java
  26. 41 30
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/RjgcExportPaperService.java
  27. 33 24
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/SddxExportPaperService.java
  28. 48 35
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/SxsfExportPaperService.java
  29. 76 53
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/SydxExportPaperService.java
  30. 41 30
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/TjdxExportPaperService.java
  31. 48 35
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/WheqxExportPaperService.java
  32. 48 35
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/XnjdExportPaperService.java
  33. 41 30
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/YkdxExportPaperService.java
  34. 45 33
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ZgddbExportPaperService.java
  35. 47 35
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ZgddwExportPaperService.java
  36. 33 25
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/xajdExportPaperService.java
  37. 45 39
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportPaperServiceImpl.java
  38. 204 0
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportTemplateServiceImpl.java
  39. 31 30
      examcloud-core-questions-starter/src/main/java/cn/com/qmth/examcloud/core/questions/starter/CoreQuestionApp.java
  40. 13 0
      examcloud-core-questions-starter/src/main/resources/upyun.xml

+ 36 - 37
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/ExportPaperController.java

@@ -1,11 +1,13 @@
 package cn.com.qmth.examcloud.core.questions.api.controller;
 
-import cn.com.qmth.examcloud.commons.exception.StatusException;
-import cn.com.qmth.examcloud.core.questions.dao.ExportServiceManageRepo;
-import cn.com.qmth.examcloud.core.questions.dao.entity.ExportServiceManage;
-import cn.com.qmth.examcloud.core.questions.service.ExportPaperService;
-import cn.com.qmth.examcloud.core.questions.service.export.SydxExportPaperService;
-import io.swagger.annotations.ApiOperation;
+import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,19 +16,22 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+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.dao.ExportServiceManageRepo;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExportServiceManage;
+import cn.com.qmth.examcloud.core.questions.service.ExportPaperService;
+import cn.com.qmth.examcloud.core.questions.service.export.SydxExportPaperService;
+import cn.com.qmth.examcloud.web.support.ControllerSupport;
+import io.swagger.annotations.ApiOperation;
 
 /**
  * Created by songyue on 17/3/30.
  */
 @Controller
 @RequestMapping("${api_cqb}/")
-public class ExportPaperController {
+public class ExportPaperController extends ControllerSupport {
+
     protected static final Logger log = LoggerFactory.getLogger(ExportPaperController.class);
 
     @Autowired
@@ -46,25 +51,19 @@ public class ExportPaperController {
      */
     @ApiOperation(value = "导出试卷", notes = "导出试卷")
     @GetMapping(value = "/paper/export/{id}/{exportContentList}/{orgName}/{loginName}/{examType}")
-    public void getPaperById(HttpServletRequest request, HttpServletResponse response,
-                             @PathVariable String id,
-                             @PathVariable String orgName,
-                             @PathVariable String exportContentList,
-                             @PathVariable String loginName,
-                             @PathVariable String examType) {
+    public void getPaperById(HttpServletRequest request, HttpServletResponse response, @PathVariable String id,
+            @PathVariable String orgName, @PathVariable String exportContentList, @PathVariable String loginName,
+            @PathVariable String examType) {
         log.info("导出开始");
-        try {
-            String psw = request.getParameter("psw");
-            ExportServiceManage esm = exportServiceManageRepo.findByOrgName(orgName);
-
-            if (esm == null) {
-                throw new StatusException("500", String.format("学校【%s】尚未配置导出模板!", orgName));
-            }
+        String psw = request.getParameter("psw");
+        ExportServiceManage esm = exportServiceManageRepo.findByOrgName(orgName);
 
-            exportPaperService.exportPaperFile(id, esm.getExportServiceName(), exportContentList, response, loginName, examType, psw);
-        } catch (Exception e) {
-            log.error("导出异常:" + e.getMessage(), e);
+        if (esm == null) {
+            throw new StatusException("500", String.format("学校【%s】尚未配置导出模板!", orgName));
         }
+        User user = getAccessUser();
+        exportPaperService.exportPaperFile(id, esm.getExportServiceName(), exportContentList, response, loginName,
+                examType, psw, user.getRootOrgId());
         log.info("导出结束");
     }
 
@@ -80,12 +79,9 @@ public class ExportPaperController {
      */
     @ApiOperation(value = "批量导出试卷", notes = "批量导出")
     @GetMapping(value = "/paper/batch_export/{paperIds}/{exportContentList}/{orgName}/{loginName}/{examType}")
-    public void getPaperByIds(HttpServletRequest request, HttpServletResponse response,
-                              @PathVariable String paperIds,
-                              @PathVariable String orgName,
-                              @PathVariable String exportContentList,
-                              @PathVariable String loginName,
-                              @PathVariable String examType) {
+    public void getPaperByIds(HttpServletRequest request, HttpServletResponse response, @PathVariable String paperIds,
+            @PathVariable String orgName, @PathVariable String exportContentList, @PathVariable String loginName,
+            @PathVariable String examType) {
         log.info("批量导出");
         List<String> paperList = Stream.of(paperIds.split(",")).collect(Collectors.toList());
         ExportServiceManage esm = exportServiceManageRepo.findByOrgName(orgName);
@@ -95,7 +91,9 @@ public class ExportPaperController {
         }
 
         try {
-            exportPaperService.exportPaperFiles(paperList, esm.getExportServiceName(), exportContentList, response, loginName, examType);
+            User user = getAccessUser();
+            exportPaperService.exportPaperFiles(paperList, esm.getExportServiceName(), exportContentList, response,
+                    loginName, examType, user.getRootOrgId());
         } catch (Exception e) {
             log.error("导出异常:" + e.getMessage());
         }
@@ -126,7 +124,8 @@ public class ExportPaperController {
 
     @ApiOperation(value = "导出原始导入的试卷", notes = "导出原始导入的试卷")
     @GetMapping(value = "/originalPaper/export/{paperId}/{loginName}")
-    public void downOriginalPaper(HttpServletResponse response, @PathVariable String paperId, @PathVariable String loginName) {
+    public void downOriginalPaper(HttpServletResponse response, @PathVariable String paperId,
+            @PathVariable String loginName) {
         try {
             exportPaperService.downOriginalPaper(paperId, loginName, response);
         } catch (Exception e) {

+ 97 - 0
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/ExportTemplateController.java

@@ -0,0 +1,97 @@
+package cn.com.qmth.examcloud.core.questions.api.controller;
+
+import javax.validation.constraints.NotNull;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+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.PutMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+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.dto.ExportTemplateDto;
+import cn.com.qmth.examcloud.core.questions.service.ExportTemplateService;
+import cn.com.qmth.examcloud.web.support.ControllerSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Api(tags = "导出模板设定")
+@RestController
+@RequestMapping("${api_cqb}/exportTemplate")
+public class ExportTemplateController extends ControllerSupport {
+
+    @Autowired
+    private ExportTemplateService exportTemplateService;
+
+    @ApiOperation(value = "分页查询")
+    @GetMapping("page/{pageNo}/{pageSize}")
+    public Page<ExportTemplateDto> getPage(@PathVariable Integer pageNo, @PathVariable Integer pageSize,
+            @RequestParam Long rootOrgId, @RequestParam(required = false) String fileName,
+            @RequestParam(required = false) String type) {
+        User accessUser = getAccessUser();
+        if (!isSuperAdmin()) {
+            if (!rootOrgId.equals(accessUser.getRootOrgId())) {
+                throw new StatusException("100000", "无效的请求");
+            }
+        }
+        return exportTemplateService.getPage(rootOrgId, fileName, type, pageNo, pageSize);
+    }
+
+    @ApiOperation(value = "新增")
+    @PostMapping("add/{rootOrgId}")
+    public void addResource(@RequestParam @NotNull(message = "模板名称不能为空!") String templateName,
+            @PathVariable Long rootOrgId, @RequestParam @NotNull(message = "模板类型不能为空!") String type,
+            @RequestPart @NotNull(message = "上传文件不能为空!") MultipartFile dataFile) {
+        User accessUser = getAccessUser();
+        if (!isSuperAdmin()) {
+            if (!rootOrgId.equals(accessUser.getRootOrgId())) {
+                throw new StatusException("100001", "无效的请求");
+            }
+        }
+        exportTemplateService.addFile(accessUser, templateName, type, dataFile);
+    }
+
+    @ApiOperation(value = "删除")
+    @DeleteMapping("/{rootOrgId}/{id}")
+    public void delete(@PathVariable Long rootOrgId, @PathVariable Long id) {
+        User accessUser = getAccessUser();
+        if (!isSuperAdmin()) {
+            if (!rootOrgId.equals(accessUser.getRootOrgId())) {
+                throw new StatusException("100002", "无效的请求");
+            }
+        }
+        exportTemplateService.delete(rootOrgId, id);
+    }
+
+    @ApiOperation(value = "启用")
+    @PutMapping("/enable/{rootOrgId}/{id}")
+    public void enable(@PathVariable Long rootOrgId, @PathVariable Long id) {
+        User accessUser = getAccessUser();
+        if (!isSuperAdmin()) {
+            if (!rootOrgId.equals(accessUser.getRootOrgId())) {
+                throw new StatusException("100003", "无效的请求");
+            }
+        }
+        exportTemplateService.enable(rootOrgId, id);
+    }
+
+    @ApiOperation(value = "禁用")
+    @PutMapping("/disenable/{rootOrgId}/{id}")
+    public void disenable(@PathVariable Long rootOrgId, @PathVariable Long id) {
+        User accessUser = getAccessUser();
+        if (!isSuperAdmin()) {
+            if (!rootOrgId.equals(accessUser.getRootOrgId())) {
+                throw new StatusException("100004", "无效的请求");
+            }
+        }
+        exportTemplateService.disenable(rootOrgId, id);
+    }
+}

+ 10 - 2
examcloud-core-questions-base/pom.xml

@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
 		<artifactId>examcloud-core-questions</artifactId>
@@ -70,7 +72,7 @@
 		<dependency>
 			<groupId>org.docx4j</groupId>
 			<artifactId>docx4j-ImportXHTML</artifactId>
-			<version>3.3.6-1</version>
+			<version>6.1.0</version>
 			<exclusions>
 				<exclusion>
 					<groupId>org.slf4j</groupId>
@@ -90,6 +92,12 @@
 			<groupId>net.sourceforge.jeuclid</groupId>
 			<artifactId>jeuclid-core</artifactId>
 			<version>3.1.9</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.apache.xmlgraphics</groupId>
+					<artifactId>xmlgraphics-commons</artifactId>
+				</exclusion>
+			</exclusions>
 		</dependency>
 		<dependency>
 			<groupId>net.sf.saxon</groupId>

+ 47 - 34
examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/FileDisposeUtil.java

@@ -1,11 +1,16 @@
 package cn.com.qmth.examcloud.core.questions.base;
 
-import org.apache.commons.io.FileUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -16,6 +21,11 @@ import java.nio.file.Paths;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author chenken
@@ -23,13 +33,16 @@ import java.util.zip.ZipOutputStream;
  * @company QMTH
  */
 public class FileDisposeUtil {
+
     private static final Logger logger = LoggerFactory.getLogger(FileDisposeUtil.class);
 
     /**
      * 将网络文件保存到本地
      *
-     * @param fileUrl       网络文件URL
-     * @param localFilePath 例如D:/123.txt
+     * @param fileUrl
+     *            网络文件URL
+     * @param localFilePath
+     *            例如D:/123.txt
      * @return
      */
     public static boolean saveUrlAs(String fileUrl, String localFilePath) {
@@ -49,11 +62,9 @@ public class FileDisposeUtil {
             return false;
         }
 
-        try (
-                DataInputStream dataInputStream = new DataInputStream(connection.getInputStream());
+        try (DataInputStream dataInputStream = new DataInputStream(connection.getInputStream());
                 FileOutputStream fileOutputStream = new FileOutputStream(localFilePath);
-                DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
-        ) {
+                DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);) {
 
             byte[] buffer = new byte[4096];
             int count;
@@ -64,6 +75,7 @@ public class FileDisposeUtil {
             dataOutputStream.flush();
             return true;
         } catch (Exception e) {
+            logger.error(e.getMessage(), e);
             return false;
         } finally {
             if (connection != null) {
@@ -75,28 +87,30 @@ public class FileDisposeUtil {
     /**
      * 下载服务器上的文件
      *
-     * @param filename     文件名称
-     * @param fullFilePath 文件全路径
+     * @param filename
+     *            文件名称
+     * @param fullFilePath
+     *            文件全路径
      * @param response
      */
     public static void downloadFile(String filename, String fullFilePath, HttpServletResponse response) {
-        try (InputStream in = new FileInputStream(fullFilePath);
-             OutputStream out = response.getOutputStream();) {
+        try (InputStream in = new FileInputStream(fullFilePath); OutputStream out = response.getOutputStream();) {
 
-            //设置编码
+            // 设置编码
             response.setCharacterEncoding("UTF-8");
 
-            //设置文件MIME类型
+            // 设置文件MIME类型
             response.setContentType(getContentType(filename));
 
-            //设置Content-Disposition,名称强制为UTF-8
-            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8").replace("%28", "(").replace("%29", ")"));
+            // 设置Content-Disposition,名称强制为UTF-8
+            response.setHeader("Content-Disposition", "attachment;filename="
+                    + URLEncoder.encode(filename, "UTF-8").replace("%28", "(").replace("%29", ")"));
             response.setHeader("Accept-Length", String.valueOf(in.available()));
 
             // 设置强制下载不打开
             response.setContentType("application/octet-stream;charset=utf-8");
 
-            //读取目标文件,通过response将目标文件写到客户端
+            // 读取目标文件,通过response将目标文件写到客户端
             byte[] buffer = new byte[4096];
             int count;
             while ((count = in.read(buffer)) > 0) {
@@ -131,9 +145,12 @@ public class FileDisposeUtil {
     /**
      * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下
      *
-     * @param sourceFilePath :待压缩的文件夹路径
-     * @param zipFilePath    :压缩后zip文件的存放路径
-     * @param fileName       :zip文件的名称
+     * @param sourceFilePath
+     *            :待压缩的文件夹路径
+     * @param zipFilePath
+     *            :压缩后zip文件的存放路径
+     * @param fileName
+     *            :zip文件的名称
      * @return
      */
     public static boolean fileToZip(String sourceFilePath, String zipFilePath, String fileName) {
@@ -157,11 +174,9 @@ public class FileDisposeUtil {
             return false;
         }
 
-        try (
-                FileOutputStream fos = new FileOutputStream(zipFile);
+        try (FileOutputStream fos = new FileOutputStream(zipFile);
                 BufferedOutputStream bos = new BufferedOutputStream(fos);
-                ZipOutputStream zos = new ZipOutputStream(bos);
-        ) {
+                ZipOutputStream zos = new ZipOutputStream(bos);) {
 
             byte[] bytes = new byte[1024 * 10];
             for (int i = 0; i < sourceFiles.length; i++) {
@@ -170,18 +185,16 @@ public class FileDisposeUtil {
                     continue;
                 }
 
-                try (
-                        FileInputStream fis = new FileInputStream(file);
-                        BufferedInputStream bis = new BufferedInputStream(fis, 1024 * 10);
-                ) {
-                    //创建ZIP实体,并添加进压缩包
+                try (FileInputStream fis = new FileInputStream(file);
+                        BufferedInputStream bis = new BufferedInputStream(fis, 1024 * 10);) {
+                    // 创建ZIP实体,并添加进压缩包
                     String fileEncode = System.getProperty("file.encoding");
                     String name = new String(file.getName().getBytes(fileEncode), "UTF-8");
 
                     ZipEntry zipEntry = new ZipEntry(name);
                     zos.putNextEntry(zipEntry);
 
-                    //读取待压缩的文件并写进压缩包里
+                    // 读取待压缩的文件并写进压缩包里
                     int read;
                     while ((read = bis.read(bytes, 0, 1024 * 10)) != -1) {
                         zos.write(bytes, 0, read);

+ 127 - 0
examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/dto/ExportTemplateDto.java

@@ -0,0 +1,127 @@
+package cn.com.qmth.examcloud.core.questions.base.dto;
+
+import java.util.Date;
+
+public class ExportTemplateDto {
+
+    private Long id;
+
+    private String rootOrgId;
+
+    private String type;
+
+    private String typeName;
+
+    private String fileName;
+
+    private String suffix;
+
+    private String filePath;
+
+    private String fileKey;
+
+    private Boolean enable;
+
+    private Date creationTime;
+
+    private String createUser;
+
+    private String fullFilePath;
+
+    public String getRootOrgId() {
+        return rootOrgId;
+    }
+
+    public void setRootOrgId(String rootOrgId) {
+        this.rootOrgId = rootOrgId;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public String getSuffix() {
+        return suffix;
+    }
+
+    public void setSuffix(String suffix) {
+        this.suffix = suffix;
+    }
+
+    public String getFilePath() {
+        return filePath;
+    }
+
+    public void setFilePath(String filePath) {
+        this.filePath = filePath;
+    }
+
+    public String getFileKey() {
+        return fileKey;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public void setFileKey(String fileKey) {
+        this.fileKey = fileKey;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public Date getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Date creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    public String getCreateUser() {
+        return createUser;
+    }
+
+    public void setCreateUser(String createUser) {
+        this.createUser = createUser;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getFullFilePath() {
+        return fullFilePath;
+    }
+
+    public void setFullFilePath(String fullFilePath) {
+        this.fullFilePath = fullFilePath;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+}

+ 62 - 0
examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/enums/ExportTemplateType.java

@@ -0,0 +1,62 @@
+package cn.com.qmth.examcloud.core.questions.base.enums;
+
+import org.apache.commons.lang3.StringUtils;
+
+public enum ExportTemplateType {
+
+    PAPER_EXPORT("PAPER_EXPORT", "试卷导出"),
+
+    ANWSER_EXPORT("ANWSER_EXPORT", "答案导出"), OUTLINE_PAPER_EXPORT("OUTLINE_PAPER_EXPORT",
+            "离线试卷"), PAPER_VIEW("PAPER_VIEW", "试卷预览"),
+
+    ANWSER_VIEW("ANWSER_VIEW", "答案预览");
+
+    private ExportTemplateType(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    private String code;
+
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    ExportTemplateType(String name) {
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public static boolean checkCode(String v) {
+        if (StringUtils.isBlank(v)) {
+            return false;
+        }
+        for (ExportTemplateType e : ExportTemplateType.values()) {
+            if (e.getCode().equals(v)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static String getName(String v) {
+        if (StringUtils.isBlank(v)) {
+            return null;
+        }
+        for (ExportTemplateType e : ExportTemplateType.values()) {
+            if (e.getCode().equals(v)) {
+                return e.getName();
+            }
+        }
+        return null;
+    }
+}

+ 32 - 0
examcloud-core-questions-dao/src/main/java/cn/com/qmth/examcloud/core/questions/dao/ExportTemplateRepo.java

@@ -0,0 +1,32 @@
+package cn.com.qmth.examcloud.core.questions.dao;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExportTemplateEntity;
+
+public interface ExportTemplateRepo
+        extends JpaRepository<ExportTemplateEntity, Long>, JpaSpecificationExecutor<ExportTemplateEntity> {
+
+    ExportTemplateEntity findByIdAndRootOrgId(Long id, Long rootOrgId);
+
+    List<ExportTemplateEntity> findByRootOrgIdAndType(Long rootOrgId, String type);
+
+    List<ExportTemplateEntity> findByRootOrgIdAndTypeAndEnable(Long rootOrgId, String type, Boolean enable);
+
+    @Query(value = "delete from ec_q_export_template where root_org_id =?1 and id =?2", nativeQuery = true)
+    @Modifying
+    void deleteByRootOrgIdAndId(Long rootOrgId, Long id);
+
+    @Query(value = "update ec_q_export_template set enable=?3 where root_org_id =?1 and type =?2", nativeQuery = true)
+    @Modifying
+    void updateEnableByType(Long rootOrgId, String type, Boolean enable);
+
+    @Query(value = "update ec_q_export_template set enable=?3 where root_org_id =?1 and id =?2", nativeQuery = true)
+    @Modifying
+    void updateEnableById(Long rootOrgId, Long id, Boolean enable);
+}

+ 121 - 0
examcloud-core-questions-dao/src/main/java/cn/com/qmth/examcloud/core/questions/dao/entity/ExportTemplateEntity.java

@@ -0,0 +1,121 @@
+package cn.com.qmth.examcloud.core.questions.dao.entity;
+
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.Index;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+
+import cn.com.qmth.examcloud.core.questions.dao.entity.base.IdEntity;
+
+@Entity
+@Table(name = "ec_q_export_template", indexes = {
+        @Index(name = "IDX_Q_EXPORT_TEMPLATE_01", columnList = "rootOrgId", unique = false) })
+public class ExportTemplateEntity extends IdEntity {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 15887776621406032L;
+
+    @NotNull
+    private Long rootOrgId;
+
+    @NotNull
+    private String type;
+
+    @NotNull
+    private String fileName;
+
+    @NotNull
+    private String suffix;
+
+    @NotNull
+    private String filePath;
+
+    @NotNull
+    private String fileKey;
+
+    @NotNull
+    private Boolean enable;
+
+    @NotNull
+    private Date creationTime;
+
+    @NotNull
+    private String createUser;
+
+    public Long getRootOrgId() {
+        return rootOrgId;
+    }
+
+    public void setRootOrgId(Long rootOrgId) {
+        this.rootOrgId = rootOrgId;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public String getSuffix() {
+        return suffix;
+    }
+
+    public void setSuffix(String suffix) {
+        this.suffix = suffix;
+    }
+
+    public String getFilePath() {
+        return filePath;
+    }
+
+    public void setFilePath(String filePath) {
+        this.filePath = filePath;
+    }
+
+    public String getFileKey() {
+        return fileKey;
+    }
+
+    public void setFileKey(String fileKey) {
+        this.fileKey = fileKey;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public Date getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Date creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    public String getCreateUser() {
+        return createUser;
+    }
+
+    public void setCreateUser(String createUser) {
+        this.createUser = createUser;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+}

+ 17 - 19
examcloud-core-questions-dao/src/main/java/cn/com/qmth/examcloud/core/questions/dao/entity/base/IdEntity.java

@@ -1,34 +1,32 @@
-/*
- * *************************************************
- * Copyright (c) 2019 QMTH. All Rights Reserved.
- * Created by Deason on 2019-05-05 14:12:39.
- * *************************************************
- */
-
 package cn.com.qmth.examcloud.core.questions.dao.entity.base;
 
 import java.io.Serializable;
 
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
 /**
- * MySql 自增ID
- *
- * @author: fengdesheng
- * @since: 2019/5/5
+ * Created by zhengmin on 2016/12/15.
  */
-//@MappedSuperclass
+@MappedSuperclass
 public abstract class IdEntity implements Serializable {
-    private static final long serialVersionUID = 1L;
 
-    //@Id
-    //@GeneratedValue(strategy = GenerationType.IDENTITY)
-    protected Long id;
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -4046980867984924958L;
 
-    public Long getId() {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private long id;
+
+    public long getId() {
         return id;
     }
 
-    public void setId(Long id) {
+    public void setId(long id) {
         this.id = id;
     }
-
 }

+ 8 - 5
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ExportPaperService.java

@@ -1,22 +1,25 @@
 package cn.com.qmth.examcloud.core.questions.service;
 
-import cn.com.qmth.examcloud.core.questions.dao.entity.Course;
-
-import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
 
+import javax.servlet.http.HttpServletResponse;
+
+import cn.com.qmth.examcloud.core.questions.dao.entity.Course;
+
 public interface ExportPaperService {
 
     /**
      * 导出单个试卷,答案,机考数据包
      */
-    public void exportPaperFile(String paperId, String serviceName, String exportContentList, HttpServletResponse response, String loginName, String examType, String psw) throws Exception;
+    public void exportPaperFile(String paperId, String serviceName, String exportContentList,
+            HttpServletResponse response, String loginName, String examType, String psw, Long rootOrgId);
 
     /**
      * 批量导出试卷,答案,机考数据包
      */
-    public void exportPaperFiles(List<String> paperList, String serviceName, String exportContentList, HttpServletResponse response, String loginName, String examType) throws Exception;
+    public void exportPaperFiles(List<String> paperList, String serviceName, String exportContentList,
+            HttpServletResponse response, String loginName, String examType, Long rootOrgId) throws Exception;
 
     /**
      * 导出课程下的试题分布Excel(按课程)

+ 24 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ExportTemplateService.java

@@ -0,0 +1,24 @@
+package cn.com.qmth.examcloud.core.questions.service;
+
+import org.springframework.data.domain.Page;
+import org.springframework.web.multipart.MultipartFile;
+
+import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.core.questions.base.dto.ExportTemplateDto;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
+
+public interface ExportTemplateService {
+
+    void delete(Long rootOrgId, Long id);
+
+    Page<ExportTemplateDto> getPage(Long rootOrgId, String fileName, String type, int curPage, int pageSize);
+
+    void enable(Long rootOrgId, Long id);
+
+    void disenable(Long rootOrgId, Long id);
+
+    void addFile(User user, String templateName, String type, MultipartFile dataFile);
+
+    String getExportTemplateName(ExportTemplateType type, Long rootOrgId);
+
+}

+ 71 - 56
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/converter/PrintExamPaperService.java

@@ -1,17 +1,38 @@
 /*
- * *************************************************
- * Copyright (c) 2018 QMTH. All Rights Reserved.
- * Created by Deason on 2018-07-12 15:33:35.
+ * ************************************************* Copyright (c) 2018 QMTH.
+ * All Rights Reserved. Created by Deason on 2018-07-12 15:33:35.
  * *************************************************
  */
 
 package cn.com.qmth.examcloud.core.questions.service.converter;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.io.FileUtils;
+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 cn.com.qmth.examcloud.core.questions.base.IoUtils;
 import cn.com.qmth.examcloud.core.questions.base.converter.model.Constants;
 import cn.com.qmth.examcloud.core.questions.base.converter.model.PolicyType;
 import cn.com.qmth.examcloud.core.questions.base.converter.model.QuesStructType;
-import cn.com.qmth.examcloud.core.questions.base.converter.model.dps.*;
+import cn.com.qmth.examcloud.core.questions.base.converter.model.dps.PaperAnswerDto;
+import cn.com.qmth.examcloud.core.questions.base.converter.model.dps.PaperDetailDto;
+import cn.com.qmth.examcloud.core.questions.base.converter.model.dps.PaperDto;
+import cn.com.qmth.examcloud.core.questions.base.converter.model.dps.PolicyDto;
+import cn.com.qmth.examcloud.core.questions.base.converter.model.dps.PolicyWeightDto;
+import cn.com.qmth.examcloud.core.questions.base.converter.model.dps.QuestionDto;
+import cn.com.qmth.examcloud.core.questions.base.converter.model.dps.QuestionOptionDto;
+import cn.com.qmth.examcloud.core.questions.base.converter.model.dps.SimpleQuestionDto;
 import cn.com.qmth.examcloud.core.questions.base.converter.model.platform.PaperDetailVo;
 import cn.com.qmth.examcloud.core.questions.base.converter.model.platform.PaperVo;
 import cn.com.qmth.examcloud.core.questions.base.converter.model.platform.QuestionVo;
@@ -26,28 +47,22 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetailUnit;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.service.PaperDetailService;
 import cn.com.qmth.examcloud.core.questions.service.PaperService;
-import org.apache.commons.io.FileUtils;
-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.*;
 
 /**
  * 分布式印刷考试的试卷转换服务类
  */
 @Service
 public class PrintExamPaperService {
+
     private static Logger log = LoggerFactory.getLogger(PrintExamPaperService.class);
+
     @Autowired
     private PaperService paperService;
+
     @Autowired
     private PaperDetailService paperDetailService;
 
-    public void downloadPaper(List<Paper> oldPapers, String dirPath, String password) throws Exception {
+    public void downloadPaper(List<Paper> oldPapers, String dirPath, String password) {
         if (oldPapers == null || oldPapers.size() == 0) {
             throw new IllegalArgumentException("Paper list size is empty.");
         }
@@ -60,14 +75,14 @@ public class PrintExamPaperService {
             }
         }
         log.info("exportPrintExamPaper start!");
-        //提取题库试卷的数据
+        // 提取题库试卷的数据
         List<PaperVo> papers = new ArrayList<>();
         for (Paper oldPaper : oldPapers) {
             List<PaperDetail> oldDetails = paperService.findPaperDetailsById(oldPaper.getId());
             if (oldDetails == null || oldDetails.size() == 0) {
                 continue;
             }
-            //封装试卷
+            // 封装试卷
             PaperVo paper = new PaperVo();
             paper.setId(oldPaper.getId());
             paper.setName(oldPaper.getName());
@@ -82,7 +97,7 @@ public class PrintExamPaperService {
                 if (oldDetailUnits == null || oldDetailUnits.size() == 0) {
                     continue;
                 }
-                //封装大题
+                // 封装大题
                 PaperDetailVo detail = new PaperDetailVo();
                 detail.setNumber(oldDetail.getNumber());
                 detail.setName(oldDetail.getName());
@@ -92,7 +107,7 @@ public class PrintExamPaperService {
                 for (int i = 0; i < oldDetailUnits.size(); i++) {
                     PaperDetailUnit oldDetailUnit = oldDetailUnits.get(i);
                     Question oldQuestion = oldDetailUnit.getQuestion();
-                    //封装试题
+                    // 封装试题
                     QuestionVo question = new QuestionVo();
                     question.setNumber(i + 1);
                     question.setId(oldDetailUnit.getId());
@@ -104,7 +119,7 @@ public class PrintExamPaperService {
                     question.setOptions(ConvertQuestion.parseOption(oldQuestion));
                     questions.add(question);
 
-                    //封装套题
+                    // 封装套题
                     List<Question> oldSubQuestions = oldQuestion.getSubQuestions();
                     if (oldSubQuestions == null || oldSubQuestions.size() == 0) {
                         continue;
@@ -139,28 +154,28 @@ public class PrintExamPaperService {
     /**
      * 将题库试卷格式转换为分布式印刷的试卷格式
      */
-    public void convert(List<PaperVo> papers, String dirPath, String password) throws Exception {
+    public void convert(List<PaperVo> papers, String dirPath, String password) {
         if (papers == null || papers.size() == 0) {
             log.warn("No paper to convert.");
             return;
         }
-        //临时目录
+        // 临时目录
         dirPath = dirPath.replaceAll("\\\\", "/");
         final String tempName = ExamFileType.PRINT_EXAM_PACKAGE.getName() + "_" + FileUtil.generateDateName();
         final String tempDir = dirPath + "/" + tempName;
         final String tempFilePath = dirPath + "/" + tempName + ".zip";
         FileUtil.makeDirs(tempDir);
 
-        //汇总课程编码
+        // 汇总课程编码
         Set<String> courseCodes = new HashSet<>();
         for (PaperVo paper : papers) {
             courseCodes.add(paper.getCourseCode());
         }
 
-        //按"课程编码"封装试卷,数据文件转换保存到临时目录
+        // 按"课程编码"封装试卷,数据文件转换保存到临时目录
         this.parseCoursePapers(courseCodes, papers, tempDir, password);
 
-        //压缩转换后的数据包
+        // 压缩转换后的数据包
         File tempDirFile = new File(tempDir);
         File tempFile = new File(tempFilePath);
         FileUtil.doZip(tempDirFile, tempFile);
@@ -171,12 +186,12 @@ public class PrintExamPaperService {
      * 按"课程编码"汇总试卷,数据文件转换保存到临时目录
      */
     private void parseCoursePapers(Set<String> courseCodes, List<PaperVo> papers, String tempDir, String password) {
-        //试卷和答案分开汇总到不同文件夹
+        // 试卷和答案分开汇总到不同文件夹
         final String paperDir = tempDir + "/paper";
         final String answerDir = tempDir + "/answer";
-        String key = null;//加密密匙
+        String key = null;// 加密密匙
         if (StringUtils.isNotBlank(password)) {
-            //用密码生成密匙
+            // 用密码生成密匙
             key = Cryptogram.convertKey(password);
         }
         JsonMapper mapper = JsonMapper.nonNullMapper();
@@ -190,7 +205,7 @@ public class PrintExamPaperService {
                 this.parsePaper(paper, paperList, answerList);
             }
             if (key != null) {
-                //加密试卷和答案
+                // 加密试卷和答案
                 this.aesPaper(paperList, key);
                 this.aesAnswer(answerList, key);
             }
@@ -198,7 +213,7 @@ public class PrintExamPaperService {
             FileUtil.saveAsFile(paperDir + "/" + courseCode + "/" + Constants.FILE_PAPER, mapper.toJson(paperList));
             FileUtil.saveAsFile(paperDir + "/" + courseCode + "/" + Constants.FILE_POLICY, mapper.toJson(policyList));
             FileUtil.saveAsFile(answerDir + "/" + courseCode + "/" + Constants.FILE_ANSWER, mapper.toJson(answerList));
-            //json = CommonUtils.replaceUnicodeStr(json);//todo
+            // json = CommonUtils.replaceUnicodeStr(json);//todo
         }
 
         File paperZipFile = new File(tempDir + "/paper.zip");
@@ -208,10 +223,10 @@ public class PrintExamPaperService {
         FileUtil.doZip(paperDirFile, paperZipFile);
         FileUtil.doZip(answerDirFile, answerZipFile);
 
-        short[] paperHeaders = {1, 1};//试卷头信息
-        short[] paperAesHeaders = {1, 2};//试卷加密头信息
-        short[] answerHeaders = {2, 1};//答案头信息
-        short[] answerAesHeaders = {2, 2};//答案加密头信息
+        short[] paperHeaders = { 1, 1 };// 试卷头信息
+        short[] paperAesHeaders = { 1, 2 };// 试卷加密头信息
+        short[] answerHeaders = { 2, 1 };// 答案头信息
+        short[] answerAesHeaders = { 2, 2 };// 答案加密头信息
         if (StringUtils.isNotBlank(password)) {
             String sign = Cryptogram.md5Key(password);
             FileUtil.appendHeader(paperZipFile, paperAesHeaders, sign);
@@ -224,24 +239,24 @@ public class PrintExamPaperService {
         IoUtils.removeFile(paperZipFile);
         IoUtils.removeFile(answerZipFile);
 
-        //FileUtils.deleteQuietly(paperDirFile);
-        //FileUtils.deleteQuietly(answerDirFile);
+        // FileUtils.deleteQuietly(paperDirFile);
+        // FileUtils.deleteQuietly(answerDirFile);
     }
 
     /**
      * 解析试卷
      */
     private void parsePaper(PaperVo paper, List<PaperDto> paperList, List<PaperAnswerDto> answerList) {
-        //试卷类型给默认值A-Z
+        // 试卷类型给默认值A-Z
         String paperType = NumUtil.toEnNumber(paperList.size() + 1);
-        //封装试卷完整信息
+        // 封装试卷完整信息
         PaperDto newPaper = new PaperDto(paper);
         newPaper.setPaperType(paperType);
         List<PaperDetailVo> details = paper.getDetails();
         if (details == null || details.size() == 0) {
             throw new IllegalArgumentException("试卷的大题不能为空!");
         }
-        Double paperScore = 0d;//试卷总分
+        Double paperScore = 0d;// 试卷总分
         PaperAnswerDto newAnswer = new PaperAnswerDto(paper.getId());
         List<PaperDetailDto> newDetails = new ArrayList<>();
         for (PaperDetailVo detail : details) {
@@ -249,20 +264,20 @@ public class PrintExamPaperService {
             if (questions == null || questions.size() == 0) {
                 throw new IllegalArgumentException("试卷大题下的试题不能为空!");
             }
-            Double detailScore = 0d;//大题总分
+            Double detailScore = 0d;// 大题总分
             PaperDetailDto newDetail = new PaperDetailDto(detail);
             for (QuestionVo question : questions) {
-                //封装试题
+                // 封装试题
                 QuestionDto newQuestion = new QuestionDto(question);
-                //封装试题答案
+                // 封装试题答案
                 SimpleQuestionDto simpleQuestion = new SimpleQuestionDto(question);
                 if (question.hasSubQuestion()) {
-                    Double questionScore = 0d;//套题总分
+                    Double questionScore = 0d;// 套题总分
                     for (QuestionVo subQuestion : question.getSubQuestions()) {
-                        //封装子试题
+                        // 封装子试题
                         QuestionDto newSubQuestion = new QuestionDto(subQuestion);
                         newQuestion.addSubQuestion(newSubQuestion);
-                        //封装子试题答案
+                        // 封装子试题答案
                         SimpleQuestionDto subSimpleQuestion = new SimpleQuestionDto(subQuestion);
                         subSimpleQuestion.setNumber(subQuestion.getNumber());
                         simpleQuestion.addSubQuestion(subSimpleQuestion);
@@ -288,7 +303,7 @@ public class PrintExamPaperService {
      * 解析试卷试题
      */
     private List<PaperDetailDto> parseDetails(List<PaperDetailDto> details) {
-        //聚合同类题,并重新计算每道大题的总分以及题号顺序
+        // 聚合同类题,并重新计算每道大题的总分以及题号顺序
         List<PaperDetailDto> allDetails = new ArrayList<>();
         PaperDetailDto singleDetail = new PaperDetailDto(QuesStructType.SINGLE_ANSWER_QUESTION.getName());
         PaperDetailDto multipleDetail = new PaperDetailDto(QuesStructType.MULTIPLE_ANSWER_QUESTION.getName());
@@ -368,7 +383,7 @@ public class PrintExamPaperService {
         List<PolicyDto> policyList = new ArrayList<>();
         Map<String, List<String>> maps = new HashMap<>();
         for (PaperDto paper : papers) {
-            //按试卷类型封装试卷ID
+            // 按试卷类型封装试卷ID
             List<String> ids = maps.get(paper.getPaperType());
             if (ids == null) {
                 ids = new ArrayList<>();
@@ -376,7 +391,7 @@ public class PrintExamPaperService {
             ids.add(paper.getId());
             maps.put(paper.getPaperType(), ids);
         }
-        //生成默认调卷规则
+        // 生成默认调卷规则
         for (Map.Entry<String, List<String>> entry : maps.entrySet()) {
             PolicyDto policy = new PolicyDto();
             policy.setType(PolicyType.Random.getId());
@@ -388,7 +403,7 @@ public class PrintExamPaperService {
             if (ids.size() == 0) {
                 continue;
             }
-            //计算每份试卷的随机抽取权重
+            // 计算每份试卷的随机抽取权重
             double weight = 1d / ids.size();
             for (String id : ids) {
                 policy.addWeight(new PolicyWeightDto(id, weight));
@@ -411,7 +426,7 @@ public class PrintExamPaperService {
                     List<QuestionOptionDto> options = question.getOptions();
                     if (options != null) {
                         for (QuestionOptionDto option : options) {
-                            String newBody = Cryptogram.aesEncrypt(option.getBody(), key);//加密选项内容
+                            String newBody = Cryptogram.aesEncrypt(option.getBody(), key);// 加密选项内容
                             option.setBody(newBody);
                         }
                     }
@@ -421,15 +436,15 @@ public class PrintExamPaperService {
                             List<QuestionOptionDto> subOptions = subQuestion.getOptions();
                             if (subOptions != null) {
                                 for (QuestionOptionDto option : subOptions) {
-                                    String newBody = Cryptogram.aesEncrypt(option.getBody(), key);//加密(子题)选项内容
+                                    String newBody = Cryptogram.aesEncrypt(option.getBody(), key);// 加密(子题)选项内容
                                     option.setBody(newBody);
                                 }
                             }
-                            String newBody = Cryptogram.aesEncrypt(subQuestion.getBody(), key);//加密(子题)题干内容
+                            String newBody = Cryptogram.aesEncrypt(subQuestion.getBody(), key);// 加密(子题)题干内容
                             subQuestion.setBody(newBody);
                         }
                     }
-                    String newBody = Cryptogram.aesEncrypt(question.getBody(), key);//加密题干内容
+                    String newBody = Cryptogram.aesEncrypt(question.getBody(), key);// 加密题干内容
                     question.setBody(newBody);
                 }
             }
@@ -447,11 +462,11 @@ public class PrintExamPaperService {
                 List<SimpleQuestionDto> subQuestions = question.getSubQuestions();
                 if (subQuestions != null) {
                     for (SimpleQuestionDto subQuestion : subQuestions) {
-                        String newAnswer = Cryptogram.aesEncrypt(subQuestion.getAnswer(), key);//加密答案内容
+                        String newAnswer = Cryptogram.aesEncrypt(subQuestion.getAnswer(), key);// 加密答案内容
                         subQuestion.setAnswer(newAnswer);
                     }
                 }
-                String newAnswer = Cryptogram.aesEncrypt(question.getAnswer(), key);//加密答案内容
+                String newAnswer = Cryptogram.aesEncrypt(question.getAnswer(), key);// 加密答案内容
                 question.setAnswer(newAnswer);
             }
         }
@@ -463,12 +478,12 @@ public class PrintExamPaperService {
     @SuppressWarnings("unused")
     private List<File> parseDataFiles(final String dirPath, File zipFile) throws Exception {
         List<File> dataFileList = new ArrayList<>();
-        //解压当前文件
+        // 解压当前文件
         List<File> fileList = FileUtil.unZip(new File(dirPath), zipFile);
         if (fileList == null || fileList.size() == 0) {
             return dataFileList;
         }
-        //解压当前文件内的其它ZIP文件,并提取JSON文件
+        // 解压当前文件内的其它ZIP文件,并提取JSON文件
         for (File curFile : fileList) {
             if (curFile.getName().toLowerCase().endsWith(Constants.ZIP)) {
                 final String curDir = FileUtil.getFilePathName(curFile.getAbsolutePath());

+ 45 - 33
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/BjhkExportPaperService.java

@@ -1,8 +1,15 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,11 +17,6 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author weiwenhai
@@ -26,67 +28,77 @@ import java.util.List;
 public class BjhkExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
 
-            DocxProcessUtil.exportWordNew(paperExp, file, BJHK_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, BJHK_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJHK_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJHK_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJHK_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJHK_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

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

@@ -1,8 +1,14 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,71 +16,76 @@ 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.bean.dto.PaperExp;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 @Service("bjjtExportPaperService")
 public class BjjtExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
 
-            DocxProcessUtil.exportWordNew(paperExp, file, BJJT_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, BJJT_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJJT_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJJT_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJJT_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJJT_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 45 - 33
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/BjsfExportPaperService.java

@@ -1,8 +1,15 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,11 +17,6 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author weiwenhai
@@ -26,67 +28,77 @@ import java.util.List;
 public class BjsfExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
-            DocxProcessUtil.exportWordNew(paperExp, file, BJSF_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, BJSF_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, BJSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 47 - 35
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/CqdxExportPaperService.java

@@ -1,8 +1,16 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
@@ -12,12 +20,6 @@ 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.bean.dto.PaperDetailExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
-import org.apache.commons.collections.CollectionUtils;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author weiwenhai
@@ -29,30 +31,33 @@ import java.util.List;
 public class CqdxExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
-            DocxProcessUtil.exportWordNew(paperExp, file, CQDX_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, CQDX_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
@@ -77,7 +82,7 @@ public class CqdxExportPaperService extends ExportPaperAbstractService {
                 }
                 perQuesScore = String.format("每小题%s分,", perQuesScore);
             } else {
-                perQuesScore = "";//每题分数不一致则不注明
+                perQuesScore = "";// 每题分数不一致则不注明
             }
 
             QuesStructType type = detail.getPaperDetailUnits().get(0).getQuestionType();
@@ -103,38 +108,45 @@ public class CqdxExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, CQDX_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, CQDX_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, CQDX_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, CQDX_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 48 - 35
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/CugbExportPaperService.java

@@ -1,17 +1,23 @@
 /*
- * *************************************************
- * Copyright (c) 2019 QMTH. All Rights Reserved.
- * Created by Deason on 2019-07-31 13:54:07.
+ * ************************************************* Copyright (c) 2019 QMTH.
+ * All Rights Reserved. Created by Deason on 2019-07-31 13:54:07.
  * *************************************************
  */
 
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 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.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -19,11 +25,6 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * 中国地质大学(北京)
@@ -33,29 +34,32 @@ import java.util.List;
  */
 @Service("cugbExportPaperService")
 public class CugbExportPaperService extends ExportPaperAbstractService {
+
     protected ExamCloudLog log = ExamCloudLogFactory.getLog(this.getClass());
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         log.debug("题库开始下载试卷...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = super.initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
-            DocxProcessUtil.exportWordNew(paperExp, file, CUGB_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             long docxImgTime = System.currentTimeMillis();
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
             long docxImgEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxImgEndTime - docxImgTime) + "ms");
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
             long aduioTime = System.currentTimeMillis();
             log.debug("处理音频耗时:" + (aduioTime - docxImgEndTime) + "ms");
@@ -63,17 +67,18 @@ public class CugbExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         log.debug("题库开始下载答案...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
             long docxTime = System.currentTimeMillis();
-            DocxProcessUtil.exportWordNew(paperExp, file, CUGB_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
             long docxEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxEndTime - docxTime) + "ms");
@@ -81,34 +86,42 @@ public class CugbExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, CUGB_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, CUGB_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, CUGB_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, CUGB_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }

+ 45 - 33
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/DbsfExportPaperService.java

@@ -1,8 +1,15 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,11 +17,6 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author weiwenhai
@@ -26,67 +28,77 @@ import java.util.List;
 public class DbsfExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
 
-            DocxProcessUtil.exportWordNew(paperExp, file, DBSF_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, DBSF_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, DBSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, DBSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, DBSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, DBSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 66 - 48
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/DzkdExportPaperService.java

@@ -1,21 +1,32 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
-import cn.com.qmth.examcloud.core.questions.dao.entity.*;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
+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.Question;
+import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionTypeNum;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailUnitExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.math.BigDecimal;
-import java.util.*;
 
 /**
  * @author chenken
@@ -26,26 +37,28 @@ import java.util.*;
 @Service("dzkdExportPaperService")
 public class DzkdExportPaperService extends ExportPaperAbstractService {
 
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
-        //电子科大独有
+        // 电子科大独有
         setSplitPaperDetailExp(paperExp, paperExp.getPaperDetails());
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, DZKD_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
     }
 
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
-        //电子科大独有
+        // 电子科大独有
         setSplitPaperDetailExp(paperExp, paperExp.getPaperDetails());
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, DZKD_TEMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
@@ -58,12 +71,12 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
         int index = 0;
         Map<Long, List<PaperDetailUnitExp>> map = new HashMap<>();
 
-        //循环所有大题,将同类型的小题放到同一个集合下面
+        // 循环所有大题,将同类型的小题放到同一个集合下面
         for (PaperDetailExp detail : details) {
-            //单选,多选,判断放在同一集合下排序
+            // 单选,多选,判断放在同一集合下排序
             List<PaperDetailUnitExp> units;
             Long sortNumber = detail.getSortNumber();
-            //前四道大题为客观题区
+            // 前四道大题为客观题区
             if (sortNumber < 5L) {
                 units = map.get(sortNumber);
                 if (units == null) {
@@ -79,14 +92,14 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
             }
         }
 
-        //循环所有小题,给小题排序
+        // 循环所有小题,给小题排序
         for (Long sortNumber : map.keySet()) {
             List<PaperDetailUnitExp> utils = map.get(sortNumber);
             if (CollectionUtils.isEmpty(utils)) {
                 continue;
             }
 
-            int number = 1;//小题号
+            int number = 1;// 小题号
             for (int i = 0; i < utils.size(); i++) {
                 PaperDetailUnitExp unit = utils.get(i);
                 if (unit.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
@@ -124,7 +137,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
                 }
                 perQuesScore = String.format("每小题%s分,", perQuesScore);
             } else {
-                perQuesScore = "";//每题分数不一致则不注明
+                perQuesScore = "";// 每题分数不一致则不注明
             }
 
             QuesStructType type = detail.getPaperDetailUnits().get(0).getQuestionType();
@@ -144,10 +157,10 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
             } else if (type == QuesStructType.BOOL_ANSWER_QUESTION) {
                 detail.setTitleDetail("正确的填涂A、错误填涂B。错涂、多涂或未涂均无分");
             } else if (type == QuesStructType.FILL_BLANK_QUESTION) {
-                //计算填空题空格数量
+                // 计算填空题空格数量
                 int blanksNumbers = blanksNumbers(detail);
 
-                //设置填空题题干中 开始空格 和 结束空格
+                // 设置填空题题干中 开始空格 和 结束空格
                 lastBlank = firstBlank + blanksNumbers;
 
                 String perFillScore = checkPaperDetailUnitblanksScore(detail);
@@ -158,10 +171,11 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
                     }
                     perFillScore = String.format("每空%s分,", perFillScore);
                 } else {
-                    perFillScore = "";//每空分数不一致则不注明
+                    perFillScore = "";// 每空分数不一致则不注明
                 }
 
-                title = String.format("(本大题共%s个空格,将每空答在答题卡“%s-%s”相应的序号上,%s共%s分)", blanksNumbers, (firstBlank + 1), lastBlank, perFillScore, detailScore);
+                title = String.format("(本大题共%s个空格,将每空答在答题卡“%s-%s”相应的序号上,%s共%s分)", blanksNumbers, (firstBlank + 1),
+                        lastBlank, perFillScore, detailScore);
                 firstBlank = lastBlank;
             }
 
@@ -181,7 +195,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
         for (PaperDetailUnitExp paperDetailUnitExp : paperDetailUnitExps) {
             String str = paperDetailUnitExp.getQuestion().getQuesAnswer();
             if (str.indexOf("##") > -1) {
-                //将所有( 替换为空
+                // 将所有( 替换为空
                 String str1 = str.replaceAll("##", "");
                 blanksNumbers += ((str.length() - str1.length()) / 2 + 1);
             } else {
@@ -198,7 +212,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
         int blanksNumbers = 0;
         String str = unitExp.getQuestion().getQuesAnswer();
         if (str.indexOf("##") > -1) {
-            //将所有( 替换为空
+            // 将所有( 替换为空
             String str1 = str.replaceAll("##", "");
             blanksNumbers += ((str.length() - str1.length()) / 2 + 1);
         } else {
@@ -211,8 +225,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
      * 校验大题下的每个填空题空格分数是否一样
      *
      * @param paperDetailExp
-     * @return 如果分数一样,返回分数
-     * 如果分数不一样,返回 null
+     * @return 如果分数一样,返回分数 如果分数不一样,返回 null
      */
     protected String checkPaperDetailUnitblanksScore(PaperDetailExp paperDetailExp) {
         List<PaperDetailUnitExp> paperDetailUnitExps = paperDetailExp.getPaperDetailUnits();
@@ -248,25 +261,25 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
         }
         PaperExp.setObjectiveDetails(objectiveDetails);
         PaperExp.setSubjectiveDetails(subjectiveDetails);
-        //主观题   客观题的标题显示
+        // 主观题 客观题的标题显示
         showTitle(PaperExp);
     }
 
     /**
-     * 主观题   客观题的标题显示
+     * 主观题 客观题的标题显示
      */
     private void showTitle(PaperExp paperExp) {
         String title = "";
         List<PaperDetailExp> objectiveDetails = paperExp.getObjectiveDetails();
         List<PaperDetailExp> subjectiveDetails = paperExp.getSubjectiveDetails();
-        //设置客观题的标题
+        // 设置客观题的标题
         if (objectiveDetails != null && objectiveDetails.size() > 0) {
             Double score = 0.0;
             for (PaperDetailExp objectiveDetail : objectiveDetails) {
                 score += objectiveDetail.getScore();
             }
             String scores = BigDecimal.valueOf(score).stripTrailingZeros().toPlainString();
-            //判断是否有主观题
+            // 判断是否有主观题
             if (subjectiveDetails == null || subjectiveDetails.size() < 1) {
                 title = "客观题(总分" + scores + "分)";
                 paperExp.setObjectiveTitle(title);
@@ -281,7 +294,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
                 score += objectiveDetail.getScore();
             }
             String scores = BigDecimal.valueOf(score).stripTrailingZeros().toPlainString();
-            //判断是否有客观题
+            // 判断是否有客观题
             if (objectiveDetails == null || objectiveDetails.size() < 1) {
                 title = "主观题(总分" + scores + "分)";
                 paperExp.setSubjectiveTitle(title);
@@ -293,33 +306,38 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         setSplitPaperDetailExp(paperExp, paperExp.getPaperDetails());
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //没有试卷结构导出设置
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, DZKD_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, DZKD_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, DZKD_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, DZKD_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 420 - 276
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ExportPaperAbstractService.java


+ 48 - 37
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/FdsfExportPaperService.java

@@ -1,17 +1,23 @@
 /*
- * *************************************************
- * Copyright (c) 2019 QMTH. All Rights Reserved.
- * Created by Deason on 2019-05-15 16:06:29.
+ * ************************************************* Copyright (c) 2019 QMTH.
+ * All Rights Reserved. Created by Deason on 2019-05-15 16:06:29.
  * *************************************************
  */
 
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 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.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -19,15 +25,9 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
- * 华东师范大学
- * 题库导出、上传服务类
+ * 华东师范大学 题库导出、上传服务类
  */
 @Service("fdsfExportPaperService")
 public class FdsfExportPaperService extends ExportPaperAbstractService {
@@ -35,27 +35,29 @@ public class FdsfExportPaperService extends ExportPaperAbstractService {
     protected ExamCloudLog log = ExamCloudLogFactory.getLog(this.getClass());
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         log.debug("题库开始下载试卷...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = super.initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
 
-            DocxProcessUtil.exportWordNew(paperExp, file, FDSF_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             long docxImgTime = System.currentTimeMillis();
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
             long docxImgEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxImgEndTime - docxImgTime) + "ms");
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
             long aduioTime = System.currentTimeMillis();
             log.debug("处理音频耗时:" + (aduioTime - docxImgEndTime) + "ms");
@@ -63,17 +65,18 @@ public class FdsfExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         log.debug("题库开始下载答案...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
             long docxTime = System.currentTimeMillis();
-            DocxProcessUtil.exportWordNew(paperExp, file, FDSF_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
             long docxEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxEndTime - docxTime) + "ms");
@@ -81,34 +84,42 @@ public class FdsfExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, FDSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, FDSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, FDSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, FDSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }

+ 45 - 33
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/FjsfExportPaperService.java

@@ -1,10 +1,17 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 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.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -12,11 +19,6 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author weiwenhai
@@ -30,27 +32,29 @@ public class FjsfExportPaperService extends ExportPaperAbstractService {
     protected ExamCloudLog log = ExamCloudLogFactory.getLog(this.getClass());
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         log.debug("题库开始下载试卷...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = super.initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
 
-            DocxProcessUtil.exportWordNew(paperExp, file, FJSF_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             long docxImgTime = System.currentTimeMillis();
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
             long docxImgEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxImgEndTime - docxImgTime) + "ms");
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
             long aduioTime = System.currentTimeMillis();
             log.debug("处理音频耗时:" + (aduioTime - docxImgEndTime) + "ms");
@@ -58,17 +62,18 @@ public class FjsfExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         log.debug("题库开始下载答案...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
             long docxTime = System.currentTimeMillis();
-            DocxProcessUtil.exportWordNew(paperExp, file, FJSF_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
             long docxEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxEndTime - docxTime) + "ms");
@@ -76,38 +81,45 @@ public class FjsfExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, FJSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, FJSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, FJSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, FJSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

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

@@ -1,8 +1,14 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,71 +16,76 @@ 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.bean.dto.PaperExp;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 @Service("hnsfExportPaperService")
 public class HnsfExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
 
-            DocxProcessUtil.exportWordNew(paperExp, file, HNSF_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, FJSF_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, HNSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, HNSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, HNSF_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, HNSF_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 35 - 25
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/HzkjExportPaperService.java

@@ -1,8 +1,15 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
@@ -12,11 +19,6 @@ 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.bean.dto.PaperDetailExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author chenken
@@ -28,51 +30,59 @@ import java.util.List;
 public class HzkjExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examTpye) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examTpye) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         setExportQuestionTitle(paperExp.getPaperDetails(), true);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, HZKJ_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, HZKJ_TEMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //没有试卷结构导出设置
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, HZKJ_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, HZKJ_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, HZKJ_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, HZKJ_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
@@ -95,7 +105,7 @@ public class HzkjExportPaperService extends ExportPaperAbstractService {
                 }
                 perQuesScore = String.format("每小题%s分,", perQuesScore);
             } else {
-                perQuesScore = "";//每题分数不一致则不注明
+                perQuesScore = "";// 每题分数不一致则不注明
             }
 
             QuesStructType type = detail.getPaperDetailUnits().get(0).getQuestionType();

+ 45 - 33
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/NkdxExportPaperService.java

@@ -1,10 +1,17 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 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.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -12,11 +19,6 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author weiwenhai
@@ -30,28 +32,30 @@ public class NkdxExportPaperService extends ExportPaperAbstractService {
     protected ExamCloudLog log = ExamCloudLogFactory.getLog(this.getClass());
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         log.debug("题库开始下载试卷...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = super.initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
 
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
 
-            DocxProcessUtil.exportWordNew(paperExp, file, NKDX_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             long docxImgTime = System.currentTimeMillis();
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
             long docxImgEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxImgEndTime - docxImgTime) + "ms");
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
             long aduioTime = System.currentTimeMillis();
             log.debug("处理音频耗时:" + (aduioTime - docxImgEndTime) + "ms");
@@ -59,17 +63,18 @@ public class NkdxExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         log.debug("题库开始下载答案...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
             long docxTime = System.currentTimeMillis();
-            DocxProcessUtil.exportWordNew(paperExp, file, NKDX_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
             long docxEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxEndTime - docxTime) + "ms");
@@ -77,38 +82,45 @@ public class NkdxExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, NKDX_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, NKDX_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, NKDX_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, NKDX_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

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

@@ -1,8 +1,14 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,10 +16,6 @@ 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.bean.dto.PaperExp;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author weiwenhai
@@ -25,60 +27,69 @@ import java.util.List;
 public class RjgcExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, RJGC_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, RJGC_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SXSF_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SXSF_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SXSF_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SXSF_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 33 - 24
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/SddxExportPaperService.java

@@ -1,8 +1,14 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,10 +16,6 @@ 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.bean.dto.PaperExp;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author chenken
@@ -25,58 +27,65 @@ import java.util.List;
 public class SddxExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File firectory = new File(TEMP_FILE_EXP + File.separator + zipFileName);
             if (!firectory.exists()) {
                 firectory.mkdirs();
             }
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, SDDX_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, SDDX_TEMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //没有试卷结构导出设置
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SDDX_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SDDX_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SDDX_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SDDX_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 48 - 35
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/SxsfExportPaperService.java

@@ -1,9 +1,17 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.ImageUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -11,12 +19,6 @@ 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.bean.dto.PaperExp;
-import org.apache.commons.lang3.StringUtils;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author chenken
@@ -28,10 +30,11 @@ import java.util.List;
 public class SxsfExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             List<WordprocessingMLPackage> wordPackages = getPkgList(paperId);
             if (OFFLINE.equals(examType)) {
@@ -41,65 +44,75 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
                 }
 
                 String examRemark = ImageUtils.reSizeImg(paperExp.getExamRemark());
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(examRemark)));
-                DocxProcessUtil.exportWordNew(paperExp, file, SXSF_OUTLINE_TEMPLATE_PAPER);
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(examRemark)));
+                DocxProcessUtil.exportWordNew(paperExp, file,
+                        getTemplate(rootOrgId, ExportTemplateType.OUTLINE_PAPER_EXPORT));
                 if (DocxProcessUtil.hasImage(examRemark)) {
                     wordPackages.add(wordMLPackage);
                 }
             } else {
-                DocxProcessUtil.exportWordNew(paperExp, file, SXSF_TEMPLATE_PAPER);
+                DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             }
 
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, wordPackages);
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, SXSF_TEMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SXSF_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SXSF_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SXSF_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, SXSF_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 76 - 53
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/SydxExportPaperService.java

@@ -1,32 +1,42 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.docx4j.XmlUtils;
+import org.docx4j.jaxb.Context;
+import org.docx4j.wml.Body;
+import org.docx4j.wml.P;
+import org.docx4j.wml.R;
+import org.docx4j.wml.Text;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
 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.Model;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.exception.PaperException;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
-import cn.com.qmth.examcloud.core.questions.dao.entity.*;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
+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.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.QuestionTypeNum;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailUnitExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
-import org.apache.commons.lang3.StringUtils;
-import org.docx4j.XmlUtils;
-import org.docx4j.jaxb.Context;
-import org.docx4j.wml.Body;
-import org.docx4j.wml.P;
-import org.docx4j.wml.R;
-import org.docx4j.wml.Text;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 
 /**
  * @author chenken
@@ -38,53 +48,60 @@ import java.util.List;
 public class SydxExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = initExportSydxPaper(paperId);
         if (paperExp != null) {
             String paperfileName = paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, SYDX_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
 
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initExportSydxPaper(paperId);
         if (paperExp != null) {
             String paperfileName = paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, SYDX_TEMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
 
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp exportPaperExp = initExportSydxPaper(paperId);
         PaperExp exportPaperStructureExp = initExportSydxPaper(paperId);
         if (exportPaperExp != null && exportPaperStructureExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //没有试卷结构导出设置
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(exportPaperExp, extractConfig, accessUser, currNum, SYDX_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(exportPaperExp, extractConfig, accessUser, currNum, SYDX_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(exportPaperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(exportPaperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(exportPaperStructureExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(exportPaperExp, extractConfig, accessUser, currNum, SYDX_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(exportPaperExp, extractConfig, accessUser, currNum, SYDX_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
-                uploadPaperStructure(exportPaperStructureExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(exportPaperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(exportPaperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
+                uploadPaperStructure(exportPaperStructureExp, extractConfig, accessUser, currNum, questionTypeNums,
+                        examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
@@ -97,18 +114,18 @@ public class SydxExportPaperService extends ExportPaperAbstractService {
      * @return
      */
     private PaperExp initExportSydxPaper(String id) throws Exception {
-        //获取paper
+        // 获取paper
         Paper paper = Model.of(paperRepo.findById(id));
         paperService.formatPaper(paper, null);
         if (paper == null) {
             throw new PaperException("该试卷不存在");
         }
-        //创建paperDto
+        // 创建paperDto
         PaperExp paperExp = BeanCopierUtil.copyProperties(paper, PaperExp.class);
 
         paperExp.setTitle(CommonUtils.PAPER_TITLE);
         paperExp.setSubTitle(CommonUtils.PAPER_SUB_TITLE);
-        //获取大题
+        // 获取大题
         List<PaperDetail> paperDetails = paperDetailRepo.findByPaperOrderByNumber(paper);
         List<PaperDetailExp> paperDetailExps = new ArrayList<PaperDetailExp>();
         for (PaperDetail paperDetail : paperDetails) {
@@ -117,11 +134,12 @@ public class SydxExportPaperService extends ExportPaperAbstractService {
             paperDetailExps.add(paperDetailExp);
         }
         paperExp.setPaperDetails(paperDetailExps);
-        //封装小题
+        // 封装小题
         for (int i = 0; i < paperDetailExps.size(); i++) {
             PaperDetailExp paperDetailExp = paperDetailExps.get(i);
             paperDetailExp.setTitle(getDetailTitle(paperDetailExp));
-            List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetailOrderByNumber(paperDetails.get(i));
+            List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo
+                    .findByPaperDetailOrderByNumber(paperDetails.get(i));
             setAnswerWord(paperDetailUnits);
             List<PaperDetailUnitExp> paperDetailUnitExps = new ArrayList<PaperDetailUnitExp>();
             for (PaperDetailUnit paperDetailUnit : paperDetailUnits) {
@@ -129,11 +147,11 @@ public class SydxExportPaperService extends ExportPaperAbstractService {
                 BeanUtils.copyProperties(paperDetailUnit, paperDetailUnitExp);
                 paperDetailUnitExps.add(paperDetailUnitExp);
             }
-            //选择题,套题下选择题  选项顺序重新排列
+            // 选择题,套题下选择题 选项顺序重新排列
             paperService.reorderChoicequestionOption(paperDetailUnitExps);
             paperDetailExps.get(i).setPaperDetailUnits(paperDetailUnitExps);
         }
-        //初始化试卷序号
+        // 初始化试卷序号
         initPaperNum(paperExp);
         return paperExp;
     }
@@ -261,7 +279,8 @@ public class SydxExportPaperService extends ExportPaperAbstractService {
             for (int i = 0; i < order.length; i++) {
                 for (QuesOption quesOption : quesOptions) {
                     if (order[i].equals(quesOption.getNumber()) && quesOption.getIsCorrect() == 1) {
-                        question.setQuesAnswerWord(getObjectAnswer(question.getQuesAnswerWord(), CommonUtils.getOptionNum(i)));
+                        question.setQuesAnswerWord(
+                                getObjectAnswer(question.getQuesAnswerWord(), CommonUtils.getOptionNum(i)));
                     }
                 }
             }
@@ -287,37 +306,41 @@ public class SydxExportPaperService extends ExportPaperAbstractService {
         int subNum = 0;
         Collections.sort(paperExp.getPaperDetails());
         for (PaperDetailExp paperDetail : paperExp.getPaperDetails()) {
-            //大题序号
+            // 大题序号
             paperDetail.setNumber(++mainNum);
             paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
-            if (paperDetail.getPaperDetailUnits() == null ||
-                    paperDetail.getPaperDetailUnits().size() == 0) {
+            if (paperDetail.getPaperDetailUnits() == null || paperDetail.getPaperDetailUnits().size() == 0) {
                 continue;
             }
-            //小题序号
+            // 小题序号
             for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
                 List<QuesOption> optionList = paperDetailUnit.getQuestion().getQuesOptions();
                 if (optionList != null && optionList.size() > 0) {
                     int index = 0;
                     for (QuesOption quesOption : optionList) {
-                        quesOption.setOptionBodyWord(initPaperExpService.setOptionNum(quesOption.getOptionBodyWord(), initPaperExpService.getOptionNum(index)));
+                        quesOption.setOptionBodyWord(initPaperExpService.setOptionNum(quesOption.getOptionBodyWord(),
+                                initPaperExpService.getOptionNum(index)));
                         index++;
                     }
                 }
                 List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
                 Question question = paperDetailUnit.getQuestion();
-                //套题序号
+                // 套题序号
                 if (subQuesList != null && subQuesList.size() > 0) {
-                    question.setQuesBodyWord(initPaperExpService.replaceQuesBlank(question.getQuesBodyWord(), subNum + 1));
+                    question.setQuesBodyWord(
+                            initPaperExpService.replaceQuesBlank(question.getQuesBodyWord(), subNum + 1));
                     for (Question subQues : subQuesList) {
                         int curSubNum = ++subNum;
-                        subQues.setQuesBodyWord(initPaperExpService.setSubQuesNum(subQues.getQuesBodyWord(), curSubNum));
-                        subQues.setQuesBodyWord(initPaperExpService.replaceQuesBlank(subQues.getQuesBodyWord(), curSubNum));
+                        subQues.setQuesBodyWord(
+                                initPaperExpService.setSubQuesNum(subQues.getQuesBodyWord(), curSubNum));
+                        subQues.setQuesBodyWord(
+                                initPaperExpService.replaceQuesBlank(subQues.getQuesBodyWord(), curSubNum));
                         List<QuesOption> subOptionList = subQues.getQuesOptions();
                         if (subOptionList != null && subOptionList.size() > 0) {
                             int sub_index = 0;
                             for (QuesOption quesOption : subOptionList) {
-                                quesOption.setOptionBodyWord(initPaperExpService.setOptionNum(quesOption.getOptionBodyWord(), initPaperExpService.getOptionNum(sub_index)));
+                                quesOption.setOptionBodyWord(initPaperExpService.setOptionNum(
+                                        quesOption.getOptionBodyWord(), initPaperExpService.getOptionNum(sub_index)));
                                 sub_index++;
                             }
                         }
@@ -325,11 +348,11 @@ public class SydxExportPaperService extends ExportPaperAbstractService {
                 } else {
                     int curSubNum = ++subNum;
                     question.setQuesBodyWord(initPaperExpService.setSubQuesNum(question.getQuesBodyWord(), curSubNum));
-                    question.setQuesBodyWord(initPaperExpService.replaceQuesBlank(question.getQuesBodyWord(), curSubNum));
+                    question.setQuesBodyWord(
+                            initPaperExpService.replaceQuesBlank(question.getQuesBodyWord(), curSubNum));
                 }
             }
         }
     }
 
-
 }

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

@@ -1,9 +1,17 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.ImageUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -11,12 +19,6 @@ 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.bean.dto.PaperExp;
-import org.apache.commons.lang3.StringUtils;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author chenken
@@ -28,75 +30,84 @@ import java.util.List;
 public class TjdxExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
 
             List<WordprocessingMLPackage> wordPackages = getPkgList(paperId);
             if (OFFLINE.equals(examType)) {
-                //生成考试说明的word片段
+                // 生成考试说明的word片段
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
                 if (StringUtils.isBlank(paperExp.getExamRemark())) {
                     paperExp.setExamRemark("<p></p>");
                 }
 
                 String examRemark = ImageUtils.reSizeImg(paperExp.getExamRemark());
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(examRemark)));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(examRemark)));
 
-                DocxProcessUtil.exportWordNew(paperExp, file, TJDX_OUTLINE_TEMPLATE_PAPER);
+                DocxProcessUtil.exportWordNew(paperExp, file,
+                        getTemplate(rootOrgId, ExportTemplateType.OUTLINE_PAPER_EXPORT));
                 if (DocxProcessUtil.hasImage(examRemark)) {
                     wordPackages.add(wordMLPackage);
                 }
             } else {
-                DocxProcessUtil.exportWordNew(paperExp, file, TJDX_TEMPLATE_PAPER);
+                DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             }
 
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, wordPackages);
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, TJDX_TEMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //没有试卷结构导出设置
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, TJDX_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, TJDX_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, TJDX_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, TJDX_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 48 - 35
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/WheqxExportPaperService.java

@@ -1,17 +1,23 @@
 /*
- * *************************************************
- * Copyright (c) 2019 QMTH. All Rights Reserved.
- * Created by Deason on 2019-07-31 13:58:57.
+ * ************************************************* Copyright (c) 2019 QMTH.
+ * All Rights Reserved. Created by Deason on 2019-07-31 13:58:57.
  * *************************************************
  */
 
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 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.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -19,11 +25,6 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * 武汉市第二轻工业学校学校
@@ -33,30 +34,33 @@ import java.util.List;
  */
 @Service("wheqxExportPaperService")
 public class WheqxExportPaperService extends ExportPaperAbstractService {
+
     protected ExamCloudLog log = ExamCloudLogFactory.getLog(this.getClass());
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         log.debug("题库开始下载试卷...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = super.initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
 
-            DocxProcessUtil.exportWordNew(paperExp, file, WHEQX_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             long docxImgTime = System.currentTimeMillis();
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
             long docxImgEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxImgEndTime - docxImgTime) + "ms");
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
             long aduioTime = System.currentTimeMillis();
             log.debug("处理音频耗时:" + (aduioTime - docxImgEndTime) + "ms");
@@ -64,17 +68,18 @@ public class WheqxExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         log.debug("题库开始下载答案...");
         long startTime = System.currentTimeMillis();
         PaperExp paperExp = initPaperExp(paperId);
         long paperExpTime = System.currentTimeMillis();
         log.debug("拼装导出对象耗时:" + (paperExpTime - startTime) + "ms");
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
             long docxTime = System.currentTimeMillis();
-            DocxProcessUtil.exportWordNew(paperExp, file, WHEQX_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
             long docxEndTime = System.currentTimeMillis();
             log.debug("处理word文字+图片耗时:" + (docxEndTime - docxTime) + "ms");
@@ -82,34 +87,42 @@ public class WheqxExportPaperService extends ExportPaperAbstractService {
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, WHEQX_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, WHEQX_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, WHEQX_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, WHEQX_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }

+ 48 - 35
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/XnjdExportPaperService.java

@@ -1,9 +1,17 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.ImageUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -11,12 +19,6 @@ 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.bean.dto.PaperExp;
-import org.apache.commons.lang3.StringUtils;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author WEIWENHAI
@@ -28,10 +30,11 @@ import java.util.List;
 public class XnjdExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             List<WordprocessingMLPackage> wordPackages = getPkgList(paperId);
             if (OFFLINE.equals(examType)) {
@@ -41,65 +44,75 @@ public class XnjdExportPaperService extends ExportPaperAbstractService {
                 }
 
                 String examRemark = ImageUtils.reSizeImg(paperExp.getExamRemark());
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(examRemark)));
-                DocxProcessUtil.exportWordNew(paperExp, file, XNJD_OUTLINE_TEMPLATE_PAPER);
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(examRemark)));
+                DocxProcessUtil.exportWordNew(paperExp, file,
+                        getTemplate(rootOrgId, ExportTemplateType.OUTLINE_PAPER_EXPORT));
                 if (DocxProcessUtil.hasImage(examRemark)) {
                     wordPackages.add(wordMLPackage);
                 }
             } else {
-                DocxProcessUtil.exportWordNew(paperExp, file, XNJD_TEMPLATE_PAPER);
+                DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             }
 
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, wordPackages);
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, XNJD_TEMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, XNJD_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, XNJD_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, XNJD_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, XNJD_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

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

@@ -1,8 +1,14 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,70 +16,75 @@ 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.bean.dto.PaperExp;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 @Service("ykdxExportPaperService")
 public class YkdxExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
 
-            DocxProcessUtil.exportWordNew(paperExp, file, YKDX_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, YKDX_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, YKDX_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, YKDX_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, YKDX_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, YKDX_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 45 - 33
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ZgddbExportPaperService.java

@@ -1,8 +1,15 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,11 +17,6 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author weiwenhai
@@ -26,67 +28,77 @@ import java.util.List;
 public class ZgddbExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
 
-            DocxProcessUtil.exportWordNew(paperExp, file, ZGDDB_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, ZGDDB_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, ZGDDB_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, ZGDDB_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, ZGDDB_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, ZGDDB_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 47 - 35
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ZgddwExportPaperService.java

@@ -1,8 +1,15 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,84 +17,89 @@ 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.bean.dto.PaperExp;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
-
 
 /**
  * @author weiwenhai
  * @date 2018年7月25日 上午11:29:49
  * @company QMTH
- * @description 中国地质(武汉)大学导出、上传文件service ZGDDW_TMPLATE_PAPER,ZGDDW_TMPLATE_ANSWER
+ * @description 中国地质(武汉)大学导出、上传文件service
+ *              getTemplate(rootOrgId,ExportTemplateType.PAPER_EXPORT),getTemplate(rootOrgId,ExportTemplateType.ANWSER_EXPORT)
  */
 @Service("zgddwExportPaperService")
 public class ZgddwExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = super.initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
             if (OFFLINE.equals(examType)) {
                 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
-                paperExp.setExamRemarkWord(DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
+                paperExp.setExamRemarkWord(
+                        DocxProcessUtil.html2Docx(wordMLPackage, CommonUtils.formatHtml(paperExp.getExamRemark())));
             }
-            DocxProcessUtil.exportWordNew(paperExp, file, ZGDDW_TMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
 
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
-            //下载音频
+            // 下载音频
             super.downloadAudio(paperExp, zipFileName);
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, ZGDDW_TMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //删除原有试卷文件
-        	/*ExamFile examFile = new ExamFile();
-        	examFile.setExamId(extractConfig.getExamId()+"");
-        	examFile.setCourseId(extractConfig.getCourseCode());
-        	examFile.setOrgId(extractConfig.getOrgId());
-        	examFileService.deleteExamFile(examFile);*/
-            //没有试卷结构导出设置
+            // 删除原有试卷文件
+            /*
+             * ExamFile examFile = new ExamFile();
+             * examFile.setExamId(extractConfig.getExamId()+"");
+             * examFile.setCourseId(extractConfig.getCourseCode());
+             * examFile.setOrgId(extractConfig.getOrgId());
+             * examFileService.deleteExamFile(examFile);
+             */
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, ZGDDW_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, ZGDDW_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, ZGDDW_TMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, ZGDDW_TMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }

+ 33 - 25
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/xajdExportPaperService.java

@@ -1,8 +1,14 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
+import java.io.File;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
+import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
@@ -10,10 +16,6 @@ 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.bean.dto.PaperExp;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.util.List;
 
 /**
  * @author weiwenhai
@@ -25,55 +27,61 @@ import java.util.List;
 public class xajdExportPaperService extends ExportPaperAbstractService {
 
     @Override
-    public void downloadPaper(String paperId, String zipFileName, String examType) throws Exception {
+    public void downloadPaper(Long rootOrgId, String paperId, String zipFileName, String examType) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
+            String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, XAJD_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void downloadPaperAnswer(String paperId, String zipFileName) throws Exception {
+    public void downloadPaperAnswer(Long rootOrgId, String paperId, String zipFileName) throws Exception {
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
-            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
+            String answerFileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_"
+                    + ExamFileType.ANSWER.getName() + DOCX_SUFFIX;
             File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + answerFileName);
-            DocxProcessUtil.exportWordNew(paperExp, file, XAJD_TEMPLATE_ANSWER);
+            DocxProcessUtil.exportWordNew(paperExp, file, getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT));
             DocxProcessUtil.processImage(zipFileName + File.separator + answerFileName, getPkgList(paperId));
         }
     }
 
     @Override
-    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure, User accessUser, ExamPaper examPaper) throws Exception {
+    public void uploadFile(ExtractConfig extractConfig, String paperId, ExportStructure exportStructure,
+            User accessUser, ExamPaper examPaper) throws Exception {
+        Long rootOrgId = accessUser.getRootOrgId();
         PaperExp paperExp = initPaperExp(paperId);
         if (paperExp != null) {
             String currNum = CommonUtils.getCurNum();
-            //没有试卷结构导出设置
+            // 没有试卷结构导出设置
             if (exportStructure == null) {
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, XAJD_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, XAJD_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.NORMAL) {
                 List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
-                //检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
+                // 检查试卷中客观题的数量是否大于试卷导出设置中的设置的数量
                 checkObjectiveDetailsNum(paperExp, questionTypeNums);
-                //上传试卷
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, XAJD_TEMPLATE_PAPER, ExamFileType.PAPER, examPaper);
-                //上传答案
-                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum, XAJD_TEMPLATE_ANSWER, ExamFileType.ANSWER, examPaper);
-                //上传试卷结构   不能在上传试卷和答案之前
+                // 上传试卷
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.PAPER_EXPORT), ExamFileType.PAPER, examPaper);
+                // 上传答案
+                uploadPaperOrAnswerFile(paperExp, extractConfig, accessUser, currNum,
+                        getTemplate(rootOrgId, ExportTemplateType.ANWSER_EXPORT), ExamFileType.ANSWER, examPaper);
+                // 上传试卷结构 不能在上传试卷和答案之前
                 uploadPaperStructure(paperExp, extractConfig, accessUser, currNum, questionTypeNums, examPaper);
             } else if (exportStructure != null && exportStructure.getExportType() == ExportType.ONLINE) {
-                //上传机考JSON文件
+                // 上传机考JSON文件
                 uploadComputerTestFile(extractConfig, accessUser, examPaper);
             }
         }
     }
 
-
 }
-

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

@@ -37,6 +37,7 @@ import org.springframework.stereotype.Service;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
 
+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;
@@ -126,50 +127,55 @@ public class ExportPaperServiceImpl implements ExportPaperService {
 
     @Override
     public void exportPaperFile(String paperId, String serviceName, String exportContentList,
-            HttpServletResponse response, String loginName, String examType, String psw) throws Exception {
+            HttpServletResponse response, String loginName, String examType, String psw, Long rootOrgId) {
         ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils
                 .getBeanById(serviceName);
         // 根据试卷id查询试卷
         Paper paper = Model.of(paperRepo.findById(paperId));
 
         String zipFileName = loginName + System.currentTimeMillis() + "";
-        File directory = new File(TEMP_FILE_EXP + File.separator + zipFileName);
-        if (!directory.exists()) {
-            directory.mkdirs();
-        }
-
-        if (exportContentList.indexOf(ExamFileType.PRINT_EXAM_PACKAGE.name()) > -1) {
-            printExamPaperService.downloadPaper(Lists.newArrayList(paper), directory.getAbsolutePath(), psw);
-        }
-
-        if (exportContentList.indexOf(ExamFileType.COMPUTERTEST_PACKAGE.name()) > -1) {
-            downJson(paper, zipFileName);
-        }
-
-        if (exportContentList.indexOf(ExamFileType.PAPER.name()) > -1) {
-            exportPaperAbstractService.downloadPaper(paperId, zipFileName, examType);
-        }
+        long startTime;
+        try {
+            File directory = new File(TEMP_FILE_EXP + File.separator + zipFileName);
+            if (!directory.exists()) {
+                directory.mkdirs();
+            }
+            if (exportContentList.indexOf(ExamFileType.PRINT_EXAM_PACKAGE.name()) > -1) {
+                printExamPaperService.downloadPaper(Lists.newArrayList(paper), directory.getAbsolutePath(), psw);
+            }
+            if (exportContentList.indexOf(ExamFileType.COMPUTERTEST_PACKAGE.name()) > -1) {
+                downJson(paper, zipFileName);
+            }
+            try {
+                if (exportContentList.indexOf(ExamFileType.PAPER.name()) > -1) {
+                    exportPaperAbstractService.downloadPaper(rootOrgId, paperId, zipFileName, examType);
+                }
 
-        if (exportContentList.indexOf(ExamFileType.ANSWER.name()) > -1) {
-            exportPaperAbstractService.downloadPaperAnswer(paperId, zipFileName);
+                if (exportContentList.indexOf(ExamFileType.ANSWER.name()) > -1) {
+                    exportPaperAbstractService.downloadPaperAnswer(rootOrgId, paperId, zipFileName);
+                }
+            } catch (Exception e) {
+                throw new StatusException("100001", e.getMessage());
+            }
+            // 下载考试说明 2018-2-27 weiwehai
+            /*
+             * if(examType.equals("offLine") &&
+             * StringUtils.isNotBlank(paper.getExamRemark())){
+             * downExamRemark(paper,zipFileName); }
+             */
+            log.debug("开始压缩成zip...");
+            startTime = System.currentTimeMillis();
+            FileDisposeUtil.fileToZip(TEMP_FILE_EXP + File.separator + zipFileName, TEMP_FILE_EXP, zipFileName);
+            FileDisposeUtil.downloadFile(paper.getName() + "_" + paper.getCourse().getCode() + ".zip",
+                    TEMP_FILE_EXP + File.separator + zipFileName + ".zip", response);
+            long endTime = System.currentTimeMillis();
+            log.debug("下载zip耗时:" + (endTime - startTime) + "ms");
+        } finally {
+            long endTime = System.currentTimeMillis();
+            deteleFolder(TEMP_FILE_EXP, zipFileName);
+            long deleteTime = System.currentTimeMillis();
+            log.debug("删除文件耗时:" + (deleteTime - endTime) + "ms");
         }
-
-        // 下载考试说明 2018-2-27 weiwehai
-        /*
-         * if(examType.equals("offLine") &&
-         * StringUtils.isNotBlank(paper.getExamRemark())){
-         * downExamRemark(paper,zipFileName); }
-         */
-        log.debug("开始压缩成zip...");
-        long startTime = System.currentTimeMillis();
-        FileDisposeUtil.fileToZip(TEMP_FILE_EXP + File.separator + zipFileName, TEMP_FILE_EXP, zipFileName);
-        FileDisposeUtil.downloadFile(paper.getName() + "_" + paper.getCourse().getCode() + ".zip",
-                TEMP_FILE_EXP + File.separator + zipFileName + ".zip", response);
-        long endTime = System.currentTimeMillis();
-        log.debug("下载zip耗时:" + (endTime - startTime) + "ms");
-        deteleFolder(TEMP_FILE_EXP, zipFileName);
-        long deleteTime = System.currentTimeMillis();
-        log.debug("删除文件耗时:" + (deleteTime - endTime) + "ms");
     }
 
     /**
@@ -517,7 +523,7 @@ public class ExportPaperServiceImpl implements ExportPaperService {
     @SuppressWarnings("unused")
     @Override
     public void exportPaperFiles(List<String> paperIds, String serviceName, String exportContentList,
-            HttpServletResponse response, String loginName, String examType) throws Exception {
+            HttpServletResponse response, String loginName, String examType, Long rootOrgId) throws Exception {
         ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils
                 .getBeanById(serviceName);
         // 根据试卷id查询所有试卷
@@ -532,13 +538,13 @@ public class ExportPaperServiceImpl implements ExportPaperService {
         // 下载试卷
         if (exportContentList.indexOf(ExamFileType.PAPER.name()) > -1) {
             for (Paper paper : papers) {
-                exportPaperAbstractService.downloadPaper(paper.getId(), zipFileName, examType);
+                exportPaperAbstractService.downloadPaper(rootOrgId, paper.getId(), zipFileName, examType);
             }
         }
         // 下载答案
         if (exportContentList.indexOf(ExamFileType.ANSWER.name()) > -1) {
             for (Paper paper : papers) {
-                exportPaperAbstractService.downloadPaperAnswer(paper.getId(), zipFileName);
+                exportPaperAbstractService.downloadPaperAnswer(rootOrgId, paper.getId(), zipFileName);
             }
         }
         // 下载机考数据包

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

@@ -0,0 +1,204 @@
+package cn.com.qmth.examcloud.core.questions.service.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.criteria.Predicate;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import cn.com.qmth.examcloud.api.commons.security.bean.User;
+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.FileDisposeUtil;
+import cn.com.qmth.examcloud.core.questions.base.IdUtils;
+import cn.com.qmth.examcloud.core.questions.base.dto.ExportTemplateDto;
+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.upyun.UpyunPathEnvironmentInfo;
+import cn.com.qmth.examcloud.web.upyun.UpyunService;
+
+@Service("exportTemplateService")
+public class ExportTemplateServiceImpl implements ExportTemplateService {
+
+    protected ExamCloudLog log = ExamCloudLogFactory.getLog(this.getClass());
+
+    @Autowired
+    private ExportTemplateRepo exportTemplateRepo;
+
+    @Autowired
+    private UpyunService upyunService;
+
+    @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<>();
+
+            predicates.add(cb.equal(root.get("rootOrgId"), rootOrgId));
+
+            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)));
+            }
+
+            return cb.and(predicates.toArray(new Predicate[predicates.size()]));
+        };
+        PageRequest pageRequest = PageRequest.of(curPage - 1, pageSize, Sort.by(Direction.DESC, "creationTime"));
+
+        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());
+    }
+
+    @Transactional
+    @Override
+    public void addFile(User user, String templateName, String type, MultipartFile dataFile) {
+        Long rootOrgId = user.getRootOrgId();
+        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);
+
+        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 delete(Long rootOrgId, Long id) {
+        exportTemplateRepo.deleteByRootOrgIdAndId(rootOrgId, id);
+    }
+
+    @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", "模板不存在");
+        }
+
+    }
+
+    @Transactional
+    @Override
+    public void disenable(Long rootOrgId, Long id) {
+        exportTemplateRepo.updateEnableById(rootOrgId, id, false);
+    }
+
+    @Override
+    public String getExportTemplateName(ExportTemplateType type, Long rootOrgId) {
+        String temPath = PropertyHolder.getString("examcloud.web.sys.tempDataDir");
+        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", "获取模板到本地失败");
+        }
+    }
+
+    private String toSqlSearchPattern(String column) {
+        if (StringUtils.isBlank(column)) {
+            return "%";
+        } else {
+            column = column.trim().replaceAll("\\s", "%");
+            column = "%" + column + "%";
+            return column;
+        }
+    }
+
+}

+ 31 - 30
examcloud-core-questions-starter/src/main/java/cn/com/qmth/examcloud/core/questions/starter/CoreQuestionApp.java

@@ -18,6 +18,7 @@ import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 
 import cn.com.qmth.examcloud.web.bootstrap.AppBootstrap;
 import cn.com.qmth.examcloud.web.support.SpringContextHolder;
+import cn.com.qmth.examcloud.web.upyun.UpyunSiteManager;
 
 @SpringBootApplication
 @Configuration
@@ -25,40 +26,40 @@ import cn.com.qmth.examcloud.web.support.SpringContextHolder;
 @EnableTransactionManagement
 @EnableEurekaClient
 @EnableDiscoveryClient
-@ComponentScan(basePackages = {"cn.com.qmth"})
-@EntityScan(basePackages = {"cn.com.qmth"})
-@EnableJpaRepositories(basePackages = {"cn.com.qmth"})
-@EnableMongoRepositories(basePackages = {"cn.com.qmth"})
-@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
+@ComponentScan(basePackages = { "cn.com.qmth" })
+@EntityScan(basePackages = { "cn.com.qmth" })
+@EnableJpaRepositories(basePackages = { "cn.com.qmth" })
+@EnableMongoRepositories(basePackages = { "cn.com.qmth" })
+@EnableAutoConfiguration(exclude = { MultipartAutoConfiguration.class })
 public class CoreQuestionApp {
 
-	static {
-		String runtimeLevel = System.getProperty("log.commonLevel");
-		if (null == runtimeLevel) {
-			System.setProperty("log.commonLevel", "DEBUG");
-		}
-		System.setProperty("hibernate.dialect.storage_engine", "innodb");
-	}
+    static {
+        String runtimeLevel = System.getProperty("log.commonLevel");
+        if (null == runtimeLevel) {
+            System.setProperty("log.commonLevel", "DEBUG");
+        }
+        System.setProperty("hibernate.dialect.storage_engine", "innodb");
+    }
 
-	public static void main(String[] args) {
-		AppBootstrap.run(CoreQuestionApp.class, args);
+    public static void main(String[] args) {
+        AppBootstrap.run(CoreQuestionApp.class, args);
+        UpyunSiteManager.init();
+        test();
+    }
 
-		test();
-	}
+    private static void test() {
+        Tester tester = SpringContextHolder.getBean(Tester.class);
+        tester.test();
+    }
 
-	private static void test() {
-		Tester tester = SpringContextHolder.getBean(Tester.class);
-		tester.test();
-	}
-
-	@Bean(name = "multipartResolver")
-	public MultipartResolver multipartResolver() {
-		CommonsMultipartResolver resolver = new CommonsMultipartResolver();
-		resolver.setDefaultEncoding("UTF-8");
-		resolver.setResolveLazily(true);
-		resolver.setMaxInMemorySize(40960);
-		resolver.setMaxUploadSize(200L * 1024L * 1024L);
-		return resolver;
-	}
+    @Bean(name = "multipartResolver")
+    public MultipartResolver multipartResolver() {
+        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
+        resolver.setDefaultEncoding("UTF-8");
+        resolver.setResolveLazily(true);
+        resolver.setMaxInMemorySize(40960);
+        resolver.setMaxUploadSize(200L * 1024L * 1024L);
+        return resolver;
+    }
 
 }

+ 13 - 0
examcloud-core-questions-starter/src/main/resources/upyun.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sites>
+
+	<site>
+		<id>export_template</id>
+		<name>导出模板</name>
+		<upyunId>1</upyunId>
+		<maxSize>10M</maxSize>
+		<path>/question/export-template/${rootOrgId}/${relativePath}</path>
+	</site>
+
+
+</sites>

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.