where('item_id', $testItemId)->delete(); MexOrder::where('user_id', $testUserId)->where('item_id', $testItemId)->delete(); ItemFreezeLog::where('user_id', $testUserId)->where('item_id', $testItemId)->delete(); // 创建测试用户物品 $userItem = ItemUser::create([ 'user_id' => $testUserId, 'item_id' => $testItemId, 'instance_id' => null, 'quantity' => 100, 'is_frozen' => false, 'expire_at' => now()->addDays(30), ]); echo " 创建用户物品: 用户{$testUserId}, 物品{$testItemId}, 数量100\n"; // 创建价格配置 \App\Module\Mex\Models\MexPriceConfig::updateOrCreate( ['item_id' => $testItemId], [ 'min_price' => 1.0, 'max_price' => 100.0, 'protection_threshold' => 10, 'is_enabled' => true, ] ); echo " 创建价格配置: 物品{$testItemId}\n"; // 2. 创建卖出订单(会冻结物品) echo "\n2. 创建卖出订单...\n"; $createResult = \DB::transaction(function () use ($testUserId, $testItemId) { return \App\Module\Mex\Logic\MexOrderLogic::createSellOrder( $testUserId, $testItemId, 20, 10.5, FUND_CURRENCY_TYPE::FUND2 ); }); if (!$createResult['success']) { throw new Exception('创建卖出订单失败:' . $createResult['message']); } $orderId = $createResult['order_id']; echo " 订单创建成功,订单ID: {$orderId}\n"; // 3. 验证物品已被冻结 echo "\n3. 验证物品冻结状态...\n"; $frozenItems = ItemUser::where('user_id', $testUserId) ->where('item_id', $testItemId) ->where('is_frozen', true) ->get(); echo " 冻结物品数量: " . $frozenItems->count() . "\n"; foreach ($frozenItems as $item) { echo " - 冻结物品ID: {$item->id}, 数量: {$item->quantity}, 冻结日志ID: {$item->frozen_log_id}\n"; } // 验证冻结记录 $freezeLog = ItemFreezeLog::where('source_id', $orderId) ->where('source_type', 'mex_sell_order') ->where('action_type', FREEZE_ACTION_TYPE::FREEZE) ->first(); if ($freezeLog) { echo " 冻结记录存在: ID {$freezeLog->id}, 数量 {$freezeLog->quantity}\n"; } else { echo " 警告:未找到冻结记录\n"; } // 4. 取消订单 echo "\n4. 取消订单...\n"; $cancelResult = MexOrderService::cancelOrder($testUserId, $orderId); if (!$cancelResult['success']) { throw new Exception('取消订单失败:' . $cancelResult['message']); } echo " 订单取消成功: " . $cancelResult['message'] . "\n"; // 5. 验证订单状态 echo "\n5. 验证订单状态...\n"; $order = MexOrder::find($orderId); echo " 订单状态: " . $order->status->name . "\n"; // 6. 验证物品解冻状态 echo "\n6. 验证物品解冻状态...\n"; $frozenItemsAfter = ItemUser::where('user_id', $testUserId) ->where('item_id', $testItemId) ->where('is_frozen', true) ->get(); echo " 取消后冻结物品数量: " . $frozenItemsAfter->count() . "\n"; $availableItems = ItemUser::where('user_id', $testUserId) ->where('item_id', $testItemId) ->where('is_frozen', false) ->get(); echo " 可用物品数量: " . $availableItems->count() . "\n"; foreach ($availableItems as $item) { echo " - 可用物品ID: {$item->id}, 数量: {$item->quantity}\n"; } // 验证解冻记录 $unfreezeLog = ItemFreezeLog::where('source_id', $orderId) ->where('source_type', 'mex_sell_order') ->where('action_type', FREEZE_ACTION_TYPE::UNFREEZE) ->first(); if ($unfreezeLog) { echo " 解冻记录存在: ID {$unfreezeLog->id}, 数量 {$unfreezeLog->quantity}\n"; } else { echo " 警告:未找到解冻记录\n"; } // 7. 总结 echo "\n=== 测试结果总结 ===\n"; $totalAvailable = ItemUser::where('user_id', $testUserId) ->where('item_id', $testItemId) ->where('is_frozen', false) ->sum('quantity'); $totalFrozen = ItemUser::where('user_id', $testUserId) ->where('item_id', $testItemId) ->where('is_frozen', true) ->sum('quantity'); echo "用户 {$testUserId} 物品 {$testItemId} 状态:\n"; echo "- 可用数量: {$totalAvailable}\n"; echo "- 冻结数量: {$totalFrozen}\n"; echo "- 总数量: " . ($totalAvailable + $totalFrozen) . "\n"; if ($totalFrozen == 0 && $totalAvailable >= 80) { // 原来100,冻结20,取消后应该恢复 echo "✅ 测试通过:物品已正确解冻\n"; } else { echo "❌ 测试失败:物品解冻不正确\n"; } } catch (Exception $e) { echo "❌ 测试失败:" . $e->getMessage() . "\n"; echo "错误堆栈:\n" . $e->getTraceAsString() . "\n"; } echo "\n=== 测试完成 ===\n";