AuditResultRender.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package com.yaoyicloud.render;
  2. import java.io.IOException;
  3. import java.nio.file.Paths;
  4. import java.util.UUID;
  5. import com.deepoove.poi.config.Configure;
  6. import com.deepoove.poi.config.ConfigureBuilder;
  7. import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
  8. import com.fasterxml.jackson.core.JsonGenerator;
  9. import com.fasterxml.jackson.core.JsonProcessingException;
  10. import com.fasterxml.jackson.databind.ObjectMapper;
  11. import com.fasterxml.jackson.databind.SerializerProvider;
  12. import com.fasterxml.jackson.databind.module.SimpleModule;
  13. import com.fasterxml.jackson.databind.ser.std.StdSerializer;
  14. import com.yaoyicloud.message.FxyProtos.AuditResult;
  15. import com.yaoyicloud.message.FxyProtos.CheckItemScore;
  16. import cn.hutool.core.util.StrUtil;
  17. /**
  18. * AuditResult渲染器
  19. *
  20. */
  21. public final class AuditResultRender extends AbstractRender {
  22. public AuditResultRender(String cwd) {
  23. super(cwd);
  24. }
  25. /**
  26. * Docx 渲染
  27. *
  28. * @param info 数据
  29. * @param templateFileContent 模板内容
  30. * @return 本地文件目录
  31. * @throws IOException
  32. */
  33. public String renderDocx(AuditResult info, byte[] templateFileContent) throws IOException {
  34. ObjectMapper mapper = new ObjectMapper();
  35. SimpleModule module = new SimpleModule();
  36. module.addSerializer(new AuditResultSerializer(AuditResult.class));
  37. module.addSerializer(new CheckItemScoreSerializer(CheckItemScore.class));
  38. mapper.registerModule(module);
  39. String jsonStr = mapper.writeValueAsString(info);
  40. // 注: 报告模板的模板变量按照json序列化的结果命名
  41. // 注: 目前的实现假设:一个session对应一个cwd目录
  42. ConfigureBuilder builder = Configure.builder();
  43. builder.bind("checkItemScores", new LoopRowTableRenderPolicy());
  44. this.docxResultPath = this.renderDocx(jsonStr, templateFileContent, builder,
  45. Paths.get(cwd, UUID.randomUUID().toString() + ".docx").toString());
  46. return this.docxResultPath;
  47. }
  48. /*
  49. * 通过序列化和反序列化
  50. * 1. 默认显示规则的数据转换
  51. * 2. 避免TL处理模板面对复杂数据类型
  52. */
  53. public class AuditResultSerializer extends StdSerializer<AuditResult> {
  54. public AuditResultSerializer() {
  55. this(null);
  56. }
  57. public AuditResultSerializer(Class<AuditResult> t) {
  58. super(t);
  59. }
  60. @Override
  61. public void serialize(AuditResult value, JsonGenerator jgen, SerializerProvider provider)
  62. throws IOException, JsonProcessingException {
  63. jgen.writeStartObject();
  64. jgen.writeStringField("auditResultScore", value.getAuditResultScore());
  65. jgen.writeStringField("opinion", StrUtil.isBlank(value.getOpinion()) ? "-" : value.getOpinion());
  66. jgen.writeStringField("serviceProviderName", value.getServiceProviderName());
  67. // Note: ignore reportVersion
  68. jgen.writeStringField("auditDate", value.getAuditDate());
  69. jgen.writeStringField("riskAlert", StrUtil.isBlank(value.getRiskAlert()) ? "-" : value.getRiskAlert());
  70. jgen.writeStringField("auditResultSuggestion",
  71. StrUtil.isBlank(value.getAuditResultSuggestion()) ? "-" : value.getAuditResultSuggestion());
  72. jgen.writeObjectField("checkItemScores", value.getCheckItemScoresList());
  73. jgen.writeEndObject();
  74. }
  75. }
  76. public class CheckItemScoreSerializer extends StdSerializer<CheckItemScore> {
  77. public CheckItemScoreSerializer() {
  78. this(null);
  79. }
  80. public CheckItemScoreSerializer(Class<CheckItemScore> t) {
  81. super(t);
  82. }
  83. @Override
  84. public void serialize(CheckItemScore value, JsonGenerator jgen, SerializerProvider provider)
  85. throws IOException, JsonProcessingException {
  86. jgen.writeStartObject();
  87. jgen.writeNumberField("itemId", value.getItemId());
  88. jgen.writeStringField("category", StrUtil.isBlank(value.getCategory()) ? "-" : value.getCategory());
  89. jgen.writeStringField("itemName", value.getItemName());
  90. jgen.writeNumberField("score", value.getScore());
  91. jgen.writeEndObject();
  92. }
  93. }
  94. }