DEPO: процедуры bj2depo — актуальные тексты с тестовой базы + FTV_M2M_UPDATE_HANDBOOK

В bj и deploy/depo/fancy-m2m лежали тексты на 23.09; программист Фонтвьель
менял процедуры 09–21.10 (EVENTS: новая логика и вызов UPDATE_HANDBOOK;
OPERATION: @PARAMETERS, счёт ностро 313 вместо 314; JOB, CREATE). Сняты
с BJ_DEPO_DATA (10.10.10.21) 22.10.2026 без изменений, CREATE → CREATE OR
ALTER. Добавлена FTV_M2M_UPDATE_HANDBOOK (её вызывает EVENTS). Порядок:
WIRING → OPERATION → UPDATE_HANDBOOK → EVENTS → CREATE → JOB.
Проверено на тесте: все 6 применяются в транзакции без ошибок (откат).

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 13:19:19 +03:00
parent f3b154c7fc
commit b652baba63
14 changed files with 1745 additions and 1307 deletions
+17 -5
View File
@@ -4,7 +4,9 @@ package lkgateway
// в базу DEPO прямо из bj: «Проверить возможности» (предпросмотр без изменений) и
// «Установить» (выполняется логином администратора SQL — разово, не сохраняется).
// Процедуры встроены в bj (internal/lkgateway/depoprocs/*.sql), порядок установки —
// WIRING → OPERATION → EVENTS → CREATE → JOB; затем GRANT EXECUTE на FTV_M2M_JOB логину bj.
// WIRING → OPERATION → UPDATE_HANDBOOK → EVENTS → CREATE → JOB; затем GRANT EXECUTE логину bj.
// Тексты — с тестовой DEPO Фонтвьель на 22.10.2026 (правки программиста 09–21.10; EVENTS вызывает
// UPDATE_HANDBOOK — без неё обработка событий падает).
import (
"context"
@@ -25,6 +27,7 @@ var depoProcFS embed.FS
var depoProcInstallOrder = []struct{ Name, File string }{
{"FTV_M2M_PROCESS_WIRING", "depoprocs/FTV_M2M_PROCESS_WIRING.sql"},
{"FTV_M2M_PROCESS_OPERATION", "depoprocs/FTV_M2M_PROCESS_OPERATION.sql"},
{"FTV_M2M_UPDATE_HANDBOOK", "depoprocs/FTV_M2M_UPDATE_HANDBOOK.sql"}, // вызывается из EVENTS (HANDBOOK)
{"FTV_M2M_PROCESS_EVENTS", "depoprocs/FTV_M2M_PROCESS_EVENTS.sql"},
{"FTV_M2M_PROCESS_CREATE", "depoprocs/FTV_M2M_PROCESS_CREATE.sql"},
{"FTV_M2M_JOB", "depoprocs/FTV_M2M_JOB.sql"},
@@ -73,6 +76,15 @@ func depoProcEffective(f FancyMSSQLSettings, name string) string {
return embeddedProcBody(name)
}
// depoProcOrderText — порядок установки коротко: WIRING→OPERATION→UPDATE_HANDBOOK→…
func depoProcOrderText(sep string) string {
var parts []string
for _, p := range depoProcInstallOrder {
parts = append(parts, strings.TrimPrefix(strings.TrimPrefix(p.Name, "FTV_M2M_PROCESS_"), "FTV_M2M_"))
}
return strings.Join(parts, sep)
}
// depoProcList — порядок процедур для шаблона (редактор текстов).
func depoProcList() []struct{ Name, File string } { return depoProcInstallOrder }
@@ -86,7 +98,7 @@ func depoProcsCombined(f FancyMSSQLSettings) string {
func depoProcsScriptFor(f FancyMSSQLSettings, db, login string) string {
var b strings.Builder
b.WriteString("/* Bridge&Join: процедуры обработки bj2depo для базы DEPO.\n")
b.WriteString(" Порядок WIRING -> OPERATION -> EVENTS -> CREATE -> JOB. Запуск под sysadmin в SSMS.\n")
b.WriteString(" Порядок " + depoProcOrderText(" -> ") + ". Запуск под sysadmin в SSMS.\n")
b.WriteString(" CREATE OR ALTER — повторный запуск безопасен (данные не меняются). */\n")
fmt.Fprintf(&b, "USE %s;\nGO\n\n", quoteIdent(db))
for _, p := range depoProcInstallOrder {
@@ -176,9 +188,9 @@ func depoProcsPreflight(ctx context.Context, f FancyMSSQLSettings, adminUser, ad
var b strings.Builder
fmt.Fprintf(&b, "Сервер %s, база %s, логин %s.\n", f.Server, f.DepoDB(), conn.User)
if len(missing) == 0 {
b.WriteString("Процедуры: все 5 уже установлены (будут обновлены CREATE OR ALTER).\n")
fmt.Fprintf(&b, "Процедуры: все %d уже установлены (будут обновлены CREATE OR ALTER).\n", len(depoProcInstallOrder))
} else {
fmt.Fprintf(&b, "Процедуры: нет %d из 5 (%s).\n", len(missing), strings.Join(missing, ", "))
fmt.Fprintf(&b, "Процедуры: нет %d из %d (%s).\n", len(missing), len(depoProcInstallOrder), strings.Join(missing, ", "))
}
if canApply {
b.WriteString("Право создавать процедуры: есть.\n")
@@ -195,7 +207,7 @@ func depoProcsPreflight(ctx context.Context, f FancyMSSQLSettings, adminUser, ad
} else {
fmt.Fprintf(&b, "Пользователь %s (для EXECUTE AS в процедурах): НЕТ — процедуры FTV_M2M_PROCESS_* используют EXECUTE AS USER='%s' и не создадутся без него. Создайте этого пользователя в базе (как в рабочей базе Fancy) или замените имя в «Тексты процедур».\n", execAs, execAs)
}
b.WriteString("Будет выполнено: CREATE OR ALTER 5 процедур (WIRING→OPERATION→EVENTS→CREATE→JOB) + GRANT EXECUTE на FTV_M2M_JOB.")
fmt.Fprintf(&b, "Будет выполнено: CREATE OR ALTER %d процедур (%s) + GRANT EXECUTE логину bj.", len(depoProcInstallOrder), depoProcOrderText("→"))
return b.String(), canApply, nil
}