1С: проверка поручений МНП перед отправкой в НРД
Часть модуля onec-back, по умолчанию выключена, включается в настройках («Проверка поручений в 1С»). Исходящий перевод после блокировки бумаг в МНП ждёт решения 1С и в НРД не уходит, пока 1С не подтвердит каждое поручение; при отказе bj снимает поручения в QUIK с причиной из 1С и отклоняет перевод в журнале и кабинете клиента. - onec.instr / onec.instr_queue / onec.set_decision в базе bj: 1С читает очередь и пишет решение под логином onec_bj (только эти права); чтение очереди отмечает связь с 1С. - bj-onec-admin (root, через bj-keymedia): логин onec_bj, вход только с IP 1С по TLS (pg_hba.conf), listen_addresses, ufw; revoke закрывает вход. - onecLoop: отправка подтверждённых, отказы, снятие клиентом в QUIK, поручения из терминала, сроки решения и потеря связи — оповещения. - Карточка заявки: блок «Проверка 1С», решение оператора вместо 1С. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -70,6 +70,10 @@ var quikSendHook func(ctx context.Context, req *m2m.M2MTransferRequest) error
|
||||
// sentHook — вызывается после успешной отправки M2MTR (запись в трансферные таблицы DEPO).
|
||||
var sentHook func(req *m2m.M2MTransferRequest)
|
||||
|
||||
// onecSendHook — проверка поручений в 1С (onec_check.go): true — перевод ждёт решения 1С и в НРД
|
||||
// сейчас не уходит (заявка остаётся «Не отправлена», отправит onecLoop). Назначается в server.go.
|
||||
var onecSendHook func(ctx context.Context, req *m2m.M2MTransferRequest) (bool, error)
|
||||
|
||||
func (s *Service) CreateClaim(ctx context.Context, in CreateClaimRequest) (CreateClaimResponse, error) {
|
||||
req, err := s.BuildRequest(ctx, in)
|
||||
if err != nil {
|
||||
@@ -184,6 +188,19 @@ func (s *Service) SendBuiltRequestVia(ctx context.Context, sender m2mcore.NSDSen
|
||||
return CreateClaimResponse{}, fmt.Errorf("lkgateway: %w", err)
|
||||
}
|
||||
}
|
||||
// Проверка 1С: бумаги уже заблокированы в МНП, в НРД — только после решения 1С.
|
||||
if onecSendHook != nil {
|
||||
wait, err := onecSendHook(ctx, req)
|
||||
if err != nil {
|
||||
return CreateClaimResponse{}, fmt.Errorf("lkgateway: %w", err)
|
||||
}
|
||||
if wait {
|
||||
if !resend {
|
||||
_ = s.repo.AppendEvent(ctx, saved.ID, m2mcore.Event{Type: "onec_wait", CreatedAt: time.Now().UTC(), Actor: "system"})
|
||||
}
|
||||
return CreateClaimResponse{ID: saved.ID, Status: onecWaitStatus, CreatedAt: saved.CreatedAt, Success: true}, nil
|
||||
}
|
||||
}
|
||||
resp, err := sender.Send(ctx, req)
|
||||
if err != nil {
|
||||
s.noteSendFailure(ctx, saved, req, err)
|
||||
|
||||
Reference in New Issue
Block a user