diff --git a/.gitea/1.md b/.gitea/1.md
deleted file mode 100644
index d4047c6..0000000
--- a/.gitea/1.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-
-#### 需求拆解:
-**[类变更类通知]** Vo、Dto、Model、Entity **目前只针对****修改 ****删除也需要**
-
-**需要展示的内容:**
-
-修改人、修改时间 (方便后续前端对接)
-
-对象变更细节:变更了(增删改查)哪些字段 + 字段说明
-
-影响范围:类的变更影响了哪些接口的使用(展示出影响的接口List)
-
- * **入参影响** --> dto改变 --> 展示出影响的接口List
- * **类转换影响** --> dto到entity的转换(这种类型需要 配置开关 判断是否需要检测) --> 展示出Entity类?
- * **对前端的影响** --> Vo的变动 --> 展示出影响的接口List
-
-
-
-#### 一、请求链路
-Push
-
- ↓
-
-Gitea Runner
-
- ↓
-
-Pipeline
-
- ↓
-
-GitDiff获取变更
-
- ↓
-
-JavaParser解析(AST Controller变化\DTO变化\VO变化\ENTITY变化)
-
- ↓
-
-企业微信通知
-
-
-
-#### 二、架构&技术选型
-| 组件 | 方案 |
-| --- | --- |
-| Git Diff | Git |
-| 源码解析 | JavaParser |
-| 引用分析 | JavaParser Symbol Solver |
-| Spring Endpoint扫描 | Spring Mapping AST |
-| 通知 | 企业微信机器人 webhook |
-| CI集成 | Jenkins/GitLab CI |
-
-
-
-
-#### 三、分层说明
-| **层级** | **组件** | **职责** |
-| :--- | :--- | :--- |
-| **触发层** | Git Push | 开发者提交代码,触发 CI 流程 |
-| **CI/CD 层** | Gitea Runner + Pipeline | 监听 Push 事件,编排流水线任务 |
-| **解析层** | GitDiff + JavaParser | 获取 diff,按 AST 解析 Controller/DTO/VO/Entity 变更 |
-| **通知层** | 企业微信 | 将分析结果推送给相关开发人员 |
-
-
-
-
-#### 四、通知模版
-【类变更通知】
-
-■ 变更对象:{ClassName}({类类型:Dto/Vo/Entity/Model})
-■ 修改人:{Modifier}
-■ 修改时间:{ModifyTime}
-
-────────────────────────────────
-▶ 对象变更细节
-────────────────────────────────
-字段变更列表:
- [新增] 字段名: fieldA 说明: {字段说明}
- [删除] 字段名: fieldB 说明: {字段说明}
- [修改] 字段名: fieldC 说明: {原说明 → 新说明 / 类型变更等}
-
-────────────────────────────────
-▶ 影响范围
-────────────────────────────────
-① 入参影响(Dto变更导致接口参数变化):
- 影响接口列表:
- - GET /api/attendance/dayStaList
- - POST /api/attendance/export
- (若无影响则显示:无)
-
-② 类转换影响(Dto → Entity 转换,已开启检测):
- 涉及Entity类:{EntityClassName}
- (若开关关闭或未检测到影响则显示:无 / 未开启检测)
-
-③ 前端影响(Vo变更导致返回结构变化):
- 影响接口列表:
- - GET /api/attendance/detail
- - GET /api/attendance/summary
- (若无影响则显示:无)
-
diff --git a/.gitea/checker/api-templates/11.py b/.gitea/checker/api-templates/11.py
deleted file mode 100644
index d9d3110..0000000
--- a/.gitea/checker/api-templates/11.py
+++ /dev/null
@@ -1,525 +0,0 @@
-"""
-企业微信 Markdown 通知模块。
-支持加粗、颜色(info/comment/warning),新增接口与变更接口使用不同展示模板。
-"""
-
-import json
-import re
-from collections import OrderedDict
-from typing import List, Optional, Tuple
-
-import requests
-
-from comparator import EndpointChangeReport, ParameterChange
-
-# 企微 Markdown 单条上限 4096 字符,留余量
-MAX_MD_LENGTH = 3800
-
-
-def truncate_text(text: str, max_length: int = MAX_MD_LENGTH) -> str:
- """截断超长消息。"""
- if len(text) <= max_length:
- return text
- return text[:max_length] + "\n\n... 消息过长,已截断"
-
-
-def _format_param_change_list(changes: List[ParameterChange]) -> List[str]:
- """生成企微友好的普通参数变更列表(卡片式)。"""
- if not changes:
- return ['无']
- lines = ["", f"共 **{len(changes)}** 项变更", ""]
- for i, change in enumerate(changes, 1):
- lines.append(change.to_markdown_block(i))
- if i < len(changes):
- lines.append("")
- return lines
-
-
-def _body_dto_group_key(change: ParameterChange) -> Tuple[str, str]:
- """类对象变更分组键:(body 参数名, DTO 类名)。"""
- return (change.body_param_name or "body", change.parent_dto or "")
-
-
-def _format_body_field_line(change: ParameterChange, *, is_last: bool) -> List[str]:
- """格式化 DTO 一级字段变更行。"""
- branch = "└─" if is_last else "├─"
- desc = change.description or change.old_description
- type_part = f" · `{change.param_type}`" if change.param_type else ""
- req_part = f" · {change._required_tag()}" if change._required_tag() else ""
- lines = [f"{branch} `{change.param_name}`{type_part}{req_part} {change._change_tag()}"]
- if desc:
- lines.append(f"> 说明:{desc}")
- if change.change_type.value == "modified" and change.detail:
- lines.append(f"> 变更:{change.detail}")
- if change.change_type.value == "renamed":
- lines.append(f"> `{change.old_name}` → `{change.param_name}`")
- return lines
-
-
-def _format_body_dto_groups(changes: List[ParameterChange]) -> List[str]:
- """按 DTO 分组展示 @RequestBody 一级字段。"""
- if not changes:
- return ['无']
-
- groups: OrderedDict[Tuple[str, str], List[ParameterChange]] = OrderedDict()
- for change in changes:
- key = _body_dto_group_key(change)
- groups.setdefault(key, []).append(change)
-
- lines: List[str] = ["", f"共 **{len(groups)}** 个类对象 · **{len(changes)}** 项字段变更", ""]
- for (param_name, dto_name), group in groups.items():
- label = param_name or "body"
- dto_part = f" · `{dto_name}`" if dto_name else ""
- lines.append(f"**{label}**{dto_part}")
- lines.append("")
- for i, change in enumerate(group):
- lines.extend(_format_body_field_line(change, is_last=(i == len(group) - 1)))
- lines.append("")
-
- if lines and lines[-1] == "":
- lines.pop()
- return lines
-
-
-def _format_param_details_section(report: EndpointChangeReport) -> List[str]:
- """生成接口参数变动详情区块。"""
- body_changes = [c for c in report.parameter_changes if c.source == "body"]
- regular_changes = [c for c in report.parameter_changes if c.source != "body"]
- lines = ["", "---------------------------------------", "", "#### 【接口参数变动详情】", ""]
-
- if body_changes:
- lines.append("**类对象变更(一级字段)**")
- lines.extend(_format_body_dto_groups(body_changes))
- lines.append("")
-
- if regular_changes:
- lines.append("**普通参数变更**")
- lines.extend(_format_param_change_list(regular_changes))
- lines.append("")
-
- if not body_changes and not regular_changes:
- lines.append('无')
-
- return lines
-
-
-def _format_endpoint_block(report: EndpointChangeReport) -> str:
- """
- 格式化单个接口块,按模板匹配格式输出。
- 路径显示为 source_file(相对仓库根的完整 .java 路径)。
- """
- change_type = "新增接口" if report.is_new_endpoint else ("删除接口" if report.is_removed_endpoint else "修改参数")
- uri_line = f"**{report.http_method}** `{report.uri}`"
- file_path = report.source_file or report.controller_class
- class_line = f"- **路径:** **{file_path}**"
-
- header = [
- f"- **变更类型:** **{change_type}**",
- f"- **URI:** {uri_line}",
- class_line,
- ]
-
- if report.is_removed_endpoint:
- return "\n".join(header + ["", f"**该接口已被移除**"])
-
- return "\n".join(header + _format_param_details_section(report))
-
-
-def build_markdown_notification(
- reports: List[EndpointChangeReport],
- push_user: str,
- push_time: str,
- llm_summary: Optional[str] = None,
-) -> str:
- """
- 构建完整 Markdown 通知正文。
-
- :param reports: AST 变更报告
- :param push_user: 推送人
- :param push_time: 推送时间
- :param llm_summary: LLM 兼容性摘要(可选,简短)
- :return: Markdown 文本
- """
- parts: List[str] = []
-
- # 所有 API 级变更(新增、修改路径、修改请求方式、删除、参数变更)统一走 model1.md 路径变更通知
- method_changed_reports = [r for r in reports if r.is_method_changed]
- renamed_reports = [r for r in reports if r.is_renamed_endpoint]
- new_reports = [r for r in reports if r.is_new_endpoint]
- # 参数变更报告:只包含「URI/方法未变,仅参数变化」的报告
- # 路径变更 + 参数变更、方法变更 + 参数变更 场景已在上层 comparator 中拆分为独立报告
- changed_reports = [
- r for r in reports
- if not r.is_new_endpoint
- and not r.is_removed_endpoint
- and not r.is_renamed_endpoint
- and not r.is_method_changed
- ]
- removed_reports = [r for r in reports if r.is_removed_endpoint]
-
- # 1. 新增接口 → 走 API路径变更通知
- for report in new_reports:
- path_md = build_path_change_markdown(
- old_uri="-",
- new_uri=report.uri,
- change_type="新增接口",
- push_user=push_user,
- push_time=push_time,
- file_name=report.source_file or report.controller_class,
- )
- parts.append(path_md)
- parts.append("")
-
- # 2. 修改请求方式 → 使用独立的新模板 【API请求方式变更通知】
- for report in method_changed_reports:
- method_md = build_method_change_markdown(
- uri=report.uri,
- old_method=report.old_http_method or "?",
- new_method=report.http_method,
- push_user=push_user,
- push_time=push_time,
- file_name=report.source_file or report.controller_class,
- )
- parts.append(method_md)
- parts.append("")
-
- # 3. 修改路径 → 走 API路径变更通知
- for report in renamed_reports:
- path_md = build_path_change_markdown(
- old_uri=report.old_uri or "-",
- new_uri=report.uri,
- change_type="修改路径",
- push_user=push_user,
- push_time=push_time,
- file_name=report.source_file or report.controller_class,
- )
- parts.append(path_md)
- parts.append("")
-
- # 4. 删除接口 → 走 API路径变更通知
- for report in removed_reports:
- path_md = build_path_change_markdown(
- old_uri=report.uri,
- new_uri="已删除",
- change_type="删除接口",
- push_user=push_user,
- push_time=push_time,
- file_name=report.source_file or report.controller_class,
- )
- parts.append(path_md)
- parts.append("")
-
- # 4. 普通参数变更(非路径变更)仍使用 model.md 格式
- if changed_reports:
- parts.append("# 【API参数变更通知】")
- parts.append(f"- **修改人:** {push_user}")
- parts.append(f"- **修改时间:** {push_time}")
- parts.append("")
- for report in changed_reports:
- parts.append(_format_endpoint_block(report))
- parts.append("")
-
- if llm_summary:
- cleaned = llm_summary.strip()
- # 去掉 LLM 可能输出的「排除框架注入」类说明
- cleaned = re.sub(
- r"(排除Spring MVC框架自动注入的[^)]+)",
- "",
- cleaned,
- )
- cleaned = re.sub(
- r"排除Spring MVC框架自动注入的[`\w/]+[`\w/、/]*[。\.]?",
- "",
- cleaned,
- )
- if cleaned:
- parts.append("### 【兼容性提示】")
- parts.append(cleaned)
-
- return "\n".join(parts).strip()
-
-
-def _split_markdown(text: str, max_len: int) -> List[str]:
- """按 ### 标题块拆分超长 Markdown。"""
- if len(text) <= max_len:
- return [text]
-
- lines = text.split("\n")
- chunks: List[str] = []
- current: List[str] = []
-
- for line in lines:
- if line.startswith("### ") and current and len("\n".join(current)) > 200:
- chunks.append("\n".join(current))
- current = [line]
- else:
- current.append(line)
- if len("\n".join(current)) >= max_len:
- chunks.append("\n".join(current))
- current = []
-
- if current:
- if chunks and len("\n".join(current)) < 200:
- chunks[-1] = chunks[-1] + "\n" + "\n".join(current)
- else:
- chunks.append("\n".join(current))
-
- return chunks or [truncate_text(text)]
-
-
-def _post_wecom_markdown(webhook_url: str, content: str) -> bool:
- """发送企微 Markdown 消息。"""
- if not webhook_url or "YOUR_WECOM_KEY" in webhook_url:
- print("[警告] 未配置有效的企业微信 Webhook URL。")
- print("--- 通知预览 ---")
- print(content[:1000])
- return False
-
- payload = {
- "msgtype": "markdown",
- "markdown": {"content": truncate_text(content)},
- }
-
- try:
- resp = requests.post(
- webhook_url,
- headers={"Content-Type": "application/json"},
- data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
- timeout=10,
- )
- if resp.status_code == 200 and resp.json().get("errcode", 0) == 0:
- return True
- print(f"[错误] 企微返回异常: {resp.status_code} {resp.text}")
- return False
- except requests.RequestException as exc:
- print(f"[错误] 发送企微消息失败: {exc}")
- return False
-
-
-def send_parameter_change_notification(
- webhook_url: str,
- reports: List[EndpointChangeReport],
- push_user: str,
- push_time: str,
- llm_review: Optional[str] = None,
- mentioned_users: Optional[List[str]] = None,
-) -> int:
- """
- 发送 Markdown 格式的接口变更通知。
-
- 严格按变更类型拆分,各自独立构建和发送企微通知:
- - 方法变更 → 独立调用 build_method_change_markdown
- - 路径变更(新增/修改/删除) → 独立调用 build_path_change_markdown
- - 参数变更 → 独立调用 _format_endpoint_block
-
- 不同类型之间完全互不干扰,各自走独立分支。
- """
- if not reports and not llm_review:
- print("无接口参数变更,不发送到企业微信")
- return 0
-
- # 按类型严格分组(互不重叠)
- method_changed_reports = [r for r in reports if r.is_method_changed]
- renamed_reports = [r for r in reports if r.is_renamed_endpoint]
- new_reports = [r for r in reports if r.is_new_endpoint]
- removed_reports = [r for r in reports if r.is_removed_endpoint]
- changed_reports = [
- r for r in reports
- if not r.is_new_endpoint
- and not r.is_removed_endpoint
- and not r.is_renamed_endpoint
- and not r.is_method_changed
- ]
-
- sent = 0
-
- # ========== 1. 请求方式变更通知(独立分支) ==========
- for report in method_changed_reports:
- md = build_method_change_markdown(
- uri=report.uri,
- old_method=report.old_http_method or "?",
- new_method=report.http_method,
- push_user=push_user,
- push_time=push_time,
- file_name=report.source_file or report.controller_class,
- )
- if _post_wecom_markdown(webhook_url, md):
- sent += 1
- print(f"第 {sent} 条通知已发送到企业微信(请求方式变更)")
-
- # ========== 2. 路径变更通知(新增/修改/删除) ==========
- # 新增接口
- for report in new_reports:
- md = build_path_change_markdown(
- old_uri="-",
- new_uri=report.uri,
- change_type="新增接口",
- push_user=push_user,
- push_time=push_time,
- file_name=report.source_file or report.controller_class,
- )
- if report.parameter_changes:
- param_section = "\n".join(_format_param_details_section(report)).strip()
- md = f"{md}\n\n{param_section}"
- if _post_wecom_markdown(webhook_url, md):
- sent += 1
- print(f"第 {sent} 条通知已发送到企业微信(新增接口)")
-
- # 修改路径
- for report in renamed_reports:
- md = build_path_change_markdown(
- old_uri=report.old_uri or "-",
- new_uri=report.uri,
- change_type="修改路径",
- push_user=push_user,
- push_time=push_time,
- file_name=report.source_file or report.controller_class,
- )
- if _post_wecom_markdown(webhook_url, md):
- sent += 1
- print(f"第 {sent} 条通知已发送到企业微信(修改路径)")
-
- # 删除接口
- for report in removed_reports:
- md = build_path_change_markdown(
- old_uri=report.uri,
- new_uri="已删除",
- change_type="删除接口",
- push_user=push_user,
- push_time=push_time,
- file_name=report.source_file or report.controller_class,
- )
- if _post_wecom_markdown(webhook_url, md):
- sent += 1
- print(f"第 {sent} 条通知已发送到企业微信(删除接口)")
-
- # ========== 3. 参数变更通知(独立分支) ==========
- if changed_reports:
- # 构建参数变更通知(只包含参数变更报告,对齐 model.md)
- parts: List[str] = []
- parts.append("# 【API参数变更通知】")
- parts.append(f"- **修改人:** {push_user}")
- parts.append(f"- **修改时间:** {push_time}")
- parts.append("")
- for report in changed_reports:
- parts.append(_format_endpoint_block(report))
- parts.append("")
- if llm_review:
- parts.append("---")
- parts.append("### 兼容性提示")
- parts.append(llm_review.strip())
-
- md = "\n".join(parts).strip()
- if _post_wecom_markdown(webhook_url, md):
- sent += 1
- print(f"第 {sent} 条通知已发送到企业微信(参数变更)")
-
- if sent > 0:
- print(f"总共发送 {sent} 条通知到企业微信")
- return sent
-
-
-def build_path_change_markdown(
- old_uri: str,
- new_uri: str,
- change_type: str,
- push_user: str,
- push_time: str,
- file_name: str,
-) -> str:
- """构建 API路径变更通知,完全匹配 model1.md 模板,并加强视觉区分。
-
- 支持的 change_type:
- - 新增接口 / 删除接口 / 修改路径 / 修改请求方式
-
- 改进点:
- - 标题使用【】风格
- - 头部信息缩进 + 颜色高亮
- - URI 详情使用列表(更直观)
- - 「修改请求方式」额外展示方法变更
- """
- # 变更类型高亮
- type_highlight = f"**{change_type}**"
-
- # 路径高亮
- class_highlight = f"**{file_name}**"
-
- # 根据变更类型优化 URI 展示
- if change_type == "新增接口":
- old_display = "`-`"
- new_display = f"**`{new_uri}`** ← **新增**"
- elif change_type == "删除接口":
- old_display = f"**`{old_uri}`** ← **已删除**"
- new_display = "`已删除`"
- else: # 修改路径
- old_display = f"~~`{old_uri}`~~ ← **旧路径**"
- new_display = f"**`{new_uri}`** ← **新路径**"
-
- parts = [
- "# 【API路径变更通知】",
- "",
- f" 变更类型: {type_highlight}",
- f" 路径: {class_highlight}",
- f" 修改人: {push_user}",
- f" 修改时间: {push_time}",
- "",
- "---------------------------------------",
- "",
- "#### 【URI变更详情】",
- f"- **原路径:** {old_display}",
- f"- **新路径:** {new_display}",
- "",
- ]
- return "\n".join(parts).strip()
-
-
-def build_method_change_markdown(
- uri: str,
- old_method: str,
- new_method: str,
- push_user: str,
- push_time: str,
- file_name: str,
-) -> str:
- """构建【API请求方式变更通知】独立模板。
-
- 格式参考 model1.md,但专门针对 HTTP 方法变更场景设计,
- 突出「原请求方式 → 新请求方式」的对比。
- """
- type_highlight = '**修改请求方式**'
- class_highlight = f'**{file_name}**'
- uri_highlight = f'**`{uri}`**'
- old_m = f'**{old_method}**'
- new_m = f'**{new_method}**'
-
- parts = [
- "# 【API请求方式变更通知】",
- "",
- f" 变更类型: {type_highlight}",
- f" 路径: {class_highlight}",
- f" 修改人: {push_user}",
- f" 修改时间: {push_time}",
- "",
- "---------------------------------------",
- "",
- "#### 【请求方式变更详情】",
- f"- **URI:** {uri_highlight}",
- f"- **原请求方式:** {old_m}",
- f"- **新请求方式:** {new_m} ← **请求方式已变更**",
- "",
- ]
- return "\n".join(parts).strip()
-
-
-def send_path_change_notification(
- webhook_url: str,
- old_uri: str,
- new_uri: str,
- change_type: str,
- push_user: str,
- push_time: str,
- file_name: str,
-) -> bool:
- """发送路径变更通知。"""
- md = build_path_change_markdown(old_uri, new_uri, change_type, push_user, push_time, file_name)
- return _post_wecom_markdown(webhook_url, md)
diff --git a/.gitea/checker/prompt.md b/.gitea/checker/prompt.md
deleted file mode 100644
index 8578056..0000000
--- a/.gitea/checker/prompt.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-
-#### 需求拆解:
-**[类变更类通知]** Vo、Dto、Model、Entity **目前只针对****修改 ****删除也需要**
-
-**需要展示的内容:**
-
-修改人、修改时间 (方便后续前端对接)
-
-对象变更细节:变更了(增删改查)哪些字段 + 字段说明
-
-影响范围:类的变更影响了哪些接口的使用(展示出影响的接口List)
-
- * **入参影响** --> dto改变 --> 展示出影响的接口List
- * **类转换影响** --> dto到entity的转换(这种类型需要 配置开关 判断是否需要检测) --> 展示出Entity类?
- * **对前端的影响** --> Vo的变动 --> 展示出影响的接口List
-
-
-
-#### 一、请求链路
-Push
-
- ↓
-
-Gitea + act_runner
-
- ↓
-
-Pipeline
-
- ↓
-
-GitDiff获取变更
-
- ↓
-
-JavaParser解析(AST Controller变化\DTO变化\VO变化\ENTITY变化)
-
- ↓
-
-企业微信通知
-
-
-
-#### 二、架构&技术选型
-| 组件 | 方案 |
-| --- | --- |
-| Git Diff | Git |
-| 源码解析 | JavaParser |
-| 引用分析 | JavaParser Symbol Solver |
-| Spring Endpoint扫描 | Spring Mapping AST |
-| 通知 | 企业微信机器人 webhook |
-| CI集成 | Gitea Actions |
-
-
-
-
-#### 三、分层说明
-| **层级** | **组件** | **职责** |
-| :--- | :--- | :--- |
-| **触发层** | Git Push | 开发者提交代码,触发 CI 流程 |
-| **CI/CD 层** | 本地 Gitea + act_runner | 监听 Push 事件,编排流水线任务 |
-| **解析层** | GitDiff + JavaParser | 获取 diff,按 AST 解析 Controller/DTO/VO/Entity 变更 |
-| **通知层** | 企业微信 | 将分析结果推送给相关开发人员 |
-
-
-
-
-#### 四、通知模版
-
-模版已按类类型拆分至 [notify-templates/](./notify-templates/) 目录:
-
-| 类类型 | 模版文件 | 影响范围段落 |
-|--------|----------|--------------|
-| Dto | [dto.md](./notify-templates/dto.md) | request + 类转换 |
-| Vo | [vo.md](./notify-templates/vo.md) | response + 类转换 |
-| Entity | [entity.md](./notify-templates/entity.md) | 类转换 |
-| Model | [model.md](./notify-templates/model.md) | 类转换 |
-
-详见 [notify-templates/README.md](./notify-templates/README.md)(含企微颜色样式、路径、字段说明规则)。
-
diff --git a/.gitea/workflows/code-check.yml b/.gitea/workflows/code-check.yml
index 989dc4c..6346cdf 100644
--- a/.gitea/workflows/code-check.yml
+++ b/.gitea/workflows/code-check.yml
@@ -1,53 +1 @@
-name: CodeChecker 变更检测
-run-name: ${{ gitea.actor }}的CodeChecker变更检测
-
-on:
- push:
- branches:
- - class-check
- workflow_dispatch:
-
-jobs:
- code-check:
- if: ${{ gitea.ref != 'refs/heads/pre' && gitea.ref != 'refs/heads/dev' && gitea.ref != 'refs/heads/master-2.0' }}
- runs-on: jdk11
-
- steps:
- - name: 检出代码
- run: |
- git config --global http.sslVerify false
- git clone "https://${{ gitea.token }}@git.niujiekeji.com/${{ gitea.repository }}.git" .
- git checkout ${{ gitea.sha }}
-
- - name: 检查配置文件与预编译 jar
- run: |
- if [ ! -f .gitea/config.yaml ]; then
- echo "错误: 缺少 .gitea/config.yaml"
- exit 1
- fi
- if [ ! -f .gitea/workflows/code-checker.jar ]; then
- echo "错误: 缺少 .gitea/workflows/code-checker.jar"
- echo "请本地执行: powershell -File scripts/build-code-checker.ps1"
- exit 1
- fi
-
- - name: 验证 JDK
- run: |
- echo "Java: $(java -version 2>&1 | head -1)"
-
- - name: 执行 CodeChecker 变更检测
- run: |
- OLD_SHA=$(git rev-parse HEAD~1 2>/dev/null || echo "")
- if [ -z "$OLD_SHA" ]; then
- echo "首次提交,跳过变更检测"
- exit 0
- fi
- COMMIT_TIME=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S')
- java -jar .gitea/workflows/code-checker.jar \
- --config .gitea/config.yaml \
- --repo-root . \
- --old-sha "$OLD_SHA" \
- --new-sha "$(git rev-parse HEAD)" \
- --modifier "${{ gitea.actor }}" \
- --modify-time "$COMMIT_TIME"
-
\ No newline at end of file
+name: CodeChecker 变更检测
run-name: ${{ gitea.actor }}的CodeChecker变更检测
on:
push:
branches:
- class-check
workflow_dispatch:
jobs:
code-check:
if: ${{ gitea.ref != 'refs/heads/pre' && gitea.ref != 'refs/heads/dev' && gitea.ref != 'refs/heads/master-2.0' }}
runs-on: jdk11
steps:
- name: 检出代码
run: |
git config --global http.sslVerify false
git clone "https://${{ gitea.token }}@git.niujiekeji.com/${{ gitea.repository }}.git" .
git checkout ${{ gitea.sha }}
- name: 检查配置文件与预编译 jar
run: |
if [ ! -f .gitea/config.yaml ]; then
echo "错误: 缺少 .gitea/config.yaml"
exit 1
fi
if [ ! -f .gitea/workflows/code-checker.jar ]; then
echo "错误: 缺少 .gitea/workflows/code-checker.jar"
echo "请本地执行: powershell -File scripts/build-code-checker.ps1"
exit 1
fi
- name: 验证 JDK
run: |
echo "Java: $(java -version 2>&1 | head -1)"
- name: 执行 CodeChecker 变更检测
run: |
OLD_SHA=$(git rev-parse HEAD~1 2>/dev/null || echo "")
if [ -z "$OLD_SHA" ]; then
echo "首次提交,跳过变更检测"
exit 0
fi
COMMIT_TIME=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S')
java -jar .gitea/workflows/code-checker.jar \
--config .gitea/config.yaml \
--repo-root . \
--old-sha "$OLD_SHA" \
--new-sha "$(git rev-parse HEAD)" \
--modifier "${{ gitea.actor }}" \
--modify-time "$COMMIT_TIME"
\ No newline at end of file
diff --git a/gitea-runner/config.yaml b/gitea-runner/config.yaml
deleted file mode 100644
index 7c2c796..0000000
--- a/gitea-runner/config.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-log:
- level: info
-
-runner:
- file: .runner
- capacity: 2
- timeout: 3h
- labels:
- - "ubuntu-latest:docker://ai-check-gitea-job:latest"
- - "linux:docker://ai-check-gitea-job:latest"
diff --git a/jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceOutsideDto.java b/jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceOutsideDto.java
index c74f1ec..61dc0a7 100644
--- a/jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceOutsideDto.java
+++ b/jnpf-ftb/jnpf-ftb-entity/src/main/java/jnpf/model/workflow/dto/ApplyAttendanceOutsideDto.java
@@ -17,7 +17,7 @@ import java.util.List;
public class ApplyAttendanceOutsideDto {
/** 审批id */
- private String taskId;
+ private Integer taskId;
/** 流程标题 */
private String flowTitle;
/** 申请人id */