Browse Source

simple case for BasicInfo render

dengjia 1 month ago
parent
commit
e7306303f3

+ 5 - 0
easier-report-biz/pom.xml

@@ -150,6 +150,11 @@
             <artifactId>protobuf-java</artifactId>
             <version>4.31.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+            <version>4.31.0</version>
+        </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>

+ 46 - 0
easier-report-biz/src/main/java/com/yaoyicloud/render/BasicInfoRender.java

@@ -0,0 +1,46 @@
+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.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.google.protobuf.util.JsonFormat;
+import com.yaoyicloud.message.FxyProtos.BasicInfo;
+
+/**
+ * BasicInfo渲染器
+ *
+ */
+public final class BasicInfoRender extends AbstractRender {
+
+    public BasicInfoRender(String cwd) {
+        super(cwd);
+    }
+
+    /**
+     * Docx 渲染
+     *
+     * @param info 数据
+     * @param templateFileContent 模板内容
+     * @return 本地文件目录
+     * @throws IOException
+     */
+    public String renderDocx(BasicInfo info, byte[] templateFileContent) throws IOException {
+        // 不需要定制展示逻辑的时候,使用protobuf的转json方法
+        String jsonStr = JsonFormat.printer().print(info);
+
+        // 注: 报告模板的模板变量按照json序列化的结果命名
+        // 注: 目前的实现假设:一个session对应一个cwd目录
+        ConfigureBuilder builder = Configure.builder();
+        builder.bind("basicInfoChecks", new LoopRowTableRenderPolicy());
+        this.docxResultPath = this.renderDocx(jsonStr, templateFileContent, builder,
+            Paths.get(cwd, UUID.randomUUID().toString() + ".docx").toString());
+        return this.docxResultPath;
+    }
+
+}

+ 2 - 2
easier-report-biz/src/test/java/com/yaoyicloud/render/test/TestAuditResultRender.java

@@ -22,9 +22,9 @@ public class TestAuditResultRender {
         String retPath = render.renderDocx(
             AuditResult.newBuilder().setOpinion("my opinion").setServiceProviderName("whoami")
                 .setOverallSummary(CheckSummary.newBuilder().setRiskSummary("high risk").setSuggestion("accept it"))
-                .addCheckItemScores(0,
+                .addCheckItemScores(
                     CheckItemScore.newBuilder().setCategory("cate1").setItemName("name1").setScore(1L))
-                .addCheckItemScores(0,
+                .addCheckItemScores(
                     CheckItemScore.newBuilder().setCategory("cate2").setItemName("name2").setScore(2L))
                 .build(),
             content);

+ 35 - 0
easier-report-biz/src/test/java/com/yaoyicloud/render/test/TestBasicInfoRender.java

@@ -0,0 +1,35 @@
+package com.yaoyicloud.render.test;
+
+import static org.junit.Assert.assertTrue;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import org.junit.Test;
+
+import com.yaoyicloud.message.FxyProtos.BasicInfo;
+import com.yaoyicloud.message.FxyProtos.CheckItemDetail;
+import com.yaoyicloud.message.FxyProtos.CheckSummary;
+import com.yaoyicloud.render.BasicInfoRender;
+
+public class TestBasicInfoRender {
+
+    @Test
+    public void testRenderDocx() throws IOException {
+
+        byte[] content = Files
+            .readAllBytes(Paths.get(getClass().getClassLoader().getResource("docx/basic_info.docx").getFile()));
+        BasicInfoRender render = new BasicInfoRender("../temp/");
+        String retPath = render.renderDocx(
+            BasicInfo.newBuilder().setEntName("宇宙公司")
+                .setBasicInfoSummary(CheckSummary.newBuilder().setRiskSummary("high risk").setSuggestion("accept it"))
+                .addBasicInfoChecks(
+                    CheckItemDetail.newBuilder().setName("item1").setScore(1L))
+                .addBasicInfoChecks(
+                    CheckItemDetail.newBuilder().setName("item2").setScore(2L))
+                .build(),
+            content);
+
+        assertTrue(retPath.length() > 0);
+    }
+
+}