Initial commit: 风影 OA 全栈源码(API/Web/Flutter/IM)
含 Phase 1.1 IM seq 排序、断线重连、多端已读同步与微信式语音转文字 UI。 排除 node_modules、构建产物、安装包与 .env 密钥。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
\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;
|
||||
Reference in New Issue
Block a user