MexOrderNumberValidator.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Module\Mex\Validators;
  3. use App\Module\GameItems\Logics\ItemQuantity;
  4. use App\Module\Fund\Services\FundService;
  5. use App\Module\Fund\Enums\FUND_CURRENCY_TYPE;
  6. use App\Module\Mex\Enums\OrderStatus;
  7. use App\Module\Mex\Enums\OrderType;
  8. use App\Module\Mex\Logic\FundLogic;
  9. use App\Module\Mex\Models\MexOrder;
  10. use UCore\Validator;
  11. use Uraus\Kku\Common\MEX_DIRECTION;
  12. use Illuminate\Support\Facades\Log;
  13. /**
  14. * 农贸市场订单 数量 验证器
  15. * 等待的订单买入/卖出 各10个
  16. * 验证订单创建的各种条件,包括资金、物品数量等
  17. * 支持多币种验证,默认使用钻石币种
  18. */
  19. class MexOrderNumberValidator extends Validator
  20. {
  21. /**
  22. * 验证订单创建条件
  23. *
  24. * @param mixed $value 交易方向
  25. * @param array $data 所有数据
  26. * @return bool 验证是否通过
  27. */
  28. public function validate(mixed $value, array $data): bool
  29. {
  30. $direction = (int)$value;
  31. $itemIdKey = $this->args[1] ?? 'itemId';
  32. // 从 args 获取字段名
  33. $userIdKey = $this->args[0] ?? 'user_id';
  34. $userId = (int)$data[$userIdKey] ?? 0;
  35. $itemId = $data[$itemIdKey] ?? null;
  36. if ($direction === MEX_DIRECTION::SELL) {
  37. $count = MexOrder::query()->where(
  38. [
  39. 'user_id' => $userId,
  40. 'order_type' => OrderType::SELL,
  41. 'item_id' => $itemId,
  42. 'status' => OrderStatus::PENDING,
  43. ]
  44. )->count();
  45. } else {
  46. $count = MexOrder::query()->where(
  47. [
  48. 'user_id' => $userId,
  49. 'order_type' => OrderType::BUY,
  50. 'item_id' => $itemId,
  51. 'status' => OrderStatus::PENDING,
  52. ]
  53. )->count();
  54. }
  55. if ($count >= 10) {
  56. return false;
  57. }
  58. return true;
  59. }
  60. }