5.1 KiB
5.1 KiB
配置值格式统一 - 实施指南
🎯 统一原则
核心原则:前端和后端使用相同的值(比例形式0.30),只在显示时转换
数据格式
| 位置 | 格式 | 示例 | 说明 |
|---|---|---|---|
| 数据库存储 | 比例形式 | 0.30 | 表示30% |
| 前端显示 | 百分比形式 | 30% | 用户看到30%(仅显示转换) |
| 前端存储 | 比例形式 | 0.30 | 用户输入30,转换为0.30存储 |
| 后端使用 | 比例形式 | 0.30 | 直接使用,不需要转换 |
✅ 当前实现状态
前端逻辑(已正确)
显示逻辑:
- 从数据库读取0.30,显示为30%(用户看到)
- 仅做显示转换,不改变存储值
存储逻辑:
- 用户输入30,转换为0.30存储
- 存储的值与后端使用相同的值(0.30)
结论:✅ 前端逻辑正确,存储的值与后端一致
后端逻辑(已优化)
当前实现:
- 直接使用比例形式(0.30)
- 临时兼容性处理:如果值>1,转换为0.30(处理旧数据)
结论:✅ 后端逻辑正确,数据迁移后可以移除兼容性处理
🔧 实施步骤
步骤1:执行数据迁移(必须)
目的:将数据库中的百分比形式(30)转换为比例形式(0.30)
脚本:backend/database/migrate_percent_configs_to_ratio.sql
执行:
# 1. 备份数据库(强烈推荐)
mysqldump -u username -p database_name > backup_$(date +%Y%m%d_%H%M%S).sql
# 2. 执行SQL迁移脚本
mysql -u username -p database_name < backend/database/migrate_percent_configs_to_ratio.sql
验证:
-- 检查迁移结果:应该没有>1的值
SELECT config_key, config_value
FROM trading_config
WHERE config_key IN (
'TRAILING_STOP_ACTIVATION',
'TRAILING_STOP_PROTECT',
'MIN_VOLATILITY',
'TAKE_PROFIT_PERCENT',
'STOP_LOSS_PERCENT'
)
AND config_type = 'number'
AND CAST(config_value AS DECIMAL(10, 4)) > 1;
-- 应该返回0行
步骤2:清除Redis缓存
# 清除Redis缓存,让系统重新加载配置
redis-cli DEL "config:trading_config:*"
redis-cli DEL "config:global_strategy_config:*"
步骤3:重启服务
# 重启后端服务
supervisorctl restart backend
# 重启交易进程
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4
步骤4:验证配置值
检查日志:
# 查看配置日志,确认配置值显示正确
tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep "交易配置"
预期结果:
- 移动止损激活条件:盈利30%(而不是3000%)
- 移动止损保护利润:15%(而不是1500%)
- 最小波动率:3%(而不是300%)
📊 数据流
统一后的数据流
用户输入30
↓
前端输入转换:30 -> 0.30(仅前端输入时转换)
↓
存储到数据库:0.30(与后端使用相同的值)
↓
前端显示转换:0.30 -> 30%(仅显示时转换,用户看到30%)
↓
后端读取:0.30(直接使用,不需要转换)
↓
后端使用:0.30(直接使用)
✅ 优势
统一格式的优势
-
数据格式统一:
- 数据库存储:0.30
- 前端存储:0.30
- 后端使用:0.30
- ✅ 三者一致,避免格式混乱
-
代码逻辑简单:
- 前端只在输入和显示时转换
- 后端直接使用,不需要转换
- ✅ 减少出错,易于维护
-
避免中间转换问题:
- 前端存储的值与后端使用的值一致
- 不需要在代码中做格式转换
- ✅ 避免转换错误
📝 总结
最终方案
- 数据库存储:比例形式(0.30表示30%)
- 前端显示:百分比形式(30%,用户看到)
- 前端存储:比例形式(0.30,与后端使用相同的值)
- 后端使用:比例形式(0.30,直接使用)
转换位置
- ✅ 前端输入时转换:30 -> 0.30(用户输入30,存储0.30)
- ✅ 前端显示时转换:0.30 -> 30%(用户看到30%)
- ✅ 后端直接使用:0.30(不需要转换)
实施建议
- 立即执行数据迁移:统一数据格式
- 保留格式转换作为兼容性处理:标记为临时方案
- 后续可以移除格式转换:数据格式统一后,可以移除
🎯 关键点
前端和后端使用相同的值
- ✅ 前端存储:0.30(用户输入30,转换为0.30)
- ✅ 后端使用:0.30(直接使用)
- ✅ 两者一致:避免中间转换出问题
只在显示时转换
- ✅ 前端显示:30%(用户看到)
- ✅ 前端存储:0.30(与后端一致)
- ✅ 后端使用:0.30(直接使用)
✅ 结论
前端和后端使用相同的值(比例形式0.30):
- ✅ 前端输入时转换:30 -> 0.30(用户输入30,存储0.30)
- ✅ 前端显示时转换:0.30 -> 30%(用户看到30%)
- ✅ 后端直接使用:0.30(不需要转换)
- ✅ 数据格式统一:数据库、前端、后端都是0.30
优势:
- ✅ 避免中间转换出问题
- ✅ 代码逻辑简单
- ✅ 易于维护