PickInfoDto.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Module\Farm\Dtos;
  3. use UCore\Dto\BaseDto;
  4. use App\Module\Farm\Models\FarmCrop;
  5. use Carbon\Carbon;
  6. /**
  7. * 摘取信息DTO
  8. *
  9. * @property int $cropId 作物ID
  10. * @property int $seedId 种子ID
  11. * @property int $totalAmount 总产出数量
  12. * @property int $pickedAmount 已摘取数量
  13. * @property int $pickableAmount 可摘取数量
  14. * @property int $minReserveAmount 最小保留数量
  15. * @property bool $canPick 是否可以摘取
  16. * @property Carbon|null $lastPickTime 最后摘取时间
  17. * @property Carbon|null $nextPickTime 下次可摘取时间
  18. * @property int $pickCount 摘取次数
  19. * @property float $maxPickRatio 最大摘取比例
  20. */
  21. class PickInfoDto extends BaseDto
  22. {
  23. public int $cropId;
  24. public int $seedId;
  25. public int $totalAmount;
  26. public int $pickedAmount;
  27. public int $pickableAmount;
  28. public int $minReserveAmount;
  29. public bool $canPick;
  30. public ?Carbon $lastPickTime;
  31. public ?Carbon $nextPickTime;
  32. public int $pickCount;
  33. public float $maxPickRatio;
  34. /**
  35. * 从作物模型创建DTO
  36. *
  37. * @param FarmCrop $crop 作物模型
  38. * @return static
  39. */
  40. public static function fromCrop(FarmCrop $crop): static
  41. {
  42. $dto = new static();
  43. $dto->cropId = $crop->id;
  44. $dto->seedId = $crop->seed_id;
  45. $dto->totalAmount = $crop->final_output_amount;
  46. $dto->pickedAmount = $crop->picked_amount;
  47. $dto->pickableAmount = $crop->pickable_amount;
  48. $dto->minReserveAmount = $crop->min_reserve_amount;
  49. $dto->canPick = $crop->canBePicked();
  50. $dto->lastPickTime = $crop->last_pick_time;
  51. $dto->nextPickTime = $crop->pick_cooldown_end;
  52. $dto->pickCount = $crop->pick_count;
  53. // 从种子配置获取最大摘取比例,默认为0.3(30%)
  54. $dto->maxPickRatio = $crop->seed->pick_max_ratio ?? 0.3;
  55. return $dto;
  56. }
  57. }