Files
yunhaifinance/fix-cloud-db2.js
T

109 lines
4.3 KiB
JavaScript

const db = require('./backend/db-sqlite');
async function fixDatabase() {
console.log('开始修复云端数据库Schema...');
const fixes = [
// 物流公司表 - 添加缺失的code列
`ALTER TABLE logistics_companies ADD COLUMN code TEXT`,
// 采购订单表 - 添加缺失的列
`ALTER TABLE purchase_orders ADD COLUMN project_id INTEGER`,
`ALTER TABLE purchase_orders ADD COLUMN order_number TEXT`,
`ALTER TABLE purchase_orders ADD COLUMN supplier_id INTEGER`,
`ALTER TABLE purchase_orders ADD COLUMN total_amount REAL DEFAULT 0`,
`ALTER TABLE purchase_orders ADD COLUMN currency TEXT DEFAULT 'CNY'`,
`ALTER TABLE purchase_orders ADD COLUMN status TEXT DEFAULT 'draft'`,
`ALTER TABLE purchase_orders ADD COLUMN priority TEXT DEFAULT 'normal'`,
`ALTER TABLE purchase_orders ADD COLUMN delivery_date TEXT`,
`ALTER TABLE purchase_orders ADD COLUMN delivery_address TEXT`,
`ALTER TABLE purchase_orders ADD COLUMN remark TEXT`,
`ALTER TABLE purchase_orders ADD COLUMN items TEXT`,
`ALTER TABLE purchase_orders ADD COLUMN created_by TEXT`,
`ALTER TABLE purchase_orders ADD COLUMN approved_by TEXT`,
`ALTER TABLE purchase_orders ADD COLUMN approved_at TIMESTAMP`,
// 付款计划表 - 添加缺失的列
`ALTER TABLE payment_plans ADD COLUMN payment_request_id INTEGER`,
`ALTER TABLE payment_plans ADD COLUMN purchase_order_id INTEGER`,
`ALTER TABLE payment_plans ADD COLUMN supplier_id INTEGER`,
`ALTER TABLE payment_plans ADD COLUMN total_amount REAL DEFAULT 0`,
`ALTER TABLE payment_plans ADD COLUMN paid_amount REAL DEFAULT 0`,
`ALTER TABLE payment_plans ADD COLUMN currency TEXT DEFAULT 'CNY'`,
`ALTER TABLE payment_plans ADD COLUMN status TEXT DEFAULT 'pending'`,
`ALTER TABLE payment_plans ADD COLUMN payment_items TEXT`,
`ALTER TABLE payment_plans ADD COLUMN plan_number TEXT`,
`ALTER TABLE payment_plans ADD COLUMN title TEXT`,
`ALTER TABLE payment_plans ADD COLUMN remark TEXT`,
`ALTER TABLE payment_plans ADD COLUMN created_by TEXT`,
// 退库记录表
`CREATE TABLE IF NOT EXISTS return_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
return_number TEXT UNIQUE,
product_id INTEGER,
product_name TEXT,
quantity REAL DEFAULT 0,
unit TEXT DEFAULT '件',
unit_price REAL DEFAULT 0,
total_price REAL DEFAULT 0,
return_date TEXT,
reason TEXT,
status TEXT DEFAULT 'pending',
remark TEXT,
created_by TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)`,
// 采购订单项目表
`CREATE TABLE IF NOT EXISTS purchase_order_items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
order_id INTEGER NOT NULL,
product_id INTEGER,
product_name TEXT NOT NULL,
specification TEXT,
unit TEXT DEFAULT '件',
quantity REAL DEFAULT 0,
unit_price REAL DEFAULT 0,
total_price REAL DEFAULT 0,
delivery_date TEXT,
remark TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES purchase_orders(id)
)`,
];
for (const sql of fixes) {
try {
await db.query(sql);
console.log('✅ 成功:', sql.substring(0, 80));
} catch (err) {
if (err.message.includes('duplicate column') || err.message.includes('already exists')) {
console.log('⏭️ 已存在:', sql.substring(0, 80));
} else {
console.log('⚠️ 错误:', err.message.substring(0, 80));
}
}
}
// 验证
const tables = await db.query("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name");
console.log('\n当前数据库表:');
tables.rows.forEach(r => console.log(' -', r.name));
// 检查关键表结构
for (const table of ['logistics_companies', 'purchase_orders', 'payment_plans']) {
const cols = await db.query(`PRAGMA table_info(${table})`);
console.log(`\n${table} 列:`, cols.rows.map(r => r.name).join(', '));
}
console.log('\n数据库Schema修复完成!');
process.exit(0);
}
fixDatabase().catch(err => {
console.error('修复失败:', err);
process.exit(1);
});