From 9141fdbb1912456c4b1bd5b4b83342d86709dcd7 Mon Sep 17 00:00:00 2001 From: dongzi Date: Mon, 8 Jun 2026 14:40:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E4=BC=98=E5=8C=96=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/checker/notify-templates/README.md | 21 ++++---- .gitea/checker/notify-templates/dto.md | 48 ++++++++--------- .gitea/checker/notify-templates/entity.md | 30 +++++------ .../notify-templates/field-description.md | 20 ++++---- .gitea/checker/notify-templates/model.md | 30 +++++------ .gitea/checker/notify-templates/vo.md | 33 ++++++------ .../com/autoCheck/notify/WeComNotifier.java | 51 ++++++++++--------- scripts/build-class-checker.ps1 | 4 +- 8 files changed, 112 insertions(+), 125 deletions(-) diff --git a/.gitea/checker/notify-templates/README.md b/.gitea/checker/notify-templates/README.md index f7570ff..d81368e 100644 --- a/.gitea/checker/notify-templates/README.md +++ b/.gitea/checker/notify-templates/README.md @@ -8,28 +8,29 @@ Push 触发 CI 后,按变更类的后缀(`Dto` / `Vo` / `Entity` / `Model` | 语法 | 说明 | |------|------| -| `#` / `##` / `###` | 标题 | +| `#` / `##` / `###` | 标题(主区块用【】) | | `` `行内代码` `` | 字段名、URI | | `>` | 引用行(每项一行) | +| `**bold**` | 头部四行、统计行加粗 | | `` | 绿:类名、新增、HTTP 方法、新类型 | | `` | 灰:说明、路径、无影响 | -| `` | 橙:[修改]/[删除]、旧类型 | +| `` | 橙:[修改]/[删除]、旧类型、统计数字 | ## 布局约定 -1. **# 类变更通知** — 头部 4 项,每项一行 `>标签:值` -2. **## 对象变更细节** — 每条变更独立引用块,字段间空行分隔 -3. **## 影响范围** — 各 ### 小节内,每项一行引用 +1. **# 【类变更通知】** — 头部 4 项,每项一行 `>**标签: 值**`(加粗,冒号后两空格) +2. **## 【对象变更细节】** — 统计行 + 每条变更单行(标签/说明/类型合并) +3. **## 【影响范围】** — 各 ### 小节内,每项一行引用 ## 公共头部 ``` -# 类变更通知 +# 【类变更通知】 -> 变更对象:ApplyAttendanceChangeDto(Dto) -> 修改人:dongzi -> 时间:2026-06-07 20:14:35 -> 路径:jnpf-ftb/.../ApplyAttendanceChangeDto.java +> **变更对象: ApplyAttendanceChangeDto(Dto)** +> **修改人: dongzi** +> **时间: 2026-06-07 20:14:35** +> **路径: jnpf-ftb/.../ApplyAttendanceChangeDto.java** ``` ## 影响范围 diff --git a/.gitea/checker/notify-templates/dto.md b/.gitea/checker/notify-templates/dto.md index 1c5ed6d..b8e233b 100644 --- a/.gitea/checker/notify-templates/dto.md +++ b/.gitea/checker/notify-templates/dto.md @@ -8,32 +8,26 @@ ## 完整示例(字段修改) ``` -# 类变更通知 +# 【类变更通知】 -> 变更对象:ApplyAttendanceChangeDto(Dto) -> 修改人:dongzi -> 时间:2026-06-07 20:14:35 -> 路径:jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceChangeDto.java +> **变更对象: ApplyAttendanceChangeDto(Dto)** +> **修改人: dongzi** +> **时间: 2026-06-07 20:14:35** +> **路径: jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceChangeDto.java** -## 对象变更细节 +## 【对象变更细节】 -> 共 4 项字段变更 +> **共 4 项变更** -> [修改] `taskId` -> 说明:流程主键 -> 类型:IntegerString +> [修改] `taskId` 说明: 流程主键 类型: IntegerString -> [修改] `changeUserId` -> 说明:变更人员id -> 类型:StringInteger +> [修改] `changeUserId` 说明: 变更人员id 类型: StringInteger -> [新增] `storeId` -> 说明:门店ID +> [新增] `storeId` 说明: 门店ID -> [删除] `oldField` -> 说明:已废弃字段 +> [删除] `oldField` 说明: 已废弃字段 -## 影响范围 +## 【影响范围】 ### 影响 request 接口 > POST `/apply/clockIn` @@ -48,9 +42,9 @@ ## 示例(类删除) ``` -## 对象变更细节 +## 【对象变更细节】 -> [已删除] 该类文件已被移除 +> [已删除] 该类文件已被移除 ``` --- @@ -58,9 +52,9 @@ ## 示例(仅类名变更) ``` -## 对象变更细节 +## 【对象变更细节】 -> [类名变更] ApplyAttendanceChangeDtoApplyAttendanceChangeNewDto +> [类名变更] ApplyAttendanceChangeDtoApplyAttendanceChangeNewDto > 字段无变化 ``` @@ -69,15 +63,13 @@ ## 示例(类名 + 字段同时变更) ``` -## 对象变更细节 +## 【对象变更细节】 -> [类名变更] ApplyAttendanceChangeDtoApplyAttendanceChangeNewDto +> [类名变更] ApplyAttendanceChangeDtoApplyAttendanceChangeNewDto -> 共 1 项字段变更 +> **共 1 项变更** -> [修改] `changeMinute` -> 说明:变更分钟数 -> 类型:IntegerString +> [修改] `changeMinute` 说明: 变更分钟数 类型: IntegerString ``` --- diff --git a/.gitea/checker/notify-templates/entity.md b/.gitea/checker/notify-templates/entity.md index d0d476e..9ddd1a9 100644 --- a/.gitea/checker/notify-templates/entity.md +++ b/.gitea/checker/notify-templates/entity.md @@ -8,25 +8,23 @@ ## 完整示例(字段修改) ``` -# 类变更通知 +# 【类变更通知】 -> 变更对象:TrainingPositionEntity(Entity) -> 修改人:张三 -> 时间:2026-06-07 14:30:00 -> 路径:jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/entity/training/TrainingPositionEntity.java +> **变更对象: TrainingPositionEntity(Entity)** +> **修改人: 张三** +> **时间: 2026-06-07 14:30:00** +> **路径: jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/entity/training/TrainingPositionEntity.java** -## 对象变更细节 +## 【对象变更细节】 -> 共 1 项字段变更 +> **共 1 项变更** -> [修改] `createTime` -> 说明:创建时间 -> 类型:DateLocalDateTime +> [修改] `createTime` 说明: 创建时间 类型: DateLocalDateTime -## 影响范围 +## 【影响范围】 ### 类转换影响 -> Entity:TrainingPositionEntity +> Entity: TrainingPositionEntity ``` --- @@ -34,9 +32,9 @@ ## 示例(类删除) ``` -## 对象变更细节 +## 【对象变更细节】 -> [已删除] 该类文件已被移除 +> [已删除] 该类文件已被移除 ``` --- @@ -44,8 +42,8 @@ ## 示例(仅类名变更) ``` -## 对象变更细节 +## 【对象变更细节】 -> [类名变更] TrainingPositionEntityTrainingPositionNewEntity +> [类名变更] TrainingPositionEntityTrainingPositionNewEntity > 字段无变化 ``` diff --git a/.gitea/checker/notify-templates/field-description.md b/.gitea/checker/notify-templates/field-description.md index 10ac63b..88fe4de 100644 --- a/.gitea/checker/notify-templates/field-description.md +++ b/.gitea/checker/notify-templates/field-description.md @@ -1,6 +1,6 @@ # 字段说明规则 -字段变更采用 **引用块 + 换行 + font 颜色**,遵循企微 `markdown` v1(不支持列表)。 +字段变更采用 **引用块 + 单行合并 + font 颜色**,遵循企微 `markdown` v1(不支持列表)。 ## 说明提取优先级 @@ -13,26 +13,26 @@ ## 字段变更行格式 +每条变更占**一行**,标签、说明、类型横向排列,冒号后两空格: + ``` -> 共 4 项字段变更 +> **共 4 项变更** -> [修改] `taskId` -> 说明:流程主键 -> 类型:IntegerString +> [修改] `taskId` 说明: 流程主键 类型: IntegerString -> [新增] `storeId` -> 说明:门店ID +> [新增] `storeId` 说明: 门店ID ``` -| 操作 | 标签 | 类型行 | +| 操作 | 标签 | 类型段 | |------|------|--------| | 新增 | info `[新增]` | 无 | | 删除 | warning `[删除]` | 无 | | 修改 | warning `[修改]` | 仅类型变化时出现 | -- 字段间用**空行**分隔,便于对照 +- 统计行加粗,数字用 warning(橙色),文案为「共 N 项变更」(不含「字段」) +- 多条变更之间用**空行**分隔 - 说明为空时显示 `(无说明)` -- 不要在 `` 内嵌 `**bold**` +- 头部四行加粗,用 `quoteKvBold`;不要在 `` 内嵌 `**bold**` ## 接口行格式 diff --git a/.gitea/checker/notify-templates/model.md b/.gitea/checker/notify-templates/model.md index 4fcc841..eabb659 100644 --- a/.gitea/checker/notify-templates/model.md +++ b/.gitea/checker/notify-templates/model.md @@ -8,25 +8,23 @@ ## 完整示例(字段修改) ``` -# 类变更通知 +# 【类变更通知】 -> 变更对象:AttendanceRuleModel(Model) -> 修改人:张三 -> 时间:2026-06-07 14:30:00 -> 路径:jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/AttendanceRuleModel.java +> **变更对象: AttendanceRuleModel(Model)** +> **修改人: 张三** +> **时间: 2026-06-07 14:30:00** +> **路径: jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/AttendanceRuleModel.java** -## 对象变更细节 +## 【对象变更细节】 -> 共 1 项字段变更 +> **共 1 项变更** -> [修改] `ruleType` -> 说明:规则类型 -> 类型:DateString +> [修改] `ruleType` 说明: 规则类型 类型: DateString -## 影响范围 +## 【影响范围】 ### 类转换影响 -> Entity:AttendanceRuleEntity +> Entity: AttendanceRuleEntity ``` --- @@ -34,9 +32,9 @@ ## 示例(类删除) ``` -## 对象变更细节 +## 【对象变更细节】 -> [已删除] 该类文件已被移除 +> [已删除] 该类文件已被移除 ``` --- @@ -44,8 +42,8 @@ ## 示例(仅类名变更) ``` -## 对象变更细节 +## 【对象变更细节】 -> [类名变更] AttendanceRuleModelAttendanceRuleNewModel +> [类名变更] AttendanceRuleModelAttendanceRuleNewModel > 字段无变化 ``` diff --git a/.gitea/checker/notify-templates/vo.md b/.gitea/checker/notify-templates/vo.md index 7e79279..06ea9b0 100644 --- a/.gitea/checker/notify-templates/vo.md +++ b/.gitea/checker/notify-templates/vo.md @@ -8,31 +8,28 @@ ## 完整示例(字段修改) ``` -# 类变更通知 +# 【类变更通知】 -> 变更对象:AttendanceDetailVo(Vo) -> 修改人:张三 -> 时间:2026-06-07 14:30:00 -> 路径:jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/vo/AttendanceDetailVo.java +> **变更对象: AttendanceDetailVo(Vo)** +> **修改人: 张三** +> **时间: 2026-06-07 14:30:00** +> **路径: jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/vo/AttendanceDetailVo.java** -## 对象变更细节 +## 【对象变更细节】 -> 共 2 项字段变更 +> **共 2 项变更** -> [新增] `overtimeHours` -> 说明:加班时长 +> [新增] `overtimeHours` 说明: 加班时长 -> [修改] `status` -> 说明:考勤状态 -> 类型:IntegerString +> [修改] `status` 说明: 考勤状态 类型: IntegerString -## 影响范围 +## 【影响范围】 ### 影响 response 接口 > GET `/api/attendance/detail` ### 类转换影响 -> Entity:AttendanceDetailEntity +> Entity: AttendanceDetailEntity ``` --- @@ -40,9 +37,9 @@ ## 示例(类删除) ``` -## 对象变更细节 +## 【对象变更细节】 -> [已删除] 该类文件已被移除 +> [已删除] 该类文件已被移除 ``` --- @@ -50,8 +47,8 @@ ## 示例(仅类名变更) ``` -## 对象变更细节 +## 【对象变更细节】 -> [类名变更] AttendanceDetailVoAttendanceDetailNewVo +> [类名变更] AttendanceDetailVoAttendanceDetailNewVo > 字段无变化 ``` diff --git a/.gitea/checker/src/main/java/com/autoCheck/notify/WeComNotifier.java b/.gitea/checker/src/main/java/com/autoCheck/notify/WeComNotifier.java index 770e39f..0962cb3 100644 --- a/.gitea/checker/src/main/java/com/autoCheck/notify/WeComNotifier.java +++ b/.gitea/checker/src/main/java/com/autoCheck/notify/WeComNotifier.java @@ -18,7 +18,7 @@ import java.util.concurrent.TimeUnit; * 将 ClassChangeReport 渲染为企业微信 Markdown 并发送(或仅日志输出)。 *

* 使用 webhook {@code markdown}(v1):引用块 + 换行排版,三色 font(info/comment/warning)。 - * v1 不支持无序列表,各项以 {@code >标签:值} 分行展示。 + * v1 不支持无序列表,各项以 {@code >标签: 值} 分行展示(冒号后两空格)。 */ public class WeComNotifier { private static final int MAX_LENGTH = 3800; @@ -82,26 +82,26 @@ public class WeComNotifier { return truncate(sb.toString()); } - /** 头部元信息,每项一行引用 */ + /** 头部元信息,每项一行引用(加粗) */ private void appendHeader(StringBuilder sb, ClassChangeReport report, String modifier, String modifyTime) { - sb.append(quoteKv("变更对象", colorInfo(safe(report.getClassName())) + sb.append(quoteKvBold("变更对象", colorInfo(safe(report.getClassName())) + "(" + report.getClassType().getLabel() + ")")).append("\n"); - sb.append(quoteKv("修改人", colorComment(modifier))).append("\n"); - sb.append(quoteKv("时间", colorComment(modifyTime))).append("\n"); - sb.append(quoteKv("路径", colorComment(report.getSourceFile()))).append("\n"); + sb.append(quoteKvBold("修改人", colorComment(modifier))).append("\n"); + sb.append(quoteKvBold("时间", colorComment(modifyTime))).append("\n"); + sb.append(quoteKvBold("路径", colorComment(report.getSourceFile()))).append("\n"); } /** 渲染删除 / 重命名 / 字段变更 */ private void appendChangeDetails(StringBuilder sb, ClassChangeReport report) { if (report.isDeleted()) { - sb.append(quoteLine(colorWarning("[已删除]") + " " + sb.append(quoteLine(colorWarning("[已删除]") + " " + colorComment("该类文件已被移除"))).append("\n"); return; } if (report.isRenamed()) { - sb.append(quoteLine(colorWarning("[类名变更]") + " " + sb.append(quoteLine(colorWarning("[类名变更]") + " " + colorComment(safe(report.getOldClassName())) + " → " + colorInfo(safe(report.getClassName())))).append("\n"); } @@ -112,8 +112,9 @@ public class WeComNotifier { } if (!report.getFieldChanges().isEmpty()) { - sb.append(quoteLine(colorComment("共 " - + report.getFieldChanges().size() + " 项字段变更"))).append("\n\n"); + int count = report.getFieldChanges().size(); + sb.append(quoteLine("**共 " + colorWarning(String.valueOf(count)) + " 项变更**")) + .append("\n\n"); for (int i = 0; i < report.getFieldChanges().size(); i++) { if (i > 0) { sb.append("\n"); @@ -204,10 +205,7 @@ public class WeComNotifier { return quoteLine(inlineCode(safe(line))); } - /** - * 单条字段变更:引用块多行,字段间空行分隔。 - * 避免 font 内嵌 bold。 - */ + /** 单条字段变更:标签、说明、类型合并为一行,字段间空行分隔 */ private String formatFieldChange(FieldChange change) { String fieldName = inlineCode(safe(change.getFieldName())); String desc = change.getDescription() == null ? "" : change.getDescription(); @@ -217,21 +215,19 @@ public class WeComNotifier { switch (change.getKind()) { case ADDED: - return quoteLine(tagAdded() + " " + fieldName) + "\n" - + quoteKv("说明", descPart); + return quoteLine(tagAdded() + " " + fieldName + " 说明: " + descPart); case REMOVED: - return quoteLine(tagRemoved() + " " + fieldName) + "\n" - + quoteKv("说明", descPart); + return quoteLine(tagRemoved() + " " + fieldName + " 说明: " + descPart); case MODIFIED: default: - StringBuilder block = new StringBuilder(); - block.append(quoteLine(tagModified() + " " + fieldName)).append("\n"); - block.append(quoteKv("说明", descPart)); + StringBuilder line = new StringBuilder(); + line.append(tagModified()).append(" ").append(fieldName) + .append(" 说明: ").append(descPart); String detail = change.getDetail(); if (detail != null && !detail.isBlank()) { - block.append("\n").append(quoteKv("类型", formatTypeChange(detail))); + line.append(" 类型: ").append(formatTypeChange(detail)); } - return block.toString(); + return quoteLine(line.toString()); } } @@ -258,9 +254,14 @@ public class WeComNotifier { return colorWarning("[修改]"); } - /** 引用行:{@code >标签:值} */ + /** 引用行:{@code >标签: 值}(冒号后两空格) */ private String quoteKv(String key, String value) { - return "> " + key + ":" + value; + return "> " + key + ": " + value; + } + + /** 加粗引用行:用于类变更通知头部 */ + private String quoteKvBold(String key, String value) { + return "> **" + key + ": " + value + "**"; } /** 纯引用行 */ diff --git a/scripts/build-class-checker.ps1 b/scripts/build-class-checker.ps1 index cf9d389..a10e006 100644 --- a/scripts/build-class-checker.ps1 +++ b/scripts/build-class-checker.ps1 @@ -1,14 +1,14 @@ # 本地打包 class-checker 并复制到 .gitea/workflows/ $ErrorActionPreference = "Stop" $Root = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path) -$CheckerDir = Join-Path $Root ".gitea\class-checker" +$CheckerDir = Join-Path $Root ".gitea\checker" $WorkflowsDir = Join-Path $Root ".gitea\workflows" $TargetJar = Join-Path $CheckerDir "target\class-checker.jar" $OutputJar = Join-Path $WorkflowsDir "class-checker.jar" Write-Host ">> 编译 class-checker..." Push-Location $Root -& mvn -q -f .gitea/class-checker/pom.xml package -DskipTests +& mvn -q -f .gitea/checker/pom.xml package -DskipTests if ($LASTEXITCODE -ne 0) { Pop-Location Write-Error "Maven 编译失败,exit code: $LASTEXITCODE"