FarmLogic.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace App\Module\Farm\Logics;
  3. use App\Module\Farm\Dtos\FarmInfoDto;
  4. use App\Module\Farm\Events\FarmCreatedEvent;
  5. use App\Module\Farm\Models\FarmUser;
  6. use Illuminate\Support\Facades\Log;
  7. /**
  8. * 农场基础逻辑
  9. */
  10. class FarmLogic
  11. {
  12. /**
  13. * 获取用户农场信息
  14. *
  15. * @param int $userId
  16. * @return FarmInfoDto|null
  17. */
  18. public function getFarmInfo(int $userId): ?FarmInfoDto
  19. {
  20. try {
  21. $farmUser = FarmUser::where('user_id', $userId)->first();
  22. if (!$farmUser) {
  23. return null;
  24. }
  25. return FarmInfoDto::fromModel($farmUser);
  26. } catch (\Exception $e) {
  27. Log::error('获取用户农场信息失败', [
  28. 'user_id' => $userId,
  29. 'error' => $e->getMessage(),
  30. 'trace' => $e->getTraceAsString()
  31. ]);
  32. return null;
  33. }
  34. }
  35. /**
  36. * 初始化用户农场
  37. *
  38. * @param int $userId
  39. * @return FarmInfoDto|null
  40. */
  41. public function initializeFarm(int $userId): ?FarmInfoDto
  42. {
  43. try {
  44. // 检查用户是否已有农场
  45. $farmUser = FarmUser::where('user_id', $userId)->first();
  46. if ($farmUser) {
  47. return FarmInfoDto::fromModel($farmUser);
  48. }
  49. // 检查事务是否已开启
  50. \UCore\Db\Helper::check_tr();
  51. // 创建用户农场记录
  52. $farmUser = new FarmUser();
  53. $farmUser->user_id = $userId;
  54. $farmUser->house_level = 1; // 默认1级房屋
  55. $farmUser->last_upgrade_time = now();
  56. $farmUser->save();
  57. // 初始化土地
  58. $this->initializeLands($userId);
  59. // 触发农场创建事件
  60. event(new FarmCreatedEvent($userId, $farmUser));
  61. Log::info('用户农场初始化成功', [
  62. 'user_id' => $userId,
  63. 'farm_id' => $farmUser->id
  64. ]);
  65. return FarmInfoDto::fromModel($farmUser);
  66. } catch (\Exception $e) {
  67. Log::error('用户农场初始化失败', [
  68. 'user_id' => $userId,
  69. 'error' => $e->getMessage(),
  70. 'trace' => $e->getTraceAsString()
  71. ]);
  72. return null;
  73. }
  74. }
  75. /**
  76. * 初始化用户土地
  77. *
  78. * @param int $userId
  79. * @return void
  80. */
  81. private function initializeLands(int $userId): void
  82. {
  83. // 初始化12块普通土地
  84. $landLogic = new LandLogic();
  85. for ($position = 1; $position <= 12; $position++) {
  86. $landLogic->createLand($userId, $position, 1); // 1表示普通土地
  87. }
  88. }
  89. }