Тест DEPO: SEC_CODE = код бумаги в НРД (кодировщик НДЦ), как в настоящем пакете; предупреждение, если кода нет
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -43,6 +43,7 @@ var depoTestOutcomes = []struct{ Code, Title string }{
|
|||||||
|
|
||||||
type DepoTestLine struct {
|
type DepoTestLine struct {
|
||||||
Ref, ISIN, Qty, Outcome, Code string
|
Ref, ISIN, Qty, Outcome, Code string
|
||||||
|
Code2 string // код бумаги в НРД, ушедший в SEC_CODE
|
||||||
State, DOL, Comment string // результат джобы по строке FTV_M2M_LINES
|
State, DOL, Comment string // результат джобы по строке FTV_M2M_LINES
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,8 +158,17 @@ func depoTestExec(rc *RuntimeConfig, run *DepoTestRun, pace time.Duration, stopO
|
|||||||
// 1. шапка и строки
|
// 1. шапка и строки
|
||||||
place := rc.Snapshot().NSD.SectionID
|
place := rc.Snapshot().NSD.SectionID
|
||||||
var lines []depoLine
|
var lines []depoLine
|
||||||
for _, l := range run.Lines {
|
for i, l := range run.Lines {
|
||||||
lines = append(lines, depoLine{Ref: l.Ref, ISIN: l.ISIN, Code: l.ISIN, Amount: parseQty(l.Qty), Place: place})
|
// SEC_CODE — код бумаги в НРД (как в настоящем пакете M2M): по ISIN+коду джоба находит бумагу в DEPO
|
||||||
|
code := depoNSDCode(db, l.ISIN)
|
||||||
|
if code == "" {
|
||||||
|
code = l.ISIN
|
||||||
|
globalDepoTests.update(id, func(r *DepoTestRun) {
|
||||||
|
r.Steps = append(r.Steps, DepoTestStep{At: time.Now(), Title: "Бумага " + l.ISIN + ": кода НРД (кодировщик «НДЦ») в DEPO нет — SEC_CODE = ISIN, джоба может не найти бумагу", State: "WARN"})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
globalDepoTests.update(id, func(r *DepoTestRun) { r.Lines[i].Code2 = code })
|
||||||
|
lines = append(lines, depoLine{Ref: l.Ref, ISIN: l.ISIN, Code: code, Amount: parseQty(l.Qty), Place: place})
|
||||||
}
|
}
|
||||||
dir := "IN"
|
dir := "IN"
|
||||||
if run.Direction == "out" {
|
if run.Direction == "out" {
|
||||||
@@ -251,6 +261,15 @@ func depoTestExec(rc *RuntimeConfig, run *DepoTestRun, pace time.Duration, stopO
|
|||||||
depoTestFinish(db, id, run.GUID)
|
depoTestFinish(db, id, run.GUID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// depoNSDCode — код бумаги в НРД из DEPO (кодировщик «НДЦ»).
|
||||||
|
func depoNSDCode(db *sql.DB, isin string) string {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
var c string
|
||||||
|
_ = db.QueryRowContext(ctx, fsql.DT04, sql.Named("i", strings.ToUpper(strings.TrimSpace(isin)))).Scan(&c)
|
||||||
|
return strings.TrimSpace(c)
|
||||||
|
}
|
||||||
|
|
||||||
func depoTestFinish(db *sql.DB, id, guid string) {
|
func depoTestFinish(db *sql.DB, id, guid string) {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|||||||
@@ -9,3 +9,7 @@ var DT02 = `SELECT TOP 1 ISNULL(STATE,''), ISNULL(COMMENT,'') FROM dbo.FTV_M2M_E
|
|||||||
|
|
||||||
var DT03 = `SELECT ISNULL(REFERENCE,''), ISNULL(ISIN,''), ISNULL(STATE,''), ISNULL(CAST(DOL AS varchar(32)),''), ISNULL(COMMENT,'')
|
var DT03 = `SELECT ISNULL(REFERENCE,''), ISNULL(ISIN,''), ISNULL(STATE,''), ISNULL(CAST(DOL AS varchar(32)),''), ISNULL(COMMENT,'')
|
||||||
FROM dbo.FTV_M2M_LINES WHERE GUID=@g ORDER BY ID`
|
FROM dbo.FTV_M2M_LINES WHERE GUID=@g ORDER BY ID`
|
||||||
|
|
||||||
|
// DT04 — код бумаги в НРД (кодировщик «НДЦ»), как его ищет джоба bj2depo по ISIN + SEC_CODE.
|
||||||
|
var DT04 = `SELECT TOP 1 ISNULL(C.CODE,'') FROM OD_VALUES V JOIN OD_VALUE_CODERS C ON C.SHARE = V.ID
|
||||||
|
JOIN OD_FACES F ON F.SELF_ID = C.CODER AND F.LAST_FLAG = 1 WHERE V.ISIN = @i AND F.MNEM = N'НДЦ' ORDER BY V.ID`
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
.st{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:700}
|
.st{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:700}
|
||||||
.st.SUCCESS{background:var(--ok-weak,#e6f4ea);color:var(--ok,#12813f)}
|
.st.SUCCESS{background:var(--ok-weak,#e6f4ea);color:var(--ok,#12813f)}
|
||||||
.st.ERROR{background:var(--err-weak,#fbe9e7);color:var(--err,#b3261e)}
|
.st.ERROR{background:var(--err-weak,#fbe9e7);color:var(--err,#b3261e)}
|
||||||
.st.TODO,.st.running{background:var(--warn-weak,#fff4e0);color:var(--warn,#9a6b12)}
|
.st.TODO,.st.WARN,.st.running{background:var(--warn-weak,#fff4e0);color:var(--warn,#9a6b12)}
|
||||||
.st.done{background:var(--ok-weak,#e6f4ea);color:var(--ok,#12813f)}
|
.st.done{background:var(--ok-weak,#e6f4ea);color:var(--ok,#12813f)}
|
||||||
.st.error{background:var(--err-weak,#fbe9e7);color:var(--err,#b3261e)}
|
.st.error{background:var(--err-weak,#fbe9e7);color:var(--err,#b3261e)}
|
||||||
table.dt{width:100%;border-collapse:collapse;font-size:13px}
|
table.dt{width:100%;border-collapse:collapse;font-size:13px}
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
{{if eq .Direction "out"}}↗ Списание{{else}}↘ Зачисление{{end}} · {{.Client}} · {{.CPName}} ({{.CP}})</h2>
|
{{if eq .Direction "out"}}↗ Списание{{else}}↘ Зачисление{{end}} · {{.Client}} · {{.CPName}} ({{.CP}})</h2>
|
||||||
<p class="muted" style="font-size:12px;margin-top:0">Прогон {{.ID}} · {{.Created.Format "02.01.2006 15:04:05"}} · GUID <code>{{.GUID}}</code> · документ DEPO {{if .Doc}}№ {{.Doc}}{{else}}—{{end}} · шапка <span class="st {{.HeaderState}}">{{.HeaderState}}</span>{{if .Errors}} · <span class="st ERROR">ошибок: {{.Errors}}</span>{{end}}</p>
|
<p class="muted" style="font-size:12px;margin-top:0">Прогон {{.ID}} · {{.Created.Format "02.01.2006 15:04:05"}} · GUID <code>{{.GUID}}</code> · документ DEPO {{if .Doc}}№ {{.Doc}}{{else}}—{{end}} · шапка <span class="st {{.HeaderState}}">{{.HeaderState}}</span>{{if .Errors}} · <span class="st ERROR">ошибок: {{.Errors}}</span>{{end}}</p>
|
||||||
<table class="dt"><tr><th>Бумага</th><th>Кол-во</th><th>Сценарий</th><th>Строка DEPO</th></tr>
|
<table class="dt"><tr><th>Бумага</th><th>Кол-во</th><th>Сценарий</th><th>Строка DEPO</th></tr>
|
||||||
{{range .Lines}}<tr><td>{{.ISIN}}<br><span class="emu">{{.Ref}}</span></td><td>{{.Qty}}</td><td>{{.Outcome}}{{if .Code}} {{.Code}}{{end}}</td><td>{{if .State}}<span class="st {{.State}}">{{.State}}</span> {{if .DOL}}№ {{.DOL}}{{end}} {{.Comment}}{{else}}—{{end}}</td></tr>{{end}}
|
{{range .Lines}}<tr><td>{{.ISIN}}{{if .Code2}} · {{.Code2}}{{end}}<br><span class="emu">{{.Ref}}</span></td><td>{{.Qty}}</td><td>{{.Outcome}}{{if .Code}} {{.Code}}{{end}}</td><td>{{if .State}}<span class="st {{.State}}">{{.State}}</span> {{if .DOL}}№ {{.DOL}}{{end}} {{.Comment}}{{else}}—{{end}}</td></tr>{{end}}
|
||||||
</table>
|
</table>
|
||||||
<details {{if eq .Status "running"}}open{{end}} style="margin-top:8px"><summary>Шаги ({{len .Steps}})</summary>
|
<details {{if eq .Status "running"}}open{{end}} style="margin-top:8px"><summary>Шаги ({{len .Steps}})</summary>
|
||||||
<table class="dt"><tr><th>Время</th><th>Шаг</th><th>Событие / строка</th><th>Джоба DEPO</th></tr>
|
<table class="dt"><tr><th>Время</th><th>Шаг</th><th>Событие / строка</th><th>Джоба DEPO</th></tr>
|
||||||
|
|||||||
Reference in New Issue
Block a user