13日1358-Mex模块增加多币种适配.md 5.3 KB

Mex模块增加多币种适配

任务时间: 2025年06月13日 13:58:53 CST
任务内容: 为Mex模块增加多币种适配功能,默认使用钻石币种

1. 任务背景

Mex模块原本只支持单一币种(金币),需要扩展为支持多币种交易,特别是默认使用钻石币种进行交易。

2. 实施方案

2.1 数据库结构调整

添加币种字段

  • 订单表(kku_mex_orders):添加 currency_type 字段,默认值为2(钻石)
  • 成交记录表(kku_mex_transactions):添加 currency_type 字段,默认值为2(钻石)
  • 为两个表的币种字段添加索引,提高查询性能

SQL执行语句

-- 1. 为订单表添加币种字段
ALTER TABLE `kku_mex_orders` 
ADD COLUMN `currency_type` int NOT NULL DEFAULT 2 COMMENT '币种类型,关联FUND_CURRENCY_TYPE枚举,默认2为钻石' AFTER `item_id`,
ADD INDEX `idx_currency_type` (`currency_type`) USING BTREE COMMENT '币种类型索引';

-- 2. 为成交记录表添加币种字段
ALTER TABLE `kku_mex_transactions` 
ADD COLUMN `currency_type` int NOT NULL DEFAULT 2 COMMENT '币种类型,关联FUND_CURRENCY_TYPE枚举,默认2为钻石' AFTER `item_id`,
ADD INDEX `idx_currency_type` (`currency_type`) USING BTREE COMMENT '币种类型索引';

2.2 FundLogic类完善

增强币种映射功能

  • 完善币种与账户类型的映射关系
  • 支持金币、钻石、人民币、美元四种币种
  • 提供默认币种(钻石)和相关工具方法

主要改进

// 新增的主要方法
- getDefaultCurrency(): 获取默认币种(钻石)
- getDefaultMapping(): 获取默认币种的账户映射
- getAvailableAccountType(): 获取指定币种的可用账户类型
- getFrozenAccountType(): 获取指定币种的冻结账户类型
- isCurrencySupported(): 检查币种是否支持
- getSupportedCurrencies(): 获取所有支持的币种列表

2.3 模型文件更新

MexOrder模型

  • 添加 currency_type 字段到 $fillable 数组
  • 添加 FUND_CURRENCY_TYPE 类型转换
  • 更新字段注释文档

MexTransaction模型

  • 添加 currency_type 字段到 $fillable 数组
  • 添加 FUND_CURRENCY_TYPE 类型转换
  • 更新字段注释文档

2.4 Logic层适配

MexAccountLogic类改进

  • processSellOrder() 方法增加币种参数支持
  • processBuyOrder() 方法增加币种参数支持
  • getWarehouseFundBalance() 方法支持币种参数
  • getRegulationFundBalance() 方法支持币种参数
  • 根据币种精度动态计算资金转换倍数

MexTransactionLogic类改进

  • createTransaction() 方法支持币种字段
  • 默认使用钻石币种(currency_type = 2)

2.5 精度处理优化

动态精度计算

  • 根据币种的 getPrecision() 方法获取精度
  • 使用 bcpow('10', $precision) 动态计算转换倍数
  • 替换硬编码的100倍数转换

币种精度配置

  • 金币:0位小数(整数)
  • 钻石:10位小数
  • 人民币:2位小数
  • 美元:2位小数

3. 技术特点

3.1 向后兼容

  • 所有新增字段都有默认值(钻石币种)
  • 现有代码无需修改即可正常运行
  • 方法签名保持兼容,币种参数为可选

3.2 扩展性设计

  • 币种映射关系集中管理
  • 支持新币种的快速添加
  • 账户类型映射灵活配置

3.3 精度处理

  • 根据币种动态计算精度
  • 避免硬编码的精度处理
  • 支持高精度小数运算

4. 文件修改清单

4.1 核心逻辑文件

  • app/Module/Mex/Logic/FundLogic.php:完善多币种映射
  • app/Module/Mex/Logic/MexAccountLogic.php:支持币种参数
  • app/Module/Mex/Logic/MexTransactionLogic.php:支持币种字段

4.2 模型文件

  • app/Module/Mex/Models/MexOrder.php:添加币种字段
  • app/Module/Mex/Models/MexTransaction.php:添加币种字段

4.3 数据库文件

  • app/Module/Mex/Databases/GenerateSql/mex_orders.sql:更新表结构
  • app/Module/Mex/Databases/GenerateSql/mex_transactions.sql:更新表结构
  • app/Module/Mex/Databases/Migrations/add_currency_fields.sql:迁移脚本

4.4 配置文件

  • AiWork/记忆习惯.md:更新模块设计记录

5. 测试验证

5.1 数据库验证

  • 确认订单表和成交记录表已添加 currency_type 字段
  • 验证字段默认值为2(钻石币种)
  • 确认索引创建成功

5.2 代码验证

  • 模型字段映射正确
  • Logic类方法支持币种参数
  • 精度计算逻辑正确

6. 后续工作

6.1 Handler层适配

  • 更新相关Handler类,传递币种参数
  • 在订单创建时指定币种类型

6.2 前端适配

  • 前端界面支持币种选择
  • 显示对应币种的余额信息

6.3 测试完善

  • 编写多币种交易的单元测试
  • 验证不同币种的精度处理

7. 总结

本次任务成功为Mex模块增加了多币种适配功能,主要特点:

  1. 默认钻石币种:符合业务需求,默认使用钻石进行交易
  2. 完整的映射关系:支持四种币种的账户类型映射
  3. 动态精度处理:根据币种自动计算精度转换
  4. 向后兼容:现有功能无需修改即可正常运行
  5. 扩展性强:支持新币种的快速添加

该功能为Mex模块的多币种交易奠定了基础,后续可以根据业务需求进一步扩展和完善。