1 changed files with 143 additions and 0 deletions
@ -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(); |
|||
} |
|||
Loading…
Reference in new issue