group_id; $count = $this->count ?? 10; // 获取奖励组信息 $group = GameRewardGroup::find($groupId); if (!$group) { return '
奖励组不存在
'; } // 批量模拟奖励 $results = RewardService::batchSimulateReward($groupId, $count); // 转换为表格数据 $tableData = []; foreach ($results as $index => $result) { try { $formattedItems = '无奖励'; if ($result->success && !empty($result->items)) { $formattedItems = $this->formatRewardItems($result->items); } $row = [ 'index' => (int)($index + 1), 'success' => (bool)$result->success, 'error' => $result->success ? '' : (string)($result->errorMessage ?? ''), 'formatted_items' => (string)$formattedItems ]; $tableData[] = (object)$row; } catch (\Exception $e) { // 如果处理单个结果失败,创建一个错误行 $row = [ 'index' => (int)($index + 1), 'success' => false, 'error' => '处理结果失败: ' . $e->getMessage(), 'formatted_items' => '处理失败' ]; $tableData[] = (object)$row; } } // 计算统计信息 $successCount = collect($tableData)->where('success', true)->count(); $successRate = $count > 0 ? round(($successCount / $count) * 100, 2) : 0; // 生成HTML表格 $html = "
模拟统计

奖励组:{$group->name} ({$group->code})

模拟次数:{$count} 次

成功次数:{$successCount} 次

成功率:{$successRate}%

"; foreach ($tableData as $row) { $statusBadge = $row->success ? '成功' : '失败'; $rewardContent = $row->formatted_items ?: '无奖励'; $errorContent = $row->error ? "{$row->error}" : ''; $html .= " "; } $html .= "
次数 状态 奖励内容 错误信息
{$row->index} {$statusBadge} {$rewardContent} {$errorContent}
"; return $html; } /** * 格式化奖励项显示 * * @param array $items * @return string */ private function formatRewardItems(array $items): string { if (empty($items)) { return '无奖励'; } $formatted = []; foreach ($items as $item) { try { // 确保$item是对象且有必要的属性 if (!is_object($item)) { $formatted[] = "数据格式错误"; continue; } $formatted[] = \App\Module\Game\Services\RewardTypeDescriptor::formatRewardDisplayFromDto($item, true); } catch (\Exception $e) { $formatted[] = "格式化错误: " . $e->getMessage() . ""; } } return implode('
', $formatted); } }