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<String, Integer> 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);
|
}
|
}
|
}
|