Files
hzhub/hzhub-erp/docs/ERP_API_MIGRATION.md
大壮 c2513849b4 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>
2026-05-08 08:00:19 +00:00

7.7 KiB
Raw Blame History

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数据库

-- 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 功能测试结果

# 品牌列表返回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 前端调用迁移

旧版本

// 旧API调用
axios.get('/erp/customer/brands')
axios.get('/erp/customer/list', {params: {pageNum: 1, pageSize: 10}})

新版本

// 动态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插入

    INSERT INTO erp_api_config (api_name, api_path, sql_template, ...)
    VALUES ('新API名称', '/erp/dynamic/v1/new/api', 'SELECT ...', ...)
    
  2. 配置参数(如需要)

    INSERT INTO erp_api_param (api_id, param_name, param_type, ...)
    VALUES (API_ID, 'param1', 'String', ...)
    
  3. 测试验证

    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 访问控制

网关白名单(开发阶段):

// 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