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 .= "
| {$row->index} |
{$statusBadge} |
{$rewardContent} |
{$errorContent} |
";
}
$html .= "
";
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);
}
}