Browse Source

build 学协会基本信息(老版)

mamingxu 1 week ago
parent
commit
4b3bfe6a79

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

@@ -12,6 +12,7 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum ModuleType {
     FOUNDATION_BASICINFO("FOUNDATION_BASICINFO", "基金会基本信息"),
+    ASSOCIATION_BASICINFO("ASSOCIATION_BASICINFO", "学协会基本信息"),
 
     PLATFORM_COMPANY_BASICINFO("PLATFORM_COMPANY_BASICINFO", "平台公司基本信息"),
     ANTIBRIBERY("ANTIBRIBERY", "反贿赂反腐败诚信保证"),

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

@@ -0,0 +1,131 @@
+package com.yaoyicloud.render.association;
+
+import java.io.IOException;
+import java.util.Map;
+
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.policy.RenderPolicy;
+import com.fasterxml.jackson.core.JsonProcessingException;
+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.FilerepoProperties;
+import com.yaoyicloud.message.FxyProtos;
+import com.yaoyicloud.render.AbstractRender;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * BasicInfo渲染器
+ *
+ */
+@Slf4j
+public final class AssociationBasicInfoRender extends AbstractRender {
+    private final FilerepoProperties filerepoProperties;
+
+    public AssociationBasicInfoRender(String cwd, FilerepoProperties filerepoProperties) {
+        super(cwd);
+        this.filerepoProperties = filerepoProperties;
+    }
+
+    @Override
+    protected String getBasicPath() throws IOException {
+        return filerepoProperties.getBasePath();
+    }
+
+    @Override
+    protected String getReportImagePath() {
+        return filerepoProperties.getReportImagePath();
+    }
+
+    /**
+     * Docx 渲染
+     *
+     * @param info 数据
+     * @param templateFileContent 模板内容
+     * @return 本地文件目录
+     * @throws IOException
+     */
+    public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent,
+        String relationId) throws IOException {
+        log.info("开始渲染学协会基础信息报告模块,relationId: {}", relationId);
+
+
+        // 配置POI-TL渲染器
+        ConfigureBuilder builder = Configure.builder();
+        RenderPolicy indicatorsRenderPolicyToProtobuf = this.indicatorsRenderPolicyToProtobuf();
+        builder.bind("basicInfoChecks", indicatorsRenderPolicyToProtobuf).bind("superiorAuthority", indicatorsRenderPolicyToProtobuf);
+        builder.addPlugin('^', this.pictureRenderPolicy());
+        builder.useSpringEL();
+        // 通过默认protobuf实例来填充不存在的key
+        FxyProtos.BasicInfo.Builder basicInfoBuilder = FxyProtos.BasicInfo.newBuilder();
+        JsonFormat.parser().merge(info, basicInfoBuilder);
+        FxyProtos.BasicInfo defaultInstance = FxyProtos.BasicInfo.getDefaultInstance();
+        FxyProtos.BasicInfo mergedProto = defaultInstance.toBuilder()
+            .mergeFrom(basicInfoBuilder.build())
+            .build();
+
+        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);
+
+        if (addtionalMap != null) {
+            data.putAll(addtionalMap);
+        }
+
+        fillBasicDefaultValues(data);
+        try {
+            // 渲染文档
+            String resultPath = this.renderDocx(data, templateFileContent, builder, relationId, "basicInfo");
+            log.info("渲染学协会基础信息报告模块成功,文件路径: {}", resultPath);
+            return resultPath;
+        } catch (Exception e) {
+            log.error("渲染学协会基础信息报告模块失败,relationId: {}", relationId, e);
+            throw new IOException("文档渲染失败", e);
+        }
+    }
+
+    /**
+     * 填充默认值,确保所有必要字段都存在
+     */
+    private void fillBasicDefaultValues(Map<String, Object> data)
+        throws InvalidProtocolBufferException, JsonProcessingException {
+        Map<String, Object> basicInfoSummary = (Map<String, Object>) data.get("basicInfoSummary");
+        basicInfoSummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
+
+        Map<String, Object> associationExt = (Map<String, Object>) data.get("associationExt");
+        if (associationExt == null) {
+            ObjectMapper objectMapper = new ObjectMapper();
+
+            FxyProtos.AssociationBasicInfoExt associationBasicInfoExt = FxyProtos.AssociationBasicInfoExt.getDefaultInstance();
+            String print = JsonFormat.printer()
+                .includingDefaultValueFields()
+                .print(associationBasicInfoExt);
+            associationExt = objectMapper.readValue(print, new TypeReference<Map<String, Object>>() {});
+            associationExt.replaceAll((k, v) -> v.equals("") ? "-" : v);
+            data.put("associationExt", associationExt);
+        }
+
+        associationExt.replaceAll((k, v) -> v.equals("") ? "-" : v);
+
+        Object certReceived = data.get("certReceived");
+        if (certReceived.equals("-")) {
+            data.put("certReceived", "否");
+        }
+        Object bankLicense = data.get("bankLicense");
+        if (bankLicense.equals("-")) {
+            data.put("bankLicense", "否");
+        }
+        Object annualInspectionResult = data.get("annualInspectionResult");
+        if (annualInspectionResult.equals("-")) {
+            data.put("annualInspectionResult", "否");
+        }
+    }
+
+}

+ 13 - 5
easier-report-biz/src/main/java/com/yaoyicloud/service/impl/ReportServiceImpl.java

@@ -15,6 +15,7 @@ import com.yaoyicloud.render.BasicInfoRender;
 import com.yaoyicloud.render.FinancialInfoRender;
 import com.yaoyicloud.render.PublicRecordRender;
 import com.yaoyicloud.render.ServiceProviderInfoRender;
+import com.yaoyicloud.render.association.AssociationBasicInfoRender;
 import com.yaoyicloud.render.foundation.FoundationBasicInfoRender;
 import com.yaoyicloud.render.update.BasicInfoNewRender;
 import com.yaoyicloud.render.update.PublicRecordNewRender;
@@ -99,19 +100,26 @@ public class ReportServiceImpl implements ReportService {
                 return reportPath;
             case PUBLIC_RECORD_NEW:
                 reportPath = new PublicRecordNewRender(sessionId, filerepoProperties).renderDocx(data, processedData,
-                        templateBytes, String.valueOf(relationId));
+                    templateBytes, String.valueOf(relationId));
                 return reportPath;
 
             case PLATFORM_COMPANY_BASICINFO_NEW:
                 reportPath =
-                        new BasicInfoNewRender(sessionId, filerepoProperties).renderDocx(data, processedData, templateBytes,
-                                String.valueOf(relationId));
+                    new BasicInfoNewRender(sessionId, filerepoProperties).renderDocx(data, processedData, templateBytes,
+                        String.valueOf(relationId));
                 return reportPath;
 
             case FOUNDATION_BASICINFO:
                 reportPath =
-                        new FoundationBasicInfoRender(sessionId, filerepoProperties).renderDocx(data, processedData, templateBytes,
-                                String.valueOf(relationId));
+                    new FoundationBasicInfoRender(sessionId, filerepoProperties).renderDocx(data, processedData,
+                        templateBytes,
+                        String.valueOf(relationId));
+                return reportPath;
+            case ASSOCIATION_BASICINFO:
+                reportPath =
+                    new AssociationBasicInfoRender(sessionId, filerepoProperties).renderDocx(data, processedData,
+                        templateBytes,
+                        String.valueOf(relationId));
                 return reportPath;
 
             default:

BIN
easier-report-biz/src/test/resources/docx/association_basic_info.docx


BIN
easier-report-biz/src/test/resources/docx/foundataion_basic_info.docx