Files
Bridge-and-Join-s/internal/lkgateway/fsql/depodb.go
T
fontvielle a0ffbfa721 ЛК: портфель ДЕПО «для всех клиентов» — одно соединение и один запрос к DEPO, свой цикл раз в 5 мин; итог в настройках свёрнут
На 9 после включения «для всех» (23.10.2026) каждый проход открывал по два
соединения с DEPO на каждый из 1158 договоров — около 50 входов в MSSQL в
секунду без перерыва, а проход шёл в цикле опроса заявок ЛК и задерживал его.

- Остатки всех клиентов — одним запросом (fsql.Dp03), одно соединение с DEPO
  на проход; по списку — запрос по клиенту на том же соединении. На боевой
  DEPO: общий запрос 127 мс, совпадает с запросом по клиенту (58 договоров).
- Свой цикл lkPortfolioLoop (здоровье «lk-portfolio»): по списку — каждые
  10 с, для всех клиентов — раз в 5 мин. Опрос заявок ЛК больше не ждёт.
- Проходы по очереди: фоновый и «Заполнить сейчас» не шлют один портфель
  дважды; принудительный проход пропускает отправленные за последнюю минуту.
- ЛК не отвечает — проход прерывается; одна и та же ошибка отправки не
  повторяется в журнале каждый проход. Ошибка чтения DEPO снимается, когда
  портфель снова читается без изменений.
- Настройки: итог (договоров, отправлено, нечего отправлять, с ошибкой),
  последние 5 отправок; договоры с ошибкой и все договоры — под раскрытием.
  «Отправлять нечего» — не ошибка (поле Nothing).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-23 14:45:16 +03:00

30 lines
1.5 KiB
Go

package fsql
var Dp01 = `SELECT p.PORT_NUM, ISNULL(c.NUMBER,''), ISNULL(v.ISIN,''), ISNULL(v.NAME,''),
CAST(rst.K AS float), ISNULL(rst.BLOCK_REASON,''), ISNULL(rst.BAL_ACC,0)
FROM OD_RESTS rst
JOIN OD_CLIENTS c ON c.ID = rst.REG_1
JOIN OD_CLIENTS_PORTS p ON p.CLIENT = c.ID
JOIN OD_VALUES v ON v.ID = rst.VALUE_ID AND v.V_TYPE = 2
WHERE (p.PORT_NUM = @p1 OR p.PORT_NUM LIKE @p2)
AND CAST(rst.K AS float) <> 0
ORDER BY v.NAME`
var Dp02 = `SELECT TOP (%d) p.PORT_NUM, COUNT(DISTINCT rst.VALUE_ID)
FROM OD_CLIENTS_PORTS p
JOIN OD_CLIENTS c ON c.ID = p.CLIENT
JOIN OD_RESTS rst ON rst.REG_1 = c.ID
JOIN OD_VALUES v ON v.ID = rst.VALUE_ID AND v.V_TYPE = 2
WHERE CAST(rst.K AS float) <> 0 AND (@p1 = '' OR p.PORT_NUM LIKE @p2)
GROUP BY p.PORT_NUM ORDER BY p.PORT_NUM`
// Dp03 — Dp01 для всех портфелей сразу (заполнение портфеля ДЕПО в ЛК «для всех клиентов»).
var Dp03 = `SELECT ISNULL(p.PORT_NUM,''), ISNULL(c.NUMBER,''), ISNULL(v.ISIN,''), ISNULL(v.NAME,''),
CAST(rst.K AS float), ISNULL(rst.BLOCK_REASON,''), ISNULL(rst.BAL_ACC,0)
FROM OD_RESTS rst
JOIN OD_CLIENTS c ON c.ID = rst.REG_1
JOIN OD_CLIENTS_PORTS p ON p.CLIENT = c.ID
JOIN OD_VALUES v ON v.ID = rst.VALUE_ID AND v.V_TYPE = 2
WHERE CAST(rst.K AS float) <> 0
ORDER BY p.PORT_NUM, v.NAME, c.NUMBER, v.ISIN`