Загрузка данных
USE [replTransVas];
GO
SET NOCOUNT ON;
SELECT TOP (200)
src.kod AS kodReport,
src.kodMember,
src.srvsDT,
CASE WHEN r.kod IS NULL THEN 0 ELSE 1 END AS reportInReplica,
src.tipReport AS sourceTipReport,
r.tipReport AS replicaTipReport,
src.formatCon2 AS sourceFormat,
r.formatCon2 AS replicaFormat,
src.listenerCntInteger AS sourceCount,
r.listenerCntInteger AS replicaCount,
r.a1,
m.kodMerop,
m.beInOn AS memberBeInOn,
m.timeInMerop,
p.timeInMerop AS projectThreshold,
a.clsMerop,
a.nmMerop,
w.kodProject AS eventProject,
a.kodWave,
mw.maxWave,
c.certificateRows,
c.formReceived,
c.hasCertificate,
j.mailRows,
j.fallbackApplied,
j.internalSent,
CASE WHEN EXISTS (
SELECT 1
FROM dbo.K_tbl_Stasik AS st
WHERE st.MEMBER_kod = src.kodMember
) THEN 1 ELSE 0 END AS memberInStasik,
CASE
WHEN r.kod IS NULL
THEN N'Отчёт отсутствует в replTransVas'
WHEN m.kod IS NULL
THEN N'Нет связанного участника в replTransVas'
WHEN a.kod IS NULL
THEN N'Нет мероприятия'
WHEN w.kod IS NULL
THEN N'Нет волны'
WHEN mw.maxWave IS NULL OR a.kodWave <> mw.maxWave
THEN N'Не последняя волна проекта'
WHEN NOT EXISTS (
SELECT 1 FROM dbo.trn_project AS tp
WHERE tp.kod = w.kodProject
)
THEN N'Нет проекта в trn_project'
WHEN ISNULL(a.clsMerop, 0) <> 1
THEN N'Мероприятие не закрыто'
WHEN a.nmMerop IS NULL OR a.nmMerop LIKE N'%тест%'
THEN N'Название мероприятия не проходит фильтр'
WHEN m.beInOn IS NULL OR m.beInOn NOT IN (0, 1)
THEN N'Участник не проходит beInOn'
WHEN m.timeInMerop IS NULL
OR p.timeInMerop IS NULL
OR m.timeInMerop <= p.timeInMerop
THEN N'Не выполнен строгий порог времени'
WHEN EXISTS (
SELECT 1
FROM dbo.sb_reports AS newer
WHERE newer.kodMember = r.kodMember
AND newer.kod > r.kod
AND (
newer.emZayavka = r.emZayavka
OR (newer.emZayavka IS NULL AND r.emZayavka IS NULL)
)
AND (
newer.a1 = r.a1
OR (newer.a1 IS NULL AND r.a1 IS NULL)
)
)
THEN N'Есть более новый отчёт в той же группе'
WHEN (
r.a1 LIKE N'otzyvMTS[_]%'
OR c.certificateRows > 0
OR j.mailRows > 0
)
THEN
CASE
WHEN m.beInOn <> 1
THEN N'МТС: beInOn не равен 1'
WHEN NULLIF(LTRIM(RTRIM(r.formatCon2)), N'') IS NULL
THEN N'МТС: пустой formatCon2'
WHEN ISNULL(r.listenerCntInteger, 0) <= 0
THEN N'МТС: количество участников не положительное'
WHEN ISNULL(c.formReceived, 0) <> 1
AND ISNULL(j.fallbackApplied, 0) <> 1
THEN N'МТС: нет подтверждения формы'
WHEN ISNULL(c.hasCertificate, 0) <> 1
AND ISNULL(j.internalSent, 0) <> 1
THEN N'МТС: нет подтверждения сертификата'
ELSE N'Основные фильтры пройдены: проверить запуск и Тильда-ветку'
END
WHEN m.beInOn = 0 AND r.otzyv IS NULL
THEN N'beInOn=0 и отсутствует отзыв'
ELSE N'Основные фильтры пройдены: проверить запуск и Тильда-ветку'
END AS firstBlockingReason
FROM myNewVasya.dbo.sb_reports AS src
LEFT JOIN dbo.sb_reports AS r
ON r.kod = src.kod
LEFT JOIN dbo.dat_members AS m
ON m.kod = r.kodMember
LEFT JOIN dbo.dat_activity AS a
ON a.kod = m.kodMerop
LEFT JOIN dbo.spr_wave AS w
ON w.kod = a.kodWave
LEFT JOIN dbo.spr_project AS p
ON p.kod = w.kodProject
LEFT JOIN dbo.srvs_maxWave AS mw
ON mw.kodProject = w.kodProject
OUTER APPLY (
SELECT
COUNT(*) AS certificateRows,
MAX(CONVERT(int, ct.formReceived)) AS formReceived,
MAX(CASE
WHEN NULLIF(LTRIM(RTRIM(ct.mtsCertNumber)), N'') IS NOT NULL
THEN 1 ELSE 0
END) AS hasCertificate
FROM myNewVasya.dbo.dat_mts_certificates AS ct
WHERE ct.kodReport = r.kod
AND ct.kodMember = r.kodMember
) AS c
OUTER APPLY (
SELECT
COUNT(*) AS mailRows,
MAX(CASE
WHEN ml.kind = N'fallback_certificate'
AND ml.state IN (N'QUEUED', N'SENT')
THEN 1 ELSE 0
END) AS fallbackApplied,
MAX(CASE
WHEN ml.kind IN (N'fallback_certificate', N'correction')
AND ml.state IN (N'QUEUED', N'SENT')
AND s.fromEmail = N'DashaMail'
AND s.sendEM = 1
AND s.dtSend IS NOT NULL
AND (
UPPER(LTRIM(s.resultSend)) LIKE N'OK%'
OR UPPER(s.resultSend)
LIKE N'%' + CHAR(13) + CHAR(10) + N'OK%'
OR UPPER(s.resultSend)
LIKE N'%' + CHAR(10) + N'OK%'
)
THEN 1 ELSE 0
END) AS internalSent
FROM myNewVasya.dbo.mts_daemon_mail AS ml
LEFT JOIN myNewVasya.dbo.sb_send AS s
ON s.kod = ml.sendKod
AND s.kodReport = ml.kodReport
AND s.kodMember = ml.kodMember
WHERE ml.kodReport = r.kod
AND ml.kodMember = r.kodMember
) AS j
WHERE src.kodProject = 8
AND NOT EXISTS (
SELECT 1
FROM dbo.K_tbl_Stasik AS st
WHERE st.kodReport = src.kod
)
ORDER BY src.kod DESC;
-- Проверяем, доходил ли sp_start до обновления Стасика.
SELECT TOP (100)
datetime_sp,
note
FROM dbo.K_log_sp_start
ORDER BY datetime_sp DESC;