CheckUserFundValidator.php 1.3 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. // 操作资金
  30. $amount = $data['amount'] * 10000000;
  31. // 矿工费
  32. $miner = \App\Module\AppGame\Service\FundService::getMiner($data['coinType'], $amount);
  33. $service = new FundService($data['userId'], $fundId);
  34. if ($service->balance() < ($amount + $miner)) {
  35. $this->addError('amount', '余额不足');
  36. return false;
  37. }
  38. return true;
  39. }
  40. }