109 lines
4.3 KiB
JavaScript
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);
|
|
}); |