FertilizerUsageValidator.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace App\Module\Farm\Validators;
  3. use App\Module\Farm\Enums\LAND_STATUS;
  4. use App\Module\Farm\Enums\GROWTH_STAGE;
  5. use App\Module\Farm\Models\FarmCrop;
  6. use Illuminate\Support\Facades\Log;
  7. use UCore\Validator;
  8. /**
  9. * 肥料使用验证器
  10. *
  11. * 验证土地和作物状态是否允许使用肥料
  12. */
  13. class FertilizerUsageValidator extends Validator
  14. {
  15. /**
  16. * 验证是否可以使用肥料
  17. *
  18. * @param mixed $value 土地ID
  19. * @param array $data 包含其他数据的数组
  20. * @return bool
  21. */
  22. public function validate(mixed $value, array $data): bool
  23. {
  24. try {
  25. Log::info('FertilizerUsageValidator开始验证', [
  26. 'land_id' => $value,
  27. 'data' => $data
  28. ]);
  29. // 获取土地对象
  30. $land = null;
  31. if (isset($this->args[0])) {
  32. $land = $this->validation->{$this->args[0]};
  33. }
  34. if (!$land) {
  35. Log::warning('FertilizerUsageValidator: 土地信息不存在', ['land_id' => $value]);
  36. $this->addError('土地信息不存在');
  37. return false;
  38. }
  39. // 检查土地状态是否为种植中
  40. // 不需要对土地状态进行验证
  41. // if ($land->status !== LAND_STATUS::PLANTING->valueInt()) {
  42. // $this->addError('土地状态不允许使用肥料');
  43. // return false;
  44. // }
  45. // 获取作物信息
  46. $crop = FarmCrop::where('land_id', $value)->first();
  47. Log::info('FertilizerUsageValidator: 查询作物信息', [
  48. 'land_id' => $value,
  49. 'crop_found' => $crop ? true : false,
  50. 'crop_id' => $crop ? $crop->id : null
  51. ]);
  52. if (!$crop) {
  53. Log::warning('FertilizerUsageValidator: 土地上没有作物', ['land_id' => $value]);
  54. $this->addError('土地上没有作物');
  55. return false;
  56. }
  57. // 检查作物生长阶段是否允许使用肥料
  58. if (!GROWTH_STAGE::canUseFertilizer($crop->growth_stage)) {
  59. $this->addError('当前生长阶段不能使用肥料');
  60. return false;
  61. }
  62. // 检查是否已经使用过肥料
  63. if ($crop->fertilized) {
  64. $this->addError('当前阶段已经使用过肥料');
  65. return false;
  66. }
  67. // 设置作物对象到验证类
  68. if (isset($this->args[1])) {
  69. $this->validation->{$this->args[1]} = $crop;
  70. }
  71. return true;
  72. } catch (\Exception $e) {
  73. $this->addError('验证肥料使用条件时发生错误:' . $e->getMessage());
  74. return false;
  75. }
  76. }
  77. }