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:
大壮
2026-05-08 08:00:19 +00:00
parent e6fc123b1f
commit c2513849b4
1564 changed files with 52903 additions and 641 deletions

View 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