|
|
@@ -0,0 +1,171 @@
|
|
|
+# 消耗组进行功能扩展
|
|
|
+
|
|
|
+**任务时间**: 2025年06月06日 11:02:00
|
|
|
+**完成时间**: 2025年06月06日 11:45:00
|
|
|
+**任务类型**: 功能扩展
|
|
|
+
|
|
|
+## 任务概述
|
|
|
+
|
|
|
+扩展消耗组系统功能,实现 `FUND_CONFIGS` 多账户种类消耗类型,支持按配置顺序依次从多个账户种类扣除资金。
|
|
|
+
|
|
|
+## 任务背景
|
|
|
+
|
|
|
+用户选中了 `FUND_CONFIGS` 类型的代码,该类型已在枚举中定义但未完全实现。需要完善相关功能,使其能够支持多账户种类的依次消耗逻辑。
|
|
|
+
|
|
|
+## 实现内容
|
|
|
+
|
|
|
+### 1. 完善 CONSUME_TYPE 枚举
|
|
|
+
|
|
|
+**文件**: `app/Module/Game/Enums/CONSUME_TYPE.php`
|
|
|
+
|
|
|
+- 在 `getAll()` 方法中添加 `FUND_CONFIGS` 类型显示
|
|
|
+- 确保枚举类型的完整性
|
|
|
+
|
|
|
+### 2. 扩展 ConsumeService 服务
|
|
|
+
|
|
|
+**文件**: `app/Module/Game/Services/ConsumeService.php`
|
|
|
+
|
|
|
+**新增方法**:
|
|
|
+- `checkFundConfigsConsume()`: 检查多账户种类消耗条件
|
|
|
+- `executeFundConfigsConsume()`: 执行多账户种类消耗
|
|
|
+- `getFundConfigIds()`: 获取消耗项的账户种类ID列表
|
|
|
+
|
|
|
+**功能特点**:
|
|
|
+- 支持从 `target_id` 和 `extra_data.fund_config_ids` 获取账户列表
|
|
|
+- 按配置顺序依次消耗,优先从主账户扣除
|
|
|
+- 支持倍数参数,用于执行几倍消耗
|
|
|
+- 完整的事务处理,确保数据一致性
|
|
|
+- 详细的错误处理和日志记录
|
|
|
+
|
|
|
+**修复问题**:
|
|
|
+- 修复 `executeConsume()` 方法的事务处理问题
|
|
|
+- 移除未使用的导入 `UCore\Db\Helper`
|
|
|
+- 完善错误处理逻辑
|
|
|
+
|
|
|
+### 3. 更新模型支持
|
|
|
+
|
|
|
+**文件**: `app/Module/Game/Models/GameConsumeItem.php`
|
|
|
+
|
|
|
+- 扩展 `getTargetName()` 方法支持 `FUND_CONFIGS` 类型
|
|
|
+- 更新 `toDeductObject()` 方法支持多账户种类的 protobuf 对象转换
|
|
|
+- 支持从 `extra_data` 中解析多个账户种类ID
|
|
|
+
|
|
|
+**文件**: `app/Module/Game/Models/GameConsumeGroup.php`
|
|
|
+
|
|
|
+- 更新 `getTargetName()` 方法支持 `FUND_CONFIGS` 类型显示
|
|
|
+- 直接使用 `GameConsumeItem` 模型的方法避免重复代码
|
|
|
+
|
|
|
+### 4. 更新测试命令
|
|
|
+
|
|
|
+**文件**: `app/Module/Game/Commands/TestConsumeCommand.php`
|
|
|
+
|
|
|
+- 修复对 `Res` 对象和数组结果的处理
|
|
|
+- 支持更好的结果显示和错误处理
|
|
|
+
|
|
|
+### 5. 完善文档
|
|
|
+
|
|
|
+**文件**: `app/Module/Game/Docs/消耗组系统.md`
|
|
|
+
|
|
|
+**新增内容**:
|
|
|
+- `FUND_CONFIGS` 类型的详细说明
|
|
|
+- 多账户种类消耗的工作原理
|
|
|
+- 配置示例和注意事项
|
|
|
+- 更新数据库结构说明
|
|
|
+
|
|
|
+## 技术实现细节
|
|
|
+
|
|
|
+### 多账户消耗逻辑
|
|
|
+
|
|
|
+1. **账户ID获取**:
|
|
|
+ - 主账户: `target_id` 字段
|
|
|
+ - 额外账户: `extra_data.fund_config_ids` 数组
|
|
|
+
|
|
|
+2. **消耗顺序**:
|
|
|
+ - 优先从主账户(`target_id`)扣除
|
|
|
+ - 主账户不足时,依次从额外账户扣除
|
|
|
+ - 按配置顺序进行,确保可预测性
|
|
|
+
|
|
|
+3. **余额检查**:
|
|
|
+ - 计算所有账户的总余额
|
|
|
+ - 确保总余额满足消耗需求
|
|
|
+ - 支持倍数参数的余额计算
|
|
|
+
|
|
|
+4. **事务处理**:
|
|
|
+ - 使用数据库事务确保原子性
|
|
|
+ - 任何步骤失败都会回滚所有操作
|
|
|
+ - 完整的错误处理和日志记录
|
|
|
+
|
|
|
+### 配置示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "target_id": 1,
|
|
|
+ "quantity": 1000,
|
|
|
+ "extra_data": {
|
|
|
+ "fund_config_ids": [2, 3, 4]
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+此配置表示:消耗1000单位资金,优先从账户种类1扣除,不足时依次从账户种类2、3、4扣除。
|
|
|
+
|
|
|
+## 测试验证
|
|
|
+
|
|
|
+### 测试用例1: 单账户消耗
|
|
|
+- 创建消耗组 `test_fund_configs`
|
|
|
+- 消耗100金币,主账户余额充足
|
|
|
+- 验证: 成功扣除100金币
|
|
|
+
|
|
|
+### 测试用例2: 多账户依次消耗
|
|
|
+- 创建消耗组 `test_fund_configs_insufficient`
|
|
|
+- 消耗10000000金币,需要从多个账户扣除
|
|
|
+- 验证:
|
|
|
+ - 金币账户从9999912减少到0(扣除9999912)
|
|
|
+ - 钻石账户从93906减少到93818(扣除88)
|
|
|
+ - 总计扣除10000000,符合预期
|
|
|
+
|
|
|
+### 测试命令
|
|
|
+```bash
|
|
|
+# 检查消耗条件
|
|
|
+php artisan game:test-consume 10001 test_fund_configs --check
|
|
|
+
|
|
|
+# 执行消耗
|
|
|
+php artisan game:test-consume 10001 test_fund_configs
|
|
|
+```
|
|
|
+
|
|
|
+## 文件变更清单
|
|
|
+
|
|
|
+1. `app/Module/Game/Enums/CONSUME_TYPE.php` - 添加FUND_CONFIGS类型显示
|
|
|
+2. `app/Module/Game/Services/ConsumeService.php` - 实现多账户消耗逻辑
|
|
|
+3. `app/Module/Game/Models/GameConsumeItem.php` - 支持FUND_CONFIGS类型
|
|
|
+4. `app/Module/Game/Models/GameConsumeGroup.php` - 支持FUND_CONFIGS显示
|
|
|
+5. `app/Module/Game/Commands/TestConsumeCommand.php` - 修复结果处理
|
|
|
+6. `app/Module/Game/Docs/消耗组系统.md` - 更新文档说明
|
|
|
+
|
|
|
+## 提交信息
|
|
|
+
|
|
|
+```
|
|
|
+扩展消耗组功能:实现FUND_CONFIGS多账户种类消耗
|
|
|
+
|
|
|
+- 在CONSUME_TYPE枚举中添加FUND_CONFIGS类型到getAll()方法
|
|
|
+- 在ConsumeService中实现checkFundConfigsConsume()和executeFundConfigsConsume()方法
|
|
|
+- 支持按配置顺序依次从多个账户种类扣除资金
|
|
|
+- 更新GameConsumeItem模型支持FUND_CONFIGS类型的目标名称显示
|
|
|
+- 更新GameConsumeGroup模型支持FUND_CONFIGS类型的格式化显示
|
|
|
+- 完善toDeductObject()方法支持多账户种类的protobuf对象转换
|
|
|
+- 修复executeConsume()方法的事务处理问题
|
|
|
+- 更新消耗组系统文档,添加FUND_CONFIGS类型详细说明
|
|
|
+- 更新TestConsumeCommand支持Res对象和数组结果的处理
|
|
|
+- 通过测试验证功能正常:单账户消耗和多账户依次消耗均工作正常
|
|
|
+```
|
|
|
+
|
|
|
+## 任务状态
|
|
|
+
|
|
|
+✅ **已完成** - 功能已实现并通过测试验证,代码已提交并推送到远程仓库。
|
|
|
+
|
|
|
+## 后续建议
|
|
|
+
|
|
|
+1. **后台管理界面优化**: 可以考虑在后台管理中添加多账户种类选择的UI组件
|
|
|
+2. **性能优化**: 对于大量账户的情况,可以考虑批量查询优化
|
|
|
+3. **监控和日志**: 可以添加更详细的消耗日志,便于问题排查
|
|
|
+4. **文档完善**: 可以添加更多使用场景的示例
|