| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- <?php
- /**
- * 手动测试取消订单的解冻功能
- *
- * 使用方法:
- * php artisan tinker
- * include 'app/Module/Mex/Tests/manual_cancel_test.php';
- */
- use App\Module\Fund\Enums\FUND_CURRENCY_TYPE;
- use App\Module\GameItems\Enums\FREEZE_ACTION_TYPE;
- use App\Module\GameItems\Models\ItemFreezeLog;
- use App\Module\GameItems\Models\ItemUser;
- use App\Module\Mex\Enums\OrderStatus;
- use App\Module\Mex\Models\MexOrder;
- use App\Module\Mex\Services\MexOrderService;
- echo "=== 农贸市场订单取消解冻功能测试 ===\n";
- // 测试参数
- $testUserId = 1001;
- $testItemId = 10001;
- try {
- // 1. 准备测试数据
- echo "1. 准备测试数据...\n";
-
- // 清理旧数据
- ItemUser::where('user_id', $testUserId)->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";
|