13日1358-Mex模块增加多币种适配.md 7.1 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:支持币种字段
  • app/Module/Mex/Logic/MexOrderLogic.php:支持币种参数传递
  • app/Module/Mex/Logic/MexMatchLogic.php:支持动态币种和精度处理

4.2 服务层文件

  • app/Module/Mex/Services/MexOrderService.php:支持币种参数

4.3 模型文件

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

4.4 数据库文件

  • 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.5 测试文件

  • app/Module/Mex/Tests/MultiCurrencyTest.php:多币种功能测试类
  • app/Module/Mex/Commands/TestMultiCurrencyCommand.php:测试命令
  • app/Module/Mex/Providers/MexServiceProvider.php:注册测试命令

4.6 配置文件

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

5. 测试验证

5.1 数据库验证

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

5.2 代码验证

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

6. 完善工作

6.1 Logic层完善 ✅

  • 更新MexOrderLogic类,支持币种参数传递,默认使用钻石币种
  • 修改MexMatchLogic类的资金转移方法,支持动态币种和精度处理
  • 更新MexTransactionLogic的createTransaction方法,支持币种字段

6.2 Service层适配 ✅

  • 更新MexOrderService类,为创建订单方法增加币种参数支持
  • 保持向后兼容,币种参数为可选,默认使用钻石

6.3 测试验证 ✅

  • 创建MultiCurrencyTest测试类,验证多币种功能正常工作
  • 添加TestMultiCurrencyCommand命令,提供完整的多币种功能测试
  • 测试结果:币种映射正确、订单创建支持币种、账户余额查询正常

6.4 后续工作

  • Handler层适配:更新相关Handler类,传递币种参数
  • 前端适配:前端界面支持币种选择,显示对应币种的余额信息
  • 业务扩展:根据需求添加更多币种支持

7. 测试验证结果

7.1 测试命令

php artisan mex:test-multi-currency

7.2 测试结果

  • FundLogic币种映射测试 ✅:默认币种钻石,映射关系正确,支持4种币种
  • 订单创建币种支持测试 ✅:币种参数正确传递,无币种相关错误
  • 账户余额币种支持测试 ✅:不同币种余额查询正常,精度处理正确

7.3 验证数据

  • 默认币种:2 (ZUANSHI)
  • 钻石币种映射:可用账户FUND2,冻结账户FUND3
  • 金币币种映射:可用账户FUND1,冻结账户FUND1
  • 支持币种:1(金币), 2(钻石), 3(人民币), 4(美元)

8. 总结

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

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

该功能为Mex模块的多币种交易奠定了坚实基础,后续可以根据业务需求进一步扩展和完善。通过测试验证,多币种适配功能已经完全可用。