a0ffbfa721
На 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
30 lines
1.5 KiB
Go
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`
|