CoverRender.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package com.yaoyicloud.render;
  2. import java.io.IOException;
  3. import java.time.LocalDate;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import com.deepoove.poi.config.Configure;
  7. import com.deepoove.poi.config.ConfigureBuilder;
  8. import com.deepoove.poi.policy.RenderPolicy;
  9. import com.fasterxml.jackson.core.type.TypeReference;
  10. import com.fasterxml.jackson.databind.ObjectMapper;
  11. import com.google.protobuf.util.JsonFormat;
  12. import com.yaoyicloud.config.CommonDataCache;
  13. import com.yaoyicloud.config.FilerepoProperties;
  14. import com.yaoyicloud.factory.FXYAbstractRender;
  15. import com.yaoyicloud.message.FxyProtos;
  16. import lombok.extern.slf4j.Slf4j;
  17. /**
  18. * ServiceProviderInfo渲染器
  19. *
  20. */
  21. @Slf4j
  22. public final class CoverRender extends FXYAbstractRender {
  23. private final FilerepoProperties filerepoProperties;
  24. private final CommonDataCache commonDataCache;
  25. public CoverRender(String cwd, FilerepoProperties filerepoProperties,
  26. CommonDataCache commonDataCache) {
  27. super(cwd);
  28. this.filerepoProperties = filerepoProperties;
  29. this.commonDataCache = commonDataCache;
  30. }
  31. @Override
  32. protected Map<String, Object> renderDocx(String info, String relationId, Integer counter) throws IOException {
  33. log.info("开始渲染公共封面模块,relationId: {}", relationId);
  34. FxyProtos.AuditResult.Builder auditResultBuilder = FxyProtos.AuditResult.newBuilder();
  35. JsonFormat.parser().merge(info, auditResultBuilder);
  36. FxyProtos.AuditResult defaultInstance = FxyProtos.AuditResult.getDefaultInstance();
  37. FxyProtos.AuditResult mergedProto = defaultInstance.toBuilder()
  38. .mergeFrom(auditResultBuilder.build())
  39. .build();
  40. String completeJson = JsonFormat.printer()
  41. .includingDefaultValueFields()
  42. .print(mergedProto);
  43. ObjectMapper objectMapper = new ObjectMapper();
  44. Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
  45. data.replaceAll((k, v) -> v.equals("") ? "-" : v);
  46. String tenantName = (String) data.get("tenantName");
  47. String name = (String) data.get("serviceProviderName");
  48. String type = (String) data.get("type");
  49. String reportDate = LocalDate.now().toString();
  50. HashMap<String, Object> commonData = new HashMap<>();
  51. commonData.put("tenantName", tenantName);
  52. commonData.put("type", type);
  53. commonData.put("reportDate", reportDate);
  54. commonData.put("name", name);
  55. commonDataCache.addDataMap(relationId, commonData);
  56. data.put("levelInteger", counter);
  57. data.putAll(commonData);
  58. fillDefaultValues(data);
  59. return data;
  60. }
  61. @Override
  62. protected ConfigureBuilder builder(String relationId) {
  63. // 配置POI-TL渲染器
  64. ConfigureBuilder builder = Configure.builder();
  65. RenderPolicy indicatorsRenderPolicy = this.getScoreRenderPolicy();
  66. builder.bind("checkItemScores", indicatorsRenderPolicy);
  67. return builder;
  68. }
  69. @Override
  70. protected String getBasicPath() throws IOException {
  71. return filerepoProperties.getBasePath();
  72. }
  73. @Override
  74. protected String getReportImagePath() {
  75. return filerepoProperties.getReportImagePath();
  76. }
  77. /**
  78. * 填充默认值,确保所有必要字段都存在
  79. */
  80. private void fillDefaultValues(Map<String, Object> data) {
  81. Map<String, Object> basicInfoSummary = (Map<String, Object>) data.get("overallSummary");
  82. basicInfoSummary.replaceAll((k, v) -> v.equals("") ? "-" : v);
  83. }
  84. }