03日1515-解决商店商品JSON生成命令todo.md 4.0 KB

解决商店商品JSON生成命令中的两个todo

任务概述

解决了 app/Module/Shop/Commands/GenerateShopItemsJsonCommand.php 文件中的两个todo,实现了将 GameConsumeItemGameRewardItem 模型转换为真实的protobuf对象。

任务时间

  • 开始时间:2025年06月03日 15:15:42 CST
  • 完成时间:2025年06月03日 15:15:42 CST

修改的文件

1. app/Module/Game/Models/GameConsumeItem.php

新增功能:

  • 添加了 getNameAttribute() 访问器,用于获取消耗项的名称
  • 添加了 getTargetName() 方法,根据消耗类型获取对应的目标名称
  • 添加了 toDeductObject() 方法,将模型转换为 \Uraus\Kku\Common\Deduct protobuf对象

支持的消耗类型:

  • ITEM: 物品消耗,转换为 DeductItem 对象
  • CURRENCY: 币种消耗,转换为 DeductCoin 对象
  • FUND_CONFIG: 账户种类消耗,转换为 DeductCoin 对象

2. app/Module/Game/Models/GameRewardItem.php

新增功能:

  • 添加了 getTypeAttribute() 访问器,用于获取奖励类型名称
  • 添加了 getNameAttribute() 访问器,用于获取奖励项的名称
  • 添加了 getTargetName() 方法,根据奖励类型获取对应的目标名称
  • 添加了 toRewardObject() 方法,将模型转换为 \Uraus\Kku\Common\Reward protobuf对象

支持的奖励类型:

  • ITEM: 物品奖励,转换为 RewardItem 对象
  • CURRENCY/FUND_CONFIG: 代币奖励,转换为 RewardCoin 对象
  • PET: 宠物奖励,转换为 RewardPets 对象
  • PET_POWER/PET_ENERGY: 宠物体力奖励,转换为 RewardPetPowers 对象
  • FARM_SHRINE: 神像奖励,转换为 RewardGod 对象

3. app/Module/Shop/Commands/GenerateShopItemsJsonCommand.php

修改内容:

  • 第一个todo(第97-98行):将消耗组转换逻辑改为调用 $consumeItem->toDeductObject()
  • 第二个todo(第111-112行):将奖励组转换逻辑改为调用 $rewardItem->toRewardObject()
  • 移除了调试代码和注释,现在返回真实的protobuf对象

技术实现细节

protobuf对象创建

消耗组转换示例:

// 物品消耗
$deductItem = new \Uraus\Kku\Common\DeductItem([
    'item_id' => $this->target_id,
    'instance_id' => 0,
    'quantity' => $this->quantity,
]);

// 代币消耗
$deductCoin = new \Uraus\Kku\Common\DeductCoin([
    'type' => $this->target_id,
    'quantity' => $this->quantity,
]);

奖励组转换示例:

// 物品奖励
$rewardItem = new \Uraus\Kku\Common\RewardItem([
    'item_id' => $this->target_id,
    'instance_id' => 0,
    'quantity' => $this->max_quantity ?: $this->quantity,
]);

// 宠物奖励
$rewardPet = new \Uraus\Kku\Common\RewardPets([
    'pet_type' => $this->target_id,
    'quantity' => $this->quantity,
]);

名称获取逻辑

实现了智能的名称获取机制,根据不同类型从对应的数据表中获取名称:

  • 物品:从 item_items 表获取
  • 货币:从 fund_currency 表获取
  • 账户种类:从 fund_config 表获取
  • 宠物:从 pet_configs 表获取

测试结果

  • 命令执行成功:php artisan shop:generate-json --verbose
  • 输出:Successfully generated shop_items.json with timestamp
  • 无错误或异常发生

提交信息

解决商店商品JSON生成命令中的两个todo

- 为GameConsumeItem模型添加name访问器和toDeductObject方法
- 为GameRewardItem模型添加type和name访问器以及toRewardObject方法  
- 修复GenerateShopItemsJsonCommand中的数据转换逻辑
- 现在返回真实的protobuf对象而不是数组格式
- 支持物品、代币、宠物、宠物体力、神像等多种奖励类型的转换

影响范围

  • 商店商品JSON配置生成功能
  • 消耗组和奖励组的数据格式
  • protobuf对象的正确创建和使用

注意事项

  1. 所有异常处理都保留了原有的try-catch结构
  2. 保持了向后兼容性
  3. 支持了完整的奖励类型体系
  4. 遵循了用户偏好的中文注释风格