| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- <?php
- namespace App\Module\Farm\Validators;
- use App\Module\Farm\Models\FarmCrop;
- use UCore\Validation\BaseValidator;
- /**
- * 摘取数量验证器
- * 验证摘取数量是否合理
- */
- class PickAmountValidator extends BaseValidator
- {
- /**
- * 验证摘取数量
- *
- * @param FarmCrop $crop 作物模型
- * @param int $pickAmount 摘取数量
- * @return bool
- */
- public function validate(FarmCrop $crop, int $pickAmount): bool
- {
- // 检查摘取数量是否超过当前可摘取数量
- if ($pickAmount > $crop->pickable_amount) {
- $this->addError("摘取数量({$pickAmount})超过可摘取数量({$crop->pickable_amount})");
- return false;
- }
- // 检查单次摘取比例是否超过配置限制
- $maxRatio = $crop->seed->pick_max_ratio ?? 0.3; // 默认最大30%
- $pickRatio = $pickAmount / $crop->final_output_amount;
-
- if ($pickRatio > $maxRatio) {
- $maxAmount = (int)($crop->final_output_amount * $maxRatio);
- $this->addError("单次摘取比例({$pickRatio})超过限制({$maxRatio}),最多可摘取{$maxAmount}个");
- return false;
- }
- // 验证摘取数量的合理性(必须大于0)
- if ($pickAmount <= 0) {
- $this->addError('摘取数量必须大于0');
- return false;
- }
- return true;
- }
- }
|