Przeglądaj źródła

build 新增不合格项数展示

mamingxu 1 dzień temu
rodzic
commit
a220a94929
18 zmienionych plików z 200 dodań i 120 usunięć
  1. 1 0
      easier-report-biz/src/main/java/com/yaoyicloud/controller/ReportUpdateController.java
  2. 5 2
      easier-report-biz/src/main/java/com/yaoyicloud/factory/AbstractRender.java
  3. 6 1
      easier-report-biz/src/main/java/com/yaoyicloud/factory/CSOAbstractRender.java
  4. 1 1
      easier-report-biz/src/main/java/com/yaoyicloud/render/CoverRender.java
  5. 1 1
      easier-report-biz/src/main/java/com/yaoyicloud/render/cso/EntPromotionSummaryRender.java
  6. 5 1
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/BusinessRender.java
  7. 6 3
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/JudicialRender.java
  8. 5 3
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/OperationalRender.java
  9. 14 4
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/OtherRender.java
  10. 6 0
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/TaxRender.java
  11. 10 0
      easier-report-biz/src/main/java/com/yaoyicloud/service/CsoReportService.java
  12. 0 1
      easier-report-biz/src/main/java/com/yaoyicloud/service/ReportUpdateService.java
  13. 39 23
      easier-report-biz/src/main/java/com/yaoyicloud/service/impl/CsoReportServiceImpl.java
  14. 43 30
      easier-report-biz/src/main/java/com/yaoyicloud/service/impl/FxyReportUpdateServiceImpl.java
  15. 26 24
      easier-report-biz/src/main/java/com/yaoyicloud/template/AbstractReportExporter.java
  16. 28 25
      easier-report-biz/src/main/java/com/yaoyicloud/tools/OfficeUtil.java
  17. 2 0
      easier-report-biz/src/main/proto/fxy.proto
  18. 2 1
      easier-report-biz/src/main/resources/application.yml

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

@@ -62,6 +62,7 @@ public class ReportUpdateController {
             // word 转pdf
             commonDataCache.removeSessionData(relationId);
             relationCounterRedisUtil.delete(Long.valueOf(relationId));
+            SESSION_MAP.remove(relationId.toString());
             String pdfDocumentPath = docxUtil.wordToPdf(plusVersionCheckReport.getMergedReportPath());
             response.put("reportResult", pdfDocumentPath);
             response.put("isFinalReport", true);

+ 5 - 2
easier-report-biz/src/main/java/com/yaoyicloud/factory/AbstractRender.java

@@ -939,8 +939,11 @@ public abstract class AbstractRender {
                 if (data instanceof String) {
                     // 获取超链接URL(从数据中)
                     String url = data.toString();
-                    TextRenderPolicy.Helper.renderTextRun(((RunTemplate) eleTemplate).getRun(),
-                        new HyperlinkTextRenderData(url, url));
+                    if (StrUtil.isNotBlank(url)) {
+                        TextRenderPolicy.Helper.renderTextRun(((RunTemplate) eleTemplate).getRun(),
+                            new HyperlinkTextRenderData(url, url));
+                    }
+
                 }
                 if (data instanceof Map) {
                     Map<String, Object> mpData = (Map<String, Object>) data;

+ 6 - 1
easier-report-biz/src/main/java/com/yaoyicloud/factory/CSOAbstractRender.java

@@ -19,6 +19,7 @@ import com.deepoove.poi.policy.DynamicTableRenderPolicy;
 import com.deepoove.poi.xwpf.NiceXWPFDocument;
 import com.yaoyicloud.easier.common.file.core.FileProperties;
 import com.yaoyicloud.easier.common.file.core.FileTemplate;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.xwpf.usermodel.BodyElementType;
 import org.apache.poi.xwpf.usermodel.IBodyElement;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
@@ -33,6 +34,7 @@ import org.w3c.dom.Node;
  *
  */
 
+@Slf4j
 public abstract class CSOAbstractRender extends AbstractRender {
     private final FileTemplate ossTemplate;
     private final FileProperties properties;
@@ -55,7 +57,10 @@ public abstract class CSOAbstractRender extends AbstractRender {
         boolean sensitiveFlag = (Boolean) originalMap.get("sensitiveFlag"); // 处理数据脱敏
         Map<String, Object> sensitiveMap = this.sensitiveData(originalMap, sensitiveFlag);
         ConfigureBuilder builder = this.builder(relationId);
-        return this.csoCompile(sensitiveMap, inputStream, builder, relationId, moduleType);
+        String docxResultPath = this.csoCompile(sensitiveMap, inputStream, builder, relationId, moduleType);
+        log.info("文档导出成功,文档路径为: {}", docxResultPath);
+        return docxResultPath;
+
     }
 
     @SuppressWarnings({"checkstyle:ParameterNumber", "checkstyle:NestedIfDepth"})

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

@@ -15,8 +15,8 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.factory.FXYAbstractRender;
-import com.yaoyicloud.message.FxyProtos;
 
+import com.yaoyicloud.message.FxyProtos;
 import lombok.extern.slf4j.Slf4j;
 
 /**

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

@@ -84,9 +84,9 @@ public final class EntPromotionSummaryRender extends CSOAbstractRender {
         if (MapUtils.isNotEmpty(commonDataCacheData)) {
             data.putAll(commonDataCacheData);
         }
-        commonDataCacheData.put("sensitiveFlag", data.get("sensitiveFlag"));
         data.put("levelInteger", counter);
         fillDefaultValues(data);
+        commonDataCache.insertData(relationId, "userNameMap", data.get("userNameMap"));
         return data;
     }
 

+ 5 - 1
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/BusinessRender.java

@@ -17,8 +17,8 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.factory.FXYAbstractRender;
-import com.yaoyicloud.message.FxyProtos;
 
+import com.yaoyicloud.message.FxyProtos;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;
@@ -129,6 +129,10 @@ public final class BusinessRender extends FXYAbstractRender {
             platformExt.put("updateSource", "");
         }
 
+        Object basicInfoCheckResult = data.get("basicInfoCheckResult");
+        if (Objects.equals(basicInfoCheckResult, "-")) {
+            data.put("basicInfoCheckResult", "0");
+        }
         processJsonData(data, "sameaddress");
         processJsonData(data, "samecontactNumberDatas");
         processJsonData(data, "sameExecutivesNames");

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

@@ -4,6 +4,7 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
@@ -130,9 +131,11 @@ public final class JudicialRender extends FXYAbstractRender {
      */
     private void fillBasicDefaultValues(Map<String, Object> data) {
         Map<String, Object> summary = (Map<String, Object>) data.get("summary");
-        summary.putIfAbsent("riskSummary", "-");
-        summary.putIfAbsent("suggestion", "-");
-
+        summary.replaceAll((k, v) -> v.equals("") ? "-" : v);
+        Object riskModuleCheckResult = data.get("riskModuleCheckResult");
+        if (Objects.equals(riskModuleCheckResult, "-")) {
+            data.put("riskModuleCheckResult", "0");
+        }
         processJsonData(data, "dishonestPersons");
         processJsonData(data, "severeViolations");
     }

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

@@ -14,8 +14,8 @@ import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.factory.FXYAbstractRender;
-import com.yaoyicloud.message.FxyProtos;
 
+import com.yaoyicloud.message.FxyProtos;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;
@@ -109,8 +109,6 @@ public final class OperationalRender extends FXYAbstractRender {
             operationalMap.put("indicators", index.toString());
             index++;
             operationalMap.put("financialCheckDetails", index.toString());
-            index++;
-            operationalMap.put("moduleTail", index.toString());
         }
         index++;
         operationalMap.put("moduleTail", index.toString());
@@ -149,6 +147,10 @@ public final class OperationalRender extends FXYAbstractRender {
         if (Objects.equals(financialDataSeqFlagSource, "-")) {
             data.put("financialDataSeqFlagSource", "");
         }
+        Object financialInfoCheckResult = data.get("financialInfoCheckResult");
+        if (Objects.equals(financialInfoCheckResult, "-")) {
+            data.put("financialInfoCheckResult", "0");
+        }
 
         List<Map<String, Object>> financialDataSeq = (List<Map<String, Object>>) data.get("financialDataSeq");
         if (CollectionUtils.isNotEmpty(financialDataSeq)) {

+ 14 - 4
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/OtherRender.java

@@ -4,6 +4,8 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.deepoove.poi.policy.RenderPolicy;
@@ -52,8 +54,8 @@ public final class OtherRender extends FXYAbstractRender {
             .build();
         if (!mergedProto.hasSummary()) {
             mergedProto = mergedProto.toBuilder()
-                    .setSummary(FxyProtos.CheckSummary.getDefaultInstance())
-                    .build();
+                .setSummary(FxyProtos.CheckSummary.getDefaultInstance())
+                .build();
         }
         String completeJson = JsonFormat.printer()
             .includingDefaultValueFields()
@@ -86,6 +88,8 @@ public final class OtherRender extends FXYAbstractRender {
 
         data.put("questionnairs_flag", false);
 
+        data.put("relatedEntityImagesAltText", "未上传");
+
         List<Map<String, Object>> otherRiskChecks = (List<Map<String, Object>>) data.get("otherRiskChecks");
 
         if (CollectionUtils.isEmpty(otherRiskChecks)) {
@@ -101,6 +105,7 @@ public final class OtherRender extends FXYAbstractRender {
                         index++;
                         otherMap.put("relatedEntityImage", index.toString());
                         data.put("relatedEntityImage_flag", true);
+                        data.put("relatedEntityImagesAltText", " ");
                         break;
                     case "integrity_guarantee":
                         index++;
@@ -114,6 +119,9 @@ public final class OtherRender extends FXYAbstractRender {
                         Object o = data.get("questionnairs");
                         if (o != null) {
                             data.put("questionnairs_flag", true);
+                            data.put("questionnairsAltText", " ");
+                        } else {
+                            data.put("questionnairsAltText", "未上传");
                         }
 
                         otherMap.put("questionnaireItems", index.toString());
@@ -148,7 +156,6 @@ public final class OtherRender extends FXYAbstractRender {
         // 配置POI-TL渲染器
         ConfigureBuilder builder = Configure.builder();
         RenderPolicy indicatorsRenderPolicy = this.indicatorsRenderPolicyToProtobuf();
-        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
         builder.bind("questionnaireItems", indicatorsRenderPolicy);
         builder.bind("otherRiskChecks", indicatorsRenderPolicy);
         builder.addPlugin('^', this.pictureRenderPolicy());
@@ -162,7 +169,10 @@ public final class OtherRender extends FXYAbstractRender {
     private void fillDefaultValues(Map<String, Object> data) {
         Map<String, Object> summary = (Map<String, Object>) data.get("summary");
         summary.replaceAll((k, v) -> v.equals("") ? "-" : v);
-
+        Object riskModuleCheckResult = data.get("riskModuleCheckResult");
+        if (Objects.equals(riskModuleCheckResult, "-")) {
+            data.put("riskModuleCheckResult", "0");
+        }
         processJsonData(data, "questionnaireItems");
     }
 

+ 6 - 0
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/TaxRender.java

@@ -4,6 +4,8 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+
 import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.factory.FXYAbstractRender;
 import com.yaoyicloud.message.FxyProtos;
@@ -128,6 +130,10 @@ public final class TaxRender extends FXYAbstractRender {
         if (updateSource.equals("-")) {
             data.put("updateSource", "");
         }
+        Object riskModuleCheckResult = data.get("riskModuleCheckResult");
+        if (Objects.equals(riskModuleCheckResult, "-")) {
+            data.put("riskModuleCheckResult", "0");
+        }
         processJsonData(data, "taxPenalties");
     }
 }

+ 10 - 0
easier-report-biz/src/main/java/com/yaoyicloud/service/CsoReportService.java

@@ -6,6 +6,16 @@ import com.yaoyicloud.entity.ReportGenerationResult;
 
 public interface CsoReportService {
 
+    /**
+     * 创建CSO检查报告
+     *
+     * @param data 报告生成所需的业务数据(JSON格式字符串,包含检查项、结果等核心信息)
+     * @param relationId 关联ID,用于标识当前报告所属的业务对象 用于相同id下文件合并
+     * @param moduleType 模块类型枚举,指定当前报告对应的业务模块
+     * @param mergeflag 是否合并报告标识:true-需要将当前报告与同会话下其他报告合并;false-仅生成单独报告
+     * @return 报告生成结果对象,包含单独报告路径、合并报告路径(若合并)及合并状态
+     * @throws Exception 当报告生成过程中出现异常(如文件操作失败、数据格式错误等)时抛出
+     */
     ReportGenerationResult createCsoCheckReport(
             String data,
             Long relationId,

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

@@ -13,7 +13,6 @@ import com.yaoyicloud.entity.ReportGenerationResult;
  */
 public interface ReportUpdateService {
 
-    @SuppressWarnings("checkstyle:ParameterNumber")
     ReportGenerationResult createPlusVersionCheckReport(
         String data,
         Long relationId,

+ 39 - 23
easier-report-biz/src/main/java/com/yaoyicloud/service/impl/CsoReportServiceImpl.java

@@ -97,33 +97,49 @@ public class CsoReportServiceImpl implements CsoReportService {
     public ReportGenerationResult createCsoCheckReport(String data, Long relationId,
         ModuleType moduleType, Boolean mergeflag) throws Exception {
         // 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, objectContent, sessionId, relationId, count);
-        // 处理指定模块
-        reportPathManager.addReportPath(sessionId, reportPath);
-        relationCounterRedisUtil.increment(relationId, 1);
+        String reportPath;
         String mergedReportPath = null;
-        if (mergeflag) {
-            List<String> reportPaths = reportPathManager.removeSession(sessionId);
-            XWPFDocument targetDoc;
-            try (FileInputStream fis = new FileInputStream(reportPaths.get(0))) {
-                targetDoc = new XWPFDocument(fis);
-            }
-            List<XWPFDocument> sourceDocs = new ArrayList<>();
-            for (int i = 1; i < reportPaths.size(); i++) {
-                try (FileInputStream fis = new FileInputStream(reportPaths.get(i))) {
-                    sourceDocs.add(new XWPFDocument(fis));
+        try {
+            S3Object s3Object = ossTemplate.getObject(properties.getBucketName(), moduleType.getType() + ".docx");
+            S3ObjectInputStream objectContent = s3Object.getObjectContent();
+
+            Integer count = relationCounterRedisUtil.getCount(relationId);
+
+            reportPath = processModule(moduleType, data, objectContent, sessionId, relationId, count);
+            // 处理指定模块
+            reportPathManager.addReportPath(sessionId, reportPath);
+            relationCounterRedisUtil.increment(relationId, 1);
+
+            if (mergeflag) {
+                List<String> reportPaths = reportPathManager.removeSession(sessionId);
+                XWPFDocument targetDoc;
+                try (FileInputStream fis = new FileInputStream(reportPaths.get(0))) {
+                    targetDoc = new XWPFDocument(fis);
+                }
+                List<XWPFDocument> sourceDocs = new ArrayList<>();
+                for (int i = 1; i < reportPaths.size(); i++) {
+                    try (FileInputStream fis = new FileInputStream(reportPaths.get(i))) {
+                        sourceDocs.add(new XWPFDocument(fis));
+                    }
                 }
+                String label = relationId + "_" + IdUtil.fastSimpleUUID();
+                mergedReportPath = filerepoProperties.getBasePath() + "/" + label + ".docx";
+                // 调用合并方法
+                DocxUtil.mergeDocx(targetDoc, sourceDocs, mergedReportPath, relationId);
+            }
+        } catch (Exception e) {
+            log.error("生成CSO报告失败,开始清除相关缓存", e);
+
+            if (relationId != null) {
+                relationCounterRedisUtil.reset(relationId); // 清除计数缓存
+            }
+            if (sessionId != null) {
+                reportPathManager.removeSession(sessionId); // 清除会话对应的报告路径
+                SESSION_MAP.remove(relationId.toString()); // 清除会话映射
             }
-            String label = relationId + "_" + IdUtil.fastSimpleUUID();
-            mergedReportPath = filerepoProperties.getBasePath() + "/" + label + ".docx";
-            // 调用合并方法
-            DocxUtil.mergeDocx(targetDoc, sourceDocs, mergedReportPath, relationId);
+            // 重新抛出异常,不影响上层处理
+            throw e;
         }
 
         return new ReportGenerationResult(reportPath, mergedReportPath, mergeflag);

+ 43 - 30
easier-report-biz/src/main/java/com/yaoyicloud/service/impl/FxyReportUpdateServiceImpl.java

@@ -45,40 +45,53 @@ public class FxyReportUpdateServiceImpl implements ReportUpdateService {
 
     @SuppressWarnings("checkstyle:ReturnCount")
     @Override
-    public ReportGenerationResult createPlusVersionCheckReport(String data, Long relationId, ModuleType moduleType)
-        throws Exception {
-
-        // oss 获取文件
-        S3Object s3Object = ossTemplate.getObject(properties.getBucketName(), moduleType.getType() + ".docx");
-        S3ObjectInputStream objectContent = s3Object.getObjectContent();
-
-        Integer count = relationCounterRedisUtil.getCount(relationId);
+    public ReportGenerationResult createPlusVersionCheckReport(String data, Long relationId, ModuleType moduleType) {
         String sessionId = SESSION_MAP.get(relationId.toString());
-        // 处理指定模块
-        String reportPath = processModule(moduleType, data, objectContent, sessionId, relationId, count);
-
-        reportPathManager.addReportPath(sessionId, reportPath);
-        relationCounterRedisUtil.increment(relationId, 1);
-
+        String reportPath = null;
         String mergedReportPath = null;
-        boolean isLastModule = reportPath.contains("ATTACHMENTSECTION");
-        if (isLastModule) {
-            List<String> reportPaths = reportPathManager.removeSession(sessionId);
-            XWPFDocument targetDoc;
-            try (FileInputStream fis = new FileInputStream(reportPaths.get(0))) {
-                targetDoc = new XWPFDocument(fis);
-            }
-            List<XWPFDocument> sourceDocs = new ArrayList<>();
-            for (int i = 1; i < reportPaths.size(); i++) {
-                try (FileInputStream fis = new FileInputStream(reportPaths.get(i))) {
-                    sourceDocs.add(new XWPFDocument(fis));
+        boolean isLastModule = false;
+        try {
+            // oss 获取文件
+            S3Object s3Object = ossTemplate.getObject(properties.getBucketName(), moduleType.getType() + ".docx");
+            S3ObjectInputStream objectContent = s3Object.getObjectContent();
+
+            Integer count = relationCounterRedisUtil.getCount(relationId);
+
+            // 处理指定模块
+            reportPath = processModule(moduleType, data, objectContent, sessionId, relationId, count);
+
+            reportPathManager.addReportPath(sessionId, reportPath);
+            relationCounterRedisUtil.increment(relationId, 1);
+
+            isLastModule = reportPath.contains("ATTACHMENTSECTION");
+            if (isLastModule) {
+                List<String> reportPaths = reportPathManager.removeSession(sessionId);
+                XWPFDocument targetDoc;
+                try (FileInputStream fis = new FileInputStream(reportPaths.get(0))) {
+                    targetDoc = new XWPFDocument(fis);
+                }
+                List<XWPFDocument> sourceDocs = new ArrayList<>();
+                for (int i = 1; i < reportPaths.size(); i++) {
+                    try (FileInputStream fis = new FileInputStream(reportPaths.get(i))) {
+                        sourceDocs.add(new XWPFDocument(fis));
+                    }
                 }
+                String label = relationId + "_" + IdUtil.fastSimpleUUID();
+                mergedReportPath = filerepoProperties.getBasePath() + "/" + label + ".docx";
+                // 调用合并方法
+                DocxUtil.mergeDocx(targetDoc, sourceDocs, mergedReportPath, relationId);
+
             }
-            String label = relationId + "_" + IdUtil.fastSimpleUUID();
-            mergedReportPath = filerepoProperties.getBasePath() + "/" + label + ".docx";
-            // 调用合并方法
-            DocxUtil.mergeDocx(targetDoc, sourceDocs, mergedReportPath, relationId);
+        } catch (Exception e) {
+            log.error("生成FXY报告失败,开始清除相关缓存", e);
 
+            if (relationId != null) {
+                relationCounterRedisUtil.reset(relationId); // 清除计数缓存
+            }
+            if (sessionId != null) {
+                reportPathManager.removeSession(sessionId); // 清除会话对应的报告路径
+                SESSION_MAP.remove(relationId.toString()); // 清除会话映射
+            }
         }
 
         return new ReportGenerationResult(reportPath, mergedReportPath, isLastModule);
@@ -89,7 +102,7 @@ public class FxyReportUpdateServiceImpl implements ReportUpdateService {
      */
     @SuppressWarnings("checkstyle:ParameterNumber")
     private String processModule(ModuleType moduleType, String data,
-       InputStream inputStream, String sessionId, Long relationId, Integer counter) throws Exception {
+        InputStream inputStream, String sessionId, Long relationId, Integer counter) throws Exception {
         String reportPath = null;
         String type = moduleType.getType();
         switch (moduleType) {

+ 26 - 24
easier-report-biz/src/main/java/com/yaoyicloud/template/AbstractReportExporter.java

@@ -37,16 +37,18 @@ import com.deepoove.poi.config.ConfigureBuilder;
 import com.deepoove.poi.policy.RenderPolicy;
 import com.deepoove.poi.template.ElementTemplate;
 import com.deepoove.poi.util.TableTools;
+
 /**
  * 模板方法模式, 定义一个导出流程的骨架
  *
  * @author lixuesong
  * @date 2024/05/30
  */
-public abstract class AbstractReportExporter  implements ReportDataProcessor {
+public abstract class AbstractReportExporter implements ReportDataProcessor {
 
     /**
      * 将原始raw数据设置类型为poitl1.12版本超链接数据类型
+     * 
      * @param data raw数据集合
      * @param key 模版key
      */
@@ -59,6 +61,7 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
 
     /**
      * 将原始raw数据设置类型为poitl1.12版本图片列表数据类型
+     * 
      * @param data raw数据集合
      * @param key 模版key
      */
@@ -82,8 +85,8 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
             PictureType pictureType = determinePictureType(fileExtension);
 
             paragraph.addPicture(Pictures.ofBase64(base64, pictureType)
-                    .size(width, height)
-                    .create());
+                .size(width, height)
+                .create());
 
             paragraphImages.add(paragraph);
         }
@@ -95,6 +98,7 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
 
     /**
      * 图片格式
+     * 
      * @param fileExtension raw中的后缀
      * @return
      */
@@ -114,32 +118,33 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
             default -> PictureType.PNG;
         };
     }
+
     /**
      * 报告导出
+     * 
      * @param relationId
-     * @param data  数据
+     * @param data 数据
      * @param templatePath 模板位置
      * @param reportBastPath pdf导出文件位置
      * @return
      * @throws IOException
      */
     public final String exportReport(Map<String, Object> data, String templatePath,
-                                     String reportBastPath, Long relationId) throws Exception {
+        String reportBastPath, Long relationId) throws Exception {
 
         String basicPath = this.getBasicPath();
         String reportImagePath = this.getReportImagePath();
         String label = String.valueOf(relationId) + "_" + IdUtil.fastSimpleUUID();
-        //word导出位置
+        // word导出位置
         String reportTempWordFile = basicPath + "/" + label + ".docx";
         // 定义策略
         ConfigureBuilder builder = Configure.builder();
         this.bindConfigure(builder);
         // 渲染数据
         Map<String, Object> processedData = data.entrySet().stream()
-                .collect(Collectors.toMap(
-                        Map.Entry::getKey,
-                        entry -> entry.getValue() != null ? entry.getValue() : "-"
-                ));
+            .collect(Collectors.toMap(
+                Map.Entry::getKey,
+                entry -> entry.getValue() != null ? entry.getValue() : "-"));
         this.renderTemplate(reportTempWordFile, templatePath, builder, processedData);
         // word转pdf
         String html = OfficeUtil.convert(reportTempWordFile, reportImagePath);
@@ -165,7 +170,7 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
             System.err.println("写入 3.html 文件时发生错误: " + e.getMessage());
             e.printStackTrace();
         }
-        return OfficeUtil.convertHtmlToPdf(html2, reportBastPath, getFontPaths(), reportImagePath,  false);
+        return OfficeUtil.convertHtmlToPdf(html2, reportBastPath, getFontPaths(), reportImagePath, false);
     }
 
     protected abstract String getReportImagePath();
@@ -188,9 +193,7 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
      */
     protected abstract void bindConfigure(ConfigureBuilder builder);
 
-
-    protected  abstract  String imagePath();
-
+    protected abstract String imagePath();
 
     /**
      * 渲染数据
@@ -201,11 +204,10 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
      * @throws IOException io异常
      */
     protected abstract void renderTemplate(String reportTempWordFile, String templatePath, ConfigureBuilder builder,
-                                           Map<String, Object> data) throws IOException;
+        Map<String, Object> data) throws IOException;
 
     protected abstract String getBasicPath() throws IOException;
 
-
     protected RenderPolicy customHackLoopTableRenderPolicy() {
         RenderPolicy policy = new LoopRowTableRenderPolicy() {
             @Override
@@ -230,6 +232,7 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
         };
         return policy;
     }
+
     protected RenderPolicy indicatorsRenderPolicy() {
         return new LoopRowTableRenderPolicy() {
             @Override
@@ -248,8 +251,8 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
                 if (data instanceof List) {
                     // 处理List类型数据
                     return ((List<?>) data).stream()
-                            .map(this::processItem)
-                            .collect(Collectors.toList());
+                        .map(this::processItem)
+                        .collect(Collectors.toList());
                 }
 
                 return data;
@@ -264,10 +267,9 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
                 if (item instanceof Map) {
                     Map<?, ?> map = (Map<?, ?>) item;
                     return map.entrySet().stream()
-                            .collect(Collectors.toMap(
-                                    Map.Entry::getKey,
-                                    e -> e.getValue() == null ? "-" : e.getValue()
-                            ));
+                        .collect(Collectors.toMap(
+                            Map.Entry::getKey,
+                            e -> e.getValue() == null ? "-" : e.getValue()));
                 }
 
                 return item;
@@ -275,7 +277,6 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
         };
     }
 
-
     protected RenderPolicy getScoreRenderPolicy() {
         RenderPolicy policy = new LoopRowTableRenderPolicy() {
             @SuppressWarnings("checkstyle:NestedForDepth")
@@ -284,7 +285,7 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
                 // 检查数据是否为空
                 if (data == null || (data instanceof Collection && ((Collection<?>) data).isEmpty())) {
                     // 数据为空时,删除整个表格
-              //      removeTemplateTable(eleTemplate, template);
+                    // removeTemplateTable(eleTemplate, template);
                     return;
                 }
 
@@ -364,6 +365,7 @@ public abstract class AbstractReportExporter  implements ReportDataProcessor {
         };
         return policy;
     }
+
     private List<String> getCellText(XWPFTableRow row) {
         List<String> texts = new ArrayList<>();
         if (row == null) {

+ 28 - 25
easier-report-biz/src/main/java/com/yaoyicloud/tools/OfficeUtil.java

@@ -1,29 +1,5 @@
 package com.yaoyicloud.tools;
 
-import com.lowagie.text.Image;
-import com.lowagie.text.PageSize;
-import com.lowagie.text.pdf.BaseFont;
-import com.lowagie.text.pdf.PdfContentByte;
-import com.lowagie.text.pdf.PdfReader;
-import com.lowagie.text.pdf.PdfStamper;
-import com.lowagie.text.pdf.parser.PdfTextExtractor;
-import fr.opensagres.poi.xwpf.converter.core.FileURIResolver;
-import fr.opensagres.poi.xwpf.converter.core.ImageManager;
-import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;
-import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLOptions;
-import org.apache.poi.xwpf.usermodel.XWPFDocument;
-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.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-import org.jsoup.nodes.Element;
-import org.jsoup.nodes.Entities;
-import org.jsoup.select.Elements;
-import org.xhtmlrenderer.pdf.ITextFontResolver;
-import org.xhtmlrenderer.pdf.ITextRenderer;
 import java.awt.Color;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -43,6 +19,33 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+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.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.nodes.Entities;
+import org.jsoup.select.Elements;
+import org.xhtmlrenderer.pdf.ITextFontResolver;
+import org.xhtmlrenderer.pdf.ITextRenderer;
+
+import com.lowagie.text.Image;
+import com.lowagie.text.PageSize;
+import com.lowagie.text.pdf.BaseFont;
+import com.lowagie.text.pdf.PdfContentByte;
+import com.lowagie.text.pdf.PdfReader;
+import com.lowagie.text.pdf.PdfStamper;
+import com.lowagie.text.pdf.parser.PdfTextExtractor;
+
+import fr.opensagres.poi.xwpf.converter.core.FileURIResolver;
+import fr.opensagres.poi.xwpf.converter.core.ImageManager;
+import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;
+import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLOptions;
+
 public class OfficeUtil {
     private static Map<String, Integer> pageNumberMap = new LinkedHashMap<>();
 
@@ -384,7 +387,7 @@ public class OfficeUtil {
 
     /**
      * 添加目录
-     * 
+     *
      * @param doc
      */
     private static void addTableOfContents(Document doc) {

+ 2 - 0
easier-report-biz/src/main/proto/fxy.proto

@@ -211,6 +211,7 @@ message FinancialInfo {
   repeated CheckItemDetail businessRiskChecks = 20; //经营风险提示
   optional string financialInfo = 21; // 财务信息 是否授权
   optional string financialDataSeqFlagSource = 22; // 财务信息  重要财务数据来源
+  optional string financialInfoCheckResult = 23;  //经营风险提示
 
 }
 
@@ -313,5 +314,6 @@ message RiskModule{
   map<string, string>  taxPenalties = 14; //税务处罚情况
   repeated Attachment files = 15;  // 项目信息
   repeated Attachment questionnairs = 16;  // 反贿赂反腐败诚信保证问卷图片
+  optional string riskModuleCheckResult = 17; //风险提示
 
 }

+ 2 - 1
easier-report-biz/src/main/resources/application.yml

@@ -13,7 +13,8 @@ spring:
   redis:
     host: 127.0.0.1
     port: 6379
- #   password: 8F4tJuQEgAE7MZyX
+    #  password: 8F4tJuQEgAE7MZyX  # fxy测试密码
+    #  password: By2YR2hKhJdhVeEfMzdWDVrrmvpA  # cso生产本地redis密码
     password: 123456
     database: 10
   servlet: