feat: 增强下游重投与签名质量检测

This commit is contained in:
hectorzhao
2026-08-12 17:05:53 +08:00
parent 1d8d6701a6
commit 4994841709
23 changed files with 960 additions and 67 deletions
@@ -112,6 +112,13 @@ describe('SignatureRetirementService dimensions', () => {
page: 2,
pageSize: 10,
});
const query = prisma.$queryRaw.mock.calls[0]?.[0] as { strings?: readonly string[] };
const sql = query.strings?.join('?') ?? '';
expect(sql).toContain("SUBSTRING(message.content FROM '^【[^【】]+】')");
expect(sql).toContain('message."signatureId" IS NULL');
expect(sql).toContain('FROM "SmsSignature" signature');
expect(sql).toContain('signature."applicationId" = extracted.application_id');
expect(sql).not.toContain('FROM "ChannelSignatureReportTask" report');
});
it('returns a filtered historical message page with application metadata', async () => {
@@ -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",