Files
autoAiWorkSys/scripts/sync_job_postings_table.js
张成 5d7444cd65 1
2025-11-24 13:23:42 +08:00

121 lines
3.4 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 同步 job_postings 表结构
* 用于创建或更新数据库表
*/
const Sequelize = require('sequelize');
// 加载配置
const config = require('../config/config');
const dbConfig = config.db;
async function syncJobPostingsTable() {
console.log('🔄 开始同步 job_postings 表结构...\n');
try {
// 创建 Sequelize 实例
const sequelize = new Sequelize(
dbConfig.database,
dbConfig.username,
dbConfig.password,
{
host: dbConfig.host,
port: dbConfig.port,
dialect: dbConfig.dialect,
logging: false
}
);
// 测试连接
await sequelize.authenticate();
console.log('✅ 数据库连接成功\n');
// 加载模型定义
const job_postings = require('../api/model/job_postings')(sequelize);
// 同步表结构alter: true 会自动添加缺失的字段,保留现有数据)
console.log('⚠️ 注意:使用 alter: true 模式同步(保留现有数据)');
console.log('如果需要完全重建表,请修改为 force: true\n');
await job_postings.sync({ alter: true });
console.log('✅ job_postings 表同步成功!\n');
// 显示表结构
const tableInfo = await sequelize.query(
`DESCRIBE job_postings`,
{ type: Sequelize.QueryTypes.SELECT }
);
console.log('📋 当前表结构:');
console.table(tableInfo.map(field => ({
字段名: field.Field,
类型: field.Type,
允许空: field.Null,
默认值: field.Default
})));
// 检查关键字段
const requiredFields = [
'id',
'sn_code',
'platform',
'keyword',
'encryptBossId',
'jobId',
'jobTitle',
'companyId',
'companyName',
'companySize',
'companyIndustry',
'salary',
'jobRequirements',
'jobDescription',
'location',
'experience',
'education',
'aiMatchScore',
'applyStatus',
'chatStatus',
'originalData'
];
const existingFields = tableInfo.map(f => f.Field);
console.log('\n🔍 检查关键字段:');
const missingFields = [];
requiredFields.forEach(field => {
const exists = existingFields.includes(field);
console.log(` ${exists ? '✅' : '❌'} ${field}`);
if (!exists) {
missingFields.push(field);
}
});
if (missingFields.length > 0) {
console.log('\n⚠ 缺少以下字段:', missingFields.join(', '));
console.log('建议:重新运行同步或手动添加这些字段');
} else {
console.log('\n✅ 所有必需字段都存在!');
}
// 关闭连接
await sequelize.close();
} catch (error) {
console.error('❌ 同步失败:', error.message);
console.error('\n详细错误:', error);
}
}
// 执行同步
syncJobPostingsTable()
.then(() => {
console.log('\n✨ 同步完成!');
process.exit(0);
})
.catch(error => {
console.error('\n💥 执行失败:', error);
process.exit(1);
});