| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- <?php
- namespace App\Module\Farm\Dtos;
- use UCore\Dto\BaseDto;
- use App\Module\Farm\Models\FarmCrop;
- use Carbon\Carbon;
- /**
- * 摘取信息DTO
- *
- * @property int $cropId 作物ID
- * @property int $seedId 种子ID
- * @property int $totalAmount 总产出数量
- * @property int $pickedAmount 已摘取数量
- * @property int $pickableAmount 可摘取数量
- * @property int $minReserveAmount 最小保留数量
- * @property bool $canPick 是否可以摘取
- * @property Carbon|null $lastPickTime 最后摘取时间
- * @property Carbon|null $nextPickTime 下次可摘取时间
- * @property int $pickCount 摘取次数
- * @property float $maxPickRatio 最大摘取比例
- */
- class PickInfoDto extends BaseDto
- {
- public int $cropId;
- public int $seedId;
- public int $totalAmount;
- public int $pickedAmount;
- public int $pickableAmount;
- public int $minReserveAmount;
- public bool $canPick;
- public ?Carbon $lastPickTime;
- public ?Carbon $nextPickTime;
- public int $pickCount;
- public float $maxPickRatio;
- /**
- * 从作物模型创建DTO
- *
- * @param FarmCrop $crop 作物模型
- * @return static
- */
- public static function fromCrop(FarmCrop $crop): static
- {
- $dto = new static();
-
- $dto->cropId = $crop->id;
- $dto->seedId = $crop->seed_id;
- $dto->totalAmount = $crop->final_output_amount;
- $dto->pickedAmount = $crop->picked_amount;
- $dto->pickableAmount = $crop->pickable_amount;
- $dto->minReserveAmount = $crop->min_reserve_amount;
- $dto->canPick = $crop->canBePicked();
- $dto->lastPickTime = $crop->last_pick_time;
- $dto->nextPickTime = $crop->pick_cooldown_end;
- $dto->pickCount = $crop->pick_count;
-
- // 从种子配置获取最大摘取比例,默认为0.3(30%)
- $dto->maxPickRatio = $crop->seed->pick_max_ratio ?? 0.3;
- return $dto;
- }
- }
|