// 更新商品联系人信息的数据库函数 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(); }