Переглянути джерело

提交试卷 导出代码

chenken 8 роки тому
батько
коміт
e0fc3945ad

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

@@ -131,64 +131,6 @@
 							</w:rPr>
 						</w:pPr>
 					</w:p>
-					<w:p w:rsidP="004072CF" w:rsidR="00BC611E" w:rsidRDefault="00F3740E" w:rsidRPr="004072CF">
-						<w:pPr>
-							<w:spacing w:line="400" w:lineRule="exact"/>
-							<w:ind w:firstLine="2249" w:firstLineChars="800"/>
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-						</w:pPr>
-						<w:r w:rsidRPr="004072CF">
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t>第一部分    客观题(</w:t>
-						</w:r>
-						<w:r w:rsidR="0007594E" w:rsidRPr="004072CF">
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t>总分</w:t>
-						</w:r>
-						<w:r w:rsidR="004D3783">
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t xml:space="preserve">${paper.objectiveScore}</w:t>
-						</w:r>
-						<w:r w:rsidRPr="004072CF">
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t>分)</w:t>
-						</w:r>
-					</w:p>
-					<w:p w:rsidP="00755E9E" w:rsidR="00017BD2" w:rsidRDefault="00017BD2" w:rsidRPr="006E2D68">
-						<w:pPr>
-							<w:spacing w:line="400" w:lineRule="exact"/>
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体"/>
-								<w:b/>
-								<w:szCs w:val="21"/>
-							</w:rPr>
-						</w:pPr>
-					</w:p>
 					<!--循环客观题-->
 				    <#if paper.objectiveDetails?exists>
                     <#list paper.objectiveDetails as paperDetail>
@@ -265,81 +207,6 @@
 							</w:rPr>
 						</w:pPr>
 					</w:p>
-					<w:p w:rsidP="001A590C" w:rsidR="001A590C" w:rsidRDefault="001A590C">
-						<w:pPr>
-							<w:spacing w:line="400" w:lineRule="exact"/>
-							<w:ind w:firstLine="2249" w:firstLineChars="800"/>
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-						</w:pPr>
-						<w:r w:rsidRPr="004072CF">
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t>第</w:t>
-						</w:r>
-						<w:r>
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t>二</w:t>
-						</w:r>
-						<w:r w:rsidRPr="004072CF">
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t xml:space="preserve">部分    </w:t>
-						</w:r>
-						<w:r>
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t>主</w:t>
-						</w:r>
-						<w:r w:rsidRPr="004072CF">
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t>观题(总分</w:t>
-						</w:r>
-						<w:r w:rsidR="004D3783">
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t xml:space="preserve">40 </w:t>
-						</w:r>
-						<w:r w:rsidRPr="004072CF">
-							<w:rPr>
-								<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
-								<w:b/>
-								<w:sz w:val="28"/>
-								<w:szCs w:val="28"/>
-							</w:rPr>
-							<w:t>分)</w:t>
-						</w:r>
-					</w:p>
 					<w:p w:rsidP="003D4B52" w:rsidR="003D4B52" w:rsidRDefault="003D4B52">
 						<w:pPr>
 							<w:spacing w:line="420" w:lineRule="atLeast"/>

+ 0 - 0
cqb-comm-utils/src/main/resources/paper_template.ftl → cqb-comm-utils/src/main/resources/sydx_paper_template.ftl


+ 54 - 74
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/ExportPaperAbstractService.java

@@ -2,7 +2,6 @@ package com.qmth.cqb.paper.service.export;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -81,7 +80,7 @@ public abstract class ExportPaperAbstractService {
 	protected static Template DZKD_TEMPLATE_PAPER;
 	protected static Template DZKD_TEMPLATE_ANSWER;
 	//石油大学模板
-	protected static Template SYDX_TEMPLATE_NORMAL;
+	//protected static Template SYDX_TEMPLATE_NORMAL;
 
 	static {
 		try {
@@ -97,7 +96,7 @@ public abstract class ExportPaperAbstractService {
 			DZKD_TEMPLATE_PAPER = CONFIGURATION.getTemplate("dzkd_paper_template.ftl", ENCODING);
 			DZKD_TEMPLATE_ANSWER = CONFIGURATION.getTemplate("dzkd_answer_template.ftl", ENCODING);
 			
-			SYDX_TEMPLATE_NORMAL = CONFIGURATION.getTemplate("paper_template.ftl", ENCODING);
+			//SYDX_TEMPLATE_NORMAL = CONFIGURATION.getTemplate("paper_template.ftl", ENCODING);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -179,6 +178,7 @@ public abstract class ExportPaperAbstractService {
 		paperExp.setSubjectiveScore(subjectiveScore);
 		if (objectiveDetails.size() > 0) {
 			setUnitExpNumber(objectiveDetails, 0);
+			setScore(objectiveDetails);
 		}
 		if (subjectiveDetails.size() > 0) {
 			for (PaperDetailExp subDetail : subjectiveDetails) {
@@ -187,6 +187,7 @@ public abstract class ExportPaperAbstractService {
 				objectNumber++;
 			}
 			setUnitExpNumber(subjectiveDetails, objetcUnitSum);
+			setScore(subjectiveDetails);
 		}
 		returnMap.put("paper", paperExp);
 		returnMap.put("fileName", paperExp.getName());
@@ -343,64 +344,6 @@ public abstract class ExportPaperAbstractService {
         return pWordMl.toString();
     }
 	
-    /**
-     * 初始化序号
-     * @param paperExp
-     */
-    public void initPaperNum(PaperExp paperExp)throws Exception{
-        if(paperExp.getPaperDetails() == null || paperExp.getPaperDetails().size() == 0){
-            return;
-        }
-        int mainNum = 0;
-        int subNum = 0;
-        Collections.sort(paperExp.getPaperDetails());
-        for(PaperDetailExp paperDetail: paperExp.getPaperDetails()){
-            //大题序号
-            paperDetail.setNumber(++mainNum);
-            paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
-            if(paperDetail.getPaperDetailUnits() == null ||
-                    paperDetail.getPaperDetailUnits().size() == 0){
-                continue;
-            }
-            //小题序号
-            for(PaperDetailUnitExp paperDetailUnit:paperDetail.getPaperDetailUnits()){
-                List<QuesOption> optionList = paperDetailUnit.getQuestion().getQuesOptions();
-                if(optionList != null && optionList.size() > 0){
-                    int index = 0;
-                    for(QuesOption quesOption:optionList){
-                        quesOption.setOptionBodyWord(setOptionNum(quesOption.getOptionBodyWord(),getOptionNum(index)));
-                        index++;
-                    }
-                }
-                List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
-                Question question = paperDetailUnit.getQuestion();
-                //套题序号
-                if(subQuesList != null && subQuesList.size() > 0){
-
-                    question.setQuesBodyWord(replaceQuesBlank(question.getQuesBodyWord(),subNum + 1));
-
-                    for(Question subQues:subQuesList){
-                        int curSubNum = ++subNum;
-                        subQues.setQuesBodyWord(setSubQuesNum(subQues.getQuesBodyWord(),curSubNum));
-                        subQues.setQuesBodyWord(replaceQuesBlank(subQues.getQuesBodyWord(),curSubNum));
-                        List<QuesOption> subOptionList = subQues.getQuesOptions();
-                        if(subOptionList != null && subOptionList.size() > 0){
-                            int sub_index = 0;
-                            for(QuesOption quesOption:subOptionList){
-                                quesOption.setOptionBodyWord(setOptionNum(quesOption.getOptionBodyWord(),getOptionNum(sub_index)));
-                                sub_index++;
-                            }
-                        }
-                    }
-                }else{
-                    int curSubNum = ++subNum;
-                    question.setQuesBodyWord(setSubQuesNum(question.getQuesBodyWord(),curSubNum));
-                    question.setQuesBodyWord(replaceQuesBlank(question.getQuesBodyWord(),curSubNum));
-                }
-            }
-        }
-    }
-
     public String getOptionNum(int number){
         char optionNum = (char)(65 + number);
         return String.valueOf(optionNum);
@@ -428,8 +371,7 @@ public abstract class ExportPaperAbstractService {
      */
     public String setSubQuesNum(String quesBodyWordMl,int num) throws Exception {
         String tmpStr = DocxProcessUtil.BODY_HEADER + quesBodyWordMl + DocxProcessUtil.BODY_TAIL;
-        Body body = (Body)XmlUtils.unmarshalString(tmpStr,
-                Context.jc,Body.class);
+        Body body = (Body)XmlUtils.unmarshalString(tmpStr,Context.jc,Body.class);
         List<Object> pList = body.getContent();
         int index = 0;
         for(Object pObj:pList){
@@ -463,8 +405,7 @@ public abstract class ExportPaperAbstractService {
      */
     public String setOptionNum(String optionWordMl,String num) throws Exception {
         String tmpStr = DocxProcessUtil.BODY_HEADER + optionWordMl + DocxProcessUtil.BODY_TAIL;
-        Body body = (Body)XmlUtils.unmarshalString(tmpStr,
-                Context.jc,Body.class);
+        Body body = (Body)XmlUtils.unmarshalString(tmpStr,Context.jc,Body.class);
         List<Object> pList = body.getContent();
         int index = 0;
         for(Object pObj:pList){
@@ -489,13 +430,52 @@ public abstract class ExportPaperAbstractService {
         return pWordMl.toString();
     }
     
-    protected void appendScore(List<PaperDetailExp> paperDetails){
-		for(PaperDetailExp paperDetailExp:paperDetails){
-			for (PaperDetailUnitExp paperDetailUnit : paperDetailExp.getPaperDetailUnits()) {
-				String scoreString = "("+paperDetailUnit.getScore()+"分)";
-				String questionBodyWord = paperDetailUnit.getQuestion().getQuesBodyWord();
-				
-			}
-		}
-	}
+    /**
+     * 当大题下小题分数不是全部一样时,在小题题干后面加上小题的分数
+     * @param details
+     * @throws Exception
+     */
+    protected void setScore(List<PaperDetailExp> details) throws Exception{
+    	for(PaperDetailExp paperDetailExp:details){
+    		if(!checkPaperDetailUnitScore(paperDetailExp)){
+    			for(PaperDetailUnitExp paperDetailUnit:paperDetailExp.getPaperDetailUnits()){
+    				Question question = paperDetailUnit.getQuestion();
+    				String questionBodyWord = appendScoreToQuestionBody(question.getQuesBodyWord(),paperDetailUnit.getScore());
+    				question.setQuesBodyWord(questionBodyWord);
+    			}
+    		}
+    	}
+    }
+    
+    /**
+     * 在题干上设置分数
+     * @throws Exception 
+     */
+    protected String appendScoreToQuestionBody(String quesBodyWordMl,double score) throws Exception{
+    	String tmpStr = DocxProcessUtil.BODY_HEADER + quesBodyWordMl + DocxProcessUtil.BODY_TAIL;
+        Body body = (Body)XmlUtils.unmarshalString(tmpStr,Context.jc,Body.class);
+        List<Object> pList = body.getContent();
+        int index = 0;
+        for(Object pObj:pList){
+            if(index < pList.size()-1){
+                break;
+            }
+            P p = (P) pObj;
+            List<Object> pContent = p.getContent();
+            R run = new R();
+            Text text = new Text();
+            int scoreInt = (int)score;
+            text.setValue("("+scoreInt+"分)");
+            run.getContent().add(text);
+            pContent.add(run);
+            index++;
+        }
+        StringBuffer pWordMl = new StringBuffer();
+        for(Object pObj:pList){
+            if(pObj instanceof P){
+                pWordMl.append(DocxProcessUtil.formatPWordMl(XmlUtils.marshaltoString(pObj)));
+            }
+        }
+        return pWordMl.toString();
+    }
 }

+ 12 - 32
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SydxExportPaperService.java

@@ -72,8 +72,6 @@ public class SydxExportPaperService{
     @Autowired
     PaperService paperService;
 
-    private static final String FILL_BLANK_QUESTION_FLAG = "###";
-
     private static Configuration CONFIGURATION;
 
 	private static final String ENCODING = "UTF-8";
@@ -87,7 +85,7 @@ public class SydxExportPaperService{
   			CONFIGURATION.setDefaultEncoding(ENCODING);
   			// 设置ftl模板路径
   			CONFIGURATION.setClassForTemplateLoading(DocxProcessUtil.class, "/");
-  			SYDX_TEMPLATE_NORMAL = CONFIGURATION.getTemplate("paper_template.ftl", ENCODING);
+  			SYDX_TEMPLATE_NORMAL = CONFIGURATION.getTemplate("sydx_paper_template.ftl", ENCODING);
   		} catch (Exception e) {
   			e.printStackTrace();
   		}
@@ -98,18 +96,15 @@ public class SydxExportPaperService{
      * @param id
      * @return
      */
-    public Map initExportPaper(String id) throws Exception{
+    public Map<String,Object> initExportPaper(String id) throws Exception{
         //创建返回Map
-        Map returnMap = new HashMap();
+        Map<String,Object> returnMap = new HashMap<String,Object>();
         //获取paper
         Paper paper = paperRepo.findOne(id);
-
         paperService.formatPaper(paper,null);
-
         if(paper == null){
             throw new PaperException("该试卷不存在");
         }
-
         //创建paperDto
         PaperExp paperExp = BeanCopierUtil.copyProperties(paper,PaperExp.class);
 
@@ -138,10 +133,8 @@ public class SydxExportPaperService{
         }
         //初始化试卷序号
         initPaperNum(paperExp);
-
         returnMap.put("paper", paperExp);
         returnMap.put("fileName", paperExp.getName());
-
         return returnMap;
     }
 
@@ -153,8 +146,7 @@ public class SydxExportPaperService{
      */
     public String getObjectAnswer(String answerWordMl,String answer) throws Exception {
         String tmpStr = DocxProcessUtil.BODY_HEADER + answerWordMl + DocxProcessUtil.BODY_TAIL;
-        Body body = (Body)XmlUtils.unmarshalString(tmpStr,
-                Context.jc,Body.class);
+        Body body = (Body)XmlUtils.unmarshalString(tmpStr,Context.jc,Body.class);
         List<Object> pList = body.getContent();
         int index = 0;
         for(Object pObj:pList){
@@ -188,8 +180,7 @@ public class SydxExportPaperService{
      */
     public String getSubjectAnswer(String answerWordMl) throws Exception {
         String tmpStr = DocxProcessUtil.BODY_HEADER + answerWordMl + DocxProcessUtil.BODY_TAIL;
-        Body body = (Body)XmlUtils.unmarshalString(tmpStr,
-                Context.jc,Body.class);
+        Body body = (Body)XmlUtils.unmarshalString(tmpStr,Context.jc,Body.class);
         List<Object> pList = body.getContent();
         int index = 0;
         for(Object pObj:pList){
@@ -279,26 +270,13 @@ public class SydxExportPaperService{
         return title;
     }
 
-    /**
-     * 导出试卷
-     * @param id
-     */
-    public void exportPaper(String id) throws Exception {
-//        Map dataMap = initExportPaper(id);
-//        if(dataMap.get("fileName") != null){
-//            String fileName = (String)dataMap.get("fileName");
-//            DocxProcessUtil.exportPaper(dataMap,fileName);
-//            DocxProcessUtil.processImage(fileName,getPkgList(id));
-//        }
-    }
-
     /**
      * 下载试卷
      * @param id
      */
     public void downloadPaper(String id, HttpServletResponse response) throws Exception {
     	List<String> fileNames = new ArrayList<String>();
-         Map dataMap = initExportPaper(id);
+        Map<String,Object> dataMap = initExportPaper(id);
         if (dataMap.get("fileName") != null) {
             String fileName = (String) dataMap.get("fileName");
             DocxProcessUtil.exportPaper(dataMap, fileName,SYDX_TEMPLATE_NORMAL);
@@ -393,8 +371,7 @@ public class SydxExportPaperService{
      */
     public String setSubQuesNum(String quesBodyWordMl,int num) throws Exception {
         String tmpStr = DocxProcessUtil.BODY_HEADER + quesBodyWordMl + DocxProcessUtil.BODY_TAIL;
-        Body body = (Body)XmlUtils.unmarshalString(tmpStr,
-                Context.jc,Body.class);
+        Body body = (Body)XmlUtils.unmarshalString(tmpStr,Context.jc,Body.class);
         List<Object> pList = body.getContent();
         int index = 0;
         for(Object pObj:pList){
@@ -428,8 +405,7 @@ public class SydxExportPaperService{
      */
     public String setOptionNum(String optionWordMl,String num) throws Exception {
         String tmpStr = DocxProcessUtil.BODY_HEADER + optionWordMl + DocxProcessUtil.BODY_TAIL;
-        Body body = (Body)XmlUtils.unmarshalString(tmpStr,
-                Context.jc,Body.class);
+        Body body = (Body)XmlUtils.unmarshalString(tmpStr,Context.jc,Body.class);
         List<Object> pList = body.getContent();
         int index = 0;
         for(Object pObj:pList){
@@ -483,6 +459,10 @@ public class SydxExportPaperService{
                                 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,}##")){
                                     int curNum = num + index;
                                     text.setValue("___"+(curNum)+"___");

+ 5 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExportPaperController.java

@@ -57,6 +57,11 @@ public class ExportPaperController {
             	ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils.getBeanById(esm.getExportServiceName());
     			exportPaperAbstractService.downloadPaper(id, response);
     		}
+    		/*
+    		ExportServiceManage esm = exportServiceManageRepo.findByOrgName("陕西师范大学");
+        	ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils.getBeanById(esm.getExportServiceName());
+			exportPaperAbstractService.downloadPaper(id, response);
+			*/
 		} catch (Exception e) {
 			e.printStackTrace();
 	        log.error("导出异常:"+e.getMessage());