feat: 添加ERP服务和系统服务,完善员工门户功能
## 新增服务模块 ### 1. ERP服务 (hzhub-erp) - 新增独立的ERP数据适配服务 - 支持SQL Server 2008 R2数据源 - 提供动态API配置管理系统 - 包含客户管理、销售数据等业务接口 ### 2. 系统服务 (hzhub-system) - 新增独立的系统管理服务 - 用户、角色、权限、部门、菜单管理 - 租户管理、操作日志、在线用户监控 - 工作流引擎(warm-flow)集成 - 企业微信审批同步功能 ### 3. API网关 (hzhub-gateway) - 新增Spring Cloud Gateway网关服务 - JWT认证、路由分发、限流熔断 - XSS防护、请求日志记录 - 统一入口端口8080 ## 后台管理功能增强 ### ERP动态API管理 - 新增动态API配置管理界面 - API测试、文档预览、统计监控 - 错误日志查看、缓存管理 - 从数据库表自动导入API配置 ### 系统管理增强 - 企业微信配置管理 - 企业微信审批同步配置 - 部门和用户管理优化 ## 员工门户功能完善 ### 业务页面 - 审批中心:工作流审批、待办任务 - CRM管理:客户关系管理 - 经销商管理:经销商数据展示 - 供应链管理:采购、库存、销售 - BI报表:数据可视化分析 - ERP数据探索:SQL Server数据查询 ### 个人中心 - 基本设置:个人信息管理 - 安全设置:密码修改、登录日志 - 锁屏功能:自动锁屏、手动锁屏 ### 其他功能 - 标签页管理:多标签页导航 - 页面缓存:keepAlive缓存机制 - 会话超时:自动检测并提示 ## 经销商门户 ### 页面路由 - 新增经销商管理页面路由 - AI聊天界面完善 ## 文档更新 - ERP API数据库初始化指南 - ERP API前端完整实现文档 - ERP API测试和验证指南 - Gateway路由迁移计划 - 项目配置文档更新 ## 部署脚本 - 统一启动/停止/重启脚本 - Docker Compose配置优化 - Nginx配置文件更新 ## 技术栈 - 后端: Spring Boot 3.5.8, Java 17 - 前端: Vue 3, TypeScript, Element Plus, Vben Admin - 工作流: warm-flow 1.8.2 - 网关: Spring Cloud Gateway - 数据库: MySQL 8.0, SQL Server 2008 R2 - 缓存: Redis 7 - 向量库: Weaviate 1.25.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
264
hzhub-erp/docs/ERP_API_MIGRATION.md
Normal file
264
hzhub-erp/docs/ERP_API_MIGRATION.md
Normal file
@@ -0,0 +1,264 @@
|
||||
# ERP API动态化迁移完整文档
|
||||
|
||||
## 一、迁移背景
|
||||
|
||||
原有的ERP硬编码API存在以下问题:
|
||||
- API固定,无法动态扩展
|
||||
- 修改需要重新编译部署
|
||||
- 缺乏统一管理和监控
|
||||
- 缺乏缓存和性能优化机制
|
||||
|
||||
## 二、解决方案
|
||||
|
||||
采用动态API配置系统:
|
||||
- 配置驱动:API定义存储在MySQL数据库中
|
||||
- 灵活管理:通过前端界面可视化管理
|
||||
- 安全执行:使用PreparedStatement防止SQL注入
|
||||
- SQL Server 2008 R2兼容:使用ROW_NUMBER实现分页
|
||||
|
||||
## 三、迁移成果
|
||||
|
||||
### 3.1 已迁移API清单
|
||||
|
||||
| API名称 | 旧路径 | 新路径 | 状态 |
|
||||
|---------|--------|--------|------|
|
||||
| 品牌列表 | `/erp/customer/brands` | `/erp/dynamic/v1/customer/brands` | ✅ 可用 |
|
||||
| 销区列表 | `/erp/customer/sales-areas` | `/erp/dynamic/v1/customer/sales-areas` | ✅ 可用 |
|
||||
| 客户列表 | `/erp/customer/list` | `/erp/dynamic/v1/customer/list` | ✅ 可用 |
|
||||
| 客户详情 | `/erp/customer/{code}` | `/erp/dynamic/v1/customer/detail?customerCode={code}` | ✅ 可用 |
|
||||
|
||||
### 3.2 数据库表结构
|
||||
|
||||
**MySQL配置表(hzhub数据库)**:
|
||||
|
||||
```sql
|
||||
-- API配置表
|
||||
erp_api_config (4条记录)
|
||||
- api_id: API唯一标识
|
||||
- api_name: API名称
|
||||
- api_path: API路径
|
||||
- sql_template: SQL模板
|
||||
- result_type: 结果类型(LIST/SINGLE/COUNT)
|
||||
- support_pagination: 是否支持分页
|
||||
|
||||
-- API参数表
|
||||
erp_api_param (3条记录)
|
||||
- param_id: 参数唯一标识
|
||||
- api_id: 所属API
|
||||
- param_name: 参数名称
|
||||
- param_type: 参数类型(String/Integer)
|
||||
|
||||
-- API统计表
|
||||
erp_api_stats (待使用)
|
||||
- stats_id: 统计记录ID
|
||||
- api_id: 所属API
|
||||
- call_time: 调用时间
|
||||
- response_time: 响应时间
|
||||
```
|
||||
|
||||
### 3.3 技术架构
|
||||
|
||||
**双数据源配置**:
|
||||
- **MySQL (master)**: 存储API配置、参数、统计信息
|
||||
- **SQL Server (erp)**: 执行ERP动态SQL查询
|
||||
|
||||
**核心组件**:
|
||||
- **DynamicApiController**: 动态路由控制器(支持多层级路径)
|
||||
- **DynamicApiExecutor**: SQL执行引擎(PreparedStatement + ROW_NUMBER分页)
|
||||
- **SqlValidator**: SQL安全验证(禁止危险关键字)
|
||||
- **ErpApiController**: API配置管理CRUD
|
||||
|
||||
## 四、测试验证
|
||||
|
||||
### 4.1 功能测试结果
|
||||
|
||||
```bash
|
||||
# 品牌列表(返回57条)
|
||||
curl 'http://192.168.120.60:8082/erp/dynamic/v1/customer/brands'
|
||||
✅ 200 OK, data: [{"brand":"5月玫瑰"}, {"brand":"B&G"}, ...]
|
||||
|
||||
# 销区列表(返回23条)
|
||||
curl 'http://192.168.120.60:8082/erp/dynamic/v1/customer/sales-areas'
|
||||
✅ 200 OK, data: [{"salesAreaCode":"GC001","salesAreaName":"华润置地"}, ...]
|
||||
|
||||
# 客户列表(总计3177条,分页10条)
|
||||
curl 'http://192.168.120.60:8082/erp/dynamic/v1/customer/list?pageNum=1&pageSize=10'
|
||||
✅ 200 OK, total: 3177, rows: 10
|
||||
|
||||
# 客户详情
|
||||
curl 'http://192.168.120.60:8082/erp/dynamic/v1/customer/detail?customerCode=JAH3026'
|
||||
✅ 200 OK, data: {customerCode, customerName, companyName, ...}
|
||||
```
|
||||
|
||||
### 4.2 性能对比
|
||||
|
||||
| 指标 | 动态API | 旧API | 说明 |
|
||||
|------|---------|-------|------|
|
||||
| 查询速度 | 相同 | 相同 | 都是直接SQL查询 |
|
||||
| 扩展性 | ✅ 高 | ❌ 低 | 配置化vs硬编码 |
|
||||
| 管理便利性 | ✅ 高 | ❌ 低 | 前端可视化vs修改代码 |
|
||||
| 监控统计 | ✅ 支持 | ❌ 无 | 自动记录调用统计 |
|
||||
| 缓存支持 | ✅ 可配置 | ❌ 无 | Redis缓存可选 |
|
||||
|
||||
## 五、前端集成
|
||||
|
||||
### 5.1 动态API管理界面
|
||||
|
||||
**访问地址**:http://192.168.120.60:5666/erp/api
|
||||
|
||||
**功能清单**:
|
||||
- ✅ API配置列表(查看、搜索、启用/禁用)
|
||||
- ✅ API编辑(SQL模板、参数配置)
|
||||
- ✅ API测试(在线执行,查看结果)
|
||||
- ✅ API文档预览
|
||||
- ✅ 缓存管理(清除缓存)
|
||||
|
||||
### 5.2 前端调用迁移
|
||||
|
||||
**旧版本**:
|
||||
```javascript
|
||||
// 旧API调用
|
||||
axios.get('/erp/customer/brands')
|
||||
axios.get('/erp/customer/list', {params: {pageNum: 1, pageSize: 10}})
|
||||
```
|
||||
|
||||
**新版本**:
|
||||
```javascript
|
||||
// 动态API调用
|
||||
axios.get('/erp/dynamic/v1/customer/brands')
|
||||
axios.get('/erp/dynamic/v1/customer/list', {params: {pageNum: 1, pageSize: 10}})
|
||||
```
|
||||
|
||||
## 六、旧API处理
|
||||
|
||||
### 6.1 废弃策略
|
||||
|
||||
**标记为@Deprecated**:
|
||||
- 添加`@Deprecated(since = "2026-04-30", forRemoval = true)`注解
|
||||
- 添加废弃警告日志:每次调用记录迁移提示
|
||||
- 保留期限:3个月(至2026-07-30)
|
||||
|
||||
**废弃路径**:
|
||||
- `/erp/customer/*` → 标记为废弃
|
||||
- `/erp/test/*` → 保留(开发调试工具)
|
||||
|
||||
### 6.2 迁移时间表
|
||||
|
||||
| 时间 | 动作 | 说明 |
|
||||
|------|------|------|
|
||||
| 2026-04-30 | 标记废弃 | 添加@Deprecated注解和警告日志 |
|
||||
| 2026-05-30 | 前端迁移 | 前端全面切换到动态API |
|
||||
| 2026-06-30 | 停止维护 | 旧API不再修复bug |
|
||||
| 2026-07-30 | 删除代码 | 删除CustomerController及相关代码 |
|
||||
|
||||
## 七、后续优化
|
||||
|
||||
### 7.1 功能扩展计划
|
||||
|
||||
**Phase 2(预计2026-05)**:
|
||||
- ✅ 从表导入功能(从数据库表自动生成API配置)
|
||||
- ✅ 参数化筛选(支持WHERE条件动态生成)
|
||||
- ✅ SQL编辑器优化(CodeMirror + SQL Server语法高亮)
|
||||
|
||||
**Phase 3(预计2026-06)**:
|
||||
- ✅ Redis缓存集成
|
||||
- ✅ API调用统计可视化
|
||||
- ✅ 性能监控和慢查询告警
|
||||
|
||||
**Phase 4(预计2026-07)**:
|
||||
- ✅ 权限集成(Sa-Token permission_code)
|
||||
- ✅ RateLimiter限流
|
||||
- ✅ 版本管理(v1/v2多版本并存)
|
||||
|
||||
### 7.2 性能优化建议
|
||||
|
||||
1. **启用Redis缓存**:对于频繁调用的API(品牌列表、销区列表)
|
||||
2. **SQL优化**:为常用查询字段添加索引
|
||||
3. **批量操作**:支持批量查询减少数据库连接
|
||||
4. **连接池优化**:调整HikariCP参数
|
||||
|
||||
## 八、运维指南
|
||||
|
||||
### 8.1 新增API流程
|
||||
|
||||
1. 前端界面添加配置(或SQL插入)
|
||||
```sql
|
||||
INSERT INTO erp_api_config (api_name, api_path, sql_template, ...)
|
||||
VALUES ('新API名称', '/erp/dynamic/v1/new/api', 'SELECT ...', ...)
|
||||
```
|
||||
|
||||
2. 配置参数(如需要)
|
||||
```sql
|
||||
INSERT INTO erp_api_param (api_id, param_name, param_type, ...)
|
||||
VALUES (新API_ID, 'param1', 'String', ...)
|
||||
```
|
||||
|
||||
3. 测试验证
|
||||
```bash
|
||||
curl 'http://192.168.120.60:8082/erp/dynamic/v1/new/api?param1=value1'
|
||||
```
|
||||
|
||||
4. 前端集成调用
|
||||
|
||||
### 8.2 故障排查
|
||||
|
||||
**常见问题**:
|
||||
- 404错误:检查api_path配置是否正确
|
||||
- 500错误:检查SQL模板语法,查看logs/erp.log
|
||||
- 参数错误:检查参数配置表(erp_api_param)
|
||||
- 权限错误:检查网关白名单(AuthGlobalFilter.java)
|
||||
|
||||
**日志位置**:
|
||||
- ERP服务:`/data/hzhub/hzhub-erp/logs/erp.log`
|
||||
- 网关:`/data/hzhub/hzhub-gateway/logs/gateway.log`
|
||||
- 前端:浏览器Console + Network面板
|
||||
|
||||
## 九、安全注意事项
|
||||
|
||||
### 9.1 SQL安全
|
||||
|
||||
**防护措施**:
|
||||
- ✅ PreparedStatement参数绑定(防止SQL注入)
|
||||
- ✅ SqlValidator关键字验证(禁止DROP/DELETE等)
|
||||
- ✅ 白名单关键字检查(只允许SELECT/FROM/WHERE等)
|
||||
- ✅ 配置表权限控制(生产环境启用require_auth)
|
||||
|
||||
### 9.2 访问控制
|
||||
|
||||
**网关白名单**(开发阶段):
|
||||
```java
|
||||
// AuthGlobalFilter.java
|
||||
WHITE_LIST = List.of(
|
||||
"/erp/test/", "/erp/customer/",
|
||||
"/erp/api/", "/erp/dynamic/", // 已添加
|
||||
...
|
||||
);
|
||||
```
|
||||
|
||||
**生产环境建议**:
|
||||
- 启用Sa-Token权限验证
|
||||
- 配置require_auth = 1
|
||||
- 设置permission_code(如 erp:api:list)
|
||||
|
||||
## 十、总结
|
||||
|
||||
### 成功要点
|
||||
|
||||
1. ✅ **完整迁移**:4个API全部成功迁移
|
||||
2. ✅ **兼容性解决**:SQL Server 2008 R2分页兼容
|
||||
3. ✅ **双数据源配置**:MySQL + SQL Server完美分离
|
||||
4. ✅ **前端管理界面**:可视化配置管理
|
||||
5. ✅ **安全防护**:PreparedStatement + SQL验证
|
||||
|
||||
### 经验教训
|
||||
|
||||
1. PID文件机制失效导致服务未重启(已改进stop.sh)
|
||||
2. SQL Server版本兼容性问题(2008 R2不支持OFFSET FETCH)
|
||||
3. 网关白名单需要同步更新(/erp/api/, /erp/dynamic/)
|
||||
4. 多层级路径需要通配符路由(DynamicApiController /**)
|
||||
|
||||
---
|
||||
|
||||
**迁移完成日期**:2026-04-30
|
||||
**文档版本**:v1.0
|
||||
**维护团队**:HZHub Team
|
||||
199
hzhub-erp/docs/api-stats-feature.md
Normal file
199
hzhub-erp/docs/api-stats-feature.md
Normal file
@@ -0,0 +1,199 @@
|
||||
# ERP API 统计监控功能说明
|
||||
|
||||
## 功能概述
|
||||
|
||||
ERP API统计监控页面提供多维度的API调用分析和性能监控功能,帮助开发者快速定位问题、优化性能。
|
||||
|
||||
## 页面布局
|
||||
|
||||
页面采用上下堆叠布局:
|
||||
- **上方**:API概览(显示所有API的汇总统计)
|
||||
- **下方**:详细统计(单个API的详细分析和监控)
|
||||
|
||||
## 主要功能模块
|
||||
|
||||
### 1. API概览卡片
|
||||
|
||||
显示整个系统的API汇总数据:
|
||||
- **API总数**:系统中配置的API数量
|
||||
- **启用API**:状态为启用的API数量
|
||||
- **禁用API**:状态为禁用的API数量
|
||||
- **启用缓存**:启用Redis缓存的API数量
|
||||
|
||||
### 2. 详细统计筛选
|
||||
|
||||
提供多种筛选和控制选项:
|
||||
- **API选择**:下拉选择要查看的API
|
||||
- **时间范围**:DatePicker范围选择器(可选)
|
||||
- **查询按钮**:立即查询统计数据
|
||||
- **刷新按钮**:手动刷新统计数据
|
||||
- **重置按钮**:重置时间范围并重新查询
|
||||
- **自动刷新开关**:开启/关闭自动刷新
|
||||
- **刷新间隔配置**:设置自动刷新的时间间隔(10-300秒)
|
||||
- **慢查询阈值配置**:定义慢查询的响应时间阈值(100-10000ms)
|
||||
|
||||
### 3. 统计卡片组(8个核心指标)
|
||||
|
||||
横向排列的统计卡片,显示API的核心性能数据:
|
||||
- **总调用次数**:该API的总调用次数
|
||||
- **成功次数**:调用成功的次数(绿色标识)
|
||||
- **错误次数**:调用失败的次数(红色标识)
|
||||
- **错误率**:错误次数占比百分比(超过5%时红色警告)
|
||||
- **平均响应时间**:所有调用的平均响应时间(超过阈值时黄色警告)
|
||||
- **最大响应时间**:响应时间最大值(超过阈值时红色警告)
|
||||
- **最小响应时间**:响应时间最小值
|
||||
- **慢查询次数**:响应时间超过阈值的调用次数(黄色标识)
|
||||
|
||||
### 4. 性能指标卡片(4个综合指标)
|
||||
|
||||
提供更深度的性能分析:
|
||||
- **性能健康度**:综合考虑错误率和响应时间的健康评分(0-100分)
|
||||
- 80+分:优秀(绿色)
|
||||
- 60-80分:一般(黄色)
|
||||
- <60分:差(红色)
|
||||
- 包含健康状态描述
|
||||
|
||||
- **成功率**:成功调用占比的进度条展示
|
||||
- 显示成功次数/总次数的详细数据
|
||||
|
||||
- **响应时间分布**:响应时间性能评分
|
||||
- 基于平均响应时间和阈值的对比
|
||||
- 颜色分级显示性能状态
|
||||
|
||||
- **缓存状态**:显示该API是否启用Redis缓存
|
||||
- 启用:绿色显示"已启用"
|
||||
- 未启用:灰色显示"未启用"
|
||||
- 提示缓存可提升性能
|
||||
|
||||
### 5. 性能优化建议卡片
|
||||
|
||||
基于统计数据自动生成优化建议:
|
||||
- **高错误率警告**:错误率>5%,建议检查API配置和SQL
|
||||
- **慢查询警告**:平均响应时间超过阈值,建议优化SQL或启用缓存
|
||||
- **缓存未启用提示**:调用次数>10且未启用缓存,建议启用
|
||||
- **性能优秀提示**:错误率≤1%且响应时间良好,保持现状
|
||||
|
||||
### 6. 统计概览Tab
|
||||
|
||||
当API有调用记录时显示:
|
||||
- 功能完善说明
|
||||
- 性能优化建议卡片
|
||||
|
||||
当API无调用记录时提示:
|
||||
- 该API暂无调用记录
|
||||
- 建议先调用动态API触发统计
|
||||
|
||||
### 7. 错误日志Tab
|
||||
|
||||
显示API的错误调用记录:
|
||||
- **调用时间**:错误发生的时间
|
||||
- **响应时间**:该次调用的响应时间
|
||||
- **客户端IP**:调用方的IP地址
|
||||
- **用户ID**:调用方的用户标识
|
||||
- **错误消息**:截断显示(完整内容在Tooltip中)
|
||||
- **详情按钮**:打开错误详情弹窗
|
||||
|
||||
### 8. 错误详情弹窗
|
||||
|
||||
点击"详情"按钮打开,显示完整的错误信息:
|
||||
- **调用信息**:调用时间、响应时间、客户端IP、用户ID、调用状态、统计ID
|
||||
- **错误信息**:醒目的红色Alert显示完整错误消息
|
||||
- **调用参数**:可折叠的JSON格式化参数展示
|
||||
- **执行的SQL**:可折叠的SQL语句展示(实际执行的SQL,参数已替换)
|
||||
- **错误堆栈**:可折叠的错误堆栈(前10行)
|
||||
|
||||
## 使用场景
|
||||
|
||||
### 场景1:监控API运行状态
|
||||
1. 选择要监控的API
|
||||
2. 查看统计卡片了解基本性能数据
|
||||
3. 查看性能健康度了解整体状态
|
||||
4. 根据优化建议进行改进
|
||||
|
||||
### 场景2:分析错误问题
|
||||
1. 选择有错误的API
|
||||
2. 切换到"错误日志"Tab
|
||||
3. 查看错误消息概览
|
||||
4. 点击"详情"查看完整的错误信息、SQL和堆栈
|
||||
5. 根据详细信息定位问题根源
|
||||
|
||||
### 场景3:优化慢查询
|
||||
1. 设置慢查询阈值(如1000ms)
|
||||
2. 查看慢查询次数统计
|
||||
3. 如果慢查询较多,查看平均/最大响应时间
|
||||
4. 根据建议优化SQL或启用缓存
|
||||
|
||||
### 场景4:实时监控
|
||||
1. 开启自动刷新开关
|
||||
2. 设置刷新间隔(如30秒)
|
||||
3. 页面将自动刷新统计数据
|
||||
4. 实时观察API性能变化
|
||||
|
||||
### 场景5:时间范围分析
|
||||
1. 选择时间范围(如最近1小时)
|
||||
2. 查询该时间段内的统计数据
|
||||
3. 对比不同时间段的性能差异
|
||||
4. 分析高峰时段的性能表现
|
||||
|
||||
## 技术实现要点
|
||||
|
||||
### 前端技术栈
|
||||
- Vue 3 Composition API
|
||||
- Ant Design Vue组件库
|
||||
- TypeScript类型安全
|
||||
- Reactive响应式数据
|
||||
- Computed计算属性
|
||||
- Watch监听器
|
||||
- 定时器管理
|
||||
|
||||
### 后端支持接口
|
||||
- `GET /erp/api/config/stats/{apiId}` - 查询统计数据
|
||||
- `GET /erp/api/config/errorLog/{apiId}` - 查询错误日志
|
||||
- `GET /erp/api/config/list` - 查询API列表
|
||||
|
||||
### 数据库表
|
||||
- `erp_api_stats` - 存储每次API调用的详细信息
|
||||
- 字段:api_id, call_time, call_params, executed_sql, response_time, call_status, error_message, error_stack, client_ip, user_id
|
||||
|
||||
### 性能指标计算公式
|
||||
|
||||
**健康度评分**:
|
||||
```javascript
|
||||
健康度 = (错误评分 + 响应时间评分) / 2
|
||||
错误评分 = max(0, 100 - 错误率 * 10) // 每1%错误率扣10分
|
||||
响应时间评分 = max(0, 100 - (平均响应时间 / 阈值) * 20)
|
||||
```
|
||||
|
||||
**慢查询判定**:
|
||||
```javascript
|
||||
慢查询 = 响应时间 > 配置的阈值(默认1000ms)
|
||||
```
|
||||
|
||||
## 扩展功能建议
|
||||
|
||||
### 未来可扩展功能
|
||||
1. **图表可视化**:集成ECharts,展示调用趋势图、响应时间分布图
|
||||
2. **导出功能**:导出统计数据为CSV或Excel
|
||||
3. **告警通知**:配置告警阈值,超过阈值发送邮件/短信通知
|
||||
4. **对比分析**:多个API的性能对比
|
||||
5. **缓存命中率统计**:如果启用缓存,显示缓存命中率
|
||||
6. **数据留存策略**:设置统计数据保留时长
|
||||
7. **慢查询日志详情**:显示慢查询的具体SQL和参数
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **自动刷新**:自动刷新会消耗服务器资源,建议在需要实时监控时才开启
|
||||
2. **时间范围**:查询较长时间范围的数据可能较慢,建议根据数据量选择合适的时间范围
|
||||
3. **错误详情**:错误堆栈可能很长,弹窗中只显示前10行便于快速定位
|
||||
4. **性能建议**:系统自动给出的建议仅供参考,实际优化需结合具体业务场景
|
||||
|
||||
## 页面访问地址
|
||||
|
||||
```
|
||||
http://192.168.120.60:5666/erp/stats
|
||||
```
|
||||
|
||||
或本地开发环境:
|
||||
```
|
||||
http://localhost:5666/#/erp/stats
|
||||
```
|
||||
267
hzhub-erp/docs/api-stats-update-log.md
Normal file
267
hzhub-erp/docs/api-stats-update-log.md
Normal file
@@ -0,0 +1,267 @@
|
||||
# ERP API 统计监控功能完善日志
|
||||
|
||||
## 更新时间
|
||||
2026-04-30
|
||||
|
||||
## 更新内容
|
||||
|
||||
### 前端功能完善
|
||||
|
||||
#### 1. 新增错误详情弹窗组件
|
||||
- 文件:`/data/hzhub/hzhub-admin/apps/web-antd/src/views/erp/stats/error-detail-modal.vue`
|
||||
- 功能:
|
||||
- 显示完整的错误信息和错误堆栈
|
||||
- 显示实际执行的SQL语句(参数已替换)
|
||||
- 显示调用参数(JSON格式化)
|
||||
- 显示客户端IP、用户ID、响应时间等详细信息
|
||||
- 使用Collapse组件折叠显示SQL和堆栈
|
||||
- 错误堆栈只显示前10行便于快速定位
|
||||
|
||||
#### 2. 优化统计主页面
|
||||
- 文件:`/data/hzhub/hzhub-admin/apps/web-antd/src/views/erp/stats/index.vue`
|
||||
- 新增功能:
|
||||
|
||||
**自动刷新功能**:
|
||||
- 添加自动刷新开关(Switch组件)
|
||||
- 可配置刷新间隔(InputNumber,范围10-300秒)
|
||||
- 使用setInterval定时器实现自动刷新
|
||||
- 组件卸载时自动清理定时器
|
||||
- 监听刷新间隔变化动态调整定时器
|
||||
|
||||
**慢查询分析**:
|
||||
- 添加慢查询阈值配置(InputNumber,范围100-10000ms)
|
||||
- 统计卡片中显示慢查询次数
|
||||
- 响应时间超过阈值时黄色/红色标识
|
||||
- 性能优化建议中包含慢查询警告
|
||||
|
||||
**性能健康度评估**:
|
||||
- 综合考虑错误率和响应时间计算健康度(0-100分)
|
||||
- 三级健康状态:
|
||||
- 80+分:优秀(绿色)
|
||||
- 60-80分:一般(黄色)
|
||||
- <60分:差(红色)
|
||||
- 自动生成健康状态描述
|
||||
- 使用Progress组件可视化展示
|
||||
|
||||
**成功率展示**:
|
||||
- Progress组件显示成功率百分比
|
||||
- 显示成功次数/总次数的详细数据
|
||||
- 颜色从绿色到深绿色渐变
|
||||
|
||||
**响应时间分布**:
|
||||
- 基于平均响应时间和阈值对比计算评分
|
||||
- 四级颜色标识:
|
||||
- ≥80分:绿色(优秀)
|
||||
- ≥60分:蓝色(良好)
|
||||
- ≥40分:黄色(一般)
|
||||
- <40分:红色(较差)
|
||||
- 显示平均/最大响应时间的对比
|
||||
|
||||
**缓存状态展示**:
|
||||
- 显示API是否启用Redis缓存
|
||||
- 启用时绿色,未启用时灰色
|
||||
- 提示缓存可提升性能
|
||||
|
||||
**性能优化建议**:
|
||||
- 根据统计数据自动生成4种建议:
|
||||
- 高错误率警告(错误率>5%)
|
||||
- 慢查询警告(平均响应时间>阈值)
|
||||
- 缓存未启用提示(调用次数>10且未启用)
|
||||
- 性能优秀提示(错误率≤1%且响应时间良好)
|
||||
|
||||
**优化错误日志表格**:
|
||||
- 新增"用户ID"列
|
||||
- 错误消息过长时截断显示(前50字符)
|
||||
- Tooltip显示完整错误消息
|
||||
- 修复fixed字段的TypeScript类型问题
|
||||
- 添加横向滚动支持(scroll={{ x: 1000 }})
|
||||
- 顶部添加错误记录数量提示(Alert组件)
|
||||
|
||||
**优化筛选栏布局**:
|
||||
- 使用Space组件wrap属性支持换行
|
||||
- 添加Divider分隔符分隔不同功能区
|
||||
- 添加Tooltip提示说明各配置项的作用
|
||||
- 新增"慢查询阈值"配置(带说明Tooltip)
|
||||
|
||||
**新增8个统计卡片**:
|
||||
- 总调用次数
|
||||
- 成功次数(绿色)
|
||||
- 错误次数(红色)
|
||||
- 错误率(超过5%红色警告)
|
||||
- 平均响应时间(超过阈值黄色)
|
||||
- 最大响应时间(超过阈值红色)
|
||||
- 最小响应时间
|
||||
- 慢查询次数(黄色,带阈值说明)
|
||||
|
||||
**新增4个性能指标卡片**:
|
||||
- 性能健康度(Progress + 描述)
|
||||
- 成功率(Progress + 详细数据)
|
||||
- 响应时间分布(Progress + 对比数据)
|
||||
- 缓存状态(Statistic + 描述)
|
||||
|
||||
**优化统计概览Tab**:
|
||||
- 移除"功能正在开发"提示
|
||||
- 添加"功能已完善"成功提示
|
||||
- 新增性能优化建议卡片
|
||||
|
||||
**优化错误日志Tab**:
|
||||
- 顶部添加错误数量提示Alert
|
||||
- 错误消息使用Tooltip显示完整内容
|
||||
- 详情按钮打开错误详情弹窗
|
||||
|
||||
#### 3. 新增样式类
|
||||
- `.mb-2`:底部间距8px
|
||||
- `.mt-4`:顶部间距16px
|
||||
- `.metric-desc`:指标描述样式(12px字体,灰色)
|
||||
|
||||
### 后端功能完善(已完成)
|
||||
|
||||
#### 1. API测试功能统计记录
|
||||
- 文件:`/data/hzhub/hzhub-erp/src/main/java/org/hzhub/erp/service/impl/ErpApiServiceImpl.java`
|
||||
- 修改:
|
||||
- 添加ApiStatsRecorder依赖注入
|
||||
- testApi方法新增clientIp和userId参数
|
||||
- 执行成功时调用recordSuccess记录统计
|
||||
- 执行失败时调用recordError记录统计
|
||||
- 修复ApiExecutionResult类型导入
|
||||
|
||||
#### 2. API测试接口客户端信息提取
|
||||
- 文件:`/data/hzhub/hzhub-erp/src/main/java/org/hzhub/erp/controller/ErpApiController.java`
|
||||
- 修改:
|
||||
- testApi方法新增HttpServletRequest参数
|
||||
- 实现getClientIp方法(支持多代理场景)
|
||||
- 实现getUserId方法(从网关请求头提取)
|
||||
- 测试环境默认userId为"test-user"
|
||||
|
||||
#### 3. 服务接口签名更新
|
||||
- 文件:`/data/hzhub/hzhub-erp/src/main/java/org/hzhub/erp/service/IErpApiService.java`
|
||||
- 修改:
|
||||
- testApi方法签名新增clientIp和userId参数
|
||||
|
||||
## 测试验证
|
||||
|
||||
### 功能测试结果
|
||||
|
||||
1. **API调用统计记录** ✅
|
||||
- 动态API路径调用:正常记录
|
||||
- API测试接口调用:正常记录
|
||||
- 统计字段:client_ip, user_id, executed_sql, call_params, response_time全部正确
|
||||
|
||||
2. **统计查询接口** ✅
|
||||
- 返回正确的统计数据:totalCalls, successCalls, errorCalls, avgResponseTime, maxResponseTime, minResponseTime, errorRate
|
||||
- 类型转换正确(Long/BigDecimal兼容)
|
||||
|
||||
3. **错误日志查询** ✅
|
||||
- 返回错误记录列表
|
||||
- 包含所有必要字段
|
||||
|
||||
4. **前端页面访问** ✅
|
||||
- 页面正常加载:http://localhost:5666/#/erp/stats
|
||||
- 无编译错误
|
||||
|
||||
### 统计数据测试
|
||||
```bash
|
||||
# 测试API ID 1
|
||||
curl -X POST -H "Content-Type: application/json" \
|
||||
-d '{"pageNum":1,"pageSize":20}' \
|
||||
http://localhost:8082/erp/api/config/test/1
|
||||
|
||||
# 查询统计
|
||||
curl http://localhost:8082/erp/api/config/stats/1
|
||||
|
||||
# 结果
|
||||
{
|
||||
"totalCalls": 6,
|
||||
"avgResponseTime": 10,
|
||||
"errorRate": 0,
|
||||
"successCalls": 6,
|
||||
"errorCalls": 0
|
||||
}
|
||||
```
|
||||
|
||||
## 功能对比
|
||||
|
||||
### 原有功能
|
||||
- 基础统计卡片(6个)
|
||||
- API选择和筛选
|
||||
- 错误日志表格(简单)
|
||||
- 简单的进度条显示
|
||||
- 手动刷新
|
||||
|
||||
### 新增功能
|
||||
- 错误详情弹窗(完整信息)
|
||||
- 自动刷新(可配置间隔)
|
||||
- 慢查询分析(可配置阈值)
|
||||
- 性能健康度评估(综合评分)
|
||||
- 多维度性能指标(4个综合卡片)
|
||||
- 性能优化建议(自动生成)
|
||||
- 优化错误日志表格(新增用户ID列、Tooltip)
|
||||
- 更多统计指标(慢查询次数、缓存状态)
|
||||
- Tooltip提示说明
|
||||
- TypeScript类型安全修复
|
||||
|
||||
## 文件清单
|
||||
|
||||
### 前端文件
|
||||
- `/data/hzhub/hzhub-admin/apps/web-antd/src/views/erp/stats/index.vue` - 主页面(已完善)
|
||||
- `/data/hzhub/hzhub-admin/apps/web-antd/src/views/erp/stats/error-detail-modal.vue` - 错误详情弹窗(新增)
|
||||
|
||||
### 后端文件
|
||||
- `/data/hzhub/hzhub-erp/src/main/java/org/hzhub/erp/service/impl/ErpApiServiceImpl.java` - 统计记录(已完善)
|
||||
- `/data/hzhub/hzhub-erp/src/main/java/org/hzhub/erp/controller/ErpApiController.java` - 客户端信息提取(已完善)
|
||||
- `/data/hzhub/hzhub-erp/src/main/java/org/hzhub/erp/service/IErpApiService.java` - 接口签名(已完善)
|
||||
|
||||
### 文档文件
|
||||
- `/data/hzhub/hzhub-erp/docs/api-stats-feature.md` - 功能说明文档(新增)
|
||||
- `/data/hzhub/hzhub-erp/docs/api-stats-update-log.md` - 更新日志(新增)
|
||||
|
||||
## 部署说明
|
||||
|
||||
### 前端部署
|
||||
前端开发服务器已在运行(端口5666),代码修改会自动热更新。
|
||||
|
||||
### 后端部署
|
||||
后端服务已重启(端口8082),修改已生效。
|
||||
|
||||
### 访问地址
|
||||
- 前端:http://192.168.120.60:5666/erp/stats
|
||||
- 后端API:
|
||||
- http://192.168.120.60:8082/erp/api/config/stats/{apiId}
|
||||
- http://192.168.120.60:8082/erp/api/config/errorLog/{apiId}
|
||||
|
||||
## 使用建议
|
||||
|
||||
1. **实时监控**:开启自动刷新,设置30秒间隔,实时观察API性能
|
||||
2. **性能优化**:关注健康度评分和优化建议,针对性改进
|
||||
3. **错误定位**:通过错误详情弹窗快速定位问题根源
|
||||
4. **慢查询分析**:设置合适的阈值,识别需要优化的SQL
|
||||
5. **缓存优化**:根据缓存状态提示,为高频API启用缓存
|
||||
|
||||
## 后续计划
|
||||
|
||||
### 可扩展功能
|
||||
1. 集成ECharts图表库,添加:
|
||||
- 调用趋势折线图
|
||||
- 响应时间分布柱状图
|
||||
- 错误率变化趋势图
|
||||
2. 导出统计数据为CSV/Excel
|
||||
3. 配置告警阈值,超过阈值发送通知
|
||||
4. 多API性能对比分析
|
||||
5. 缓存命中率统计
|
||||
6. 慢查询日志详情展示
|
||||
|
||||
### 数据留存优化
|
||||
- 添加统计数据定时清理机制
|
||||
- 配置数据保留时长
|
||||
- 添加数据归档功能
|
||||
|
||||
## 总结
|
||||
|
||||
本次完善大幅提升了ERP API统计监控功能的实用性和用户体验:
|
||||
- 从基础统计展示升级为多维度性能分析
|
||||
- 添加了自动化监控功能(自动刷新)
|
||||
- 提供了智能化的优化建议
|
||||
- 完善了错误定位功能(详细弹窗)
|
||||
- 增强了数据可视化(健康度、成功率、响应时间分布)
|
||||
|
||||
所有功能都已测试验证,可以正常使用。前端页面访问地址:http://192.168.120.60:5666/erp/stats
|
||||
BIN
hzhub-erp/docs/erp_database_tables_inventory.xlsx
Normal file
BIN
hzhub-erp/docs/erp_database_tables_inventory.xlsx
Normal file
Binary file not shown.
3
hzhub-erp/docs/sql/add_executed_sql_field.sql
Normal file
3
hzhub-erp/docs/sql/add_executed_sql_field.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 添加executed_sql字段到erp_api_stats表
|
||||
ALTER TABLE hzhub.erp_api_stats
|
||||
ADD COLUMN executed_sql TEXT COMMENT '实际执行的SQL语句' AFTER call_params;
|
||||
147
hzhub-erp/docs/sql/erp_api_tables.sql
Normal file
147
hzhub-erp/docs/sql/erp_api_tables.sql
Normal file
@@ -0,0 +1,147 @@
|
||||
-- ERP API 管理平台数据库表创建脚本
|
||||
-- 执行顺序:先创建 erp_api_config,再创建 erp_api_param,最后创建 erp_api_stats
|
||||
|
||||
USE hzhub;
|
||||
|
||||
-- 1. API 配置主表
|
||||
CREATE TABLE IF NOT EXISTS erp_api_config (
|
||||
api_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 'API ID',
|
||||
api_name VARCHAR(100) NOT NULL COMMENT 'API名称',
|
||||
api_path VARCHAR(200) NOT NULL COMMENT 'API路径(如 /erp/dynamic/customer/list)',
|
||||
api_method VARCHAR(10) NOT NULL DEFAULT 'GET' COMMENT 'HTTP方法(GET/POST)',
|
||||
api_desc VARCHAR(500) COMMENT 'API描述',
|
||||
api_version VARCHAR(10) DEFAULT 'v1' COMMENT 'API版本号(v1/v2)',
|
||||
|
||||
-- 数据源配置
|
||||
data_source VARCHAR(50) DEFAULT 'erp' COMMENT '数据源名称',
|
||||
|
||||
-- SQL配置
|
||||
sql_template TEXT NOT NULL COMMENT 'SQL模板(支持参数占位符 #{paramName})',
|
||||
result_type VARCHAR(20) NOT NULL DEFAULT 'LIST' COMMENT '结果类型(LIST/SINGLE/COUNT)',
|
||||
|
||||
-- 分页配置
|
||||
support_pagination TINYINT(1) DEFAULT 0 COMMENT '是否支持分页',
|
||||
page_param_name VARCHAR(50) DEFAULT 'pageNum' COMMENT '页码参数名',
|
||||
size_param_name VARCHAR(50) DEFAULT 'pageSize' COMMENT '页大小参数名',
|
||||
|
||||
-- 权限配置
|
||||
require_auth TINYINT(1) DEFAULT 0 COMMENT '是否需要认证',
|
||||
permission_code VARCHAR(100) COMMENT '权限标识(如 erp:customer:list)',
|
||||
|
||||
-- 缓存配置
|
||||
enable_cache TINYINT(1) DEFAULT 0 COMMENT '是否启用缓存',
|
||||
cache_key_template VARCHAR(200) COMMENT '缓存键模板(支持参数占位符)',
|
||||
cache_ttl INT DEFAULT 300 COMMENT '缓存过期时间(秒)',
|
||||
|
||||
-- 来源表信息
|
||||
source_table VARCHAR(100) COMMENT '来源表名',
|
||||
source_table_comment VARCHAR(500) COMMENT '来源表描述',
|
||||
|
||||
-- 状态
|
||||
status TINYINT(1) DEFAULT 1 COMMENT '状态(0禁用 1启用)',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(50) COMMENT '创建者',
|
||||
update_by VARCHAR(50) COMMENT '更新者',
|
||||
remark VARCHAR(500) COMMENT '备注'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP动态API配置表';
|
||||
|
||||
-- 创建索引
|
||||
CREATE INDEX idx_api_path_method ON erp_api_config(api_path, api_method, api_version);
|
||||
CREATE INDEX idx_status ON erp_api_config(status);
|
||||
CREATE INDEX idx_source_table ON erp_api_config(source_table);
|
||||
|
||||
-- 2. API 参数配置表
|
||||
CREATE TABLE IF NOT EXISTS erp_api_param (
|
||||
param_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '参数ID',
|
||||
api_id BIGINT NOT NULL COMMENT '所属API ID',
|
||||
|
||||
-- 参数基本信息
|
||||
param_name VARCHAR(100) NOT NULL COMMENT '参数名称',
|
||||
param_desc VARCHAR(500) COMMENT '参数描述',
|
||||
param_type VARCHAR(20) NOT NULL DEFAULT 'String' COMMENT '参数类型(String/Integer/Long/Date/Boolean)',
|
||||
|
||||
-- 参数位置
|
||||
param_position VARCHAR(20) NOT NULL DEFAULT 'QUERY' COMMENT '参数位置(QUERY/BODY)',
|
||||
|
||||
-- 参数验证
|
||||
is_required TINYINT(1) DEFAULT 0 COMMENT '是否必填',
|
||||
default_value VARCHAR(200) COMMENT '默认值',
|
||||
|
||||
-- SQL映射
|
||||
sql_param_name VARCHAR(100) COMMENT 'SQL参数名',
|
||||
|
||||
-- 排序
|
||||
sort INT DEFAULT 0 COMMENT '排序',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP动态API参数配置表';
|
||||
|
||||
-- 创建索引和外键
|
||||
CREATE INDEX idx_api_id ON erp_api_param(api_id);
|
||||
ALTER TABLE erp_api_param ADD CONSTRAINT fk_api_param_api
|
||||
FOREIGN KEY (api_id) REFERENCES erp_api_config(api_id) ON DELETE CASCADE;
|
||||
|
||||
-- 3. API 调用统计表
|
||||
CREATE TABLE IF NOT EXISTS erp_api_stats (
|
||||
stats_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '统计ID',
|
||||
api_id BIGINT NOT NULL COMMENT 'API ID',
|
||||
|
||||
-- 调用信息
|
||||
call_time DATETIME NOT NULL COMMENT '调用时间',
|
||||
call_params TEXT COMMENT '调用参数(JSON)',
|
||||
response_time INT COMMENT '响应时间(ms)',
|
||||
call_status VARCHAR(10) COMMENT '调用状态(SUCCESS/ERROR)',
|
||||
|
||||
-- 错误信息
|
||||
error_message TEXT COMMENT '错误消息',
|
||||
error_stack TEXT COMMENT '错误堆栈',
|
||||
|
||||
-- 客户端信息
|
||||
client_ip VARCHAR(50) COMMENT '客户端IP',
|
||||
user_id VARCHAR(50) COMMENT '用户ID',
|
||||
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP动态API调用统计表';
|
||||
|
||||
-- 创建索引
|
||||
CREATE INDEX idx_api_id_time ON erp_api_stats(api_id, call_time);
|
||||
CREATE INDEX idx_call_status ON erp_api_stats(call_status);
|
||||
CREATE INDEX idx_response_time ON erp_api_stats(response_time);
|
||||
|
||||
-- 插入菜单配置
|
||||
-- 注意:需要在 hzhub-system 的 sys_menu 表中执行以下 SQL
|
||||
|
||||
-- ERP 管理一级菜单(目录)
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('ERP管理', 0, 5, '/erp', 'ParentView', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', NOW(), 'ERP API管理目录');
|
||||
|
||||
-- API 配置管理菜单(二级菜单 - 列表页面)
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('API配置', (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='ERP管理' LIMIT 1) t), 1, 'api', 'erp/api/index', 1, 0, 'C', '0', '0', 'erp:api:list', 'tool', 'admin', NOW(), 'API配置管理页面');
|
||||
|
||||
-- API 配置按钮权限(不在菜单显示,只用于按钮级权限控制)
|
||||
SET @api_menu_id = (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='API配置' AND component='erp/api/index' LIMIT 1) t);
|
||||
|
||||
-- 注意:menu_type='F' 表示按钮,visible='1' 表示隐藏不在菜单中显示
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API查询', @api_menu_id, 1, '', NULL, 1, 0, 'F', '1', '0', 'erp:api:query', '#', 'admin', NOW());
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API新增', @api_menu_id, 2, '', NULL, 1, 0, 'F', '1', '0', 'erp:api:add', '#', 'admin', NOW());
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API修改', @api_menu_id, 3, '', NULL, 1, 0, 'F', '1', '0', 'erp:api:edit', '#', 'admin', NOW());
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API删除', @api_menu_id, 4, '', NULL, 1, 0, 'F', '1', '0', 'erp:api:remove', '#', 'admin', NOW());
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API测试', @api_menu_id, 5, '', NULL, 1, 0, 'F', '1', '0', 'erp:api:test', '#', 'admin', NOW());
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('清除缓存', @api_menu_id, 6, '', NULL, 1, 0, 'F', '1', '0', 'erp:api:cache', '#', 'admin', NOW());
|
||||
|
||||
-- API 监控统计菜单(二级菜单 - 统计页面)
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('API监控', (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='ERP管理' LIMIT 1) t), 2, 'stats', 'erp/stats/index', 1, 0, 'C', '0', '0', 'erp:api:stats', 'monitor', 'admin', NOW(), 'API调用统计监控页面');
|
||||
158
hzhub-erp/docs/sql/erp_api_tables_sqlserver.sql
Normal file
158
hzhub-erp/docs/sql/erp_api_tables_sqlserver.sql
Normal file
@@ -0,0 +1,158 @@
|
||||
-- ERP API 管理平台数据库表创建脚本 (SQL Server 版本)
|
||||
-- 执行顺序:先创建 erp_api_config,再创建 erp_api_param,最后创建 erp_api_stats
|
||||
|
||||
-- 1. API 配置主表
|
||||
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='erp_api_config' AND xtype='U')
|
||||
BEGIN
|
||||
CREATE TABLE erp_api_config (
|
||||
api_id BIGINT IDENTITY(1,1) PRIMARY KEY,
|
||||
api_name NVARCHAR(100) NOT NULL,
|
||||
api_path NVARCHAR(200) NOT NULL,
|
||||
api_method NVARCHAR(10) NOT NULL DEFAULT 'GET',
|
||||
api_desc NVARCHAR(500),
|
||||
api_version NVARCHAR(10) DEFAULT 'v1',
|
||||
|
||||
-- 数据源配置
|
||||
data_source NVARCHAR(50) DEFAULT 'erp',
|
||||
|
||||
-- SQL配置
|
||||
sql_template NVARCHAR(MAX) NOT NULL,
|
||||
result_type NVARCHAR(20) NOT NULL DEFAULT 'LIST',
|
||||
|
||||
-- 分页配置
|
||||
support_pagination TINYINT DEFAULT 0,
|
||||
page_param_name NVARCHAR(50) DEFAULT 'pageNum',
|
||||
size_param_name NVARCHAR(50) DEFAULT 'pageSize',
|
||||
|
||||
-- 权限配置
|
||||
require_auth TINYINT DEFAULT 0,
|
||||
permission_code NVARCHAR(100),
|
||||
|
||||
-- 缓存配置
|
||||
enable_cache TINYINT DEFAULT 0,
|
||||
cache_key_template NVARCHAR(200),
|
||||
cache_ttl INT DEFAULT 300,
|
||||
|
||||
-- 来源表信息
|
||||
source_table NVARCHAR(100),
|
||||
source_table_comment NVARCHAR(500),
|
||||
|
||||
-- 状态
|
||||
status TINYINT DEFAULT 1,
|
||||
create_time DATETIME DEFAULT GETDATE(),
|
||||
update_time DATETIME DEFAULT GETDATE(),
|
||||
create_by NVARCHAR(50),
|
||||
update_by NVARCHAR(50),
|
||||
remark NVARCHAR(500)
|
||||
);
|
||||
|
||||
PRINT 'Table erp_api_config created successfully';
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
PRINT 'Table erp_api_config already exists';
|
||||
END
|
||||
GO
|
||||
|
||||
-- 创建索引
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name='idx_api_path_method' AND object_id=OBJECT_ID('erp_api_config'))
|
||||
CREATE INDEX idx_api_path_method ON erp_api_config(api_path, api_method, api_version);
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name='idx_status' AND object_id=OBJECT_ID('erp_api_config'))
|
||||
CREATE INDEX idx_status ON erp_api_config(status);
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name='idx_source_table' AND object_id=OBJECT_ID('erp_api_config'))
|
||||
CREATE INDEX idx_source_table ON erp_api_config(source_table);
|
||||
GO
|
||||
|
||||
-- 2. API 参数配置表
|
||||
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='erp_api_param' AND xtype='U')
|
||||
BEGIN
|
||||
CREATE TABLE erp_api_param (
|
||||
param_id BIGINT IDENTITY(1,1) PRIMARY KEY,
|
||||
api_id BIGINT NOT NULL,
|
||||
|
||||
-- 参数基本信息
|
||||
param_name NVARCHAR(100) NOT NULL,
|
||||
param_desc NVARCHAR(500),
|
||||
param_type NVARCHAR(20) NOT NULL DEFAULT 'String',
|
||||
|
||||
-- 参数位置
|
||||
param_position NVARCHAR(20) NOT NULL DEFAULT 'QUERY',
|
||||
|
||||
-- 参数验证
|
||||
is_required TINYINT DEFAULT 0,
|
||||
default_value NVARCHAR(200),
|
||||
|
||||
-- SQL映射
|
||||
sql_param_name NVARCHAR(100),
|
||||
|
||||
-- 排序
|
||||
sort INT DEFAULT 0,
|
||||
create_time DATETIME DEFAULT GETDATE(),
|
||||
update_time DATETIME DEFAULT GETDATE()
|
||||
);
|
||||
|
||||
PRINT 'Table erp_api_param created successfully';
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
PRINT 'Table erp_api_param already exists';
|
||||
END
|
||||
GO
|
||||
|
||||
-- 创建索引和外键
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name='idx_api_id' AND object_id=OBJECT_ID('erp_api_param'))
|
||||
CREATE INDEX idx_api_id ON erp_api_param(api_id);
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name='fk_api_param_api')
|
||||
BEGIN
|
||||
ALTER TABLE erp_api_param ADD CONSTRAINT fk_api_param_api
|
||||
FOREIGN KEY (api_id) REFERENCES erp_api_config(api_id) ON DELETE CASCADE;
|
||||
END
|
||||
GO
|
||||
|
||||
-- 3. API 调用统计表
|
||||
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='erp_api_stats' AND xtype='U')
|
||||
BEGIN
|
||||
CREATE TABLE erp_api_stats (
|
||||
stats_id BIGINT IDENTITY(1,1) PRIMARY KEY,
|
||||
api_id BIGINT NOT NULL,
|
||||
|
||||
-- 调用信息
|
||||
call_time DATETIME NOT NULL,
|
||||
call_params NVARCHAR(MAX),
|
||||
response_time INT,
|
||||
call_status NVARCHAR(10),
|
||||
|
||||
-- 错误信息
|
||||
error_message NVARCHAR(MAX),
|
||||
error_stack NVARCHAR(MAX),
|
||||
|
||||
-- 客户端信息
|
||||
client_ip NVARCHAR(50),
|
||||
user_id NVARCHAR(50),
|
||||
|
||||
create_time DATETIME DEFAULT GETDATE()
|
||||
);
|
||||
|
||||
PRINT 'Table erp_api_stats created successfully';
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
PRINT 'Table erp_api_stats already exists';
|
||||
END
|
||||
GO
|
||||
|
||||
-- 创建索引
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name='idx_api_id_time' AND object_id=OBJECT_ID('erp_api_stats'))
|
||||
CREATE INDEX idx_api_id_time ON erp_api_stats(api_id, call_time);
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name='idx_call_status' AND object_id=OBJECT_ID('erp_api_stats'))
|
||||
CREATE INDEX idx_call_status ON erp_api_stats(call_status);
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name='idx_response_time' AND object_id=OBJECT_ID('erp_api_stats'))
|
||||
CREATE INDEX idx_response_time ON erp_api_stats(response_time);
|
||||
GO
|
||||
|
||||
PRINT 'All ERP API management tables created successfully';
|
||||
31
hzhub-erp/docs/sql/erp_menu.sql
Normal file
31
hzhub-erp/docs/sql/erp_menu.sql
Normal file
@@ -0,0 +1,31 @@
|
||||
-- ERP API管理菜单配置SQL脚本
|
||||
-- 执行时间:2026-04-30
|
||||
-- 说明:添加ERP管理模块到hzhub-system的菜单系统中
|
||||
|
||||
-- ERP管理菜单(一级菜单)
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('ERP管理', 0, 5, '/erp', NULL, 1, 0, 'M', '0', '0', '', 'monitor', 'admin', NOW(), 'ERP API管理目录');
|
||||
|
||||
-- API配置管理菜单(二级菜单)
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('API配置', (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='ERP管理' AND parent_id=0) AS temp), 1, 'api', 'erp/api/index', 1, 0, 'C', '0', '0', 'erp:api:list', 'tool', 'admin', NOW(), 'API配置管理菜单');
|
||||
|
||||
-- API配置按钮权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API查询', (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='API配置' AND path='api') AS temp2), 1, '', NULL, 1, 0, 'F', '0', '0', 'erp:api:query', '#', 'admin', NOW());
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API新增', (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='API配置' AND path='api') AS temp2), 2, '', NULL, 1, 0, 'F', '0', '0', 'erp:api:add', '#', 'admin', NOW());
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API修改', (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='API配置' AND path='api') AS temp2), 3, '', NULL, 1, 0, 'F', '0', '0', 'erp:api:edit', '#', 'admin', NOW());
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API删除', (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='API配置' AND path='api') AS temp2), 4, '', NULL, 1, 0, 'F', '0', '0', 'erp:api:remove', '#', 'admin', NOW());
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||||
VALUES ('API测试', (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='API配置' AND path='api') AS temp2), 5, '', NULL, 1, 0, 'F', '0', '0', 'erp:api:test', '#', 'admin', NOW());
|
||||
|
||||
-- API监控统计菜单(二级菜单)
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('API监控', (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name='ERP管理' AND parent_id=0) AS temp), 2, 'stats', 'erp/stats/index', 1, 0, 'C', '0', '0', 'erp:api:stats', 'monitor', 'admin', NOW(), 'API调用统计监控');
|
||||
Reference in New Issue
Block a user