| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <?php
- /**
- * 手动测试脚本:验证解冻过程中的事件触发
- *
- * 测试ItemQuantityChanged事件是否正确触发
- */
- require_once __DIR__ . '/../vendor/autoload.php';
- use App\Module\GameItems\Services\ItemService;
- use App\Module\GameItems\Enums\FREEZE_REASON_TYPE;
- use App\Module\GameItems\Events\ItemQuantityChanged;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Event;
- // 启动Laravel应用
- $app = require_once __DIR__ . '/../bootstrap/app.php';
- $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
- echo "=== 物品解冻事件触发测试 ===\n\n";
- // 记录触发的事件
- $triggeredEvents = [];
- // 监听ItemQuantityChanged事件
- Event::listen(ItemQuantityChanged::class, function ($event) use (&$triggeredEvents) {
- $triggeredEvents[] = [
- 'user_id' => $event->userId,
- 'item_id' => $event->itemId,
- 'instance_id' => $event->instanceId,
- 'old_quantity' => $event->oldQuantity,
- 'new_quantity' => $event->newQuantity,
- 'user_item_id' => $event->userItemId,
- 'old_frozen_status' => $event->oldFrozenStatus,
- 'new_frozen_status' => $event->newFrozenStatus,
- 'options' => $event->options,
- ];
- });
- try {
- DB::beginTransaction();
-
- $userId = 1001;
- $itemId = 1;
- $freezeQuantity = 100;
- $consumeQuantity = 60;
-
- echo "1. 准备测试数据\n";
-
- // 添加物品
- $addResult = ItemService::addItem($userId, $itemId, 300);
- echo " 添加物品事件数量: " . count($triggeredEvents) . "\n";
- $triggeredEvents = []; // 清空事件记录
-
- // 冻结物品
- echo "\n2. 冻结物品\n";
- $freezeResult = ItemService::freezeItem(
- $userId,
- $itemId,
- null,
- $freezeQuantity,
- FREEZE_REASON_TYPE::TRADE_ORDER->value,
- [
- 'source_id' => 12345,
- 'source_type' => 'test_order',
- 'operator_id' => 1
- ]
- );
- $freezeLogId = $freezeResult['frozen_items'][0]['freeze_log_id'];
- echo " 冻结操作事件数量: " . count($triggeredEvents) . "\n";
- foreach ($triggeredEvents as $i => $event) {
- echo " 事件 " . ($i + 1) . ": 用户物品ID={$event['user_item_id']}, 数量变化={$event['old_quantity']}→{$event['new_quantity']}, 冻结状态={$event['old_frozen_status']}→{$event['new_frozen_status']}\n";
- if (isset($event['options']['action'])) {
- echo " 动作: {$event['options']['action']}\n";
- }
- }
- $triggeredEvents = []; // 清空事件记录
-
- // 消耗部分冻结物品
- echo "\n3. 消耗部分冻结物品\n";
- $consumeResult = ItemService::consumeItem(
- $userId,
- $itemId,
- null,
- $consumeQuantity,
- [
- 'include_frozen' => true,
- 'source_type' => 'test_consume',
- 'source_id' => 67890
- ]
- );
- echo " 消耗操作事件数量: " . count($triggeredEvents) . "\n";
- foreach ($triggeredEvents as $i => $event) {
- echo " 事件 " . ($i + 1) . ": 用户物品ID={$event['user_item_id']}, 数量变化={$event['old_quantity']}→{$event['new_quantity']}, 冻结状态={$event['old_frozen_status']}→{$event['new_frozen_status']}\n";
- }
- $triggeredEvents = []; // 清空事件记录
-
- // 测试原始解冻方法
- echo "\n4. 测试原始解冻方法(应该触发补足事件)\n";
- try {
- $unfreezeResult = ItemService::unfreezeItem($freezeLogId);
- echo " 解冻操作事件数量: " . count($triggeredEvents) . "\n";
- foreach ($triggeredEvents as $i => $event) {
- echo " 事件 " . ($i + 1) . ": 用户物品ID={$event['user_item_id']}, 数量变化={$event['old_quantity']}→{$event['new_quantity']}, 冻结状态={$event['old_frozen_status']}→{$event['new_frozen_status']}\n";
- if (isset($event['options']['action'])) {
- echo " 动作: {$event['options']['action']}\n";
- }
- if (isset($event['options']['transferred_quantity'])) {
- echo " 转移数量: {$event['options']['transferred_quantity']}\n";
- }
- }
- echo " 解冻成功,补足差额: " . ($unfreezeResult['shortage_compensated'] ?? 0) . "\n";
- } catch (Exception $e) {
- echo " 解冻失败: " . $e->getMessage() . "\n";
- }
- $triggeredEvents = []; // 清空事件记录
-
- // 重新冻结并完全消耗,测试安全解冻
- echo "\n5. 重新冻结并完全消耗,测试安全解冻\n";
- $freezeResult2 = ItemService::freezeItem(
- $userId,
- $itemId,
- null,
- 40,
- FREEZE_REASON_TYPE::TRADE_ORDER->value,
- [
- 'source_id' => 12346,
- 'source_type' => 'test_order_2',
- 'operator_id' => 1
- ]
- );
- $freezeLogId2 = $freezeResult2['frozen_items'][0]['freeze_log_id'];
- $triggeredEvents = []; // 清空冻结事件记录
-
- // 完全消耗
- $consumeResult2 = ItemService::consumeItem(
- $userId,
- $itemId,
- null,
- 40,
- [
- 'include_frozen' => true,
- 'source_type' => 'test_consume_all',
- 'source_id' => 67891
- ]
- );
- $triggeredEvents = []; // 清空消耗事件记录
-
- // 测试安全解冻
- echo " 测试安全解冻方法(应该触发补足事件)\n";
- try {
- $safeUnfreezeResult = ItemService::safeUnfreezeItem($freezeLogId2);
- echo " 安全解冻操作事件数量: " . count($triggeredEvents) . "\n";
- foreach ($triggeredEvents as $i => $event) {
- echo " 事件 " . ($i + 1) . ": 用户物品ID={$event['user_item_id']}, 数量变化={$event['old_quantity']}→{$event['new_quantity']}, 冻结状态={$event['old_frozen_status']}→{$event['new_frozen_status']}\n";
- if (isset($event['options']['action'])) {
- echo " 动作: {$event['options']['action']}\n";
- }
- if (isset($event['options']['transferred_quantity'])) {
- echo " 转移数量: {$event['options']['transferred_quantity']}\n";
- }
- if (isset($event['options']['compensated_quantity'])) {
- echo " 补足数量: {$event['options']['compensated_quantity']}\n";
- }
- }
- echo " 安全解冻结果: " . json_encode($safeUnfreezeResult, JSON_UNESCAPED_UNICODE) . "\n";
- } catch (Exception $e) {
- echo " 安全解冻失败: " . $e->getMessage() . "\n";
- }
-
- echo "\n=== 测试完成 ===\n";
-
- DB::rollback();
- echo "已回滚测试数据\n";
-
- } catch (Exception $e) {
- DB::rollback();
- echo "测试失败: " . $e->getMessage() . "\n";
- echo "堆栈跟踪: " . $e->getTraceAsString() . "\n";
- }
|