ServiceProviderInfoRender.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package com.yaoyicloud.render;
  2. import java.io.IOException;
  3. import java.util.Map;
  4. import com.deepoove.poi.config.Configure;
  5. import com.deepoove.poi.config.ConfigureBuilder;
  6. import com.fasterxml.jackson.core.type.TypeReference;
  7. import com.fasterxml.jackson.databind.ObjectMapper;
  8. import com.google.protobuf.util.JsonFormat;
  9. import com.yaoyicloud.config.FilerepoProperties;
  10. import com.yaoyicloud.message.FxyProtos;
  11. import lombok.extern.slf4j.Slf4j;
  12. /**
  13. * ServiceProviderInfo渲染器
  14. *
  15. */
  16. @Slf4j
  17. public final class ServiceProviderInfoRender extends AbstractRender {
  18. private final FilerepoProperties filerepoProperties;
  19. public ServiceProviderInfoRender(String cwd, FilerepoProperties filerepoProperties) {
  20. super(cwd);
  21. this.filerepoProperties = filerepoProperties;
  22. }
  23. @Override
  24. protected String getBasicPath() throws IOException {
  25. return filerepoProperties.getBasePath();
  26. }
  27. @Override
  28. protected String getReportImagePath() {
  29. return filerepoProperties.getReportImagePath();
  30. }
  31. /**
  32. * Docx 渲染
  33. *
  34. * @param info 数据
  35. * @param templateFileContent 模板内容
  36. * @return 本地文件目录
  37. * @throws IOException
  38. */
  39. public String renderDocx(String info, Map<String, Object> addtionalMap, byte[] templateFileContent, String relationId) throws IOException {
  40. log.info("开始渲染公共封面模块,relationId: {}", relationId);
  41. // 配置POI-TL渲染器
  42. ConfigureBuilder builder = Configure.builder();
  43. FxyProtos.AuditResult.Builder auditResultBuilder = FxyProtos.AuditResult.newBuilder();
  44. JsonFormat.parser().merge(info, auditResultBuilder);
  45. FxyProtos.BasicInfo defaultInstance = FxyProtos.BasicInfo.getDefaultInstance();
  46. FxyProtos.BasicInfo mergedProto = defaultInstance.toBuilder()
  47. .mergeFrom(auditResultBuilder.build())
  48. .build();
  49. String completeJson = JsonFormat.printer()
  50. .includingDefaultValueFields()
  51. .print(mergedProto);
  52. ObjectMapper objectMapper = new ObjectMapper();
  53. Map<String, Object> data = objectMapper.readValue(completeJson, new TypeReference<Map<String, Object>>() {});
  54. data.replaceAll((k, v) -> v.equals("") ? "-" : v);
  55. if (addtionalMap != null) {
  56. data.putAll(addtionalMap);
  57. }
  58. // fillBasicDefaultValues(data);
  59. try {
  60. // 渲染文档
  61. String resultPath = this.renderDocx(data, templateFileContent, builder, relationId);
  62. log.info("渲染公共封面成功,文件路径: {}", resultPath);
  63. return resultPath;
  64. } catch (Exception e) {
  65. log.error("渲染公共封面失败,relationId: {}", relationId, e);
  66. throw new IOException("文档渲染失败", e);
  67. }
  68. }
  69. }