Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Pangea-Agent
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Gavin-Group
Pangea-Agent
Commits
998f1d1d
Commit
998f1d1d
authored
Dec 21, 2025
by
ligaowei
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote changes
parents
8b605b53
23ae72a7
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
0 additions
and
887 deletions
+0
-887
HiAgent定时器模块代码优化计划.md
.trae/documents/HiAgent定时器模块代码优化计划.md
+0
-123
HiAgent定时器模块设计方案.md
.trae/documents/HiAgent定时器模块设计方案.md
+0
-428
实现POP3邮件工具类.md
.trae/documents/实现POP3邮件工具类.md
+0
-41
工具类参数配置机制实现方案.md
.trae/documents/工具类参数配置机制实现方案.md
+0
-295
No files found.
.trae/documents/HiAgent定时器模块代码优化计划.md
deleted
100644 → 0
View file @
8b605b53
# HiAgent定时器模块代码优化计划
## 1. 组件结构设计不一致问题
### 1.1 后端重构计划
-
**创建TimerHistoryController**
:负责处理执行历史API端点
-
**实现HistoryService**
:管理执行历史相关的业务逻辑
-
**移除TimerController中的执行历史代码**
:将执行历史功能分离
-
**完善查询功能**
:完成所有标记为TODO的查询功能
### 1.2 具体实现步骤
1.
创建
`TimerHistoryController.java`
,包含以下API端点:
-
GET /api/v1/timer-history - 获取执行历史列表
-
GET /api/v1/timer-history/{timerId} - 获取指定定时器的执行历史
-
GET /api/v1/timer-history/{id}/detail - 获取执行历史详情
2.
创建
`HistoryService.java`
,实现以下功能:
-
执行历史的查询、统计和管理
-
支持多条件筛选和分页查询
-
执行历史的详情查询
3.
从
`TimerController.java`
中移除执行历史相关的代码
4.
完善数据库查询功能,确保所有执行历史查询都能正常工作
## 2. 前端组件实现缺失问题
### 2.1 实现CronEditor.vue组件
-
**功能**
:提供可视化的Cron表达式编辑界面
-
**设计**
:支持秒级、分钟级、小时级、每日、每周、每月等多种配置方式
-
**交互**
:实时生成和验证Cron表达式,支持可视化展示
### 2.2 实现TimerHistory.vue页面
-
**功能**
:显示定时器执行历史
-
**设计**
:包含筛选条件、执行历史表格、详情对话框
-
**交互**
:支持多条件筛选、排序、查看执行详情
### 2.3 具体实现步骤
1.
创建
`CronEditor.vue`
组件,包含:
-
可视化配置界面
-
Cron表达式生成和验证逻辑
-
与现有表单的集成
2.
创建
`TimerHistory.vue`
页面,包含:
-
筛选条件区域(定时器ID、时间范围、执行结果)
-
执行历史表格(支持排序和分页)
-
执行详情对话框
3.
更新
`TimerManagement.vue`
,集成CronEditor组件
## 3. 定时任务执行逻辑不完整问题
### 3.1 增强TimerJob执行流程
-
**确保完整执行流程**
:配置检索 → 模板解析 → Agent调用 → 历史记录 → 结果处理
-
**完善错误处理**
:在每个执行阶段添加适当的错误处理
-
**增强执行历史记录**
:记录更详细的执行信息
### 3.2 具体实现步骤
1.
增强
`TimerJob.executeInternal()`
方法,确保完整的执行流程
2.
完善
`TimerService.executeTimerTask()`
方法,添加更详细的执行历史记录
3.
在每个执行阶段添加try-catch块,确保错误能够被正确捕获和记录
4.
实现执行结果的完整处理和记录
## 4. 性能优化措施未实现问题
### 4.1 实现缓存机制
-
**缓存Agent列表**
:减少频繁查询数据库
-
**缓存提示词模板**
:提高模板渲染效率
### 4.2 实现定期清理任务
-
**创建定时清理任务**
:定期清理过期的执行历史记录
### 4.3 数据库优化
-
**添加索引**
:为执行历史表添加适当的索引
-
**优化查询语句**
:确保查询效率
### 4.4 任务调度优化
-
**优化Quartz配置**
:调整线程池大小和任务执行策略
### 4.5 具体实现步骤
1.
添加缓存配置,使用Spring Cache实现Agent列表和提示词模板的缓存
2.
创建定时清理任务,使用Spring Scheduler定期清理过期的执行历史
3.
为
`hiagent_timer_execution_history`
表添加索引
4.
优化Quartz配置,调整线程池大小和任务执行策略
## 5. 测试计划
### 5.1 单元测试
-
为新创建的Controller和Service添加单元测试
-
测试执行历史查询功能
-
测试Cron表达式生成和验证
### 5.2 集成测试
-
测试定时器执行的完整流程
-
测试缓存机制的有效性
-
测试定期清理任务的执行
### 5.3 性能测试
-
测试大量定时器同时执行的性能
-
测试执行历史查询的性能
-
测试缓存机制对系统性能的提升
## 6. 代码质量保证
-
遵循项目的编码规范
-
确保代码的可读性和可维护性
-
添加适当的注释
-
确保向后兼容
## 7. 部署计划
-
更新API文档
-
提供前端组件的使用说明
-
确保所有优化措施都能正常工作
## 8. 预期效果
-
组件结构符合设计文档要求
-
前端功能完整,用户体验提升
-
定时任务执行逻辑完整,错误处理完善
-
系统性能显著提升
-
代码质量和可维护性提高
\ No newline at end of file
.trae/documents/HiAgent定时器模块设计方案.md
deleted
100644 → 0
View file @
8b605b53
# HiAgent定时器模块设计方案
## 1. 模块概述
### 1.1 功能简介
定时器模块是HiAgent系统的扩展组件,用于提供定时自动执行Agent任务的能力。该模块允许用户创建、编辑和管理多个独立定时器,每个定时器可配置不同的执行周期、目标Agent和提示词模板,实现自动化任务执行。
### 1.2 核心功能
-
多定时器管理:支持创建、编辑、删除多个独立定时器
-
灵活的周期配置:支持秒级精度的自定义执行周期
-
Agent自动调用:定时触发指定Agent执行任务
-
提示词模板管理:支持预设提示词模板及动态参数替换
-
状态监控:实时显示定时器运行状态和执行历史
### 1.3 系统架构图
```
┌─────────────────────────────────────────────────────────────────────────┐
│ HiAgent系统 │
├───────────────┬─────────────────────────────────────────────────────────┤
│ 前端模块 │ 后端模块 │
├───────────────┼─────────────────────────────────────────────────────────┤
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────┐ │
│ 定时器管理 │ │ 定时器API层 │ │ 定时器服务层 │ │ 任务 │ │
│ UI组件 │ │ (TimerController)│───│ (TimerService) │───│ 调度器 │ │
│ │ └─────────────────┘ └─────────────────┘ │ (Quartz)│ │
│ │ └─────────┘ │
│ │ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
│ 提示词模板 │ │ 提示词服务层 │ │ Agent服务层 │ │ │
│ 管理组件 │ │ (PromptService) │───│ (AgentService) │◄─────────┘ │
│ │ └─────────────────┘ └─────────────────┘ │
│ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ │
│ 执行历史 │ │ 历史记录API │ │ 历史记录服务 │ │
│ 查看组件 │ │ (HistoryController)│───│ (HistoryService) │ │
│ │ └─────────────────┘ └─────────────────┘ │
└───────────────┴─────────────────────────────────────────────────────────┘
```
## 2. 数据结构设计
### 2.1 核心实体类
#### 2.1.1 定时器配置(TimerConfig)
```
java
public
class
TimerConfig
{
private
Long
id
;
// 唯一标识
private
String
name
;
// 定时器名称
private
String
description
;
// 描述
private
String
cronExpression
;
// Cron表达式(支持秒级)
private
boolean
enabled
;
// 启用状态
private
Long
agentId
;
// 关联的Agent ID
private
String
agentName
;
// 关联的Agent名称
private
String
promptTemplate
;
// 提示词模板
private
String
paramsJson
;
// 动态参数配置(JSON格式)
private
Date
createTime
;
// 创建时间
private
Date
updateTime
;
// 更新时间
private
String
createdBy
;
// 创建人
}
```
#### 2.1.2 定时器执行历史(TimerExecutionHistory)
```
java
public
class
TimerExecutionHistory
{
private
Long
id
;
// 唯一标识
private
Long
timerId
;
// 关联的定时器ID
private
String
timerName
;
// 定时器名称
private
Date
executionTime
;
// 执行时间
private
boolean
success
;
// 执行结果
private
String
result
;
// 执行结果详情
private
String
errorMessage
;
// 错误信息
private
Long
executionDuration
;
// 执行时长(毫秒)
}
```
#### 2.1.3 提示词模板(PromptTemplate)
```
java
public
class
PromptTemplate
{
private
Long
id
;
// 唯一标识
private
String
name
;
// 模板名称
private
String
description
;
// 描述
private
String
templateContent
;
// 模板内容
private
String
paramSchema
;
// 参数Schema定义(JSON格式)
private
Date
createTime
;
// 创建时间
private
Date
updateTime
;
// 更新时间
private
String
createdBy
;
// 创建人
}
```
### 2.2 数据持久化
-
使用MySQL数据库存储定时器配置、执行历史和提示词模板
-
采用JPA/Hibernate框架实现ORM映射
-
表名设计:
-
`hiagent_timer_config`
:存储定时器配置
-
`hiagent_timer_execution_history`
:存储定时器执行历史
-
`hiagent_prompt_template`
:存储提示词模板
## 3. 后端模块设计
### 3.1 模块结构
```
pangea.hiagent.timer/
├── controller/ # API控制器
│ ├── TimerController.java # 定时器管理API
│ ├── TimerHistoryController.java # 执行历史API
│ └── PromptTemplateController.java # 提示词模板API
├── service/ # 业务逻辑层
│ ├── TimerService.java # 定时器核心服务
│ ├── TimerHistoryService.java # 执行历史服务
│ └── PromptTemplateService.java # 提示词模板服务
├── scheduler/ # 任务调度层
│ ├── TimerScheduler.java # 定时器调度器
│ └── TimerJob.java # 定时任务执行器
├── model/ # 数据模型
│ ├── TimerConfig.java # 定时器配置实体
│ ├── TimerExecutionHistory.java # 执行历史实体
│ └── PromptTemplate.java # 提示词模板实体
├── dto/ # 数据传输对象
│ ├── TimerConfigDto.java # 定时器配置DTO
│ ├── TimerExecutionHistoryDto.java # 执行历史DTO
│ └── PromptTemplateDto.java # 提示词模板DTO
└── repository/ # 数据访问层
├── TimerConfigRepository.java # 定时器配置DAO
├── TimerExecutionHistoryRepository.java # 执行历史DAO
└── PromptTemplateRepository.java # 提示词模板DAO
```
### 3.2 核心服务设计
#### 3.2.1 TimerService
-
**核心职责**
:定时器的创建、编辑、删除、启用/禁用等管理操作
-
**主要方法**
:
-
`createTimer(TimerConfigDto config)`
:创建定时器
-
`updateTimer(Long id, TimerConfigDto config)`
:更新定时器
-
`deleteTimer(Long id)`
:删除定时器
-
`enableTimer(Long id)`
:启用定时器
-
`disableTimer(Long id)`
:禁用定时器
-
`getTimerById(Long id)`
:获取定时器详情
-
`listTimers()`
:获取定时器列表
#### 3.2.2 TimerScheduler
-
**核心职责**
:管理定时任务的调度和执行
-
**技术选型**
:Quartz Scheduler(支持复杂Cron表达式和分布式部署)
-
**主要功能**
:
-
动态添加/更新/删除定时任务
-
支持秒级精度的任务调度
-
任务执行状态监控
-
故障恢复机制
#### 3.2.3 TimerJob
-
**核心职责**
:执行定时任务逻辑
-
**主要流程**
:
1.
获取定时器配置
2.
解析提示词模板并替换动态参数
3.
调用AgentService执行任务
4.
记录执行历史
5.
处理执行结果
#### 3.2.4 PromptTemplateService
-
**核心职责**
:提示词模板的管理和参数替换
-
**主要方法**
:
-
`createTemplate(PromptTemplateDto template)`
:创建提示词模板
-
`updateTemplate(Long id, PromptTemplateDto template)`
:更新模板
-
`deleteTemplate(Long id)`
:删除模板
-
`getTemplateById(Long id)`
:获取模板详情
-
`listTemplates()`
:获取模板列表
-
`renderTemplate(String templateContent, Map<String, Object> params)`
:渲染模板,替换动态参数
### 3.3 API接口设计
| API路径 | 方法 | 功能描述 | 请求体 | 响应体 |
|---------|------|----------|--------|--------|
| /api/timers | POST | 创建定时器 | TimerConfigDto | TimerConfigDto |
| /api/timers/{id} | PUT | 更新定时器 | TimerConfigDto | TimerConfigDto |
| /api/timers/{id} | DELETE | 删除定时器 | - | ApiResponse |
| /api/timers/{id}/enable | POST | 启用定时器 | - | ApiResponse |
| /api/timers/{id}/disable | POST | 禁用定时器 | - | ApiResponse |
| /api/timers | GET | 获取定时器列表 | - | List
<TimerConfigDto>
|
| /api/timers/{id} | GET | 获取定时器详情 | - | TimerConfigDto |
| /api/timers/history | GET | 获取执行历史 | - | List
<TimerExecutionHistoryDto>
|
| /api/timers/{id}/history | GET | 获取指定定时器执行历史 | - | List
<TimerExecutionHistoryDto>
|
| /api/prompt-templates | POST | 创建提示词模板 | PromptTemplateDto | PromptTemplateDto |
| /api/prompt-templates/{id} | PUT | 更新提示词模板 | PromptTemplateDto | PromptTemplateDto |
| /api/prompt-templates/{id} | DELETE | 删除提示词模板 | - | ApiResponse |
| /api/prompt-templates | GET | 获取提示词模板列表 | - | List
<PromptTemplateDto>
|
| /api/prompt-templates/{id} | GET | 获取提示词模板详情 | - | PromptTemplateDto |
## 4. 前端模块设计
### 4.1 页面结构
#### 4.1.1 定时器管理页面(TimerManagement.vue)
-
**布局**
:
-
顶部:操作按钮(创建定时器、刷新列表)
-
中部:定时器列表表格
-
底部:分页控件
-
**表格列**
:
-
名称、描述、周期、关联Agent、状态、创建时间、操作(编辑、删除、启用/禁用)
-
**交互**
:
-
点击"创建定时器"打开编辑弹窗
-
点击"编辑"打开编辑弹窗
-
点击"删除"弹出确认对话框
-
点击"启用/禁用"切换定时器状态
#### 4.1.2 定时器编辑弹窗(TimerEditDialog.vue)
-
**布局**
:
-
基本信息:名称、描述、创建人
-
周期配置:Cron表达式输入框、可视化Cron编辑器
-
Agent配置:Agent下拉选择器
-
提示词配置:提示词模板选择器、模板编辑区、参数配置区
-
**交互**
:
-
支持直接输入Cron表达式或使用可视化编辑器
-
实时验证Cron表达式有效性
-
支持从模板库选择提示词模板
-
支持在线编辑提示词模板
-
支持动态添加/删除参数
#### 4.1.3 执行历史页面(TimerHistory.vue)
-
**布局**
:
-
顶部:筛选条件(定时器ID、时间范围、执行结果)
-
中部:执行历史表格
-
底部:分页控件
-
**表格列**
:
-
定时器名称、执行时间、执行结果、执行时长、操作(查看详情)
-
**交互**
:
-
支持多条件筛选
-
点击"查看详情"弹出执行详情对话框
### 4.2 组件关系图
```
┌─────────────────────────────────────────────────────────┐
│ 定时器管理页面 │
│ (TimerManagement.vue) │
├─────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌───────────┐ │
│ │ 定时器列表 │ │ 定时器编辑弹窗 │ │ 执行历史 │ │
│ │ (TimerList.vue)│ │(TimerEditDialog.vue)│(History.vue)│ │
│ └─────────────────┘ └─────────────────┘ └───────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Cron编辑器 │ │ 提示词模板管理 │ │
│ │ (CronEditor.vue)│ │(PromptTemplate.vue)│ │
│ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
### 4.3 核心组件设计
#### 4.3.1 Cron编辑器组件(CronEditor.vue)
-
**功能**
:提供可视化的Cron表达式编辑界面
-
**支持的Cron类型**
:
-
每秒执行
-
每分钟执行
-
每小时执行
-
每日执行
-
每周执行
-
每月执行
-
自定义Cron表达式
-
**交互**
:
-
提供下拉选择和输入框组合
-
实时生成和验证Cron表达式
-
支持Cron表达式的解析和可视化展示
#### 4.3.2 提示词模板组件(PromptTemplate.vue)
-
**功能**
:管理提示词模板和参数配置
-
**特性**
:
-
支持从模板库选择模板
-
支持在线编辑模板内容
-
支持动态添加/删除参数
-
支持参数类型校验
-
实时预览渲染后的提示词
### 4.4 状态管理
-
使用Pinia进行状态管理
-
定义
`timerStore`
存储定时器相关状态:
-
定时器列表
-
当前编辑的定时器
-
执行历史
-
提示词模板列表
-
加载状态和错误信息
## 5. Agent调用机制
### 5.1 调用流程
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ TimerJob触发 │────▶│ TimerService │────▶│ AgentService │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ ReActService │
└─────────────────┘
│
▼
┌─────────────────┐
│ LLM模型调用 │
└─────────────────┘
│
▼
┌─────────────────┐
│ 执行结果记录 │
└─────────────────┘
```
### 5.2 提示词渲染与参数替换
#### 5.2.1 模板语法
采用Mustache风格的模板语法,支持:
-
简单变量替换:
`{{variable}}`
-
条件判断:
`{{#condition}}内容{{/condition}}`
-
循环:
`{{#list}}{{.}}{{/list}}`
-
默认值:
`{{variable || '默认值'}}`
#### 5.2.2 内置参数
系统自动提供以下内置参数:
-
`{{currentTime}}`
:当前时间(ISO格式)
-
`{{currentDate}}`
:当前日期
-
`{{timerName}}`
:定时器名称
-
`{{executionCount}}`
:执行次数
#### 5.2.3 自定义参数
用户可在创建定时器时配置自定义参数,支持以下类型:
-
字符串
-
数字
-
布尔值
-
日期时间
-
JSON对象
## 6. 与现有系统集成
### 6.1 集成点
| 集成模块 | 集成方式 | 主要功能 |
|---------|----------|----------|
| Agent服务 | 直接调用 | 获取Agent列表、执行Agent任务 |
| 认证系统 | JWT令牌 | 确保API访问安全 |
| 日志系统 | 日志记录 | 记录定时器执行日志 |
| 数据库 | JPA/Hibernate | 数据持久化 |
### 6.2 依赖关系
| 依赖模块 | 版本要求 | 用途 |
|---------|----------|------|
| Spring Boot | 2.7.x+ | 基础框架 |
| Quartz Scheduler | 2.3.x+ | 任务调度 |
| Vue 3 | 3.4.x+ | 前端框架 |
| Element Plus | 2.4.x+ | UI组件库 |
| MySQL | 8.0.x+ | 数据库 |
## 7. 性能与扩展性设计
### 7.1 性能优化
-
**任务调度优化**
:使用Quartz的线程池机制,限制并发执行的任务数量
-
**数据库优化**
:
-
为执行历史表添加索引
-
定期清理过期的执行历史记录
-
使用分页查询减少数据传输量
-
**缓存优化**
:
-
缓存Agent列表和提示词模板
-
缓存定时器配置,减少数据库查询
### 7.2 扩展性设计
-
**模块化设计**
:采用模块化架构,便于后续扩展新功能
-
**插件化支持**
:支持自定义任务执行器插件
-
**分布式支持**
:基于Quartz的分布式特性,支持多实例部署
-
**API扩展性**
:提供RESTful API,便于与其他系统集成
## 8. 安全设计
### 8.1 认证与授权
-
使用JWT令牌保护API访问
-
基于角色的访问控制(RBAC)
-
限制定时器创建和管理权限
### 8.2 数据安全
-
敏感数据加密存储
-
执行历史数据脱敏处理
-
防止SQL注入和XSS攻击
### 8.3 任务安全
-
限制单个定时器的执行频率
-
设置任务执行超时机制
-
防止任务无限循环执行
## 9. 监控与日志
### 9.1 监控指标
-
定时器执行成功率
-
平均执行时间
-
任务队列长度
-
系统资源使用率
### 9.2 日志记录
-
记录定时器的创建、编辑、删除操作
-
记录定时器的启用、禁用状态变化
-
记录每次任务执行的详细日志
-
记录执行过程中的错误信息
## 10. 部署与维护
### 10.1 部署方式
-
与HiAgent主系统一起部署
-
支持Docker容器化部署
-
支持Kubernetes集群部署
### 10.2 配置管理
-
定时器相关配置集中管理
-
支持动态调整配置参数
-
配置变更日志记录
### 10.3 维护建议
-
定期清理过期的执行历史记录
-
监控系统资源使用率
-
定期备份定时器配置数据
-
建立完善的告警机制
## 11. 总结
HiAgent定时器模块是一个功能完整、设计合理的扩展组件,它为HiAgent系统提供了定时自动执行Agent任务的能力。该模块采用了模块化、可扩展的设计架构,支持多定时器管理、灵活的周期配置、Agent自动调用和提示词模板管理等核心功能。
该设计方案充分考虑了系统的性能、安全性和扩展性,能够满足不同场景下的定时任务需求。通过与现有系统的无缝集成,定时器模块将进一步提升HiAgent系统的自动化能力和用户体验。
\ No newline at end of file
.trae/documents/实现POP3邮件工具类.md
deleted
100644 → 0
View file @
8b605b53
# 实现POP3邮件工具类
## 1. 添加依赖
在pom.xml中添加JavaMail API依赖,用于实现POP3邮件访问功能。
## 2. 创建邮件工具类
创建
`EmailTools.java`
文件,包含以下功能:
### 2.1 核心功能实现
-
**获取今日所有邮件**
:通过POP3协议连接邮箱,筛选今日收到的邮件,返回发件人和标题
-
**获取所有未读邮件**
:连接邮箱,筛选未读邮件,返回发件人和标题
-
**获取指定邮件内容**
:根据邮件ID获取邮件的详细内容
-
**获取指定邮件附件**
:根据邮件ID下载并保存附件
-
**标记邮件为已读/未读**
:修改邮件的阅读状态
-
**删除指定邮件**
:从邮箱中删除指定邮件
### 2.2 数据结构设计
-
定义请求参数类:包含邮箱服务器、端口、用户名、密码等必要信息
-
定义响应数据类:包含邮件ID、发件人、收件人、标题、日期、内容等信息
-
定义邮件附件数据类:包含附件名称、大小、内容类型等信息
### 2.3 工具方法
-
实现POP3连接管理(连接、断开连接)
-
实现邮件解析功能(解析邮件头、正文、附件)
-
实现日期筛选和格式转换
-
实现邮件状态管理
## 3. 代码实现要点
-
使用Spring的
`@Component`
和
`@Tool`
注解标记工具类和方法
-
使用Lombok的
`@Slf4j`
进行日志记录
-
处理异常情况,确保工具的健壮性
-
遵循现有工具类的代码风格和命名规范
-
提供清晰的工具描述和参数说明
## 4. 测试和验证
-
确保代码编译通过
-
验证各个方法的功能正确性
-
处理各种边界情况
通过以上步骤,实现一个功能完整、使用方便的POP3邮件工具类,满足用户的需求。
\ No newline at end of file
.trae/documents/工具类参数配置机制实现方案.md
deleted
100644 → 0
View file @
8b605b53
# 工具类参数配置机制实现方案
## 1. 设计目标
为项目中所有工具类实现参数配置功能,支持:
-
参数的UI动态配置展示
-
参数的数据库存储与读取
-
类似Spring Boot中@Value注解的机制实现参数管理
-
参数的默认值设置
-
数据库持久化存储与读取功能
## 2. 核心组件设计
### 2.1 自定义注解设计
创建
`@ToolParam`
注解,用于标记工具类中的配置参数:
```
java
@Target
(
ElementType
.
FIELD
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
public
@interface
ToolParam
{
String
name
()
default
""
;
String
description
()
default
""
;
String
defaultValue
()
default
""
;
String
type
()
default
"string"
;
boolean
required
()
default
false
;
String
group
()
default
"default"
;
}
```
### 2.2 数据库实体设计
创建
`ToolConfig`
实体类,用于存储工具参数配置:
```
java
@Entity
@Table
(
name
=
"tool_configs"
)
public
class
ToolConfig
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
UUID
)
private
String
id
;
private
String
toolName
;
private
String
paramName
;
private
String
paramValue
;
private
String
description
;
private
String
defaultValue
;
private
String
type
;
private
boolean
required
;
private
String
groupName
;
// getter和setter方法
}
```
### 2.3 参数配置服务
创建
`ToolConfigService`
服务类,用于处理参数的读取和保存:
```
java
public
interface
ToolConfigService
{
Map
<
String
,
String
>
getToolParams
(
String
toolName
);
String
getParamValue
(
String
toolName
,
String
paramName
);
void
saveParamValue
(
String
toolName
,
String
paramName
,
String
paramValue
);
List
<
ToolConfig
>
getAllToolConfigs
();
ToolConfig
getToolConfig
(
String
toolName
,
String
paramName
);
void
saveToolConfig
(
ToolConfig
toolConfig
);
void
deleteToolConfig
(
String
id
);
}
```
### 2.4 参数配置处理器
创建
`ToolParamProcessor`
类,用于处理工具类中的
`@ToolParam`
注解:
```
java
@Component
public
class
ToolParamProcessor
{
private
final
ToolConfigService
toolConfigService
;
// 构造函数注入
@PostConstruct
public
void
processToolParams
()
{
// 扫描所有带有@Component注解的工具类
// 处理@ToolParam注解
// 从数据库读取参数值并注入到工具类字段
}
public
void
injectParams
(
Object
toolInstance
)
{
// 为工具实例注入参数值
}
}
```
### 2.5 参数配置控制器
创建
`ToolConfigController`
类,用于提供参数配置的REST API:
```
java
@RestController
@RequestMapping
(
"/api/tool-configs"
)
public
class
ToolConfigController
{
private
final
ToolConfigService
toolConfigService
;
// 构造函数注入
@GetMapping
public
List
<
ToolConfig
>
getAllToolConfigs
()
{
// 返回所有工具配置
}
@GetMapping
(
"/{toolName}"
)
public
Map
<
String
,
String
>
getToolParams
(
@PathVariable
String
toolName
)
{
// 返回指定工具的配置参数
}
@PostMapping
public
ToolConfig
saveToolConfig
(
@RequestBody
ToolConfig
toolConfig
)
{
// 保存工具配置
}
@DeleteMapping
(
"/{id}"
)
public
void
deleteToolConfig
(
@PathVariable
String
id
)
{
// 删除工具配置
}
}
```
## 3. 实现步骤
### 3.1 创建核心组件
1.
创建
`@ToolParam`
注解
2.
创建
`ToolConfig`
实体类
3.
创建
`ToolConfigRepository`
接口
4.
创建
`ToolConfigService`
接口及实现类
5.
创建
`ToolParamProcessor`
类
6.
创建
`ToolConfigController`
类
7.
创建数据库初始化脚本,添加
`tool_configs`
表
### 3.2 修改工具类
以
`FileProcessingTools.java`
为例,修改其参数定义:
```
java
@Slf4j
@Component
public
class
FileProcessingTools
{
// 支持的文本文件扩展名
private
static
final
List
<
String
>
TEXT_FILE_EXTENSIONS
=
Arrays
.
asList
(
".txt"
,
".md"
,
".java"
,
".html"
,
".htm"
,
".css"
,
".js"
,
".json"
,
".xml"
,
".yaml"
,
".yml"
,
".properties"
,
".sql"
,
".py"
,
".cpp"
,
".c"
,
".h"
,
".cs"
,
".php"
,
".rb"
,
".go"
,
".rs"
,
".swift"
,
".kt"
,
".scala"
,
".sh"
,
".bat"
,
".cmd"
,
".ps1"
,
".log"
,
".csv"
,
".ts"
,
".jsx"
,
".tsx"
,
".vue"
,
".scss"
,
".sass"
,
".less"
);
// 支持的图片文件扩展名
private
static
final
List
<
String
>
IMAGE_FILE_EXTENSIONS
=
Arrays
.
asList
(
".jpg"
,
".jpeg"
,
".png"
,
".gif"
,
".bmp"
,
".svg"
,
".webp"
,
".ico"
);
// 默认文件存储目录
@ToolParam
(
name
=
"defaultStorageDir"
,
description
=
"默认文件存储目录"
,
defaultValue
=
"storage"
,
type
=
"string"
,
required
=
true
,
group
=
"file"
)
private
String
defaultStorageDir
;
// getter和setter方法
// 其他方法保持不变
}
```
### 3.3 实现参数注入机制
在
`ToolParamProcessor`
类中实现参数注入逻辑,使用Spring的
`BeanPostProcessor`
接口,在Bean初始化后注入参数值:
```
java
@Component
public
class
ToolParamProcessor
implements
BeanPostProcessor
{
private
final
ToolConfigService
toolConfigService
;
// 构造函数注入
@Override
public
Object
postProcessAfterInitialization
(
Object
bean
,
String
beanName
)
throws
BeansException
{
if
(
bean
.
getClass
().
getPackage
().
getName
().
contains
(
"pangea.hiagent.tools"
))
{
injectParams
(
bean
);
}
return
bean
;
}
private
void
injectParams
(
Object
bean
)
{
Class
<?>
clazz
=
bean
.
getClass
();
String
toolName
=
clazz
.
getSimpleName
();
Field
[]
fields
=
clazz
.
getDeclaredFields
();
for
(
Field
field
:
fields
)
{
if
(
field
.
isAnnotationPresent
(
ToolParam
.
class
))
{
ToolParam
annotation
=
field
.
getAnnotation
(
ToolParam
.
class
);
String
paramName
=
annotation
.
name
().
isEmpty
()
?
field
.
getName
()
:
annotation
.
name
();
// 从数据库获取参数值,如果不存在则使用默认值
String
paramValue
=
toolConfigService
.
getParamValue
(
toolName
,
paramName
);
if
(
paramValue
==
null
)
{
paramValue
=
annotation
.
defaultValue
();
}
// 设置字段值
field
.
setAccessible
(
true
);
try
{
// 根据字段类型转换参数值
if
(
field
.
getType
()
==
String
.
class
)
{
field
.
set
(
bean
,
paramValue
);
}
else
if
(
field
.
getType
()
==
int
.
class
||
field
.
getType
()
==
Integer
.
class
)
{
field
.
set
(
bean
,
Integer
.
parseInt
(
paramValue
));
}
else
if
(
field
.
getType
()
==
long
.
class
||
field
.
getType
()
==
Long
.
class
)
{
field
.
set
(
bean
,
Long
.
parseLong
(
paramValue
));
}
else
if
(
field
.
getType
()
==
boolean
.
class
||
field
.
getType
()
==
Boolean
.
class
)
{
field
.
set
(
bean
,
Boolean
.
parseBoolean
(
paramValue
));
}
else
if
(
field
.
getType
()
==
double
.
class
||
field
.
getType
()
==
Double
.
class
)
{
field
.
set
(
bean
,
Double
.
parseDouble
(
paramValue
));
}
// 可以扩展支持更多类型
}
catch
(
Exception
e
)
{
// 处理异常
}
}
}
}
}
```
### 3.4 实现数据库初始化
创建
`schema.sql`
文件,添加
`tool_configs`
表的创建语句:
```
sql
CREATE
TABLE
IF
NOT
EXISTS
tool_configs
(
id
VARCHAR
(
36
)
PRIMARY
KEY
,
tool_name
VARCHAR
(
255
)
NOT
NULL
,
param_name
VARCHAR
(
255
)
NOT
NULL
,
param_value
TEXT
,
description
TEXT
,
default_value
TEXT
,
type
VARCHAR
(
50
)
NOT
NULL
,
required
BOOLEAN
NOT
NULL
DEFAULT
FALSE
,
group_name
VARCHAR
(
100
)
NOT
NULL
DEFAULT
'default'
,
created_at
TIMESTAMP
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
updated_at
TIMESTAMP
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
UNIQUE
KEY
uk_tool_param
(
tool_name
,
param_name
)
);
```
## 4. 扩展支持
### 4.1 UI配置界面支持
前端可以通过调用
`/api/tool-configs`
接口获取所有工具的配置参数,然后动态生成配置界面。
### 4.2 支持更多参数类型
可以扩展
`ToolParamProcessor`
类,支持更多参数类型,如枚举、数组、列表等。
### 4.3 支持参数验证
可以在
`@ToolParam`
注解中添加验证规则,如正则表达式、最小值、最大值等,然后在参数注入时进行验证。
## 5. 测试计划
1.
测试
`@ToolParam`
注解的基本功能
2.
测试参数的数据库存储与读取
3.
测试参数的默认值设置
4.
测试参数的类型转换
5.
测试参数的UI动态配置展示
6.
测试多个工具类的参数配置
## 6. 实现顺序
1.
创建核心组件(注解、实体、服务等)
2.
实现数据库初始化脚本
3.
实现参数注入机制
4.
修改现有工具类,添加
`@ToolParam`
注解
5.
实现参数配置控制器
6.
测试功能
7.
优化和扩展功能
## 7. 预期效果
通过本方案的实现,项目中的所有工具类都将支持参数的动态配置,用户可以通过UI界面方便地配置和管理工具参数,参数配置将持久化到数据库中,并且支持类似Spring Boot中@Value注解的机制实现参数管理。
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment