Danro-Jump/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsQrSummaryBuilder.cs
Danil Iarosh d39d160d92 Implement physical prize dispensing, service stats, and QR screen timeout
- Добавлен асинхронный процесс аппаратной выдачи физических призов (хоппер и витрина) в GameplayHudController.
- Реализована блокировка выдачи по 10-секундному таймауту датчика хоппера с гарантированной отправкой команды отключения двигателя '300'.
- Реализован автоматический таймаут неактивности на экране QR-кода с последующим переходом в главное меню.
- Расширен сервис статистики PrizeSessionStateService новыми долгосрочными счетчиками (сыгранные игры, очки, монеты, сбои связи COM, физ. выдачи и ошибки).
- Обновлен построитель сводки статистики в меню настроек для отображения новых счетчиков и списка последних 5 сессий.
- Написаны EditMode тесты для проверки инкремента счетчиков и запуска выдачи призов.
2026-06-23 10:36:13 +03:00

38 lines
1.8 KiB
C#

using DanroJump.Prizes.Qr;
namespace DanroJump.Settings
{
/// <summary>
/// Формирует операторскую сводку QR-выдачи и коротких текстов призов.
/// </summary>
internal static class ServiceSettingsQrSummaryBuilder
{
public static string Build(IReadOnlyServiceSettings settings)
{
if (settings == null)
{
return "Раздел QR открыт. Сервис настроек пока недоступен.";
}
var showQrErrors = settings.GetBool(ServiceSettingsKeys.ShowPrizeError) ? "показывать" : "скрывать";
var phone = settings.GetString(ServiceSettingsKeys.PrizePhoneNumber);
var phoneDigits = TelegramPrizeQrPayloadBuilder.NormalizePhoneDigits(phone);
var phoneText = string.IsNullOrWhiteSpace(phone) ? "не задан" : phone;
var bronze = FormatTierText(settings, QrPrizeTier.Bronze);
var silver = FormatTierText(settings, QrPrizeTier.Silver);
var gold = FormatTierText(settings, QrPrizeTier.Gold);
var qrState = string.IsNullOrWhiteSpace(phoneDigits)
? "QR не готов: не задан телефон."
: "QR готов к показу.";
return $"Раздел QR открыт. {qrState} Ошибки QR: {showQrErrors}. Телефон: {phoneText}. Тексты призов: Бронзовый: {bronze}; Серебряный: {silver}; Золотой: {gold}.";
}
private static string FormatTierText(IReadOnlyServiceSettings settings, QrPrizeTier tier)
{
var text = QrPrizeTextSettings.GetPrizeText(settings, tier);
return string.IsNullOrWhiteSpace(text) ? "<пусто>" : text;
}
}
}