Справочник участников — своего контура; регистрация — по справочнику НРД; поиск клиентов портфеля
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:
@@ -149,6 +149,9 @@ func recordParticipantReply(status string, resp *m2m.M2MTransferResponse, rawFil
|
||||
|
||||
// participantAccepted — последняя отправленная анкета принята НРД.
|
||||
func participantAccepted() bool {
|
||||
if in, _, _, _ := nsdHandbookHasUs(globalRC); in {
|
||||
return true // уже в справочнике участников НРД — зарегистрированы (в т.ч. без анкеты из bj)
|
||||
}
|
||||
r := loadParticipantReg()
|
||||
return !r.RespAt.IsZero() && !strings.EqualFold(r.Status, "ERROR") && !strings.EqualFold(r.Status, "INFO")
|
||||
}
|
||||
@@ -185,3 +188,45 @@ func participantBanner() template.HTML {
|
||||
return template.HTML(`<div class="stc ` + cls + `" style="margin:0 0 14px"><span class="stc-ic"></span><div class="stc-b"><b>` + esc(head) +
|
||||
`</b><small>` + esc(body) + ` <a href="#nsd-participant" onclick="var d=document.getElementById('pf-box');if(d)d.open=true">Открыть анкету →</a></small></div></div>`)
|
||||
}
|
||||
|
||||
// nsdHandbookHasUs — наша организация в справочнике участников M2M, который этот bj получил от НРД
|
||||
// (handbookFile, текущий контур). known=false — справочника от НРД ещё нет. Общий справочник с
|
||||
// сервера лицензий здесь не годится: он собран с других установок и контуров.
|
||||
func nsdHandbookHasUs(rc *RuntimeConfig) (in, known bool, at time.Time, n int) {
|
||||
b, err := os.ReadFile(handbookFile)
|
||||
if err != nil || rc == nil {
|
||||
return false, false, time.Time{}, 0
|
||||
}
|
||||
var h struct {
|
||||
At time.Time `json:"at"`
|
||||
Participants []HandbookEntry `json:"participants"`
|
||||
}
|
||||
if json.Unmarshal(b, &h) != nil {
|
||||
return false, false, time.Time{}, 0
|
||||
}
|
||||
s := rc.Snapshot()
|
||||
code, inn := strings.ToUpper(strings.TrimSpace(orgCode(s))), strings.TrimSpace(orgINN(s))
|
||||
for _, p := range h.Participants {
|
||||
if (code != "" && strings.EqualFold(p.Code, code)) || (code == "" && inn != "" && p.INN == inn) {
|
||||
return true, true, h.At, len(h.Participants)
|
||||
}
|
||||
}
|
||||
return false, true, h.At, len(h.Participants)
|
||||
}
|
||||
|
||||
// participantHandbookCheck — после каждого справочника от НРД: появились в нём, а анкета ещё не
|
||||
// отмечена принятой — регистрация подтверждена справочником.
|
||||
func participantHandbookCheck(rc *RuntimeConfig) {
|
||||
in, known, at, _ := nsdHandbookHasUs(rc)
|
||||
if !in || !known {
|
||||
return
|
||||
}
|
||||
r := loadParticipantReg()
|
||||
if r.SentAt.IsZero() || (!r.RespAt.IsZero() && !strings.EqualFold(r.Status, "INFO") && !strings.EqualFold(r.Status, "ERROR")) {
|
||||
return
|
||||
}
|
||||
saveParticipantReg(func(r *participantReg) {
|
||||
r.RespAt, r.Status, r.Codes = at, "OK", nil
|
||||
r.RespText = "организация появилась в справочнике участников M2M НРД"
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user