Files
yunhaifinance/fix-cloud-db.js
T

195 lines
5.8 KiB
JavaScript

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);
});