const { Sequelize } = require('sequelize'); const fs = require('fs'); const path = require('path'); // 读取环境变量 const envPath = path.join(__dirname, '.env'); if (fs.existsSync(envPath)) { const envContent = fs.readFileSync(envPath, 'utf8'); const envVars = envContent.split('\n').filter(line => line.trim() && !line.startsWith('#')); envVars.forEach(line => { const [key, value] = line.split('=').map(part => part.trim()); process.env[key] = value; }); } // 数据库连接配置 const sequelize = new Sequelize( process.env.DB_NAME || 'wechat_app', process.env.DB_USER || 'root', process.env.DB_PASSWORD || '', { host: process.env.DB_HOST || 'localhost', port: process.env.DB_PORT || 3306, dialect: 'mysql', logging: false, timezone: '+08:00' // 设置时区为UTC+8 } ); // 定义模型 - 简化版 const User = sequelize.define('User', { userId: { type: sequelize.Sequelize.STRING(100), primaryKey: true, allowNull: false }, nickName: sequelize.Sequelize.STRING(100), phoneNumber: sequelize.Sequelize.STRING(20) }, { tableName: 'users', timestamps: false }); const Contact = sequelize.define('Contact', { id: { type: sequelize.Sequelize.INTEGER, autoIncrement: true, primaryKey: true }, userId: { type: sequelize.Sequelize.STRING(100), allowNull: false }, nickName: sequelize.Sequelize.STRING(100), phoneNumber: sequelize.Sequelize.STRING(20) }, { tableName: 'contacts', timestamps: false }); const UserManagement = sequelize.define('UserManagement', { id: { type: sequelize.Sequelize.INTEGER, autoIncrement: true, primaryKey: true }, userId: { type: sequelize.Sequelize.STRING(100), allowNull: false } }, { tableName: 'usermanagements', timestamps: false }); // 修复函数 async function fixMissingAssociations() { try { console.log('========================================'); console.log('开始修复用户关联表记录'); console.log('========================================'); // 连接数据库 await sequelize.authenticate(); console.log('✅ 数据库连接成功'); // 获取所有用户 const users = await User.findAll(); console.log(`📊 共找到 ${users.length} 个用户记录`); let contactsCreated = 0; let managementsCreated = 0; // 为每个用户检查并创建关联记录 for (let i = 0; i < users.length; i++) { const user = users[i]; console.log(`\n🔄 处理用户 ${i + 1}/${users.length}: ${user.userId}`); // 检查并创建联系人记录 try { const existingContact = await Contact.findOne({ where: { userId: user.userId } }); if (!existingContact) { await Contact.create({ userId: user.userId, nickName: user.nickName || '默认联系人', phoneNumber: user.phoneNumber || '' }); console.log('✅ 创建了联系人记录'); contactsCreated++; } else { console.log('✅ 联系人记录已存在'); } } catch (error) { console.error('❌ 创建联系人记录失败:', error.message); } // 检查并创建用户管理记录 try { const existingManagement = await UserManagement.findOne({ where: { userId: user.userId } }); if (!existingManagement) { await UserManagement.create({ userId: user.userId }); console.log('✅ 创建了用户管理记录'); managementsCreated++; } else { console.log('✅ 用户管理记录已存在'); } } catch (error) { console.error('❌ 创建用户管理记录失败:', error.message); } } console.log('\n========================================'); console.log('修复完成!'); console.log(`📈 共创建了 ${contactsCreated} 条联系人记录`); console.log(`📈 共创建了 ${managementsCreated} 条用户管理记录`); console.log('========================================'); } catch (error) { console.error('❌ 修复过程中发生错误:', error); } finally { // 关闭数据库连接 await sequelize.close(); } } // 运行修复 fixMissingAssociations();