76f266645d
含 Phase 1.1 IM seq 排序、断线重连、多端已读同步与微信式语音转文字 UI。 排除 node_modules、构建产物、安装包与 .env 密钥。 Co-authored-by: Cursor <cursoragent@cursor.com>
112 lines
3.4 KiB
PL/PgSQL
112 lines
3.4 KiB
PL/PgSQL
\set ON_ERROR_STOP on
|
|
|
|
BEGIN;
|
|
|
|
CREATE TEMP TABLE expense_dedup_map (
|
|
old_id text PRIMARY KEY,
|
|
new_id text NOT NULL UNIQUE
|
|
) ON COMMIT DROP;
|
|
|
|
INSERT INTO expense_dedup_map (old_id, new_id)
|
|
SELECT old_claim.id, formal_claim.id
|
|
FROM "ExpenseClaim" old_claim
|
|
JOIN "ExpenseClaim" formal_claim
|
|
ON formal_claim."claimNo" ~ '^BX-[0-9]{8}-[0-9]{3}$'
|
|
AND formal_claim."applicantId" = old_claim."applicantId"
|
|
AND formal_claim.amount = old_claim.amount
|
|
AND formal_claim."projectId" IS NOT DISTINCT FROM old_claim."projectId"
|
|
AND formal_claim."bidCaseId" IS NOT DISTINCT FROM old_claim."bidCaseId"
|
|
WHERE old_claim."createdAt" >= TIMESTAMP '2026-08-29 11:00:30'
|
|
AND old_claim."createdAt" < TIMESTAMP '2026-08-29 11:00:31';
|
|
|
|
INSERT INTO expense_dedup_map (old_id, new_id)
|
|
SELECT old_claim.id, formal_claim.id
|
|
FROM "ExpenseClaim" old_claim
|
|
JOIN "ExpenseClaim" formal_claim
|
|
ON formal_claim."claimNo" = CASE old_claim."claimNo"
|
|
WHEN 'BX-2026-00043' THEN 'BX-20260617-004'
|
|
WHEN 'BX-2026-00044' THEN 'BX-20260617-005'
|
|
END
|
|
WHERE old_claim."claimNo" IN ('BX-2026-00043', 'BX-2026-00044');
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF (SELECT count(*) FROM expense_dedup_map) <> 83 THEN
|
|
RAISE EXCEPTION 'Expense dedup mapping is incomplete: expected 83, got %',
|
|
(SELECT count(*) FROM expense_dedup_map);
|
|
END IF;
|
|
END $$;
|
|
|
|
-- FileAsset is intentionally reassigned before duplicate claims are removed.
|
|
UPDATE "FileAsset" file
|
|
SET "bizId" = mapping.new_id
|
|
FROM expense_dedup_map mapping
|
|
WHERE file."bizType" = 'EXPENSE'
|
|
AND file."bizId" = mapping.old_id;
|
|
|
|
DELETE FROM "ApprovalTask" task
|
|
USING expense_dedup_map mapping
|
|
WHERE task."bizId" = mapping.old_id;
|
|
|
|
DELETE FROM "TodoTask" task
|
|
USING expense_dedup_map mapping
|
|
WHERE task."bizId" = mapping.old_id;
|
|
|
|
DELETE FROM "ExpenseClaim" claim
|
|
USING expense_dedup_map mapping
|
|
WHERE claim.id = mapping.old_id;
|
|
|
|
CREATE TEMP TABLE loan_dedup_map (
|
|
old_id text PRIMARY KEY,
|
|
new_id text NOT NULL UNIQUE,
|
|
new_status text NOT NULL
|
|
) ON COMMIT DROP;
|
|
|
|
INSERT INTO loan_dedup_map (old_id, new_id, new_status)
|
|
SELECT old_loan.id, formal_loan.id, formal_loan.status
|
|
FROM "LoanRecord" old_loan
|
|
JOIN "LoanRecord" formal_loan
|
|
ON formal_loan."loanNo" ~ '^JZ-[0-9]{8}-[0-9]{3}$'
|
|
AND formal_loan."applicantId" = old_loan."applicantId"
|
|
AND formal_loan.amount = old_loan.amount
|
|
AND formal_loan."projectId" IS NOT DISTINCT FROM old_loan."projectId"
|
|
AND formal_loan.purpose = old_loan.purpose
|
|
WHERE old_loan."loanNo" ~ '^JK-2026-[0-9]{5}$'
|
|
AND old_loan."createdAt" >= TIMESTAMP '2026-08-29 11:00:30'
|
|
AND old_loan."createdAt" < TIMESTAMP '2026-08-29 11:00:31';
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF (SELECT count(*) FROM loan_dedup_map) <> 9 THEN
|
|
RAISE EXCEPTION 'Loan dedup mapping is incomplete: expected 9, got %',
|
|
(SELECT count(*) FROM loan_dedup_map);
|
|
END IF;
|
|
END $$;
|
|
|
|
-- Keep approval tasks only when the surviving formal loan is still pending.
|
|
UPDATE "ApprovalTask" task
|
|
SET "bizId" = mapping.new_id
|
|
FROM loan_dedup_map mapping
|
|
WHERE task."bizId" = mapping.old_id
|
|
AND mapping.new_status = 'PENDING';
|
|
|
|
DELETE FROM "ApprovalTask" task
|
|
USING loan_dedup_map mapping
|
|
WHERE task."bizId" = mapping.old_id;
|
|
|
|
DELETE FROM "TodoTask" task
|
|
USING loan_dedup_map mapping
|
|
WHERE task."bizId" = mapping.old_id;
|
|
|
|
UPDATE "FileAsset" file
|
|
SET "bizId" = mapping.new_id
|
|
FROM loan_dedup_map mapping
|
|
WHERE file."bizType" = 'LOAN'
|
|
AND file."bizId" = mapping.old_id;
|
|
|
|
DELETE FROM "LoanRecord" loan
|
|
USING loan_dedup_map mapping
|
|
WHERE loan.id = mapping.old_id;
|
|
|
|
COMMIT;
|