Files
nxxmdata/bank-backend/scripts/init-db.js
2025-09-17 18:04:28 +08:00

152 lines
4.6 KiB
JavaScript

/**
* 数据库初始化脚本
* @file init-db.js
* @description 初始化银行系统数据库
*/
const { sequelize } = require('../config/database');
const { User, Role, Account, Transaction } = require('../models');
const bcrypt = require('bcryptjs');
async function initDatabase() {
try {
console.log('🔄 开始初始化银行系统数据库...');
// 测试数据库连接
await sequelize.authenticate();
console.log('✅ 数据库连接成功');
// 同步数据库模型
await sequelize.sync({ force: true });
console.log('✅ 数据库表创建成功');
// 创建初始角色
console.log('🔄 创建初始角色...');
const roles = await Role.bulkCreate([
{
name: 'admin',
display_name: '系统管理员',
description: '拥有系统所有权限',
level: 100,
is_system: true
},
{
name: 'manager',
display_name: '银行经理',
description: '拥有银行管理权限',
level: 80,
is_system: false
},
{
name: 'teller',
display_name: '银行柜员',
description: '拥有基本业务操作权限',
level: 60,
is_system: false
},
{
name: 'user',
display_name: '普通用户',
description: '拥有基本用户权限',
level: 20,
is_system: false
}
]);
console.log('✅ 初始角色创建成功');
// 创建初始管理员用户
console.log('🔄 创建初始管理员用户...');
const adminUser = await User.create({
username: 'admin',
email: 'admin@bank.com',
password: 'Admin123456',
phone: '13800138000',
real_name: '系统管理员',
id_card: '110101199001011234',
role_id: roles[0].id, // admin角色
status: 'active'
});
console.log('✅ 初始管理员用户创建成功');
// 创建测试用户
console.log('🔄 创建测试用户...');
const testUser = await User.create({
username: 'testuser',
email: 'test@bank.com',
password: 'Test123456',
phone: '13800138001',
real_name: '测试用户',
id_card: '110101199001011235',
role_id: roles[3].id, // user角色
status: 'active'
});
console.log('✅ 测试用户创建成功');
// 为测试用户创建账户
console.log('🔄 为测试用户创建账户...');
const testAccount = await Account.create({
account_number: '001' + Date.now().toString().slice(-8) + '0001',
user_id: testUser.id,
account_type: 'savings',
balance: 100000, // 1000元
available_balance: 100000,
frozen_amount: 0,
currency: 'CNY',
interest_rate: 0.035, // 3.5%年利率
status: 'active'
});
console.log('✅ 测试账户创建成功');
// 创建一些示例交易记录
console.log('🔄 创建示例交易记录...');
const transactions = await Transaction.bulkCreate([
{
transaction_number: 'TXN' + Date.now() + '0001',
account_id: testAccount.id,
transaction_type: 'deposit',
amount: 100000,
balance_before: 0,
balance_after: 100000,
description: '开户存款',
status: 'completed',
processed_at: new Date()
},
{
transaction_number: 'TXN' + Date.now() + '0002',
account_id: testAccount.id,
transaction_type: 'interest',
amount: 292, // 约1元利息
balance_before: 100000,
balance_after: 100292,
description: '定期利息',
status: 'completed',
processed_at: new Date()
}
]);
console.log('✅ 示例交易记录创建成功');
console.log('\n🎉 银行系统数据库初始化完成!');
console.log('\n📋 初始数据信息:');
console.log(`👤 管理员账户: admin / Admin123456`);
console.log(`👤 测试用户: testuser / Test123456`);
console.log(`🏦 测试账户: ${testAccount.account_number}`);
console.log(`💰 初始余额: ${(testAccount.balance / 100).toFixed(2)}`);
console.log('\n🔗 数据库连接信息:');
console.log(` 主机: ${process.env.DB_HOST || 'localhost'}`);
console.log(` 端口: ${process.env.DB_PORT || 3306}`);
console.log(` 数据库: ${process.env.DB_NAME || 'bank_management'}`);
} catch (error) {
console.error('❌ 数据库初始化失败:', error);
process.exit(1);
} finally {
await sequelize.close();
console.log('📊 数据库连接已关闭');
}
}
// 运行初始化
if (require.main === module) {
initDatabase();
}
module.exports = initDatabase;