feat:通知新增分支参数

This commit is contained in:
2026-06-16 16:50:27 +08:00
parent 8ecc22e8af
commit 3c79428246
20 changed files with 74 additions and 29 deletions

View File

@@ -68,6 +68,7 @@ public class CodeCheckMain implements Callable<Integer> {
} }
GitChangeScanner gitScanner = new GitChangeScanner(repoRoot.toAbsolutePath()); GitChangeScanner gitScanner = new GitChangeScanner(repoRoot.toAbsolutePath());
String branch = gitScanner.getCurrentBranch();
DtoNestIndex nestIndex = DtoNestIndex.build(repoRoot.toAbsolutePath(), appConfig); DtoNestIndex nestIndex = DtoNestIndex.build(repoRoot.toAbsolutePath(), appConfig);
List<ClassChangeReport> classReports = List.of(); List<ClassChangeReport> classReports = List.of();
List<EndpointChangeReport> apiReports = List.of(); List<EndpointChangeReport> apiReports = List.of();
@@ -86,8 +87,8 @@ public class CodeCheckMain implements Callable<Integer> {
OverlapNotificationFilter.FilterResult filtered = OverlapNotificationFilter.apply( OverlapNotificationFilter.FilterResult filtered = OverlapNotificationFilter.apply(
classReports, apiReports, appConfig.getDtoOverlapMode(), nestIndex); classReports, apiReports, appConfig.getDtoOverlapMode(), nestIndex);
int totalSent = sendClassNotifications(appConfig, filtered.classReports()) int totalSent = sendClassNotifications(appConfig, filtered.classReports(), branch)
+ sendApiNotifications(appConfig, filtered.apiReports()); + sendApiNotifications(appConfig, filtered.apiReports(), branch);
if (totalSent == 0 && appConfig.isOnlyOnChange()) { if (totalSent == 0 && appConfig.isOnlyOnChange()) {
System.out.println("无变更,静默退出"); System.out.println("无变更,静默退出");
@@ -155,24 +156,24 @@ public class CodeCheckMain implements Callable<Integer> {
return new ArrayList<>(merged.values()); return new ArrayList<>(merged.values());
} }
private int sendClassNotifications(AppConfig appConfig, List<ClassChangeReport> reports) { private int sendClassNotifications(AppConfig appConfig, List<ClassChangeReport> reports, String branch) {
if (reports.isEmpty()) { if (reports.isEmpty()) {
return 0; return 0;
} }
WeComNotifier notifier = new WeComNotifier(); WeComNotifier notifier = new WeComNotifier();
if (appConfig.isWecomEnabled()) { if (appConfig.isWecomEnabled()) {
return notifier.sendAll(appConfig.getWecomWebhookUrl(), reports, modifier, modifyTime); return notifier.sendAll(appConfig.getWecomWebhookUrl(), reports, modifier, modifyTime, branch);
} }
notifier.logAll(reports, modifier, modifyTime); notifier.logAll(reports, modifier, modifyTime, branch);
return reports.size(); return reports.size();
} }
private int sendApiNotifications(AppConfig appConfig, List<EndpointChangeReport> reports) { private int sendApiNotifications(AppConfig appConfig, List<EndpointChangeReport> reports, String branch) {
if (reports.isEmpty()) { if (reports.isEmpty()) {
return 0; return 0;
} }
ApiChangeNotifier notifier = new ApiChangeNotifier(); ApiChangeNotifier notifier = new ApiChangeNotifier();
return notifier.sendAll(appConfig.getWecomWebhookUrl(), reports, modifier, modifyTime, return notifier.sendAll(appConfig.getWecomWebhookUrl(), reports, modifier, modifyTime, branch,
appConfig.isWecomEnabled()); appConfig.isWecomEnabled());
} }
} }

View File

@@ -18,14 +18,14 @@ public class ApiChangeNotifier {
private final WeComMarkdownSender sender = new WeComMarkdownSender(); private final WeComMarkdownSender sender = new WeComMarkdownSender();
public int sendAll(String webhookUrl, List<EndpointChangeReport> reports, public int sendAll(String webhookUrl, List<EndpointChangeReport> reports,
String modifier, String modifyTime, boolean wecomEnabled) { String modifier, String modifyTime, String branch, boolean wecomEnabled) {
if (reports == null || reports.isEmpty()) { if (reports == null || reports.isEmpty()) {
System.out.println("无 API 变更,不发送通知"); System.out.println("无 API 变更,不发送通知");
return 0; return 0;
} }
int sent = 0; int sent = 0;
for (EndpointChangeReport report : reports) { for (EndpointChangeReport report : reports) {
String markdown = buildMarkdown(report, modifier, modifyTime); String markdown = buildMarkdown(report, modifier, modifyTime, branch);
if (wecomEnabled) { if (wecomEnabled) {
if (sender.send(webhookUrl, markdown)) { if (sender.send(webhookUrl, markdown)) {
sent++; sent++;
@@ -43,20 +43,20 @@ public class ApiChangeNotifier {
return sent; return sent;
} }
public String buildMarkdown(EndpointChangeReport report, String modifier, String modifyTime) { public String buildMarkdown(EndpointChangeReport report, String modifier, String modifyTime, String branch) {
ApiChangeKind kind = report.getChangeKind(); ApiChangeKind kind = report.getChangeKind();
if (kind == ApiChangeKind.PATH_CHANGED if (kind == ApiChangeKind.PATH_CHANGED
|| kind == ApiChangeKind.NEW_ENDPOINT || kind == ApiChangeKind.NEW_ENDPOINT
|| kind == ApiChangeKind.REMOVED_ENDPOINT) { || kind == ApiChangeKind.REMOVED_ENDPOINT) {
return buildPathMarkdown(report, modifier, modifyTime); return buildPathMarkdown(report, modifier, modifyTime, branch);
} }
if (kind == ApiChangeKind.METHOD_CHANGED) { if (kind == ApiChangeKind.METHOD_CHANGED) {
return buildMethodMarkdown(report, modifier, modifyTime); return buildMethodMarkdown(report, modifier, modifyTime, branch);
} }
return buildParamMarkdown(report, modifier, modifyTime); return buildParamMarkdown(report, modifier, modifyTime, branch);
} }
private String buildPathMarkdown(EndpointChangeReport report, String modifier, String modifyTime) { private String buildPathMarkdown(EndpointChangeReport report, String modifier, String modifyTime, String branch) {
String changeLabel; String changeLabel;
switch (report.getChangeKind()) { switch (report.getChangeKind()) {
case NEW_ENDPOINT: case NEW_ENDPOINT:
@@ -72,10 +72,10 @@ public class ApiChangeNotifier {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("# 【API路径变更通知】").append("\n\n"); sb.append("# 【API路径变更通知】").append("\n\n");
sb.append(MarkdownStyles.quoteKvBold("变更类型", MarkdownStyles.colorWarning(changeLabel))).append("\n"); sb.append(MarkdownStyles.quoteKvBold("变更类型", MarkdownStyles.colorWarning(changeLabel))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("路径",
MarkdownStyles.colorInfo(MarkdownStyles.safe(report.getSourceFile())))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("修改人", MarkdownStyles.colorComment(modifier))).append("\n"); sb.append(MarkdownStyles.quoteKvBold("修改人", MarkdownStyles.colorComment(modifier))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("时间", MarkdownStyles.colorComment(modifyTime))).append("\n"); sb.append(MarkdownStyles.quoteKvBold("时间", MarkdownStyles.colorComment(modifyTime))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("路径", MarkdownStyles.colorInfo(MarkdownStyles.safe(report.getSourceFile())))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("分支", MarkdownStyles.colorComment(branch))).append("\n");
sb.append("\n## 【URI变更详情】").append("\n\n"); sb.append("\n## 【URI变更详情】").append("\n\n");
sb.append(MarkdownStyles.quoteKvBold("接口说明", formatEndpointDescription(report))).append("\n"); sb.append(MarkdownStyles.quoteKvBold("接口说明", formatEndpointDescription(report))).append("\n");
appendPathUriLines(sb, report, changeLabel); appendPathUriLines(sb, report, changeLabel);
@@ -103,12 +103,13 @@ public class ApiChangeNotifier {
} }
} }
private String buildMethodMarkdown(EndpointChangeReport report, String modifier, String modifyTime) { private String buildMethodMarkdown(EndpointChangeReport report, String modifier, String modifyTime, String branch) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("# 【API请求方式变更通知】").append("\n\n"); sb.append("# 【API请求方式变更通知】").append("\n\n");
sb.append(MarkdownStyles.quoteKvBold("变更类型", MarkdownStyles.colorWarning("修改请求方式"))).append("\n"); sb.append(MarkdownStyles.quoteKvBold("变更类型", MarkdownStyles.colorWarning("修改请求方式"))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("路径", sb.append(MarkdownStyles.quoteKvBold("路径",
MarkdownStyles.colorInfo(MarkdownStyles.safe(report.getSourceFile())))).append("\n"); MarkdownStyles.colorInfo(MarkdownStyles.safe(report.getSourceFile())))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("分支", MarkdownStyles.colorComment(branch))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("修改人", MarkdownStyles.colorComment(modifier))).append("\n"); sb.append(MarkdownStyles.quoteKvBold("修改人", MarkdownStyles.colorComment(modifier))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("时间", MarkdownStyles.colorComment(modifyTime))).append("\n"); sb.append(MarkdownStyles.quoteKvBold("时间", MarkdownStyles.colorComment(modifyTime))).append("\n");
sb.append("\n## 【请求方式变更详情】").append("\n\n"); sb.append("\n## 【请求方式变更详情】").append("\n\n");
@@ -122,7 +123,7 @@ public class ApiChangeNotifier {
return sb.toString(); return sb.toString();
} }
private String buildParamMarkdown(EndpointChangeReport report, String modifier, String modifyTime) { private String buildParamMarkdown(EndpointChangeReport report, String modifier, String modifyTime, String branch) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("# 【API参数变更通知】").append("\n\n"); sb.append("# 【API参数变更通知】").append("\n\n");
sb.append(MarkdownStyles.quoteKvBold("修改人", MarkdownStyles.colorComment(modifier))).append("\n"); sb.append(MarkdownStyles.quoteKvBold("修改人", MarkdownStyles.colorComment(modifier))).append("\n");
@@ -133,6 +134,7 @@ public class ApiChangeNotifier {
+ MarkdownStyles.inlineCode(report.getUri()))).append("\n"); + MarkdownStyles.inlineCode(report.getUri()))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("路径", sb.append(MarkdownStyles.quoteKvBold("路径",
MarkdownStyles.colorInfo(MarkdownStyles.safe(report.getSourceFile())))).append("\n"); MarkdownStyles.colorInfo(MarkdownStyles.safe(report.getSourceFile())))).append("\n");
sb.append(MarkdownStyles.quoteKvBold("分支", MarkdownStyles.colorComment(branch))).append("\n");
sb.append("\n## 【接口参数变动详情】").append("\n\n"); sb.append("\n## 【接口参数变动详情】").append("\n\n");
appendParameterDetails(sb, report); appendParameterDetails(sb, report);
return sb.toString(); return sb.toString();

View File

@@ -23,6 +23,7 @@ import java.util.Map;
public class GitChangeScanner { public class GitChangeScanner {
private final Path repoRoot; private final Path repoRoot;
private final ClassDeclParser classDeclParser = new ClassDeclParser(); private final ClassDeclParser classDeclParser = new ClassDeclParser();
public static final String UNKNOWN_BRANCH = "未知";
public GitChangeScanner(Path repoRoot) { public GitChangeScanner(Path repoRoot) {
this.repoRoot = repoRoot; this.repoRoot = repoRoot;
@@ -203,6 +204,23 @@ public class GitChangeScanner {
return runGit("diff", "--name-only", oldSha, newSha); return runGit("diff", "--name-only", oldSha, newSha);
} }
/** 获取当前检出的分支名detached HEAD 等情况返回「未知」) */
public String getCurrentBranch() {
try {
List<String> lines = runGit("rev-parse", "--abbrev-ref", "HEAD");
if (lines.isEmpty()) {
return UNKNOWN_BRANCH;
}
String branch = lines.get(0) == null ? "" : lines.get(0).trim();
if (branch.isBlank() || "HEAD".equalsIgnoreCase(branch)) {
return UNKNOWN_BRANCH;
}
return branch;
} catch (IOException e) {
return UNKNOWN_BRANCH;
}
}
/** 在 repoRoot 下执行 git 命令并返回 stdout 行 */ /** 在 repoRoot 下执行 git 命令并返回 stdout 行 */
private List<String> runGit(String... args) throws IOException { private List<String> runGit(String... args) throws IOException {
String[] command = new String[args.length + 3]; String[] command = new String[args.length + 3];

View File

@@ -20,7 +20,8 @@ public class WeComNotifier {
private final WeComMarkdownSender sender = new WeComMarkdownSender(); private final WeComMarkdownSender sender = new WeComMarkdownSender();
/** 逐条发送企微通知,返回成功条数 */ /** 逐条发送企微通知,返回成功条数 */
public int sendAll(String webhookUrl, List<ClassChangeReport> reports, String modifier, String modifyTime) { public int sendAll(String webhookUrl, List<ClassChangeReport> reports,
String modifier, String modifyTime, String branch) {
if (reports == null || reports.isEmpty()) { if (reports == null || reports.isEmpty()) {
System.out.println("无类变更,不发送到企业微信"); System.out.println("无类变更,不发送到企业微信");
return 0; return 0;
@@ -28,7 +29,7 @@ public class WeComNotifier {
int sent = 0; int sent = 0;
for (ClassChangeReport report : reports) { for (ClassChangeReport report : reports) {
String markdown = buildMarkdown(report, modifier, modifyTime); String markdown = buildMarkdown(report, modifier, modifyTime, branch);
if (postMarkdown(webhookUrl, markdown)) { if (postMarkdown(webhookUrl, markdown)) {
sent++; sent++;
System.out.println("已发送类变更通知: " + report.getClassName()); System.out.println("已发送类变更通知: " + report.getClassName());
@@ -41,7 +42,7 @@ public class WeComNotifier {
} }
/** 企微关闭时打印 Markdown 到控制台 */ /** 企微关闭时打印 Markdown 到控制台 */
public void logAll(List<ClassChangeReport> reports, String modifier, String modifyTime) { public void logAll(List<ClassChangeReport> reports, String modifier, String modifyTime, String branch) {
if (reports == null || reports.isEmpty()) { if (reports == null || reports.isEmpty()) {
System.out.println("无类变更,无日志输出"); System.out.println("无类变更,无日志输出");
return; return;
@@ -52,17 +53,17 @@ public class WeComNotifier {
ClassChangeReport report = reports.get(i); ClassChangeReport report = reports.get(i);
System.out.println("========== 类变更 [" + (i + 1) + "/" + reports.size() System.out.println("========== 类变更 [" + (i + 1) + "/" + reports.size()
+ "]: " + report.getClassName() + " =========="); + "]: " + report.getClassName() + " ==========");
System.out.println(buildMarkdown(report, modifier, modifyTime)); System.out.println(buildMarkdown(report, modifier, modifyTime, branch));
System.out.println("========== 结束 =========="); System.out.println("========== 结束 ==========");
} }
System.out.println("" + reports.size() + " 条类变更结果(未发送到企业微信)"); System.out.println("" + reports.size() + " 条类变更结果(未发送到企业微信)");
} }
/** 组装完整 Markdown 正文(引用块 + 换行,每项独立一行) */ /** 组装完整 Markdown 正文(引用块 + 换行,每项独立一行) */
public String buildMarkdown(ClassChangeReport report, String modifier, String modifyTime) { public String buildMarkdown(ClassChangeReport report, String modifier, String modifyTime, String branch) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("# 【类变更通知】").append("\n\n"); sb.append("# 【类变更通知】").append("\n\n");
appendHeader(sb, report, modifier, modifyTime); appendHeader(sb, report, modifier, modifyTime, branch);
sb.append("\n## 【对象变更细节】").append("\n\n"); sb.append("\n## 【对象变更细节】").append("\n\n");
appendChangeDetails(sb, report); appendChangeDetails(sb, report);
@@ -87,11 +88,12 @@ public class WeComNotifier {
/** 头部元信息,每项一行引用(加粗) */ /** 头部元信息,每项一行引用(加粗) */
private void appendHeader(StringBuilder sb, ClassChangeReport report, private void appendHeader(StringBuilder sb, ClassChangeReport report,
String modifier, String modifyTime) { String modifier, String modifyTime, String branch) {
sb.append(quoteKvBold("变更对象", formatChangeTarget(report))).append("\n"); sb.append(quoteKvBold("变更对象", formatChangeTarget(report))).append("\n");
sb.append(quoteKvBold("修改人", colorComment(modifier))).append("\n"); sb.append(quoteKvBold("修改人", colorComment(modifier))).append("\n");
sb.append(quoteKvBold("时间", colorComment(modifyTime))).append("\n"); sb.append(quoteKvBold("时间", colorComment(modifyTime))).append("\n");
sb.append(quoteKvBold("路径", colorComment(report.getSourceFile()))).append("\n"); sb.append(quoteKvBold("路径", colorComment(report.getSourceFile()))).append("\n");
sb.append(quoteKvBold("分支", colorComment(branch))).append("\n");
} }
/** 渲染删除 / 重命名 / 字段变更 */ /** 渲染删除 / 重命名 / 字段变更 */

View File

@@ -14,6 +14,7 @@
变更类型: <font color="warning">**修改请求方式**</font> 变更类型: <font color="warning">**修改请求方式**</font>
路径: <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font> 路径: <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font>
分支: code/code_change_detection_v1.0
修改人: dongzi 修改人: dongzi
修改时间: 2026-06-08 16:30:00 修改时间: 2026-06-08 16:30:00

View File

@@ -15,6 +15,7 @@
- **变更类型:** <font color="warning">**修改参数**</font> - **变更类型:** <font color="warning">**修改参数**</font>
- **URI** **POST** `/apply/clockIn` - **URI** **POST** `/apply/clockIn`
- **路径:** <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font> - **路径:** <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font>
- **分支:** code/code_change_detection_v1.0
--------------------------------------- ---------------------------------------
@@ -51,6 +52,7 @@
- **变更类型:** <font color="warning">**修改参数**</font> - **变更类型:** <font color="warning">**修改参数**</font>
- **URI** **GET** `/apply/clockIn/{id}` - **URI** **GET** `/apply/clockIn/{id}`
- **路径:** <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font> - **路径:** <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font>
- **分支:** code/code_change_detection_v1.0
--------------------------------------- ---------------------------------------

View File

@@ -12,6 +12,7 @@
变更类型: <font color="warning">**修改路径**</font> 变更类型: <font color="warning">**修改路径**</font>
路径: <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font> 路径: <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font>
分支: code/code_change_detection_v1.0
修改人: dongzi 修改人: dongzi
修改时间: 2026-06-08 16:30:00 修改时间: 2026-06-08 16:30:00
@@ -31,6 +32,7 @@
变更类型: <font color="warning">**新增接口**</font> 变更类型: <font color="warning">**新增接口**</font>
路径: <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font> 路径: <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font>
分支: code/code_change_detection_v1.0
修改人: dongzi 修改人: dongzi
修改时间: 2026-06-08 16:30:00 修改时间: 2026-06-08 16:30:00
@@ -52,6 +54,7 @@
变更类型: <font color="warning">**删除接口**</font> 变更类型: <font color="warning">**删除接口**</font>
路径: <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font> 路径: <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font>
分支: code/code_change_detection_v1.0
修改人: dongzi 修改人: dongzi
修改时间: 2026-06-08 16:30:00 修改时间: 2026-06-08 16:30:00

View File

@@ -11,14 +11,14 @@ Push 触发 CI 后,按变更类的后缀(`Dto` / `Vo` / `Entity` / `Model`
| `#` / `##` / `###` | 标题(主区块用【】) | | `#` / `##` / `###` | 标题(主区块用【】) |
| `` `行内代码` `` | 字段名、URI | | `` `行内代码` `` | 字段名、URI |
| `>` | 引用行(每项一行) | | `>` | 引用行(每项一行) |
| `**bold**` | 头部行、统计行加粗 | | `**bold**` | 头部行、统计行加粗 |
| `<font color="info">` | 绿类名、新增、HTTP 方法、新类型 | | `<font color="info">` | 绿类名、新增、HTTP 方法、新类型 |
| `<font color="comment">` | 灰:说明、路径、无影响 | | `<font color="comment">` | 灰:说明、路径、无影响 |
| `<font color="warning">` | 橙:[修改]/[删除]、旧类型、统计数字 | | `<font color="warning">` | 橙:[修改]/[删除]、旧类型、统计数字 |
## 布局约定 ## 布局约定
1. **# 【类变更通知】** — 头部 4 项,每项一行 `>**标签: 值**`(加粗,冒号后两空格);变更对象括号内展示类中文说明(@Schema / @ApiModel / Javadoc无说明则仅类名 1. **# 【类变更通知】** — 头部 5(新增「分支」),每项一行 `>**标签: 值**`(加粗,冒号后两空格);变更对象括号内展示类中文说明(@Schema / @ApiModel / Javadoc无说明则仅类名
2. **## 【对象变更细节】** — 统计行 + 每条变更单行(标签/说明/类型合并) 2. **## 【对象变更细节】** — 统计行 + 每条变更单行(标签/说明/类型合并)
3. **## 【影响范围】** — 各 ### 小节内,每项一行引用 3. **## 【影响范围】** — 各 ### 小节内,每项一行引用
@@ -31,6 +31,7 @@ Push 触发 CI 后,按变更类的后缀(`Dto` / `Vo` / `Entity` / `Model`
> **修改人: <font color="comment">dongzi</font>** > **修改人: <font color="comment">dongzi</font>**
> **时间: <font color="comment">2026-06-07 20:14:35</font>** > **时间: <font color="comment">2026-06-07 20:14:35</font>**
> **路径: <font color="comment">jnpf-ftb/.../ApplyAttendanceChangeDto.java</font>** > **路径: <font color="comment">jnpf-ftb/.../ApplyAttendanceChangeDto.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
``` ```
## 影响范围 ## 影响范围

View File

@@ -15,6 +15,7 @@
> **修改人: <font color="comment">dongzi</font>** > **修改人: <font color="comment">dongzi</font>**
> **时间: <font color="comment">2026-06-07 20:14:35</font>** > **时间: <font color="comment">2026-06-07 20:14:35</font>**
> **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceChangeDto.java</font>** > **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceChangeDto.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
## 【对象变更细节】 ## 【对象变更细节】

View File

@@ -14,6 +14,7 @@
> **修改人: <font color="comment">张三</font>** > **修改人: <font color="comment">张三</font>**
> **时间: <font color="comment">2026-06-07 14:30:00</font>** > **时间: <font color="comment">2026-06-07 14:30:00</font>**
> **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/entity/training/TrainingPositionEntity.java</font>** > **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/entity/training/TrainingPositionEntity.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
## 【对象变更细节】 ## 【对象变更细节】

View File

@@ -14,6 +14,7 @@
> **修改人: <font color="comment">张三</font>** > **修改人: <font color="comment">张三</font>**
> **时间: <font color="comment">2026-06-07 14:30:00</font>** > **时间: <font color="comment">2026-06-07 14:30:00</font>**
> **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/AttendanceRuleModel.java</font>** > **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/AttendanceRuleModel.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
## 【对象变更细节】 ## 【对象变更细节】

View File

@@ -15,6 +15,7 @@
> **修改人: <font color="comment">张三</font>** > **修改人: <font color="comment">张三</font>**
> **时间: <font color="comment">2026-06-07 14:30:00</font>** > **时间: <font color="comment">2026-06-07 14:30:00</font>**
> **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/vo/AttendanceDetailVo.java</font>** > **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/vo/AttendanceDetailVo.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
## 【对象变更细节】 ## 【对象变更细节】

View File

@@ -14,6 +14,7 @@
变更类型: <font color="warning">**修改请求方式**</font> 变更类型: <font color="warning">**修改请求方式**</font>
路径: <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font> 路径: <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font>
分支: code/code_change_detection_v1.0
修改人: dongzi 修改人: dongzi
修改时间: 2026-06-08 16:30:00 修改时间: 2026-06-08 16:30:00

View File

@@ -15,6 +15,7 @@
- **变更类型:** <font color="warning">**修改参数**</font> - **变更类型:** <font color="warning">**修改参数**</font>
- **URI** **POST** `/apply/clockIn` - **URI** **POST** `/apply/clockIn`
- **路径:** <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font> - **路径:** <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font>
- **分支:** code/code_change_detection_v1.0
--------------------------------------- ---------------------------------------
@@ -51,6 +52,7 @@
- **变更类型:** <font color="warning">**修改参数**</font> - **变更类型:** <font color="warning">**修改参数**</font>
- **URI** **GET** `/apply/clockIn/{id}` - **URI** **GET** `/apply/clockIn/{id}`
- **路径:** <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font> - **路径:** <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font>
- **分支:** code/code_change_detection_v1.0
--------------------------------------- ---------------------------------------

View File

@@ -12,6 +12,7 @@
变更类型: <font color="warning">**修改路径**</font> 变更类型: <font color="warning">**修改路径**</font>
路径: <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font> 路径: <font color="info">**jnpf-ftb/jnpf-ftb-biz/src/main/java/jnpf/workflow/controller/ApplyClockInController.java**</font>
分支: code/code_change_detection_v1.0
修改人: dongzi 修改人: dongzi
修改时间: 2026-06-08 16:30:00 修改时间: 2026-06-08 16:30:00
@@ -31,6 +32,7 @@
变更类型: <font color="warning">**新增接口**</font> 变更类型: <font color="warning">**新增接口**</font>
路径: <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font> 路径: <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font>
分支: code/code_change_detection_v1.0
修改人: dongzi 修改人: dongzi
修改时间: 2026-06-08 16:30:00 修改时间: 2026-06-08 16:30:00
@@ -52,6 +54,7 @@
变更类型: <font color="warning">**删除接口**</font> 变更类型: <font color="warning">**删除接口**</font>
路径: <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font> 路径: <font color="info">**jnpf-ftb/.../ApplyClockInController.java**</font>
分支: code/code_change_detection_v1.0
修改人: dongzi 修改人: dongzi
修改时间: 2026-06-08 16:30:00 修改时间: 2026-06-08 16:30:00

View File

@@ -11,14 +11,14 @@ Push 触发 CI 后,按变更类的后缀(`Dto` / `Vo` / `Entity` / `Model`
| `#` / `##` / `###` | 标题(主区块用【】) | | `#` / `##` / `###` | 标题(主区块用【】) |
| `` `行内代码` `` | 字段名、URI | | `` `行内代码` `` | 字段名、URI |
| `>` | 引用行(每项一行) | | `>` | 引用行(每项一行) |
| `**bold**` | 头部行、统计行加粗 | | `**bold**` | 头部行、统计行加粗 |
| `<font color="info">` | 绿类名、新增、HTTP 方法、新类型 | | `<font color="info">` | 绿类名、新增、HTTP 方法、新类型 |
| `<font color="comment">` | 灰:说明、路径、无影响 | | `<font color="comment">` | 灰:说明、路径、无影响 |
| `<font color="warning">` | 橙:[修改]/[删除]、旧类型、统计数字 | | `<font color="warning">` | 橙:[修改]/[删除]、旧类型、统计数字 |
## 布局约定 ## 布局约定
1. **# 【类变更通知】** — 头部 4 项,每项一行 `>**标签: 值**`(加粗,冒号后两空格);变更对象括号内展示类中文说明(@Schema / @ApiModel / Javadoc无说明则仅类名 1. **# 【类变更通知】** — 头部 5(新增「分支」),每项一行 `>**标签: 值**`(加粗,冒号后两空格);变更对象括号内展示类中文说明(@Schema / @ApiModel / Javadoc无说明则仅类名
2. **## 【对象变更细节】** — 统计行 + 每条变更单行(标签/说明/类型合并) 2. **## 【对象变更细节】** — 统计行 + 每条变更单行(标签/说明/类型合并)
3. **## 【影响范围】** — 各 ### 小节内,每项一行引用 3. **## 【影响范围】** — 各 ### 小节内,每项一行引用
@@ -31,6 +31,7 @@ Push 触发 CI 后,按变更类的后缀(`Dto` / `Vo` / `Entity` / `Model`
> **修改人: <font color="comment">dongzi</font>** > **修改人: <font color="comment">dongzi</font>**
> **时间: <font color="comment">2026-06-07 20:14:35</font>** > **时间: <font color="comment">2026-06-07 20:14:35</font>**
> **路径: <font color="comment">jnpf-ftb/.../ApplyAttendanceChangeDto.java</font>** > **路径: <font color="comment">jnpf-ftb/.../ApplyAttendanceChangeDto.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
``` ```
## 影响范围 ## 影响范围

View File

@@ -15,6 +15,7 @@
> **修改人: <font color="comment">dongzi</font>** > **修改人: <font color="comment">dongzi</font>**
> **时间: <font color="comment">2026-06-07 20:14:35</font>** > **时间: <font color="comment">2026-06-07 20:14:35</font>**
> **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceChangeDto.java</font>** > **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceChangeDto.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
## 【对象变更细节】 ## 【对象变更细节】

View File

@@ -14,6 +14,7 @@
> **修改人: <font color="comment">张三</font>** > **修改人: <font color="comment">张三</font>**
> **时间: <font color="comment">2026-06-07 14:30:00</font>** > **时间: <font color="comment">2026-06-07 14:30:00</font>**
> **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/entity/training/TrainingPositionEntity.java</font>** > **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/entity/training/TrainingPositionEntity.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
## 【对象变更细节】 ## 【对象变更细节】

View File

@@ -14,6 +14,7 @@
> **修改人: <font color="comment">张三</font>** > **修改人: <font color="comment">张三</font>**
> **时间: <font color="comment">2026-06-07 14:30:00</font>** > **时间: <font color="comment">2026-06-07 14:30:00</font>**
> **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/AttendanceRuleModel.java</font>** > **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/AttendanceRuleModel.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
## 【对象变更细节】 ## 【对象变更细节】

View File

@@ -15,6 +15,7 @@
> **修改人: <font color="comment">张三</font>** > **修改人: <font color="comment">张三</font>**
> **时间: <font color="comment">2026-06-07 14:30:00</font>** > **时间: <font color="comment">2026-06-07 14:30:00</font>**
> **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/vo/AttendanceDetailVo.java</font>** > **路径: <font color="comment">jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/attendance/vo/AttendanceDetailVo.java</font>**
> **分支: <font color="comment">code/code_change_detection_v1.0</font>**
## 【对象变更细节】 ## 【对象变更细节】