PickResultDto.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace App\Module\Farm\Dtos;
  3. use UCore\Dto\BaseDto;
  4. use Carbon\Carbon;
  5. /**
  6. * 摘取结果DTO
  7. *
  8. * @property int $cropId 作物ID
  9. * @property int $itemId 摘取的物品ID
  10. * @property int $pickAmount 摘取数量
  11. * @property int $remainingAmount 剩余可摘取数量
  12. * @property float $pickRatio 摘取比例
  13. * @property Carbon $pickTime 摘取时间
  14. * @property string $pickSource 摘取来源
  15. * @property int|null $sourceId 来源ID
  16. * @property int $pickLogId 摘取记录ID(作物日志ID)
  17. * @property bool $canPickAgain 是否可以再次摘取
  18. * @property Carbon|null $nextPickTime 下次可摘取时间
  19. */
  20. class PickResultDto extends BaseDto
  21. {
  22. public int $cropId;
  23. public int $itemId;
  24. public int $pickAmount;
  25. public int $remainingAmount;
  26. public float $pickRatio;
  27. public Carbon $pickTime;
  28. public string $pickSource;
  29. public ?int $sourceId;
  30. public int $pickLogId;
  31. public bool $canPickAgain;
  32. public ?Carbon $nextPickTime;
  33. /**
  34. * 从摘取操作创建DTO
  35. *
  36. * @param array $pickData 摘取操作数据
  37. * @return static
  38. */
  39. public static function fromPickOperation(array $pickData): static
  40. {
  41. $dto = new static();
  42. $dto->cropId = $pickData['crop_id'];
  43. $dto->itemId = $pickData['item_id'];
  44. $dto->pickAmount = $pickData['pick_amount'];
  45. $dto->remainingAmount = $pickData['remaining_amount'];
  46. $dto->pickRatio = $pickData['pick_ratio'];
  47. $dto->pickTime = $pickData['pick_time'] instanceof Carbon
  48. ? $pickData['pick_time']
  49. : Carbon::parse($pickData['pick_time']);
  50. $dto->pickSource = $pickData['pick_source'];
  51. $dto->sourceId = $pickData['source_id'] ?? null;
  52. $dto->pickLogId = $pickData['pick_log_id'];
  53. $dto->canPickAgain = $pickData['can_pick_again'];
  54. $dto->nextPickTime = isset($pickData['next_pick_time'])
  55. ? ($pickData['next_pick_time'] instanceof Carbon
  56. ? $pickData['next_pick_time']
  57. : Carbon::parse($pickData['next_pick_time']))
  58. : null;
  59. return $dto;
  60. }
  61. }