123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package com.yaoyicloud.render;
- import java.io.IOException;
- import java.nio.file.Paths;
- import java.util.UUID;
- import com.deepoove.poi.config.Configure;
- import com.deepoove.poi.config.ConfigureBuilder;
- import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
- import com.fasterxml.jackson.core.JsonGenerator;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.SerializerProvider;
- import com.fasterxml.jackson.databind.module.SimpleModule;
- import com.fasterxml.jackson.databind.ser.std.StdSerializer;
- import com.yaoyicloud.message.FxyProtos.AuditResult;
- import com.yaoyicloud.message.FxyProtos.CheckItemScore;
- import cn.hutool.core.util.StrUtil;
- /**
- * AuditResult渲染器
- *
- */
- public final class AuditResultRender extends AbstractRender {
- public AuditResultRender(String cwd) {
- super(cwd);
- }
- /**
- * Docx 渲染
- *
- * @param info 数据
- * @param templateFileContent 模板内容
- * @return 本地文件目录
- * @throws IOException
- */
- public String renderDocx(AuditResult info, byte[] templateFileContent) throws IOException {
- ObjectMapper mapper = new ObjectMapper();
- SimpleModule module = new SimpleModule();
- module.addSerializer(new AuditResultSerializer(AuditResult.class));
- module.addSerializer(new CheckItemScoreSerializer(CheckItemScore.class));
- mapper.registerModule(module);
- String jsonStr = mapper.writeValueAsString(info);
- // 注: 报告模板的模板变量按照json序列化的结果命名
- // 注: 目前的实现假设:一个session对应一个cwd目录
- ConfigureBuilder builder = Configure.builder();
- builder.bind("checkItemScores", new LoopRowTableRenderPolicy());
- this.docxResultPath = this.renderDocx(jsonStr, templateFileContent, builder,
- Paths.get(cwd, UUID.randomUUID().toString() + ".docx").toString());
- return this.docxResultPath;
- }
- /*
- * 通过序列化和反序列化
- * 1. 默认显示规则的数据转换
- * 2. 避免TL处理模板面对复杂数据类型
- */
- public class AuditResultSerializer extends StdSerializer<AuditResult> {
- public AuditResultSerializer() {
- this(null);
- }
- public AuditResultSerializer(Class<AuditResult> t) {
- super(t);
- }
- @Override
- public void serialize(AuditResult value, JsonGenerator jgen, SerializerProvider provider)
- throws IOException, JsonProcessingException {
- jgen.writeStartObject();
- jgen.writeStringField("auditResultScore", value.getAuditResultScore());
- jgen.writeStringField("opinion", StrUtil.isBlank(value.getOpinion()) ? "-" : value.getOpinion());
- jgen.writeStringField("serviceProviderName", value.getServiceProviderName());
- // Note: ignore reportVersion
- jgen.writeStringField("auditDate", value.getAuditDate());
- jgen.writeStringField("riskAlert", StrUtil.isBlank(value.getRiskAlert()) ? "-" : value.getRiskAlert());
- jgen.writeStringField("auditResultSuggestion",
- StrUtil.isBlank(value.getAuditResultSuggestion()) ? "-" : value.getAuditResultSuggestion());
- jgen.writeObjectField("checkItemScores", value.getCheckItemScoresList());
- jgen.writeEndObject();
- }
- }
- public class CheckItemScoreSerializer extends StdSerializer<CheckItemScore> {
- public CheckItemScoreSerializer() {
- this(null);
- }
- public CheckItemScoreSerializer(Class<CheckItemScore> t) {
- super(t);
- }
- @Override
- public void serialize(CheckItemScore value, JsonGenerator jgen, SerializerProvider provider)
- throws IOException, JsonProcessingException {
- jgen.writeStartObject();
- jgen.writeNumberField("itemId", value.getItemId());
- jgen.writeStringField("category", StrUtil.isBlank(value.getCategory()) ? "-" : value.getCategory());
- jgen.writeStringField("itemName", value.getItemName());
- jgen.writeNumberField("score", value.getScore());
- jgen.writeEndObject();
- }
- }
- }
|