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.

140 lines
4.5 KiB

3 months ago
// 更新商品联系人信息的数据库函数
require('dotenv').config();
const { Sequelize } = require('sequelize');
// 创建wechat_app数据库连接
const wechatAppSequelize = new Sequelize(
process.env.DB_DATABASE || 'wechat_app',
process.env.DB_USER || 'root',
process.env.DB_PASSWORD === undefined ? null : process.env.DB_PASSWORD,
{
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 3306,
dialect: 'mysql',
define: {
timestamps: false
},
timezone: '+08:00' // 设置时区为UTC+8
}
);
// 创建userlogin数据库连接
const userLoginSequelize = new Sequelize(
'userlogin',
process.env.DB_USER || 'root',
process.env.DB_PASSWORD === undefined ? null : process.env.DB_PASSWORD,
{
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 3306,
dialect: 'mysql',
define: {
timestamps: false
},
timezone: '+08:00' // 设置时区为UTC+8
}
);
// 主函数:更新商品联系人信息
async function updateProductContacts() {
try {
// 测试数据库连接
await Promise.all([
wechatAppSequelize.authenticate(),
userLoginSequelize.authenticate()
]);
console.log('✅ 数据库连接成功');
// 1. 查询wechat_app数据库中products表status为published且product_contact为null的记录
console.log('\n1. 查询待更新的商品...');
const products = await wechatAppSequelize.query(
'SELECT productId, productName FROM products WHERE status = ? AND product_contact IS NULL',
{
replacements: ['published'],
type: wechatAppSequelize.QueryTypes.SELECT
}
);
console.log(`📋 找到 ${products.length} 个待更新联系人信息的商品`);
if (products.length === 0) {
console.log('✅ 所有商品都已更新联系人信息,无需操作');
return;
}
// 2. 查询userlogin库中managers表role为"销售员"的userName
console.log('\n2. 查询所有销售员...');
const managers = await userLoginSequelize.query(
'SELECT userName FROM managers WHERE role = ?',
{
replacements: ['销售员'],
type: userLoginSequelize.QueryTypes.SELECT
}
);
const salesmanUserNames = managers.map(m => m.userName);
console.log(`👥 找到 ${salesmanUserNames.length} 名销售员`);
if (salesmanUserNames.length === 0) {
console.log('❌ 没有找到销售员,无法更新商品联系人信息');
return;
}
// 3. 在wechat_app库中查询这些销售员的nickName和phoneNumber
console.log('\n3. 查询销售员的联系方式...');
const salesmenContacts = await wechatAppSequelize.query(
'SELECT nickName, phoneNumber FROM users WHERE nickName IN (?)',
{
replacements: [salesmanUserNames],
type: wechatAppSequelize.QueryTypes.SELECT
}
);
console.log(`📞 找到 ${salesmenContacts.length} 名有联系方式的销售员`);
if (salesmenContacts.length === 0) {
console.log('❌ 没有找到有联系方式的销售员,无法更新商品联系人信息');
return;
}
// 4. 随机分配销售员到商品
console.log('\n4. 开始分配销售员到商品...');
let updatedCount = 0;
for (const product of products) {
// 随机选择一个销售员
const randomIndex = Math.floor(Math.random() * salesmenContacts.length);
const selectedSalesman = salesmenContacts[randomIndex];
// 更新商品的联系人信息
await wechatAppSequelize.query(
'UPDATE products SET product_contact = ?, contact_phone = ? WHERE productId = ?',
{
replacements: [
selectedSalesman.nickName,
selectedSalesman.phoneNumber,
product.productId
],
type: wechatAppSequelize.QueryTypes.UPDATE
}
);
console.log(`✅ 商品 ${product.productId} (${product.productName}) 已分配销售员: ${selectedSalesman.nickName} - ${selectedSalesman.phoneNumber}`);
updatedCount++;
}
console.log(`\n🎉 更新完成!共更新了 ${updatedCount} 个商品的联系人信息`);
} catch (error) {
console.error('❌ 操作失败:', error.message);
console.error('📝 错误详情:', error);
}
}
// 导出函数供其他模块使用
module.exports = updateProductContacts;
// 如果直接运行此文件,则执行更新操作
if (require.main === module) {
updateProductContacts();
}