12日1425-Fund模块增加钻石冻结账户.md 5.0 KB

Fund模块增加钻石冻结账户

任务时间: 2025年06月12日 14:25:38 CST
任务内容: Fund模块增加一个钻石冻结账户,同属于钻石币种;小数点精度10位

1. 任务背景

用户需要在Fund模块中增加一个钻石冻结账户,用于存储被冻结的钻石资金。该账户与现有的钻石账户同属于钻石币种,但用途不同:

  • 钻石账户:用于存储用户可自由使用的钻石资金
  • 钻石冻结账户:用于存储被冻结的钻石资金,冻结期间不可使用

同时需要将钻石币种的小数精度从6位调整为10位。

2. 实施方案

2.1 修改币种精度配置

更新 FUND_CURRENCY_TYPE 枚举中钻石的精度配置:

  • 从6位小数调整为10位小数
  • 保持其他币种精度不变

2.2 添加新的账户类型

FUND_TYPE 枚举中添加:

  • FUND3 = 3 作为钻石冻结账户

2.3 数据库配置

fund_config 表中添加钻石冻结账户的配置记录:

  • ID: 3
  • 名称: "钻石冻结"
  • 币种ID: 2 (钻石)
  • 类型: 3 (FUND3)
  • 显示属性: 包含冻结标识和红色标记

3. 核心代码变更

3.1 FUND_CURRENCY_TYPE.php

// 修改前
self::ZUANSHI => 6,  // 钻石:6位小数

// 修改后
self::ZUANSHI => 10, // 钻石:10位小数

3.2 FUND_TYPE.php

// 新增钻石冻结账户
/**
 * 钻石冻结账户
 *
 * 对应币种:钻石(OWG)
 * 用于存储用户被冻结的钻石资金,冻结期间不可使用
 */
case FUND3 = 3;

3.3 数据库配置

INSERT INTO kku_fund_config (id, name, currency_id, type, display_attributes, create_time, update_time) 
VALUES (3, '钻石冻结', 2, 3, '{"icon": "icon/item/999_0_png", "badge": "冻结", "color": "#ff6b6b", "animation": "", "background": "", "description": "被冻结的钻石资金,冻结期间不可使用"}', UNIX_TIMESTAMP(), UNIX_TIMESTAMP());

4. 系统兼容性

4.1 后台管理系统

  • 使用 AccountService::getFundsDesc() 方法自动获取账户描述
  • 新的钻石冻结账户会自动出现在后台管理界面的选择列表中
  • 支持在后台创建和管理钻石冻结账户

4.2 服务层支持

  • FundService 类支持对钻石冻结账户的所有操作
  • 支持钻石账户与钻石冻结账户之间的资金流转
  • 保持与现有API的兼容性

4.3 验证器支持

  • FundIdCheckValidator 自动支持新的账户类型
  • 现有的验证逻辑无需修改

5. 业务场景

5.1 冻结操作

// 从钻石账户转移到钻石冻结账户
$fundService = new FundService($userId, FUND_TYPE::FUND2->value);
$result = $fundService->circulation(
    FUND_TYPE::FUND3, 
    $amount, 
    $orderId, 
    'FREEZE', 
    '交易冻结'
);

5.2 解冻操作

// 从钻石冻结账户转移回钻石账户
$fundService = new FundService($userId, FUND_TYPE::FUND3->value);
$result = $fundService->circulation(
    FUND_TYPE::FUND2, 
    $amount, 
    $orderId, 
    'UNFREEZE', 
    '解除冻结'
);

6. 验证结果

6.1 语法检查

✓ php -l app/Module/Fund/Enums/FUND_TYPE.php
✓ php -l app/Module/Fund/Enums/FUND_CURRENCY_TYPE.php

6.2 数据库验证

-- 验证配置记录已正确插入
SELECT * FROM kku_fund_config WHERE id = 3;
-- 结果:钻石冻结账户配置正确

6.3 功能测试

  • ✓ 枚举类型正常工作
  • ✓ 数据库配置正确
  • ✓ 后台管理界面支持新账户类型
  • ✓ 精度配置更新成功

7. 注意事项

7.1 精度处理

  • 钻石币种现在支持10位小数精度
  • 数据库使用DECIMAL(30,10)存储,完全兼容新精度
  • 现有的钻石数据不受影响

7.2 业务逻辑

  • 钻石冻结账户仅用于存储冻结资金
  • 不建议直接向冻结账户充值
  • 冻结和解冻操作应通过资金流转实现

7.3 系统集成

  • 新账户类型会自动出现在所有使用AccountService的地方
  • 缓存会自动更新,无需手动清理
  • 与现有系统完全兼容

8. 文件变更清单

修改的文件

  • app/Module/Fund/Enums/FUND_CURRENCY_TYPE.php - 钻石精度调整
  • app/Module/Fund/Enums/FUND_TYPE.php - 添加钻石冻结账户

数据库变更

  • kku_fund_config 表 - 新增钻石冻结账户配置记录

9. 后续建议

9.1 功能扩展

  • 考虑为其他币种也添加对应的冻结账户
  • 实现自动冻结/解冻的定时任务
  • 添加冻结原因和期限管理

9.2 监控和日志

  • 监控冻结账户的资金变动
  • 记录冻结和解冻操作的详细日志
  • 定期检查冻结账户的数据一致性

9.3 用户体验

  • 在前端界面区分显示可用和冻结资金
  • 提供冻结资金的查询和历史记录
  • 优化冻结状态的用户提示

任务完成情况

已完成: Fund模块钻石冻结账户添加
已完成: 钻石币种精度调整为10位小数
已完成: 数据库配置更新
已完成: 代码提交和推送
已完成: 语法和功能验证

提交信息: Fund模块:增加钻石冻结账户,钻石精度调整为10位小数