| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <?php
- /**
- * 手动测试脚本:验证物品解冻BUG修复
- *
- * 测试场景:
- * 1. 冻结物品
- * 2. 消耗冻结物品
- * 3. 尝试解冻(应该正确处理已被消耗的情况)
- */
- require_once __DIR__ . '/../vendor/autoload.php';
- use App\Module\GameItems\Services\ItemService;
- use App\Module\GameItems\Enums\FREEZE_REASON_TYPE;
- use Illuminate\Support\Facades\DB;
- // 启动Laravel应用
- $app = require_once __DIR__ . '/../bootstrap/app.php';
- $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
- echo "=== 物品解冻BUG修复测试 ===\n\n";
- try {
- DB::beginTransaction();
-
- $userId = 1001; // 测试用户ID
- $itemId = 1; // 测试物品ID
- $freezeQuantity = 100; // 冻结数量
- $consumeQuantity = 60; // 消耗数量
-
- echo "1. 准备测试数据\n";
- echo " 用户ID: {$userId}\n";
- echo " 物品ID: {$itemId}\n";
- echo " 冻结数量: {$freezeQuantity}\n";
- echo " 消耗数量: {$consumeQuantity}\n\n";
-
- // 确保用户有足够的物品
- echo "2. 添加测试物品\n";
- $addResult = ItemService::addItem($userId, $itemId, 300); // 增加到300,确保有足够的物品用于补足
- echo " 添加结果: " . json_encode($addResult, JSON_UNESCAPED_UNICODE) . "\n\n";
-
- // 冻结物品
- echo "3. 冻结物品\n";
- $freezeResult = ItemService::freezeItem(
- $userId,
- $itemId,
- null, // instanceId
- $freezeQuantity,
- FREEZE_REASON_TYPE::TRADE_ORDER->value,
- [
- 'source_id' => 12345,
- 'source_type' => 'test_order',
- 'operator_id' => 1
- ]
- );
- echo " 冻结结果: " . json_encode($freezeResult, JSON_UNESCAPED_UNICODE) . "\n";
- $freezeLogId = $freezeResult['frozen_items'][0]['freeze_log_id'];
- echo " 冻结日志ID: {$freezeLogId}\n\n";
-
- // 消耗部分冻结物品
- echo "4. 消耗部分冻结物品\n";
- $consumeResult = ItemService::consumeItem(
- $userId,
- $itemId,
- null, // instanceId
- $consumeQuantity,
- [
- 'include_frozen' => true, // 允许消耗冻结物品
- 'source_type' => 'test_consume',
- 'source_id' => 67890
- ]
- );
- echo " 消耗结果: " . json_encode($consumeResult, JSON_UNESCAPED_UNICODE) . "\n\n";
-
- // 检查冻结物品当前状态
- echo "5. 检查冻结物品当前状态\n";
- $frozenItems = ItemService::getFrozenItems($userId, ['item_id' => $itemId]);
- echo " 冻结物品列表: " . json_encode($frozenItems, JSON_UNESCAPED_UNICODE) . "\n\n";
-
- // 测试原始解冻方法(应该成功,因为还有剩余数量)
- echo "6. 测试原始解冻方法\n";
- try {
- $unfreezeResult = ItemService::unfreezeItem($freezeLogId);
- echo " 原始解冻成功: " . json_encode($unfreezeResult, JSON_UNESCAPED_UNICODE) . "\n\n";
- } catch (Exception $e) {
- echo " 原始解冻失败: " . $e->getMessage() . "\n\n";
- }
-
- // 重新冻结用于测试完全消耗的情况
- echo "7. 重新冻结剩余物品进行完全消耗测试\n";
- $remainingQuantity = 40; // 100 - 60 = 40
- $freezeResult2 = ItemService::freezeItem(
- $userId,
- $itemId,
- null, // instanceId
- $remainingQuantity,
- FREEZE_REASON_TYPE::TRADE_ORDER->value,
- [
- 'source_id' => 12346,
- 'source_type' => 'test_order_2',
- 'operator_id' => 1
- ]
- );
- echo " 第二次冻结结果: " . json_encode($freezeResult2, JSON_UNESCAPED_UNICODE) . "\n";
- $freezeLogId2 = $freezeResult2['frozen_items'][0]['freeze_log_id'];
- echo " 第二次冻结日志ID: {$freezeLogId2}\n\n";
-
- // 完全消耗冻结物品
- echo "8. 完全消耗冻结物品\n";
- $consumeResult2 = ItemService::consumeItem(
- $userId,
- $itemId,
- null, // instanceId
- $remainingQuantity,
- [
- 'include_frozen' => true,
- 'source_type' => 'test_consume_all',
- 'source_id' => 67891
- ]
- );
- echo " 完全消耗结果: " . json_encode($consumeResult2, JSON_UNESCAPED_UNICODE) . "\n\n";
-
- // 测试原始解冻方法(应该失败)
- echo "9. 测试原始解冻方法(完全消耗后)\n";
- try {
- $unfreezeResult = ItemService::unfreezeItem($freezeLogId2);
- echo " 原始解冻成功: " . json_encode($unfreezeResult, JSON_UNESCAPED_UNICODE) . "\n\n";
- } catch (Exception $e) {
- echo " 原始解冻失败(预期): " . $e->getMessage() . "\n\n";
- }
-
- // 测试安全解冻方法(应该成功处理)
- echo "10. 测试安全解冻方法(完全消耗后)\n";
- try {
- $safeUnfreezeResult = ItemService::safeUnfreezeItem($freezeLogId2);
- echo " 安全解冻成功: " . json_encode($safeUnfreezeResult, JSON_UNESCAPED_UNICODE) . "\n\n";
- } catch (Exception $e) {
- echo " 安全解冻失败: " . $e->getMessage() . "\n\n";
- }
-
- // 测试统计功能
- echo "11. 测试已消耗冻结物品统计\n";
- $statistics = ItemService::getConsumedFrozenItemsStatistics($userId);
- echo " 统计结果: " . json_encode($statistics, JSON_UNESCAPED_UNICODE) . "\n\n";
-
- echo "=== 测试完成 ===\n";
-
- DB::rollback(); // 回滚测试数据
- echo "已回滚测试数据\n";
-
- } catch (Exception $e) {
- DB::rollback();
- echo "测试失败: " . $e->getMessage() . "\n";
- echo "堆栈跟踪: " . $e->getTraceAsString() . "\n";
- }
|