diff --git a/src/main/java/com/codechecker/cache/report/ReportBuilder.java b/src/main/java/com/codechecker/cache/report/ReportBuilder.java index d0e12d4..b1dd8de 100644 --- a/src/main/java/com/codechecker/cache/report/ReportBuilder.java +++ b/src/main/java/com/codechecker/cache/report/ReportBuilder.java @@ -40,7 +40,7 @@ public class ReportBuilder { sb.append("未检测到缓存序列化结构变更。\n"); } else { for (SchemaChange c : report.getChanges()) { - sb.append("- `").append(nvl(c.getKeyPattern())).append("`\n"); + appendKeyLine(sb, c.getKeyPattern()); if (c.getMessage() != null) { sb.append(" ").append(c.getMessage()).append('\n'); } @@ -50,21 +50,39 @@ public class ReportBuilder { } for (KeyStructureChange kc : keys) { - sb.append("- `").append(nvl(kc.getKeyPattern())).append("`\n"); + appendKeyLine(sb, kc.getKeyPattern()); String oldJson = nvl(kc.getOldSkeletonJson()); String newJson = nvl(kc.getNewSkeletonJson()); if (oldJson.isEmpty() && !newJson.isEmpty()) { - sb.append(" value 新增为 “").append(newJson).append("”\n\n"); + sb.append(" value 新增为 “").append(fontWarning(newJson)).append("”\n\n"); } else if (!oldJson.isEmpty() && newJson.isEmpty()) { - sb.append(" value 原结构 “").append(oldJson).append("” 已删除写入\n\n"); + sb.append(" value 原结构 “").append(fontInfo(oldJson)).append("” 已删除写入\n\n"); } else { - sb.append(" value 值从 “").append(oldJson).append("”\n"); - sb.append(" 变更为 “").append(newJson).append("”\n\n"); + sb.append(" value 值从 “").append(fontInfo(oldJson)).append("”\n"); + sb.append(" 变更为 “").append(fontWarning(newJson)).append("”\n\n"); } } return sb.toString(); } + /** + * Key 行:加粗「Key -->」+ 加粗 key 文本。 + * 避免 key 末尾 * 与 markdown ** 冲突,结尾加零宽空格再闭合。 + */ + private void appendKeyLine(StringBuilder sb, String keyPattern) { + sb.append("- **Key --> ").append(nvl(keyPattern)).append("\u200b**\n"); + } + + /** 企微 markdown:绿色(旧骨架)。 */ + private String fontInfo(String text) { + return "" + text + ""; + } + + /** 企微 markdown:warning 橙红(新骨架)。 */ + private String fontWarning(String text) { + return "" + text + ""; + } + /** * CI 控制台:字段明细 + 完整企微 Markdown。 */ diff --git a/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java b/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java index 0b9d492..23bcd7a 100644 --- a/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java +++ b/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java @@ -40,9 +40,9 @@ class ReportBuilderTest { assertTrue(md.startsWith("## [缓存结构变更] jnpf-java-cloud")); assertTrue(md.contains("> **分支**: code/redis_change_detection_v1.0")); assertTrue(md.contains("> **时间**: 2026-07-13 16:54:17")); - assertTrue(md.contains("`tenant:db:content:*`")); - assertTrue(md.contains("value 值从 “{\"dbName\":\"\"")); - assertTrue(md.contains("变更为 “{\"vo\":")); + assertTrue(md.contains("- **Key --> tenant:db:content:*\u200b**")); + assertTrue(md.contains("{\"dbName\":\"\",\"linkList\":[{\"id\":\"\"}]}")); + assertTrue(md.contains("{\"vo\":{\"dbName\":\"\",\"linkList\":[{\"id\":\"\"}]},\"expiresAtMs\":0}")); assertFalse(md.contains("### P0")); assertFalse(md.contains("位置")); assertFalse(md.contains("模式")); @@ -75,5 +75,8 @@ class ReportBuilderTest { assertTrue(console.contains("**删除字段**: x")); assertTrue(console.contains("======== 企微 Markdown ========")); assertTrue(console.contains("value 值从")); + assertTrue(console.contains("- **Key --> k1\u200b**")); + assertTrue(console.contains("")); + assertTrue(console.contains("")); } }