Справочник участников — своего контура; регистрация — по справочнику НРД; поиск клиентов портфеля

readHandbook брал самый свежий из своего, общего (с сервера лицензий) и
встроенного — общий был тестовым (TEST3, 166 участников, прислан с 28), и на
боевом 9 bj считал «регистрация подтверждена», хотя в боевом справочнике
НРД (89) нас нет. Теперь при своём справочнике от НРД — только он; на сервер
лицензий справочник уходит только с боевого контура.

Регистрация участника проверяется по справочнику, полученному от НРД;
появились в нём — анкета отмечается принятой автоматически, плашка уходит.

Портфель ЛК: клиенты DEPO списком по клику (первые 50 по алфавиту), «не
найдено» вместо «поиск недоступен» (пустой ответ был null).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-22 11:28:13 +03:00
parent 6fc0ff5d3d
commit f296ac5ad8
6 changed files with 86 additions and 29 deletions
+10 -2
View File
@@ -33,10 +33,15 @@ func handbookAt(b []byte) time.Time {
return h.At
}
// readHandbook — самый свежий из доступных справочников.
// readHandbook — справочник своего контура: полученный этим bj от НРД, если он есть (боевой и
// тестовый справочники разные — в боевом меньше участников, не все подключились; копия с сервера
// лицензий может быть с другого контура). Нет своего — самый свежий из копии и встроенного снимка.
func readHandbook() ([]byte, error) {
if b, err := os.ReadFile(handbookFile); err == nil && len(b) > 0 && !handbookAt(b).IsZero() {
return b, nil
}
best := handbookSnapshot
for _, p := range []string{handbookFile, handbookCloudFile} {
for _, p := range []string{handbookCloudFile} {
if b, err := os.ReadFile(p); err == nil && len(b) > 0 && handbookAt(b).After(handbookAt(best)) {
best = b
}
@@ -58,6 +63,9 @@ func pushHandbookAsync(rc *RuntimeConfig, raw []byte) {
if rc == nil || strings.TrimSpace(rc.Snapshot().License.Key) == "" {
return
}
if contourOf(currentNSDProfile()) != "prod" {
return // общий справочник — только боевой: тестовый (TEST3) шире и для клиентов неверен
}
go func() {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()