90 lines
2.9 KiB
JavaScript
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();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|