|
@@ -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", "否");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|