05日1944-ConsumeService增加倍数参数支持.md 5.1 KB

ConsumeService::checkConsume方法增加倍数参数支持

任务概述

App\Module\Game\Services\ConsumeService::checkConsume方法增加一个倍数参数,用于验证几倍消耗。

实现内容

1. 检查消耗方法修改

1.1 checkConsume方法

  • 添加$multiplier参数,类型为float,默认值为1.0
  • 更新方法注释,说明倍数参数的用途
  • 将倍数参数传递给checkConsumeItem方法

    public static function checkConsume(int $userId, $consumeGroupCode, float $multiplier = 1.0): Res
    

1.2 checkConsumeItem方法

  • 添加$multiplier参数,默认值为1.0
  • 将倍数参数传递给具体的检查方法:
    • checkItemConsume
    • checkFundConfigConsume
    • checkCurrencyConsume

1.3 checkItemConsume方法

  • 添加$multiplier参数,默认值为1.0
  • 使用ceil($consumeItem->quantity * $multiplier)计算所需数量
  • 使用向上取整确保物品数量为整数
  • 在返回的数据中包含计算后的required和actual数量

1.4 checkFundConfigConsume方法

  • 添加$multiplier参数,默认值为1.0
  • 使用$consumeItem->quantity * $multiplier计算所需金额
  • 在返回的数据中包含计算后的required和actual金额

1.5 checkCurrencyConsume方法

  • 添加$multiplier参数,默认值为1.0
  • 使用$consumeItem->quantity * $multiplier计算所需金额
  • 在返回的数据中包含计算后的required和actual金额

2. 执行消耗方法修改

2.1 executeConsume方法

  • 添加$multiplier参数,类型为float,默认值为1.0
  • 在检查消耗条件时使用相同的倍数
  • 将倍数参数传递给executeConsumeItem方法

    public static function executeConsume(int $userId, $consumeGroupCode, string $source, int $sourceId = 0, $check = true, float $multiplier = 1.0): Res
    

2.2 executeConsumeItem方法

  • 添加$multiplier参数,默认值为1.0
  • 将倍数参数传递给具体的执行方法:
    • executeItemConsume
    • executeFundConfigConsume
    • executeCurrencyConsume

2.3 executeItemConsume方法

  • 添加$multiplier参数,默认值为1.0
  • 使用ceil($consumeItem->quantity * $multiplier)计算实际消耗数量
  • 在details中记录倍数信息

2.4 executeFundConfigConsume方法

  • 添加$multiplier参数,默认值为1.0
  • 使用$consumeItem->quantity * $multiplier计算实际消耗金额
  • 在备注中记录倍数信息(当倍数不为1.0时)

2.5 executeCurrencyConsume方法

  • 添加$multiplier参数,默认值为1.0
  • 使用$consumeItem->quantity * $multiplier计算实际消耗金额
  • 在检查余额时使用相同的倍数
  • 在备注中记录倍数信息(当倍数不为1.0时)

3. 兼容性保证

  • 所有新增的倍数参数都有默认值1.0
  • 现有的调用代码无需修改,保持向后兼容
  • 修复了CraftService中executeConsume的调用方式,正确传递倍数参数

4. 使用示例

// 检查正常消耗(1倍)
$result = ConsumeService::checkConsume($userId, $consumeGroupId);

// 检查2倍消耗
$result = ConsumeService::checkConsume($userId, $consumeGroupId, 2.0);

// 检查0.5倍消耗
$result = ConsumeService::checkConsume($userId, $consumeGroupId, 0.5);

// 执行正常消耗(1倍)
$result = ConsumeService::executeConsume($userId, $consumeGroupId, 'source', $sourceId);

// 执行2倍消耗
$result = ConsumeService::executeConsume($userId, $consumeGroupId, 'source', $sourceId, true, 2.0);

// 执行3倍消耗,不检查条件
$result = ConsumeService::executeConsume($userId, $consumeGroupId, 'source', $sourceId, false, 3.0);

4. 修复的问题

4.1 CraftService调用修复

  • 修复了CraftService中executeConsume方法的调用方式
  • 原来错误地将quantity作为第5个参数传递
  • 现在正确地传递check=true和multiplier=$quantity

5. 技术细节

5.1 物品数量处理

  • 使用ceil()函数向上取整,确保物品数量为整数
  • 例如:原需要3个物品,2.5倍消耗 = ceil(3 * 2.5) = 8个物品

5.2 金额处理

  • 账户种类和币种消耗直接使用倍数计算
  • 支持小数倍数,如1.5倍、0.8倍等

5.3 错误信息

  • 错误信息中显示计算后的实际需求量
  • 便于调试和用户理解

5.4 备注记录

  • 在账户种类和币种消耗的备注中记录倍数信息
  • 当倍数不为1.0时,在备注中添加"倍数:X.X"
  • 在物品消耗的details中记录倍数信息

测试验证

  • 语法检查通过
  • 保持现有调用的兼容性
  • 新功能可以正常使用倍数参数

提交信息

为ConsumeService执行消耗方法增加倍数参数支持

- 为executeConsume方法添加multiplier参数,支持执行几倍消耗
- 修改executeConsumeItem、executeItemConsume、executeFundConfigConsume、executeCurrencyConsume方法支持倍数参数
- 物品消耗使用ceil()向上取整确保数量为整数
- 账户种类和币种消耗直接使用倍数计算实际消耗金额
- 在备注中记录倍数信息,便于追踪
- 修复CraftService中executeConsume调用方式,正确传递倍数参数
- 保持向后兼容性,现有调用无需修改

完成时间

2025年06月05日 19:44