152 lines
4.6 KiB
JavaScript
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; |