Преглед на файлове

Merge branch 'dev0410'

# Conflicts:
#	cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigServiceImpl.java
#	cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java
#	cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java
#	cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractConfigController.java
#	cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperController.java
#	cqb-starter/src/main/java/com/qmth/cqb/AccessControlConfig.java
#	cqb-starter/src/main/java/com/qmth/cqb/App.java
#	cqb-starter/src/main/resources/application-dev.properties
宋悦 преди 8 години
родител
ревизия
d562c76f37
променени са 22 файла, в които са добавени 362 реда и са изтрити 340 реда
  1. 3 0
      cqb-comm-utils/src/main/java/com/qmth/cqb/utils/CommonUtils.java
  2. 7 11
      cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java
  3. 70 92
      cqb-comm-utils/src/main/resources/paper_template.ftl
  4. 2 2
      cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/service/GenPaperService.java
  5. 1 1
      cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/web/GenPaperController.java
  6. 9 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PaperDetailExp.java
  7. 10 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PaperExp.java
  8. 23 2
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExportPaperService.java
  9. 1 1
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigServiceImpl.java
  10. 13 17
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java
  11. 14 11
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperDetailUnitService.java
  12. 95 112
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java
  13. 11 1
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperStructService.java
  14. 8 16
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractConfigController.java
  15. 28 32
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperController.java
  16. 13 7
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperDetailUnitController.java
  17. 11 7
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperStructController.java
  18. 33 8
      cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuesService.java
  19. 7 10
      cqb-starter/src/main/java/com/qmth/cqb/App.java
  20. 1 8
      cqb-starter/src/main/resources/application-dev.properties
  21. 1 1
      cqb-starter/src/main/resources/application.properties
  22. 1 1
      cqb-starter/src/main/resources/log4j2.xml

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

@@ -24,6 +24,9 @@ public final class CommonUtils {
 
     private static final String[] CN_BIG_NUM = { "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千" };
 
+    public static final String PAPER_TITLE="山东大学网络教育";
+    public static final String PAPER_SUB_TITLE="2016-2017学年第一学期期末考试";
+
     /**
      * 加载properties配置文件
      * 

+ 7 - 11
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java

@@ -824,22 +824,18 @@ public final class DocxProcessUtil {
      * @return
      * @throws Exception
      */
-    public static String html2Docx(WordprocessingMLPackage wordMLPackage,String html){
+    public static String html2Docx(WordprocessingMLPackage wordMLPackage,String html)throws Exception{
         initPkgImage(wordMLPackage);
         XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
         String wordMl = "";
-        try {
-            wordMLPackage.getMainDocumentPart().getContent().addAll(
+        wordMLPackage.getMainDocumentPart().getContent().addAll(
                     XHTMLImporter.convert( html, null) );
-            // 获取word文档中所有段落
-            List<Object> pList = getAllElementFromObject(wordMLPackage.getMainDocumentPart(), P.class);
-            for(Object p:pList){
-                wordMl += XmlUtils.marshaltoString(p);
-            }
-//            wordMl = formatPWordMl(wordMl);
-        }catch (Exception e){
-            e.printStackTrace();
+        // 获取word文档中所有段落
+        List<Object> pList = getAllElementFromObject(wordMLPackage.getMainDocumentPart(), P.class);
+        for(Object p:pList){
+            wordMl += XmlUtils.marshaltoString(p);
         }
+//            wordMl = formatPWordMl(wordMl);
         return wordMl;
     }
 

+ 70 - 92
cqb-comm-utils/src/main/resources/paper_template.ftl

@@ -30,165 +30,147 @@
         <pkg:xmlData>
             <w:document mc:Ignorable="w14 wp14" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
                 <w:body>
-                    <w:p w14:paraId="7BAF7CA4" w14:textId="77777777" w:rsidR="00097880" w:rsidRPr="00F17E43" w:rsidRDefault="00097880" w:rsidP="00097880">
+                    <w:p w14:paraId="3A033879" w14:textId="6D153FE6" w:rsidR="00097880" w:rsidRPr="00974876" w:rsidRDefault="00F24E78" w:rsidP="00974876">
                         <w:pPr>
+                            <w:spacing w:beforeLines="50" w:before="217"/>
+                            <w:jc w:val="center"/>
                             <w:rPr>
-                                <w:rFonts w:eastAsia="黑体"/>
-                                <w:szCs w:val="21"/>
+                                <w:rFonts w:ascii="黑体" w:eastAsia="黑体" w:hAnsi="黑体" w:hint="eastAsia"/>
+                                <w:b/>
+                                <w:sz w:val="52"/>
+                                <w:szCs w:val="44"/>
                             </w:rPr>
                         </w:pPr>
-                        <w:r w:rsidRPr="00F17E43">
+                        <w:r w:rsidRPr="00974876">
                             <w:rPr>
-                                <w:rFonts w:ascii="黑体" w:eastAsia="黑体" w:hAnsi="黑体"/>
-                                <w:szCs w:val="21"/>
+                                <w:rFonts w:ascii="黑体" w:eastAsia="黑体" w:hAnsi="黑体" w:hint="eastAsia"/>
+                                <w:b/>
+                                <w:sz w:val="52"/>
+                                <w:szCs w:val="44"/>
                             </w:rPr>
-                            <w:t>绝密★启用前</w:t>
+                            <w:t>${paper.title}</w:t>
                         </w:r>
                     </w:p>
-                    <w:p w14:paraId="3A033879" w14:textId="38B2CCD4" w:rsidR="00097880" w:rsidRPr="00FD0974" w:rsidRDefault="00F24E78" w:rsidP="008239B8">
+                    <w:p w14:paraId="59CB5E42" w14:textId="367D1B47" w:rsidR="00974876" w:rsidRPr="00974876" w:rsidRDefault="00974876" w:rsidP="00974876">
                         <w:pPr>
                             <w:spacing w:beforeLines="50" w:before="217"/>
                             <w:jc w:val="center"/>
                             <w:rPr>
-                                <w:rFonts w:eastAsia="方正小标宋_GBK"/>
+                                <w:rFonts w:ascii="黑体" w:eastAsia="黑体" w:hAnsi="黑体" w:hint="eastAsia"/>
                                 <w:b/>
-                                <w:sz w:val="44"/>
+                                <w:sz w:val="28"/>
                                 <w:szCs w:val="44"/>
                             </w:rPr>
                         </w:pPr>
-                        <w:r>
-                            <w:rPr>
-                                <w:rFonts w:eastAsia="方正小标宋_GBK" w:hint="eastAsia"/>
-                                <w:b/>
-                                <w:sz w:val="44"/>
-                                <w:szCs w:val="44"/>
-                            </w:rPr>
-                            <w:t>${paper.courseName}</w:t>
-                        </w:r>
-                        <w:r w:rsidR="00097880" w:rsidRPr="00FD0974">
+                        <w:r w:rsidRPr="00974876">
                             <w:rPr>
-                                <w:rFonts w:eastAsia="方正小标宋_GBK"/>
+                                <w:rFonts w:ascii="黑体" w:eastAsia="黑体" w:hAnsi="黑体" w:hint="eastAsia"/>
                                 <w:b/>
-                                <w:sz w:val="44"/>
+                                <w:sz w:val="28"/>
                                 <w:szCs w:val="44"/>
                             </w:rPr>
-                            <w:t>试卷</w:t>
+                            <w:t>${paper.subTitle}</w:t>
                         </w:r>
                     </w:p>
-                    <w:p w14:paraId="289A3FF1" w14:textId="77777777" w:rsidR="00097880" w:rsidRPr="007E01D1" w:rsidRDefault="00097880" w:rsidP="00EA765B">
+                    <w:p w14:paraId="012E5706" w14:textId="2384D476" w:rsidR="005E6C64" w:rsidRPr="00974876" w:rsidRDefault="00974876" w:rsidP="00974876">
                         <w:pPr>
                             <w:spacing w:beforeLines="50" w:before="217" w:afterLines="50" w:after="217"/>
                             <w:jc w:val="center"/>
                             <w:rPr>
+                                <w:rFonts w:ascii="黑体" w:eastAsia="黑体" w:hAnsi="黑体" w:hint="eastAsia"/>
                                 <w:bCs/>
                                 <w:sz w:val="28"/>
                                 <w:szCs w:val="28"/>
                             </w:rPr>
                         </w:pPr>
-                        <w:r w:rsidRPr="007E01D1">
+                        <w:r w:rsidRPr="00974876">
                             <w:rPr>
+                                <w:rFonts w:ascii="黑体" w:eastAsia="黑体" w:hAnsi="黑体" w:hint="eastAsia"/>
                                 <w:bCs/>
                                 <w:sz w:val="28"/>
                                 <w:szCs w:val="28"/>
                             </w:rPr>
-                            <w:t>(课程代码</w:t>
+                            <w:t></w:t>
                         </w:r>
-                        <w:r w:rsidR="00F24E78">
+                        <w:r w:rsidR="00F24E78" w:rsidRPr="00974876">
                             <w:rPr>
-                                <w:rFonts w:hint="eastAsia"/>
+                                <w:rFonts w:ascii="黑体" w:eastAsia="黑体" w:hAnsi="黑体" w:hint="eastAsia"/>
                                 <w:bCs/>
                                 <w:sz w:val="28"/>
                                 <w:szCs w:val="28"/>
                             </w:rPr>
-                            <w:t>${paper.courseNo}</w:t>
+                            <w:t>${paper.courseName}</w:t>
                         </w:r>
-                        <w:r w:rsidRPr="007E01D1">
+                        <w:r w:rsidRPr="00974876">
                             <w:rPr>
+                                <w:rFonts w:ascii="黑体" w:eastAsia="黑体" w:hAnsi="黑体" w:hint="eastAsia"/>
                                 <w:bCs/>
                                 <w:sz w:val="28"/>
                                 <w:szCs w:val="28"/>
                             </w:rPr>
-                            <w:t></w:t>
+                            <w:t></w:t>
                         </w:r>
                     </w:p>
-                    <w:p w14:paraId="4093CD0E" w14:textId="77777777" w:rsidR="00097880" w:rsidRPr="00F17E43" w:rsidRDefault="00097880" w:rsidP="00F17E43">
+                    <!--循环大题-->
+                    <#if paper.paperDetails?exists>
+                    <#list paper.paperDetails as paperDetail>
+                    <w:p w14:paraId="69CD38D9" w14:textId="04C0CD44" w:rsidR="00097880" w:rsidRDefault="00C62FAC" w:rsidP="00430FE2">
                         <w:pPr>
-                            <w:ind w:firstLineChars="50" w:firstLine="105"/>
+                            <w:adjustRightInd w:val="0"/>
+                            <w:snapToGrid w:val="0"/>
+                            <w:spacing w:beforeLines="30" w:before="130" w:line="320" w:lineRule="exact"/>
                             <w:rPr>
                                 <w:color w:val="000000"/>
                                 <w:szCs w:val="21"/>
                             </w:rPr>
                         </w:pPr>
-                        <w:r w:rsidRPr="00F17E43">
-                            <w:rPr>
-                                <w:rFonts w:eastAsia="黑体"/>
-                                <w:color w:val="000000"/>
-                                <w:szCs w:val="21"/>
-                            </w:rPr>
-                            <w:t>本试卷共 页,满分</w:t>
-                        </w:r>
-                        <w:r w:rsidRPr="00F17E43">
+                        <w:r>
                             <w:rPr>
-                                <w:rFonts w:eastAsia="黑体"/>
+                                <w:rFonts w:hint="eastAsia"/>
                                 <w:color w:val="000000"/>
                                 <w:szCs w:val="21"/>
                             </w:rPr>
-                            <w:t>100</w:t>
+                            <w:t>${paperDetail.cnNum}</w:t>
                         </w:r>
-                        <w:r w:rsidR="00F24E78">
+                        <w:r w:rsidR="00574041" w:rsidRPr="00574041">
                             <w:rPr>
-                                <w:rFonts w:eastAsia="黑体"/>
+                                <w:rFonts w:hint="eastAsia"/>
                                 <w:color w:val="000000"/>
                                 <w:szCs w:val="21"/>
                             </w:rPr>
-                            <w:t></w:t>
+                            <w:t></w:t>
                         </w:r>
-                        <w:r w:rsidRPr="00F17E43">
+                        <w:r w:rsidR="00EC5025">
                             <w:rPr>
-                                <w:rFonts w:eastAsia="黑体"/>
+                                <w:rFonts w:hint="eastAsia"/>
                                 <w:color w:val="000000"/>
                                 <w:szCs w:val="21"/>
                             </w:rPr>
-                            <w:t></w:t>
+                            <w:t>${paperDetail.name}</w:t>
                         </w:r>
-                    </w:p>
-                    <w:p w14:paraId="012E5706" w14:textId="77777777" w:rsidR="005E6C64" w:rsidRDefault="005E6C64"/>
-                    <!--循环大题-->
-                    <#if paper.paperDetails?exists>
-                    <#list paper.paperDetails as paperDetail>
-                    <w:p w14:paraId="69CD38D9" w14:textId="19BE6F21" w:rsidR="00097880" w:rsidRDefault="00C62FAC" w:rsidP="00430FE2">
-                        <w:pPr>
-                            <w:adjustRightInd w:val="0"/>
-                            <w:snapToGrid w:val="0"/>
-                            <w:spacing w:beforeLines="30" w:before="130" w:line="320" w:lineRule="exact"/>
-                            <w:rPr>
-                                <w:color w:val="000000"/>
-                                <w:szCs w:val="21"/>
-                            </w:rPr>
-                        </w:pPr>
-                        <w:r>
+                        <w:r w:rsidR="009804AF">
                             <w:rPr>
                                 <w:rFonts w:hint="eastAsia"/>
                                 <w:color w:val="000000"/>
                                 <w:szCs w:val="21"/>
                             </w:rPr>
-                            <w:t>${paperDetail.cnNum}</w:t>
+                            <w:t>(</w:t>
                         </w:r>
-                        <w:r w:rsidR="00574041" w:rsidRPr="00574041">
+                        <w:r w:rsidR="00974876">
                             <w:rPr>
                                 <w:rFonts w:hint="eastAsia"/>
                                 <w:color w:val="000000"/>
                                 <w:szCs w:val="21"/>
                             </w:rPr>
-                            <w:t></w:t>
+                            <w:t>${paperDetail.title}</w:t>
                         </w:r>
-                        <w:r w:rsidR="00EC5025">
+                        <w:r w:rsidR="009804AF">
                             <w:rPr>
                                 <w:rFonts w:hint="eastAsia"/>
                                 <w:color w:val="000000"/>
                                 <w:szCs w:val="21"/>
                             </w:rPr>
-                            <w:t>${paperDetail.name}</w:t>
+                            <w:t>)</w:t>
                         </w:r>
                     </w:p>
                     <w:p w14:paraId="58E61D59" w14:textId="77777777" w:rsidR="00A8194A" w:rsidRDefault="00A8194A" w:rsidP="00430FE2">
@@ -253,10 +235,10 @@
                     </#if>
                     </#list>
                     </#if>
-                    <w:sectPr w:rsidR="003D5A89" w:rsidSect="00097880">
+                    <w:sectPr w:rsidR="003D5A89" w:rsidSect="00FF43E5">
                         <w:headerReference w:type="default" r:id="rId7"/>
                         <w:footerReference w:type="default" r:id="rId8"/>
-                        <w:pgSz w:w="11906" w:h="16838" w:code="9"/>
+                        <w:pgSz w:w="16840" w:h="23820" w:code="9"/>
                         <w:pgMar w:top="2098" w:right="1814" w:bottom="2098" w:left="1814" w:header="851" w:footer="1814" w:gutter="0"/>
                         <w:cols w:space="425"/>
                         <w:docGrid w:type="lines" w:linePitch="435"/>
@@ -393,7 +375,7 @@
                                         </w:rPr>
                                         <w:fldChar w:fldCharType="separate"/>
                                     </w:r>
-                                    <w:r w:rsidR="0007685A">
+                                    <w:r w:rsidR="00FF43E5">
                                         <w:rPr>
                                             <w:rFonts w:eastAsiaTheme="minorEastAsia"/>
                                             <w:bCs/>
@@ -448,7 +430,7 @@
                                         </w:rPr>
                                         <w:fldChar w:fldCharType="separate"/>
                                     </w:r>
-                                    <w:r w:rsidR="0007685A">
+                                    <w:r w:rsidR="00FF43E5">
                                         <w:rPr>
                                             <w:rFonts w:eastAsiaTheme="minorEastAsia"/>
                                             <w:bCs/>
@@ -779,7 +761,7 @@
                 <w:proofState w:spelling="clean" w:grammar="clean"/>
                 <w:stylePaneFormatFilter w:val="3F01" w:allStyles="1" w:customStyles="0" w:latentStyles="0" w:stylesInUse="0" w:headingStyles="0" w:numberingStyles="0" w:tableStyles="0" w:directFormattingOnRuns="1" w:directFormattingOnParagraphs="1" w:directFormattingOnNumbering="1" w:directFormattingOnTables="1" w:clearFormatting="1" w:top3HeadingStyles="1" w:visibleStyles="0" w:alternateStyleNames="0"/>
                 <w:defaultTabStop w:val="420"/>
-                <w:drawingGridHorizontalSpacing w:val="160"/>
+                <w:drawingGridHorizontalSpacing w:val="105"/>
                 <w:drawingGridVerticalSpacing w:val="435"/>
                 <w:displayHorizontalDrawingGridEvery w:val="0"/>
                 <w:characterSpacingControl w:val="compressPunctuation"/>
@@ -874,6 +856,8 @@
                     <w:rsid w:val="0094646F"/>
                     <w:rsid w:val="00950F33"/>
                     <w:rsid w:val="00965B17"/>
+                    <w:rsid w:val="00974876"/>
+                    <w:rsid w:val="009804AF"/>
                     <w:rsid w:val="00985EFB"/>
                     <w:rsid w:val="009A14B0"/>
                     <w:rsid w:val="009A1711"/>
@@ -930,6 +914,7 @@
                     <w:rsid w:val="00FC5A19"/>
                     <w:rsid w:val="00FD0974"/>
                     <w:rsid w:val="00FE31B1"/>
+                    <w:rsid w:val="00FF43E5"/>
                 </w:rsids>
                 <m:mathPr>
                     <m:mathFont m:val="Cambria Math"/>
@@ -1245,7 +1230,7 @@
                     <w:charset w:val="00"/>
                     <w:family w:val="auto"/>
                     <w:pitch w:val="variable"/>
-                    <w:sig w:usb0="E0002AFF" w:usb1="C0007841" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/>
+                    <w:sig w:usb0="00000003" w:usb1="00000000" w:usb2="00000000" w:usb3="00000000" w:csb0="00000001" w:csb1="00000000"/>
                 </w:font>
                 <w:font w:name="宋体">
                     <w:panose1 w:val="02010600030101010101"/>
@@ -1259,7 +1244,7 @@
                     <w:charset w:val="00"/>
                     <w:family w:val="auto"/>
                     <w:pitch w:val="variable"/>
-                    <w:sig w:usb0="E0002AFF" w:usb1="C0007843" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/>
+                    <w:sig w:usb0="00000003" w:usb1="00000000" w:usb2="00000000" w:usb3="00000000" w:csb0="00000001" w:csb1="00000000"/>
                 </w:font>
                 <w:font w:name="MS Mincho">
                     <w:altName w:val="MS 明朝"/>
@@ -1275,19 +1260,12 @@
                     <w:pitch w:val="variable"/>
                     <w:sig w:usb0="800002BF" w:usb1="38CF7CFA" w:usb2="00000016" w:usb3="00000000" w:csb0="00040001" w:csb1="00000000"/>
                 </w:font>
-                <w:font w:name="方正小标宋_GBK">
-                    <w:altName w:val="Arial Unicode MS"/>
-                    <w:charset w:val="86"/>
-                    <w:family w:val="script"/>
-                    <w:pitch w:val="fixed"/>
-                    <w:sig w:usb0="00000000" w:usb1="080E0000" w:usb2="00000010" w:usb3="00000000" w:csb0="00040000" w:csb1="00000000"/>
-                </w:font>
                 <w:font w:name="Arial">
                     <w:panose1 w:val="020B0604020202020204"/>
                     <w:charset w:val="00"/>
                     <w:family w:val="auto"/>
                     <w:pitch w:val="variable"/>
-                    <w:sig w:usb0="E0002AFF" w:usb1="C0007843" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/>
+                    <w:sig w:usb0="00000003" w:usb1="00000000" w:usb2="00000000" w:usb3="00000000" w:csb0="00000001" w:csb1="00000000"/>
                 </w:font>
                 <w:font w:name="Cambria">
                     <w:panose1 w:val="02040503050406030204"/>
@@ -1312,10 +1290,10 @@
                 <dc:title>绝密★启用前</dc:title>
                 <dc:creator>QMTH</dc:creator>
                 <cp:lastModifiedBy>悦 宋</cp:lastModifiedBy>
-                <cp:revision>16</cp:revision>
+                <cp:revision>22</cp:revision>
                 <cp:lastPrinted>2010-11-01T11:38:00Z</cp:lastPrinted>
                 <dcterms:created xsi:type="dcterms:W3CDTF">2017-03-14T10:02:00Z</dcterms:created>
-                <dcterms:modified xsi:type="dcterms:W3CDTF">2017-03-14T10:19:00Z</dcterms:modified>
+                <dcterms:modified xsi:type="dcterms:W3CDTF">2017-04-21T10:31:00Z</dcterms:modified>
             </cp:coreProperties>
         </pkg:xmlData>
     </pkg:part>
@@ -1592,10 +1570,10 @@
         <pkg:xmlData>
             <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
                 <Template>Normal.dotm</Template>
-                <TotalTime>4</TotalTime>
+                <TotalTime>11</TotalTime>
                 <Pages>1</Pages>
-                <Words>36</Words>
-                <Characters>210</Characters>
+                <Words>17</Words>
+                <Characters>102</Characters>
                 <Application>Microsoft Macintosh Word</Application>
                 <DocSecurity>0</DocSecurity>
                 <Lines>1</Lines>
@@ -1603,7 +1581,7 @@
                 <ScaleCrop>false</ScaleCrop>
                 <Company>Lenovo (Beijing) Limited</Company>
                 <LinksUpToDate>false</LinksUpToDate>
-            <CharactersWithSpaces>245</CharactersWithSpaces>
+            <CharactersWithSpaces>118</CharactersWithSpaces>
             <SharedDoc>false</SharedDoc>
             <HyperlinksChanged>false</HyperlinksChanged>
             <AppVersion>14.0000</AppVersion>

+ 2 - 2
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/service/GenPaperService.java

@@ -200,11 +200,11 @@ public class GenPaperService {
                     int index = (int) (Math.random() * size);
                     int ranmdomNum = canChooseNestNum.get(index);// 取第一个
                     if (ranmdomNum == 0) {// 假如随机到0个套题
-                        selectedUnits = this.getNeedUnits(null, unitList, needQuesNum);
+                        selectedUnits.addAll(this.getNeedUnits(null, unitList, needQuesNum));
                     } else {
                         List<Integer> sumList = new ArrayList<Integer>();
                         sumList = CombinationUtils.combiantion(nestQums, needQuesNum, ranmdomNum);
-                        selectedUnits = this.getNeedUnits(sumList, unitList, needQuesNum);// 有套题情况
+                        selectedUnits.addAll(this.getNeedUnits(sumList, unitList, needQuesNum));// 有套题情况
                     }
                 } else {
                     msg = "题源不足,请检查题源";

+ 1 - 1
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/web/GenPaperController.java

@@ -56,7 +56,7 @@ public class GenPaperController {
 
             } else if (genPaperDto.getSimpleGenPaperPolicy() == RandomGenPaperPolicy.BY_SCORE) {
                 for (int i = 1; i <= genPaperDto.getGenNumber(); i++) {
-                    genPaperDto.setPaperName(genPaperDto.getPaperName() + "_" + i);
+                    genPaperDto.setPaperName(paperName + "_" + i);
                     paperMap.putAll(genPaperService.genPaperByScore(genPaperDto));
                     if (!paperMap.get("msg").equals("success")) {
                         break;

+ 9 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PaperDetailExp.java

@@ -19,6 +19,8 @@ public class PaperDetailExp implements Serializable,Comparable<PaperDetailExp>{
 
     private String name;//大题名称
 
+    private String title;//大题标题
+
     private Double score;//大题分数
 
     private Integer unitCount;//大题下的小题数量
@@ -85,6 +87,13 @@ public class PaperDetailExp implements Serializable,Comparable<PaperDetailExp>{
         this.paperDetailUnits = paperDetailUnits;
     }
 
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
 
     @Override
     public int compareTo(PaperDetailExp paperDetailExp) {

+ 10 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PaperExp.java

@@ -20,6 +20,8 @@ public class PaperExp implements Serializable{
 
     private String title;//试卷标题
 
+    private String subTitle;//试卷子标题
+
     private Double totalScore;//试卷总分
 
     private PaperStatus paperStatus;//试卷状态(待审核、通过、不通过)
@@ -117,4 +119,12 @@ public class PaperExp implements Serializable{
     public void setParams(Map<String, String> params) {
         this.params = params;
     }
+
+    public String getSubTitle() {
+        return subTitle;
+    }
+
+    public void setSubTitle(String subTitle) {
+        this.subTitle = subTitle;
+    }
 }

+ 23 - 2
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExportPaperService.java

@@ -21,6 +21,7 @@ import org.docx4j.jaxb.Context;
 import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
 import org.docx4j.wml.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
@@ -54,6 +55,9 @@ public class ExportPaperService {
     @Autowired
     PaperDetailUnitService paperDetailUnitService;
 
+    @Autowired
+    PaperService paperService;
+
     /**
      * 初始化导出试卷DTO
      * @param id
@@ -64,20 +68,30 @@ public class ExportPaperService {
         Map returnMap = new HashMap();
         //获取paper
         Paper paper = paperRepo.findOne(id);
+
+        paperService.formatPaper(paper,null);
+
         if(paper == null){
             returnMap.put("errorInfo","该试卷不存在");
             return returnMap;
         }
+
         //创建paperDto
         PaperExp paperExp = BeanCopierUtil.copyProperties(paper,PaperExp.class);
+
+        paperExp.setTitle(CommonUtils.PAPER_TITLE);
+        paperExp.setSubTitle(CommonUtils.PAPER_SUB_TITLE);
         //获取大题
         List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
         List<PaperDetailExp> paperDetailExps =
                 BeanCopierUtil.copyPropertiesOfList(paperDetails,PaperDetailExp.class);
         paperExp.setPaperDetails(paperDetailExps);
 
+        Collections.sort(paperExp.getPaperDetails());
         //封装小题
         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<PaperDetailUnitExp> paperDetailUnitExps =
@@ -93,6 +107,13 @@ public class ExportPaperService {
         return returnMap;
     }
 
+    public String getDetailTitle(PaperDetailExp paperDetailExp){
+        int totalScore = paperDetailExp.getScore().intValue();
+        int count = paperDetailExp.getUnitCount();
+        String title = "本大题共"+count+"小题,共"+totalScore+"分";
+        return title;
+    }
+
     /**
      * 导出试卷
      * @param id
@@ -142,11 +163,11 @@ public class ExportPaperService {
         Collections.sort(paperExp.getPaperDetails());
         for(PaperDetailExp paperDetail: paperExp.getPaperDetails()){
             //大题序号
-            paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
             paperDetail.setNumber(++mainNum);
+            paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
             if(paperDetail.getPaperDetailUnits() == null ||
                     paperDetail.getPaperDetailUnits().size() == 0){
-                return;
+                continue;
             }
             //小题序号
             for(PaperDetailUnitExp paperDetailUnit:paperDetail.getPaperDetailUnits()){

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

@@ -59,7 +59,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
     
     @Autowired
     private QuesRepo quesRepo;
-    
+
     @Autowired
     private ExamPaperService examPaperService;
     

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

@@ -152,7 +152,7 @@ public class ImportPaperService {
             paperDetailUnitRepo.save(paperDetailUnits);
         }
 
-        return paperService.formatPaper(tempPaper);
+        paperService.formatPaper(tempPaper, null);
     }
 
     /**
@@ -160,15 +160,13 @@ public class ImportPaperService {
      *
      * @param file
      */
-    public  Map<String,String>  processImportPaper(String paperName, String courseNo, String courseName, AccessUser user, File file) {
+    public String processImportPaper(String paperName, String courseNo, String courseName, AccessUser user, File file) {
 
         WordprocessingMLPackage wordMLPackage;
         WordprocessingMLPackage tmpWordMlPackage;
         WordprocessingMLPackage writePkg;
         ImportPaperCheck importPaperCheck = new ImportPaperCheck();
-        
-        Map<String,String> returnMap = new HashMap<String,String>();
-        
+
         try {
             wordMLPackage = WordprocessingMLPackage.load(file);
             // 初始化图片路径
@@ -224,8 +222,7 @@ public class ImportPaperService {
 
                     // 校验大题头信息
                     if (!checkQuesHeader(importPaperCheck)) {
-                    	returnMap.put("errorInfo", importPaperCheck.errorInfo);
-                        return returnMap;
+                        return importPaperCheck.errorInfo;
                     }
 
                     // 创建大题类
@@ -277,14 +274,13 @@ public class ImportPaperService {
                     i = importPaperCheck.index - 1;
                 }
                 if (!StringUtils.isEmpty(importPaperCheck.errorInfo)) {
-                	returnMap.put("errorInfo", importPaperCheck.errorInfo);
-                    return returnMap;
+                    return importPaperCheck.errorInfo;
                 }
             }
             paper.setPaperDetailCount(mainQuesNum);
             // 保存导入试卷信息
-            String paperId = savePaper(paper, paperDetails, paperDetailUnits, questions, importPaperCheck);
-            returnMap.put("paperId", paperId);
+            savePaper(paper, paperDetails, paperDetailUnits, questions, importPaperCheck);
+
         } catch (Exception e) {
             e.printStackTrace();
             importPaperCheck.setErrorInfo(e.getMessage());
@@ -295,7 +291,7 @@ public class ImportPaperService {
             writePkg = null;
             FileUtils.deleteQuietly(file);
         }
-        return returnMap;
+        return importPaperCheck.errorInfo;
     }
 
     /**
@@ -553,7 +549,7 @@ public class ImportPaperService {
         }
         return importPaperCheck.errorInfo;
     }
-    
+
     /**
      * 处理小题尾信息
      *
@@ -609,8 +605,8 @@ public class ImportPaperService {
         	if (question.getQuestionType()==QuesStructType.SINGLE_ANSWER_QUESTION||
         		question.getQuestionType()==QuesStructType.MULTIPLE_ANSWER_QUESTION){
         		String regEx_html="<[^>]+>";
-        		Pattern p_html=Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE); 
-                Matcher m_html=p_html.matcher(answerHTML.toString()); //过滤html标签 
+        		Pattern p_html=Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE);
+                Matcher m_html=p_html.matcher(answerHTML.toString()); //过滤html标签
                 question.setQuesAnswer(m_html.replaceAll(""));
         	}else{
         		question.setQuesAnswer(answerHTML.toString());
@@ -629,7 +625,7 @@ public class ImportPaperService {
             paperDetailUnit.setScore(Double.parseDouble(quesScore));
         }
     }
-    
+
     /**
      * 处理选择题option信息
      * @param question
@@ -717,7 +713,7 @@ public class ImportPaperService {
                     // 处理尾信息
                     processQuesTail(pList, importPaperCheck.index, subQuesNum, subQues, paperDetailUnit,
                             importPaperCheck, wordMLPackage, true);
-                    
+
                     //处理选择题的option--chenken 20170426
                     processSelectOption(subQues);
 

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

@@ -1,6 +1,11 @@
 package com.qmth.cqb.paper.service;
 
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
 import com.qmth.cqb.paper.dto.PaperDetailUnitExp;
 import com.qmth.cqb.paper.model.Paper;
@@ -8,11 +13,9 @@ import com.qmth.cqb.paper.model.PaperDetail;
 import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.question.model.Question;
 import com.qmth.cqb.question.service.QuesService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 
 @Service
 public class PaperDetailUnitService {
@@ -52,11 +55,11 @@ public class PaperDetailUnitService {
      * @param pduExp
      * @return
      */
-    public PaperDetailUnit savePaperDetailUnit(PaperDetailUnitExp pduExp) {
+    public PaperDetailUnit savePaperDetailUnit(PaperDetailUnitExp pduExp, AccessUser user) {
         PaperDetailUnit oldPdu = paperDetailUnitRepo.findOne(pduExp.getId());
         if (oldPdu.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
             if (pduExp.getQuestion().getId().equals(oldPdu.getQuestion().getId())) {
-                //更新对象为套题本身
+                // 更新对象为套题本身
                 oldPdu.setQuestion(quesService.saveQues(pduExp.getQuestion()));
             } else {
                 List<Double> subScoreList = oldPdu.getSubScoreList();
@@ -79,7 +82,7 @@ public class PaperDetailUnitService {
                 if (match) {
                     oldPdu.setQuestion(quesService.saveQues(oldPdu.getQuestion()));
                 }
-                //更新套题unit当前总分与子题分数
+                // 更新套题unit当前总分与子题分数
                 oldPdu.setSubScoreList(subScoreList);
             }
         } else {
@@ -88,7 +91,7 @@ public class PaperDetailUnitService {
         }
         // 同时要跟新小题里面的Qustion对象
         oldPdu = paperDetailUnitRepo.save(oldPdu);
-        paperService.formatPaper(oldPdu.getPaper());
+        paperService.formatPaper(oldPdu.getPaper(), user);
         return oldPdu;
     }
 
@@ -98,10 +101,10 @@ public class PaperDetailUnitService {
      * @param id
      * @return
      */
-    public void deletePaperDetailUnit(String id) {
+    public void deletePaperDetailUnit(String id, AccessUser user) {
         Paper paper = paperDetailUnitRepo.findOne(id).getPaper();
         paperDetailUnitRepo.delete(id);
-        paperService.formatPaper(paper);
+        paperService.formatPaper(paper, user);
     }
 
     /**

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

@@ -7,6 +7,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.commons.lang3.StringUtils;
 import org.nlpcn.commons.lang.util.StringUtil;
@@ -86,16 +88,10 @@ public class PaperService {
 
     @Autowired
     QuesService quesService;
-    
-    @Autowired
-    DataMapModelService dataMapModelService;
-    
-    @Autowired
-    ComTaskService comTaskService;
-    
+
     @Autowired
     private MongoTemplate mongoTemplate;
-    
+
     /**
      * 查询所有已导入试卷
      *
@@ -110,7 +106,7 @@ public class PaperService {
         importPaper.setPaperType(PaperType.IMPORT);
         return paperRepo.findAll(Example.of(importPaper), new PageRequest(curPage - 1, pageSize));
     }
-    
+
     /**
      * 查询所有待审核和审核不通过的导入试卷
      * @param paperSearchInfo
@@ -130,16 +126,16 @@ public class PaperService {
         if(StringUtil.isNotBlank(paperSearchInfo.getCourseNo())){
         	query.addCriteria(Criteria.where("courseNo").is(paperSearchInfo.getCourseNo()));
         }
-        
+
         long totalNumber = this.mongoTemplate.count(query, Paper.class);
         query.limit(pageSize);
         query.skip((curPage-1)*pageSize);
         List<Paper> paperList = this.mongoTemplate.find(query, Paper.class);
         return new PageImpl<Paper>(paperList,new PageRequest(curPage - 1, pageSize),totalNumber);
     }
-    
+
     /**
-     * 根据条件查询  
+     * 根据条件查询
      * @param paperSearchInfo
      * @return
      */
@@ -149,43 +145,22 @@ public class PaperService {
         importPaper.setPaperType(PaperType.IMPORT);
         return paperRepo.findAll(Example.of(importPaper));
     }
-    
+
     /**
      * 保存试卷
      *
      * @param paperExp
      * @return
-     * @throws Exception 
      */
-    public Paper savePaper(AccessUser user,PaperExp paperExp) throws Exception {
-        Paper paper = BeanCopierUtil.copyProperties(paperExp, Paper.class);
-        paper.setOrgId(user.getOrgId()+"");
-        formatPaper(paper);
-        DataMapModel dataMapModel = dataMapModelService.findDataMapModel(paper.getId());
-    	String processInstanceId = dataMapModel.getProcessInstanceId();
-    	//在流程中
-    	if(StringUtils.isNotBlank(processInstanceId)){
-    		Map<String, Object> variables = new HashMap<String,Object>();
-    		/**
-    		 * 审核人员和非审核人员都可以点击保存试卷
-    		 * 如果是 审核人员点击保存,试卷状态为通过
-    		 * 如果不是 审核人员点击保存,试卷状态为待审核
-    		 */
-    		variables.put("assignee", "admin1");
-        	variables.put("condition", PassEnum.PASS.getValue());
-        	paper.setPaperStatus(PaperStatus.PASS);
-        	/**
-        	 * 非审核人员保存试卷
-        	 * variables.put("assignee", "admin2");		
-        	 * variables.put("condition", PassEnum.NOPASS.getValue());			
-        	 * paper.setPaperStatus(PaperStatus.DRAFT);	
-        	 */
-        	paper = paperRepo.save(paper);
-        	comTaskService.completeTaskByProcInstIdAndAssignee(processInstanceId, variables);
-    	}else{//不在流程中
-    		paper = paperRepo.save(paper);
-    	}
-        return paper;
+    public Paper savePaper(PaperExp paperExp, AccessUser user) {
+        Paper oldPaper = paperRepo.findOne(paperExp.getId());
+        if (oldPaper != null) {
+            oldPaper.setTitle(paperExp.getTitle());
+            oldPaper.setName(paperExp.getName());
+            oldPaper.setLastModifyName(user.getLoginName());
+            return paperRepo.save(oldPaper);
+        }
+        return null;
     }
 
     /**
@@ -240,7 +215,7 @@ public class PaperService {
         examPaper.setExamId(examId);
         examPaper.setGroupCode(groupCode);
         examPaper.setCourseCode(courseCode);
-//        examPaper.setPaperId(paperId);
+        // examPaper.setPaperId(paperId);
         examPaperRepo.save(examPaper);
     }
 
@@ -249,7 +224,7 @@ public class PaperService {
         examPaper.setExamId(examId);
         examPaper.setGroupCode(groupCode);
         examPaper.setCourseCode(courseCode);
-//        examPaper.setPaperId(paperId);
+        // examPaper.setPaperId(paperId);
         examPaperRepo.delete(examPaper);
     }
 
@@ -309,50 +284,26 @@ public class PaperService {
      * 批量通过试卷
      *
      * @param paperIds
-     * @throws Exception 
      */
-    public void passPapers(AccessUser user,List<String> paperIds) throws Exception {
+    public void passPapers(List<String> paperIds) {
         List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
-        for(int i = 0;i<papers.size();i++){
-        	Paper paper = papers.get(i);
-        	paper.setPaperStatus(PaperStatus.PASS);
-        	paperRepo.save(paper);
-        	
-        	DataMapModel dataMapModel = dataMapModelService.findDataMapModel(papers.get(i).getId());
-        	String processInstanceId = dataMapModel.getProcessInstanceId();
-        	if(StringUtils.isNotBlank(processInstanceId)){
-        		Map<String, Object> variables = new HashMap<String,Object>();
-        		variables.put("assignee", "admin1");
-        		variables.put("condition", PassEnum.PASS.getValue());
-        		comTaskService.completeTaskByProcInstIdAndAssignee(processInstanceId, variables);
-        	}
-        }
-       
+        papers.stream().forEach(paper -> {
+            paper.setPaperStatus(PaperStatus.PASS);
+        });
+        paperRepo.save(papers);
     }
 
     /**
      * 批量不通过试卷
      *
      * @param paperIds
-     * @throws Exception 
      */
-    public void noPassPapers(AccessUser user,List<String> paperIds) throws Exception {
+    public void noPassPapers(List<String> paperIds) {
         List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
+        papers.stream().forEach(paper -> {
+            paper.setPaperStatus(PaperStatus.NOPASS);
+        });
         paperRepo.save(papers);
-        for(int i = 0;i<papers.size();i++){
-        	Paper paper = papers.get(i);
-        	paper.setPaperStatus(PaperStatus.NOPASS);
-        	paperRepo.save(paper);
-        	
-        	DataMapModel dataMapModel = dataMapModelService.findDataMapModel(papers.get(i).getId());
-        	String processInstanceId = dataMapModel.getProcessInstanceId();
-        	if(StringUtils.isNotBlank(processInstanceId)){
-        		Map<String, Object> variables = new HashMap<String,Object>();
-        		variables.put("assignee", "admin1");
-        		variables.put("condition", PassEnum.NOPASS.getValue());
-        		comTaskService.completeTaskByProcInstIdAndAssignee(processInstanceId, variables);
-        	}
-        }
     }
 
     /**
@@ -404,7 +355,7 @@ public class PaperService {
 
         return paperExp;
     }
-    
+
     /**
      * 重新对选择题option进行排序(多选、单选、套题下选择题)
      */
@@ -432,7 +383,7 @@ public class PaperService {
         	}
         }
     }
-    
+
     private List<QuesOption> reorderOptionCore(List<QuesOption> quesOptions,String optionOrder){
 		List<QuesOption> newQuesOptions = new ArrayList<QuesOption>();
 		if(StringUtil.isBlank(optionOrder)||quesOptions.isEmpty()){
@@ -446,7 +397,7 @@ public class PaperService {
 				}
 			}
 		}
-		quesOptions = null; 
+		quesOptions = null;
 		return newQuesOptions;
     }
 
@@ -467,23 +418,27 @@ public class PaperService {
             // 大题序号
             paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
             paperDetail.setNumber(++mainNum);
-            if (paperDetail.getPaperDetailUnits() == null || paperDetail.getPaperDetailUnits().size() == 0) {
-                continue;
-            }
             // 小题序号
-            for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
-                quesService.formatQuesUnit(paperDetailUnit.getQuestion());
-                List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
-                // 套题序号
-                if (subQuesList != null && subQuesList.size() > 0) {
-                    for (Question subQues : subQuesList) {
-                        Map<String, String> params = new HashMap<String, String>();
-                        params.put("number", String.valueOf(++subNum));
-                        subQues.setQuesParams(params);
-                        quesService.formatQuesUnit(subQues);
+            if (paperDetail != null && paperDetail.getPaperDetailUnits() != null
+                    && paperDetail.getPaperDetailUnits().size() > 0) {
+                for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
+                    quesService.formatQuesUnit(paperDetailUnit.getQuestion());
+                    List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
+                    // 套题序号
+                    if (subQuesList != null && subQuesList.size() > 0) {
+                        int index = subNum;
+                        for (Question subQues : subQuesList) {
+                            Map<String, String> params = new HashMap<String, String>();
+                            params.put("number", String.valueOf(++subNum));
+                            subQues.setQuesParams(params);
+                            quesService.formatQuesUnit(subQues);
+                        }
+                        String quesBodyHtml = relaceRuestionIdx(paperDetailUnit.getQuestion().getQuesBody(), index);
+                        paperDetailUnit.getQuestion().setQuesBody(quesBodyHtml);
+                    } else {
+                        paperDetailUnit.setNumber(++subNum);
                     }
-                } else {
-                    paperDetailUnit.setNumber(++subNum);
+
                 }
             }
         }
@@ -514,10 +469,11 @@ public class PaperService {
      *
      * @param paper
      */
-    public String formatPaper(Paper paper) {
+    public void formatPaper(Paper paper, AccessUser user) {
         List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
         // 计算试卷总分
         List<PaperDetailUnit> paperDetailUnitAll = paperDetailUnitRepo.findByPaper(paper);
+        int allQuesCount = 0;
         double totalScore = 0;
         for (PaperDetailUnit unit : paperDetailUnitAll) {
             if (unit.getScore() != null) {
@@ -537,7 +493,7 @@ public class PaperService {
                     if (unit.getScore() != null) {
                         score += unit.getScore();
                     }
-                    if (unit.getQuestion().getSubQuestions() != null
+                    if (unit.getQuestion() != null && unit.getQuestion().getSubQuestions() != null
                             && unit.getQuestion().getSubQuestions().size() > 0) {
                         nestQusNum += unit.getQuestion().getSubQuestions().size() - 1;
                     }
@@ -546,16 +502,19 @@ public class PaperService {
                 count = paperDetailUnits.size() + nestQusNum;
                 paperDetail.setScore(score);
                 paperDetail.setUnitCount(count);
+                allQuesCount += count;
             } else {
                 paperDetail.setScore(0d);
             }
         }
-        paper.setUnitCount(paperDetailUnitAll.size());
+        paper.setUnitCount(allQuesCount);
         paper.setPaperDetailCount(paperDetails.size());
         paper.setTotalScore(totalScore);
+        if (user != null) {
+            paper.setLastModifyName(user.getLoginName());
+        }
         paperDetailRepo.save(paperDetails);
         paperRepo.save(paper);
-        return paper.getId();
     }
 
     /**
@@ -564,28 +523,31 @@ public class PaperService {
      * @param questionId
      * @return
      */
-    public List<String> deleteImportQuestionById(String questionId) {
+    public List<String> deleteImportQuestionById(String questionId, AccessUser user) {
         Question ques = quesRepo.findOne(questionId);
         List<PaperDetailUnit> pdus = CommonUtils.toList(paperDetailUnitRepo.findByQuestion(ques));
         List<String> paperNames = new ArrayList<String>();
         List<PaperDetailUnit> needPdus = new ArrayList<PaperDetailUnit>();// 需要删除的小题
         List<Paper> papers = new ArrayList<Paper>();
         for (PaperDetailUnit pdu : pdus) {
-            if (PaperType.GENERATE == pdu.getPaper().getPaperType()) {
-                paperNames.add(pdu.getPaper().getName());
-                needPdus.add(pdu);
-                if (!papers.contains(pdu.getPaper())) {
-                    papers.add(pdu.getPaper());
-                }
+            if (pdu.getPaper() != null) {
+                if (PaperType.GENERATE == pdu.getPaper().getPaperType()) {
+                    paperNames.add(pdu.getPaper().getName());
+                    needPdus.add(pdu);
+                    if (!papers.contains(pdu.getPaper())) {
+                        papers.add(pdu.getPaper());
+                    }
 
+                }
             }
         }
+
         if (paperNames.size() == 0) {// 此试题没有被组卷调用,则可以删除此试题
             paperDetailUnitRepo.delete(needPdus);
             quesBakRepo.save(BeanCopierUtil.copyProperties(ques, QuestionBak.class));
             quesRepo.delete(ques);
             for (Paper paper : papers) {
-                formatPaper(paper);
+                formatPaper(paper, user);
             }
 
         }
@@ -617,7 +579,7 @@ public class PaperService {
         pdu.setNumber(pdus.indexOf(pdu) + 1);
         pdu.setScore(0d);
         paperDetailUnitRepo.save(pdu);
-        formatPaper(paper);
+        formatPaper(paper, user);
         return paper;
 
     }
@@ -663,7 +625,8 @@ public class PaperService {
         return quesService.findByIdExclude(selectedIds, paper.getCourseNo(), quesType, curPage, pageSize);
     }
 
-    public Paper selectQuestionsToPaper(String paperId, String paperDetailId, List<Question> questions) {
+    public Paper selectQuestionsToPaper(String paperId, String paperDetailId, List<Question> questions,
+            AccessUser user) {
         Paper paper = paperRepo.findOne(paperId);
         PaperDetail pd = paperDetailRepo.findOne(paperDetailId);
         List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperDetail(pd);
@@ -685,14 +648,15 @@ public class PaperService {
         }
 
         paperDetailUnitRepo.save(saveUnits);
-        formatPaper(paper);
+        formatPaper(paper, user);
         return paper;
     }
 
     public String checkPaperName(String paperName, String orgId) {
         String msg = null;
         Paper paperTemp = new Paper();
-        paperTemp.setName(paperName);
+        paperTemp.setCreateTime(null);
+        paperTemp.setName(paperName.trim());
         paperTemp.setOrgId(orgId);
         Paper paper = paperRepo.findOne(Example.of(paperTemp));
         if (paper != null) {
@@ -702,4 +666,23 @@ public class PaperService {
 
     }
 
+    private String relaceRuestionIdx(String str, int baseIdx) {
+        StringBuffer sb = new StringBuffer("");
+        Pattern pattern = Pattern.compile("##(\\d+)##");
+
+        Matcher matcher = pattern.matcher(str);
+
+        while (matcher.find()) {
+            String idx = matcher.group(1);
+            matcher.appendReplacement(sb, "___" + String.valueOf(Integer.parseInt(idx) + baseIdx) + "___");
+        }
+
+        if (StringUtils.isEmpty(sb.toString())) {
+            return str;
+        } else {
+            matcher.appendTail(sb);
+            return sb.toString();
+        }
+    }
+
 }

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

@@ -39,7 +39,8 @@ public class PaperStructService {
      * @param pageSize
      * @return
      */
-    public Page<PaperStruct> getPaperStructs(PaperStructSearchInfo searchInfo, int curPage, int pageSize,AccessUser user) {
+    public Page<PaperStruct> getPaperStructs(PaperStructSearchInfo searchInfo, int curPage, int pageSize,
+            AccessUser user) {
         searchInfo.setOrgId(user.getOrgId().toString());
         formatSearchInfo(searchInfo);
         PaperStruct paperStruct = BeanCopierUtil.copyProperties(searchInfo, PaperStruct.class);
@@ -98,4 +99,13 @@ public class PaperStructService {
         return paperStructRepo.save(paperStruct);
     }
 
+    public PaperStruct checkNameUnique(String name, String orgId) {
+        PaperStruct paperTemp = new PaperStruct();
+        paperTemp.setCreateTime(null);
+        paperTemp.setName(name.trim());
+        paperTemp.setOrgId(orgId);
+        PaperStruct paperStruct = paperStructRepo.findOne(Example.of(paperTemp));
+        return paperStruct;
+    }
+
 }

+ 8 - 16
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractConfigController.java

@@ -55,33 +55,25 @@ public class ExtractConfigController {
 	
 	@ApiOperation(value = "保存调卷规则", notes = "保存调卷规则")
     @PutMapping(value = "/extractConfig")
-	public ResponseEntity<Map<String,Object>> saveExtractConfig(HttpServletRequest request,@RequestBody ExtractConfig extractConfig){
-		Map<String,Object> paramsMap = new HashedMap<String,Object>();
+	public ResponseEntity saveExtractConfig(HttpServletRequest request,@RequestBody ExtractConfig extractConfig){
 		try{
 			AccessUser user = (AccessUser) request.getAttribute("accessUser");
 			extractConfig.setOrgId(user.getOrgId()+"");
 			extractConfigService.saveExtractConfig(extractConfig);
-			paramsMap.put("returnMsg", "保存成功");
-			paramsMap.put("status", "success");
+			return new ResponseEntity(HttpStatus.OK);
 		}catch(Exception e){
-			paramsMap.put("returnMsg", "保存失败");
-			paramsMap.put("status", "failed");
+			return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
 		}
-		return new ResponseEntity<Map<String,Object>>(paramsMap,HttpStatus.OK);
 	}
 	
 	@ApiOperation(value = "根据调卷规则生成试卷", notes = "根据调卷规则生成试卷")
-    @PutMapping(value = "/makePaperByConfig/{configId}")
-	public ResponseEntity<Map<String,Object>> makePaperByConfig(@PathVariable String configId){
-		Map<String,Object> paramsMap = new HashedMap<String,Object>();
+    @PutMapping(value = "/makePaperByConfig")
+	public ResponseEntity makePaperByConfig(String id){
 		try{
-			extractConfigService.makePaperByConfig(configId);
-			paramsMap.put("returnMsg", "试卷生成成功");
-			paramsMap.put("status", "success");
+			extractConfigService.makePaperByConfig(id);
+			return new ResponseEntity(HttpStatus.OK);
 		}catch(Exception e){
-			paramsMap.put("returnMsg", "试卷生成失败");
-			paramsMap.put("status", "failed");
+			return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
 		}
-		return new ResponseEntity<Map<String,Object>>(paramsMap,HttpStatus.OK);
 	}
 }	

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

@@ -12,6 +12,7 @@ import java.util.stream.Stream;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.qmth.cqb.question.service.QuesService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -62,6 +63,9 @@ public class PaperController {
     @Value("${question.reduplicate.similarity}")
     private double reduplicateSimilarity;
 
+    @Autowired
+    QuesService quesService;
+
     /**
      * 根据Id获取试卷
      *
@@ -79,13 +83,13 @@ public class PaperController {
      *
      * @param paper
      * @return
-     * @throws Exception 
      */
     @ApiOperation(value = "保存试卷", notes = "保存试卷")
     @PutMapping(value = "/paper")
-    public ResponseEntity savePaperById(HttpServletRequest request,@RequestBody PaperExp paper) throws Exception {
-    	AccessUser user = (AccessUser) request.getAttribute("accessUser");
-        return new ResponseEntity(paperService.savePaper(user,paper), HttpStatus.OK);
+    public ResponseEntity savePaperById(HttpServletRequest request,
+                                        @RequestBody PaperExp paper) {
+        AccessUser user = (AccessUser) request.getAttribute("accessUser");
+        return new ResponseEntity(paperService.savePaper(paper,user), HttpStatus.OK);
     }
 
     /**
@@ -106,24 +110,24 @@ public class PaperController {
         paperSearchInfo.setOrgId(user.getOrgId().toString());
         return new ResponseEntity(paperService.getImportPapers(paperSearchInfo, curPage, pageSize), HttpStatus.OK);
     }
-    
+
     @ApiOperation(value = "查询所有待审核和审核不通过的导入试卷", notes = "查询所有待审核和审核不通过的导入试卷")
     @GetMapping(value = "/importPaperNotSuccess/{curPage}/{pageSize}")
-    public ResponseEntity getImportPapersNotSuccess( HttpServletRequest request, 
-                                            @ModelAttribute PaperSearchInfo paperSearchInfo, 
+    public ResponseEntity getImportPapersNotSuccess( HttpServletRequest request,
+                                            @ModelAttribute PaperSearchInfo paperSearchInfo,
                                             @PathVariable int curPage,
                                             @PathVariable int pageSize) {
         AccessUser user = (AccessUser) request.getAttribute("accessUser");
         paperSearchInfo.setOrgId(user.getOrgId().toString());
         return new ResponseEntity(paperService.getImportPapersNotSuccess(paperSearchInfo, curPage, pageSize), HttpStatus.OK);
-    } 
-    
+    }
+
     @ApiOperation(value = "根据条件查询导入试卷", notes = "根据条件查询导入试卷")
     @GetMapping(value = "/getImportPaper")
     public ResponseEntity<List<Paper>> getImportPapersBySearch(@ModelAttribute PaperSearchInfo paperSearchInfo){
     	return new ResponseEntity<List<Paper>>(paperService.getImportPapersBySearch(paperSearchInfo), HttpStatus.OK);
     }
-    
+
 
     /**
      * 查询所有已组试卷
@@ -173,14 +177,8 @@ public class PaperController {
      */
     @ApiOperation(value = "批量通过试卷", notes = "批量通过试卷")
     @PutMapping(value = "/paper/pass")
-    public ResponseEntity passPapers(HttpServletRequest request,@RequestBody PaperSearchInfo paperSearchInfo) {
-        try {
-        	AccessUser user = (AccessUser) request.getAttribute("accessUser");
-			paperService.passPapers(user,Arrays.asList(paperSearchInfo.getPaperIds()));
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+    public ResponseEntity passPapers(@RequestBody PaperSearchInfo paperSearchInfo) {
+        paperService.passPapers(Arrays.asList(paperSearchInfo.getPaperIds()));
         return new ResponseEntity(HttpStatus.OK);
     }
 
@@ -192,14 +190,8 @@ public class PaperController {
      */
     @ApiOperation(value = "批量不通过试卷", notes = "批量不通过试卷")
     @PutMapping(value = "/paper/noPass")
-    public ResponseEntity noPassPapers(HttpServletRequest request,@RequestBody PaperSearchInfo paperSearchInfo) {
-        try {
-        	AccessUser user = (AccessUser) request.getAttribute("accessUser");
-			paperService.noPassPapers(user,Arrays.asList(paperSearchInfo.getPaperIds()));
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+    public ResponseEntity noPassPapers(@RequestBody PaperSearchInfo paperSearchInfo) {
+        paperService.noPassPapers(Arrays.asList(paperSearchInfo.getPaperIds()));
         return new ResponseEntity(HttpStatus.OK);
     }
 
@@ -303,8 +295,10 @@ public class PaperController {
      */
     @ApiOperation(value = "删除导入试卷中的试题", notes = "删除导入试卷中的试题")
     @DeleteMapping(value = "/paper/deleteQuestion/{questionId}")
-    public ResponseEntity deleteImportPaperQuestion(@PathVariable String questionId) {
-        List<String> paperNames = paperService.deleteImportQuestionById(questionId);
+    public ResponseEntity deleteImportPaperQuestion(HttpServletRequest request,
+                                                    @PathVariable String questionId) {
+        AccessUser user = (AccessUser) request.getAttribute("accessUser");
+        List<String> paperNames = paperService.deleteImportQuestionById(questionId,user);
         return new ResponseEntity(paperNames, HttpStatus.OK);
     }
 
@@ -352,8 +346,8 @@ public class PaperController {
                 PaperDetailUnitExp paperDetailUnitExp1 = allPaperDetailUnitList.get(i);
                 PaperDetailUnitExp paperDetailUnitExp2 = allPaperDetailUnitList.get(j);
                 double similarity = StringSimilarityUtils.getSimilarityWithCosinesBySeg(
-                        paperDetailUnitExp1.getQuestion().getQuesBody(),
-                        paperDetailUnitExp2.getQuestion().getQuesBody());
+                        quesService.getExtractText(paperDetailUnitExp1.getQuestion()),
+                        quesService.getExtractText(paperDetailUnitExp2.getQuestion()));
                 if (similarity > reduplicateSimilarity) {
                     boolean found = false;
                     for (int k = 0; k < reduplicateId.size(); k++) {
@@ -434,10 +428,12 @@ public class PaperController {
      */
     @ApiOperation(value = "向导入试卷中的新增试题", notes = "向导入试卷中的新增试题")
     @PostMapping(value = "/paper/selectQuestions/{paperId}/{paperDetailId}")
-    public ResponseEntity selectQuestionsToPaper(@PathVariable String paperId, 
+    public ResponseEntity selectQuestionsToPaper(HttpServletRequest request,
+                                                @PathVariable String paperId,
                                                 @PathVariable String paperDetailId,
                                                 @RequestBody List<Question> questions) {
-        return new ResponseEntity(paperService.selectQuestionsToPaper(paperId, paperDetailId, questions),HttpStatus.OK);
+        AccessUser user = (AccessUser) request.getAttribute("accessUser");
+        return new ResponseEntity(paperService.selectQuestionsToPaper(paperId, paperDetailId, questions,user),HttpStatus.OK);
 
     }
 

+ 13 - 7
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperDetailUnitController.java

@@ -1,5 +1,7 @@
 package com.qmth.cqb.paper.web;
 
+import javax.servlet.http.HttpServletRequest;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -17,6 +19,7 @@ import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.paper.service.PaperDetailUnitService;
 import com.qmth.cqb.question.model.Question;
 
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import io.swagger.annotations.ApiOperation;
 
 /**
@@ -61,8 +64,9 @@ public class PaperDetailUnitController {
      */
     @ApiOperation(value = "更新小题", notes = "更新小题")
     @PutMapping(value = "/paperDetailUnit")
-    public ResponseEntity updatePaperDetailUnit(@RequestBody PaperDetailUnitExp pdu) {
-        PaperDetailUnit pdUnit = unitService.savePaperDetailUnit(pdu);
+    public ResponseEntity updatePaperDetailUnit(HttpServletRequest request, @RequestBody PaperDetailUnitExp pdu) {
+        AccessUser user = (AccessUser) request.getAttribute("accessUser");
+        PaperDetailUnit pdUnit = unitService.savePaperDetailUnit(pdu, user);
         return new ResponseEntity(HttpStatus.OK);
 
     }
@@ -75,8 +79,9 @@ public class PaperDetailUnitController {
      */
     @ApiOperation(value = "新增小题", notes = "新增小题")
     @PostMapping(value = "/paperDetailUnit")
-    public ResponseEntity addPaperDetailUnit(@RequestBody PaperDetailUnitExp pdu) {
-        PaperDetailUnit pdUnit = unitService.savePaperDetailUnit(pdu);
+    public ResponseEntity addPaperDetailUnit(HttpServletRequest request, @RequestBody PaperDetailUnitExp pdu) {
+        AccessUser user = (AccessUser) request.getAttribute("accessUser");
+        PaperDetailUnit pdUnit = unitService.savePaperDetailUnit(pdu, user);
         return new ResponseEntity(pdUnit, HttpStatus.OK);
     }
 
@@ -87,9 +92,10 @@ public class PaperDetailUnitController {
      * @return
      */
     @ApiOperation(value = "删除小题", notes = "删除小题")
-    @DeleteMapping(value = "/paperDetailUnit/{unit_id}")
-    public ResponseEntity removePaperDetailUnit(@PathVariable String unit_id) {
-        unitService.deletePaperDetailUnit(unit_id);
+    @DeleteMapping(value = "/paperDetailUnit/{unitId}")
+    public ResponseEntity removePaperDetailUnit(HttpServletRequest request, @PathVariable String unitId) {
+        AccessUser user = (AccessUser) request.getAttribute("accessUser");
+        unitService.deletePaperDetailUnit(unitId, user);
         return new ResponseEntity(HttpStatus.OK);
     }
 

+ 11 - 7
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperStructController.java

@@ -48,12 +48,11 @@ public class PaperStructController {
      */
     @ApiOperation(value = "获取试卷结构带分页", notes = "获取试卷结构带分页")
     @GetMapping(value = "/paperStruct/{curPage}/{pageSize}")
-    public ResponseEntity getPaperStructs(  HttpServletRequest request,
-                                            @ModelAttribute PaperStructSearchInfo searchInfo, 
-                                            @PathVariable int curPage,
-                                            @PathVariable int pageSize) {
+    public ResponseEntity getPaperStructs(HttpServletRequest request, @ModelAttribute PaperStructSearchInfo searchInfo,
+            @PathVariable int curPage, @PathVariable int pageSize) {
         AccessUser user = (AccessUser) request.getAttribute("accessUser");
-        return new ResponseEntity(paperStructService.getPaperStructs(searchInfo, curPage, pageSize,user), HttpStatus.OK);
+        return new ResponseEntity(paperStructService.getPaperStructs(searchInfo, curPage, pageSize, user),
+                HttpStatus.OK);
     }
 
     /**
@@ -104,8 +103,13 @@ public class PaperStructController {
     @PostMapping(value = "/paperStruct")
     public ResponseEntity addPaperStruct(HttpServletRequest request, @RequestBody PaperStruct ps) {
         AccessUser user = (AccessUser) request.getAttribute("accessUser");
-        PaperStruct paperStruct = paperStructService.save(ps, user);
-        return new ResponseEntity(paperStruct, HttpStatus.OK);
+        PaperStruct paperStructTemp = paperStructService.checkNameUnique(ps.getName(), user.getOrgId().toString());
+        if (paperStructTemp != null) {
+            return new ResponseEntity("试卷结构名称重复,请重新命名!", HttpStatus.INTERNAL_SERVER_ERROR);
+        } else {
+            PaperStruct paperStruct = paperStructService.save(ps, user);
+            return new ResponseEntity(paperStruct, HttpStatus.OK);
+        }
     }
 
     /**

+ 33 - 8
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuesService.java

@@ -127,6 +127,8 @@ public class QuesService {
             updateQuesWord(saveQues);
             return quesRepo.save(saveQues);
         }
+        
+        
     }
 
     /**
@@ -242,14 +244,18 @@ public class QuesService {
     }
 
     public void formatQuesUnit(Question question) {
-        question.setQuesBodyWord(null);
-        question.setQuesAnswerWord(null);
-        question.setQuesAnswerAnalysisWord(null);
-        question.setQuesPkg(new byte[0]);
-        if (question.getQuesOptions() != null && question.getQuesOptions().size() > 0) {
-            question.getQuesOptions().stream().forEach(quesOption -> {
-                quesOption.setOptionBodyWord(null);
-            });
+        if (question != null) {
+            question.setQuesBodyWord(null);
+            question.setQuesAnswerWord(null);
+            question.setQuesAnswerAnalysisWord(null);
+            question.setQuesPkg(new byte[0]);
+            String newQuesBody = question.getQuesBody().replaceAll("<span>", "").replaceAll("</span>", "").replaceAll("###", "______");
+            question.setQuesBody(newQuesBody);
+            if (question.getQuesOptions() != null && question.getQuesOptions().size() > 0) {
+                question.getQuesOptions().stream().forEach(quesOption -> {
+                    quesOption.setOptionBodyWord(null);
+                });
+            }
         }
     }
 
@@ -290,6 +296,25 @@ public class QuesService {
                 DocxProcessUtil.initTmpPackage(wordMLPackage);
             }
         }
+        question.setQuesPkg(DocxProcessUtil.getPkgByte(wordMLPackage));
+    }
+
+    /**
+     * 获取试题有效文本
+     * 
+     * @param question
+     * @return
+     */
+    public String getExtractText(Question question) {
+        StringBuilder quesText = new StringBuilder();
+        quesText.append(DocxProcessUtil.getTextInHtml(question.getQuesBody()));
+        List<QuesOption> quesOptionList = question.getQuesOptions();
+        if (quesOptionList != null && quesOptionList.size() > 0) {
+            for (QuesOption quesOption : quesOptionList) {
+                quesText.append(DocxProcessUtil.getTextInHtml(quesOption.getOptionBody()));
+            }
+        }
+        return quesText.toString();
     }
 
 }

+ 7 - 10
cqb-starter/src/main/java/com/qmth/cqb/App.java

@@ -11,35 +11,32 @@ import org.springframework.cloud.netflix.feign.EnableFeignClients;
 import org.springframework.context.annotation.Bean;
 import org.springframework.web.multipart.MultipartResolver;
 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
 /**
  * 项目入口主程序
  *
  */
 @SpringBootApplication
-//@EnableEurekaClient
-//@EnableFeignClients
+@EnableEurekaClient
+@EnableFeignClients
 @EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
 public class App {
 
     @Autowired
     GridFSUtil gridFSUtil;
 
-    public static void main(String[] args){
+    public static void main(String[] args) {
         SpringApplication.run(App.class, args);
     }
 
-    //显示声明CommonsMultipartResolver为mutipartResolver
+    // 显示声明CommonsMultipartResolver为mutipartResolver
     @Bean(name = "multipartResolver")
-    public MultipartResolver multipartResolver(){
+    public MultipartResolver multipartResolver() {
         CommonsMultipartResolver resolver = new CommonsMultipartResolver();
         resolver.setDefaultEncoding("UTF-8");
-        resolver.setResolveLazily(true);//resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
+        resolver.setResolveLazily(true);// resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
         resolver.setMaxInMemorySize(40960);
-        resolver.setMaxUploadSize(200*1024*1024);//上传文件大小 50M 50*1024*1024
+        resolver.setMaxUploadSize(200 * 1024 * 1024);// 上传文件大小 50M 50*1024*1024
         return resolver;
     }
 }

+ 1 - 8
cqb-starter/src/main/resources/application-dev.properties

@@ -1,10 +1,3 @@
 spring.data.mongodb.uri=mongodb://192.168.1.99:27017/comm-ques-bank
 spring.data.mongodb.grid-fs-database=comm-ques-bank
-eureka.client.serviceUrl.defaultZone=http://192.168.1.99:1111/eureka/
-
-spring.jpa.hibernate.ddl-auto=update
-spring.jpa.database=MYSQL
-spring.datasource.url=jdbc:mysql://192.168.1.99:3306/workflow?characterEncoding=UTF-8
-spring.datasource.username=root
-spring.datasource.password=root
-spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+eureka.client.serviceUrl.defaultZone=http://192.168.1.99:1111/eureka/

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

@@ -4,4 +4,4 @@ logging.config=classpath:log4j2.xml
 spring.application.name=ExamCloud-service-question
 hystrix.command.default.execution.timeout.enabled=false
 api_cqb=/api/ecs_ques
-question.reduplicate.similarity=0.6
+question.reduplicate.similarity=0.95

+ 1 - 1
cqb-starter/src/main/resources/log4j2.xml

@@ -12,7 +12,7 @@
         <Root level="info">
             <AppenderRef ref="Console" />
         </Root>
-        <Logger name="org.docx4j" level="debug" />
+        <Logger name="org.docx4j" level="off" />
 
     </Loggers>
 </Configuration>