Răsfoiți Sursa

Merge remote-tracking branch 'origin/dev0410' into dev0410

Conflicts:
	cqb-comm-utils/src/main/java/com/qmth/cqb/utils/StringSimilarityUtils.java
	cqb-question-resource/src/main/java/com/qmth/cqb/question/service/QuesService.java
gaoxing 8 ani în urmă
părinte
comite
3b49e87ace

+ 3 - 8
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/StringSimilarityUtils.java

@@ -12,7 +12,6 @@ import java.util.Set;
 import org.ansj.domain.Result;
 import org.ansj.domain.Term;
 import org.ansj.splitWord.analysis.ToAnalysis;
-import org.apache.commons.lang3.StringUtils;
 
 /**
  * 计算相似度工具包:
@@ -99,7 +98,7 @@ public class StringSimilarityUtils {
             }
             similarity = sum / Math.sqrt(s1 * s2);
         } else {
-            throw new NullPointerException("传入的参数为空");
+            return 0;
         }
         return similarity;
     }
@@ -270,12 +269,8 @@ public class StringSimilarityUtils {
      * @return
      */
     public static String stringFilter(String str) {
-        if (StringUtils.isNotBlank(str)) {
-            String regEx = "[_`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
-            return str.replaceAll("\\s*", "").replaceAll(regEx, "");
-        } else {
-            return null;
-        }
+        String regEx = "[_`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
+        return str.replaceAll("\\s*", "").replaceAll(regEx, "");
 
     }
 

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

@@ -670,8 +670,6 @@ public final class DocxProcessUtil {
 
         for (WordprocessingMLPackage wp : wordMLPackages) {
 
-            //初始化图片路径
-            initPkgImage(wp);
             // 获取资源文件存储
             PartStore partStore = wp.getSourcePartStore();
             // 获取图片资源定义
@@ -812,11 +810,11 @@ public final class DocxProcessUtil {
             wordMl += XmlUtils.marshaltoString(p);
         }
 //            wordMl = formatPWordMl(wordMl);
+        initPkgImage(wordMLPackage);
         return wordMl;
     }
 
     public static void main(String[] args) {
-        String str = "1";
-        System.out.println(str.matches("^\\d{1,}\\.[\\s\\S]*"));
+        System.out.println("123".matches("^\\d{1,}$"));
     }
 }

+ 68 - 3
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExportPaperService.java

@@ -17,6 +17,7 @@ import com.qmth.cqb.utils.BeanCopierUtil;
 import com.qmth.cqb.utils.CommonUtils;
 import com.qmth.cqb.utils.exception.PaperException;
 import com.qmth.cqb.utils.word.DocxProcessUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.docx4j.XmlUtils;
 import org.docx4j.jaxb.Context;
 import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
@@ -26,6 +27,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.bind.JAXBElement;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -172,10 +174,16 @@ public class ExportPaperService {
                     }
                 }
                 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){
-                        subQues.setQuesBodyWord(setSubQuesNum(subQues.getQuesBodyWord(),++subNum));
+                        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;
@@ -186,8 +194,9 @@ public class ExportPaperService {
                         }
                     }
                 }else{
-                    Question question = paperDetailUnit.getQuestion();
-                    question.setQuesBodyWord(setSubQuesNum(question.getQuesBodyWord(),++subNum));
+                    int curSubNum = ++subNum;
+                    question.setQuesBodyWord(setSubQuesNum(question.getQuesBodyWord(),curSubNum));
+                    question.setQuesBodyWord(replaceQuesBlank(question.getQuesBodyWord(),curSubNum));
                 }
             }
         }
@@ -253,4 +262,60 @@ public class ExportPaperService {
         return DocxProcessUtil.formatPWordMl(XmlUtils.marshaltoString(p));
     }
 
+    /**
+     * 替换填空
+     * @param wordMl
+     * @param num
+     * @return
+     * @throws Exception
+     */
+    public String replaceQuesBlank(String wordMl,int num) throws Exception {
+        String tmpStr = DocxProcessUtil.BODY_HEADER + wordMl + DocxProcessUtil.BODY_TAIL;
+        Body body = (Body)XmlUtils.unmarshalString(tmpStr,
+                Context.jc,Body.class);
+        List<Object> pList = body.getContent();
+        int index = 0;
+        int cur = 0;
+        Map<Integer,String> curMap = new HashMap<Integer,String>();
+        for(Object pObj:pList){
+            if(pObj.getClass().equals(P.class)){
+                List<Object> pContent = ((P)pObj).getContent();
+                for(Object rObj:pContent){
+                    if(rObj.getClass().equals(R.class)){
+                        List<Object> rContent = ((R)rObj).getContent();
+                        for(Object tObj:rContent){
+                            if (tObj instanceof JAXBElement)
+                                tObj = ((JAXBElement<?>) tObj).getValue();
+                            if(tObj.getClass().equals(Text.class)){
+                                Text text = (Text)tObj;
+                                String str = text.getValue();
+                                if(str.equals("###")){
+                                    text.setValue("______");
+                                }else if(str.startsWith("#") || str.equals("___")){
+                                    curMap.put(cur,str);
+                                    text.setValue("");
+                                }else if(str.matches("^\\d{1,}$")){
+                                    String preStr = curMap.get(cur - 1);
+                                    if(!StringUtils.isEmpty(preStr) && preStr.startsWith("#")){
+                                        int curNum = num + index;
+                                        text.setValue("___"+(curNum)+"___");
+                                        index++;
+                                    }
+                                }
+                                cur++;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        StringBuffer pWordMl = new StringBuffer();
+        for(Object pObj:pList){
+            if(pObj instanceof P){
+                pWordMl.append(DocxProcessUtil.formatPWordMl(XmlUtils.marshaltoString(pObj)));
+            }
+        }
+        return pWordMl.toString();
+    }
+
 }

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

@@ -448,7 +448,7 @@ public class PaperService {
                                 subQues.setQuesParams(params);
                                 quesService.formatQuesUnit(subQues);
                             }
-                            String quesBodyHtml = relaceRuestionIdx(paperDetailUnit.getQuestion().getQuesBody(), index);
+                            String quesBodyHtml = relaceQuestionIdx(paperDetailUnit.getQuestion().getQuesBody(), index);
                             paperDetailUnit.getQuestion().setQuesBody(quesBodyHtml);
                         } else {
                             paperDetailUnit.setNumber(++subNum);
@@ -683,7 +683,7 @@ public class PaperService {
 
     }
 
-    private String relaceRuestionIdx(String str, int baseIdx) {
+    private String relaceQuestionIdx(String str, int baseIdx) {
         StringBuffer sb = new StringBuffer("");
         Pattern pattern = Pattern.compile("##(\\d+)##");
 

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

@@ -348,12 +348,18 @@ public class PaperController {
 
         int length = allPaperDetailUnitList.size();
         for (int i = 0; i < length - 1; i++) {
+            PaperDetailUnitExp paperDetailUnitExp1 = allPaperDetailUnitList.get(i);
+            String quesText1 = quesService.getExtractText(paperDetailUnitExp1.getQuestion());
+            if(StringUtils.isEmpty(quesText1)){
+                continue;
+            }
             for (int j = i + 1; j < length; j++) {
-                PaperDetailUnitExp paperDetailUnitExp1 = allPaperDetailUnitList.get(i);
                 PaperDetailUnitExp paperDetailUnitExp2 = allPaperDetailUnitList.get(j);
-                double similarity = StringSimilarityUtils.getSimilarityWithCosinesBySeg(
-                        quesService.getExtractText(paperDetailUnitExp1.getQuestion()),
-                        quesService.getExtractText(paperDetailUnitExp2.getQuestion()));
+                String quesText2 = quesService.getExtractText(paperDetailUnitExp2.getQuestion());
+                if(StringUtils.isEmpty(quesText2)){
+                    continue;
+                }
+                double similarity = StringSimilarityUtils.getSimilarityWithCosinesBySeg(quesText1,quesText2);
                 if (similarity > reduplicateSimilarity) {
                     boolean found = false;
                     for (int k = 0; k < reduplicateId.size(); k++) {

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

@@ -293,7 +293,6 @@ public class QuesService {
                         StringEscapeUtils.unescapeHtml4(quesOption.getOptionBody())));
             }
         }
-        DocxProcessUtil.initPkgImage(wordMLPackage);
         question.setQuesPkg(DocxProcessUtil.getPkgByte(wordMLPackage));
     }
 
@@ -304,19 +303,18 @@ public class QuesService {
      * @return
      */
     public String getExtractText(Question question) {
-        if (question != null) {
-            StringBuilder quesText = new StringBuilder();
+        StringBuilder quesText = new StringBuilder();
+        if (question != null && !StringUtils.isEmpty(question.getQuesBody())) {
             quesText.append(DocxProcessUtil.getTextInHtml(question.getQuesBody()));
-            List<QuesOption> quesOptionList = question.getQuesOptions();
-            if (quesOptionList != null && quesOptionList.size() > 0) {
-                for (QuesOption quesOption : quesOptionList) {
+        }
+        List<QuesOption> quesOptionList = question.getQuesOptions();
+        if (quesOptionList != null && quesOptionList.size() > 0) {
+            for (QuesOption quesOption : quesOptionList) {
+                if (!StringUtils.isEmpty(quesOption.getOptionBody())) {
                     quesText.append(DocxProcessUtil.getTextInHtml(quesOption.getOptionBody()));
                 }
             }
-            return quesText.toString();
-        } else {
-            return null;
         }
+        return quesText.toString();
     }
-
 }