Parcourir la source

基金会基本信息模块化构建

mamingxu il y a 1 semaine
Parent
commit
938d84e6c5

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

@@ -11,6 +11,8 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor
 public enum ModuleType {
+    FOUNDATION_BASICINFO("FOUNDATION_BASICINFO", "基金会基本信息"),
+
     PLATFORM_COMPANY_BASICINFO("PLATFORM_COMPANY_BASICINFO", "平台公司基本信息"),
     ANTIBRIBERY("ANTIBRIBERY", "反贿赂反腐败诚信保证"),
     COMMON("COMMON", "公共模块封面"),

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

@@ -0,0 +1,140 @@
+package com.yaoyicloud.render.foundation;
+
+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 FoundationBasicInfoRender extends AbstractRender {
+    private final FilerepoProperties filerepoProperties;
+
+    public FoundationBasicInfoRender(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 indicatorsRenderPolicy = this.indicatorsRenderPolicy();
+        builder.bind("basicInfoChecks", indicatorsRenderPolicy).bind("superiorAuthority", indicatorsRenderPolicy);
+        builder.addPlugin('^', this.pictureRenderPolicy());
+        // 通过默认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);
+        Object netAsset = data.get("netAsset");
+        data.put("netAsset", netAsset + "元人民币");
+        Map<String, Object> foundationExt = (Map<String, Object>) data.get("foundationExt");
+        if (foundationExt == null) {
+            ObjectMapper objectMapper = new ObjectMapper();
+            FxyProtos.FoundationBasicInfoExt foundationBasicInfoExt =
+                FxyProtos.FoundationBasicInfoExt.getDefaultInstance();
+            String print = JsonFormat.printer()
+                .includingDefaultValueFields()
+                .print(foundationBasicInfoExt);
+            foundationExt = objectMapper.readValue(print, new TypeReference<Map<String, Object>>() {});
+            foundationExt.replaceAll((k, v) -> v.equals("") ? "-" : v);
+        }
+
+        foundationExt.replaceAll((k, v) -> v.equals("") ? "-" : v);
+
+        Object lastYearSponsorshipDonationRatio = foundationExt.get("lastYearSponsorshipDonationRatio");
+        foundationExt.put("lastYearSponsorshipDonationRatio", lastYearSponsorshipDonationRatio + "万元人民币");
+        Object initialFund = foundationExt.get("initialFund");
+        foundationExt.put("initialFund", initialFund + "万人民币");
+
+        Object numberOfDirectors = foundationExt.get("numberOfDirectors");
+        if (numberOfDirectors.equals("-")) {
+            foundationExt.put("numberOfDirectors", 0);
+        }
+
+        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", "否");
+        }
+    }
+
+}

+ 6 - 0
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.foundation.FoundationBasicInfoRender;
 import com.yaoyicloud.render.update.BasicInfoNewRender;
 import com.yaoyicloud.render.update.PublicRecordNewRender;
 import com.yaoyicloud.service.ReportService;
@@ -107,6 +108,11 @@ public class ReportServiceImpl implements ReportService {
                                 String.valueOf(relationId));
                 return reportPath;
 
+            case FOUNDATION_BASICINFO:
+                reportPath =
+                        new FoundationBasicInfoRender(sessionId, filerepoProperties).renderDocx(data, processedData, templateBytes,
+                                String.valueOf(relationId));
+                return reportPath;
 
             default:
                 throw new UnsupportedOperationException("Unsupported module type: " + moduleType);

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


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