- Добавлен асинхронный процесс аппаратной выдачи физических призов (хоппер и витрина) в GameplayHudController. - Реализована блокировка выдачи по 10-секундному таймауту датчика хоппера с гарантированной отправкой команды отключения двигателя '300'. - Реализован автоматический таймаут неактивности на экране QR-кода с последующим переходом в главное меню. - Расширен сервис статистики PrizeSessionStateService новыми долгосрочными счетчиками (сыгранные игры, очки, монеты, сбои связи COM, физ. выдачи и ошибки). - Обновлен построитель сводки статистики в меню настроек для отображения новых счетчиков и списка последних 5 сессий. - Написаны EditMode тесты для проверки инкремента счетчиков и запуска выдачи призов.
38 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|