| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <?php
- namespace App\Module\Game\Services;
- use App\Module\Fund\Models\FundConfigModel;
- use App\Module\Fund\Models\FundCurrencyModel;
- use App\Module\Game\Enums\CONSUME_TYPE;
- use App\Module\Game\Models\GameConsumeGroup;
- use App\Module\Game\Models\GameConsumeItem;
- use App\Module\GameItems\Models\Item;
- use Illuminate\Support\Facades\Log;
- /**
- * 消耗组服务类
- *
- * 提供消耗组相关的服务,包括获取消耗组详情、获取消耗组材料等功能
- */
- class ConsumeGroupService
- {
- /**
- * 获取消耗组详情
- *
- * @param int|string $consumeGroupCode 消耗组ID或编码
- * @return GameConsumeGroup|null 消耗组详情
- */
- public static function getConsumeGroup($consumeGroupCode): ?GameConsumeGroup
- {
- try {
- // 获取消耗组
- $consumeGroup = is_numeric($consumeGroupCode)
- ? GameConsumeGroup::with('consumeItems')->find($consumeGroupCode)
- : GameConsumeGroup::with('consumeItems')->where('code', $consumeGroupCode)->first();
- return $consumeGroup;
- } catch (\Exception $e) {
- Log::error('获取消耗组详情失败', [
- 'consume_group' => $consumeGroupCode,
- 'error' => $e->getMessage()
- ]);
- return null;
- }
- }
- /**
- * 获取消耗组材料
- *
- * @param int|string $consumeGroupCode 消耗组ID或编码
- * @return array 消耗组材料
- */
- public static function getConsumeMaterials($consumeGroupCode): array
- {
- try {
- // 获取消耗组
- $consumeGroup = self::getConsumeGroup($consumeGroupCode);
- if (!$consumeGroup || $consumeGroup->consumeItems->isEmpty()) {
- return [];
- }
- return self::consumeItems2Array($consumeGroup->consumeItems);
- } catch (\Exception $e) {
- Log::error('获取消耗组材料失败', [
- 'consume_group' => $consumeGroupCode,
- 'error' => $e->getMessage()
- ]);
- return [];
- }
- }
- /**
- * 消耗组材料数组
- * @param array|GameConsumeItem[] $consumeGroup 消耗组
- * @return array 消耗组材料
- */
- static public function consumeItems2Array( $consumeItems )
- {
- $materials = [];
- // 处理每个消耗项
- foreach ($consumeItems as $item) {
- if ($item->consume_type == CONSUME_TYPE::ITEM->value) {
- // 获取物品信息
- $itemInfo = Item::find($item->target_id);
- $materials[] = [
- 'type' => $item->consume_type,
- 'item_id' => $item->target_id,
- 'item_name' => $itemInfo ? $itemInfo->name : "物品 {$item->target_id}",
- 'amount' => $item->quantity
- ];
- } elseif ($item->consume_type == CONSUME_TYPE::CURRENCY->value) {
- // 获取货币信息
- $currencyInfo = FundCurrencyModel::find($item->target_id);
- $materials[] = [
- 'type' => $item->consume_type,
- 'currency_id' => $item->target_id,
- 'currency_name' => $currencyInfo ? $currencyInfo->name : "货币 {$item->target_id}",
- 'amount' => $item->quantity
- ];
- } elseif ($item->consume_type == CONSUME_TYPE::FUND_CONFIG->value) {
- // 获取代币账户信息
- $fundInfo = FundConfigModel::find($item->target_id);
- $materials[] = [
- 'type' => $item->consume_type,
- 'fund_id' => $item->target_id,
- 'fund_name' => $fundInfo ? $fundInfo->name : "代币账户 {$item->target_id}",
- 'amount' => $item->quantity
- ];
- }
- }
- return $materials;
- }
- }
|