Quellcode durchsuchen

优化模型代码,将业务逻辑移至服务层,创建 ConsumeGroupService 处理消耗组相关逻辑

notfff vor 7 Monaten
Ursprung
Commit
c5914644b7

+ 2 - 36
app/Module/Farm/Models/FarmHouseConfig.php

@@ -67,43 +67,9 @@ class FarmHouseConfig extends Model
      */
     public function getUpgradeMaterials(): array
     {
-        // 如果有关联的消耗组,则使用消耗组中的消耗项
+        // 如果有关联的消耗组,则使用消耗组服务获取材料
         if ($this->upgrade_materials && is_numeric($this->upgrade_materials)) {
-            // 获取消耗组
-            $consumeGroup = $this->consumeGroup;
-            if ($consumeGroup && $consumeGroup->consumeItems) {
-                $materials = [];
-
-                foreach ($consumeGroup->consumeItems as $item) {
-                    if ($item->consume_type == \App\Module\Game\Enums\CONSUME_TYPE::ITEM->value) {
-                        // 获取物品信息
-                        $itemInfo = \App\Module\GameItems\Models\Item::find($item->target_id);
-                        $materials[] = [
-                            'item_id' => $item->target_id,
-                            'item_name' => $itemInfo ? $itemInfo->name : "物品 {$item->target_id}",
-                            'amount' => $item->quantity
-                        ];
-                    } elseif ($item->consume_type == \App\Module\Game\Enums\CONSUME_TYPE::CURRENCY->value) {
-                        // 获取货币信息
-                        $currencyInfo = \App\Module\Fund\Models\FundCurrencyModel::find($item->target_id);
-                        $materials[] = [
-                            'currency_id' => $item->target_id,
-                            'currency_name' => $currencyInfo ? $currencyInfo->name : "货币 {$item->target_id}",
-                            'amount' => $item->quantity
-                        ];
-                    } elseif ($item->consume_type == \App\Module\Game\Enums\CONSUME_TYPE::FUND->value) {
-                        // 获取代币账户信息
-                        $fundInfo = \App\Module\Fund\Models\FundConfigModel::find($item->target_id);
-                        $materials[] = [
-                            'fund_id' => $item->target_id,
-                            'fund_name' => $fundInfo ? $fundInfo->name : "代币账户 {$item->target_id}",
-                            'amount' => $item->quantity
-                        ];
-                    }
-                }
-
-                return $materials;
-            }
+            return \App\Module\Game\Services\ConsumeGroupService::getConsumeMaterials($this->upgrade_materials);
         }
 
         return [];

+ 100 - 0
app/Module/Game/Services/ConsumeGroupService.php

@@ -0,0 +1,100 @@
+<?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\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 [];
+            }
+            
+            $materials = [];
+            
+            // 处理每个消耗项
+            foreach ($consumeGroup->consumeItems as $item) {
+                if ($item->consume_type == CONSUME_TYPE::ITEM->value) {
+                    // 获取物品信息
+                    $itemInfo = Item::find($item->target_id);
+                    $materials[] = [
+                        '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[] = [
+                        'currency_id' => $item->target_id,
+                        'currency_name' => $currencyInfo ? $currencyInfo->name : "货币 {$item->target_id}",
+                        'amount' => $item->quantity
+                    ];
+                } elseif ($item->consume_type == CONSUME_TYPE::FUND->value) {
+                    // 获取代币账户信息
+                    $fundInfo = FundConfigModel::find($item->target_id);
+                    $materials[] = [
+                        'fund_id' => $item->target_id,
+                        'fund_name' => $fundInfo ? $fundInfo->name : "代币账户 {$item->target_id}",
+                        'amount' => $item->quantity
+                    ];
+                }
+            }
+            
+            return $materials;
+        } catch (\Exception $e) {
+            Log::error('获取消耗组材料失败', [
+                'consume_group' => $consumeGroupCode,
+                'error' => $e->getMessage()
+            ]);
+            
+            return [];
+        }
+    }
+}