Browse Source

build 新版报告平台公司 优化缓存map数据,优化接口入参数量

mamingxu 1 day ago
parent
commit
86c8600d46
26 changed files with 534 additions and 726 deletions
  1. 2 16
      easier-report-api/src/main/java/com/yaoyicloud/dto/ReportDTO.java
  2. 107 0
      easier-report-biz/src/main/java/com/yaoyicloud/config/CommonDataCache.java
  3. 76 0
      easier-report-biz/src/main/java/com/yaoyicloud/controller/CsoReportController.java
  4. 4 8
      easier-report-biz/src/main/java/com/yaoyicloud/controller/ReportUpdateController.java
  5. 9 9
      easier-report-biz/src/main/java/com/yaoyicloud/render/InterestConflictsRender.java
  6. 10 7
      easier-report-biz/src/main/java/com/yaoyicloud/render/ProjectInfoRender.java
  7. 16 123
      easier-report-biz/src/main/java/com/yaoyicloud/render/PublicRecordRender.java
  8. 34 13
      easier-report-biz/src/main/java/com/yaoyicloud/render/ServiceProviderInfoRender.java
  9. 10 5
      easier-report-biz/src/main/java/com/yaoyicloud/render/association/AssociationAttachmentSectionRender.java
  10. 9 7
      easier-report-biz/src/main/java/com/yaoyicloud/render/association/AssociationBasicInfoRender.java
  11. 9 5
      easier-report-biz/src/main/java/com/yaoyicloud/render/foundation/FoundationAttachmentSectionRender.java
  12. 10 6
      easier-report-biz/src/main/java/com/yaoyicloud/render/foundation/FoundationBasicInfoRender.java
  13. 10 6
      easier-report-biz/src/main/java/com/yaoyicloud/render/foundation/FoundationfinancialInfoRender.java
  14. 13 7
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/AntiBriberyRender.java
  15. 12 7
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/AttachmentSectionRender.java
  16. 12 6
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/BasicInfoRender.java
  17. 10 7
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/FinancialInfoRender.java
  18. 22 21
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/AntiBriberyNewRender.java
  19. 31 6
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/BasicInfoNewRender.java
  20. 18 10
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/FinancialInfoNewRender.java
  21. 18 134
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/PublicRecordNewRender.java
  22. 25 137
      easier-report-biz/src/main/java/com/yaoyicloud/render/platform/update/TaxNewRender.java
  23. 4 15
      easier-report-biz/src/main/java/com/yaoyicloud/service/ReportUpdateService.java
  24. 58 70
      easier-report-biz/src/main/java/com/yaoyicloud/service/impl/ReportUpdateServiceImpl.java
  25. 5 22
      easier-report-biz/src/main/proto/fxy.proto
  26. 0 79
      pom.xml

+ 2 - 16
easier-report-api/src/main/java/com/yaoyicloud/dto/ReportDTO.java

@@ -28,30 +28,18 @@ public class ReportDTO {
     @Data
     public static class OnCreatePlusVersionReport {
 
-
         @NotNull(message = "map数据必填")
         private String data;
 
         @NotNull(message = "模版必填")
         private String reportTempFile;
 
-        @NotNull(message = "导出pdf路径必填")
-        private String reportBastPath;
-
-        @NotNull(message = "reportType必填")
-        private ReportType reportType;
+        @NotNull(message = "relationId必填")
+        private String relationId;
 
         @NotNull(message = "moduleType必填")
         private ModuleType moduleType;
 
-        @NotNull(message = "租户名称必填")
-        private String tenantName;
-
-        @NotNull(message = "服务商名称")
-        private String name;
-
-        @NotNull(message = "标题等级")
-        private Integer levelCount;
 
     }
 
@@ -61,11 +49,9 @@ public class ReportDTO {
     @Data
     public static class OnCreateVersionReport {
 
-
         @NotNull(message = "map数据必填")
         private Map<String, Object> data;
 
-
         @NotNull(message = "模版必填")
         private String reportTempFile;
 

+ 107 - 0
easier-report-biz/src/main/java/com/yaoyicloud/config/CommonDataCache.java

@@ -0,0 +1,107 @@
+package com.yaoyicloud.config;
+
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+@Component
+public class CommonDataCache {
+
+    // relationId -> 通用数据映射
+    private final ConcurrentMap<String, ConcurrentMap<String, Object>> dataCache
+            = new ConcurrentHashMap<>();
+
+    /**
+     *
+     */
+    public void addData(String sessionId, Map<String, Object> data) {
+        if (data != null) {
+            // 使用putIfAbsent避免重复创建空Map
+            dataCache.putIfAbsent(sessionId, new ConcurrentHashMap<>());
+            // 直接替换整个数据Map
+            dataCache.get(sessionId).putAll(data);
+        }
+    }
+
+    /**
+     * 添加或更新单个通用数据项
+     */
+    public void addDataItem(String sessionId, String key, Object value) {
+        dataCache.computeIfAbsent(sessionId, k -> new ConcurrentHashMap<>())
+                .put(key, value);
+    }
+
+    /**
+     * 获取通用数据
+     */
+    public Map<String, Object> getData(String sessionId) {
+        ConcurrentMap<String, Object> sessionData = dataCache.get(sessionId);
+        return sessionData != null ? Collections.unmodifiableMap(sessionData) : Collections.emptyMap();
+    }
+
+    /**
+     * 获取通用数据项
+     */
+    public Object getDataItem(String sessionId, String key) {
+        ConcurrentMap<String, Object> sessionData = dataCache.get(sessionId);
+        return sessionData != null ? sessionData.get(key) : null;
+    }
+
+    /**
+     * 获取指定类型的通用数据项
+     */
+    @SuppressWarnings("unchecked")
+    public <T> T getDataItem(String sessionId, String key, Class<T> type) {
+        Object value = getDataItem(sessionId, key);
+        return type.isInstance(value) ? (T) value : null;
+    }
+
+    /**
+     * 移除指定session的通用数据
+     */
+    public Map<String, Object> removeSessionData(String sessionId) {
+        ConcurrentMap<String, Object> removed = dataCache.remove(sessionId);
+        return removed != null ? new HashMap<>(removed) : Collections.emptyMap();
+    }
+
+    /**
+     * 移除指定session中的某个数据项
+     */
+    public Object removeDataItem(String sessionId, String key) {
+        ConcurrentMap<String, Object> sessionData = dataCache.get(sessionId);
+        return sessionData != null ? sessionData.remove(key) : null;
+    }
+
+    /**
+     * 检查是否存在指定session的通用数据
+     */
+    public boolean hasSessionData(String sessionId) {
+        return dataCache.containsKey(sessionId);
+    }
+
+    /**
+     * 检查指定session中是否存在某个数据项
+     */
+    public boolean hasDataItem(String sessionId, String key) {
+        ConcurrentMap<String, Object> sessionData = dataCache.get(sessionId);
+        return sessionData != null && sessionData.containsKey(key);
+    }
+
+    /**
+     * 获取所有sessionId
+     */
+    public java.util.Set<String> getAllSessionIds() {
+        return dataCache.keySet();
+    }
+
+    /**
+     * 清空所有缓存数据
+     */
+    public void clear() {
+        dataCache.clear();
+    }
+}

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

@@ -0,0 +1,76 @@
+package com.yaoyicloud.controller;
+
+
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.yaoyicloud.annotation.EasierLog;
+import com.yaoyicloud.dto.ReportDTO;
+import com.yaoyicloud.service.ReportService;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+
+/**
+ * 报告控制器
+ *
+ * @author snows
+ * @date 2024/10/14
+ */
+@RestController
+@RequiredArgsConstructor
+@Slf4j
+public class CsoReportController {
+    private final ReportService reportService;
+    /**
+     * 创建Plus版本审核报告
+     *
+     * @param resource 请求参数
+     * @return {@link Boolean } 结果
+     */
+    @EasierLog("扬子江审核报告")
+    @PostMapping("/report/create-report-cso")
+    public Map<String, Object>
+    createPlusVersionCheckReport(@Validated @RequestBody ReportDTO.OnCreateVersionReport resource,
+                                 HttpServletRequest request) throws Exception {
+        byte[] fileBytes = Base64.getDecoder().decode(resource.getReportTempFile());
+
+
+        synchronized (this) {
+            String reportPath = reportService.createPlusVersionCheckReport(
+                    resource.getReportType(),
+                    resource.getData(),
+                    fileBytes,
+                    resource.getReportBastPath(),
+                    resource.getRelationId()
+            );
+            //把结果保存到session中 一个relationId一个session 这样就把多个结果都保存到一个session中,可以获取路径做拼接
+            //后续 session.removeAttribute清理数据。
+            HttpSession session = request.getSession();
+            String relationId = String.valueOf(resource.getRelationId());
+            @SuppressWarnings("unchecked")
+            List<String> reportPaths = (List<String>) session.getAttribute(relationId);
+
+            if (reportPaths == null) {
+                reportPaths = new ArrayList<>();
+                session.setAttribute(relationId, reportPaths);
+            }
+            Map<String, Object> response = new HashMap<>();
+            response.put("reportResult", reportPath);
+            response.put("sessionId", request.getSession().getId()); // Use the provided session ID
+            return response;
+        }
+    }
+}

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

@@ -2,6 +2,7 @@ package com.yaoyicloud.controller;
 
 
 import com.yaoyicloud.annotation.EasierLog;
+import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.ReportPathManager;
 import com.yaoyicloud.dto.ReportDTO;
 import com.yaoyicloud.entity.ReportGenerationResult;
@@ -36,6 +37,7 @@ import static com.yaoyicloud.config.SessionInterceptor.SESSION_MAP;
 public class ReportUpdateController {
     private final ReportUpdateService reportService;
     private final ReportPathManager reportPathManager;
+    private final CommonDataCache commonDataCache;
     /**
      * 创建Plus版本审核报告
      *
@@ -52,17 +54,10 @@ public class ReportUpdateController {
         byte[] fileBytes = Base64.getDecoder().decode(resource.getReportTempFile());
         String relationId = request.getHeader("relationId");
         ReportGenerationResult plusVersionCheckReport = reportService.createPlusVersionCheckReport(
-                resource.getReportType(),
                 resource.getData(),
                 fileBytes,
-                resource.getReportBastPath(),
                 Long.valueOf(relationId),
-                request,
-                resource.getModuleType(),
-                resource.getName(),
-                resource.getLevelCount(),
-                resource.getTenantName()
-
+                resource.getModuleType()
         );
         String sessionId = SESSION_MAP.get(relationId);
 
@@ -74,6 +69,7 @@ public class ReportUpdateController {
             response.put("reportResult", plusVersionCheckReport.getMergedReportPath());
             response.put("isFinalReport", true);
             reportPathManager.removeSession(sessionId);
+            commonDataCache.removeSessionData(sessionId);
         } else {
             response.put("reportResult", plusVersionCheckReport.getModulePath());
             response.put("isFinalReport", false);

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

@@ -2,7 +2,6 @@ package com.yaoyicloud.render;
 
 import java.io.IOException;
 
-
 import java.util.List;
 import java.util.Map;
 
@@ -10,21 +9,21 @@ import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 
-/**
- * BasicInfo渲染器
- *
- */
 @Slf4j
 public final class InterestConflictsRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
+    private final CommonDataCache commonDataCache;
 
-    public InterestConflictsRender(String cwd, FilerepoProperties filerepoProperties) {
+    public InterestConflictsRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -45,7 +44,7 @@ public final class InterestConflictsRender extends AbstractRender {
      * @return 本地文件目录
      * @throws IOException
      */
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent,
+    public String renderDocx(String info, byte[] templateFileContent,
         String relationId) throws IOException {
         log.info("开始渲染利益冲突报告模块,relationId: {}", relationId);
 
@@ -56,8 +55,9 @@ public final class InterestConflictsRender extends AbstractRender {
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Object> data = objectMapper.readValue(info, new TypeReference<Map<String, Object>>() {});
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
         fillDefaultValues(data);
         try {

+ 10 - 7
easier-report-biz/src/main/java/com/yaoyicloud/render/ProjectInfoRender.java

@@ -13,10 +13,12 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.Descriptors;
 
 import com.google.protobuf.util.JsonFormat;
+import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
-import com.yaoyicloud.message.FxyProtos;
 
+import com.yaoyicloud.message.FxyProtos;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * BasicInfo渲染器
@@ -25,10 +27,12 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class ProjectInfoRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
+    private final CommonDataCache commonDataCache;
 
-    public ProjectInfoRender(String cwd, FilerepoProperties filerepoProperties) {
+    public ProjectInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -49,7 +53,7 @@ public final class ProjectInfoRender extends AbstractRender {
      * @return 本地文件目录
      * @throws IOException
      */
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent,
+    public String renderDocx(String info, byte[] templateFileContent,
         String relationId) throws IOException {
         log.info("开始渲染项目信息报告模块,relationId: {}", relationId);
 
@@ -81,11 +85,10 @@ public final class ProjectInfoRender extends AbstractRender {
             data.putAll(newAddtionMap);
         }
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
-
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
-
         fillDefaultValues(data);
         try {
             // 渲染文档

+ 16 - 123
easier-report-biz/src/main/java/com/yaoyicloud/render/PublicRecordRender.java

@@ -6,25 +6,22 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
+
 
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.deepoove.poi.policy.RenderPolicy;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonProcessingException;
+
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.ser.std.StdSerializer;
-import com.google.protobuf.InvalidProtocolBufferException;
-import com.google.protobuf.MessageOrBuilder;
 import com.google.protobuf.util.JsonFormat;
+import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
-import com.yaoyicloud.message.FxyProtos.PublicRecord;
 
+import com.yaoyicloud.message.FxyProtos;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * PublicRecord渲染器
@@ -33,10 +30,11 @@ import org.apache.commons.collections4.CollectionUtils;
 @Slf4j
 public final class PublicRecordRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
-
-    public PublicRecordRender(String cwd, FilerepoProperties filerepoProperties) {
+private final CommonDataCache commonDataCache;
+    public PublicRecordRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -58,7 +56,7 @@ public final class PublicRecordRender extends AbstractRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent,
+    public String renderDocx(String info, byte[] templateFileContent,
         String relationId) throws IOException {
         log.info("开始渲染公共模块,relationId: {}", relationId);
 
@@ -72,10 +70,10 @@ public final class PublicRecordRender extends AbstractRender {
         builder.bind("taxPenalties", indicatorsRenderPolicy);
         builder.bind("severeViolations", indicatorsRenderPolicy);
 
-        PublicRecord.Builder basicInfoBuilder = PublicRecord.newBuilder();
+        FxyProtos.PublicRecord.Builder basicInfoBuilder = FxyProtos.PublicRecord.newBuilder();
         JsonFormat.parser().merge(info, basicInfoBuilder);
-        PublicRecord defaultInstance = PublicRecord.getDefaultInstance();
-        PublicRecord mergedProto = defaultInstance.toBuilder()
+        FxyProtos.PublicRecord defaultInstance = FxyProtos.PublicRecord.getDefaultInstance();
+        FxyProtos.PublicRecord mergedProto = defaultInstance.toBuilder()
             .mergeFrom(basicInfoBuilder.build())
             .build();
 
@@ -87,10 +85,11 @@ public final class PublicRecordRender extends AbstractRender {
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
-        }
         fillBasicDefaultValues(data);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
+        }
 
         try {
             // 渲染文档
@@ -212,111 +211,5 @@ public final class PublicRecordRender extends AbstractRender {
         }
     }
 
-    // /**
-    // * Docx 渲染
-    // *
-    // * @param info 数据
-    // * @param templateFileContent 模板内容
-    // * @return 本地文件目录
-    // * @throws IOException
-    // */
-    // public String renderDocx(PublicRecord info, Map<String, Object> addtionalMap, byte[] templateFileContent) throws IOException {
-    // // TODO: let mapper be package static
-    // ObjectMapper mapper = new ObjectMapper();
-    // SimpleModule module = new SimpleModule();
-    // module.addSerializer(new PublicRecordSerializer(PublicRecord.class));
-    // mapper.registerModule(module);
-    //
-    // String jsonStr = mapper.writeValueAsString(info);
-    //
-    // // 注: 报告模板的模板变量按照json序列化的结果命名
-    // // 注: 目前的实现假设:一个session对应一个cwd目录
-    // ConfigureBuilder builder = Configure.builder();
-    // builder.bind("dishonestPersons", new LoopRowTableRenderPolicy());
-    // builder.bind("businessAbnormals", new LoopRowTableRenderPolicy());
-    // builder.bind("penaltyRecords", new LoopRowTableRenderPolicy());
-    // builder.bind("taxPenalties", new LoopRowTableRenderPolicy());
-    // builder.bind("severeViolations", new LoopRowTableRenderPolicy());
-    // this.docxResultPath =
-    // this.renderDocx(jsonStr, addtionalMap, templateFileContent, builder,
-    // Paths.get(cwd, UUID.randomUUID().toString() + ".docx").toString());
-    // return this.docxResultPath;
-    // }
-
-    /*
-     * 通过序列化和反序列化
-     * 1. 进行默认显示规则的数据转换
-     * 2. 避免POI-TL处理模板面对复杂数据类型
-     */
-    public class PublicRecordSerializer extends StdSerializer<PublicRecord> {
-
-        public PublicRecordSerializer() {
-            this(null);
-        }
-
-        public PublicRecordSerializer(Class<PublicRecord> t) {
-            super(t);
-        }
-
-        /**
-         * 为了增加*Count的数值,定制了序列化方法。 TODO: 可能更简单的方法是使用POI-TL的Spring表达式能力
-         */
-        @Override
-        public void serialize(PublicRecord value, JsonGenerator jgen, SerializerProvider provider)
-            throws IOException, JsonProcessingException {
 
-            jgen.writeStartObject();
-
-            jgen.writeArrayFieldStart("dishonestPersons");
-            writeRawArray(
-                value.getDishonestPersonsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("dishonestPersonsCount", value.getDishonestPersonsCount());
-
-            jgen.writeArrayFieldStart("businessAbnormals");
-            writeRawArray(
-                value.getBusinessAbnormalsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("businessAbnormalsCount", value.getBusinessAbnormalsCount());
-
-            jgen.writeArrayFieldStart("penaltyRecords");
-            writeRawArray(
-                value.getPenaltyRecordsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("penaltyRecordsCount", value.getPenaltyRecordsCount());
-
-            jgen.writeArrayFieldStart("taxPenalties");
-            writeRawArray(
-                value.getTaxPenaltiesList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()), jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("taxPenaltiesCount", value.getTaxPenaltiesCount());
-
-            jgen.writeArrayFieldStart("severeViolations");
-            writeRawArray(
-                value.getSevereViolationsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("severeViolationsCount", value.getSevereViolationsCount());
-
-            jgen.writeRaw(", \"publicRecordSummary\": " + JsonFormat.printer().print(value.getPublicRecordSummary()));
-
-            jgen.writeEndObject();
-        }
-
-        private void writeRawArray(List<MessageOrBuilder> values, JsonGenerator jgen)
-            throws IOException, InvalidProtocolBufferException {
-            String comma = null;
-            for (MessageOrBuilder item : values) {
-                if (comma != null) {
-                    jgen.writeRaw(comma);
-                } else {
-                    comma = ",";
-                }
-                jgen.writeRaw(JsonFormat.printer().print(item));
-            }
-        }
-    }
 }

+ 34 - 13
easier-report-biz/src/main/java/com/yaoyicloud/render/platform/ServiceProviderInfoRender.java → easier-report-biz/src/main/java/com/yaoyicloud/render/ServiceProviderInfoRender.java

@@ -1,17 +1,22 @@
-package com.yaoyicloud.render.platform;
+package com.yaoyicloud.render;
 
 import java.io.IOException;
-
+import java.time.LocalDate;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.deepoove.poi.policy.RenderPolicy;
 import com.fasterxml.jackson.core.type.TypeReference;
 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.message.FxyProtos;
-import com.yaoyicloud.render.AbstractRender;
+
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -21,11 +26,14 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class ServiceProviderInfoRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
+    private final CommonDataCache commonDataCache;
 
-    public ServiceProviderInfoRender(String cwd, FilerepoProperties filerepoProperties) {
+    public ServiceProviderInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
+
     @Override
     protected String getBasicPath() throws IOException {
         return filerepoProperties.getBasePath();
@@ -36,7 +44,6 @@ public final class ServiceProviderInfoRender extends AbstractRender {
         return filerepoProperties.getReportImagePath();
     }
 
-
     /**
      * Docx 渲染
      *
@@ -46,7 +53,8 @@ public final class ServiceProviderInfoRender extends AbstractRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent,
+        String relationId,  AtomicInteger counter) throws IOException {
         log.info("开始渲染公共封面模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -58,31 +66,44 @@ public final class ServiceProviderInfoRender extends AbstractRender {
 
         FxyProtos.AuditResult defaultInstance = FxyProtos.AuditResult.getDefaultInstance();
         FxyProtos.AuditResult mergedProto = defaultInstance.toBuilder()
-                .mergeFrom(auditResultBuilder.build())
-                .build();
+            .mergeFrom(auditResultBuilder.build())
+            .build();
 
         String completeJson = JsonFormat.printer()
-                .includingDefaultValueFields()
-                .print(mergedProto);
+            .includingDefaultValueFields()
+            .print(mergedProto);
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
+        String tenantName = (String) data.get("tenantName");
+        String name = (String) data.get("serviceProviderName");
+        String type = (String) data.get("type") ;
+        String reportDate =  LocalDate.now().toString();
+        ConcurrentMap<String, Object> commonData = new ConcurrentHashMap<>();
+        commonData.put("tenantName", tenantName);
+        commonData.put("type", type);
+        commonData.put("reportDate", reportDate);
+        commonData.put("name", name);
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
-        }
+        commonDataCache.addData(relationId, commonData);
+        data.put("levelInteger", counter);
+        data.putAll(commonData);
         fillDefaultValues(data);
 
         try {
             // 渲染文档
             String resultPath = this.renderDocx(data, templateFileContent, builder, relationId, "serviceProviderInfo");
             log.info("渲染公共封面成功,文件路径: {}", resultPath);
+
+
+
             return resultPath;
         } catch (Exception e) {
             log.error("渲染公共封面失败,relationId: {}", relationId, e);
             throw new IOException("文档渲染失败", e);
         }
     }
+
     /**
      * 填充默认值,确保所有必要字段都存在
      */

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

@@ -12,12 +12,14 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.Descriptors;
 import com.google.protobuf.util.JsonFormat;
+import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
-import com.yaoyicloud.message.FxyProtos;
 
+import com.yaoyicloud.message.FxyProtos;
 import com.yaoyicloud.render.AbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * AttachmentSection渲染器
@@ -26,9 +28,11 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class AssociationAttachmentSectionRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
-    public AssociationAttachmentSectionRender(String cwd, FilerepoProperties filerepoProperties) {
+    private final CommonDataCache commonDataCache;
+    public AssociationAttachmentSectionRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
     @Override
     protected String getBasicPath() throws IOException {
@@ -49,7 +53,7 @@ public final class AssociationAttachmentSectionRender extends AbstractRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent, String relationId) throws IOException {
         log.info("开始渲染学协会附件模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -84,8 +88,9 @@ public final class AssociationAttachmentSectionRender extends AbstractRender {
         if (newAddtionMap != null) {
             data.putAll(newAddtionMap);
         }
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
 
         fillDefaultValues(data);

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

@@ -12,11 +12,13 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.InvalidProtocolBufferException;
 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 lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * BasicInfo渲染器
@@ -25,10 +27,11 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class AssociationBasicInfoRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
-
-    public AssociationBasicInfoRender(String cwd, FilerepoProperties filerepoProperties) {
+private final CommonDataCache commonDataCache;
+    public AssociationBasicInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -49,7 +52,7 @@ public final class AssociationBasicInfoRender extends AbstractRender {
      * @return 本地文件目录
      * @throws IOException
      */
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent,
+    public String renderDocx(String info, byte[] templateFileContent,
         String relationId) throws IOException {
         log.info("开始渲染学协会基础信息报告模块,relationId: {}", relationId);
 
@@ -75,11 +78,10 @@ public final class AssociationBasicInfoRender extends AbstractRender {
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
-
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
-
         fillBasicDefaultValues(data);
         try {
             // 渲染文档

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

@@ -12,11 +12,13 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.Descriptors;
 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 lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * AttachmentSection渲染器
@@ -25,9 +27,11 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class FoundationAttachmentSectionRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
-    public FoundationAttachmentSectionRender(String cwd, FilerepoProperties filerepoProperties) {
+    private final CommonDataCache commonDataCache;
+    public FoundationAttachmentSectionRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
     @Override
     protected String getBasicPath() throws IOException {
@@ -48,7 +52,7 @@ public final class FoundationAttachmentSectionRender extends AbstractRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent, String relationId) throws IOException {
         log.info("开始渲染基金会附件模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -83,10 +87,10 @@ public final class FoundationAttachmentSectionRender extends AbstractRender {
         if (newAddtionMap != null) {
             data.putAll(newAddtionMap);
         }
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
-
         fillDefaultValues(data);
         try {
             // 渲染文档

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

@@ -13,11 +13,13 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.InvalidProtocolBufferException;
 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 lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * BasicInfo渲染器
@@ -26,10 +28,11 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class FoundationBasicInfoRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
-
-    public FoundationBasicInfoRender(String cwd, FilerepoProperties filerepoProperties) {
+private final CommonDataCache commonDataCache;
+    public FoundationBasicInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -50,7 +53,7 @@ public final class FoundationBasicInfoRender extends AbstractRender {
      * @return 本地文件目录
      * @throws IOException
      */
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent,
+    public String renderDocx(String info, byte[] templateFileContent,
         String relationId) throws IOException {
         log.info("开始渲染基金会基础信息报告模块,relationId: {}", relationId);
 
@@ -77,8 +80,9 @@ public final class FoundationBasicInfoRender extends AbstractRender {
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
 
         fillBasicDefaultValues(data);
@@ -140,7 +144,7 @@ public final class FoundationBasicInfoRender extends AbstractRender {
 
         Object annualInspectionResult = data.get("annualInspectionResult");
         if (Objects.equals(annualInspectionResult, "-")) {
-            data.put("annualInspectionResult", "");
+            data.put("annualInspectionResult", "");
         }
     }
 

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

@@ -11,12 +11,14 @@ import com.deepoove.poi.config.ConfigureBuilder;
 import com.fasterxml.jackson.core.type.TypeReference;
 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.message.FxyProtos;
 import com.yaoyicloud.render.AbstractRender;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 
 
 /**
@@ -26,9 +28,11 @@ import org.apache.commons.collections4.CollectionUtils;
 @Slf4j
 public final class FoundationfinancialInfoRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
-    public FoundationfinancialInfoRender(String cwd, FilerepoProperties filerepoProperties) {
+    private final CommonDataCache commonDataCache;
+    public FoundationfinancialInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
     @Override
     protected String getBasicPath() throws IOException {
@@ -49,7 +53,7 @@ public final class FoundationfinancialInfoRender extends AbstractRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent, String relationId) throws IOException {
         log.info("开始渲染基金会财务模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -74,11 +78,11 @@ public final class FoundationfinancialInfoRender extends AbstractRender {
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
-        }
         fillBasicDefaultValues(data);
-
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
+        }
         try {
             // 渲染文档
             String resultPath = this.renderDocx(data, templateFileContent, builder, relationId, "financialInfo");

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

@@ -11,10 +11,11 @@ import com.deepoove.poi.config.ConfigureBuilder;
 import com.deepoove.poi.policy.RenderPolicy;
 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;
-
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * AntiBribery渲染器
@@ -23,11 +24,13 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class AntiBriberyRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
+    private final CommonDataCache commonDataCache;
 
     // 注入父类所需的 cwd 参数
-    public AntiBriberyRender(String cwd, FilerepoProperties filerepoProperties) {
+    public AntiBriberyRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -44,13 +47,13 @@ public final class AntiBriberyRender extends AbstractRender {
      * Docx 渲染
      *
      * @param info 数据
-     * @param addtionalMap 额外数据
+     * 
      * @param templateFileContent 模板内容
      * @param relationId 关联ID
      * @return 本地文件目录
      * @throws IOException
      */
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent, String relationId) throws IOException {
         log.info("开始渲染防贿赂报告,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -61,11 +64,14 @@ public final class AntiBriberyRender extends AbstractRender {
         // 解析数据
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Object> data = objectMapper.readValue(info, new TypeReference<Map<String, Object>>() {});
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
-        }
+
         fillDefaultValues(data);
         data.replaceAll((k, v) -> v == null ? "-" : v);
+        Map<String, Object> commonData = commonDataCache.getData(cwd);
+        if (MapUtils.isNotEmpty(commonData)) {
+            data.putAll(commonData);
+        }
+
         try {
             // 渲染文档
             String resultPath = this.renderDocx(data, templateFileContent, builder, relationId, "antiBribery");

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

@@ -5,10 +5,12 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 
 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.message.FxyProtos;
 import com.yaoyicloud.render.AbstractRender;
@@ -18,7 +20,7 @@ import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.google.protobuf.Descriptors;
 import com.google.protobuf.util.JsonFormat;
-import com.yaoyicloud.message.FxyProtos.AttachmentSection;
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * AttachmentSection渲染器
@@ -27,9 +29,11 @@ import com.yaoyicloud.message.FxyProtos.AttachmentSection;
 @Slf4j
 public final class AttachmentSectionRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
-    public AttachmentSectionRender(String cwd, FilerepoProperties filerepoProperties) {
+    private final CommonDataCache commonDataCache;
+    public AttachmentSectionRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
     @Override
     protected String getBasicPath() throws IOException {
@@ -50,7 +54,7 @@ public final class AttachmentSectionRender extends AbstractRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent, String relationId, AtomicInteger counter) throws IOException {
         log.info("开始渲染附件模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -58,7 +62,7 @@ public final class AttachmentSectionRender extends AbstractRender {
         builder.addPlugin('^',  this.pictureRenderPolicy());
         builder.addPlugin('`',  this.hyperlinkRenderPolicy());
 
-        AttachmentSection.Builder attachmentSection = AttachmentSection.newBuilder();
+        FxyProtos.AttachmentSection.Builder attachmentSection = FxyProtos.AttachmentSection.newBuilder();
         JsonFormat.parser().merge(info, attachmentSection);
 
         FxyProtos.AttachmentSection defaultInstance = FxyProtos.AttachmentSection.getDefaultInstance();
@@ -85,10 +89,11 @@ public final class AttachmentSectionRender extends AbstractRender {
         if (newAddtionMap != null) {
             data.putAll(newAddtionMap);
         }
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
-
+        data.put("levelInteger", counter);
         fillDefaultValues(data);
         try {
             // 渲染文档

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

@@ -12,11 +12,13 @@ import com.deepoove.poi.policy.RenderPolicy;
 import com.fasterxml.jackson.core.type.TypeReference;
 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.message.FxyProtos;
 import com.yaoyicloud.render.AbstractRender;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * BasicInfo渲染器
@@ -25,9 +27,12 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class BasicInfoRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
-    public BasicInfoRender(String cwd, FilerepoProperties filerepoProperties) {
+    private final CommonDataCache commonDataCache;
+
+    public BasicInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -48,7 +53,7 @@ public final class BasicInfoRender extends AbstractRender {
      * @return 本地文件目录
      * @throws IOException
      */
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent, String relationId) throws IOException {
         log.info("开始渲染基础信息报告模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -72,11 +77,12 @@ public final class BasicInfoRender extends AbstractRender {
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
-        }
-        fillBasicDefaultValues(data);
 
+        fillBasicDefaultValues(data);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
+        }
         try {
             // 渲染文档
             String resultPath = this.renderDocx(data, templateFileContent, builder, relationId, "basicInfo");

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

@@ -7,6 +7,7 @@ import java.util.Map;
 
 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.message.FxyProtos;
 import com.yaoyicloud.render.AbstractRender;
@@ -16,6 +17,7 @@ import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 
 import com.google.protobuf.util.JsonFormat;
+import org.apache.commons.collections4.MapUtils;
 
 
 /**
@@ -25,9 +27,11 @@ import com.google.protobuf.util.JsonFormat;
 @Slf4j
 public final class FinancialInfoRender extends AbstractRender {
     private final FilerepoProperties filerepoProperties;
-    public FinancialInfoRender(String cwd, FilerepoProperties filerepoProperties) {
+    private final CommonDataCache commonDataCache;
+    public FinancialInfoRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
     @Override
     protected String getBasicPath() throws IOException {
@@ -48,7 +52,7 @@ public final class FinancialInfoRender extends AbstractRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent, String relationId) throws IOException {
         log.info("开始渲染财务模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -72,12 +76,11 @@ public final class FinancialInfoRender extends AbstractRender {
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
-
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
-        }
         fillBasicDefaultValues(data);
-
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
+        }
         try {
             // 渲染文档
             String resultPath = this.renderDocx(data, templateFileContent, builder, relationId, "financialInfo");

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

@@ -2,6 +2,7 @@ package com.yaoyicloud.render.platform.update;
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
@@ -9,26 +10,24 @@ import com.deepoove.poi.policy.RenderPolicy;
 import com.fasterxml.jackson.core.type.TypeReference;
 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.message.FxyProtos;
 import com.yaoyicloud.render.AbstractNewRender;
 
-
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
-
-/**
- * AntiBribery渲染器
- *
- */
 @Slf4j
 public final class AntiBriberyNewRender extends AbstractNewRender {
     private final FilerepoProperties filerepoProperties;
+    private final CommonDataCache commonDataCache;
 
     // 注入父类所需的 cwd 参数
-    public AntiBriberyNewRender(String cwd, FilerepoProperties filerepoProperties) {
+    public AntiBriberyNewRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -45,13 +44,13 @@ public final class AntiBriberyNewRender extends AbstractNewRender {
      * Docx 渲染
      *
      * @param info 数据
-     * @param addtionalMap 额外数据
      * @param templateFileContent 模板内容
      * @param relationId 关联ID
      * @return 本地文件目录
      * @throws IOException
      */
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent, String relationId, AtomicInteger counter)
+        throws IOException {
         log.info("开始渲染其他风险报告模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -63,27 +62,29 @@ public final class AntiBriberyNewRender extends AbstractNewRender {
         builder.useSpringEL();
         // 解析数据
 
-        //通过默认protobuf实例来填充不存在的key
+        // 通过默认protobuf实例来填充不存在的key
         FxyProtos.AntiBribery.Builder basicInfoBuilder = FxyProtos.AntiBribery.newBuilder();
         JsonFormat.parser().merge(info, basicInfoBuilder);
 
         FxyProtos.AntiBribery defaultInstance = FxyProtos.AntiBribery.getDefaultInstance();
         FxyProtos.AntiBribery mergedProto = defaultInstance.toBuilder()
-                .mergeFrom(basicInfoBuilder.build())
-                .build();
+            .mergeFrom(basicInfoBuilder.build())
+            .build();
 
         String completeJson = JsonFormat.printer()
-                .includingDefaultValueFields()
-                .print(mergedProto);
+            .includingDefaultValueFields()
+            .print(mergedProto);
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
         fillDefaultValues(data);
-//        Map<String, Object> antiBriberySummary = (Map<String, Object>) data.get("antiBriberySummary");
-//        String riskSummary = (String) antiBriberySummary.get("riskSummary");
-//        antiBriberySummary.put("riskSummary", riskSummary == null || riskSummary.isEmpty() ? "-" : riskSummary);
+        data.put("levelInteger", counter);
+        // Map<String, Object> antiBriberySummary = (Map<String, Object>) data.get("antiBriberySummary");
+        // String riskSummary = (String) antiBriberySummary.get("riskSummary");
+        // antiBriberySummary.put("riskSummary", riskSummary == null || riskSummary.isEmpty() ? "-" : riskSummary);
 
         try {
             // 渲染文档
@@ -100,8 +101,8 @@ public final class AntiBriberyNewRender extends AbstractNewRender {
      * 填充默认值,确保所有必要字段都存在
      */
     private void fillDefaultValues(Map<String, Object> data) {
-        Map<String, Object> basicInfoSummary = (Map<String, Object>) data.get("basicInfoSummary");
-        basicInfoSummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
+        Map<String, Object> antiBriberySummary = (Map<String, Object>) data.get("antiBriberySummary");
+        antiBriberySummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
 
     }
 

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

@@ -1,19 +1,25 @@
 package com.yaoyicloud.render.platform.update;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.deepoove.poi.policy.RenderPolicy;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.protobuf.Descriptors;
 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.AbstractNewRender;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
 /**
  * BasicInfo渲染器
@@ -22,10 +28,12 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class BasicInfoNewRender extends AbstractNewRender {
     private final FilerepoProperties filerepoProperties;
+    private final CommonDataCache commonDataCache;
 
-    public BasicInfoNewRender(String cwd, FilerepoProperties filerepoProperties) {
+    public BasicInfoNewRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -46,8 +54,8 @@ public final class BasicInfoNewRender extends AbstractNewRender {
      * @return 本地文件目录
      * @throws IOException
      */
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent,
-        String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent,
+                             String relationId, AtomicInteger counter) throws IOException {
         log.info("开始渲染工商信息报告模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -71,13 +79,30 @@ public final class BasicInfoNewRender extends AbstractNewRender {
         String completeJson = JsonFormat.printer()
             .includingDefaultValueFields()
             .print(mergedProto);
+
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
+        Map<String, Object> newAddtionMap = new HashMap<>();
+        Descriptors.Descriptor descriptor = mergedProto.getDescriptorForType();
+        for (Descriptors.FieldDescriptor field : descriptor.getFields()) {
+            if (field.isRepeated()) {
+                List<?> li = (List<?>) mergedProto.getField(field);
+                if (li.size() == 0) {
+                    newAddtionMap.put(field.getName() + "AltText", "未上传");
+                }
+            }
+        }
+
+        if (newAddtionMap.size() > 0) {
+            data.putAll(newAddtionMap);
+        }
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
+        data.put("levelInteger", counter);
         fillBasicDefaultValues(data);
 //        Map<String, Object> basicInfoSummary = (Map<String, Object>) data.get("basicInfoSummary");
 //        basicInfoSummary.put("riskSummary",
@@ -98,7 +123,7 @@ public final class BasicInfoNewRender extends AbstractNewRender {
      * 填充默认值,确保所有必要字段都存在
      */
     private void fillBasicDefaultValues(Map<String, Object> data) {
-        Map<String, Object> basicInfoSummary = (Map<String, Object>) data.get("publicRecordSummary");
+        Map<String, Object> basicInfoSummary = (Map<String, Object>) data.get("basicInfoSummary");
         basicInfoSummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
         Map<String, Object> platformExt = (Map<String, Object>) data.get("platformExt");
         platformExt.replaceAll((k, v) -> v.equals("") ? "-" : v);

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

@@ -3,17 +3,20 @@ package com.yaoyicloud.render.platform.update;
 import java.io.IOException;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.fasterxml.jackson.core.type.TypeReference;
 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.message.FxyProtos;
 import com.yaoyicloud.render.AbstractNewRender;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
 
 /**
@@ -23,9 +26,11 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public final class FinancialInfoNewRender extends AbstractNewRender {
     private final FilerepoProperties filerepoProperties;
-    public FinancialInfoNewRender(String cwd, FilerepoProperties filerepoProperties) {
+    private final CommonDataCache commonDataCache;
+    public FinancialInfoNewRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
     @Override
     protected String getBasicPath() throws IOException {
@@ -46,7 +51,7 @@ public final class FinancialInfoNewRender extends AbstractNewRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent, String relationId, AtomicInteger counter) throws IOException {
         log.info("开始渲染财务模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -57,12 +62,12 @@ public final class FinancialInfoNewRender extends AbstractNewRender {
         builder.bind("financialDataSeq", new LoopColumnStaticTableRenderPolicy("[", "]", false, true, 2));
         builder.bind("financialCheckDetails", new LoopRowCutAndMergeFirstColTableRenderPolicy());
         builder.bind("businessRiskChecks", this.indicatorsRenderPolicyToProtobuf());
-        FxyProtos.FinancialInfo.Builder basicInfoBuilder = FxyProtos.FinancialInfo.newBuilder();
-        JsonFormat.parser().merge(info, basicInfoBuilder);
+        FxyProtos.FinancialInfo.Builder financialInfoBuilder = FxyProtos.FinancialInfo.newBuilder();
+        JsonFormat.parser().merge(info, financialInfoBuilder);
 
         FxyProtos.FinancialInfo defaultInstance = FxyProtos.FinancialInfo.getDefaultInstance();
         FxyProtos.FinancialInfo mergedProto = defaultInstance.toBuilder()
-                .mergeFrom(basicInfoBuilder.build())
+                .mergeFrom(financialInfoBuilder.build())
                 .build();
 
         String completeJson = JsonFormat.printer()
@@ -72,10 +77,13 @@ public final class FinancialInfoNewRender extends AbstractNewRender {
         Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
-        }
+
         fillBasicDefaultValues(data);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
+        }
+        data.put("levelInteger", counter);
 //        Map<String, Object> financialSummary = (Map<String, Object>) data.get("financialSummary");
 //        data.put("fiancescore", financialSummary.get("score"));
         try {
@@ -93,8 +101,8 @@ public final class FinancialInfoNewRender extends AbstractNewRender {
      */
     private void fillBasicDefaultValues(Map<String, Object> data) {
 
-        Map<String, Object> basicInfoSummary = (Map<String, Object>) data.get("financialSummary");
-        basicInfoSummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
+        Map<String, Object> financialSummary = (Map<String, Object>) data.get("financialSummary");
+        financialSummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
 
         Object certReceived = data.get("certReceived");
         if (Objects.equals(certReceived, "-")) {

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

@@ -5,39 +5,30 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.deepoove.poi.policy.RenderPolicy;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.ser.std.StdSerializer;
-import com.google.protobuf.InvalidProtocolBufferException;
-import com.google.protobuf.MessageOrBuilder;
-import com.google.protobuf.util.JsonFormat;
+import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
-import com.yaoyicloud.message.FxyProtos.PublicRecord;
-
 import com.yaoyicloud.render.AbstractNewRender;
-
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+
 
-/**
- * PublicRecord渲染器
- *
- */
 @Slf4j
 public final class PublicRecordNewRender extends AbstractNewRender {
     private final FilerepoProperties filerepoProperties;
+    private final CommonDataCache commonDataCache;
 
-    public PublicRecordNewRender(String cwd, FilerepoProperties filerepoProperties) {
+    public PublicRecordNewRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -59,8 +50,8 @@ public final class PublicRecordNewRender extends AbstractNewRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent,
-        String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent,
+                             String relationId, AtomicInteger counter) throws IOException {
         log.info("开始渲染司法风险模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -77,14 +68,16 @@ public final class PublicRecordNewRender extends AbstractNewRender {
         Map<String, Object> data = objectMapper.readValue(info, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
-        }
         fillBasicDefaultValues(data);
 
-        // Map<String, Object> publicRecordSummary = (Map<String, Object>) data.get("publicRecordSummary");
-        // publicRecordSummary.putIfAbsent("riskSummary", "-");
-        // publicRecordSummary.putIfAbsent("suggestion", "");
+        Map<String, Object> publicRecordSummary = (Map<String, Object>) data.get("publicRecordSummary");
+        publicRecordSummary.putIfAbsent("riskSummary", "-");
+        publicRecordSummary.putIfAbsent("suggestion", "-");
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
+        }
+        data.put("levelInteger", counter);
         try {
             // 渲染文档
             String resultPath =
@@ -101,8 +94,7 @@ public final class PublicRecordNewRender extends AbstractNewRender {
      * 填充默认值,确保所有必要字段都存在
      */
     private void fillBasicDefaultValues(Map<String, Object> data) {
-        Map<String, Object> basicInfoSummary = (Map<String, Object>) data.get("publicRecordSummary");
-        basicInfoSummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
+
         List<Map<String, Object>> dishonestPersons = (List<Map<String, Object>>) data.get("dishonestPersons");
         if (CollectionUtils.isEmpty(dishonestPersons)) {
             Map<String, Object> defaultDishonestPerson = new HashMap<>();
@@ -120,112 +112,4 @@ public final class PublicRecordNewRender extends AbstractNewRender {
             data.put("severeViolations", defaultSevereViolationList);
         }
     }
-
-    // /**
-    // * Docx 渲染
-    // *
-    // * @param info 数据
-    // * @param templateFileContent 模板内容
-    // * @return 本地文件目录
-    // * @throws IOException
-    // */
-    // public String renderDocx(PublicRecord info, Map<String, Object> addtionalMap, byte[] templateFileContent) throws IOException {
-    // // TODO: let mapper be package static
-    // ObjectMapper mapper = new ObjectMapper();
-    // SimpleModule module = new SimpleModule();
-    // module.addSerializer(new PublicRecordSerializer(PublicRecord.class));
-    // mapper.registerModule(module);
-    //
-    // String jsonStr = mapper.writeValueAsString(info);
-    //
-    // // 注: 报告模板的模板变量按照json序列化的结果命名
-    // // 注: 目前的实现假设:一个session对应一个cwd目录
-    // ConfigureBuilder builder = Configure.builder();
-    // builder.bind("dishonestPersons", new LoopRowTableRenderPolicy());
-    // builder.bind("businessAbnormals", new LoopRowTableRenderPolicy());
-    // builder.bind("penaltyRecords", new LoopRowTableRenderPolicy());
-    // builder.bind("taxPenalties", new LoopRowTableRenderPolicy());
-    // builder.bind("severeViolations", new LoopRowTableRenderPolicy());
-    // this.docxResultPath =
-    // this.renderDocx(jsonStr, addtionalMap, templateFileContent, builder,
-    // Paths.get(cwd, UUID.randomUUID().toString() + ".docx").toString());
-    // return this.docxResultPath;
-    // }
-
-    /*
-     * 通过序列化和反序列化
-     * 1. 进行默认显示规则的数据转换
-     * 2. 避免POI-TL处理模板面对复杂数据类型
-     */
-    public class PublicRecordSerializer extends StdSerializer<PublicRecord> {
-
-        public PublicRecordSerializer() {
-            this(null);
-        }
-
-        public PublicRecordSerializer(Class<PublicRecord> t) {
-            super(t);
-        }
-
-        /**
-         * 为了增加*Count的数值,定制了序列化方法。 TODO: 可能更简单的方法是使用POI-TL的Spring表达式能力
-         */
-        @Override
-        public void serialize(PublicRecord value, JsonGenerator jgen, SerializerProvider provider)
-            throws IOException, JsonProcessingException {
-
-            jgen.writeStartObject();
-
-            jgen.writeArrayFieldStart("dishonestPersons");
-            writeRawArray(
-                value.getDishonestPersonsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("dishonestPersonsCount", value.getDishonestPersonsCount());
-
-            jgen.writeArrayFieldStart("businessAbnormals");
-            writeRawArray(
-                value.getBusinessAbnormalsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("businessAbnormalsCount", value.getBusinessAbnormalsCount());
-
-            jgen.writeArrayFieldStart("penaltyRecords");
-            writeRawArray(
-                value.getPenaltyRecordsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("penaltyRecordsCount", value.getPenaltyRecordsCount());
-
-            jgen.writeArrayFieldStart("taxPenalties");
-            writeRawArray(
-                value.getTaxPenaltiesList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()), jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("taxPenaltiesCount", value.getTaxPenaltiesCount());
-
-            jgen.writeArrayFieldStart("severeViolations");
-            writeRawArray(
-                value.getSevereViolationsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("severeViolationsCount", value.getSevereViolationsCount());
-
-            jgen.writeRaw(", \"publicRecordSummary\": " + JsonFormat.printer().print(value.getPublicRecordSummary()));
-
-            jgen.writeEndObject();
-        }
-
-        private void writeRawArray(List<MessageOrBuilder> values, JsonGenerator jgen)
-            throws IOException, InvalidProtocolBufferException {
-            String comma = null;
-            for (MessageOrBuilder item : values) {
-                if (comma != null) {
-                    jgen.writeRaw(comma);
-                } else {
-                    comma = ",";
-                }
-                jgen.writeRaw(JsonFormat.printer().print(item));
-            }
-        }
-    }
 }

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

@@ -5,40 +5,33 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
+import java.util.concurrent.atomic.AtomicInteger;
 
+import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.message.FxyProtos;
 import org.apache.commons.collections4.CollectionUtils;
 
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
 import com.deepoove.poi.policy.RenderPolicy;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.ser.std.StdSerializer;
-import com.google.protobuf.InvalidProtocolBufferException;
-import com.google.protobuf.MessageOrBuilder;
 import com.google.protobuf.util.JsonFormat;
 import com.yaoyicloud.config.FilerepoProperties;
-import com.yaoyicloud.message.FxyProtos.PublicRecord;
 import com.yaoyicloud.render.AbstractNewRender;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 
-/**
- * PublicRecord渲染器
- *
- */
 @Slf4j
 public final class TaxNewRender extends AbstractNewRender {
     private final FilerepoProperties filerepoProperties;
+    private final CommonDataCache commonDataCache;
 
-    public TaxNewRender(String cwd, FilerepoProperties filerepoProperties) {
+    public TaxNewRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) {
         super(cwd);
         this.filerepoProperties = filerepoProperties;
+        this.commonDataCache = commonDataCache;
     }
 
     @Override
@@ -60,8 +53,8 @@ public final class TaxNewRender extends AbstractNewRender {
      * @throws IOException
      */
 
-    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent,
-        String relationId) throws IOException {
+    public String renderDocx(String info, byte[] templateFileContent,
+        String relationId, AtomicInteger count) throws IOException {
         log.info("开始渲染税务风险模块,relationId: {}", relationId);
 
         // 配置POI-TL渲染器
@@ -75,28 +68,30 @@ public final class TaxNewRender extends AbstractNewRender {
         JsonFormat.parser().merge(info, publicRecordBuilder);
         FxyProtos.PublicRecord defaultInstance = FxyProtos.PublicRecord.getDefaultInstance();
         FxyProtos.PublicRecord mergedProto = defaultInstance.toBuilder()
-                .mergeFrom(publicRecordBuilder.build())
-                .build();
+            .mergeFrom(publicRecordBuilder.build())
+            .build();
 
         String completeJson = JsonFormat.printer()
-                .includingDefaultValueFields()
-                .print(mergedProto);
+            .includingDefaultValueFields()
+            .print(mergedProto);
         ObjectMapper objectMapper = new ObjectMapper();
-        Map<String, Object> data = objectMapper.readValue(info, new TypeReference<Map<String, Object>>() {});
+        Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
         data.replaceAll((k, v) -> v.equals("") ? "-" : v);
 
-        if (addtionalMap != null) {
-            data.putAll(addtionalMap);
+        Map<String, Object> commonDataCacheData = commonDataCache.getData(relationId);
+        if (MapUtils.isNotEmpty(commonDataCacheData)) {
+            data.putAll(commonDataCacheData);
         }
-        fillBasicDefaultValues(data);
 
-//        Map<String, Object> publicRecordSummary = (Map<String, Object>) data.get("publicRecordSummary");
-//publicRecordSummary.putIfAbsent("riskSummary", "-");
-//publicRecordSummary.putIfAbsent("suggestion", "");
+        fillBasicDefaultValues(data);
+        data.put("levelInteger", count);
+        // Map<String, Object> publicRecordSummary = (Map<String, Object>) data.get("publicRecordSummary");
+        // publicRecordSummary.putIfAbsent("riskSummary", "-");
+        // publicRecordSummary.putIfAbsent("suggestion", "");
         try {
             // 渲染文档
             String resultPath =
-                this.renderDocx(data, templateFileContent, builder, relationId, "publicRecord");
+                this.renderDocx(data, templateFileContent, builder, relationId, "tax");
             log.info("渲染税务风险模块成功,文件路径: {}", resultPath);
             return resultPath;
         } catch (Exception e) {
@@ -109,8 +104,9 @@ public final class TaxNewRender extends AbstractNewRender {
      * 填充默认值,确保所有必要字段都存在
      */
     private void fillBasicDefaultValues(Map<String, Object> data) {
-        Map<String, Object> basicInfoSummary = (Map<String, Object>) data.get("publicRecordSummary");
-        basicInfoSummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
+        Map<String, Object> publicRecordSummary = (Map<String, Object>) data.get("publicRecordSummary");
+        publicRecordSummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
+
         List<Map<String, Object>> dishonestPersons = (List<Map<String, Object>>) data.get("dishonestPersons");
         if (CollectionUtils.isEmpty(dishonestPersons)) {
             Map<String, Object> defaultDishonestPerson = new HashMap<>();
@@ -128,112 +124,4 @@ public final class TaxNewRender extends AbstractNewRender {
             data.put("severeViolations", defaultSevereViolationList);
         }
     }
-
-    // /**
-    // * Docx 渲染
-    // *
-    // * @param info 数据
-    // * @param templateFileContent 模板内容
-    // * @return 本地文件目录
-    // * @throws IOException
-    // */
-    // public String renderDocx(PublicRecord info, Map<String, Object> addtionalMap, byte[] templateFileContent) throws IOException {
-    // // TODO: let mapper be package static
-    // ObjectMapper mapper = new ObjectMapper();
-    // SimpleModule module = new SimpleModule();
-    // module.addSerializer(new PublicRecordSerializer(PublicRecord.class));
-    // mapper.registerModule(module);
-    //
-    // String jsonStr = mapper.writeValueAsString(info);
-    //
-    // // 注: 报告模板的模板变量按照json序列化的结果命名
-    // // 注: 目前的实现假设:一个session对应一个cwd目录
-    // ConfigureBuilder builder = Configure.builder();
-    // builder.bind("dishonestPersons", new LoopRowTableRenderPolicy());
-    // builder.bind("businessAbnormals", new LoopRowTableRenderPolicy());
-    // builder.bind("penaltyRecords", new LoopRowTableRenderPolicy());
-    // builder.bind("taxPenalties", new LoopRowTableRenderPolicy());
-    // builder.bind("severeViolations", new LoopRowTableRenderPolicy());
-    // this.docxResultPath =
-    // this.renderDocx(jsonStr, addtionalMap, templateFileContent, builder,
-    // Paths.get(cwd, UUID.randomUUID().toString() + ".docx").toString());
-    // return this.docxResultPath;
-    // }
-
-    /*
-     * 通过序列化和反序列化
-     * 1. 进行默认显示规则的数据转换
-     * 2. 避免POI-TL处理模板面对复杂数据类型
-     */
-    public class PublicRecordSerializer extends StdSerializer<PublicRecord> {
-
-        public PublicRecordSerializer() {
-            this(null);
-        }
-
-        public PublicRecordSerializer(Class<PublicRecord> t) {
-            super(t);
-        }
-
-        /**
-         * 为了增加*Count的数值,定制了序列化方法。 TODO: 可能更简单的方法是使用POI-TL的Spring表达式能力
-         */
-        @Override
-        public void serialize(PublicRecord value, JsonGenerator jgen, SerializerProvider provider)
-            throws IOException, JsonProcessingException {
-
-            jgen.writeStartObject();
-
-            jgen.writeArrayFieldStart("dishonestPersons");
-            writeRawArray(
-                value.getDishonestPersonsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("dishonestPersonsCount", value.getDishonestPersonsCount());
-
-            jgen.writeArrayFieldStart("businessAbnormals");
-            writeRawArray(
-                value.getBusinessAbnormalsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("businessAbnormalsCount", value.getBusinessAbnormalsCount());
-
-            jgen.writeArrayFieldStart("penaltyRecords");
-            writeRawArray(
-                value.getPenaltyRecordsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("penaltyRecordsCount", value.getPenaltyRecordsCount());
-
-            jgen.writeArrayFieldStart("taxPenalties");
-            writeRawArray(
-                value.getTaxPenaltiesList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()), jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("taxPenaltiesCount", value.getTaxPenaltiesCount());
-
-            jgen.writeArrayFieldStart("severeViolations");
-            writeRawArray(
-                value.getSevereViolationsList().stream().map(o -> (MessageOrBuilder) o).collect(Collectors.toList()),
-                jgen);
-            jgen.writeEndArray();
-            jgen.writeNumberField("severeViolationsCount", value.getSevereViolationsCount());
-
-            jgen.writeRaw(", \"publicRecordSummary\": " + JsonFormat.printer().print(value.getPublicRecordSummary()));
-
-            jgen.writeEndObject();
-        }
-
-        private void writeRawArray(List<MessageOrBuilder> values, JsonGenerator jgen)
-            throws IOException, InvalidProtocolBufferException {
-            String comma = null;
-            for (MessageOrBuilder item : values) {
-                if (comma != null) {
-                    jgen.writeRaw(comma);
-                } else {
-                    comma = ",";
-                }
-                jgen.writeRaw(JsonFormat.printer().print(item));
-            }
-        }
-    }
 }

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

@@ -1,14 +1,11 @@
 package com.yaoyicloud.service;
 
-
 import com.yaoyicloud.constant.enums.ModuleType;
 import com.yaoyicloud.constant.enums.ReportType;
 import com.yaoyicloud.entity.ReportGenerationResult;
 
 import javax.servlet.http.HttpServletRequest;
 
-
-
 /**
  * 报告服务
  *
@@ -19,18 +16,10 @@ public interface ReportUpdateService {
 
     @SuppressWarnings("checkstyle:ParameterNumber")
     ReportGenerationResult createPlusVersionCheckReport(
-            ReportType reportType,
-            String data,
-            byte[] templateBytes,
-            String outputBasePath,
-            Long relationId,
-            HttpServletRequest request,
-            ModuleType moduleType,
-            String name,
-            Integer levelInteger,
-            String tenantName
+        String data,
+        byte[] templateBytes,
+        Long relationId,
+        ModuleType moduleType
     ) throws Exception;
 
-
-
 }

+ 58 - 70
easier-report-biz/src/main/java/com/yaoyicloud/service/impl/ReportUpdateServiceImpl.java

@@ -3,23 +3,24 @@ package com.yaoyicloud.service.impl;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import java.time.LocalDate;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import cn.hutool.core.util.IdUtil;
+import com.yaoyicloud.config.CommonDataCache;
 import com.yaoyicloud.config.FilerepoProperties;
 import com.yaoyicloud.config.ReportPathManager;
 import com.yaoyicloud.constant.enums.ModuleType;
-import com.yaoyicloud.constant.enums.ReportType;
 import com.yaoyicloud.entity.ReportGenerationResult;
 import com.yaoyicloud.render.InterestConflictsRender;
 import com.yaoyicloud.render.ProjectInfoRender;
 import com.yaoyicloud.render.PublicRecordRender;
 
+import com.yaoyicloud.render.ServiceProviderInfoRender;
 import com.yaoyicloud.render.association.AssociationAttachmentSectionRender;
 import com.yaoyicloud.render.foundation.FoundationAttachmentSectionRender;
 import com.yaoyicloud.render.foundation.FoundationfinancialInfoRender;
@@ -27,7 +28,6 @@ import com.yaoyicloud.render.platform.AntiBriberyRender;
 import com.yaoyicloud.render.platform.AttachmentSectionRender;
 import com.yaoyicloud.render.platform.BasicInfoRender;
 import com.yaoyicloud.render.platform.FinancialInfoRender;
-import com.yaoyicloud.render.platform.ServiceProviderInfoRender;
 import com.yaoyicloud.render.association.AssociationBasicInfoRender;
 import com.yaoyicloud.render.foundation.FoundationBasicInfoRender;
 import com.yaoyicloud.render.platform.update.AntiBriberyNewRender;
@@ -45,39 +45,24 @@ import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
-import javax.servlet.http.HttpServletRequest;
-
 import static com.yaoyicloud.config.SessionInterceptor.SESSION_MAP;
 
 @Slf4j
 @Service
 @RequiredArgsConstructor
 public class ReportUpdateServiceImpl implements ReportUpdateService {
+    // 使用ConcurrentHashMap存储relationId与计数器的映射
+    private final ConcurrentMap<Long, AtomicInteger> moduleCounters = new ConcurrentHashMap<>();
 
     private final FilerepoProperties filerepoProperties;
     private final ReportPathManager reportPathManager;
+    private final CommonDataCache commonDataCache;
 
-    /**
-     * 按配置项模块
-     * 
-     * @param reportType
-     * @param data
-     * @param templateBytes
-     * @param outputBasePath
-     * @param relationId
-     * @param request
-     * @param moduleType
-     * @param name
-     * @param level
-     * @param tenantName
-     * @return
-     * @throws Exception
-     */
     @SuppressWarnings("checkstyle:ReturnCount")
     @Override
     public ReportGenerationResult createPlusVersionCheckReport(
-        ReportType reportType, String data, byte[] templateBytes, String outputBasePath, Long relationId,
-        HttpServletRequest request, ModuleType moduleType, String name, Integer level, String tenantName)
+        String data, byte[] templateBytes, Long relationId,
+        ModuleType moduleType)
         throws Exception {
 
         // 1. 将字节流模版写入临时文件
@@ -85,18 +70,18 @@ public class ReportUpdateServiceImpl implements ReportUpdateService {
         try (FileOutputStream fos = new FileOutputStream(tempTemplateFile)) {
             fos.write(templateBytes);
         }
-        Map<String, Object> processedData = new HashMap<>();
-        processedData.put("reportDate", LocalDate.now().toString());
-        processedData.put("type", reportType.getDesc());
-        processedData.put("name", name);
-        processedData.put("tenantName", tenantName);
-        processedData.put("levelInteger", level);
 
+        // 获取或初始化计数器
+        AtomicInteger counter = moduleCounters.computeIfAbsent(
+            relationId,
+            k -> new AtomicInteger(1));
         String sessionId = SESSION_MAP.get(relationId.toString());
+        String reportPath = null;
 
+        reportPath = processModule(moduleType, data, templateBytes, sessionId, relationId, counter);
         // 处理指定模块
-        String reportPath = processModule(moduleType, data, processedData, templateBytes, sessionId, relationId);
         reportPathManager.addReportPath(sessionId, reportPath);
+        counter.incrementAndGet();
 
         String mergedReportPath = null;
         boolean isLastModule = reportPath.contains("attachmentSection");
@@ -117,6 +102,8 @@ public class ReportUpdateServiceImpl implements ReportUpdateService {
             mergedReportPath = filerepoProperties.getBasePath() + "/" + label + ".docx";
             // 调用合并方法
             DocxUtil.mergeDocx(targetDoc, sourceDocs, mergedReportPath, relationId);
+            // 清除缓存
+            moduleCounters.remove(relationId);
         }
 
         return new ReportGenerationResult(reportPath, mergedReportPath, isLastModule);
@@ -126,81 +113,82 @@ public class ReportUpdateServiceImpl implements ReportUpdateService {
      * 处理单个模块的报告生成
      */
     @SuppressWarnings("checkstyle:ParameterNumber")
-    private String processModule(ModuleType moduleType, String data, Map<String, Object> processedData,
-        byte[] templateBytes, String sessionId, Long relationId) throws Exception {
+    private String processModule(ModuleType moduleType, String data,
+        byte[] templateBytes, String sessionId, Long relationId, AtomicInteger counter) throws Exception {
         String reportPath;
+
         switch (moduleType) {
             case ANTIBRIBERY:
-                reportPath = new AntiBriberyRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new AntiBriberyRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case ANTIBRIBERY_NEW:
-                reportPath = new AntiBriberyNewRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new AntiBriberyNewRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
                 break;
             case PLATFORM_COMPANY_BASICINFO:
-                reportPath = new BasicInfoRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new BasicInfoRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case PLATFORM_COMPANY_ATTACHMENTSECTION:
-                reportPath = new AttachmentSectionRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new AttachmentSectionRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
                 break;
             case ASSOCIATION_ATTACHMENTSECTION:
-                reportPath = new AssociationAttachmentSectionRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new AssociationAttachmentSectionRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case FOUNDATION_ATTACHMENTSECTION:
-                reportPath = new FoundationAttachmentSectionRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new FoundationAttachmentSectionRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case COMMON:
-                reportPath = new ServiceProviderInfoRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new ServiceProviderInfoRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
                 break;
             case PLATFORM_COMPANY_FINANCIALINFO:
-                reportPath = new FinancialInfoRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new FinancialInfoRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case PLATFORM_COMPANY_FINANCIALINFO_NEW:
-                reportPath = new FinancialInfoNewRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new FinancialInfoNewRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
                 break;
             case FOUNDATION_FINANCIALINFO:
-                reportPath = new FoundationfinancialInfoRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new FoundationfinancialInfoRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case PUBLIC_RECORD:
-                reportPath = new PublicRecordRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new PublicRecordRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case PUBLIC_RECORD_NEW:
-                reportPath = new PublicRecordNewRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new PublicRecordNewRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
                 break;
             case PLATFORM_COMPANY_BASICINFO_NEW:
-                reportPath = new BasicInfoNewRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new BasicInfoNewRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
                 break;
             case FOUNDATION_BASICINFO:
-                reportPath = new FoundationBasicInfoRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new FoundationBasicInfoRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case ASSOCIATION_BASICINFO:
-                reportPath = new AssociationBasicInfoRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new AssociationBasicInfoRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case PROJECT:
-                reportPath = new ProjectInfoRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new ProjectInfoRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case INTERESTCONFLICTS:
-                reportPath = new InterestConflictsRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new InterestConflictsRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId));
                 break;
             case TAX_NEW:
-                reportPath = new TaxNewRender(sessionId, filerepoProperties)
-                    .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
+                reportPath = new TaxNewRender(sessionId, filerepoProperties, commonDataCache)
+                    .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
                 break;
             default:
                 throw new UnsupportedOperationException("Unsupported module type: " + moduleType);

+ 5 - 22
easier-report-biz/src/main/proto/fxy.proto

@@ -3,27 +3,6 @@ package fxy;
 option java_package = "com.yaoyicloud.message";
 option java_outer_classname = "FxyProtos";
 
-message AddressData{
-
-  // 企业名称
-  optional string name = 1;
-
-  // 成立日期
-  optional string startDate = 2;
-
-  // 企业法人
-  optional string operName = 3;
-
-  // 税号
-  optional string creditNo = 4;
-
-  // 注册资本
-  optional string regCapiDesc = 5;
-
-  // 企业状态
-  optional string status = 6;
-
-}
 
 message ServiceProviderInfo {
   optional string name = 1; // ${服务商信息:服务商名称}
@@ -48,7 +27,8 @@ message CheckItemDetail {
 message CheckItemScore {
   optional string category = 1;
   optional string itemName = 2;
-  optional int64 score = 3;
+ // optional int64 score = 3;
+  optional string score = 4;
 }
 
 message CheckSummary {
@@ -70,6 +50,9 @@ message AuditResult {
   repeated CheckItemScore checkItemScores = 8;
 
   //  optional string reportDate = 11; // ${服务商信息:报告日期}
+
+  //通用数据
+  optional string type =12; //服务商类型
 }
 
 message SuperiorAuthority {// 直属机关

+ 0 - 79
pom.xml

@@ -275,84 +275,5 @@
         </pluginRepository>
     </pluginRepositories>
 
-    <profiles>
-        <!-- 默认环境 -->
-        <profile>
-            <id>loc</id>
-            <activation>
-                <activeByDefault>true</activeByDefault>
-            </activation>
-            <properties>
-                <profiles.active>loc</profiles.active>
-                <nacos.username>nacos</nacos.username>
-                <nacos.password>nacos</nacos.password>
-                <nacos.server-addr>127.0.0.1:8848</nacos.server-addr>
-                <nacos.namespace>f9b40f1d-c7e6-4be2-b0bc-f08375368dcb</nacos.namespace>
-                <profiles.gateway.port>14010</profiles.gateway.port>
-                <profiles.auth.port>14020</profiles.auth.port>
-                <profiles.workspace.biz.port>14030</profiles.workspace.biz.port>
-                <profiles.filerepo.biz.port>14050</profiles.filerepo.biz.port>
-                <profiles.warehouse.biz.port>14080</profiles.warehouse.biz.port>
-                <profiles.quartz.biz.port>14090</profiles.quartz.biz.port>
-                <profiles.report.biz.port>14070</profiles.report.biz.port>
-            </properties>
-        </profile>
-
-        <profile>
-            <id>pre</id>
-            <properties>
-                <profiles.active>pre</profiles.active>
-                <nacos.username>nacos</nacos.username>
-                <nacos.password>n1a2c3o4s5</nacos.password>
-                <nacos.server-addr>nacos2.yaoyi.net:57260</nacos.server-addr>
-                <nacos.namespace>ef23465c-e198-4ada-a3f2-88e014c69a3f</nacos.namespace>
-                <profiles.gateway.port>14010</profiles.gateway.port>
-                <profiles.auth.port>14020</profiles.auth.port>
-                <profiles.workspace.biz.port>14030</profiles.workspace.biz.port>
-                <profiles.filerepo.biz.port>14050</profiles.filerepo.biz.port>
-                <profiles.warehouse.biz.port>14080</profiles.warehouse.biz.port>
-                <profiles.quartz.biz.port>14090</profiles.quartz.biz.port>
-                <profiles.report.biz.port>14070</profiles.report.biz.port>
-            </properties>
-        </profile>
-
-        <profile>
-            <id>demo</id>
-            <properties>
-                <profiles.active>demo</profiles.active>
-                <nacos.username>nacos</nacos.username>
-                <nacos.password>n1a2c3o4s5</nacos.password>
-                <nacos.server-addr>nacos2.yaoyi.net:57260</nacos.server-addr>
-                <nacos.namespace>ef23465c-e198-4ada-a3f2-88e014c69a3f</nacos.namespace>
-                <profiles.gateway.port>14010</profiles.gateway.port>
-                <profiles.auth.port>14020</profiles.auth.port>
-                <profiles.workspace.biz.port>14030</profiles.workspace.biz.port>
-                <profiles.filerepo.biz.port>14050</profiles.filerepo.biz.port>
-                <profiles.warehouse.biz.port>14080</profiles.warehouse.biz.port>
-                <profiles.quartz.biz.port>14090</profiles.quartz.biz.port>
-                <profiles.report.biz.port>14070</profiles.report.biz.port>
-            </properties>
-        </profile>
-
-        <profile>
-            <id>prod</id>
-            <properties>
-                <profiles.active>prod</profiles.active>
-                <nacos.username>nacos</nacos.username>
-                <nacos.password>n1a2c3o4s5</nacos.password>
-                <nacos.server-addr>nacos2.yaoyi.net:57260</nacos.server-addr>
-                <nacos.namespace>ef23465c-e198-4ada-a3f2-88e014c69a3f</nacos.namespace>
-                <profiles.gateway.port>14010</profiles.gateway.port>
-                <profiles.auth.port>14020</profiles.auth.port>
-                <profiles.workspace.biz.port>14030</profiles.workspace.biz.port>
-                <profiles.filerepo.biz.port>14050</profiles.filerepo.biz.port>
-                <profiles.warehouse.biz.port>14080</profiles.warehouse.biz.port>
-                <profiles.quartz.biz.port>14090</profiles.quartz.biz.port>
-                <profiles.report.biz.port>14070</profiles.report.biz.port>
-            </properties>
-        </profile>
-
-
-    </profiles>
 
 </project>