| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?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);
- // 触发农场创建事件
- 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
- * @return void
- */
- private function initializeLands(int $userId): void
- {
- // 初始化12块普通土地
- $landLogic = new LandLogic();
- for ($position = 1; $position <= 12; $position++) {
- $landLogic->createLand($userId, $position, 1); // 1表示普通土地
- }
- }
- }
|