package com.yaoyicloud.render.cso; import java.io.IOException; import java.util.Map; import org.apache.commons.collections4.MapUtils; 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 com.yaoyicloud.render.AbstractRender; import lombok.extern.slf4j.Slf4j; @Slf4j public final class EntAppendixRender extends AbstractRender { private final FilerepoProperties filerepoProperties; private final CommonDataCache commonDataCache; public EntAppendixRender(String cwd, FilerepoProperties filerepoProperties, CommonDataCache commonDataCache) { super(cwd); this.filerepoProperties = filerepoProperties; this.commonDataCache = commonDataCache; } @Override protected String getBasicPath() throws IOException { return filerepoProperties.getBasePath(); } @Override protected String getReportImagePath() { return filerepoProperties.getReportImagePath(); } /** * Docx 渲染 * @param info 数据 * @param templateFileContent 模板内容 * @param relationId 用于查询缓存 * @return * @throws IOException */ public String renderDocx(String info, byte[] templateFileContent, String relationId) throws IOException { log.info("开始渲染CSO企业报告签章模块,relationId: {}", relationId); // 配置POI-TL渲染器 ConfigureBuilder builder = Configure.builder(); ObjectMapper objectMapper = new ObjectMapper(); Map data = objectMapper.readValue(info, new TypeReference>() {}); Map commonDataCacheData = commonDataCache.getData(relationId); if (MapUtils.isNotEmpty(commonDataCacheData)) { data.putAll(commonDataCacheData); } fillDefaultValues(data); try { // 渲染文档 String resultPath = this.renderDocx(data, templateFileContent, builder, relationId, "Appendix"); log.info("渲染CSO企业报告签章模块成功,文件路径: {}", resultPath); return resultPath; } catch (Exception e) { log.error("渲染CSO企业报告签章模块失败,relationId: {}", relationId, e); throw new IOException("文档渲染失败", e); } } /** * 填充默认值,确保所有必要字段都存在 */ private void fillDefaultValues(Map data) { } }