const db = require('./backend/db-sqlite'); async function fixDatabase() { console.log('开始修复云端数据库...'); const migrations = [ // 物流公司表 `CREATE TABLE IF NOT EXISTS logistics_companies ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, contact_person TEXT, phone TEXT, email TEXT, address TEXT, service_type TEXT DEFAULT 'domestic', remark TEXT, status TEXT DEFAULT 'active', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, // 执行记录表 `CREATE TABLE IF NOT EXISTS executions ( id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, reference_id INTEGER, title TEXT, description TEXT, amount REAL, currency TEXT DEFAULT 'CNY', status TEXT DEFAULT 'pending', executed_by TEXT, executed_at TIMESTAMP, created_by TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, // 采购订单表 `CREATE TABLE IF NOT EXISTS purchase_orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, order_number TEXT UNIQUE, title TEXT NOT NULL, supplier_id INTEGER, project_id INTEGER, total_amount REAL DEFAULT 0, currency TEXT DEFAULT 'CNY', status TEXT DEFAULT 'draft', priority TEXT DEFAULT 'normal', delivery_date TEXT, delivery_address TEXT, remark TEXT, items TEXT, created_by TEXT, approved_by TEXT, approved_at TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, // 付款计划表 `CREATE TABLE IF NOT EXISTS payment_plans ( id INTEGER PRIMARY KEY AUTOINCREMENT, plan_number TEXT UNIQUE, title TEXT NOT NULL, purchase_order_id INTEGER, supplier_id INTEGER, total_amount REAL DEFAULT 0, paid_amount REAL DEFAULT 0, currency TEXT DEFAULT 'CNY', status TEXT DEFAULT 'pending', payment_items TEXT, remark TEXT, created_by TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, // 施工管理表 `CREATE TABLE IF NOT EXISTS construction_logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, project_id INTEGER, date TEXT NOT NULL, weather TEXT, workers_count INTEGER DEFAULT 0, work_content TEXT, progress TEXT, issues TEXT, photos TEXT, created_by TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, `CREATE TABLE IF NOT EXISTS construction_milestones ( id INTEGER PRIMARY KEY AUTOINCREMENT, project_id INTEGER, name TEXT NOT NULL, planned_date TEXT, actual_date TEXT, status TEXT DEFAULT 'pending', description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, // 预算项目表 `CREATE TABLE IF NOT EXISTS budget_projects ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, project_id INTEGER, total_budget REAL DEFAULT 0, currency TEXT DEFAULT 'CNY', status TEXT DEFAULT 'draft', description TEXT, items TEXT, created_by TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, // 退库记录表 `CREATE TABLE IF NOT EXISTS returns ( id INTEGER PRIMARY KEY AUTOINCREMENT, return_number TEXT UNIQUE, title TEXT NOT NULL, type TEXT DEFAULT 'material', project_id INTEGER, supplier_id INTEGER, total_amount REAL DEFAULT 0, currency TEXT DEFAULT 'CNY', status TEXT DEFAULT 'pending', items TEXT, remark TEXT, created_by TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, // 项目材料表 `CREATE TABLE IF NOT EXISTS project_materials ( id INTEGER PRIMARY KEY AUTOINCREMENT, project_id INTEGER NOT NULL, material_name TEXT NOT NULL, specification TEXT, unit TEXT DEFAULT '件', quantity REAL DEFAULT 0, unit_price REAL DEFAULT 0, total_price REAL DEFAULT 0, category TEXT, supplier_id INTEGER, status TEXT DEFAULT 'planned', remark TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, // 付款执行表 `CREATE TABLE IF NOT EXISTS payment_executions ( id INTEGER PRIMARY KEY AUTOINCREMENT, payment_plan_id INTEGER, amount REAL NOT NULL, payment_method TEXT, payment_date TEXT, voucher_number TEXT, status TEXT DEFAULT 'pending', remark TEXT, created_by TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, ]; for (const sql of migrations) { try { await db.query(sql); console.log('✅ 成功:', sql.substring(0, 60) + '...'); } catch (err) { console.log('⚠️ 跳过:', err.message); } } // 验证表 const result = await db.query("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"); console.log('\n当前数据库表:'); result.rows.forEach(r => console.log(' -', r.name)); console.log('\n数据库修复完成!'); process.exit(0); } fixDatabase().catch(err => { console.error('修复失败:', err); process.exit(1); });