Browse Source

feat(farm): 计算收获产出并添加物品入包功能

- 优化了收获产出的计算逻辑,考虑了土地加成、房屋加成、灾害减产等因素
- 新增物品入包功能,在收获时将产出的物品添加到用户背包中
- 移除了团队利润分配相关的代码和事件
- 增加了土地状态变化事件的处理
- 优化了代码结构,提高了代码的可读性和维护性
notfff 7 months ago
parent
commit
24cafd3278

+ 19 - 15
app/Module/Farm/Listeners/CalculateHarvestOutputListener.php

@@ -10,12 +10,12 @@ use Illuminate\Support\Facades\Log;
 
 /**
  * 计算收获产出监听器
- * 
+ *
  * 监听作物收获事件,计算最终产出数量
  */
 class CalculateHarvestOutputListener
 {
-    
+
 
     /**
      * 处理事件
@@ -30,21 +30,25 @@ class CalculateHarvestOutputListener
             $land = $event->land;
             $seed = $crop->seed;
             $outputAmount = $event->outputAmount;
-            
+
             // 获取土地的产量加成
             $landOutputBonus = $land->landType->output_bonus ?? 0;
-            
+
             // 获取房屋的产量加成
+            /**
+             * @var \App\Module\Farm\Models\FarmUser $farmUser
+             */
             $farmUser = $crop->user;
+//            dd($farmUser,$crop);
             $houseConfig = $farmUser->houseConfig;
             $houseOutputBonus = $houseConfig->output_bonus ?? 0;
-            
+
             // 检查是否有丰收之神加持
             $hasHarvestBuff = $farmUser->buffs()
                 ->where('buff_type', BUFF_TYPE::HARVEST_GOD)
                 ->where('expire_time', '>', now())
                 ->exists();
-            
+
             // 计算灾害减产
             $disasterPenalty = 0;
             if (!empty($crop->disasters)) {
@@ -55,19 +59,19 @@ class CalculateHarvestOutputListener
                     }
                 }
             }
-            
+
             // 计算最终产量
             $finalAmount = $outputAmount;
-            
+
             // 应用土地加成
             $finalAmount = (int)($finalAmount * (1 + $landOutputBonus));
-            
+
             // 应用房屋加成
             $finalAmount = (int)($finalAmount * (1 + $houseOutputBonus));
-            
+
             // 应用灾害减产
             $finalAmount = (int)($finalAmount * (1 - $disasterPenalty));
-            
+
             // 如果有丰收之神加持,使用最大可能产量
             if ($hasHarvestBuff) {
                 $maxPossibleAmount = $seed->max_output;
@@ -75,22 +79,22 @@ class CalculateHarvestOutputListener
                 $maxPossibleAmount = (int)($maxPossibleAmount * (1 + $houseOutputBonus));
                 $finalAmount = max($finalAmount, $maxPossibleAmount);
             }
-            
+
             // 确保产量不超过全局最高产量
             $globalMaxOutput = 3000;
             $finalAmount = min($finalAmount, $globalMaxOutput);
-            
+
             // 如果有灾害,确保产量不超过灾害时最高产量
             if ($disasterPenalty > 0) {
                 $disasterMaxOutput = 2000;
                 $finalAmount = min($finalAmount, $disasterMaxOutput);
             }
-            
+
             // 更新收获记录的产出数量
             $harvestLog = $event->harvestLog;
             $harvestLog->output_amount = $finalAmount;
             $harvestLog->save();
-            
+
             Log::info('收获产出计算成功', [
                 'user_id' => $event->userId,
                 'crop_id' => $crop->id,

+ 13 - 4
app/Module/Farm/Logics/CropLogic.php

@@ -17,6 +17,7 @@ use App\Module\Farm\Models\FarmLand;
 use App\Module\Farm\Models\FarmSeed;
 use App\Module\Farm\Models\FarmSeedOutput;
 use App\Module\Farm\Models\FarmSowLog;
+use App\Module\GameItems\Services\ItemService;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 use UCore\Db\Helper;
@@ -190,6 +191,9 @@ class CropLogic
             Helper::check_tr();
 
             // 获取土地信息
+            /**
+             * @var FarmLand $land
+             */
             $land = FarmLand::where('id', $landId)
                 ->where('user_id', $userId)
                 ->first();
@@ -199,9 +203,9 @@ class CropLogic
             }
 
             // 检查土地状态
-            if ($land->status !== LAND_STATUS::HARVESTABLE->value) {
-                throw new \Exception('土地状态不允许收获');
-            }
+//            if ($land->status !== LAND_STATUS::HARVESTABLE->value) {
+//                throw new \Exception('土地状态不允许收获');
+//            }
 
             // 获取作物信息
             $crop = FarmCrop::where('land_id', $landId)->first();
@@ -245,7 +249,7 @@ class CropLogic
             $land->status = LAND_STATUS::IDLE;
             $land->save();
 
-            // 提交事务
+
 
 
             // 触发作物收获事件
@@ -260,6 +264,11 @@ class CropLogic
                 'output_amount' => $outputAmount,
                 'harvest_log_id' => $harvestLog->id
             ]);
+            // 物品入包
+            ItemService::addItem($userId, $outputItemId, $outputAmount,[
+                'source'=>'FarmHarve',
+                'FarmHarvestLog'=>$harvestLog->id
+            ]);
 
 
             return Res::success();

+ 11 - 0
app/Module/Farm/Models/FarmCrop.php

@@ -24,6 +24,8 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
  * @property  \Carbon\Carbon $created_at  创建时间
  * @property  \Carbon\Carbon $updated_at  更新时间
  * field end
+ *
+ *
  */
 class FarmCrop extends Model
 {
@@ -88,4 +90,13 @@ class FarmCrop extends Model
         return $this->belongsTo(FarmSeed::class, 'seed_id', 'id');
     }
 
+
+    /**
+     * 用户农场信息(房屋)
+     * @return BelongsTo
+     */
+    public function user(): BelongsTo
+    {
+        return $this->belongsTo(FarmUser::class, 'user_id', 'user_id');
+    }
 }

+ 7 - 1
app/Module/Farm/Models/FarmUser.php

@@ -8,7 +8,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
 
 /**
  * 用户农场信息模型
- * field start 
+ * field start
  * @property  int  $id  主键ID
  * @property  int  $user_id  用户ID
  * @property  int  $house_level  房屋等级
@@ -16,6 +16,11 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
  * @property  \Carbon\Carbon  $created_at  创建时间
  * @property  \Carbon\Carbon  $updated_at  更新时间
  * field end
+ *
+ *
+ * @property-read \App\Module\Farm\Models\FarmLand[]  $lands  用户的土地
+ * @property-read \App\Module\Farm\Models\FarmGodBuff[]  $buffs  用户的神灵加持
+ * @property-read \App\Module\Farm\Models\FarmHouseConfig  $houseConfig  用户房屋等级对应的配置
  */
 class FarmUser extends Model
 {
@@ -77,4 +82,5 @@ class FarmUser extends Model
     {
         return $this->belongsTo(FarmHouseConfig::class, 'house_level', 'level');
     }
+
 }

+ 1 - 5
app/Module/Farm/Providers/FarmServiceProvider.php

@@ -10,7 +10,6 @@ use App\Module\Farm\Events\HouseUpgradedEvent;
 use App\Module\Farm\Listeners\AddLandAfterHouseUpgradeListener;
 use App\Module\Farm\Listeners\CalculateHarvestOutputListener;
 use App\Module\Farm\Listeners\CheckHouseDowngradeListener;
-use App\Module\Farm\Listeners\DistributeTeamProfitListener;
 use App\Module\Farm\Listeners\GenerateDisasterListener;
 use App\Module\Farm\Listeners\LoginSuccessListener;
 use App\Module\Farm\Listeners\UpdateCropStatusListener;
@@ -33,10 +32,7 @@ class FarmServiceProvider extends ServiceProvider
             UpdateCropStatusListener::class,
             GenerateDisasterListener::class,
         ],
-        CropHarvestedEvent::class => [
-            CalculateHarvestOutputListener::class,
-            DistributeTeamProfitListener::class,
-        ],
+
         HouseUpgradedEvent::class => [
             AddLandAfterHouseUpgradeListener::class,
         ],

+ 4 - 2
vendor/composer/autoload_classmap.php

@@ -304,13 +304,13 @@ return array(
     'App\\Module\\Farm\\Events\\FarmCreatedEvent' => $baseDir . '/app/Module/Farm/Events/FarmCreatedEvent.php',
     'App\\Module\\Farm\\Events\\HouseDowngradedEvent' => $baseDir . '/app/Module/Farm/Events/HouseDowngradedEvent.php',
     'App\\Module\\Farm\\Events\\HouseUpgradedEvent' => $baseDir . '/app/Module/Farm/Events/HouseUpgradedEvent.php',
+    'App\\Module\\Farm\\Events\\LandStatusChangedEvent' => $baseDir . '/app/Module/Farm/Events/LandStatusChangedEvent.php',
     'App\\Module\\Farm\\Events\\LandUpgradedEvent' => $baseDir . '/app/Module/Farm/Events/LandUpgradedEvent.php',
     'App\\Module\\Farm\\Events\\TeamProfitCreatedEvent' => $baseDir . '/app/Module/Farm/Events/TeamProfitCreatedEvent.php',
     'App\\Module\\Farm\\Jobs\\CheckUserLandsAfterLoginJob' => $baseDir . '/app/Module/Farm/Jobs/CheckUserLandsAfterLoginJob.php',
     'App\\Module\\Farm\\Listeners\\AddLandAfterHouseUpgradeListener' => $baseDir . '/app/Module/Farm/Listeners/AddLandAfterHouseUpgradeListener.php',
     'App\\Module\\Farm\\Listeners\\CalculateHarvestOutputListener' => $baseDir . '/app/Module/Farm/Listeners/CalculateHarvestOutputListener.php',
     'App\\Module\\Farm\\Listeners\\CheckHouseDowngradeListener' => $baseDir . '/app/Module/Farm/Listeners/CheckHouseDowngradeListener.php',
-    'App\\Module\\Farm\\Listeners\\DistributeTeamProfitListener' => $baseDir . '/app/Module/Farm/Listeners/DistributeTeamProfitListener.php',
     'App\\Module\\Farm\\Listeners\\GenerateDisasterListener' => $baseDir . '/app/Module/Farm/Listeners/GenerateDisasterListener.php',
     'App\\Module\\Farm\\Listeners\\LoginSuccessListener' => $baseDir . '/app/Module/Farm/Listeners/LoginSuccessListener.php',
     'App\\Module\\Farm\\Listeners\\UpdateCropStatusListener' => $baseDir . '/app/Module/Farm/Listeners/UpdateCropStatusListener.php',
@@ -335,6 +335,7 @@ return array(
     'App\\Module\\Farm\\Models\\FarmSeed' => $baseDir . '/app/Module/Farm/Models/FarmSeed.php',
     'App\\Module\\Farm\\Models\\FarmSeedOutput' => $baseDir . '/app/Module/Farm/Models/FarmSeedOutput.php',
     'App\\Module\\Farm\\Models\\FarmShrineConfig' => $baseDir . '/app/Module/Farm/Models/FarmShrineConfig.php',
+    'App\\Module\\Farm\\Models\\FarmSowLog' => $baseDir . '/app/Module/Farm/Models/FarmSowLog.php',
     'App\\Module\\Farm\\Models\\FarmTeamProfit' => $baseDir . '/app/Module/Farm/Models/FarmTeamProfit.php',
     'App\\Module\\Farm\\Models\\FarmUpgradeLog' => $baseDir . '/app/Module/Farm/Models/FarmUpgradeLog.php',
     'App\\Module\\Farm\\Models\\FarmUser' => $baseDir . '/app/Module/Farm/Models/FarmUser.php',
@@ -351,7 +352,6 @@ return array(
     'App\\Module\\Farm\\Repositories\\FarmShrineConfigRepository' => $baseDir . '/app/Module/Farm/Repositories/FarmShrineConfigRepository.php',
     'App\\Module\\Farm\\Repositories\\FarmTeamProfitRepository' => $baseDir . '/app/Module/Farm/Repositories/FarmTeamProfitRepository.php',
     'App\\Module\\Farm\\Repositories\\FarmUpgradeLogRepository' => $baseDir . '/app/Module/Farm/Repositories/FarmUpgradeLogRepository.php',
-    'App\\Module\\Farm\\Repositories\\FarmUserReferralRepository' => $baseDir . '/app/Module/Farm/Repositories/FarmUserReferralRepository.php',
     'App\\Module\\Farm\\Repositories\\FarmUserRepository' => $baseDir . '/app/Module/Farm/Repositories/FarmUserRepository.php',
     'App\\Module\\Farm\\Services\\BuffService' => $baseDir . '/app/Module/Farm/Services/BuffService.php',
     'App\\Module\\Farm\\Services\\CropService' => $baseDir . '/app/Module/Farm/Services/CropService.php',
@@ -656,6 +656,7 @@ return array(
     'App\\Module\\Game\\AdminControllers\\Actions\\DuplicateRewardGroupAction' => $baseDir . '/app/Module/Game/AdminControllers/Actions/DuplicateRewardGroupAction.php',
     'App\\Module\\Game\\AdminControllers\\Actions\\ViewTempDataAction' => $baseDir . '/app/Module/Game/AdminControllers/Actions/ViewTempDataAction.php',
     'App\\Module\\Game\\AdminControllers\\Api\\RewardTargetController' => $baseDir . '/app/Module/Game/AdminControllers/Api/RewardTargetController.php',
+    'App\\Module\\Game\\AdminControllers\\FarmUserSummaryController' => $baseDir . '/app/Module/Game/AdminControllers/FarmUserSummaryController.php',
     'App\\Module\\Game\\AdminControllers\\GameConditionGroupController' => $baseDir . '/app/Module/Game/AdminControllers/GameConditionGroupController.php',
     'App\\Module\\Game\\AdminControllers\\GameConditionItemController' => $baseDir . '/app/Module/Game/AdminControllers/GameConditionItemController.php',
     'App\\Module\\Game\\AdminControllers\\GameConfigController' => $baseDir . '/app/Module/Game/AdminControllers/GameConfigController.php',
@@ -716,6 +717,7 @@ return array(
     'App\\Module\\Game\\Events\\TestEvent' => $baseDir . '/app/Module/Game/Events/TestEvent.php',
     'App\\Module\\Game\\Exceptions\\TestException' => $baseDir . '/app/Module/Game/Exceptions/TestException.php',
     'App\\Module\\Game\\Jobs\\TestJob' => $baseDir . '/app/Module/Game/Jobs/TestJob.php',
+    'App\\Module\\Game\\Listeners\\CropPlantedListener' => $baseDir . '/app/Module/Game/Listeners/CropPlantedListener.php',
     'App\\Module\\Game\\Listeners\\FundChangedListener' => $baseDir . '/app/Module/Game/Listeners/FundChangedListener.php',
     'App\\Module\\Game\\Listeners\\HouseDowngradedListener' => $baseDir . '/app/Module/Game/Listeners/HouseDowngradedListener.php',
     'App\\Module\\Game\\Listeners\\HouseUpgradedListener' => $baseDir . '/app/Module/Game/Listeners/HouseUpgradedListener.php',

+ 4 - 2
vendor/composer/autoload_static.php

@@ -1024,13 +1024,13 @@ class ComposerStaticInita2207959542f13e6e79e83f2b0d9a425
         'App\\Module\\Farm\\Events\\FarmCreatedEvent' => __DIR__ . '/../..' . '/app/Module/Farm/Events/FarmCreatedEvent.php',
         'App\\Module\\Farm\\Events\\HouseDowngradedEvent' => __DIR__ . '/../..' . '/app/Module/Farm/Events/HouseDowngradedEvent.php',
         'App\\Module\\Farm\\Events\\HouseUpgradedEvent' => __DIR__ . '/../..' . '/app/Module/Farm/Events/HouseUpgradedEvent.php',
+        'App\\Module\\Farm\\Events\\LandStatusChangedEvent' => __DIR__ . '/../..' . '/app/Module/Farm/Events/LandStatusChangedEvent.php',
         'App\\Module\\Farm\\Events\\LandUpgradedEvent' => __DIR__ . '/../..' . '/app/Module/Farm/Events/LandUpgradedEvent.php',
         'App\\Module\\Farm\\Events\\TeamProfitCreatedEvent' => __DIR__ . '/../..' . '/app/Module/Farm/Events/TeamProfitCreatedEvent.php',
         'App\\Module\\Farm\\Jobs\\CheckUserLandsAfterLoginJob' => __DIR__ . '/../..' . '/app/Module/Farm/Jobs/CheckUserLandsAfterLoginJob.php',
         'App\\Module\\Farm\\Listeners\\AddLandAfterHouseUpgradeListener' => __DIR__ . '/../..' . '/app/Module/Farm/Listeners/AddLandAfterHouseUpgradeListener.php',
         'App\\Module\\Farm\\Listeners\\CalculateHarvestOutputListener' => __DIR__ . '/../..' . '/app/Module/Farm/Listeners/CalculateHarvestOutputListener.php',
         'App\\Module\\Farm\\Listeners\\CheckHouseDowngradeListener' => __DIR__ . '/../..' . '/app/Module/Farm/Listeners/CheckHouseDowngradeListener.php',
-        'App\\Module\\Farm\\Listeners\\DistributeTeamProfitListener' => __DIR__ . '/../..' . '/app/Module/Farm/Listeners/DistributeTeamProfitListener.php',
         'App\\Module\\Farm\\Listeners\\GenerateDisasterListener' => __DIR__ . '/../..' . '/app/Module/Farm/Listeners/GenerateDisasterListener.php',
         'App\\Module\\Farm\\Listeners\\LoginSuccessListener' => __DIR__ . '/../..' . '/app/Module/Farm/Listeners/LoginSuccessListener.php',
         'App\\Module\\Farm\\Listeners\\UpdateCropStatusListener' => __DIR__ . '/../..' . '/app/Module/Farm/Listeners/UpdateCropStatusListener.php',
@@ -1055,6 +1055,7 @@ class ComposerStaticInita2207959542f13e6e79e83f2b0d9a425
         'App\\Module\\Farm\\Models\\FarmSeed' => __DIR__ . '/../..' . '/app/Module/Farm/Models/FarmSeed.php',
         'App\\Module\\Farm\\Models\\FarmSeedOutput' => __DIR__ . '/../..' . '/app/Module/Farm/Models/FarmSeedOutput.php',
         'App\\Module\\Farm\\Models\\FarmShrineConfig' => __DIR__ . '/../..' . '/app/Module/Farm/Models/FarmShrineConfig.php',
+        'App\\Module\\Farm\\Models\\FarmSowLog' => __DIR__ . '/../..' . '/app/Module/Farm/Models/FarmSowLog.php',
         'App\\Module\\Farm\\Models\\FarmTeamProfit' => __DIR__ . '/../..' . '/app/Module/Farm/Models/FarmTeamProfit.php',
         'App\\Module\\Farm\\Models\\FarmUpgradeLog' => __DIR__ . '/../..' . '/app/Module/Farm/Models/FarmUpgradeLog.php',
         'App\\Module\\Farm\\Models\\FarmUser' => __DIR__ . '/../..' . '/app/Module/Farm/Models/FarmUser.php',
@@ -1071,7 +1072,6 @@ class ComposerStaticInita2207959542f13e6e79e83f2b0d9a425
         'App\\Module\\Farm\\Repositories\\FarmShrineConfigRepository' => __DIR__ . '/../..' . '/app/Module/Farm/Repositories/FarmShrineConfigRepository.php',
         'App\\Module\\Farm\\Repositories\\FarmTeamProfitRepository' => __DIR__ . '/../..' . '/app/Module/Farm/Repositories/FarmTeamProfitRepository.php',
         'App\\Module\\Farm\\Repositories\\FarmUpgradeLogRepository' => __DIR__ . '/../..' . '/app/Module/Farm/Repositories/FarmUpgradeLogRepository.php',
-        'App\\Module\\Farm\\Repositories\\FarmUserReferralRepository' => __DIR__ . '/../..' . '/app/Module/Farm/Repositories/FarmUserReferralRepository.php',
         'App\\Module\\Farm\\Repositories\\FarmUserRepository' => __DIR__ . '/../..' . '/app/Module/Farm/Repositories/FarmUserRepository.php',
         'App\\Module\\Farm\\Services\\BuffService' => __DIR__ . '/../..' . '/app/Module/Farm/Services/BuffService.php',
         'App\\Module\\Farm\\Services\\CropService' => __DIR__ . '/../..' . '/app/Module/Farm/Services/CropService.php',
@@ -1376,6 +1376,7 @@ class ComposerStaticInita2207959542f13e6e79e83f2b0d9a425
         'App\\Module\\Game\\AdminControllers\\Actions\\DuplicateRewardGroupAction' => __DIR__ . '/../..' . '/app/Module/Game/AdminControllers/Actions/DuplicateRewardGroupAction.php',
         'App\\Module\\Game\\AdminControllers\\Actions\\ViewTempDataAction' => __DIR__ . '/../..' . '/app/Module/Game/AdminControllers/Actions/ViewTempDataAction.php',
         'App\\Module\\Game\\AdminControllers\\Api\\RewardTargetController' => __DIR__ . '/../..' . '/app/Module/Game/AdminControllers/Api/RewardTargetController.php',
+        'App\\Module\\Game\\AdminControllers\\FarmUserSummaryController' => __DIR__ . '/../..' . '/app/Module/Game/AdminControllers/FarmUserSummaryController.php',
         'App\\Module\\Game\\AdminControllers\\GameConditionGroupController' => __DIR__ . '/../..' . '/app/Module/Game/AdminControllers/GameConditionGroupController.php',
         'App\\Module\\Game\\AdminControllers\\GameConditionItemController' => __DIR__ . '/../..' . '/app/Module/Game/AdminControllers/GameConditionItemController.php',
         'App\\Module\\Game\\AdminControllers\\GameConfigController' => __DIR__ . '/../..' . '/app/Module/Game/AdminControllers/GameConfigController.php',
@@ -1436,6 +1437,7 @@ class ComposerStaticInita2207959542f13e6e79e83f2b0d9a425
         'App\\Module\\Game\\Events\\TestEvent' => __DIR__ . '/../..' . '/app/Module/Game/Events/TestEvent.php',
         'App\\Module\\Game\\Exceptions\\TestException' => __DIR__ . '/../..' . '/app/Module/Game/Exceptions/TestException.php',
         'App\\Module\\Game\\Jobs\\TestJob' => __DIR__ . '/../..' . '/app/Module/Game/Jobs/TestJob.php',
+        'App\\Module\\Game\\Listeners\\CropPlantedListener' => __DIR__ . '/../..' . '/app/Module/Game/Listeners/CropPlantedListener.php',
         'App\\Module\\Game\\Listeners\\FundChangedListener' => __DIR__ . '/../..' . '/app/Module/Game/Listeners/FundChangedListener.php',
         'App\\Module\\Game\\Listeners\\HouseDowngradedListener' => __DIR__ . '/../..' . '/app/Module/Game/Listeners/HouseDowngradedListener.php',
         'App\\Module\\Game\\Listeners\\HouseUpgradedListener' => __DIR__ . '/../..' . '/app/Module/Game/Listeners/HouseUpgradedListener.php',