| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace App\Module\Farm\Logics;
- use App\Module\Farm\Dtos\FarmInfoDto;
- use App\Module\Farm\Events\FarmCreatedEvent;
- use App\Module\Farm\Models\FarmUser;
- use Illuminate\Support\Facades\Log;
- /**
- * 农场基础逻辑
- */
- class FarmLogic
- {
- /**
- * 获取用户农场信息
- *
- * @param int $userId
- * @return FarmInfoDto|null
- */
- public function getFarmInfo(int $userId): ?FarmInfoDto
- {
- try {
- $farmUser = FarmUser::where('user_id', $userId)->first();
- if (!$farmUser) {
- return null;
- }
- return FarmInfoDto::fromModel($farmUser);
- } catch (\Exception $e) {
- Log::error('获取用户农场信息失败', [
- 'user_id' => $userId,
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ]);
- return null;
- }
- }
- /**
- * 初始化用户农场
- *
- * @param int $userId
- * @return FarmInfoDto|null
- */
- public function initializeFarm(int $userId): ?FarmInfoDto
- {
- try {
- // 检查用户是否已有农场
- $farmUser = FarmUser::where('user_id', $userId)->first();
- if ($farmUser) {
- return FarmInfoDto::fromModel($farmUser);
- }
- // 检查事务是否已开启
- \UCore\Db\Helper::check_tr();
- // 创建用户农场记录
- $farmUser = new FarmUser();
- $farmUser->user_id = $userId;
- $farmUser->house_level = 1; // 默认1级房屋
- $farmUser->last_upgrade_time = now();
- $farmUser->save();
- // 初始化土地(根据房屋等级)
- $this->initializeLands($userId, $farmUser->house_level);
- // 触发农场创建事件
- event(new FarmCreatedEvent($userId, $farmUser));
- Log::info('用户农场初始化成功', [
- 'user_id' => $userId,
- 'farm_id' => $farmUser->id
- ]);
- return FarmInfoDto::fromModel($farmUser);
- } catch (\Exception $e) {
- Log::error('用户农场初始化失败', [
- 'user_id' => $userId,
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ]);
- return null;
- }
- }
- /**
- * 初始化用户土地
- *
- * @param int $userId
- * @param int $houseLevel 房屋等级,默认为1
- * @return void
- */
- private function initializeLands(int $userId, int $houseLevel = 1): void
- {
- try {
- $houseLogic = new HouseLogic();
- $landLogic = new LandLogic();
- // 根据房屋等级获取可用土地数量
- $availableLands = $houseLogic->getAvailableLandsCount($houseLevel);
- if ($availableLands <= 0) {
- Log::warning('房屋等级配置的可用土地数量为0', [
- 'user_id' => $userId,
- 'house_level' => $houseLevel
- ]);
- return;
- }
- // 创建对应数量的普通土地
- for ($position = 1; $position <= $availableLands; $position++) {
- $land = $landLogic->createLand($userId, $position, 1); // 1表示普通土地
- if (!$land) {
- Log::error('创建土地失败', [
- 'user_id' => $userId,
- 'position' => $position,
- 'house_level' => $houseLevel
- ]);
- }
- }
- Log::info('用户土地初始化成功', [
- 'user_id' => $userId,
- 'house_level' => $houseLevel,
- 'available_lands' => $availableLands
- ]);
- } catch (\Exception $e) {
- Log::error('初始化用户土地失败', [
- 'user_id' => $userId,
- 'house_level' => $houseLevel,
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ]);
- }
- }
- }
|