CheckUserFundValidator.php 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace App\Module\Fund\Validators;
  3. use App\Module\Fund\Enums\FUND_TYPE;
  4. use App\Module\Fund\Services\FundService;
  5. use UCore\Validator;
  6. class CheckUserFundValidator extends Validator
  7. {
  8. /**
  9. * 验证用户余额是否充足
  10. *
  11. * @param mixed $value
  12. * @param array $data
  13. * @return bool
  14. */
  15. public function validate(mixed $value, array $data): bool
  16. {
  17. // 币种类型映射到账户种类
  18. // 1: 金币账户, 2: 钻石账户
  19. $map = [
  20. 1 => FUND_TYPE::FUND1->value, // 金币账户
  21. 2 => FUND_TYPE::FUND2->value, // 钻石账户
  22. ];
  23. // 检查币种类型是否支持
  24. if (!isset($map[$data['coinType']])) {
  25. $this->addError('coinType', '不支持的币种类型');
  26. return false;
  27. }
  28. $fundId = $map[$data['coinType']];
  29. $service = new FundService($data['userId'], $fundId);
  30. if ($service->balance() < $value ) {
  31. $this->addError('amount', '余额不足');
  32. return false;
  33. }
  34. return true;
  35. }
  36. }