diff --git a/server-example/update-product-contacts.js b/server-example/update-product-contacts.js new file mode 100644 index 0000000..78713c3 --- /dev/null +++ b/server-example/update-product-contacts.js @@ -0,0 +1,143 @@ +// 更新商品联系人信息的数据库函数 +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 + } + } +); + +// 创建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 + } + } +); + +// 主函数:更新商品联系人信息 +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); + } finally { + // 关闭数据库连接 + await Promise.all([ + wechatAppSequelize.close(), + userLoginSequelize.close() + ]); + } +} + +// 导出函数供其他模块使用 +module.exports = updateProductContacts; + +// 如果直接运行此文件,则执行函数 +if (require.main === module) { + updateProductContacts(); +} \ No newline at end of file