/** * 数据库初始化脚本 * @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;