Browse Source

build fxy新版报告从oss获取模版,对报告底层poitl通过继承提高代码可维护性

mamingxu 3 days ago
parent
commit
265da58c5a
32 changed files with 677 additions and 1355 deletions
  1. 3 3
      easier-report-api/src/main/java/com/yaoyicloud/constant/enums/ModuleType.java
  2. 0 10
      easier-report-api/src/main/java/com/yaoyicloud/dto/ReportDTO.java
  3. 1 1
      easier-report-biz/src/main/java/com/yaoyicloud/controller/CsoReportController.java
  4. 3 3
      easier-report-biz/src/main/java/com/yaoyicloud/controller/ReportUpdateController.java
  5. 439 410
      easier-report-biz/src/main/java/com/yaoyicloud/factory/BasicAbstractRender.java
  6. 131 0
      easier-report-biz/src/main/java/com/yaoyicloud/factory/CSOAbstractRender.java
  7. 13 0
      easier-report-biz/src/main/java/com/yaoyicloud/factory/DocxRenderer.java
  8. 0 851
      easier-report-biz/src/main/java/com/yaoyicloud/render/AbstractNewRender.java
  9. 2 1
      easier-report-biz/src/main/java/com/yaoyicloud/render/InterestConflictsRender.java
  10. 2 1
      easier-report-biz/src/main/java/com/yaoyicloud/render/ProjectInfoRender.java
  11. 2 1
      easier-report-biz/src/main/java/com/yaoyicloud/render/PublicRecordRender.java
  12. 2 1
      easier-report-biz/src/main/java/com/yaoyicloud/render/ServiceProviderInfoRender.java
  13. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/association/AssociationAttachmentSectionRender.java
  14. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/association/AssociationBasicInfoRender.java
  15. 4 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/cso/EntAppendixRender.java
  16. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/cso/EntHeaderSectionRender.java
  17. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/cso/EntPromotionDetailsRender.java
  18. 4 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/cso/EntPromotionSummaryRender.java
  19. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/foundation/FoundationAttachmentSectionRender.java
  20. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/foundation/FoundationBasicInfoRender.java
  21. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/foundation/FoundationfinancialInfoRender.java
  22. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/AntiBriberyRender.java
  23. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/AttachmentSectionRender.java
  24. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/BasicInfoRender.java
  25. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/FinancialInfoRender.java
  26. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/AntiBriberyNewRender.java
  27. 3 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/BasicInfoNewRender.java
  28. 3 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/FinancialInfoNewRender.java
  29. 3 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/PublicRecordNewRender.java
  30. 2 2
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/TaxNewRender.java
  31. 1 1
      easier-report-biz/src/main/java/com/yaoyicloud/service/ReportUpdateService.java
  32. 35 36
      easier-report-biz/src/main/java/com/yaoyicloud/service/impl/ReportUpdateServiceImpl.java

+ 3 - 3
easier-report-api/src/main/java/com/yaoyicloud/constant/enums/ModuleType.java

@@ -36,10 +36,10 @@ public enum ModuleType {
 
 
     PLATFORM_COMPANY_BASICINFO_NEW("PLATFORM_COMPANY_BASICINFO_NEW", "工商信息"),
-    ANTIBRIBERY_NEW("ANTIBRIBERY_NEW", "其他风险"),
+    PLATFORM_COMPANY_ANTIBRIBERY_NEW("PLATFORM_COMPANY_ANTIBRIBERY_NEW", "其他风险"),
     PLATFORM_COMPANY_FINANCIALINFO_NEW("PLATFORM_COMPANY_FINANCIALINFO_NEW", "经营风险"),
-    PUBLIC_RECORD_NEW("PUBLIC_RECORD_NEW", "司法风险"),
-    TAX_NEW("TAX_NEW", "税务风险");
+    PLATFORM_COMPANY_PUBLIC_RECORD_NEW("PLATFORM_COMPANY_PUBLIC_RECORD_NEW", "司法风险"),
+    PLATFORM_COMPANY_TAX_NEW("PLATFORM_COMPANY_TAX_NEW", "税务风险");
     /**
      * 类型
      */

+ 0 - 10
easier-report-api/src/main/java/com/yaoyicloud/dto/ReportDTO.java

@@ -31,12 +31,6 @@ public class ReportDTO {
         @NotNull(message = "map数据必填")
         private String data;
 
-        @NotNull(message = "模版必填")
-        private String reportTempFile;
-
-        @NotNull(message = "relationId必填")
-        private String relationId;
-
         @NotNull(message = "moduleType必填")
         private ModuleType moduleType;
 
@@ -74,10 +68,6 @@ public class ReportDTO {
         @NotNull(message = "map数据必填")
         private String data;
 
-
-        @NotNull(message = "relationId必填")
-        private String relationId;
-
         @NotNull(message = "moduleType必填")
         private ModuleType moduleType;
     }

+ 1 - 1
easier-report-biz/src/main/java/com/yaoyicloud/controller/CsoReportController.java

@@ -46,7 +46,7 @@ public class CsoReportController {
         synchronized (this) {
             ReportGenerationResult plusVersionCheckReport = csoReportService.createCsoCheckReport(
                     resource.getData(),
-                    Long.valueOf(resource.getRelationId()),
+                    Long.valueOf(relationId),
                     resource.getModuleType()
             );
             String sessionId = SESSION_MAP.get(relationId);

+ 3 - 3
easier-report-biz/src/main/java/com/yaoyicloud/controller/ReportUpdateController.java

@@ -4,6 +4,7 @@ package com.yaoyicloud.controller;
 import com.yaoyicloud.annotation.EasierLog;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.RelationCounterRedisUtil;
+import com.yaoyicloud.constant.enums.ModuleType;
 import com.yaoyicloud.dto.ReportDTO;
 import com.yaoyicloud.entity.ReportGenerationResult;
 import com.yaoyicloud.service.ReportUpdateService;
@@ -16,7 +17,6 @@ import lombok.extern.slf4j.Slf4j;
 import javax.servlet.http.HttpServletRequest;
 
 
-import java.util.Base64;
 import java.util.HashMap;
 
 import java.util.Map;
@@ -51,11 +51,11 @@ public class ReportUpdateController {
             HttpServletRequest request
     ) throws Exception {
         // 1. 解码文件并生成报告
-        byte[] fileBytes = Base64.getDecoder().decode(resource.getReportTempFile());
         String relationId = request.getHeader("relationId");
+        ModuleType moduleType = resource.getModuleType();
+
         ReportGenerationResult plusVersionCheckReport = reportService.createPlusVersionCheckReport(
                 resource.getData(),
-                fileBytes,
                 Long.valueOf(relationId),
                 resource.getModuleType()
         );

File diff suppressed because it is too large
+ 439 - 410
easier-report-biz/src/main/java/com/yaoyicloud/factory/BasicAbstractRender.java


+ 131 - 0
easier-report-biz/src/main/java/com/yaoyicloud/factory/CSOAbstractRender.java

@@ -0,0 +1,131 @@
+package com.yaoyicloud.factory;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+import com.deepoove.poi.data.DocxRenderData;
+import com.deepoove.poi.xwpf.NiceXWPFDocument;
+import org.apache.poi.xwpf.usermodel.BodyElementType;
+import org.apache.poi.xwpf.usermodel.IBodyElement;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import org.w3c.dom.Node;
+
+/**
+ * 抽象渲染器
+ *
+ */
+public abstract class CSOAbstractRender extends BasicAbstractRender {
+
+    /*
+     * 子模版路径
+     */
+    private String subTemplatePath = "D:\\excel\\subtemplate.docx";
+
+    public CSOAbstractRender(String cwd) {
+        super(cwd);
+    }
+
+    /**
+     * Docx 渲染
+     *
+     * 
+     * @param inputStream 模板内容
+     * @return 本地文件目录
+     * @throws IOException
+     */
+    @SuppressWarnings("checkstyle:ParameterNumber")
+    public String renderDocx(Map<String, Object> dataMap, InputStream inputStream,
+        ConfigureBuilder builder, String relationId, String moduleType)
+        throws IOException {
+        String resultPath = super.renderDocx(dataMap, inputStream, builder, relationId, moduleType);
+        Configure config = builder.build();
+        // 处理嵌套模板逻辑
+        if (moduleType.equals("PromotionDetails")) {
+            XWPFTemplate subTemplate = XWPFTemplate.compile(subTemplatePath, config).render(dataMap);
+            ByteArrayOutputStream nestOutput = new ByteArrayOutputStream();
+            subTemplate.write(nestOutput);
+            ByteArrayInputStream nestInput = new ByteArrayInputStream(nestOutput.toByteArray());
+            DocxRenderData docxRenderData = new DocxRenderData(nestInput);
+            dataMap.put("nestfile", docxRenderData);
+        }
+
+        NiceXWPFDocument xwpfDocument = new NiceXWPFDocument(new FileInputStream(new File(resultPath)));
+        List<XWPFTable> allTables = xwpfDocument.getAllTables();
+
+        int toDeleteLine = 0;
+        // 删除多余的表格
+        for (int i = 0; i < allTables.size(); i++) {
+            XWPFTable xwpfTable = allTables.get(i);
+            if (allTables.get(i).getRows().size() <= 1) {
+                Node domNode = xwpfTable.getCTTbl().getDomNode();
+                Node parentNode = domNode.getParentNode();
+                parentNode.removeChild(domNode);
+                toDeleteLine++;
+            }
+        }
+
+        // 删除空标题行
+        for (int i = xwpfDocument.getXWPFDocument().getBodyElements().size() - 1; i >= 0; i--) {
+            IBodyElement ele = xwpfDocument.getXWPFDocument().getBodyElements().get(i);
+            if (ele.getElementType().equals(BodyElementType.PARAGRAPH)) {
+                XWPFParagraph paragraph = (XWPFParagraph) ele;
+                if (paragraph.getText().contains("EMPTY")) {
+                    xwpfDocument.removeBodyElement(i);
+                    if (i - 1 < 0) {
+                        continue;
+                    }
+                    IBodyElement above = xwpfDocument.getXWPFDocument().getBodyElements().get(i - 1);
+                    if (!ele.getElementType().equals(BodyElementType.PARAGRAPH)) {
+                        continue;
+                    }
+                    XWPFParagraph paragraphAbove = (XWPFParagraph) above;
+                    if (paragraphAbove.getText().equals("")) {
+                        xwpfDocument.removeBodyElement(i - 1);
+                        i--;
+                    }
+                }
+            }
+        }
+        // ArrayList<String> templateDele = new ArrayList<>();
+        // for (Map.Entry<String, Object> entry : specialMap.entrySet()) {
+        // String key = entry.getKey();
+        // Object value = entry.getValue();
+        // if (value.equals("")) {
+        // templateDele.add(key);
+        // }
+        // }
+        // Map<String, String> keywordMap = new HashMap<>();
+        // keywordMap.put("suggestion", "建议");
+        // keywordMap.put("score", "分");
+        // keywordMap.put("riskSummary", "-");
+        // XWPFDocument doc = template.getXWPFDocument();
+        // List<XWPFTable> tables = doc.getTables();
+        // XWPFTable xwpfTable = tables.get(tables.size() - 1);
+        // for (int i = xwpfTable.getNumberOfRows() - 1; i >= 0; i--) {
+        // XWPFTableRow row = xwpfTable.getRow(i);
+        // StringBuilder rowText = new StringBuilder();
+        // for (XWPFTableCell cell : row.getTableCells()) {
+        // rowText.append(cell.getText());
+        // }
+        // for (String codeKeyword : templateDele) {
+        // String templateKeyword = keywordMap.get(codeKeyword);
+        // if (rowText.toString().contains(templateKeyword)) {
+        // xwpfTable.removeRow(i);
+        // break;
+        // }
+        // }
+        // }
+
+        return this.docxResultPath;
+    }
+
+}

+ 13 - 0
easier-report-biz/src/main/java/com/yaoyicloud/factory/DocxRenderer.java

@@ -0,0 +1,13 @@
+package com.yaoyicloud.factory;
+
+import com.deepoove.poi.config.ConfigureBuilder;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+public interface DocxRenderer {
+    String renderDocx(Map<String, Object> dataMap, InputStream inputStream,
+                      ConfigureBuilder builder, String relationId, String moduleType)
+                     throws IOException;
+}

+ 0 - 851
easier-report-biz/src/main/java/com/yaoyicloud/render/AbstractNewRender.java

@@ -1,851 +0,0 @@
-package com.yaoyicloud.render;
-
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-import javax.imageio.ImageIO;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.pdfbox.Loader;
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.rendering.PDFRenderer;
-import org.apache.poi.xwpf.usermodel.IBodyElement;
-import org.apache.poi.xwpf.usermodel.UnderlinePatterns;
-import org.apache.poi.xwpf.usermodel.XWPFDocument;
-import org.apache.poi.xwpf.usermodel.XWPFHyperlinkRun;
-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.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
-
-import com.deepoove.poi.XWPFTemplate;
-import com.deepoove.poi.config.Configure;
-import com.deepoove.poi.config.ConfigureBuilder;
-import com.deepoove.poi.data.ByteArrayPictureRenderData;
-import com.deepoove.poi.data.HyperlinkTextRenderData;
-import com.deepoove.poi.data.PictureType;
-import com.deepoove.poi.data.style.PictureStyle;
-import com.deepoove.poi.exception.RenderException;
-import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
-import com.deepoove.poi.policy.ParagraphRenderPolicy;
-import com.deepoove.poi.policy.PictureRenderPolicy;
-import com.deepoove.poi.policy.RenderPolicy;
-import com.deepoove.poi.policy.TextRenderPolicy;
-import com.deepoove.poi.template.ElementTemplate;
-import com.deepoove.poi.template.run.RunTemplate;
-import com.deepoove.poi.util.TableTools;
-import com.deepoove.poi.xwpf.BodyContainer;
-import com.deepoove.poi.xwpf.BodyContainerFactory;
-import com.yaoyicloud.tools.Util;
-
-import cn.hutool.core.lang.Pair;
-import cn.hutool.core.util.StrUtil;
-
-/**
- * 抽象渲染器
- *
- */
-public abstract class AbstractNewRender {
-
-    /*
-    * 导出文件位置
-    */
-    protected final String cwd;
-
-    /*
-     * Docx结果文件路径
-     */
-    protected String docxResultPath;
-
-    /*
-     * html结果文件路径
-     */
-    protected String htmlResultPath;
-
-    /*
-     * pdf结果文件路径
-     */
-    protected String pdfResultPath;
-
-    public AbstractNewRender(String cwd) {
-        this.cwd = cwd;
-    }
-
-    /**
-     * Docx 渲染
-     *
-     * 
-     * @param inputStream 模板内容
-     * @return 本地文件目录
-     * @throws IOException
-     */
-    @SuppressWarnings("checkstyle:ParameterNumber")
-    public final String renderDocx(Map<String, Object> dataMap, InputStream inputStream,
-        ConfigureBuilder builder, String relationId, String moduleType)
-        throws IOException {
-
-        // 注: 报告模板的模板变量按照json序列化的结果命名
-        String basicPath = this.getBasicPath();
-        String reportImagePath = this.getReportImagePath();
-        String label = relationId + "_" + moduleType;
-        // word导出位置
-        String reportTempWordFile = basicPath + "/" + cwd + "/" + label + ".docx";
-        // 新增:创建文件夹
-        File parentDir = new File(basicPath + "/" + cwd);
-        if (!parentDir.exists()) {
-            boolean created = parentDir.mkdirs();
-            if (!created) {
-                throw new IOException("无法创建文件保存目录");
-            }
-        }
-
-        Configure config = builder.build();
-        XWPFTemplate template =
-            XWPFTemplate.compile(inputStream, config).render(dataMap);
-
-//        ArrayList<String> templateDele = new ArrayList<>();
-//        for (Map.Entry<String, Object> entry : specialMap.entrySet()) {
-//            String key = entry.getKey();
-//            Object value = entry.getValue();
-//            if (value.equals("")) {
-//                templateDele.add(key);
-//            }
-//        }
-//        Map<String, String> keywordMap = new HashMap<>();
-//        keywordMap.put("suggestion", "建议");
-//        keywordMap.put("score", "分");
-//        keywordMap.put("riskSummary", "-");
-//        XWPFDocument doc = template.getXWPFDocument();
-//        List<XWPFTable> tables = doc.getTables();
-//        XWPFTable xwpfTable = tables.get(tables.size() - 1);
-//        for (int i = xwpfTable.getNumberOfRows() - 1; i >= 0; i--) {
-//            XWPFTableRow row = xwpfTable.getRow(i);
-//            StringBuilder rowText = new StringBuilder();
-//            for (XWPFTableCell cell : row.getTableCells()) {
-//                rowText.append(cell.getText());
-//            }
-//            for (String codeKeyword : templateDele) {
-//                String templateKeyword = keywordMap.get(codeKeyword);
-//                if (rowText.toString().contains(templateKeyword)) {
-//                    xwpfTable.removeRow(i);
-//                    break;
-//                }
-//            }
-//        }
-
-        template.writeToFile(reportTempWordFile);
-        template.close();
-
-        this.docxResultPath = reportTempWordFile;
-        return this.docxResultPath;
-    }
-
-    /**
-     * docx转换为pdf
-     *
-     * @return 本地文件目录
-     * @throws IOException
-     */
-    public final String fromDocxToPdf() throws IOException {
-        // 转换 docxResultPath 为 html
-        // 加工html
-        // 把 html 文件转成 pdf
-        fromDocxToHtml();
-        this.pdfResultPath = fromHtmlToPdf();
-        return this.pdfResultPath;
-    }
-
-    /**
-     * docx转换为Html
-     *
-     * @return 本地文件目录
-     * @throws IOException
-     */
-    public final String fromDocxToHtml() throws IOException {
-        // 转换 docxResultPath 为 html
-        // 加工html
-        this.htmlResultPath = cwd + "/1.html";
-        return this.htmlResultPath;
-    }
-
-    /**
-     * html转换为pdf
-     *
-     * @return 本地文件目录
-     * @throws IOException
-     */
-    public final String fromHtmlToPdf() throws IOException {
-        // 转换 htmlResultPath 为 pdf
-        this.pdfResultPath = cwd + "/1.pdf";
-        return this.pdfResultPath;
-    }
-
-    protected abstract String getBasicPath() throws IOException;
-
-    protected abstract String getReportImagePath();
-
-    /**
-     * 针对于protobuf传递来的数据处理
-     * 
-     * @return
-     */
-    protected RenderPolicy indicatorsRenderPolicyToProtobuf() {
-        return new LoopRowTableRenderPolicy() {
-            @Override
-            public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
-                // 获取模板中的变量如:[name]
-                ArrayList<String> strings = processElement(eleTemplate, data);
-                List<Map<String, Object>> processedData = null;
-                if (null != data && data instanceof Iterable) {
-                    processedData = (List<Map<String, Object>>) data;
-                    processedData.forEach(map -> {
-                        for (String string : strings) {
-                            Object o = map.get(string);
-                            if (null == o || "".equals(o)) {
-                                map.put(string, "-");
-                            }
-                        }
-                    });
-                }
-                // 调用父类渲染处理后的数据
-                super.render(eleTemplate, processedData, template);
-            }
-
-        };
-    }
-
-    @SuppressWarnings("checkstyle:NestedForDepth")
-    private ArrayList<String> processElement(ElementTemplate eleTemplate, Object data) {
-        RunTemplate runTemplate = (RunTemplate) eleTemplate;
-        XWPFRun run = runTemplate.getRun();
-        XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody();
-        XWPFTable table = tagCell.getTableRow().getTable();
-        StringBuilder textBuilder = new StringBuilder();
-
-        for (XWPFTableRow row : table.getRows()) {
-            // 遍历行中的每一个单元格
-            for (XWPFTableCell cell : row.getTableCells()) {
-                // 提取单元格内的所有文本(包含段落、Run 等)
-                for (XWPFParagraph para : cell.getParagraphs()) {
-                    for (XWPFRun r : para.getRuns()) {
-                        textBuilder.append(r.getText(0)); // 获取 Run 的文本
-                    }
-                }
-                textBuilder.append(" ");
-            }
-            textBuilder.append(" ");
-        }
-        ArrayList<String> strings = new ArrayList<>();
-        String string = textBuilder.toString();
-        String[] split = string.split(" ");
-        for (String s : split) {
-            Pattern pattern = Pattern.compile("\\[(.*?)\\]");
-            Matcher matcher = pattern.matcher(s);
-            while (matcher.find()) {
-                String contentInBracket = matcher.group(1);
-                strings.add(contentInBracket);
-            }
-        }
-        return strings;
-    }
-
-    /**
-     * 针对数据存在
-     * 
-     * @return
-     */
-    public RenderPolicy deleteLoopRowTableRenderPolicy() {
-        return new LoopRowTableRenderPolicy() {
-            @Override
-            public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
-                super.render(eleTemplate, data, template);
-                ArrayList<Map<String, String>> data1 = (ArrayList<Map<String, String>>) data;
-                if (CollectionUtils.isEmpty(data1)) {
-                    RunTemplate runTemplate = (RunTemplate) eleTemplate;
-                    XWPFRun run = runTemplate.getRun();
-                    XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody();
-                    XWPFTable table = tagCell.getTableRow().getTable();
-                    XWPFDocument doc = template.getXWPFDocument();
-
-                    int tablePos = -1;
-                    List<IBodyElement> bodyElements = doc.getBodyElements();
-                    for (int i = 0; i < bodyElements.size(); i++) {
-                        if (bodyElements.get(i) == table) {
-                            tablePos = i;
-                            break;
-                        }
-                    }
-                    if (tablePos >= 0) {
-                        // 4.1 先删除前一个段落(如果存在且是段落)
-                        int paragraphsToDelete = 2; // 要删除的段落数量
-                        for (int i = 0; i < paragraphsToDelete && tablePos - 1 >= 0; i++) {
-                            IBodyElement prevElement = doc.getBodyElements().get(tablePos - 1);
-                            if (prevElement instanceof XWPFParagraph) {
-                                doc.removeBodyElement(tablePos - 1);
-                                tablePos--; // 每删除一个段落,表格位置前移
-                            }
-                        }
-
-                        // 4.2 强制删除表格(通过操作底层 XML)
-                        doc.removeBodyElement(tablePos);
-                        doc.getTables();
-
-                    }
-                }
-            }
-            // // 辅助方法:在XML中找到表格的实际位置
-            // private int findTablePositionInXML(CTBody body, XWPFTable table) {
-            // List<CTP> paragraphs = body.getPList();
-            // List<CTTbl> tables = body.getTblList();
-            //
-            // for (int i = 0; i < tables.size(); i++) {
-            // if (tables.get(i) == table.getCTTbl()) {
-            // return i;
-            // }
-            // }
-            // return -1;
-            // }
-
-            // int xmlTblPos = findTablePositionInXML(body, table);
-            // if (xmlTblPos >= 0) {
-            // body.removeTbl(xmlTblPos);
-            // }
-        };
-    }
-
-    /**
-     * 针对于json格式全量传输数据的列表处理 将默认值null转为“-”
-     * 
-     * @return
-     */
-    protected RenderPolicy indicatorsRenderPolicy() {
-        return new LoopRowTableRenderPolicy() {
-            @Override
-            public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
-                // 处理数据中的null值
-                Object processedData = processData(data);
-                // 调用父类渲染处理后的数据
-                super.render(eleTemplate, processedData, template);
-            }
-
-            private Object processData(Object data) {
-                if (data == null) {
-                    return null;
-                }
-
-                if (data instanceof List) {
-                    // 处理List类型数据
-                    return ((List<?>) data).stream()
-                        .map(this::processItem)
-                        .collect(Collectors.toList());
-                }
-
-                return data;
-            }
-
-            private Object processItem(Object item) {
-                if (item == null) {
-                    return "-";
-                }
-
-                // 如果元素是Map,处理Map中的null值
-                if (item instanceof Map) {
-                    Map<?, ?> map = (Map<?, ?>) item;
-                    return map.entrySet().stream()
-                        .collect(Collectors.toMap(
-                            Map.Entry::getKey,
-                            e -> e.getValue() == null ? "-" : e.getValue()));
-                }
-
-                return item;
-            }
-        };
-    }
-
-    /**
-     * 这些render policy类都应当是共享的 重要设计假设: data的类型cast都可以建立在json通用反序列化后的基本类型基础上。
-     */
-    protected RenderPolicy pictureRenderPolicy() {
-        return new PictureRenderPolicy() {
-            @Override
-            public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
-                @SuppressWarnings("unchecked")
-                Map<String, Object> mpData = (Map<String, Object>) data;
-                String filename = mpData.getOrDefault("fileName", "").toString().trim();
-                String url = mpData.getOrDefault("fileUri", "").toString();
-                float targetWidth = 456.5f;
-
-                if (StrUtil.isBlank(filename)) {
-                    // uri render when no filename
-                    TextRenderPolicy.Helper.renderTextRun(((RunTemplate) eleTemplate).getRun(),
-                        new HyperlinkTextRenderData(url, url));
-                } else if (filename.endsWith(".pdf")) {
-                    // pdf render, replace data with bytestream
-                    PDDocument document = null;
-                    try {
-                        document = Loader.loadPDF(new URL(url).openStream().readAllBytes());
-                        PDFRenderer renderer = new PDFRenderer(document);
-
-                        XWPFRun run = ((RunTemplate) eleTemplate).getRun();
-                        BodyContainer bodyContainer = BodyContainerFactory.getBodyContainer(run);
-                        // 每页一张图片
-                        for (int i = 0; i < document.getNumberOfPages(); i++) {
-                            // pdf 转 jpeg
-                            BufferedImage image = renderer.renderImageWithDPI(i, 150);
-                            ByteArrayOutputStream stream = new ByteArrayOutputStream();
-                            ImageIO.write(image, "jpg", stream);
-
-                            // 准备docx元素
-                            if (i == 0) {
-                                run.setText("", 0);
-                            } else {
-                                run = bodyContainer.insertNewParagraph(run).createRun();
-                            }
-
-                            // 准备POI-TL数据
-                            ByteArrayPictureRenderData picData =
-                                new ByteArrayPictureRenderData(stream.toByteArray(), PictureType.JPEG);
-                            Pair<Integer, Integer> targetSize =
-                                calculateTargetSize(image.getWidth(), image.getHeight(), targetWidth);
-                            PictureStyle style = new PictureStyle();
-                            style.setWidth(targetSize.getKey());
-                            style.setHeight(targetSize.getValue());
-                            picData.setPictureStyle(style);
-                            Helper.renderPicture(run, picData);
-                        }
-                    } catch (Exception e) {
-                        throw new RenderException(
-                            "AttachmentRenderPolicy for " + eleTemplate + " error: " + e.getMessage(), e);
-                    } finally {
-                        if (document != null) {
-                            try {
-                                document.close();
-                            } catch (IOException e) {
-                                e.printStackTrace();
-                            }
-                        }
-                    }
-                } else {
-                    BufferedImage image = null;
-                    ByteArrayOutputStream stream = null;
-                    try {
-                        image = ImageIO.read(new URL(url));
-                        stream = new ByteArrayOutputStream();
-                        ImageIO.write(image, getFileExtension(filename), stream);
-                    } catch (IOException e) {
-                        throw new RenderException(
-                            "AttachmentRenderPolicy for " + eleTemplate + " error: " + e.getMessage(), e);
-                    }
-
-                    ByteArrayPictureRenderData picData =
-                        new ByteArrayPictureRenderData(stream.toByteArray(), PictureType.suggestFileType(filename));
-                    Pair<Integer, Integer> targetSize =
-                        calculateTargetSize(image.getWidth(), image.getHeight(), targetWidth);
-                    PictureStyle style = new PictureStyle();
-                    style.setWidth(targetSize.getKey());
-                    style.setHeight(targetSize.getValue());
-                    picData.setPictureStyle(style);
-                    super.render(eleTemplate, picData, template);
-                }
-            }
-
-            /**
-             * 计算目标尺寸(提取为内部方法)
-             */
-            private Pair<Integer, Integer> calculateTargetSize(int originWidth, int originHeight, float targetWidth) {
-                float targetHeight = (originHeight * targetWidth) / originWidth;
-                if (targetHeight > 645) {
-                    targetHeight = 645;
-                    targetWidth = (originWidth * targetHeight) / originHeight;
-                }
-                return Pair.of(Math.round(targetWidth), Math.round(targetHeight));
-            }
-
-            /**
-             * 获取文件扩展名
-             */
-            private String getFileExtension(String filename) {
-                int dotIndex = filename.lastIndexOf('.');
-                return dotIndex > 0 ? filename.substring(dotIndex + 1).toLowerCase() : "jpg";
-            }
-        };
-    }
-
-    /**
-     * 超链接列表策略
-     * 
-     * @return
-     */
-    protected RenderPolicy hyperlinkRenderPolicy() {
-        return new ParagraphRenderPolicy() {
-            @Override
-            public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
-                // 获取当前运行的
-                XWPFParagraph paragraph = ((RunTemplate) eleTemplate).getRun().getParagraph();
-                int pos = paragraph.getRuns().indexOf(((RunTemplate) eleTemplate).getRun());
-                paragraph.removeRun(pos);
-                paragraph.removeRun(pos);
-                if (data instanceof String) {
-                    XWPFHyperlinkRun hyperlinkRun = paragraph.createHyperlinkRun(data.toString());
-                    hyperlinkRun.setText(data.toString());
-                    hyperlinkRun.setColor("0000FF");
-                    hyperlinkRun.setUnderline(UnderlinePatterns.SINGLE);
-                    hyperlinkRun.setFontFamily("思源黑体 Medium");
-                    hyperlinkRun.setFontSize(10.5);
-
-                }
-            }
-        };
-    }
-
-    protected RenderPolicy getScoreRenderPolicy() {
-        RenderPolicy policy = new LoopRowTableRenderPolicy() {
-            @SuppressWarnings("checkstyle:NestedForDepth")
-            @Override
-            public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
-                // 检查数据是否为空
-                if (data == null || (data instanceof Collection && ((Collection<?>) data).isEmpty())) {
-                    // 数据为空时,删除整个表格
-                    // removeTemplateTable(eleTemplate, template);
-                    return;
-                }
-
-                super.render(eleTemplate, data, template);
-                XWPFDocument doc = template.getXWPFDocument();
-                for (XWPFTable table : doc.getTables()) {
-                    boolean isTargetTable = false;
-                    // 判断是否为目标表格:通过检查表格第一行是否包含货物明细相关表头关键词
-                    List<String> headerKeywords = List.of("删除");
-                    XWPFTableRow firstRow = table.getRow(0);
-                    if (firstRow != null) {
-                        for (XWPFTableCell cell : firstRow.getTableCells()) {
-                            for (XWPFParagraph para : cell.getParagraphs()) {
-                                for (XWPFRun run : para.getRuns()) {
-                                    String text = run.text().trim();
-                                    if (headerKeywords.contains(text)) {
-                                        isTargetTable = true;
-                                        break;
-                                    }
-                                }
-                                if (isTargetTable) {
-                                    break;
-                                }
-                            }
-                            if (isTargetTable) {
-                                break;
-                            }
-                        }
-                    }
-                    if (isTargetTable) {
-                        // 删除表头(假设表头是第一行)
-                        if (table.getRows().size() > 0) {
-                            table.removeRow(0);
-                        }
-                        // 合并第一列相同内容单元格并居中
-                        mergeAndCenterFirstColumn(table);
-                    }
-                }
-            }
-
-            private void mergeAndCenterFirstColumn(XWPFTable table) {
-                if (table.getNumberOfRows() < 2) {
-                    return;
-                }
-
-                int startRow = 0;
-                String currentValue = getCellText(table.getRow(0)).get(0);
-
-                for (int i = 1; i < table.getNumberOfRows(); i++) {
-                    List<String> rowValues = getCellText(table.getRow(i));
-                    if (rowValues.isEmpty()) {
-                        continue;
-                    }
-
-                    String firstCellValue = rowValues.get(0);
-                    if (firstCellValue.equals(currentValue)) {
-                        // 继续查找相同值的行
-                        continue;
-                    } else {
-                        // 合并从startRow到i-1行的第一列单元格
-                        if (i - 1 > startRow) {
-                            TableTools.mergeCellsVertically(table, 0, startRow, i - 1);
-                            // 设置合并后单元格内容居中
-                            setCellCenterAlignment(table.getRow(startRow).getCell(0));
-                        }
-                        startRow = i;
-                        currentValue = firstCellValue;
-                    }
-                }
-
-                // 处理最后一组相同值
-                if (table.getNumberOfRows() - 1 > startRow) {
-                    TableTools.mergeCellsVertically(table, 0, startRow, table.getNumberOfRows() - 1);
-                    setCellCenterAlignment(table.getRow(startRow).getCell(0));
-                }
-            }
-        };
-        return policy;
-    }
-
-    private List<String> getCellText(XWPFTableRow row) {
-        List<String> texts = new ArrayList<>();
-        if (row == null) {
-            return texts;
-        }
-        for (XWPFTableCell cell : row.getTableCells()) {
-            StringBuilder sb = new StringBuilder();
-            for (XWPFParagraph para : cell.getParagraphs()) {
-                for (XWPFRun run : para.getRuns()) {
-                    sb.append(run.text());
-                }
-            }
-            texts.add(sb.toString().trim());
-        }
-        return texts;
-    }
-
-    private void setCellCenterAlignment(XWPFTableCell cell) {
-        CTTc cttc = cell.getCTTc();
-        CTTcPr ctPr = cttc.addNewTcPr();
-        ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);
-    }
-
-    /**
-     * 这些render policy类都应当是共享的 重要设计假设: data的类型cast都可以建立在json通用反序列化后的基本类型基础上。
-     */
-    public class LoopColumnStaticTableRenderPolicy implements RenderPolicy {
-
-        private String prefix;
-        private String suffix;
-        private boolean onSameLine;
-        private boolean reverse;
-        private int valColIndex;
-
-        public LoopColumnStaticTableRenderPolicy() {
-            this(false);
-        }
-
-        public LoopColumnStaticTableRenderPolicy(boolean onSameLine) {
-            this("[", "]", onSameLine);
-        }
-
-        public LoopColumnStaticTableRenderPolicy(String prefix, String suffix) {
-            this(prefix, suffix, false);
-        }
-
-        public LoopColumnStaticTableRenderPolicy(String prefix, String suffix, boolean onSameLine) {
-            this(prefix, suffix, onSameLine, false);
-        }
-
-        public LoopColumnStaticTableRenderPolicy(String prefix, String suffix, boolean onSameLine, boolean reverse) {
-            this(prefix, suffix, onSameLine, false, 1);
-        }
-
-        public LoopColumnStaticTableRenderPolicy(String prefix, String suffix, boolean onSameLine, boolean reverse,
-            int valRowIndex) {
-            this.prefix = prefix;
-            this.suffix = suffix;
-            this.onSameLine = onSameLine;
-            this.reverse = reverse;
-            this.valColIndex = valRowIndex;
-        }
-
-        @Override
-        public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
-            RunTemplate runTemplate = (RunTemplate) eleTemplate;
-            XWPFRun run = runTemplate.getRun();
-            try {
-                if (!TableTools.isInsideTable(run)) {
-                    throw new IllegalStateException(
-                        "The template tag " + runTemplate.getSource() + " must be inside a table");
-                }
-                XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody();
-                XWPFTable table = tagCell.getTableRow().getTable();
-                run.setText("", 0);
-
-                int templateColIndex = getTemplateColIndex(tagCell);
-                // 模版变量列总是写在左边
-                int minIndex = templateColIndex;
-                int maxIndex = table.getRows().get(valColIndex).getTableCells().size() - 1;
-                int currIndex = reverse ? maxIndex : minIndex;
-                int indexDelta = reverse ? -1 : 1;
-
-                // 目前expression当作数据Map的key来对待,将来可以当作POI-TL变量一致化的处理
-                Map<Integer, String> idx2Expression = new HashMap<>();
-                for (int i = 0; i < table.getRows().size(); i++) {
-                    XWPFTableCell cell = table.getRows().get(i).getCell(templateColIndex);
-                    String text = cell.getText().trim();
-                    if (text.startsWith(prefix) && text.endsWith(suffix)) {
-                        idx2Expression.put(i, text.substring(1, text.length() - 1));
-                        cell.setText("");
-                    }
-                }
-
-                int rowSize = table.getRows().size();
-                @SuppressWarnings("unchecked")
-                List<Map<String, Object>> mpData = (List<Map<String, Object>>) data;
-
-                for (Map<String, Object> realData : mpData) {
-                    for (int i = 0; i < rowSize; i++) {
-                        if (!idx2Expression.containsKey(i)) {
-                            continue;
-                        }
-                        XWPFTableRow row = table.getRow(i);
-                        XWPFTableCell valueCell = row.getCell(currIndex);
-                        String valStr = realData.getOrDefault(idx2Expression.get(i), "-").toString();
-                        valueCell.setText(valStr);
-                    }
-                    currIndex += indexDelta;
-                }
-
-            } catch (Exception e) {
-                throw new RenderException("HackLoopTable for " + eleTemplate + "error: " + e.getMessage(), e);
-            }
-        }
-
-        private int getTemplateColIndex(XWPFTableCell tagCell) {
-            return onSameLine ? Util.getColIndexOfFirstRow(tagCell) : (Util.getColIndexOfFirstRow(tagCell) + 1);
-        }
-    }
-
-    public class LoopRowCutAndMergeFirstColTableRenderPolicy extends LoopRowTableRenderPolicy {
-
-        @Override
-        public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
-            RunTemplate runTemplate = (RunTemplate) eleTemplate;
-            XWPFRun run = runTemplate.getRun();
-            XWPFTable table = null;
-            try {
-                if (!TableTools.isInsideTable(run)) {
-                    throw new IllegalStateException(
-                        "The template tag " + runTemplate.getSource() + " must be inside a table");
-                }
-                // Reserve the first two rows
-                XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody();
-                table = tagCell.getTableRow().getTable();
-                for (int i = table.getNumberOfRows() - 1; i > 1; i--) {
-                    table.removeRow(i);
-                }
-            } catch (Exception e) {
-                throw new RenderException(
-                    "LoopRowCutAndMergeFirstColTable for " + eleTemplate + " error: " + e.getMessage(), e);
-            }
-
-            // in case data not sorted by rank
-            @SuppressWarnings("unchecked")
-            List<Map<String, Object>> mpData = (List<Map<String, Object>>) data;
-            mpData.sort((a, b) -> Integer.valueOf(a.getOrDefault("rank", "0").toString())
-                - Integer.valueOf(b.getOrDefault("rank", "0").toString()));
-
-            super.render(eleTemplate, data, template);
-
-            try {
-                // merge the first column
-                Util.mergeFirstNColSimple(table, 1, 0);
-            } catch (Exception e) {
-                throw new RenderException(
-                    "LoopRowCutAndMergeFirstColTable for " + eleTemplate + " error: " + e.getMessage(), e);
-            }
-        }
-    }
-
-    /**
-     * 财务信息计算平均值的策略
-     */
-    public class LoopRowIncludeStatisticsTableRenderPolicy extends LoopRowTableRenderPolicy {
-
-        private String valueTag;
-
-        public LoopRowIncludeStatisticsTableRenderPolicy(String valueTag) {
-            this.valueTag = valueTag;
-        }
-
-        @Override
-        public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
-
-            RunTemplate runTemplate = (RunTemplate) eleTemplate;
-            XWPFRun run = runTemplate.getRun();
-
-            XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody();
-            XWPFTable table = tagCell.getTableRow().getTable();
-
-            @SuppressWarnings("unchecked")
-            List<Map<String, Object>> mpData = (List<Map<String, Object>>) data;
-
-            for (Map<String, Object> row : mpData) {
-                @SuppressWarnings("unchecked")
-                List<String> values = (List<String>) row.get(valueTag);
-
-                // 检查是否有百分号结尾的值
-                boolean hasPercentage = values.stream().anyMatch(v -> v != null && v.endsWith("%"));
-
-                // 处理百分号并转换为数值
-                List<Double> processedValues = values.stream()
-                    .filter(Objects::nonNull)
-                    .map(v -> {
-                        if (v.endsWith("%")) {
-                            return v.substring(0, v.length() - 1);
-                        }
-                        return v;
-                    })
-                    .map(v -> {
-                        try {
-                            return Double.valueOf(v);
-                        } catch (NumberFormatException e) {
-                            return Double.NaN;
-                        }
-                    })
-                    .filter(v -> !Double.isNaN(v))
-                    .collect(Collectors.toList());
-
-                // 计算平均值并保留两位小数
-                double avg = processedValues.stream()
-                    .mapToDouble(Double::doubleValue)
-                    .average()
-                    .orElse(Double.NaN);
-
-                // 格式化结果
-                String formattedAvg;
-                if (Double.isNaN(avg)) {
-                    formattedAvg = "-"; // 处理无有效数据的情况
-                } else {
-                    DecimalFormat df = new DecimalFormat("#0.00"); // 保留两位小数
-                    formattedAvg = df.format(avg);
-                    if (hasPercentage) {
-                        formattedAvg += "%"; // 添加百分号
-                    }
-
-                }
-
-                row.put("avg", formattedAvg);
-            }
-
-            super.render(eleTemplate, data, template);
-            try {
-                // merge the first column
-                Util.mergeFirstNColSimple(table, 1, 0);
-            } catch (Exception e) {
-                throw new RenderException(
-                    "LoopRowCutAndMergeFirstColTable for " + eleTemplate + " error: " + e.getMessage(), e);
-            }
-        }
-    }
-}

+ 2 - 1
easier-report-biz/src/main/java/com/yaoyicloud/render/InterestConflictsRender.java

@@ -12,12 +12,13 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;
 
 @Slf4j
-public final class InterestConflictsRender extends AbstractRender {
+public final class InterestConflictsRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 1
easier-report-biz/src/main/java/com/yaoyicloud/render/ProjectInfoRender.java

@@ -17,6 +17,7 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 
+import com.yaoyicloud.factory.BasicAbstractRender;
 import com.yaoyicloud.message.FxyProtos;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -26,7 +27,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class ProjectInfoRender extends AbstractRender {
+public final class ProjectInfoRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 1
easier-report-biz/src/main/java/com/yaoyicloud/render/PublicRecordRender.java

@@ -19,6 +19,7 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 
+import com.yaoyicloud.factory.BasicAbstractRender;
 import com.yaoyicloud.message.FxyProtos;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -29,7 +30,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class PublicRecordRender extends AbstractRender {
+public final class PublicRecordRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
 private final CommonDataCache commonDataCache;
     public PublicRecordRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {

+ 2 - 1
easier-report-biz/src/main/java/com/yaoyicloud/render/ServiceProviderInfoRender.java

@@ -14,6 +14,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import com.yaoyicloud.message.FxyProtos;
 
 import lombok.extern.slf4j.Slf4j;
@@ -23,7 +24,7 @@ import lombok.extern.slf4j.Slf4j;
  *
  */
 @Slf4j
-public final class ServiceProviderInfoRender extends AbstractRender {
+public final class ServiceProviderInfoRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/association/AssociationAttachmentSectionRender.java

@@ -17,7 +17,7 @@ import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractRender;
+import com.yaoyicloud.factory.BasicAbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -27,7 +27,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class AssociationAttachmentSectionRender extends AbstractRender {
+public final class AssociationAttachmentSectionRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
     public AssociationAttachmentSectionRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/association/AssociationBasicInfoRender.java

@@ -16,7 +16,7 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractRender;
+import com.yaoyicloud.factory.BasicAbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -26,7 +26,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class AssociationBasicInfoRender extends AbstractRender {
+public final class AssociationBasicInfoRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
 private final CommonDataCache commonDataCache;
     public AssociationBasicInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {

+ 4 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/cso/EntAppendixRender.java

@@ -3,6 +3,8 @@ package com.yaoyicloud.render.cso;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Map;
+
+import com.yaoyicloud.factory.CSOAbstractRender;
 import org.apache.commons.collections4.MapUtils;
 
 import com.deepoove.poi.config.Configure;
@@ -11,11 +13,11 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
-import com.yaoyicloud.render.AbstractRender;
+
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
-public final class EntAppendixRender extends AbstractRender {
+public final class EntAppendixRender extends CSOAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/cso/EntHeaderSectionRender.java

@@ -12,14 +12,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
+import com.yaoyicloud.factory.CSOAbstractRender;
 import com.yaoyicloud.message.CSOProtos;
-import com.yaoyicloud.render.AbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 
 @Slf4j
-public final class EntHeaderSectionRender extends AbstractRender {
+public final class EntHeaderSectionRender extends CSOAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/cso/EntPromotionDetailsRender.java

@@ -4,6 +4,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Map;
 import com.deepoove.poi.policy.RenderPolicy;
+import com.yaoyicloud.factory.CSOAbstractRender;
 import org.apache.commons.collections4.MapUtils;
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
@@ -13,12 +14,11 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.message.CSOProtos;
-import com.yaoyicloud.render.AbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
-public final class EntPromotionDetailsRender extends AbstractRender {
+public final class EntPromotionDetailsRender extends CSOAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 4 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/cso/EntPromotionSummaryRender.java

@@ -9,6 +9,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
+
+import com.yaoyicloud.factory.CSOAbstractRender;
+
 import org.apache.commons.collections4.MapUtils;
 
 import com.deepoove.poi.config.Configure;
@@ -23,12 +26,11 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.message.CSOProtos;
-import com.yaoyicloud.render.AbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
-public final class EntPromotionSummaryRender extends AbstractRender {
+public final class EntPromotionSummaryRender extends CSOAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/foundation/FoundationAttachmentSectionRender.java

@@ -16,7 +16,7 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractRender;
+import com.yaoyicloud.factory.BasicAbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -26,7 +26,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class FoundationAttachmentSectionRender extends AbstractRender {
+public final class FoundationAttachmentSectionRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
     public FoundationAttachmentSectionRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/foundation/FoundationBasicInfoRender.java

@@ -17,7 +17,7 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractRender;
+import com.yaoyicloud.factory.BasicAbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -27,7 +27,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class FoundationBasicInfoRender extends AbstractRender {
+public final class FoundationBasicInfoRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/foundation/FoundationfinancialInfoRender.java

@@ -15,7 +15,7 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractRender;
+import com.yaoyicloud.factory.BasicAbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -27,7 +27,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class FoundationfinancialInfoRender extends AbstractRender {
+public final class FoundationfinancialInfoRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
     public FoundationfinancialInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/AntiBriberyRender.java

@@ -14,7 +14,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
-import com.yaoyicloud.render.AbstractRender;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 
@@ -23,7 +23,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class AntiBriberyRender extends AbstractRender {
+public final class AntiBriberyRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/AttachmentSectionRender.java

@@ -11,7 +11,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractRender;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import lombok.extern.slf4j.Slf4j;
 
 import com.deepoove.poi.config.Configure;
@@ -25,7 +25,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class AttachmentSectionRender extends AbstractRender {
+public final class AttachmentSectionRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
     public AttachmentSectionRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/BasicInfoRender.java

@@ -17,7 +17,7 @@ import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractRender;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 
@@ -26,7 +26,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class BasicInfoRender extends AbstractRender {
+public final class BasicInfoRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/FinancialInfoRender.java

@@ -11,7 +11,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractRender;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import lombok.extern.slf4j.Slf4j;
 
 import com.deepoove.poi.config.Configure;
@@ -26,7 +26,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class FinancialInfoRender extends AbstractRender {
+public final class FinancialInfoRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
     public FinancialInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/AntiBriberyNewRender.java

@@ -11,14 +11,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractNewRender;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 
 @Slf4j
-public final class AntiBriberyNewRender extends AbstractNewRender {
+public final class AntiBriberyNewRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 3 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/BasicInfoNewRender.java

@@ -14,8 +14,9 @@ import com.google.protobuf.Descriptors;
 import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractNewRender;
+
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -25,7 +26,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class BasicInfoNewRender extends AbstractNewRender {
+public final class BasicInfoNewRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 3 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/FinancialInfoNewRender.java

@@ -12,8 +12,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import com.yaoyicloud.message.FxyProtos;
-import com.yaoyicloud.render.AbstractNewRender;
+
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -23,7 +24,7 @@ import org.apache.commons.collections4.MapUtils;
  *
  */
 @Slf4j
-public final class FinancialInfoNewRender extends AbstractNewRender {
+public final class FinancialInfoNewRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 3 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/PublicRecordNewRender.java

@@ -14,13 +14,14 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
-import com.yaoyicloud.render.AbstractNewRender;
+
+import com.yaoyicloud.factory.BasicAbstractRender;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;
 
 @Slf4j
-public final class PublicRecordNewRender extends AbstractNewRender {
+public final class PublicRecordNewRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/TaxNewRender.java

@@ -7,6 +7,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import com.yaoyicloud.config.CommonDataCache;
+import com.yaoyicloud.factory.BasicAbstractRender;
 import com.yaoyicloud.message.FxyProtos;
 import org.apache.commons.collections4.CollectionUtils;
 
@@ -17,13 +18,12 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.FilerepoProperties;
-import com.yaoyicloud.render.AbstractNewRender;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 
 @Slf4j
-public final class TaxNewRender extends AbstractNewRender {
+public final class TaxNewRender extends BasicAbstractRender {
     private final FilerepoProperties filerepoProperties;
     private final CommonDataCache commonDataCache;
 

+ 1 - 1
easier-report-biz/src/main/java/com/yaoyicloud/service/ReportUpdateService.java

@@ -4,6 +4,7 @@ import com.yaoyicloud.constant.enums.ModuleType;
 
 import com.yaoyicloud.entity.ReportGenerationResult;
 
+
 /**
  * 报告服务
  *
@@ -15,7 +16,6 @@ public interface ReportUpdateService {
     @SuppressWarnings("checkstyle:ParameterNumber")
     ReportGenerationResult createPlusVersionCheckReport(
         String data,
-        byte[] templateBytes,
         Long relationId,
         ModuleType moduleType
     ) throws Exception;

+ 35 - 36
easier-report-biz/src/main/java/com/yaoyicloud/service/impl/ReportUpdateServiceImpl.java

@@ -1,18 +1,19 @@
 package com.yaoyicloud.service.impl;
 
-import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
-
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
-
 import cn.hutool.core.util.IdUtil;
+import com.amazonaws.services.s3.model.S3Object;
+import com.amazonaws.services.s3.model.S3ObjectInputStream;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.config.RelationCounterRedisUtil;
 import com.yaoyicloud.config.ReportPathManager;
 import com.yaoyicloud.constant.enums.ModuleType;
+import com.yaoyicloud.easier.common.file.core.FileProperties;
+import com.yaoyicloud.easier.common.file.core.FileTemplate;
 import com.yaoyicloud.entity.ReportGenerationResult;
 import com.yaoyicloud.render.InterestConflictsRender;
 import com.yaoyicloud.render.ProjectInfoRender;
@@ -51,22 +52,20 @@ public class ReportUpdateServiceImpl implements ReportUpdateService {
     private final ReportPathManager reportPathManager;
     private final CommonDataCache commonDataCache;
     private final RelationCounterRedisUtil relationCounterRedisUtil;
-
+    private final FileTemplate ossTemplate;
+    private final FileProperties properties;
     @SuppressWarnings("checkstyle:ReturnCount")
     @Override
-    public ReportGenerationResult createPlusVersionCheckReport(
-        String data, byte[] templateBytes, Long relationId,
-        ModuleType moduleType)
+    public ReportGenerationResult createPlusVersionCheckReport(String data,  Long relationId, ModuleType moduleType)
         throws Exception {
-        // 1. 将字节流模版写入临时文件
-        File tempTemplateFile = File.createTempFile("template_", ".docx");
-        try (FileOutputStream fos = new FileOutputStream(tempTemplateFile)) {
-            fos.write(templateBytes);
-        }
+
+        //oss 获取文件
+        S3Object s3Object = ossTemplate.getObject(properties.getBucketName(), moduleType.getType() + ".docx");
+        S3ObjectInputStream objectContent = s3Object.getObjectContent();
 
         Integer count = relationCounterRedisUtil.getCount(relationId);
         String sessionId = SESSION_MAP.get(relationId.toString());
-        String reportPath = processModule(moduleType, data, templateBytes, sessionId, relationId, count);
+        String reportPath = processModule(moduleType, data, objectContent, sessionId, relationId, count);
         // 处理指定模块
         reportPathManager.addReportPath(sessionId, reportPath);
         relationCounterRedisUtil.increment(relationId, 1);
@@ -100,81 +99,81 @@ public class ReportUpdateServiceImpl implements ReportUpdateService {
      */
     @SuppressWarnings("checkstyle:ParameterNumber")
     private String processModule(ModuleType moduleType, String data,
-        byte[] templateBytes, String sessionId, Long relationId, Integer counter) throws Exception {
+       InputStream inputStream, String sessionId, Long relationId, Integer counter) throws Exception {
         String reportPath;
 
         switch (moduleType) {
             case ANTIBRIBERY:
                 reportPath = new AntiBriberyRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
-            case ANTIBRIBERY_NEW:
+            case PLATFORM_COMPANY_ANTIBRIBERY_NEW:
                 reportPath = new AntiBriberyNewRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
+                    .renderDocx(data, inputStream, String.valueOf(relationId), counter);
                 break;
             case PLATFORM_COMPANY_BASICINFO:
                 reportPath = new BasicInfoRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
             case PLATFORM_COMPANY_ATTACHMENTSECTION:
                 reportPath = new AttachmentSectionRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
+                    .renderDocx(data, inputStream, String.valueOf(relationId), counter);
                 break;
             case ASSOCIATION_ATTACHMENTSECTION:
                 reportPath = new AssociationAttachmentSectionRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
             case FOUNDATION_ATTACHMENTSECTION:
                 reportPath = new FoundationAttachmentSectionRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
             case COMMON:
                 reportPath = new ServiceProviderInfoRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
+                    .renderDocx(data, inputStream, String.valueOf(relationId), counter);
                 break;
             case PLATFORM_COMPANY_FINANCIALINFO:
                 reportPath = new FinancialInfoRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
             case PLATFORM_COMPANY_FINANCIALINFO_NEW:
                 reportPath = new FinancialInfoNewRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
+                    .renderDocx(data, inputStream, String.valueOf(relationId), counter);
                 break;
             case FOUNDATION_FINANCIALINFO:
                 reportPath = new FoundationfinancialInfoRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
             case PUBLIC_RECORD:
                 reportPath = new PublicRecordRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
-            case PUBLIC_RECORD_NEW:
+            case PLATFORM_COMPANY_PUBLIC_RECORD_NEW:
                 reportPath = new PublicRecordNewRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
+                    .renderDocx(data, inputStream, String.valueOf(relationId), counter);
                 break;
             case PLATFORM_COMPANY_BASICINFO_NEW:
                 reportPath = new BasicInfoNewRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
+                    .renderDocx(data, inputStream, String.valueOf(relationId), counter);
                 break;
             case FOUNDATION_BASICINFO:
                 reportPath = new FoundationBasicInfoRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
             case ASSOCIATION_BASICINFO:
                 reportPath = new AssociationBasicInfoRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
             case PROJECT:
                 reportPath = new ProjectInfoRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
             case INTERESTCONFLICTS:
                 reportPath = new InterestConflictsRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId));
+                    .renderDocx(data, inputStream, String.valueOf(relationId));
                 break;
-            case TAX_NEW:
+            case PLATFORM_COMPANY_TAX_NEW:
                 reportPath = new TaxNewRender(sessionId, filerepoProperties, commonDataCache)
-                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
+                    .renderDocx(data, inputStream, String.valueOf(relationId), counter);
                 break;
             default:
                 throw new UnsupportedOperationException("Unsupported module type: " + moduleType);

Some files were not shown because too many files changed in this diff