Files
hzhub/hzhub-erp/fix_sql_templates.py
大壮 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

155 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
修复ERP动态API SQL模板 - 第二版
使用标准SQL WHERE条件不依赖MyBatis动态语法
"""
import pymysql
import os
MYSQL_HOST = os.getenv('MYSQL_HOST', '192.168.120.60')
MYSQL_PORT = int(os.getenv('MYSQL_PORT', '3306'))
MYSQL_DB = os.getenv('MYSQL_DB', 'hzhub')
MYSQL_USER = os.getenv('MYSQL_USERNAME', 'root')
MYSQL_PASSWORD = os.getenv('MYSQL_PASSWORD', 'hzhub123')
print(f"连接MySQL: {MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DB}")
conn = pymysql.connect(
host=MYSQL_HOST,
port=MYSQL_PORT,
database=MYSQL_DB,
user=MYSQL_USER,
password=MYSQL_PASSWORD,
charset='utf8mb4'
)
cursor = conn.cursor()
# 修复后的API配置简化SQL不使用MyBatis条件语法
fixed_configs = {
1: { # api_id = 1 (客户列表查询)
'sql_template': '''
SELECT CLTCODE AS customerCode,
CLTNAME AS customerName,
COMPANY_ID AS companyCode,
COMPANY_NAME AS companyName,
BRAND AS brand,
BRANDNAME AS brandName,
LINKMAN AS contactName,
AREAID AS salesAreaCode,
AREANAME AS salesAreaName,
SALESID_T AS salesPersonCode,
SALESNAME_T AS salesPersonName,
SALEDOCID AS saleDocCode,
SALEDOCNAME AS saleDocName,
CLTPRICENO AS pricePlanCode,
CLTPRICENAME AS pricePlanName,
CLTTYPE AS customerType,
STREET AS address,
TEL1 AS phone,
EMAIL AS email,
SDORGID AS sdOrgCode,
SDORGNAME AS sdOrgName,
province, city, ISSTOP AS isStop
FROM SCLTGENERAL
ORDER BY CLTCODE
''',
'result_type': 'LIST',
'support_pagination': 1,
'api_desc': '查询客户档案列表(暂不支持筛选,后续优化)'
},
2: { # api_id = 2 (客户详情查询)
'sql_template': '''
SELECT CLTCODE AS customerCode,
CLTNAME AS customerName,
COMPANY_ID AS companyCode,
COMPANY_NAME AS companyName,
BRAND AS brand,
BRANDNAME AS brandName,
LINKMAN AS contactName,
AREAID AS salesAreaCode,
AREANAME AS salesAreaName,
SALESID_T AS salesPersonCode,
SALESNAME_T AS salesPersonName,
SALEDOCID AS saleDocCode,
SALEDOCNAME AS saleDocName,
CLTPRICENO AS pricePlanCode,
CLTPRICENAME AS pricePlanName,
CLTTYPE AS customerType,
STREET AS address,
TEL1 AS phone,
EMAIL AS email,
SDORGID AS sdOrgCode,
SDORGNAME AS sdOrgName,
province, city, ISSTOP AS isStop
FROM SCLTGENERAL
WHERE CLTCODE = #{customerCode}
''',
'result_type': 'SINGLE',
},
3: { # api_id = 3 (销区列表 - OSDORG表)
'sql_template': '''
SELECT DISTINCT ORGCODE AS salesAreaCode, ORGNAME AS salesAreaName
FROM OSDORG
WHERE ORGLEVEL = 3
AND ORGCODE IS NOT NULL
AND ORGNAME IS NOT NULL
AND ISENABLE = 1
ORDER BY ORGCODE
''',
},
# api_id = 4 (品牌列表) - SQL已正确无需修复
}
print("\n开始修复SQL模板...")
for api_id, updates in fixed_configs.items():
print(f"\n修复API ID {api_id}:")
if 'sql_template' in updates:
sql_template = updates['sql_template'].strip()
cursor.execute("""
UPDATE erp_api_config
SET sql_template = %s,
update_time = NOW()
WHERE api_id = %s
""", (sql_template, api_id))
print(f" ✓ SQL模板已更新")
if 'api_desc' in updates:
cursor.execute("""
UPDATE erp_api_config
SET api_desc = %s,
update_time = NOW()
WHERE api_id = %s
""", (updates['api_desc'], api_id))
print(f" ✓ API描述已更新")
conn.commit()
# 显示修复后的配置
print("\n验证修复结果:")
cursor.execute("""
SELECT api_id, api_name, api_path, result_type, support_pagination
FROM erp_api_config
ORDER BY api_id
""")
for row in cursor.fetchall():
api_id, name, path, result_type, pagination = row
print(f" [{api_id}] {name} - {path} ({result_type}, 分页={pagination})")
cursor.close()
conn.close()
print("\n✅ SQL模板修复完成")
print("\n下一步:")
print(" 1. 重启ERP服务如果需要立即生效")
print(" 2. 测试动态API:")
print(" curl 'http://192.168.120.60:8082/erp/dynamic/v1/customer/list?pageNum=1&pageSize=10'")
print(" curl 'http://192.168.120.60:8082/erp/dynamic/v1/customer/detail?customerCode=C00001'")
print(" 3. 对比旧API和动态API的结果一致性")