Files
yunhaifinance/company-finance-system/backend/fix-payment-requests-constraint.js
T

90 lines
2.9 KiB
JavaScript

const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('company_finance.db');
// 修改 payment_requests 表的约束,允许 bank_account 和 bank_name 为空
db.serialize(() => {
console.log('开始修改 payment_requests 表约束...');
// 由于 SQLite 不支持直接修改列约束,我们需要创建新表并迁移数据
db.run(`
CREATE TABLE IF NOT EXISTS payment_requests_new (
id INTEGER PRIMARY KEY AUTOINCREMENT,
request_code TEXT UNIQUE NOT NULL,
applicant TEXT NOT NULL,
payee TEXT NOT NULL,
bank_account TEXT DEFAULT '',
bank_name TEXT DEFAULT '',
amount REAL NOT NULL,
amount_cny REAL DEFAULT 0,
currency TEXT DEFAULT 'CNY',
payment_date DATE NOT NULL,
reason TEXT NOT NULL,
detail_items TEXT,
attachments TEXT,
status TEXT DEFAULT 'pending',
payee_type TEXT DEFAULT 'other',
payee_id INTEGER,
expense_type TEXT DEFAULT 'company',
expense_category TEXT DEFAULT '',
project_id INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
`, (err) => {
if (err) {
console.error('创建新表失败:', err.message);
db.close();
return;
}
console.log('✓ 新表创建成功');
// 迁移数据
db.run(`
INSERT INTO payment_requests_new (
id, request_code, applicant, payee, bank_account, bank_name, amount, amount_cny,
currency, payment_date, reason, detail_items, attachments, status,
payee_type, payee_id, expense_type, expense_category, project_id,
created_at, updated_at
)
SELECT
id, request_code, applicant, payee,
COALESCE(bank_account, ''), COALESCE(bank_name, ''),
amount, amount_cny, currency, payment_date, reason,
detail_items, attachments, status,
COALESCE(payee_type, 'other'), payee_id,
COALESCE(expense_type, 'company'), COALESCE(expense_category, ''),
project_id, created_at, updated_at
FROM payment_requests
`, (err) => {
if (err) {
console.error('迁移数据失败:', err.message);
db.close();
return;
}
console.log('✓ 数据迁移成功');
// 删除旧表
db.run('DROP TABLE payment_requests', (err) => {
if (err) {
console.error('删除旧表失败:', err.message);
db.close();
return;
}
console.log('✓ 旧表删除成功');
// 重命名新表
db.run('ALTER TABLE payment_requests_new RENAME TO payment_requests', (err) => {
if (err) {
console.error('重命名表失败:', err.message);
db.close();
return;
}
console.log('✓ 表重命名成功');
console.log('\n✓ 表约束修改完成');
db.close();
});
});
});
});
});