VerifyFundCurrencyId.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Module\Fund\Enums\FUND_CURRENCY_TYPE;
  4. use App\Module\Fund\Enums\FUND_TYPE;
  5. use App\Module\Fund\Services\CurrencyService;
  6. use App\Module\Fund\Models\FundCurrencyModel;
  7. use Illuminate\Console\Command;
  8. class VerifyFundCurrencyId extends Command
  9. {
  10. protected $signature = 'fund:verify-currency-id';
  11. protected $description = '验证Fund模块币种ID概念的正确性';
  12. public function handle()
  13. {
  14. $this->info('=== Fund模块币种ID概念验证 ===');
  15. try {
  16. // 测试1: 验证币种ID概念
  17. $this->info('1. 验证币种ID概念...');
  18. $this->line(' 币种ID应该是FUND_CURRENCY_TYPE枚举的value,不是数据库表的ID');
  19. foreach (FUND_CURRENCY_TYPE::cases() as $currencyType) {
  20. $this->line(" - {$currencyType->getCurrencyName()}: 币种ID = {$currencyType->value}");
  21. }
  22. // 测试2: 验证数据库表ID vs 币种ID
  23. $this->info('2. 验证数据库表ID vs 币种ID...');
  24. $currencies = FundCurrencyModel::all();
  25. foreach ($currencies as $currency) {
  26. $this->line(" - {$currency->name}: 数据库表ID = {$currency->id}, 币种ID = " . ($currency->type ? $currency->type->value : 'NULL'));
  27. }
  28. // 测试3: 验证账户类型到币种的映射
  29. $this->info('3. 验证账户类型到币种的映射...');
  30. foreach (FUND_TYPE::cases() as $fundType) {
  31. $currency = CurrencyService::getCurrencyByFundId($fundType->value);
  32. if ($currency) {
  33. $this->line(" - {$fundType->name} (账户ID:{$fundType->value}) -> 币种ID:{$currency->currencyId} ({$currency->name})");
  34. } else {
  35. $this->line(" - {$fundType->name} (账户ID:{$fundType->value}) -> 无对应币种");
  36. }
  37. }
  38. // 测试4: 验证币种一致性检查
  39. $this->info('4. 验证币种一致性检查...');
  40. $fund1 = FUND_TYPE::FUND1->value; // 金币账户
  41. $fund2 = FUND_TYPE::FUND2->value; // 钻石账户
  42. $fund3 = FUND_TYPE::FUND3->value; // 钻石冻结账户
  43. $check1 = CurrencyService::check($fund1, $fund2);
  44. $check2 = CurrencyService::check($fund2, $fund3);
  45. $this->line(" - 金币账户 vs 钻石账户: " . ($check1 ? '币种一致' : '币种不一致') . ' (应该不一致)');
  46. $this->line(" - 钻石账户 vs 钻石冻结账户: " . ($check2 ? '币种一致' : '币种不一致') . ' (应该一致)');
  47. // 测试5: 验证精度获取
  48. $this->info('5. 验证精度获取...');
  49. foreach (FUND_CURRENCY_TYPE::cases() as $currencyType) {
  50. $precision = CurrencyService::getCurrencyPrecision($currencyType->value);
  51. $this->line(" - {$currencyType->getCurrencyName()} (币种ID:{$currencyType->value}): 精度 = {$precision}");
  52. }
  53. // 测试6: 验证格式化显示
  54. $this->info('6. 验证格式化显示...');
  55. $testAmount = 123.456789;
  56. foreach (FUND_CURRENCY_TYPE::cases() as $currencyType) {
  57. $formatted = CurrencyService::formatAmount($testAmount, $currencyType->value);
  58. $this->line(" - {$currencyType->getCurrencyName()}: {$testAmount} -> {$formatted}");
  59. }
  60. $this->info('=== 验证完成 ===');
  61. } catch (\Exception $e) {
  62. $this->error("错误: " . $e->getMessage());
  63. $this->error("文件: " . $e->getFile() . ":" . $e->getLine());
  64. }
  65. }
  66. }