feat: complete signature and drainage reporting workflows

This commit is contained in:
hectorzhao
2026-07-13 17:40:37 +08:00
parent 567e4da0c9
commit 551b99cbcd
21 changed files with 452 additions and 71 deletions
@@ -0,0 +1,9 @@
ALTER TABLE "ChannelSignatureReportTask"
ADD COLUMN "reportType" TEXT NOT NULL DEFAULT 'signature',
ADD COLUMN "drainageItemId" TEXT;
CREATE INDEX "ChannelSignatureReportTask_signatureId_drainageItemId_channelId_idx"
ON "ChannelSignatureReportTask"("signatureId", "drainageItemId", "channelId");
CREATE INDEX "ChannelSignatureReportTask_reportType_status_idx"
ON "ChannelSignatureReportTask"("reportType", "status");
@@ -0,0 +1,45 @@
INSERT INTO "ChannelSignatureReportTask" (
"id", "tenantId", "signatureId", "channelId", "reportType", "drainageItemId", "status", "createdAt", "updatedAt"
)
SELECT
'drainage_' || md5(random()::text || clock_timestamp()::text || material."id"),
signature."tenantId",
material."signatureId",
material."channelId",
'drainage',
material."drainageItemId",
'pending',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP
FROM (
SELECT DISTINCT ON ("signatureId", "drainageItemId", "channelId")
"id", "signatureId", "drainageItemId", "channelId"
FROM "DrainageReportMaterial"
ORDER BY "signatureId", "drainageItemId", "channelId", "createdAt"
) material
JOIN "SmsSignature" signature ON signature."id" = material."signatureId"
WHERE NOT EXISTS (
SELECT 1
FROM "ChannelSignatureReportTask" task
WHERE task."signatureId" = material."signatureId"
AND task."channelId" = material."channelId"
AND task."reportType" = 'drainage'
AND task."drainageItemId" = material."drainageItemId"
);
INSERT INTO "ChannelSignatureReportRecord" (
"id", "taskId", "channelId", "action", "statusAfter", "reason", "createdAt"
)
SELECT
'drainage_record_' || md5(random()::text || clock_timestamp()::text || task."id"),
task."id",
task."channelId",
'migration_backfill',
task."status",
'从已有引流报备材料回填任务',
CURRENT_TIMESTAMP
FROM "ChannelSignatureReportTask" task
WHERE task."reportType" = 'drainage'
AND NOT EXISTS (
SELECT 1 FROM "ChannelSignatureReportRecord" record WHERE record."taskId" = task."id"
);
@@ -0,0 +1,7 @@
CREATE UNIQUE INDEX "ChannelSignatureReportTask_target_key"
ON "ChannelSignatureReportTask"(
"signatureId",
"channelId",
"reportType",
COALESCE("drainageItemId", '')
);
+4
View File
@@ -720,6 +720,8 @@ model ChannelSignatureReportTask {
tenantId String
signatureId String
channelId String
reportType String @default("signature")
drainageItemId String?
status String @default("pending")
reason String?
createdById String?
@@ -734,6 +736,8 @@ model ChannelSignatureReportTask {
@@index([tenantId, status])
@@index([signatureId, channelId])
@@index([signatureId, drainageItemId, channelId])
@@index([reportType, status])
}
model ChannelSignatureReportRecord {