package com.estate.expert.admin.stat.report.render;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.deepoove.poi.policy.DynamicTableRenderPolicy;
|
import lombok.AllArgsConstructor;
|
import org.apache.poi.xwpf.usermodel.XWPFTable;
|
|
import java.math.BigInteger;
|
|
/**
|
* 综合信息表格渲染策略
|
*/
|
@AllArgsConstructor
|
public class AbstractInfoTablePolicy extends DynamicTableRenderPolicy {
|
|
private int style = 0;
|
|
/**
|
* 渲染综合信息表格
|
* @param table 表格
|
* @param data 数据
|
* @throws Exception 异常
|
*/
|
@Override
|
public void render(XWPFTable table, Object data) throws Exception {
|
var abstractInfo = (JSONObject) data;
|
var score = abstractInfo.getString("项目综合评分");
|
var level = abstractInfo.getString("项目综合评价");
|
|
var scoreMap = abstractInfo.getJSONObject("分项得分");
|
if(scoreMap == null)
|
return;
|
|
int index = 1;
|
var keys = scoreMap.keySet().toArray(String[]::new);
|
// reverse
|
for(int i = keys.length - 1; i >= 0; i--){
|
var info = keys[i];
|
var value = scoreMap.getString(info);
|
addCol(table, info, value, index++);
|
}
|
|
if(style == 0)
|
addCol(table, "项目综合评分", score, index);
|
else
|
addCol(table, "项目综合评价", level, index);
|
|
table.setWidth("100%");
|
// 将表格的列宽设置为均匀分布
|
for(int i = 0; i < index + 1; i++){
|
table.getRow(0).getCell(i).setWidth("1000");
|
table.getRow(1).getCell(i).setWidth("1000");
|
}
|
table.getCTTbl().getTblGrid().getGridColArray(0).setW(BigInteger.valueOf(400));
|
}
|
|
/**
|
* 添加列
|
* @param table 表格
|
* @param title 标题
|
* @param content 内容
|
* @param index 索引
|
*/
|
private void addCol(XWPFTable table, String title, String content, int index){
|
table.addNewCol();
|
var titleRow = table.getRow(0);
|
var titleCell = titleRow.getCell(index);
|
RenderHelper.renderContentCell(titleCell, title, true);
|
|
var contentRow = table.getRow(1);
|
var contentCell = contentRow.getCell(index);
|
RenderHelper.renderContentCell(contentCell, content, false);
|
}
|
}
|