From 38c060a610e8c27dfc54e064f4fb4fd22b6b4d56 Mon Sep 17 00:00:00 2001
From: linzhijie <19970921lzj>
Date: 星期一, 12 四月 2021 15:53:52 +0800
Subject: [PATCH] 最新代码

---
 src/main/java/com/ots/project/exam/domain/TLibraryCode.java            |    2 
 src/main/java/com/ots/project/tool/ShellTool.java                      |   39 ---
 src/main/java/com/ots/project/tool/report/MAQ/base/MAQConditionVO.java |    9 
 src/main/java/com/ots/project/tool/email/EmailMessageImpl.java         |   10 -
 src/main/java/com/ots/project/tool/exam/ImageUtil.java                 |   38 ++++
 src/main/java/com/ots/project/tool/report/CAQ/CAQReport.java           |   24 --
 pom.xml                                                                |   52 +----
 /dev/null                                                              |   44 ----
 src/main/java/com/ots/project/tool/report/MAQ/base/BaseCondition.java  |   21 --
 src/main/java/com/ots/common/utils/poi/WordUtil.java                   |  246 ++++++++++++++++++++++-----
 src/main/java/com/ots/common/enums/ReportTypeEnum.java                 |    2 
 tai-ots-framework.iml                                                  |    5 
 src/main/java/com/ots/project/tool/email/SimpleMailSender.java         |    2 
 src/main/java/com/ots/project/tool/exam/ExamUtil.java                  |    5 
 14 files changed, 272 insertions(+), 227 deletions(-)

diff --git a/README.md b/README.md
deleted file mode 100644
index a5ffc18..0000000
--- a/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## TAI_OTS_FRAMEWORK
-
-娴嬭瘎绯荤粺鏍稿績浠g爜
-
diff --git a/pom.xml b/pom.xml
index 713da3e..393ee3b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -355,47 +355,17 @@
             <scope>compile</scope>
         </dependency>
 
+        <dependency>
+            <groupId>dom4j</groupId>
+            <artifactId>dom4j</artifactId>
+            <version>1.6.1</version>
+        </dependency>
+        <dependency>
+            <groupId>jaxen</groupId>
+            <artifactId>jaxen</artifactId>
+            <version>1.1.6</version>
+        </dependency>
+
     </dependencies>
-
-    <build>
-        <finalName>${project.artifactId}</finalName>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <encoding>utf-8</encoding>
-                </configuration>
-            </plugin>
-
-        </plugins>
-    </build>
-
-    <repositories>
-        <repository>
-            <id>public</id>
-            <name>aliyun nexus</name>
-            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-        </repository>
-    </repositories>
-
-    <pluginRepositories>
-        <pluginRepository>
-            <id>public</id>
-            <name>aliyun nexus</name>
-            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </pluginRepository>
-    </pluginRepositories>
 
 </project>
\ No newline at end of file
diff --git a/src/main/java/com/ots/common/enums/ReportTitle.java b/src/main/java/com/ots/common/enums/ReportTitle.java
deleted file mode 100644
index fccd1ea..0000000
--- a/src/main/java/com/ots/common/enums/ReportTitle.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.ots.common.enums;
-
-/**
- * @author zhijie
- * @date 2021/03/19
- * @Description: 鎶ュ憡閭欢鏍囬绫�
- */
-public enum ReportTitle {
-    ZH("濮撳悕","Chinese", "%s鐨�%s娴嬭瘎鎶ュ憡"),
-    US("Name","English", "%s's %s Report"),
-    TAI("喔娻阜喙堗腑","Thai", "喔`覆喔⑧竾喔侧笝喔佮覆喔`笡喔`赴喙�喔∴复喔� %s 喔傕腑喔� %s"),
-    ;
-    public final String field;
-    public final String langType;
-    public final String reportTitle;
-
-
-
-    ReportTitle(String field,String langType, String reportTitle) {
-        this.field = field;
-        this.langType = langType;
-        this.reportTitle = reportTitle;
-    }
-
-    public static String getReportTitle(String langType) {
-        ReportTitle[] types = ReportTitle.values();
-        for (ReportTitle type : types) {
-            if (type.langType.equals(langType)) {
-                return type.reportTitle;
-            }
-        }
-        return "";
-    }
-
-    public static String getField(String langType) {
-        ReportTitle[] types = ReportTitle.values();
-        for (ReportTitle type : types) {
-            if (type.langType.equals(langType)) {
-                return type.field;
-            }
-        }
-        return "";
-    }
-}
diff --git a/src/main/java/com/ots/common/enums/ReportTypeEnum.java b/src/main/java/com/ots/common/enums/ReportTypeEnum.java
index f78eaba..624b286 100644
--- a/src/main/java/com/ots/common/enums/ReportTypeEnum.java
+++ b/src/main/java/com/ots/common/enums/ReportTypeEnum.java
@@ -4,7 +4,7 @@
 @Getter
 public enum ReportTypeEnum {
     Brief("Brief", "绠�鏄撶増"), Complete("Complete", "瀹屾暣鐗�"), SAQ("SAQ", "SAQ鎶ュ憡"), RuiLin("RuiLin", "鐫块偦鎶ュ憡"), CAQ("CAQ", "CAQ鎶ュ憡"),
-    JAQ("JAQ","JAQ鎶ュ憡"),MAQ("MAQ", "MAQ鎶ュ憡");
+    JAQ("JAQ","JAQ鎶ュ憡"),MAQ("MAQ", "MAQ鎶ュ憡"),MAQV2("MAQV2", "MAQV2鎶ュ憡");
     private final String code;
     private final String message;
     ReportTypeEnum(String code, String message) {
diff --git a/src/main/java/com/ots/common/utils/poi/WordUtil.java b/src/main/java/com/ots/common/utils/poi/WordUtil.java
index 34a17cc..6de620f 100644
--- a/src/main/java/com/ots/common/utils/poi/WordUtil.java
+++ b/src/main/java/com/ots/common/utils/poi/WordUtil.java
@@ -1,5 +1,6 @@
 package com.ots.common.utils.poi;
 import cn.hutool.core.collection.CollUtil;
+import com.ots.common.enums.ReportTypeEnum;
 import com.ots.common.enums.ReportTypeNameEnum;
 import com.ots.common.enums.TemplateTypeEnum;
 import com.ots.common.utils.StringUtils;
@@ -20,57 +21,36 @@
 import org.apache.poi.ooxml.POIXMLDocument;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.util.Units;
-import org.apache.poi.xwpf.usermodel.Document;
-import org.apache.poi.xwpf.usermodel.IBodyElement;
-import org.apache.poi.xwpf.usermodel.IRunElement;
-import org.apache.poi.xwpf.usermodel.XWPFChart;
-import org.apache.poi.xwpf.usermodel.XWPFDocument;
-import org.apache.poi.xwpf.usermodel.XWPFHeader;
-import org.apache.poi.xwpf.usermodel.XWPFParagraph;
-import org.apache.poi.xwpf.usermodel.XWPFRun;
-import org.apache.poi.xwpf.usermodel.XWPFTable;
-import org.apache.poi.xwpf.usermodel.XWPFTableCell;
-import org.apache.poi.xwpf.usermodel.XWPFTableRow;
+import org.apache.poi.xwpf.usermodel.*;
 import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlObject;
+import org.dom4j.DocumentException;
 import org.jetbrains.annotations.Nullable;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarChart;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarSer;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumVal;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTScatterChart;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTScatterSer;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObject;
 import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDrawing;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
+import java.io.*;
+import java.util.*;
 
 public class WordUtil {
     private static final Logger log = LoggerFactory.getLogger(WordUtil.class);
     public static String tempFilePath = "/Users/shawnli/Downloads/";
     private static String noRunChange = "";
+    private static Map<String, String> colorLabel = new HashMap<String, String>() {{
+        put("<YellowText>", "</YellowText>");
+    }};
+    private static Map<String, String> fontSize = new HashMap<String, String>() {{
+        put("<FontSize_11>", "</FontSize_11>");
+    }};
     public static final int DEFAULT_FONT_SIZE = 10;
     
     public static boolean changWord(String inputUrl, String outputUrl,
@@ -256,7 +236,7 @@
         int width = (int) Math.round(bufferedImage.getWidth());
         int height = (int) Math.round(bufferedImage.getHeight());
         int emuSelf = 3000;
-        run.addPicture(in, Document.PICTURE_TYPE_PNG, "TEST",  width * emuSelf, height * emuSelf);
+        run.addPicture(in, Document.PICTURE_TYPE_PNG, "TEST", width * emuSelf, height * emuSelf);
         in.close();
         if (wordParam.isMove()) {
             
@@ -314,7 +294,7 @@
                 XWPFTable table = tables.get(i);
                 if (table.getRows().size() > 0) {
                     
-                    log.info("琛ㄦ牸鏁版嵁锛�"+ table.getText());
+                    log.info("琛ㄦ牸鏁版嵁锛�" + table.getText());
                     if (checkText(table.getText())) {
                         List<XWPFTableRow> rows = table.getRows();
                         
@@ -497,6 +477,7 @@
                     insertRun.setText(originalRunStr);
                     insertRun.setBold(oldRun.isBold());
                     insertRun.setColor(oldRun.getColor());
+                    insertRun.setFontFamily(oldRun.getFontFamily());
                     int fontSize = oldRun.getFontSize();
                     insertRun.setFontSize((fontSize == -1) ? DEFAULT_FONT_SIZE : fontSize);
                 }
@@ -507,12 +488,24 @@
                 if (StringUtils.isNotEmpty(newRunStr)) {
                     newRunStr = newRunStr.replaceAll("<BoldText>", "");
                     newRunStr = newRunStr.replaceAll("</BoldText>", "");
+                    
+                    String rgbStr = getRGBStr(newRunStr, oldRun);
+                    if (rgbStr == null) {
+                        rgbStr = oldRun.getColor();
+                    }
+                    
+                    int fontSize = getFontSize(newRunStr, oldRun);
+                    if (fontSize == -1) {
+                        fontSize = oldRun.getFontSize();
+                    }
+                    newRunStr = getfinalStr(newRunStr);
                     stringList.add(newRunStr);
                     XWPFRun insertRun = paragraph.insertNewRun(runPosition++);
                     insertRun.setText(newRunStr);
                     insertRun.setBold(true);
-                    insertRun.setColor(oldRun.getColor());
-                    int fontSize = oldRun.getFontSize();
+                    insertRun.setColor(rgbStr);
+                    String fontFamily = oldRun.getFontFamily();
+                    insertRun.setFontFamily(fontFamily);
                     insertRun.setFontSize((fontSize == -1) ? DEFAULT_FONT_SIZE : fontSize);
                 }
                 pointer = position;
@@ -522,6 +515,7 @@
                 insertRun.setText(runValue.substring(pointer, end));
                 insertRun.setBold(oldRun.isBold());
                 insertRun.setColor(oldRun.getColor());
+                insertRun.setFontFamily(oldRun.getFontFamily());
                 int fontSize = oldRun.getFontSize();
                 insertRun.setFontSize((fontSize == -1) ? DEFAULT_FONT_SIZE : fontSize);
                 pointer = end;
@@ -530,6 +524,71 @@
         
         paragraph.removeRun(runPosition);
         return "NoChangValue";
+    }
+    private static int getFontSize(String newRunStr, XWPFRun oldRun) {
+        int font = -1;
+        for (String lab : fontSize.keySet()) {
+            if (newRunStr.contains(lab)) {
+                int fontSize = getFontSize(lab);
+                if (fontSize != -1) {
+                    font = fontSize;
+                    break;
+                }
+            }
+        }
+        return font;
+    }
+    private static int getFontSize(String lab) {
+        int font = -1;
+        int index = lab.indexOf("_");
+        String size = lab.substring(index + 1, lab.length() - 1);
+        try{
+            font = Integer.parseInt(size);
+        }catch (Exception e){}
+        return font;
+    }
+    private static String getfinalStr(String newRunStr) {
+        String result = newRunStr;
+        for (String lab : colorLabel.keySet()) {
+            if (newRunStr.contains(lab)) {
+                newRunStr = newRunStr.replaceAll(lab, "");
+                newRunStr = newRunStr.replaceAll(colorLabel.get(lab), "");
+                result = newRunStr;
+            }
+        }
+        for (String lab : fontSize.keySet()) {
+            if (newRunStr.contains(lab)) {
+                newRunStr = newRunStr.replaceAll(lab, "");
+                newRunStr = newRunStr.replaceAll(fontSize.get(lab), "");
+                result = newRunStr;
+            }
+        }
+        return result;
+    }
+    private static String getRGBStr(String newRunStr, XWPFRun oldRun) {
+        String rgbStr = null;
+        for (String lab : colorLabel.keySet()) {
+            if (newRunStr.contains(lab)) {
+                String colorByLab = getColorByLab(lab);
+                if (colorByLab != null) {
+                    rgbStr = colorByLab;
+                    break;
+                }
+            }
+        }
+        return rgbStr;
+    }
+    private static String getColorByLab(String lab) {
+        String rgbStr = null;
+        switch (lab) {
+            case "<YellowText>":
+                rgbStr = "ff9900";
+                break;
+            default:
+                rgbStr = "000000";
+                break;
+        }
+        return rgbStr;
     }
 
 
@@ -697,7 +756,7 @@
             ShellTool.execLibreofficeCommand("pdf", EssConfig.getProfile() + "/" + reportName, EssConfig.getProfile() + "/");
             zipFilePath = getPdfPath(reportName);
             
-             deleteFileStrList.add(EssConfig.getProfile() + "/" + reportName);
+            deleteFileStrList.add(EssConfig.getProfile() + "/" + reportName);
         } catch (Exception ex) {
             returnMessage = returnMessage + ex.getMessage();
             deleteFileStrList.add(EssConfig.getProfile() + "/" + reportName);
@@ -717,7 +776,7 @@
     }
     private static void changColorIfJAQ(Map<String, Object> textMap, FileOutputStream out, String reportName, String reportType) throws IOException {
         if (Objects.equals(reportType, "JAQ")) {
-            changTableColor(reportName, out, (List<JAQTableStyle>)textMap.get("JAQTableStyle"));
+            changTableColor(reportName, out, (List<JAQTableStyle>) textMap.get("JAQTableStyle"));
         }
     }
     private static String getTypeIfIsSAQ(TReportTemplate tReportTemplate, String reportType) {
@@ -727,7 +786,7 @@
         return reportType;
     }
     private static String getPdfPath(String reportName) {
-        return reportName.substring(0,reportName.lastIndexOf(".")) + ".pdf";
+        return reportName.substring(0, reportName.lastIndexOf(".")) + ".pdf";
     }
     public static void deleteFileByStr(List<String> deleteFileStrList) {
         
@@ -772,12 +831,14 @@
         }
         return new FileOutputStream(outFile);
     }
-    private static void setChageWord(String fileName, OutputStream out, Map<String, Object> textMap, String reportType, String templateType, Map<Integer, Map<Integer, List<String[]>>> autoTableMap) throws IOException, org.apache.poi.openxml4j.exceptions.InvalidFormatException {
+    private static void setChageWord(String fileName, OutputStream out, Map<String, Object> textMap, String reportType, String templateType, Map<Integer, Map<Integer, List<String[]>>> autoTableMap) throws IOException, org.apache.poi.openxml4j.exceptions.InvalidFormatException, DocumentException {
         String filePath = getTemplateDownLoadPathByUpLoad(fileName);
         
         XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(getTemplateDownLoadPathByUpLoad(fileName)));
         
         changeText(document, textMap);
+        
+        changeTextBox(document, textMap);
         
         addTableValue(document, autoTableMap);
         
@@ -785,6 +846,58 @@
         
         changChar(textMap, document, reportType, templateType);
         document.write(out);
+    }
+    private static void changeTextBox(XWPFDocument document, Map<String, Object> textMap) throws DocumentException {
+        List<XWPFParagraph> paragraphs = document.getParagraphs();
+        
+        for (XWPFParagraph paragraph : paragraphs) {
+            CTR[] rArray = paragraph.getCTP().getRArray();
+            for (XmlObject ctr : rArray) {
+                Node domNode = ctr.getDomNode();
+                setTextVal(domNode, textMap);
+            }
+        }
+    }
+    private static void setTextVal(Node node, Map<String, Object> textMap) {
+        if ("w:t".equalsIgnoreCase(node.getNodeName())) {
+            Node wtItem = node.getChildNodes().item(0);
+            if (wtItem != null) {
+                wtItem.setNodeValue(getValByKey(wtItem.getNodeValue(), textMap));
+            }
+            return;
+        }
+        NodeList childNodes = node.getChildNodes();
+        for (int i = 0; i < childNodes.getLength(); i++) {
+            setTextVal(childNodes.item(i), textMap);
+        }
+    }
+    private static String getValByKey(String text, Map<String, Object> textMap) {
+        if (!checkText(text)) {
+            return text;
+        }
+        String repText = "";
+        Set<Map.Entry<String, Object>> textSets = textMap.entrySet();
+        for (Map.Entry<String, Object> textSet : textSets) {
+            
+            String key = "%" + textSet.getKey() + "%";
+            if (text.indexOf(key) != -1) {
+                text = text.replaceAll(key, (String) textMap.get(textSet.getKey()));
+                repText = text;
+                if (checkText(text)) {
+                    continue;
+                } else {
+                    break;
+                }
+            }
+        }
+        if (repText.indexOf("<BoldText>") != -1) {
+            repText = repText.replaceAll("<BoldText>", "");
+            repText = repText.replaceAll("</BoldText>", "");
+        }
+        if (repText.indexOf("N/A NONE") != -1) {
+            repText = repText.replaceAll("N/A NONE", "");
+        }
+        return repText;
     }
     public static void changTableColor(String fileName, OutputStream out, List<JAQTableStyle> jaqTableStyleList) throws IOException {
         if (StringUtils.isEmpty(fileName) || CollUtil.isEmpty(jaqTableStyleList)) {
@@ -825,12 +938,55 @@
         if (StringUtils.equals(reportType, "MAQ")) {
             
             setMAQCompleteChars(textMap, charts);
-        } else if (StringUtils.equals(reportType, "RuiLin")){
+        } else if (StringUtils.equals(reportType, ReportTypeEnum.MAQV2.getCode())) {
+            setMAQ_V2CompleteChars(textMap, charts);
+        } else if (StringUtils.equals(reportType, "RuiLin")) {
             setRuiLinChar(textMap, charts);
         } else {
             return;
         }
     }
+    private static void setMAQ_V2CompleteChars(Map<String, Object> textMap, List<XWPFChart> charts) {
+        String p_People32 = textMap.get("P_Task31").toString();
+        String p_Task31 = textMap.get("P_People32").toString();
+        String P_INCON25 = textMap.get("P_INCON25").toString();
+        String P_IM24 = textMap.get("P_IM24").toString();
+        String P_SDE23 = textMap.get("P_SDE23").toString();
+        
+        for (XWPFChart xwpfChart : charts) {
+            try {
+                CTChart ctChart = xwpfChart.getCTChart();
+                CTPlotArea ctPlotArea = ctChart.getPlotArea();
+                List<CTScatterChart> scatterChartList = ctPlotArea.getScatterChartList();
+                List<CTBarChart> barChartList = ctPlotArea.getBarChartList();
+                if (scatterChartList.size() != 0 && barChartList.size() != 0) {
+                    CTScatterChart ctScatterChart = scatterChartList.get(0);
+                    CTScatterSer ctScatterSer = ctScatterChart.getSerList().get(0);
+                    CTAxDataSource xVal = ctScatterSer.getXVal();
+                    List<CTNumVal> ptList = xVal.getNumRef().getNumCache().getPtList();
+                    ptList.get(0).setV(P_INCON25);
+                    ptList.get(1).setV(P_IM24);
+                    ptList.get(2).setV(P_SDE23);
+                } else if (scatterChartList.size() != 0 && barChartList.size() == 0) {
+                    CTScatterChart ctScatterChart = scatterChartList.get(0);
+                    CTScatterSer ctScatterSer = ctScatterChart.getSerList().get(0);
+                    CTAxDataSource xVal = ctScatterSer.getXVal();
+                    CTNumDataSource yVal = ctScatterSer.getYVal();
+                    xVal.getNumRef().getNumCache().getPtList().get(0).setV(p_Task31);
+                    yVal.getNumRef().getNumCache().getPtList().get(0).setV(p_People32);
+                } else if (barChartList.size() != 0) {
+                    CTBarChart ctBarChart = barChartList.get(0);
+                    List<CTBarSer> serList = ctBarChart.getSerList();
+                    CTBarSer ctBarSer = serList.get(0);
+                    CTNumDataSource val = ctBarSer.getVal();
+                    val.getNumRef().getNumCache().getPtList().get(0).setV(p_Task31);
+                    val.getNumRef().getNumCache().getPtList().get(1).setV(p_People32);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
     private static void setRuiLinChar(Map<String, Object> textMap, List<XWPFChart> charts) {
         try {
             int char0Size = charts.get(0).getCTChart().getPlotArea().getBarChartList().get(0).getSerList().get(0).getVal().getNumRef().getNumCache().getPtList().size();
diff --git a/src/main/java/com/ots/project/exam/domain/TLibraryCode.java b/src/main/java/com/ots/project/exam/domain/TLibraryCode.java
index 312bb3b..87417d6 100644
--- a/src/main/java/com/ots/project/exam/domain/TLibraryCode.java
+++ b/src/main/java/com/ots/project/exam/domain/TLibraryCode.java
@@ -34,6 +34,8 @@
     
     private String dictType;
     private MultipartFile iconFile;
+    
+    private String score;
     public String getLangTypeContext(LangTypeEnum langType) {
         if (Objects.equals("2",dictType)) {
             return icon;
diff --git a/src/main/java/com/ots/project/tool/ShellTool.java b/src/main/java/com/ots/project/tool/ShellTool.java
index 715583b..b93fa55 100644
--- a/src/main/java/com/ots/project/tool/ShellTool.java
+++ b/src/main/java/com/ots/project/tool/ShellTool.java
@@ -10,13 +10,12 @@
         StringBuilder builder = new StringBuilder();
         if (os.toLowerCase().startsWith("mac")) {
             builder.append("/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to ");
-        } else if(os.contains("Windows")){
-            builder.append("cmd /c start soffice --headless --convert-to ");
+        }  else if(os.toLowerCase().startsWith("windows")){
+            builder.append("soffice.exe --headless --invisible --convert-to ");
         } else {
             builder.append("libreoffice6.4 --headless --convert-to ");
         }
-
-        builder.append(type).append(" ");
+        builder.append(type).append(":impress_pdf_Export ");
         builder.append("--outdir " + targetPath).append(" ");
         builder.append(sourcePath).append(" ");
         
@@ -27,36 +26,8 @@
             }
         } catch (Exception e) {
         }
-        return run_cmd(builder.toString());
+        return exec(builder.toString());
     }
-
-    public static String run_cmd(String strcmd) {
-        //
-        Runtime rt = Runtime.getRuntime(); //Runtime.getRuntime()杩斿洖褰撳墠搴旂敤绋嬪簭鐨凴untime瀵硅薄
-        Process ps = null;  //Process鍙互鎺у埗璇ュ瓙杩涚▼鐨勬墽琛屾垨鑾峰彇璇ュ瓙杩涚▼鐨勪俊鎭��
-        try {
-            ps = rt.exec(strcmd);   //璇ュ璞$殑exec()鏂规硶鎸囩ずJava铏氭嫙鏈哄垱寤轰竴涓瓙杩涚▼鎵ц鎸囧畾鐨勫彲鎵ц绋嬪簭锛屽苟杩斿洖涓庤瀛愯繘绋嬪搴旂殑Process瀵硅薄瀹炰緥銆�
-            ps.waitFor();  //绛夊緟瀛愯繘绋嬪畬鎴愬啀寰�涓嬫墽琛屻��
-        } catch (IOException e1) {
-            e1.printStackTrace();
-        } catch (InterruptedException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-
-        int i = ps.exitValue();  //鎺ユ敹鎵ц瀹屾瘯鐨勮繑鍥炲��
-        if (i == 0) {
-            System.out.println("鎵ц瀹屾垚.");
-        } else {
-            System.out.println("鎵ц澶辫触.");
-        }
-
-        ps.destroy();  //閿�姣佸瓙杩涚▼
-        ps = null;
-
-        return null;
-    }
-
     private static String exec(String command) {
         String returnString = "";
         Runtime runTime = Runtime.getRuntime();
@@ -80,6 +51,6 @@
         return returnString;
     }
     public static void main(String[] args) {
-        System.out.println(exec("libreoffice6.4 --headless --convert-to  /root/灏忕孩.docx 灏忕孩.pdf "));
+        System.out.println(exec("soffice.exe --headless --invisible --convert-to  D:/ots/uploadPath/upload/2021/02/28/01e01cf7e372ba8b1c5d24b8d69a46f8.docx 01e01cf7e372ba8b1c5d24b8d69a46f8.pdf "));
     }
 }
diff --git a/src/main/java/com/ots/project/tool/email/EmailMessageImpl.java b/src/main/java/com/ots/project/tool/email/EmailMessageImpl.java
index b697c65..5c05dff 100644
--- a/src/main/java/com/ots/project/tool/email/EmailMessageImpl.java
+++ b/src/main/java/com/ots/project/tool/email/EmailMessageImpl.java
@@ -15,16 +15,6 @@
 @Slf4j
 @Component
 public class EmailMessageImpl implements EmailMessage {
-
-
-
-
-
-
-
-
-
-
     public final static String userName = "2040239371";
     public final static String password = "ivaikhcfclvlefbj";
     private final static String mailServerHost = "smtp.qq.com";
diff --git a/src/main/java/com/ots/project/tool/email/SimpleMailSender.java b/src/main/java/com/ots/project/tool/email/SimpleMailSender.java
index 257f266..b4cd559 100644
--- a/src/main/java/com/ots/project/tool/email/SimpleMailSender.java
+++ b/src/main/java/com/ots/project/tool/email/SimpleMailSender.java
@@ -47,7 +47,7 @@
         mailInfo.setUserName("test@tai-online.com");
         mailInfo.setPassword("Wlz@2020");
         mailInfo.setFromAddress("test@tai-online.com");
-        mailInfo.setToAddress("guobiao8900@126.com");
+        mailInfo.setToAddress("");
         mailInfo.setSubject("娴嬭瘯鍙戦�侀偖浠�");
         mailInfo.setContent("璇勬祴绯荤粺娴嬭瘯閭�璇烽摼鎺ttp://139.199.11.114/exam-stu/#/demography/ed860660-95a7-4feb-aab9-f56b1eff1a3c/12/index");
         String[] attachFileNames = {"D:\\ots\\uploadPath\\upload\\94a3847d-901a-4063-9d2d-ef3a345f46d0.png", "D:\\ots\\uploadPath\\upload\\94a3847d-901a-4063-9d2d-ef3a345f46d0.png"};
diff --git a/src/main/java/com/ots/project/tool/exam/ExamUtil.java b/src/main/java/com/ots/project/tool/exam/ExamUtil.java
index a29dfff..ccc5170 100644
--- a/src/main/java/com/ots/project/tool/exam/ExamUtil.java
+++ b/src/main/java/com/ots/project/tool/exam/ExamUtil.java
@@ -22,12 +22,14 @@
         productTypeMap.put("job", "JAQ");
         productTypeMap.put("RuiLin","RuiLin");
         productTypeMap.put("MAQ", "MAQ");
+        productTypeMap.put("MAQV2", "MAQV2");
         productTypeMap.put("SAQ", "SAQ");
         productTypeMap.put("JAQ", "JAQ");
     }
     private static void setWaterDropAndBar() {
         
         waterDropPictureMap.put("ResponseFidelityDiagnosis", "waterDropDarkBlue.png");
+        waterDropPictureMap.put("ResponseFidelityDiagnosis_V2", "waterDropDarkBlue_V2.png");
         
         waterDropPictureMap.put("ResponseFidelityDiagnosisSAQ", "waterDropDarkBlue.png");
         
@@ -55,8 +57,11 @@
         waterDropPictureMap.put("PoliteTactful", "waterDropLightBlue.png");
         
         barPictureMap.put("ResponseFidelityDiagnosis_waterDrops1", "Bar1.png");
+        barPictureMap.put("ResponseFidelityDiagnosis_V2_waterDrops1", "Bar1_V2.png");
         barPictureMap.put("ResponseFidelityDiagnosis_waterDrops2", "Bar1.png");
+        barPictureMap.put("ResponseFidelityDiagnosis_V2_waterDrops2", "Bar1_V2.png");
         barPictureMap.put("ResponseFidelityDiagnosis_waterDrops3", "Bar2.png");
+        barPictureMap.put("ResponseFidelityDiagnosis_V2_waterDrops3", "Bar2_V2.png");
         
         barPictureMap.put("ResponseFidelityDiagnosisSAQ_waterDrops1", "Bar1.png");
         barPictureMap.put("ResponseFidelityDiagnosisSAQ_waterDrops2", "Bar1.png");
diff --git a/src/main/java/com/ots/project/tool/exam/ImageUtil.java b/src/main/java/com/ots/project/tool/exam/ImageUtil.java
index ff2b699..b0c1724 100644
--- a/src/main/java/com/ots/project/tool/exam/ImageUtil.java
+++ b/src/main/java/com/ots/project/tool/exam/ImageUtil.java
@@ -95,10 +95,17 @@
         int barImageY = 30; 
         float scorce =  scorceF / 100;
         if (key.indexOf("ResponseFidelityDiagnosis") != -1) {
-            CANVAS_H = 105;
+        	CANVAS_H = 105;
             waterDropImageX = 2;
             scorce100 = 812;
             barImageY = 5;
+        }
+        if (key.indexOf("ResponseFidelityDiagnosis_V2") != -1) {
+            CANVAS_H = 400;
+            waterDropImageX = -30;
+            scorce100 = 800;
+            barImageY = 5;
+            waterDropImageY = 0;
         }
         if (key.indexOf("RuilinTestResultValidityDiagnosisContext") != -1) {
             CANVAS_H = 105;
@@ -130,6 +137,9 @@
         } else {
             barName = "";
         }
+        if(StringUtils.isBlank(barName)){
+        	return;
+        }
         BufferedImage barImage = getImage(reportTemplates + barName);
         BufferedImage waterDropImage = getImage(reportTemplates + waterDrop);
         
@@ -153,7 +163,11 @@
         
         int waterDropOffsetX = setWaterDrop(waterDrop, waterDropImageX, waterDropImageY, scorce100, scorce, g2d, waterDropImage);
         
-        setText(String.valueOf(Math.round(scorceF)), g2d, waterDropOffsetX);
+        if (key.indexOf("ResponseFidelityDiagnosis_V2") != -1) {
+        	setTextV2(String.valueOf(Math.round(scorceF)), g2d, waterDropOffsetX);
+        }else{
+        	setText(String.valueOf(Math.round(scorceF)), g2d, waterDropOffsetX);
+        }
         g2d.dispose();
         
         outputBarWaterImage(key + "_" + member_id + "_" + String.valueOf(scorceF)+"_" + suffixDate, image);
@@ -165,6 +179,25 @@
         } catch (IOException e) {
             e.printStackTrace();
         }
+    }
+    private static void setTextV2(String value, Graphics2D g2d, int waterDropOffsetX) {
+        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+        
+        g2d.setColor(Color.BLACK);
+        Font font = new Font("", Font.BOLD, 16);
+        g2d.setFont(font);
+        
+        int numX = 0;
+        int numY = 17;
+        if (value.length() == 2) {
+            numX = 36;
+        } else if (value.length() == 3) {
+            numX = 32;
+        } else if (value.length() == 1) {
+            numX = 42;
+        }
+        
+        g2d.drawString(value, numX + waterDropOffsetX, numY);
     }
     private static void setText(String value, Graphics2D g2d, int waterDropOffsetX) {
         g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
@@ -207,6 +240,7 @@
             return image;
         } catch (IOException e) {
             log.info("寮傚父鍥剧墖锛�" + path);
+            log.error("{}鍙戠敓寮傚父:{}",path, e);
             throw new RuntimeException("鑾峰彇鍥剧墖璧勬簮寮傚父", e);
         }
     }
diff --git a/src/main/java/com/ots/project/tool/report/CAQ/CAQReport.java b/src/main/java/com/ots/project/tool/report/CAQ/CAQReport.java
index 07adf38..37d5129 100644
--- a/src/main/java/com/ots/project/tool/report/CAQ/CAQReport.java
+++ b/src/main/java/com/ots/project/tool/report/CAQ/CAQReport.java
@@ -23,14 +23,7 @@
     private String reportDate;
     
     private String testToken;
-
-    /**
-     * 鑾峰彇鎶ュ憡瀛楀吀鐨刢ode璺焩alue
-     * @param thaiCalculationMap
-     * @param type
-     * @param langType
-     * @return
-     */
+    
     public ReportResultData getTemplateParameters(Map<String, String> thaiCalculationMap, ReportTypeEnum type, LangTypeEnum langType) {
         Map<String, Object> infoMap = new HashMap();
         infoMap.put("fullName", fullName);
@@ -38,17 +31,13 @@
         infoMap.put("testToken", testToken);
         Map textMap = new HashMap();
         Map waterDropsMap = new HashMap();
-        //閬嶅巻鍒濆鍖朿ode瀛楀吀鍊肩殑value
         getParamList(type).stream().forEach(p -> {
             TLibraryCode calculate = p.calculate(thaiCalculationMap, langType);
-            //淇濆瓨缃崲鍚庢枃鏈瓧鍏� 渚�:LIBCAQ0015 : 璇ュ�欓�変汉鍦ㄦ娊璞℃帹鐞嗚兘鍔涢儴鍒�20棰樹腑鍥炵瓟姝g‘鐨勯鏁帮細<BoldText>14</BoldText>
             textMap.put(p.getName(), Objects.isNull(calculate) || StringUtils.isBlank(calculate.getLangTypeContext(langType)) ? "N/A NONE" : calculate.getLangTypeContext(langType));
-            //淇濆瓨鍥剧墖瀛楀吀 渚嬪瓙锛歅_Abstract_context_waterDrops : 26.0
             if (Objects.nonNull(p.getMAQwaterDropsImages())) {
                 waterDropsMap.putAll(p.getMAQwaterDropsImages());
             }
         });
-        //淇濆瓨涔嬪墠浼犺繘鏉ョ殑棰樼洰ID璺熶竴浜涗釜浜轰俊鎭�
         textMap.putAll(thaiCalculationMap);
         ReportResultData reportResultData = new ReportResultData();
         reportResultData.setTextMap(textMap);
@@ -58,12 +47,6 @@
     public List<BaseCondition> getParamList(ReportTypeEnum reportTypeEnum) {
         return init(reportTypeEnum);
     }
-
-    /**
-     * 鍒濆鍖栧瓧鍏�
-     * @param reportTypeEnum
-     * @return
-     */
     private List<BaseCondition> init(ReportTypeEnum reportTypeEnum) {
         List<BaseCondition> paramList = new ArrayList<>();
         
@@ -76,11 +59,6 @@
         paramList.add(new WaterDropletContentPNumeric());
         return paramList;
     }
-
-    /**
-     * 鍒濆鍖栫畝鍗曠殑瀛楀吀code
-     * @return
-     */
     private List<String> getSimpleMessageCoreIds() {
         return Arrays.asList("LIBCAQ0005", "LIBCAQ0006", "LIBCAQ0007", "LIBCAQ0008", "LIBCAQ0010", "LIBCAQ0020"
                 ,"LIBCAQ0030","LIBCAQ0040","LIBCAQ0050","LIBCAQ0060","LIBCAQ0070","LIBCAQ0080"
diff --git a/src/main/java/com/ots/project/tool/report/MAQ/base/BaseCondition.java b/src/main/java/com/ots/project/tool/report/MAQ/base/BaseCondition.java
index 34cd069..5176400 100644
--- a/src/main/java/com/ots/project/tool/report/MAQ/base/BaseCondition.java
+++ b/src/main/java/com/ots/project/tool/report/MAQ/base/BaseCondition.java
@@ -34,14 +34,6 @@
         }
         return false;
     }
-
-    /**
-     * 鑾峰彇鎶ュ憡瀛楀吀
-     * @param map
-     * @param codeId
-     * @param langType
-     * @return
-     */
     public TLibraryCode getMaqReportLibrary(Map<String, String> map, String codeId, LangTypeEnum langType) {
         if (Objects.isNull(codeId)) {
             return null;
@@ -49,9 +41,6 @@
         StringBuilder content = new StringBuilder();
         String[] split = codeId.split(",");
         TLibraryCode result = new TLibraryCode();
-        /**
-         * 鏍规嵁瀛楀吀CODE鑾峰彇瀵瑰簲鐨勫瓧鍏歌鎯�
-         */
         Arrays.stream(split).forEach(item -> {
             TLibraryCode maqReportLibrary = CacheServiceFactory.getInstance().getMAQReportLibrary(item);
             if (Objects.isNull(maqReportLibrary)) {
@@ -63,21 +52,11 @@
                 result.setLibraryCode(maqReportLibrary.getLibraryCode());
             }
         });
-        //璁剧疆瀵瑰簲璇█鐨勬枃瀛楀唴瀹�
         result.setLangTypeContext(content.toString(), langType);
-        //鏇挎崲鎶ュ憡瀛楀吀鍐呭鐨勫彉閲�
         dynamicParameterSubstitution(map, result, langType);
         return result;
     }
-
-    /**
-     * 鏇挎崲鎶ュ憡瀛楀吀鍐呭鐨勫彉閲�
-     * @param map
-     * @param maqReportLibrary
-     * @param langType
-     */
     public void dynamicParameterSubstitution(Map<String, String> map, TLibraryCode maqReportLibrary, LangTypeEnum langType) {
-        //鏍规嵁鎶ュ憡瀛楀吀鍐呭 瀹氫綅鍙橀噺鍚嶄綅缃� 鏇挎崲缁撴灉
         map.forEach((key, value) -> {
             String content = maqReportLibrary.getLangTypeContext(langType);
             String replaceStr = "%" + key + "%";
diff --git a/src/main/java/com/ots/project/tool/report/MAQ/base/MAQConditionVO.java b/src/main/java/com/ots/project/tool/report/MAQ/base/MAQConditionVO.java
index d379165..501f13f 100644
--- a/src/main/java/com/ots/project/tool/report/MAQ/base/MAQConditionVO.java
+++ b/src/main/java/com/ots/project/tool/report/MAQ/base/MAQConditionVO.java
@@ -11,13 +11,14 @@
 @Setter
 public class MAQConditionVO {
     
-    private String name;
+    protected String name;
     
-    private String title;
+    protected String title;
     
-    private String conditionKey;
+    protected String conditionKey;
     
-    private List<String> conditionTarget;
+    protected List<String> conditionTarget;
+    public MAQConditionVO(){}
     
     public MAQConditionVO(String name, String conditionKey, String conditionTargetPrefix) {
         this.name = name;
diff --git a/tai-ots-framework.iml b/tai-ots-framework.iml
index 8cdebc4..04ddbce 100644
--- a/tai-ots-framework.iml
+++ b/tai-ots-framework.iml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" version="4">
   <component name="FacetManager">
     <facet type="Spring" name="Spring">
       <configuration />
@@ -171,5 +171,8 @@
     <orderEntry type="library" name="Maven: org.jvnet.hudson:ganymed-ssh2:build210-hudson-1" level="project" />
     <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.49.Final" level="project" />
     <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
+    <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
+    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
+    <orderEntry type="library" name="Maven: jaxen:jaxen:1.1.6" level="project" />
   </component>
 </module>
\ No newline at end of file

--
Gitblit v1.9.1