Files
Public/apps/api/prisma/production-restore-missing-expense-20260901.sql
T
daiyongkang 76f266645d Initial commit: 风影 OA 全栈源码(API/Web/Flutter/IM)
含 Phase 1.1 IM seq 排序、断线重连、多端已读同步与微信式语音转文字 UI。
排除 node_modules、构建产物、安装包与 .env 密钥。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 10:04:03 +00:00

62 lines
1.7 KiB
PL/PgSQL

\set ON_ERROR_STOP on
BEGIN;
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM "ExpenseClaim"
WHERE "tenantId" = '1' AND "claimNo" = 'BX-20260809-002'
) THEN
RAISE EXCEPTION 'Expense BX-20260809-002 already exists';
END IF;
END $$;
WITH restored AS (
INSERT INTO "ExpenseClaim" (
id, "tenantId", "claimNo", "applicantId", "costType",
"budgetCategory", "projectId", "expenseCategory", purpose,
amount, status, "submittedAt", "createdAt"
)
SELECT
gen_random_uuid()::text,
'1',
'BX-20260809-002',
applicant.id,
'PROJECT',
'TRAVEL',
project.id,
'办公',
'日常办公(江苏风影)',
689.08,
'DRAFT',
TIMESTAMP '2026-08-09 21:39:30',
TIMESTAMP '2026-08-09 21:39:30'
FROM "User" applicant
CROSS JOIN "Project" project
WHERE applicant."displayName" = '戴永康'
AND project."projectNo" = 'XM-20260609-002'
RETURNING id
)
INSERT INTO "ExpenseLine" (
id, "tenantId", "claimId", kind, amount, remark, "sortNo", "createdAt"
)
SELECT gen_random_uuid()::text, '1', restored.id, line.kind, line.amount,
line.remark, line.sort_no, TIMESTAMP '2026-08-09 21:39:30'
FROM restored
CROSS JOIN (
VALUES
('OFFICE', 122.65::numeric, 'OA平台短信通知费用', 1),
('OFFICE', 566.43::numeric, 'OA云服务器及流量费用', 2)
) AS line(kind, amount, remark, sort_no);
DO $$
BEGIN
IF (SELECT count(*) FROM "ExpenseClaim" WHERE "claimNo" = 'BX-20260809-002') <> 1
OR (SELECT count(*) FROM "ExpenseLine" line JOIN "ExpenseClaim" claim ON claim.id = line."claimId" WHERE claim."claimNo" = 'BX-20260809-002') <> 2 THEN
RAISE EXCEPTION 'Expense BX-20260809-002 restore verification failed';
END IF;
END $$;
COMMIT;