manual_test_bug_fix.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. /**
  3. * Mex模块Bug修复手动测试脚本
  4. *
  5. * 用于验证修复后的撮合逻辑确保订单状态更新和成交记录创建的一致性
  6. *
  7. * 运行方式:php artisan tinker
  8. * 然后执行:include 'app/Module/Mex/Tests/manual_test_bug_fix.php';
  9. */
  10. use App\Module\Mex\Models\MexOrder;
  11. use App\Module\Mex\Models\MexTransaction;
  12. use App\Module\Mex\Enums\OrderStatus;
  13. use App\Module\Mex\Enums\OrderType;
  14. use Illuminate\Support\Facades\DB;
  15. echo "=== Mex模块Bug修复验证测试 ===\n";
  16. // 1. 检查当前数据一致性
  17. echo "\n1. 检查当前数据一致性...\n";
  18. $completedOrders = MexOrder::where('status', OrderStatus::COMPLETED)->get();
  19. echo "已完成订单总数: " . $completedOrders->count() . "\n";
  20. $missingTransactionOrders = MexOrder::where('status', OrderStatus::COMPLETED)
  21. ->whereDoesntHave('buyTransactions')
  22. ->whereDoesntHave('sellTransactions')
  23. ->get();
  24. echo "缺失成交记录的已完成订单数: " . $missingTransactionOrders->count() . "\n";
  25. if ($missingTransactionOrders->count() > 0) {
  26. echo "❌ 发现数据不一致问题!\n";
  27. foreach ($missingTransactionOrders as $order) {
  28. echo " - 订单ID: {$order->id}, 用户ID: {$order->user_id}, 类型: {$order->order_type->value}\n";
  29. }
  30. } else {
  31. echo "✅ 数据一致性检查通过\n";
  32. }
  33. // 2. 检查成交记录与订单的对应关系
  34. echo "\n2. 检查成交记录与订单的对应关系...\n";
  35. $orphanTransactions = DB::select("
  36. SELECT t.id, t.buy_order_id, t.sell_order_id
  37. FROM kku_mex_transactions t
  38. LEFT JOIN kku_mex_orders o1 ON t.buy_order_id = o1.id
  39. LEFT JOIN kku_mex_orders o2 ON t.sell_order_id = o2.id
  40. WHERE
  41. (t.buy_order_id IS NOT NULL AND o1.id IS NULL)
  42. OR
  43. (t.sell_order_id IS NOT NULL AND o2.id IS NULL)
  44. ");
  45. echo "孤立的成交记录数: " . count($orphanTransactions) . "\n";
  46. if (count($orphanTransactions) > 0) {
  47. echo "❌ 发现孤立的成交记录!\n";
  48. foreach ($orphanTransactions as $transaction) {
  49. echo " - 成交记录ID: {$transaction->id}, 买单ID: {$transaction->buy_order_id}, 卖单ID: {$transaction->sell_order_id}\n";
  50. }
  51. } else {
  52. echo "✅ 成交记录关联检查通过\n";
  53. }
  54. // 3. 统计信息
  55. echo "\n3. 统计信息...\n";
  56. $totalOrders = MexOrder::count();
  57. $totalTransactions = MexTransaction::count();
  58. $pendingOrders = MexOrder::where('status', OrderStatus::PENDING)->count();
  59. $completedOrdersCount = MexOrder::where('status', OrderStatus::COMPLETED)->count();
  60. echo "订单总数: {$totalOrders}\n";
  61. echo "成交记录总数: {$totalTransactions}\n";
  62. echo "待处理订单数: {$pendingOrders}\n";
  63. echo "已完成订单数: {$completedOrdersCount}\n";
  64. // 4. 验证修复逻辑的改进
  65. echo "\n4. 验证修复逻辑的改进...\n";
  66. echo "修复要点:\n";
  67. echo " ✅ 调整了撮合逻辑的执行顺序:先执行资金/物品流转,再更新订单状态和创建成交记录\n";
  68. echo " ✅ 添加了成交记录创建的验证逻辑\n";
  69. echo " ✅ 提供了修复命令来处理历史数据不一致问题\n";
  70. echo " ✅ 添加了订单模型的关联关系方法\n";
  71. echo "\n=== 测试完成 ===\n";