FundLogic.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace App\Module\Mex\Logic;
  3. use App\Module\Fund\Enums\FUND_CURRENCY_TYPE;
  4. use App\Module\Fund\Enums\FUND_TYPE;
  5. /**
  6. * Fund 模块适配
  7. * 多币种适配
  8. *
  9. * 为Mex模块提供币种与账户类型的映射关系
  10. * 默认使用钻石币种进行交易
  11. */
  12. class FundLogic
  13. {
  14. /**
  15. * 可用账户标识
  16. */
  17. const CAN = 1;
  18. /**
  19. * 冻结账户标识
  20. */
  21. const FREEZE = 2;
  22. /**
  23. * 默认币种:钻石
  24. */
  25. const DEFAULT_CURRENCY = FUND_CURRENCY_TYPE::ZUANSHI;
  26. /**
  27. * 币种与账户类型映射关系
  28. *
  29. * @var array
  30. */
  31. private static array $currencyMapping = [
  32. // 钻石币种映射(默认币种)
  33. 2 => [ // FUND_CURRENCY_TYPE::ZUANSHI
  34. self::CAN => FUND_TYPE::FUND2, // 钻石可用账户
  35. self::FREEZE => FUND_TYPE::FUND3, // 钻石冻结账户
  36. ]
  37. ];
  38. /**
  39. * 获取币种适配
  40. *
  41. * @param FUND_CURRENCY_TYPE $currencyType 币种类型
  42. * @return array 账户类型映射数组
  43. */
  44. public static function get(FUND_CURRENCY_TYPE $currencyType): array
  45. {
  46. return self::$currencyMapping[$currencyType->value] ?? [];
  47. }
  48. /**
  49. * 使用币种数字获取账户映射
  50. *
  51. * @param int $currencyTypeValue 币种类型值
  52. * @return array 账户类型映射数组
  53. */
  54. public static function get4n(int $currencyTypeValue): array
  55. {
  56. $currencyType = FUND_CURRENCY_TYPE::tryFrom($currencyTypeValue);
  57. if (!$currencyType) {
  58. return [];
  59. }
  60. return self::get($currencyType);
  61. }
  62. /**
  63. * 获取默认币种
  64. *
  65. * @return FUND_CURRENCY_TYPE 默认币种(钻石)
  66. */
  67. public static function getDefaultCurrency(): FUND_CURRENCY_TYPE
  68. {
  69. return self::DEFAULT_CURRENCY;
  70. }
  71. /**
  72. * 获取默认币种的账户映射
  73. *
  74. * @return array 默认币种的账户类型映射数组
  75. */
  76. public static function getDefaultMapping(): array
  77. {
  78. return self::get(self::DEFAULT_CURRENCY);
  79. }
  80. /**
  81. * 获取指定币种的可用账户类型
  82. *
  83. * @param FUND_CURRENCY_TYPE $currencyType 币种类型
  84. * @return FUND_TYPE|null 可用账户类型
  85. */
  86. public static function getAvailableAccountType(FUND_CURRENCY_TYPE $currencyType): ?FUND_TYPE
  87. {
  88. $mapping = self::get($currencyType);
  89. return $mapping[self::CAN] ?? null;
  90. }
  91. /**
  92. * 获取指定币种的冻结账户类型
  93. *
  94. * @param FUND_CURRENCY_TYPE $currencyType 币种类型
  95. * @return FUND_TYPE|null 冻结账户类型
  96. */
  97. public static function getFrozenAccountType(FUND_CURRENCY_TYPE $currencyType): ?FUND_TYPE
  98. {
  99. $mapping = self::get($currencyType);
  100. return $mapping[self::FREEZE] ?? null;
  101. }
  102. /**
  103. * 检查币种是否支持
  104. *
  105. * @param FUND_CURRENCY_TYPE $currencyType 币种类型
  106. * @return bool 是否支持
  107. */
  108. public static function isCurrencySupported(FUND_CURRENCY_TYPE $currencyType): bool
  109. {
  110. return isset(self::$currencyMapping[$currencyType->value]);
  111. }
  112. /**
  113. * 获取所有支持的币种列表
  114. *
  115. * @return array 支持的币种ID列表
  116. */
  117. public static function getSupportedCurrencies(): array
  118. {
  119. return array_keys(self::$currencyMapping);
  120. }
  121. }