Sfoglia il codice sorgente

Merge branch 'dev0410' of https://git.oschina.net/songyue123456/comm-ques-bank into dev0410

# Conflicts:
#	cqb-paper/src/main/java/com/qmth/cqb/paper/model/ExamFile.java
#	cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SxsfExportPaperService.java
#	cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractConfigController.java
weiwenhai 8 anni fa
parent
commit
62428780e9
34 ha cambiato i file con 475 aggiunte e 290 eliminazioni
  1. 18 3
      cqb-comm-utils/src/main/java/com/qmth/cqb/utils/FileDisposeUtil.java
  2. 22 2
      cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java
  3. 6 6
      cqb-comm-utils/src/main/resources/dzkd_answer_template.ftl
  4. 10 10
      cqb-comm-utils/src/main/resources/dzkd_paper_template.ftl
  5. 6 6
      cqb-comm-utils/src/main/resources/hzkj_answer_template.ftl
  6. 11 11
      cqb-comm-utils/src/main/resources/hzkj_paper_template.ftl
  7. 6 6
      cqb-comm-utils/src/main/resources/sddx_answer_template.ftl
  8. 11 11
      cqb-comm-utils/src/main/resources/sddx_paper_template.ftl
  9. 6 6
      cqb-comm-utils/src/main/resources/sxsf_answer_template.ftl
  10. 11 11
      cqb-comm-utils/src/main/resources/sxsf_paper_template.ftl
  11. 6 6
      cqb-comm-utils/src/main/resources/tjdx_answer_template.ftl
  12. 11 11
      cqb-comm-utils/src/main/resources/tjdx_paper_template.ftl
  13. 72 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PageExamCourse.java
  14. 11 2
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/ExportStructure.java
  15. 9 4
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/ExtractConfig.java
  16. 12 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/ImportPaperMsg.java
  17. 6 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/rpc/ExamCourseClient.java
  18. 2 4
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExportStructureService.java
  19. 10 6
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigService.java
  20. 41 13
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java
  21. 1 1
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java
  22. 8 19
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/DzkdExportPaperService.java
  23. 8 17
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/ExportPaperAbstractService.java
  24. 7 20
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/HzkjExportPaperService.java
  25. 7 12
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SddxExportPaperService.java
  26. 2 3
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SydxExportPaperService.java
  27. 7 11
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/TjdxExportPaperService.java
  28. 24 26
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExportStructureServiceImpl.java
  29. 43 36
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java
  30. 39 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExamFileController.java
  31. 8 7
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExportStructureController.java
  32. 22 15
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractConfigController.java
  33. 3 4
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperController.java
  34. 9 1
      cqb-starter/src/main/resources/application-prod.properties

+ 18 - 3
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/FileDisposeUtil.java

@@ -119,6 +119,7 @@ public class FileDisposeUtil {
 	 * @return
 	 */
 	public static boolean fileToZip(String sourceFilePath, String zipFilePath,String fileName) {
+		logger.info("开始压缩"+sourceFilePath+"目录");
 		boolean flag = false;
 		File sourceFile = new File(sourceFilePath);
 		FileInputStream fis = null;
@@ -130,7 +131,7 @@ public class FileDisposeUtil {
 			logger.error("待压缩的文件目录:" + sourceFilePath + "不存在.");
 		} else {
 			try {
-				File zipFile = new File(zipFilePath+"/"+fileName+".zip");
+				File zipFile = new File(zipFilePath+File.separator+fileName+".zip");
 				if (zipFile.exists()) {
 					logger.error(zipFilePath + "目录下存在名字为:" + fileName+ ".zip" + "打包文件.");
 				} else {
@@ -152,6 +153,7 @@ public class FileDisposeUtil {
 							while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
 								zos.write(bufs, 0, read);
 							}
+							zos.flush();
 						}
 						flag = true;
 					}
@@ -164,16 +166,29 @@ public class FileDisposeUtil {
 				throw new RuntimeException(e);
 			} finally {
 				try {
-					if (null != bis)
+					if (null != bis){
 						bis.close();
-					if (null != zos)
+						bis = null;
+					}
+					if (null != fis){
+						fis.close();
+						fis = null;
+					}
+					if (null != zos){
 						zos.close();
+						zos = null;
+					}
+					if (null != fos){
+						fos.close();
+						fos = null;
+					}
 				} catch (IOException e) {
 					e.printStackTrace();
 					throw new RuntimeException(e);
 				}
 			}
 		}
+		logger.info("压缩"+sourceFilePath+"目录完成");
 		return flag;
 	}
 	

+ 22 - 2
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java

@@ -170,6 +170,26 @@ public final class DocxProcessUtil {
         }
     }
 
+    /**
+     * 校验段落中是否含有序列
+     *
+     * @param p
+     * @return
+     */
+    public static boolean isNumPr(P p) {
+        PPr pPr = p.getPPr();
+        if(pPr != null){
+            PPrBase.NumPr numPr = pPr.getNumPr();
+            if (numPr != null && numPr.getNumId() != null) {
+                return true;
+            } else {
+                return false;
+            }
+        }else{
+            return false;
+        }
+    }
+
     /**
      * 获取文档包副本(去除段落)
      *
@@ -661,14 +681,14 @@ public final class DocxProcessUtil {
      * @param dataMap
      * @param fileName   fileName需要带后缀
      */
-    public static void exportWord(Map dataMap, String fileName,Template template)throws Exception {
+    public static void exportWord(Object dataModel, String fileName,Template template)throws Exception {
         Writer out = null;
         // 输出文件
         File outFile = new File(TEMP_FILE_EXP+fileName);
         // 将模板和数据模型合并生成文件
         out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), ENCODING));
         // 生成文件
-        template.process(dataMap, out);
+        template.process(dataModel, out);
         out.flush();
         IOUtils.closeQuietly(out);
     }

+ 6 - 6
cqb-comm-utils/src/main/resources/dzkd_answer_template.ftl

@@ -109,7 +109,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseName}</w:t>
+							<w:t>${courseName}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -125,7 +125,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseLevel}</w:t>
+							<w:t>${courseLevel}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -157,8 +157,8 @@
 						</w:pPr>
 					</w:p>
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -251,8 +251,8 @@
 						</w:r>
 					</w:p>
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 10 - 10
cqb-comm-utils/src/main/resources/dzkd_paper_template.ftl

@@ -783,8 +783,8 @@
    <w:sz w:val="24"/>
    <w:u w:val="single"/>
    </w:rPr></w:pPr>
-   <w:bookmarkStart w:id="0" w:name="_GoBack"/><w:r><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t>考试时间</w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve">  90</w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>分钟</w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve">   </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t xml:space="preserve">  </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t>课程</w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="00D87C35" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="00B6458D"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>${paper.courseName}</w:t></w:r>
-   <w:r w:rsidR="0015368E" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>(</w:t></w:r><w:r w:rsidR="0015368E" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>${paper.courseLevel}</w:t></w:r><w:r w:rsidR="0015368E" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>)</w:t></w:r>
+   <w:bookmarkStart w:id="0" w:name="_GoBack"/><w:r><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t>考试时间</w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve">  90</w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>分钟</w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve">   </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t xml:space="preserve">  </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t>课程</w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="00D87C35" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="00B6458D"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>${courseName}</w:t></w:r>
+   <w:r w:rsidR="0015368E" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>(</w:t></w:r><w:r w:rsidR="0015368E" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>${courseLevel}</w:t></w:r><w:r w:rsidR="0015368E" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>)</w:t></w:r>
    <w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:color w:val="000000"/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve">      </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t>考试方式</w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve">  </w:t></w:r><w:r w:rsidR="0015368E" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:color w:val="FF0000"/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t>闭卷</w:t></w:r>
    <w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:ascii="宋体" w:hint="eastAsia"/><w:b/><w:color w:val="000000"/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="005E06FB" w:rsidRPr="00D948E2"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:sz w:val="24"/><w:u w:val="single"/></w:rPr><w:t xml:space="preserve">  </w:t></w:r></w:p>
    <w:bookmarkEnd w:id="0"/>
@@ -902,7 +902,7 @@
 							</w:rPr>
 						</w:pPr>
 					</w:p>
-					<#if paper.objectiveScore != 0>
+					<#if objectiveScore != 0>
 					<w:p w:rsidP="004072CF" w:rsidR="00BC611E" w:rsidRDefault="00F3740E" w:rsidRPr="004072CF">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -939,7 +939,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.objectiveScore} </w:t>
+							<w:t xml:space="preserve">${objectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -963,8 +963,8 @@
 						</w:pPr>
 					</w:p>
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -1039,7 +1039,7 @@
                     </#list>
                     </#if>
                     
-                    <#if paper.subjectiveScore != 0>
+                    <#if subjectiveScore != 0>
 					<w:p w:rsidP="001A590C" w:rsidR="001A590C" w:rsidRDefault="001A590C">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -1103,7 +1103,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.subjectiveScore} </w:t>
+							<w:t xml:space="preserve">${subjectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -1135,8 +1135,8 @@
 						</w:r>
 					</w:p>
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 6 - 6
cqb-comm-utils/src/main/resources/hzkj_answer_template.ftl

@@ -94,7 +94,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseName}</w:t>
+							<w:t>${courseName}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -110,7 +110,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseLevel}</w:t>
+							<w:t>${courseLevel}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -132,8 +132,8 @@
 						</w:pPr>
 					</w:p>
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -226,8 +226,8 @@
 						</w:r>
 					</w:p>
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 11 - 11
cqb-comm-utils/src/main/resources/hzkj_paper_template.ftl

@@ -649,7 +649,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseLevel}</w:t>
+										<w:t>${courseLevel}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -712,7 +712,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseName}</w:t>
+										<w:t>${courseName}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -776,7 +776,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseNo}</w:t>
+										<w:t>${courseNo}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -918,7 +918,7 @@
 							<w:t xml:space="preserve"/>
 						</w:r>
 					</w:p>
-					<#if paper.objectiveScore != 0>
+					<#if objectiveScore != 0>
 					<w:p w:rsidP="004072CF" w:rsidR="00BC611E" w:rsidRDefault="00F3740E" w:rsidRPr="004072CF">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -966,7 +966,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.objectiveScore} </w:t>
+							<w:t xml:space="preserve">${objectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -991,8 +991,8 @@
 					</w:p>
 					
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -1066,7 +1066,7 @@
                     </#if>
 					
 					
-					<#if paper.subjectiveScore != 0>
+					<#if subjectiveScore != 0>
 					<w:p w:rsidP="001A590C" w:rsidR="001A590C" w:rsidRDefault="001A590C">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -1130,7 +1130,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.subjectiveScore} </w:t>
+							<w:t xml:space="preserve">${subjectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -1163,8 +1163,8 @@
 					</w:p>
 					
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 6 - 6
cqb-comm-utils/src/main/resources/sddx_answer_template.ftl

@@ -94,7 +94,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseName}</w:t>
+							<w:t>${courseName}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -110,7 +110,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseLevel}</w:t>
+							<w:t>${courseLevel}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -132,8 +132,8 @@
 						</w:pPr>
 					</w:p>
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -226,8 +226,8 @@
 						</w:r>
 					</w:p>
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 11 - 11
cqb-comm-utils/src/main/resources/sddx_paper_template.ftl

@@ -649,7 +649,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseLevel}</w:t>
+										<w:t>${courseLevel}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -712,7 +712,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseName}</w:t>
+										<w:t>${courseName}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -776,7 +776,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseNo}</w:t>
+										<w:t>${courseNo}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -918,7 +918,7 @@
 							<w:t xml:space="preserve"/>
 						</w:r>
 					</w:p>
-					<#if paper.objectiveScore != 0>
+					<#if objectiveScore != 0>
 					<w:p w:rsidP="004072CF" w:rsidR="00BC611E" w:rsidRDefault="00F3740E" w:rsidRPr="004072CF">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -966,7 +966,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.objectiveScore} </w:t>
+							<w:t xml:space="preserve">${objectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -991,8 +991,8 @@
 					</w:p>
 					
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -1066,7 +1066,7 @@
                     </#if>
 					
 					
-					<#if paper.subjectiveScore != 0>
+					<#if subjectiveScore != 0>
 					<w:p w:rsidP="001A590C" w:rsidR="001A590C" w:rsidRDefault="001A590C">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -1130,7 +1130,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.subjectiveScore} </w:t>
+							<w:t xml:space="preserve">${subjectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -1163,8 +1163,8 @@
 					</w:p>
 					
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 6 - 6
cqb-comm-utils/src/main/resources/sxsf_answer_template.ftl

@@ -94,7 +94,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseName}</w:t>
+							<w:t>${courseName}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -110,7 +110,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseLevel}</w:t>
+							<w:t>${courseLevel}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -132,8 +132,8 @@
 						</w:pPr>
 					</w:p>
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -226,8 +226,8 @@
 						</w:r>
 					</w:p>
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 11 - 11
cqb-comm-utils/src/main/resources/sxsf_paper_template.ftl

@@ -649,7 +649,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseLevel}</w:t>
+										<w:t>${courseLevel}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -712,7 +712,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseName}</w:t>
+										<w:t>${courseName}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -776,7 +776,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseNo}</w:t>
+										<w:t>${courseNo}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -918,7 +918,7 @@
 							<w:t xml:space="preserve"/>
 						</w:r>
 					</w:p>
-					<#if paper.objectiveScore != 0>
+					<#if objectiveScore != 0>
 					<w:p w:rsidP="004072CF" w:rsidR="00BC611E" w:rsidRDefault="00F3740E" w:rsidRPr="004072CF">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -966,7 +966,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.objectiveScore} </w:t>
+							<w:t xml:space="preserve">${objectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -991,8 +991,8 @@
 					</w:p>
 					
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -1066,7 +1066,7 @@
                     </#if>
 					
 					
-					<#if paper.subjectiveScore != 0>
+					<#if subjectiveScore != 0>
 					<w:p w:rsidP="001A590C" w:rsidR="001A590C" w:rsidRDefault="001A590C">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -1130,7 +1130,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.subjectiveScore} </w:t>
+							<w:t xml:space="preserve">${subjectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -1163,8 +1163,8 @@
 					</w:p>
 					
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 6 - 6
cqb-comm-utils/src/main/resources/tjdx_answer_template.ftl

@@ -94,7 +94,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseName}</w:t>
+							<w:t>${courseName}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -110,7 +110,7 @@
 								<w:b/>
 								<w:sz w:val="24"/>
 							</w:rPr>
-							<w:t>${paper.courseLevel}</w:t>
+							<w:t>${courseLevel}</w:t>
 						</w:r>
 						<w:r w:rsidR="0015368E" w:rsidRPr="0081215B">
 							<w:rPr>
@@ -132,8 +132,8 @@
 						</w:pPr>
 					</w:p>
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -226,8 +226,8 @@
 						</w:r>
 					</w:p>
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 11 - 11
cqb-comm-utils/src/main/resources/tjdx_paper_template.ftl

@@ -649,7 +649,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseLevel}</w:t>
+										<w:t>${courseLevel}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -712,7 +712,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseName}</w:t>
+										<w:t>${courseName}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -776,7 +776,7 @@
 											<w:sz w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t>${paper.courseNo}</w:t>
+										<w:t>${courseNo}</w:t>
 									</w:r>
 									<w:r w:rsidRPr="003907C3">
 										<w:rPr>
@@ -918,7 +918,7 @@
 							<w:t xml:space="preserve"/>
 						</w:r>
 					</w:p>
-					<#if paper.objectiveScore != 0>
+					<#if objectiveScore != 0>
 					<w:p w:rsidP="004072CF" w:rsidR="00BC611E" w:rsidRDefault="00F3740E" w:rsidRPr="004072CF">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -966,7 +966,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.objectiveScore} </w:t>
+							<w:t xml:space="preserve">${objectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -991,8 +991,8 @@
 					</w:p>
 					
 					<!--循环客观题-->
-				    <#if paper.objectiveDetails?exists>
-                    <#list paper.objectiveDetails as paperDetail>
+				    <#if objectiveDetails?exists>
+                    <#list objectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>
@@ -1066,7 +1066,7 @@
                     </#if>
 					
 					
-					<#if paper.subjectiveScore != 0>
+					<#if subjectiveScore != 0>
 					<w:p w:rsidP="001A590C" w:rsidR="001A590C" w:rsidRDefault="001A590C">
 						<w:pPr>
 							<w:spacing w:line="400" w:lineRule="exact"/>
@@ -1130,7 +1130,7 @@
 								<w:sz w:val="28"/>
 								<w:szCs w:val="28"/>
 							</w:rPr>
-							<w:t xml:space="preserve">${paper.subjectiveScore} </w:t>
+							<w:t xml:space="preserve">${subjectiveScore} </w:t>
 						</w:r>
 						<w:r w:rsidRPr="004072CF">
 							<w:rPr>
@@ -1163,8 +1163,8 @@
 					</w:p>
 					
 					<!--循环主观题-->
-					<#if paper.subjectiveDetails?exists>
-                    <#list paper.subjectiveDetails as paperDetail>
+					<#if subjectiveDetails?exists>
+                    <#list subjectiveDetails as paperDetail>
 					<w:p w:rsidP="004D3783" w:rsidR="00687CD1" w:rsidRDefault="004D3783" w:rsidRPr="006E2D68">
 						<w:r>
 							<w:rPr>

+ 72 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PageExamCourse.java

@@ -0,0 +1,72 @@
+package com.qmth.cqb.paper.dto;
+
+import java.io.Serializable;
+import java.util.List;
+
+import cn.com.qmth.examcloud.common.dto.core.ExamCourseDto;
+
+/**
+ * @author  	chenken
+ * @date    	2017年7月26日 上午11:32:38
+ * @company 	QMTH
+ * @description PageExamCourse.java
+ */
+public class PageExamCourse implements Serializable{
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -4960290977498969319L;
+
+	private List<ExamCourseDto> content;
+	
+	private int totalElements;
+	
+	private int totalPages;
+	
+	private int size;
+	
+	private int number;
+
+	public List<ExamCourseDto> getContent() {
+		return content;
+	}
+
+	public void setContent(List<ExamCourseDto> content) {
+		this.content = content;
+	}
+
+	public int getTotalElements() {
+		return totalElements;
+	}
+
+	public void setTotalElements(int totalElements) {
+		this.totalElements = totalElements;
+	}
+
+	public int getTotalPages() {
+		return totalPages;
+	}
+
+	public void setTotalPages(int totalPages) {
+		this.totalPages = totalPages;
+	}
+
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+
+	public int getNumber() {
+		return number;
+	}
+
+	public void setNumber(int number) {
+		this.number = number;
+	}
+	
+}
+

+ 11 - 2
cqb-paper/src/main/java/com/qmth/cqb/paper/model/ExportStructure.java

@@ -56,6 +56,8 @@ public class ExportStructure implements Serializable{
     private String updateUser;
 
     private Date updateTime;
+    
+    private String orgId;
 
     public ExportStructure(){}
     
@@ -63,9 +65,8 @@ public class ExportStructure implements Serializable{
     	this.examType = examType;
     }
     
-    public ExportStructure(String examId,ExamType examType){
+    public ExportStructure(String examId){
     	this.examId = examId;
-    	this.examType = examType;
     }
     
     public ExportStructure(ExportPaperInfoModel exportModel){
@@ -160,6 +161,14 @@ public class ExportStructure implements Serializable{
 	public void setQuestionTypeNums(List<QuestionTypeNum> questionTypeNums) {
 		this.questionTypeNums = questionTypeNums;
 	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
 	
 }
 

+ 9 - 4
cqb-paper/src/main/java/com/qmth/cqb/paper/model/ExtractConfig.java

@@ -6,6 +6,8 @@ import java.util.Map;
 
 import org.springframework.data.annotation.Id;
 
+import cn.com.qmth.examcloud.common.dto.core.ExamCourseDto;
+
 import com.qmth.cqb.utils.enums.ExtractPolicy;
 
 /**
@@ -107,10 +109,13 @@ public class ExtractConfig implements Serializable {
     	this.courseCode = course_code;
 	}
     
-    public ExtractConfig(String examType,Long examId){
-    	this.examType = examType;
-    	this.examId = examId;
-    }
+	public ExtractConfig(ExamCourseDto examCourseDto) {
+		this.examId = examCourseDto.getExamId();
+		this.examName = examCourseDto.getExamName();
+		this.courseCode = examCourseDto.getCourseCode();
+		this.courseName = examCourseDto.getCourseName();
+		this.examType = examCourseDto.getExamType().name();
+	}
 
 	public Long getExamId() {
         return examId;

+ 12 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/model/ImportPaperMsg.java

@@ -130,6 +130,18 @@ public class ImportPaperMsg {
      * 题型必须是单选、多选、判断、填空、问答、套题中的一种\n
      */
     public static final String errMsg_09 = "题型必须是单选、多选、判断、填空、问答、套题中的一种\n";
+    /**
+     * 题干不能包含有序列
+     */
+    public static final String errMsg_10 = "题干不能包含有序列";
+    /**
+     * 选项不能包含有序列
+     */
+    public static final String errMsg_11 = "选项不能包含有序列";
+    /**
+     * 一般校验
+     */
+    public static final String errMsg_12 = "格式错误,请仔细检查(题干必须有题号、选项必须有选项号、答案必须存在且格式正确)";
     
     
 }

+ 6 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/rpc/ExamCourseClient.java

@@ -19,5 +19,11 @@ import cn.com.qmth.examcloud.common.dto.core.ExamCourseDto;
 public interface ExamCourseClient {
 	@RequestMapping(method = RequestMethod.GET, value = "${app.api.exam}/exam_course/marking")
 	List<ExamCourseDto> findExamCourseByExamId(@RequestParam("exam_id") String examId);
+	
+	@RequestMapping(method = RequestMethod.GET, value = "${app.api.exam}/exam_course")
+	String findPageExamCourse(@RequestParam("exam_id") Long examId,
+										   @RequestParam(value = "course_code",required = false) String courseCode,
+										   @RequestParam("cur_page") Integer  currentPage,
+										   @RequestParam("page_size") Integer  pageSize);
 }
 

+ 2 - 4
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExportStructureService.java

@@ -1,11 +1,9 @@
 package com.qmth.cqb.paper.service;
 
 import java.util.List;
-import java.util.Map;
 
 import org.springframework.data.domain.Page;
 
-import cn.com.qmth.examcloud.common.dto.em.enums.ExamType;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
 import com.qmth.cqb.paper.model.ExportStructure;
@@ -38,14 +36,14 @@ public interface ExportStructureService {
 	 */
 	public Page<ExportStructure> findPageByExportStructure(ExportStructure exportStructure,int curPage,int pageSize);
 	/**
-	 * 根据考试类型和考试ID查询结构
+	 * 根据考试ID查询结构
 	 * 如果结构存在、判断结构设置是否完整
 	 * 是否完整是指 客观题题数是否都设置过了
 	 * @param examId
 	 * @param examType
 	 * @return
 	 */
-	public Map<String,Object> findStructureByExamIdAndExamType(String examId,ExamType examType);
+	public ExportStructure findStructureByExamId(String examId);
 	
 	/**
 	 * 根据考试类型查询考试id

+ 10 - 6
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigService.java

@@ -5,10 +5,11 @@ import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
 
+import org.springframework.data.domain.Page;
+
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
 import com.qmth.cqb.paper.dto.ExportPaperInfoModel;
-import com.qmth.cqb.paper.model.ExamFile;
 import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.paper.model.Paper;
 
@@ -39,7 +40,7 @@ public interface ExtractConfigService {
 	 * @param orgName		机构名称
 	 * @throws Exception
 	 */
-	public Map<String, Object> saveExtractConfig(ExtractConfig extractConfig,String orgName,AccessUser accessUser) throws Exception;
+	public void saveExtractConfig(ExtractConfig extractConfig,String orgName,AccessUser accessUser) throws Exception;
 	/**
 	 * 按照设定调卷规则生成一套试卷
 	 * 1.根据extractConfigId取出调卷规则
@@ -95,11 +96,14 @@ public interface ExtractConfigService {
 	 * @param exportModel
 	 */
 	public void exportExamPaperInfo(ExportPaperInfoModel exportModel,HttpServletResponse response)  throws Exception ;
-	
 	/**
-	 * 检查该考试下该课程是否生成试卷文件
+	 * 分页查询调卷规则
+	 * @param currentPage
+	 * @param pageSize
 	 * @param examId
-	 * @param courseId
+	 * @param courseNo
+	 * @return
 	 */
-	public List<ExamFile> findPaperStructure(String examId, String courseId);
+	public Page<ExtractConfig> findPageExtractConfig(int currentPage,int pageSize, Long examId, String courseNo);
+	
 }

+ 41 - 13
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -89,12 +89,13 @@ public class ImportPaperService {
 
     /**
      * 导入试卷
-     *
-     * @param paperName
-     * @param courseNo
+     * @param paper
+     * @param user
      * @param file
      * @return
+     * @throws Exception
      */
+
     public Paper importPaper(Paper paper, AccessUser user,File file) throws Exception {
         paperService.checkPaperNameNew(paper.getName(), user.getRootOrgId().toString());
         return processImportPaper(paper,user,file);
@@ -161,14 +162,13 @@ public class ImportPaperService {
 
     /**
      * 处理导入试卷
-     * 
-     * @param paperName
-     * @param courseNo
-     * @param courseName
+     * @param paper
      * @param user
      * @param file
      * @return
+     * @throws Exception
      */
+
     public Paper processImportPaper(Paper paper,AccessUser user,File file) throws Exception {
         WordprocessingMLPackage wordMLPackage;
         WordprocessingMLPackage tmpWordMlPackage;
@@ -206,7 +206,7 @@ public class ImportPaperService {
             if (StringUtils.isEmpty(pText)) {
                 // 跳过空白段落
                 continue;
-            } else if (isQuesHeader(pText)) {
+            } else if (isMainQuesHeader(pText)) {
                 // 处理大题头信息
                 processMainQuesHeader(pList, importPaperCheck.index, importPaperCheck);
                 // 校验大题头信息
@@ -219,6 +219,11 @@ public class ImportPaperService {
                 initQuesHeader(paper, paperDetail, paperDetails, ++mainQuesNum, importPaperCheck);
                 // 设置当前索引,防止多余循环
                 i = importPaperCheck.index - 1;
+            } else if (DocxProcessUtil.isNumPr(p)) {
+                // 检测到序列
+                importPaperCheck.setErrorInfo(importPaperCheck.quesName+ImportPaperMsg.errMsg_10);
+                throw new PaperException(importPaperCheck.errorInfo);
+
             } else if (pText.matches("^\\d{1,}\\.[\\s\\S]*")
                     || (isNested(importPaperCheck) && !pText.startsWith(ImportPaperMsg.left_bracket))) {
                 if(paperDetail == null){
@@ -263,6 +268,8 @@ public class ImportPaperService {
                 i = importPaperCheck.index - 1;
             }else if(paperDetail == null){
                 throw new PaperException("导入文件格式有误,必须有大题头信息,且以 [ 开头!");
+            }else{
+                throw new PaperException(importPaperCheck.quesName+ImportPaperMsg.errMsg_12);
             }
             if (!StringUtils.isEmpty(importPaperCheck.errorInfo)) {
                 throw new PaperException(importPaperCheck.errorInfo);
@@ -283,13 +290,24 @@ public class ImportPaperService {
         return paper;
     }
 
-    public boolean isQuesHeader(String pText){
+    public boolean isMainQuesHeader(String pText){
         return pText.startsWith(ImportPaperMsg.left_bracket)
                 && !pText.startsWith(ImportPaperMsg.answer_word)
                 && !pText.startsWith(ImportPaperMsg.score_word)
                 && !pText.startsWith(ImportPaperMsg.subQuestionType_word);
     }
 
+    public boolean isHeader(String pText){
+        return pText.startsWith(ImportPaperMsg.questionClassify_word)
+                || pText.startsWith(ImportPaperMsg.questionType_word)
+                || pText.startsWith(ImportPaperMsg.questionName_word)
+                || pText.startsWith(ImportPaperMsg.questionNum_word)
+                || pText.startsWith(ImportPaperMsg.score_word)
+                || pText.startsWith(ImportPaperMsg.answer_word)
+                || pText.startsWith(ImportPaperMsg.subQuestionType_word)
+                || pText.startsWith(ImportPaperMsg.subQuesScore_word);
+    }
+
     /**
      * 初始化试卷信息
      *
@@ -459,6 +477,11 @@ public class ImportPaperService {
             if (StringUtils.isEmpty(tmpText) && DocxProcessUtil.isText(pBody)) {
                 // 跳过空白段落
                 continue;
+            } else if (DocxProcessUtil.isNumPr(pBody)) {
+                // 检测到序列
+                importPaperCheck.setErrorInfo(importPaperCheck.quesName+ImportPaperMsg.errMsg_10);
+                throw new PaperException(importPaperCheck.errorInfo);
+
             } else if (tmpText.matches("^\\d{1,}\\.[\\s\\S]*")) {
                 // 题干第一段
                 // 过滤题干标题
@@ -467,7 +490,7 @@ public class ImportPaperService {
                 tmpWordMl = DocxProcessUtil.formatPWordMl(tmpWordMl);
                 quesBodyWordMl.append(tmpWordMl);
                 quesBodyHtml.append(DocxProcessUtil.docx2Html(tmpWordMl, wordMLPackage));
-            } else if (tmpText.matches("^[a-zA-Z]\\.[\\s\\S]*") || tmpText.startsWith(ImportPaperMsg.left_bracket)) {
+            } else if (tmpText.matches("^[a-zA-Z]\\.[\\s\\S]*") || isHeader(tmpText)) {
                 // 检测到选项或其他特殊段落直接退出
                 break;
             } else{
@@ -524,6 +547,11 @@ public class ImportPaperService {
             if (StringUtils.isEmpty(tmpText) && DocxProcessUtil.isText(pOption)) {
                 // 跳过空白段落
                 continue;
+            } else if (DocxProcessUtil.isNumPr(pOption)) {
+                // 检测到序列
+                importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, subQuesNum)+ImportPaperMsg.errMsg_11);
+                throw new PaperException(importPaperCheck.errorInfo);
+
             } else if (tmpText.matches("^[a-zA-Z]\\.[\\s\\S]*")) {
                 // 检测到选项开始段落
                 // 创建试题选项
@@ -539,7 +567,7 @@ public class ImportPaperService {
                 String tmpWordMl = DocxProcessUtil.getPWordMl(pOption);
                 current.setOptionBody(current.getOptionBody() + DocxProcessUtil.docx2Html(tmpWordMl, wordMLPackage));
                 current.setOptionBodyWord(current.getOptionBodyWord() + DocxProcessUtil.formatPWordMl(tmpWordMl));
-            } else if (tmpText.startsWith(ImportPaperMsg.left_bracket)) {
+            } else if (isHeader(tmpText)) {
                 // 非选项的其他内容直接退出
                 break;
             } else if (current != null) {
@@ -611,7 +639,7 @@ public class ImportPaperService {
                 // 检测到分数开始段落
                 quesScore = getContent(tmpText, ImportPaperMsg.subQuesScore_word);
                 answerStart = false;
-            } else if (tmpText.startsWith(ImportPaperMsg.left_bracket) || tmpText.matches("^\\d{1,}\\.[\\s\\S]*")) {
+            } else if (isHeader(tmpText) || tmpText.matches("^\\d{1,}\\.[\\s\\S]*")) {
                 // 检测到其他特殊段落或下一题直接退出
                 break;
             } else if (answerStart) {
@@ -728,7 +756,7 @@ public class ImportPaperService {
                     importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, quesTypeNum) + ImportPaperMsg.errMsg_03);
                 }
                 throw new PaperException(importPaperCheck.errorInfo);
-            }else if(tmpText.startsWith(ImportPaperMsg.left_bracket)){
+            }else if(isHeader(tmpText)){
                 break;
             }
             if (!StringUtils.isEmpty(importPaperCheck.errorInfo)) {

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

@@ -219,7 +219,7 @@ public class PaperService {
      */
     public Page<Paper> getGenPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
         Query query = new Query();
-        query.addCriteria(Criteria.where("paperType").is(PaperType.GENERATE));
+        query.addCriteria(Criteria.where("paperType").is(PaperType.GENERATE.name()));
         if(StringUtils.isNotBlank(paperSearchInfo.getCourseNo())){
         	query.addCriteria(Criteria.where("courseNo").is(paperSearchInfo.getCourseNo()));
         }

+ 8 - 19
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/DzkdExportPaperService.java

@@ -35,13 +35,13 @@ public class DzkdExportPaperService extends ExportPaperAbstractService{
      */
     @Override
     public void downloadPaper(String id, HttpServletResponse response) throws Exception {
-        Map<String,Object> dataMap = initExportPaper(id);
+    	PaperExp paperExp = initExportPaper(id);
         List<String> fileList = new ArrayList<String>();
-        if (dataMap.get("fileName") != null) {
-        	String paperfileName = (String) dataMap.get("fileName")+DOCX_SUFFIX;
-            String answerFileName = (String) dataMap.get("fileName")+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
-            DocxProcessUtil.exportWord(dataMap, paperfileName,DZKD_TEMPLATE_PAPER);
-            DocxProcessUtil.exportWord(dataMap,answerFileName,DZKD_TEMPLATE_ANSWER);
+        if (paperExp!=null) {
+        	String paperfileName = paperExp.getName()+DOCX_SUFFIX;
+            String answerFileName = paperExp.getName()+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
+            DocxProcessUtil.exportWord(paperExp,paperfileName,DZKD_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWord(paperExp,answerFileName,DZKD_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName,getPkgList(id));
             DocxProcessUtil.processImage(answerFileName,getPkgList(id));
             fileList.add(paperfileName);
@@ -56,9 +56,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService{
 	 * @return
 	 */
     @Override
-    public Map<String,Object> initExportPaper(String paperId) throws Exception {
-		// 创建返回Map
-		Map<String,Object> returnMap = new HashMap<String,Object>();
+    public PaperExp initExportPaper(String paperId) throws Exception {
 		// 获取paper
 		Paper paper = paperRepo.findOne(paperId);
 		paperService.formatPaper(paper, null);
@@ -128,16 +126,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService{
 			setUnitExpNumber(subjectiveDetails, objetcUnitSum);
 			appendScoreToQuestionBody(subjectiveDetails);
 		}
-		returnMap.put("paper", paperExp);
-		returnMap.put("fileName", paperExp.getName());
-
-		return returnMap;
-	}
-
-	@Override
-	public void uploadFile(ExtractConfig extractConfig,String paperId,AccessUser accessUser,Map<String,Object> exportStructureMap) throws Exception {
-		// TODO Auto-generated method stub
-		
+		return paperExp;
 	}
 
 }

+ 8 - 17
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/ExportPaperAbstractService.java

@@ -34,7 +34,7 @@ import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.dto.PaperDetailExp;
 import com.qmth.cqb.paper.dto.PaperDetailUnitExp;
 import com.qmth.cqb.paper.dto.PaperExp;
-import com.qmth.cqb.paper.model.ExamFile;
+import com.qmth.cqb.paper.model.ExportStructure;
 import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.paper.model.Paper;
 import com.qmth.cqb.paper.model.PaperDetail;
@@ -46,7 +46,6 @@ import com.qmth.cqb.question.model.QuesOption;
 import com.qmth.cqb.question.model.Question;
 import com.qmth.cqb.utils.BeanCopierUtil;
 import com.qmth.cqb.utils.CommonUtils;
-import com.qmth.cqb.utils.enums.ExamFileType;
 import com.qmth.cqb.utils.exception.PaperException;
 import com.qmth.cqb.utils.word.DocxProcessUtil;
 
@@ -182,7 +181,9 @@ public abstract class ExportPaperAbstractService {
 	 * @param paperId
 	 * @throws Exception
 	 */
-    public abstract void uploadFile(ExtractConfig extractConfig,String paperId,AccessUser accessUser,Map<String,Object> exportStructureMap) throws Exception;
+    public void uploadFile(ExtractConfig extractConfig,String paperId,ExportStructure exportStructure,AccessUser accessUser)  throws Exception{
+    	
+    }
 	
 	/**
 	 * 初始化导出试卷DTO
@@ -190,9 +191,7 @@ public abstract class ExportPaperAbstractService {
 	 * @param id
 	 * @return
 	 */
-	public Map<String,Object> initExportPaper(String paperId) throws Exception {
-		// 创建返回Map
-		Map<String,Object> returnMap = new HashMap<String,Object>();
+	public PaperExp initExportPaper(String paperId) throws Exception {
 		// 获取paper
 		Paper paper = paperRepo.findOne(paperId);
 		paperService.formatPaper(paper, null);
@@ -263,10 +262,7 @@ public abstract class ExportPaperAbstractService {
 			setUnitExpNumber(subjectiveDetails, objetcUnitSum);
 			appendScoreToQuestionBody(subjectiveDetails);
 		}
-		returnMap.put("paper", paperExp);
-		returnMap.put("fileName", paperExp.getName());
-
-		return returnMap;
+		return paperExp;
 	}
 
 	protected void setExpTitle(PaperDetailExp paperDetailExp) {
@@ -384,13 +380,8 @@ public abstract class ExportPaperAbstractService {
                             if(tObj.getClass().equals(Text.class)){
                                 Text text = (Text)tObj;
                                 String str = text.getValue().trim();
-                                if(str.equals("###")){
-                                    text.setValue("______");
-                                }else if(str.equals("(###)")){
-                                	text.setValue("(______)");
-                                }else if(str.equals("(###)")){
-                                	text.setValue("(______)");
-                                }else if(str.matches("##\\d{1,}##")){
+                                str.replaceAll("###","______");
+                                if(str.matches("##\\d{1,}##")){
                                     int curNum = num + index;
                                     text.setValue("___"+(curNum)+"___");
                                     index++;

+ 7 - 20
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/HzkjExportPaperService.java

@@ -1,21 +1,13 @@
 package com.qmth.cqb.paper.service.export;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
 
-import main.java.com.UpYun;
-
 import org.springframework.stereotype.Service;
 
-import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
-
-import com.qmth.cqb.paper.model.ExamFile;
-import com.qmth.cqb.paper.model.ExtractConfig;
-import com.qmth.cqb.utils.CommonUtils;
+import com.qmth.cqb.paper.dto.PaperExp;
 import com.qmth.cqb.utils.enums.ExamFileType;
 import com.qmth.cqb.utils.word.DocxProcessUtil;
 
@@ -33,13 +25,13 @@ public class HzkjExportPaperService extends ExportPaperAbstractService {
 	
     @Override
     public void downloadPaper(String paperId, HttpServletResponse response) throws Exception {
-        Map<String,Object> dataMap = initExportPaper(paperId);
+    	PaperExp paperExp = initExportPaper(paperId);
         List<String> fileList = new ArrayList<String>();
-        if (dataMap.get("fileName") != null) {
-        	String paperfileName = (String) dataMap.get("fileName")+DOCX_SUFFIX;
-            String answerFileName = (String) dataMap.get("fileName")+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
-            DocxProcessUtil.exportWord(dataMap, paperfileName,HZKJ_TEMPLATE_PAPER);
-            DocxProcessUtil.exportWord(dataMap,answerFileName,HZKJ_TEMPLATE_ANSWER);
+        if (paperExp != null) {
+        	String paperfileName = paperExp.getName()+DOCX_SUFFIX;
+            String answerFileName = paperExp.getName()+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
+            DocxProcessUtil.exportWord(paperExp, paperfileName,HZKJ_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWord(paperExp,answerFileName,HZKJ_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName,getPkgList(paperId));
             DocxProcessUtil.processImage(answerFileName,getPkgList(paperId));
             fileList.add(paperfileName);
@@ -48,10 +40,5 @@ public class HzkjExportPaperService extends ExportPaperAbstractService {
         }
     }
 
-    @Override
-    public void uploadFile(ExtractConfig extractConfig,String paperId,AccessUser accessUser,Map<String,Object> exportStructureMap) throws Exception{
-    	
-    }
-    
 }
 

+ 7 - 12
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SddxExportPaperService.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
 
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
+import com.qmth.cqb.paper.dto.PaperExp;
 import com.qmth.cqb.paper.model.ExamFile;
 import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.utils.CommonUtils;
@@ -33,13 +34,13 @@ public class SddxExportPaperService extends ExportPaperAbstractService {
 	
     @Override
     public void downloadPaper(String paperId, HttpServletResponse response) throws Exception {
-        Map<String,Object> dataMap = initExportPaper(paperId);
+    	PaperExp paperExp = initExportPaper(paperId);
         List<String> fileList = new ArrayList<String>();
-        if (dataMap.get("fileName") != null) {
-        	String paperfileName = (String) dataMap.get("fileName")+DOCX_SUFFIX;
-            String answerFileName = (String) dataMap.get("fileName")+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
-            DocxProcessUtil.exportWord(dataMap, paperfileName,SDDX_TEMPLATE_PAPER);
-            DocxProcessUtil.exportWord(dataMap,answerFileName,SDDX_TEMPLATE_ANSWER);
+        if (paperExp != null) {
+        	String paperfileName = paperExp.getName()+DOCX_SUFFIX;
+            String answerFileName = paperExp.getName()+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
+            DocxProcessUtil.exportWord(paperExp, paperfileName,SDDX_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWord(paperExp,answerFileName,SDDX_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName,getPkgList(paperId));
             DocxProcessUtil.processImage(answerFileName,getPkgList(paperId));
             fileList.add(paperfileName);
@@ -48,10 +49,4 @@ public class SddxExportPaperService extends ExportPaperAbstractService {
         }
     }
 
-    @Override
-    public void uploadFile(ExtractConfig extractConfig,String paperId,AccessUser accessUser,Map<String,Object> exportStructureMap) throws Exception{
-    	
-    }
-    
 }
-

+ 2 - 3
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SydxExportPaperService.java

@@ -120,8 +120,7 @@ public class SydxExportPaperService{
         for(int i = 0; i < paperDetailExps.size(); i++){
             PaperDetailExp paperDetailExp = paperDetailExps.get(i);
             paperDetailExp.setTitle(getDetailTitle(paperDetailExp));
-            List<PaperDetailUnit> paperDetailUnits =
-                    paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
+            List<PaperDetailUnit> paperDetailUnits =paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
 
             setAnswerWord(paperDetailUnits);
 
@@ -278,7 +277,7 @@ public class SydxExportPaperService{
     	List<String> fileNames = new ArrayList<String>();
         Map<String,Object> dataMap = initExportPaper(id);
         if (dataMap.get("fileName") != null) {
-            String fileName = (String) dataMap.get("fileName");
+            String fileName = (String) dataMap.get("fileName")+".docx";
             DocxProcessUtil.exportWord(dataMap, fileName,SYDX_TEMPLATE_NORMAL);
             DocxProcessUtil.processImage(fileName, getPkgList(id));
             fileNames.add(fileName);

+ 7 - 11
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/TjdxExportPaperService.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
 
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
+import com.qmth.cqb.paper.dto.PaperExp;
 import com.qmth.cqb.paper.model.ExamFile;
 import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.utils.CommonUtils;
@@ -33,13 +34,13 @@ public class TjdxExportPaperService extends ExportPaperAbstractService {
 	
     @Override
     public void downloadPaper(String paperId, HttpServletResponse response) throws Exception {
-        Map<String,Object> dataMap = initExportPaper(paperId);
+    	PaperExp paperExp = initExportPaper(paperId);
         List<String> fileList = new ArrayList<String>();
-        if (dataMap.get("fileName") != null) {
-        	String paperfileName = (String) dataMap.get("fileName")+DOCX_SUFFIX;
-            String answerFileName = (String) dataMap.get("fileName")+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
-            DocxProcessUtil.exportWord(dataMap, paperfileName,TJDX_TEMPLATE_PAPER);
-            DocxProcessUtil.exportWord(dataMap,answerFileName,TJDX_TEMPLATE_ANSWER);
+        if (paperExp!= null) {
+        	String paperfileName = paperExp.getName()+DOCX_SUFFIX;
+            String answerFileName = paperExp.getName()+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
+            DocxProcessUtil.exportWord(paperExp, paperfileName,TJDX_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWord(paperExp,answerFileName,TJDX_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName,getPkgList(paperId));
             DocxProcessUtil.processImage(answerFileName,getPkgList(paperId));
             fileList.add(paperfileName);
@@ -47,11 +48,6 @@ public class TjdxExportPaperService extends ExportPaperAbstractService {
             DocxProcessUtil.processDownload(fileList, response);
         }
     }
-
-    @Override
-    public void uploadFile(ExtractConfig extractConfig,String paperId,AccessUser accessUser,Map<String,Object> exportStructureMap) throws Exception{
-    	
-    }
     
 }
 

+ 24 - 26
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExportStructureServiceImpl.java

@@ -2,9 +2,7 @@ package com.qmth.cqb.paper.service.impl;
 
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import main.java.com.UpYun;
 
@@ -14,6 +12,10 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Example;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
 import cn.com.qmth.examcloud.common.dto.em.enums.ExamType;
@@ -51,6 +53,9 @@ public class ExportStructureServiceImpl implements ExportStructureService {
 	@Autowired
 	private ExtractConfigRepo extractConfigRepo;
 	
+	@Autowired
+	private MongoTemplate mongoTemplate;
+	
 	@Value("${upyun.bucketName}")
 	protected String bucketName;
 	
@@ -69,6 +74,7 @@ public class ExportStructureServiceImpl implements ExportStructureService {
 			exportStructure.setUpdateUser(user.getName());
 			exportStructure.setUpdateTime(new Date());
 		}
+		exportStructure.setOrgId(user.getRootOrgId()+"");
 		exportStructureRepo.save(exportStructure);
 	}
 
@@ -88,25 +94,21 @@ public class ExportStructureServiceImpl implements ExportStructureService {
 	}
 
 	@Override
-	public Map<String, Object> findStructureByExamIdAndExamType(String examId,ExamType examType) {
-		Map<String, Object> returnMap = new HashMap<String, Object>();
-		ExportStructure exportStructure = findByExportStructure(new ExportStructure(examId,examType));
+	public ExportStructure findStructureByExamId(String examId) {
+		ExportStructure exportStructure = findByExportStructure(new ExportStructure(examId));
 		if(exportStructure==null){
-			returnMap.put("returnMsg", "no_structure");
-			return returnMap;
+			return null;
 		}
 		if(exportStructure.getExportType()==ExportType.NORMAL){
 			List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
 			for(QuestionTypeNum questionTypeNum:questionTypeNums){
 				if(questionTypeNum.getQuantity()==null){
 					//结构设置不完整
-					returnMap.put("returnMsg", "structure_imperfect");
-					return returnMap;
+					throw new RuntimeException("试卷结构导出设置不完整");
 				}
 			}
 		}
-		returnMap.put("exportStructure",exportStructure);
-		return returnMap;
+		return exportStructure;
 	}
 
 	@Override
@@ -127,29 +129,25 @@ public class ExportStructureServiceImpl implements ExportStructureService {
 		//首先根据id,查询到  exportStructure 对象
 		ExportStructure exportStructure = exportStructureRepo.findOne(id);
 		if(exportStructure != null){
-			//1.首先删除ExamFile表       根据  examId 和    examType  查询   ExamFile对象
-			List<ExamFile> list = examFileService.findExamFileListByExamFile(new ExamFile(exportStructure.getExamId(),exportStructure.getExamType()));
+			//1.首先删除ExamFile表       根据  examId 和    orgId  查询   ExamFile对象
+			List<ExamFile> list = examFileService.findExamFileListByExamFile(new ExamFile(exportStructure.getExamId(),exportStructure.getOrgId()));
 			if(list.size()>0){
 				//根据 ExamFile 对象查询  filePath ,并删除又拍云上的文件 , 然后在删除表里面的数据
 				UpYun upyun = new UpYun(bucketName,userName,password);
 				for(int i=0;i<list.size();i++){
 					upyun.deleteFile(list.get(i).getFilePath());
-					//examFileRepo.delete(list.get(i));
 				}
 				examFileRepo.delete(list);
 			}
-			//2.然后修改ExtractConfig表      根据 examId 和    examType
-			ExtractConfig extractConfig = new ExtractConfig(exportStructure.getExamType().name(),Long.valueOf(exportStructure.getExamId()));
-			List<ExtractConfig> extractConfigList = extractConfigRepo.findAll(Example.of(extractConfig));
-			if(extractConfigList.size()>0){
-				//获取每个对象, 并修改isFinish  和   finishedPaperIdMap
-				for(int i=0;i<extractConfigList.size();i++){
-					extractConfigList.get(i).setIfFinish((short) 0);
-					extractConfigList.get(i).setFinishedPaperIdMap(null);
-					//extractConfigRepo.save(extractConfigList.get(i));
-				}
-				extractConfigRepo.save(extractConfigList);
-			}
+			//2.然后修改ExtractConfig表      根据 examId 和    orgId
+			Query query = new Query();
+			query.addCriteria(Criteria.where("examId").is(Long.valueOf(exportStructure.getExamId())));
+			query.addCriteria(Criteria.where("orgId").is(exportStructure.getOrgId()));
+			Update update = new Update();
+			update.set("ifFinish", 0);
+			update.unset("finishedPaperIdMap");
+			mongoTemplate.updateMulti(query, update, ExtractConfig.class);
+			
 			exportStructureRepo.delete(exportStructure);
 		}
 	}

+ 43 - 36
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.cqb.paper.service.impl;
 
+import java.io.File;
 import java.io.FileOutputStream;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -20,6 +21,9 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Example;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
@@ -27,7 +31,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 
 import cn.com.qmth.examcloud.common.dto.core.ExamCourseDto;
-import cn.com.qmth.examcloud.common.dto.em.enums.ExamType;
 import cn.com.qmth.examcloud.common.dto.question.PaperDetailDto;
 import cn.com.qmth.examcloud.common.dto.question.PaperDetailUnitDto;
 import cn.com.qmth.examcloud.common.dto.question.PaperDto;
@@ -36,6 +39,7 @@ import cn.com.qmth.examcloud.common.dto.question.QuestionDto;
 import cn.com.qmth.examcloud.common.dto.question.SubQuestionDto;
 import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+import cn.com.qmth.examcloud.common.util.GsonUtil;
 import cn.com.qmth.examcloud.common.util.excel.ExcelWriter;
 
 import com.qmth.cqb.paper.dao.ExportServiceManageRepo;
@@ -45,6 +49,7 @@ import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
 import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.dto.ExportPaperInfoModel;
 import com.qmth.cqb.paper.dto.ObjectiveQuestionStructure;
+import com.qmth.cqb.paper.dto.PageExamCourse;
 import com.qmth.cqb.paper.dto.PaperDetailExp;
 import com.qmth.cqb.paper.dto.PaperDetailUnitExp;
 import com.qmth.cqb.paper.dto.PaperExp;
@@ -158,18 +163,9 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	}
 
 	@Override
-	public Map<String, Object> saveExtractConfig(ExtractConfig extractConfig,String orgName,AccessUser accessUser) throws Exception {
-		Map<String, Object> returnMap = exportStructureService.findStructureByExamIdAndExamType(extractConfig.getExamId()+"",ExamType.strToEnum(extractConfig.getExamType()));
-		//试卷导出结构设置不完整
-		if("structure_imperfect".equals(returnMap.get("returnMsg"))){
-			return returnMap;
-		}
-		if(extractConfig.getScrambling_the_question_order()==null){
-			extractConfig.setScrambling_the_question_order((short) 0);
-		}
-		if(extractConfig.getScrambling_the_option_order()==null){
-			extractConfig.setScrambling_the_option_order((short) 0);
-		}
+	public void saveExtractConfig(ExtractConfig extractConfig,String orgName,AccessUser accessUser) throws Exception {
+		//查询试卷导出设置
+		ExportStructure exportStructure = exportStructureService.findStructureByExamId(extractConfig.getExamId()+"");
 		List<ExamPaper> examPapers = extractConfig.getExamPaperList();
 		for(int i=0;i<examPapers.size();i++){
 			ExamPaper examPaper = examPapers.get(i);
@@ -186,16 +182,14 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		Iterator<Entry<String,String>> iterator = entry.iterator();
 		while(iterator.hasNext()){
 			String paperId = iterator.next().getValue();
-			uploadPaperFile(extractConfig,paperId,accessUser,returnMap);
+			uploadPaperFile(extractConfig,paperId,exportStructure,accessUser);
 		}
-		returnMap.put("returnMsg", "success");
-		return returnMap;
 	}
 
-	private void uploadPaperFile(ExtractConfig extractConfig,String paperId,AccessUser accessUser,Map<String,Object> exportStructureMap) throws Exception {
+	private void uploadPaperFile(ExtractConfig extractConfig,String paperId,ExportStructure exportStructure,AccessUser accessUser) throws Exception {
 		ExportServiceManage esm = exportServiceManageRepo.findByOrgName("陕西师范大学");
     	ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils.getBeanById(esm.getExportServiceName());
-    	exportPaperAbstractService.uploadFile(extractConfig,paperId,accessUser,exportStructureMap);
+    	exportPaperAbstractService.uploadFile(extractConfig,paperId,exportStructure,accessUser);
 	}
 
 	@Override
@@ -676,8 +670,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
     
     @Override
 	public void exportExamPaperInfoCheck(ExportPaperInfoModel exportModel,HttpServletResponse response) throws Exception {
-    	Map<String, Object> exportStructureMap = exportStructureService.findStructureByExamIdAndExamType(exportModel.getExamId()+"",exportModel.getExamType());
-		ExportStructure exportStructure = (ExportStructure) exportStructureMap.get("exportStructure");
+    	ExportStructure exportStructure = exportStructureService.findStructureByExamId(exportModel.getExamId()+"");
 		//如果是批量导出
 		if(exportModel.getExportWay()==ExportWay.BATCH){
 			if(exportStructure==null){
@@ -696,8 +689,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		FileDisposeUtil.createDirectory(zipDirectory);
 		//如果是批量导出,首先检查该考试下的所有课程是否都制定了调卷规则
 		List<String> paperIds = new ArrayList<String>();
-		Map<String, Object> exportStructureMap = exportStructureService.findStructureByExamIdAndExamType(exportModel.getExamId()+"",exportModel.getExamType());
-		ExportStructure exportStructure = (ExportStructure) exportStructureMap.get("exportStructure");
+		ExportStructure exportStructure = exportStructureService.findStructureByExamId(exportModel.getExamId()+"");
 		//如果是批量导出
 		if(exportModel.getExportWay()==ExportWay.BATCH){
 			if(exportStructure==null){
@@ -714,15 +706,15 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		List<ExamFile> examFiles = examFileService.findExamFileListByExportPaperInfoModel(exportModel);
 		if(examFiles!=null&&examFiles.size()>0){
 			for(ExamFile examFile:examFiles){
-				FileDisposeUtil.saveUrlAs(downloadUrl+examFile.getFilePath(),downloadDirectory+"\\"+examFile.getFileName());
+				FileDisposeUtil.saveUrlAs(downloadUrl+examFile.getFilePath(),downloadDirectory+File.separator+examFile.getFileName());
 			}
 		}
 		//创建压缩文件名称
-		String zipFileName = exportStructure.getExamName()+"_"+exportStructure.getExamType().name()+"_"+CommonUtils.getCurNum();
+		String zipFileName = CommonUtils.getCurNum();
 		//将downloadDirectory文件夹压缩成zip文件,存放到zipDirectory文件夹中
 		FileDisposeUtil.fileToZip(downloadDirectory,zipDirectory,zipFileName);
 		//下载zip文件到客户端
-		FileDisposeUtil.downloadFile(zipFileName+".zip",zipDirectory+"\\"+zipFileName+".zip",response);
+		FileDisposeUtil.downloadFile(zipFileName+".zip",zipDirectory+File.separator+zipFileName+".zip",response);
 	}
 	
 	/**
@@ -740,7 +732,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 			extractConfig = findConfig(extractConfig);
 			Map<String,String> finishedPaperIdMap = extractConfig.getFinishedPaperIdMap();
 			if(extractConfig==null||finishedPaperIdMap==null){
-				throw new RuntimeException("该考试下的课程没有全部制定调卷规则或考试文件没有生成,不能批量导出");
+				throw new RuntimeException("该考试下的课程“"+extractConfig.getCourseName()+"”没有制定调卷规则或考试文件没有生成,不能批量导出");
 			}
 			Set<Entry<String,String>> entry = finishedPaperIdMap.entrySet();
 			Iterator<Entry<String,String>> iterator = entry.iterator();
@@ -752,14 +744,6 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		return paperIdList;
 	}
 	
-	@Override
-	public List<ExamFile> findPaperStructure(String examId, String courseId) {
-		ExamFile examFile = new ExamFile();
-		examFile.setExamId(examId);
-		examFile.setCourseId(courseId);
-		return examFileService.findExamFileListByExamFile(examFile);
-	}
-	
 	private void makePaperStructure(String examName,List<String> paperIds,ExportStructure exportStructure) throws Exception{
 		List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
 		
@@ -768,8 +752,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		List<SubjectiveQuestionStructure> subjectiveQuestionStructureList = new ArrayList<SubjectiveQuestionStructure>();
 		
 		for(String paperId:paperIds){
-			Map<String,Object> dataMap = sxsfExportPaperService.initExportPaper(paperId);
-			PaperExp paperExp = (PaperExp) dataMap.get("paper");
+			PaperExp paperExp = sxsfExportPaperService.initExportPaper(paperId);
 			List<PaperDetailExp> objectiveDetails = paperExp.getObjectiveDetails();
 			//根据设置补齐客观题
 			sxsfExportPaperService.fillObjectiveQuestions(objectiveDetails, questionTypeNums);
@@ -800,4 +783,28 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
     	subjectiveExcelExporter.write(examName+"_主观题.xlsx",subjectiveQuestionStructureList,out2);
 	}
 
+	@Override
+	public Page<ExtractConfig> findPageExtractConfig(int currentPage,int pageSize, Long examId, String courseNo) {
+		String examCourseJson = examCourseClient.findPageExamCourse(examId,courseNo,currentPage,pageSize);
+		
+		PageExamCourse pageExamCourse = GsonUtil.getInstanceByJson(examCourseJson,PageExamCourse.class);
+		
+		List<ExamCourseDto> examCourseList = pageExamCourse.getContent();
+		if(examCourseList.size()==0){
+			throw new RuntimeException("考务系统无数据返回");
+		}
+		List<ExtractConfig> extractConfigs = new ArrayList<ExtractConfig>();
+		for(ExamCourseDto examCourseDto:examCourseList){
+			ExtractConfig condition = new ExtractConfig();
+			condition.setExamId(examCourseDto.getExamId());
+			condition.setCourseCode(examCourseDto.getCourseCode());
+			ExtractConfig extractConfig = this.findConfig(condition);
+			if(extractConfig==null){
+				extractConfig = new ExtractConfig(examCourseDto);
+			}
+			extractConfigs.add(extractConfig);
+		}
+		return new PageImpl<ExtractConfig>(extractConfigs,new PageRequest(currentPage,pageSize),pageExamCourse.getTotalElements());
+	}
+
 }

+ 39 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExamFileController.java

@@ -0,0 +1,39 @@
+package com.qmth.cqb.paper.web;
+
+import io.swagger.annotations.ApiOperation;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import com.qmth.cqb.paper.model.ExamFile;
+import com.qmth.cqb.paper.service.ExamFileService;
+
+/**
+ * @author  	chenken
+ * @date    	2017年7月25日 下午2:21:57
+ * @company 	QMTH
+ * @description ExamFileController.java
+ */
+@Controller
+@RequestMapping("${api_cqb}/")
+public class ExamFileController {
+	
+	@Autowired
+	private ExamFileService examFileService;
+	
+	@ApiOperation(value = "查询试卷文件", notes = "查询试卷文件")
+	@PostMapping(value = "/findExamFile")
+	public ResponseEntity findExamFile(@RequestBody ExamFile examFile){
+		List<ExamFile> examFiles = examFileService.findExamFileListByExamFile(examFile);
+		return new ResponseEntity(examFiles,HttpStatus.OK);
+	}
+}
+

+ 8 - 7
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExportStructureController.java

@@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import cn.com.qmth.examcloud.common.dto.em.enums.ExamType;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
 import com.qmth.cqb.paper.model.ExportStructure;
@@ -51,10 +50,13 @@ public class ExportStructureController {
 	
 	@ApiOperation(value = "分页查询导出结构", notes = "分页查询导出结构")
     @PostMapping(value = "/findPageByExportStructure/{curPage}/{pageSize}")
-	public ResponseEntity findPageByExportStructure(@PathVariable int curPage,
+	public ResponseEntity findPageByExportStructure(HttpServletRequest request,
+													@PathVariable int curPage,
 													@PathVariable int pageSize,
 													@RequestBody ExportStructure exportStructure){
 		try{
+			AccessUser user = (AccessUser) request.getAttribute("accessUser");
+			exportStructure.setOrgId(user.getRootOrgId()+"");
 			Page<ExportStructure> pageExportStructure = exportStructureService.findPageByExportStructure(exportStructure, curPage, pageSize);
 			return new ResponseEntity(pageExportStructure,HttpStatus.OK);
 		}catch(Exception e){
@@ -62,11 +64,10 @@ public class ExportStructureController {
 		}
 	}
 	
-	@ApiOperation(value="根据考试类型和考试名称查询导出结构",notes="根据考试类型和考试名称查询导出结构")
-	@GetMapping(value="/findExportStructureByExamTypeAndExamId/{examType}/{examId}")
-	public ResponseEntity findExportStructureByExamTypeAndExamId(@PathVariable String examType,
-																 @PathVariable String examId){
-		ExportStructure exportStructure = exportStructureService.findByExportStructure(new ExportStructure(examId,ExamType.strToEnum(examType)));
+	@ApiOperation(value="根据考试ID查询导出结构",notes="根据考试ID查询导出结构")
+	@GetMapping(value="/findExportStructure/{examId}")
+	public ResponseEntity findExportStructureByExamTypeAndExamId(@PathVariable String examId){
+		ExportStructure exportStructure = exportStructureService.findByExportStructure(new ExportStructure(examId));
 		return new ResponseEntity(exportStructure,HttpStatus.OK);
 	}
 	

+ 22 - 15
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractConfigController.java

@@ -1,7 +1,6 @@
 package com.qmth.cqb.paper.web;
 
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -16,6 +15,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
@@ -24,17 +24,15 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import cn.com.qmth.examcloud.common.dto.question.PaperDto;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import cn.com.qmth.examcloud.common.util.ErrorMsg;
 
 import com.qmth.cqb.paper.dto.ExportPaperInfoModel;
-import com.qmth.cqb.paper.model.ExamFile;
 import com.qmth.cqb.paper.model.ExtractConfig;
-import com.qmth.cqb.paper.model.computerTestModel.ComputerTestPaper;
 import com.qmth.cqb.paper.service.ExtractConfigService;
-import com.qmth.cqb.paper.service.export.SxsfExportPaperService;
 import com.qmth.cqb.utils.enums.ExportWay;
 
 
@@ -53,8 +51,20 @@ public class ExtractConfigController {
 	@Autowired
 	private ExtractConfigService extractConfigService;
 	
-	@Autowired
-	private SxsfExportPaperService sxsfExportPaperService;
+	@ApiOperation(value = "根据考试ID和课程ID获取调卷规则", notes = "根据考试ID和课程ID获取调卷规则")
+    @GetMapping(value = "/findPageExtractConfig/{currentPage}/{pageSize}")
+	public ResponseEntity findPageExtractConfig(@PathVariable int currentPage,
+														       @PathVariable int pageSize,
+															   @RequestParam("examId") Long examId,
+															   @RequestParam("courseNo") String courseNo){
+		try{
+			Page<ExtractConfig> extractConfigPageList = extractConfigService.findPageExtractConfig(currentPage,pageSize,examId,courseNo);
+			return new ResponseEntity<Page<ExtractConfig>>(extractConfigPageList,HttpStatus.OK);
+		}catch(Exception e){
+			e.printStackTrace();
+			return new ResponseEntity<Object>(new ErrorMsg(e.getMessage()),HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
 	
 	@ApiOperation(value = "根据考试ID和课程ID获取调卷规则", notes = "根据考试ID和课程ID获取调卷规则")
     @GetMapping(value = "/extractConfig/{examId}/{courseCode}")
@@ -81,9 +91,10 @@ public class ExtractConfigController {
 		try{
 			AccessUser user = (AccessUser) request.getAttribute("accessUser");
 			extractConfig.setOrgId(user.getRootOrgId()+"");
-			Map<String,Object> returnMap = extractConfigService.saveExtractConfig(extractConfig,orgName,user);
-			return new ResponseEntity<Object>(returnMap,HttpStatus.OK);
+			extractConfigService.saveExtractConfig(extractConfig,orgName,user);
+			return new ResponseEntity<Object>(HttpStatus.OK);
 		}catch(Exception e){
+			e.printStackTrace();
 			return new ResponseEntity<Object>(new ErrorMsg(e.getMessage()),HttpStatus.INTERNAL_SERVER_ERROR);
 		}
 	}
@@ -170,6 +181,7 @@ public class ExtractConfigController {
 		try {
 			extractConfigService.exportExamPaperInfo(exportModel,response);
 		} catch (Exception e) {
+			logger.error("Method:exportExamPaperInfo"+e.getMessage());
 			e.printStackTrace();
 		}
 	}
@@ -186,6 +198,7 @@ public class ExtractConfigController {
 			extractConfigService.exportExamPaperInfoCheck(exportModel,response);
 			return new ResponseEntity<String>(HttpStatus.OK);
 		} catch (Exception e) {
+			logger.error("Method:exportExamPaperInfoCheck"+e.getMessage());
 			return new ResponseEntity<String>(e.getMessage(),HttpStatus.OK);
 		}
 	}
@@ -209,15 +222,9 @@ public class ExtractConfigController {
 		try {
 			extractConfigService.exportExamPaperInfo(exportModel,response);
 		} catch (Exception e) {
+			logger.error("Method:exportExamPaperInfo"+e.getMessage());
 			e.printStackTrace();
 		}
 	}
 	
-	@ApiOperation(value = "检查该考试下该课程是否生成试卷文件", notes = "检查该考试下该课程是否生成试卷文件")
-	@GetMapping(value = "/findPaperStructure/{examId}/{courseId}")
-	public ResponseEntity findPaperStructure(@PathVariable String examId,@PathVariable String courseId){
-		List<ExamFile> examFiles = extractConfigService.findPaperStructure(examId,courseId);
-		return new ResponseEntity(examFiles,HttpStatus.OK);
-	}
-
 }	

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

@@ -49,6 +49,7 @@ import cn.com.qmth.examcloud.common.uac.annotation.Uac;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import cn.com.qmth.examcloud.common.uac.enums.RoleMeta;
 import cn.com.qmth.examcloud.common.uac.enums.UacPolicy;
+import cn.com.qmth.examcloud.common.util.ErrorMsg;
 import io.swagger.annotations.ApiOperation;
 
 /**
@@ -543,21 +544,19 @@ public class PaperController {
     @PutMapping(value = "/useBasePaper/{paperIds}")
     public ResponseEntity useBasePaper(HttpServletRequest request,@PathVariable String paperIds){
     	AccessUser user = (AccessUser) request.getAttribute("accessUser");
-    	user = new AccessUser();
-    	user.setRootOrgId(1L);
     	try{
     		String[] paperIdArray = paperIds.split(",");
         	for(int i = 0;i<paperIdArray.length;i++){
         		Paper oldpaper = paperRepo.findOne(paperIdArray[i]);
         		boolean result = paperService.checkPaperName(oldpaper.getName(), PaperType.GENERATE,user.getRootOrgId()+"");
         		if(!result){
-        			return new ResponseEntity("考试试卷:"+oldpaper.getName()+"已经存在",HttpStatus.INTERNAL_SERVER_ERROR);
+        			return new ResponseEntity(new ErrorMsg("考试试卷:"+oldpaper.getName()+"已经存在"),HttpStatus.OK);
         		}
         	}
     		paperService.useBasePaper(paperIds, user.getName());
     		return new ResponseEntity(HttpStatus.OK);
     	}catch(Exception e){
-    		return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
+    		return new ResponseEntity(e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
     	}
     }
 }

+ 9 - 1
cqb-starter/src/main/resources/application-prod.properties

@@ -6,4 +6,12 @@ eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
 spring.application.name=ExamCloud-service-question
 
 spring.redis.host=127.0.0.1
-spring.redis.port=6379
+spring.redis.port=6379
+
+upyun.bucketName=exam-cloud-test
+upyun.userName=examcloud
+upyun.password=examcloud123456
+upyun.uploadUrl=/comm-ques-bank/exam-paper-file/
+upyun.downloadUrl=http://exam-cloud-test.b0.upaiyun.com
+upyun.downloadDirectory=paperDirectory
+upyun.zipDirectory=paperZipDirectory