You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

155 lines
4.3 KiB

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