瀏覽代碼

修复土地暂存数据存储方式:使用LandTemp统一存储方法而非直接操作Cache

notfff 7 月之前
父節點
當前提交
2ffc506506

+ 0 - 8
app/Module/AppGame/Listeners/AppGameProtobufResponseListener.php

@@ -119,14 +119,6 @@ class AppGameProtobufResponseListener
             $landChanges = LandTemp::getUserLandChanges($user_id);
             $landStatusChanges = LandTemp::getUserLandStatusChanges($user_id);
 
-            Log::debug('获取土地变更数据', [
-                'user_id' => $user_id,
-                'land_changes_count' => count($landChanges),
-                'status_changes_count' => count($landStatusChanges),
-                'land_changes' => $landChanges,
-                'status_changes' => $landStatusChanges
-            ]);
-
             // 合并两种土地变更数据,获取所有变更的土地ID
             $allLandChanges = array_merge($landChanges, $landStatusChanges);
             $changedLandIds = array_keys($allLandChanges);

+ 10 - 21
app/Module/Game/Listeners/CropGrowthStageChangedListener.php

@@ -39,28 +39,17 @@ class CropGrowthStageChangedListener
                 return;
             }
 
-            // 创建土地状态变更事件数据
-            $landStatusData = [
-                'land_id' => $land->id,
-                'position' => $land->position,
-                'land_type' => $land->land_type,
-                'old_status' => $land->status, // 使用当前状态作为旧状态
-                'new_status' => $land->status, // 使用当前状态作为新状态,因为我们只是想通知前端作物状态已更新
-                'crop_id' => $event->crop->id,
-                'updated_at' => time(),
-            ];
-
-            // 构建临时数据键,按用户ID进行存储
-            $tempKey = LandTemp::TEMP_KEY_STATUS_PREFIX . $event->userId;
-
-            // 获取当前用户的土地状态变更临时数据
-            $userLandsStatusTemp = \UCore\Helper\Cache::get($tempKey, []);
-
-            // 将新的土地状态变更数据添加到临时数据中
-            $userLandsStatusTemp[$land->id] = \App\Module\Game\Dtos\LandStatusTempDto::fromArray($landStatusData);
+            // 使用LandTemp的统一存储方法来存储土地状态变更
+            // 创建LandStatusChangedEvent并让LandTemp处理
+            $landStatusChangedEvent = new \App\Module\Farm\Events\LandStatusChangedEvent(
+                $event->userId,
+                $land->id,
+                $land->status, // 旧状态
+                $land->status  // 新状态(作物状态变更不改变土地状态,但需要通知前端)
+            );
 
-            // 将更新后的临时数据存回缓存
-            \UCore\Helper\Cache::put($tempKey, $userLandsStatusTemp, LandTemp::TEMP_TTL);
+            // 使用LandTemp的统一处理方法
+            LandTemp::handleLandStatusChanged($landStatusChangedEvent);
 
             Log::info('作物生长阶段变更事件处理成功,土地状态变更数据已存储', [
                 'user_id' => $event->userId,