diff --git a/internal/lkgateway/licensecheck.go b/internal/lkgateway/licensecheck.go index 94c1383..1152264 100644 --- a/internal/lkgateway/licensecheck.go +++ b/internal/lkgateway/licensecheck.go @@ -164,7 +164,11 @@ func licenseStatus(rc *RuntimeConfig) LicenseStatus { if st.Online { st.Message = "активна до " + lic.ExpiresAt.Format("02.01.2006") + ", продлевается автоматически" if !lic.ContractUntil.IsZero() { - st.Message += "; договор до " + lic.ContractUntil.Format("02.01.2006") + if time.Now().After(lic.ContractUntil) { + st.Message += "; поддержка закончилась " + lic.ContractUntil.Format("02.01.2006") + " — работает без новых версий" + } else { + st.Message += "; поддержка (обновления) до " + lic.ContractUntil.Format("02.01.2006") + } } } else { st.Message = "активна до " + lic.ExpiresAt.Format("02.01.2006") + " (офлайн-ключ)" diff --git a/internal/lkgateway/licenseclient.go b/internal/lkgateway/licenseclient.go index cea0b81..dee3424 100644 --- a/internal/lkgateway/licenseclient.go +++ b/internal/lkgateway/licenseclient.go @@ -164,7 +164,7 @@ func LicenseRenew(ctx context.Context, rc *RuntimeConfig) error { if errors.As(err, &ae) && time.Since(licenseAlertAt) > 12*time.Hour { licenseAlertAt = time.Now() raiseSystemAlert(rc, "Лицензия: сервер лицензий отказал в продлении", - fmt.Sprintf("%s (%s). Текущий ключ действует до %s; после этого модули по лицензии отключатся.", ae.Message, ae.Code, lic.ExpiresAt.Local().Format("02.01.2006"))) + fmt.Sprintf("%s (%s). Текущий ключ действует до %s; если его не продлить, модули по лицензии отключатся — обратитесь в ZETIT.", ae.Message, ae.Code, lic.ExpiresAt.Local().Format("02.01.2006"))) } return err } diff --git a/internal/lkgateway/licensewarn.go b/internal/lkgateway/licensewarn.go index 1823b6c..780ebe3 100644 --- a/internal/lkgateway/licensewarn.go +++ b/internal/lkgateway/licensewarn.go @@ -75,7 +75,7 @@ func licenseEnd(st LicenseStatus, lastSync, now time.Time) (end time.Time, what return time.Time{}, "" // уже не действует — об этом говорит статус и отказ в продлении } if !st.ContractUntil.IsZero() { - end, what = st.ContractUntil, "договор" + end, what = st.ContractUntil, "поддержка" } renewStuck := st.Online && now.Sub(lastSync) > 48*time.Hour if (!st.Online || renewStuck) && !st.ExpiresAt.IsZero() && (end.IsZero() || st.ExpiresAt.Before(end)) { @@ -149,10 +149,17 @@ func licenseExpiryWarn(rc *RuntimeConfig, now time.Time) { if daysLeft == 0 { left = "сегодня последний день" } + if what == "поддержка" { + // лицензия бессрочная: по окончании поддержки всё работает, закрываются только новые версии + raiseSystemAlert(rc, "Поддержка bj заканчивается через "+ruDays(daysLeft), + fmt.Sprintf("Поддержка (обновления) bj действует до %s — %s. После этого bj и все купленные модули продолжат работать, "+ + "переустановка останется доступной, но только на версиях, вышедших до этой даты. Новые версии bj (под новые версии МНП, ИШ НРД и других систем) "+ + "станут доступны после продления поддержки — обратитесь в ZETIT.", end.Local().Format("02.01.2006"), left)) + return + } raiseSystemAlert(rc, "Лицензия: "+strings.SplitN(what, " ", 2)[0]+" заканчивается через "+ruDays(daysLeft), - fmt.Sprintf("Лицензия bj (%s) действует до %s — %s. После этого переводы M2M, обмен с НРД и DEPO, цикл QUIK МНП и личный кабинет продолжат работать, "+ - "но отключатся модули по лицензии и обновления bj: новые версии МНП, ИШ и других систем со временем могут перестать корректно работать с bj. "+ - "Для продления обратитесь к поставщику bj.", what, end.Local().Format("02.01.2006"), left)) + fmt.Sprintf("Ключ лицензии bj (%s) действует до %s — %s. bj продлевает его автоматически через сервер лицензий; если продления не будет, "+ + "модули по лицензии и обновления отключатся. Проверьте связь с lic.zetit.ru или обратитесь в ZETIT.", what, end.Local().Format("02.01.2006"), left)) } // ---- 2. смена версии внешней системы при закрытых обновлениях ---- diff --git a/internal/lkgateway/licensewarn_test.go b/internal/lkgateway/licensewarn_test.go index 380f9e7..03de333 100644 --- a/internal/lkgateway/licensewarn_test.go +++ b/internal/lkgateway/licensewarn_test.go @@ -13,7 +13,7 @@ func TestLicenseEnd(t *testing.T) { // Онлайн-ключ продлевается — важна дата договора. st := LicenseStatus{Valid: true, Online: true, ContractUntil: contract, ExpiresAt: key} - if end, what := licenseEnd(st, now.Add(-time.Hour), now); !end.Equal(contract) || what != "договор" { + if end, what := licenseEnd(st, now.Add(-time.Hour), now); !end.Equal(contract) || what != "поддержка" { t.Fatalf("онлайн с договором: %v %q", end, what) } // Онлайн без договора и продление идёт — предупреждать не о чем.