package com.estate.expert.admin.stat.report.builder; import com.alibaba.fastjson.JSONObject; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.config.ConfigureBuilder; import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; import com.estate.expert.admin.service.UserFileService; import com.estate.expert.admin.stat.report.render.CustomPictureRenderPolicy; import com.estate.expert.admin.stat.report.render.DeviceTablePolicy; import lombok.AllArgsConstructor; import org.springframework.core.io.ClassPathResource; import java.io.IOException; import java.util.Map; /** * 设备风险评估报告构建器 */ @AllArgsConstructor public class DeviceReportBuilder implements ReportBuilderBase { protected UserFileService userFileService; /** * 构建设备风险评估报告 * @param data 数据 * @param templateConfig 模板配置 * @return 设备风险评估报告 */ @Override public XWPFTemplate buildReport(JSONObject data, Map templateConfig) { var res = new ClassPathResource("templates/设备风险评估报告.docx"); // 将data.评估结果.分类评估.详情 复制 // 避免渲染的时候的策略冲突 if (data.containsKey("评估结果") && data.getJSONObject("评估结果").containsKey("分类评估")) { var evalResult = data.getJSONObject("评估结果").getJSONObject("分类评估"); var details = evalResult.getJSONArray("详情"); evalResult.put("详情2", details); } ConfigureBuilder builder = Configure.builder(); builder.bind("data.设备信息", new LoopRowTableRenderPolicy()); builder.bind("data.评估结果.分类评估", new LoopRowTableRenderPolicy()); builder.bind("data.评估结果.分类评估.详情2", new LoopRowTableRenderPolicy()); builder.bind("data.评估结果.隐患等级分布汇总.分项", new LoopRowTableRenderPolicy()); builder.bind("分项隐患", new LoopRowTableRenderPolicy()); builder.bind("分项问题", new DeviceTablePolicy()); // builder.bind("data.设备信息", new DeviceInfoTablePolicy()); builder.addPlugin('%', new CustomPictureRenderPolicy(userFileService)); try { return XWPFTemplate.compile(res.getInputStream(), builder.build()).render( Map.of( "data", data )); } catch (IOException e) { throw new RuntimeException(e); } } }