hasMany(GameConsumeItem::class, 'group_id', 'id');
}
/**
* 格式化消耗详情用于显示
*
* @return string
*/
public function formatConsumeDetails(): string
{
if ($this->consumeItems->isEmpty()) {
return '暂无消耗项';
}
$details = [];
foreach ($this->consumeItems as $item) {
$detail = $this->formatSingleConsumeItem($item);
$details[] = $detail;
}
return '
' . implode('
', $details) . '
';
}
/**
* 格式化单个消耗项
*
* @param GameConsumeItem $item
* @return string
*/
private function formatSingleConsumeItem(GameConsumeItem $item): string
{
$consumeTypeName = \App\Module\Game\Enums\CONSUME_TYPE::getName($item->consume_type);
$targetName = $this->getTargetName($item);
$quantity = $item->quantity;
return sprintf(
'%s %s × %d',
$consumeTypeName,
$targetName,
$quantity
);
}
/**
* 获取目标名称
*
* @param GameConsumeItem $item
* @return string
*/
private function getTargetName(GameConsumeItem $item): string
{
switch ($item->consume_type) {
case \App\Module\Game\Enums\CONSUME_TYPE::ITEM->value:
try {
$itemModel = \App\Module\GameItems\Models\Item::find($item->target_id);
return $itemModel ? $itemModel->name : "物品 (ID: {$item->target_id})";
} catch (\Exception $e) {
return "物品 (ID: {$item->target_id})";
}
case \App\Module\Game\Enums\CONSUME_TYPE::CURRENCY->value:
try {
$currency = \App\Module\Fund\Models\FundCurrencyModel::find($item->target_id);
return $currency ? $currency->name : "货币 (ID: {$item->target_id})";
} catch (\Exception $e) {
return "货币 (ID: {$item->target_id})";
}
case \App\Module\Game\Enums\CONSUME_TYPE::FUND_CONFIG->value:
try {
$fund = \App\Module\Fund\Models\FundConfigModel::find($item->target_id);
return $fund ? $fund->name : "账户种类 (ID: {$item->target_id})";
} catch (\Exception $e) {
return "账户种类 (ID: {$item->target_id})";
}
default:
return "未知消耗类型 (ID: {$item->target_id})";
}
}
}