feat: 增强下游重投与签名质量检测
This commit is contained in:
@@ -270,49 +270,44 @@ export class SignatureRetirementService implements OnModuleInit, OnModuleDestroy
|
||||
messageCount: number;
|
||||
rowCount: number;
|
||||
}>>(Prisma.sql`
|
||||
WITH unreported AS (
|
||||
WITH extracted AS (
|
||||
SELECT
|
||||
signature.id AS signature_id,
|
||||
signature.name AS signature_name,
|
||||
message."tenantId" AS tenant_id,
|
||||
message."applicationId" AS application_id,
|
||||
SUBSTRING(message.content FROM '^【[^【】]+】') AS signature_name
|
||||
FROM "SmsMessageRecord" message
|
||||
WHERE message."queuedAt" >= ${shanghaiStart(date)}
|
||||
AND message."queuedAt" < ${shanghaiStart(addDays(date, 1))}
|
||||
AND message."signatureId" IS NULL
|
||||
), unreported AS (
|
||||
SELECT
|
||||
CONCAT('unregistered:', MD5(extracted.tenant_id || ':' || extracted.application_id || ':' || extracted.signature_name)) AS signature_id,
|
||||
extracted.signature_name,
|
||||
tenant.id AS tenant_id,
|
||||
tenant.name AS tenant_name,
|
||||
application.id AS application_id,
|
||||
application.name AS application_name,
|
||||
COUNT(*)::integer AS message_count
|
||||
FROM "SmsMessageRecord" message
|
||||
JOIN "SmsSignature" signature ON signature.id = message."signatureId"
|
||||
JOIN "Tenant" tenant ON tenant.id = signature."tenantId"
|
||||
LEFT JOIN "SmsApplication" application ON application.id = message."applicationId"
|
||||
WHERE message."queuedAt" >= ${shanghaiStart(date)}
|
||||
AND message."queuedAt" < ${shanghaiStart(addDays(date, 1))}
|
||||
FROM extracted
|
||||
JOIN "Tenant" tenant ON tenant.id = extracted.tenant_id
|
||||
JOIN "SmsApplication" application ON application.id = extracted.application_id
|
||||
WHERE extracted.signature_name IS NOT NULL
|
||||
-- 未报备签名指系统签名库中不存在,而不是已有签名缺少某个通道的运营商报备。
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM "ChannelSignatureReportTask" report
|
||||
JOIN "SmsChannel" channel ON channel.id = report."channelId"
|
||||
WHERE report."signatureId" = message."signatureId"
|
||||
AND report."reportType" = 'signature'
|
||||
AND report.status = 'approved'
|
||||
AND channel.status <> 'deleted'
|
||||
AND (
|
||||
report."approvalScope" = 'legacy_channel'
|
||||
OR (
|
||||
report."approvalScope" = 'carrier_specific'
|
||||
AND report.carrier = CASE
|
||||
WHEN LOWER(COALESCE(message.carrier, '')) IN ('mobile', 'cmcc', '移动', '中国移动') THEN 'mobile'
|
||||
WHEN LOWER(COALESCE(message.carrier, '')) IN ('unicom', 'cucc', '联通', '中国联通') THEN 'unicom'
|
||||
WHEN LOWER(COALESCE(message.carrier, '')) IN ('telecom', 'ctcc', '电信', '中国电信') THEN 'telecom'
|
||||
ELSE '__unknown__'
|
||||
END
|
||||
)
|
||||
)
|
||||
FROM "SmsSignature" signature
|
||||
WHERE signature."tenantId" = extracted.tenant_id
|
||||
AND signature."applicationId" = extracted.application_id
|
||||
AND signature.name = extracted.signature_name
|
||||
AND signature."auditStatus" <> 'deleted'
|
||||
)
|
||||
AND (
|
||||
${keyword}::text IS NULL
|
||||
OR signature.name ILIKE ${keywordPattern}
|
||||
OR extracted.signature_name ILIKE ${keywordPattern}
|
||||
OR tenant.name ILIKE ${keywordPattern}
|
||||
OR application.name ILIKE ${keywordPattern}
|
||||
)
|
||||
GROUP BY signature.id, signature.name, tenant.id, tenant.name, application.id, application.name
|
||||
GROUP BY extracted.signature_name, tenant.id, tenant.name, application.id, application.name
|
||||
)
|
||||
SELECT
|
||||
signature_id AS "signatureId",
|
||||
|
||||
Reference in New Issue
Block a user