// 更新商品审核状态脚本 - 将商品从pending_review改为reviewed const { Sequelize, DataTypes, Model } = require('sequelize'); require('dotenv').config(); const readline = require('readline'); // 创建读取用户输入的接口 const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); // MySQL数据库连接配置 const sequelize = 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', pool: { max: 10, min: 0, acquire: 30000, idle: 10000 }, timezone: '+08:00' // 设置时区为UTC+8 } ); // 定义Product模型 class Product extends Model { } Product.init({ id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true }, productId: { type: DataTypes.STRING(100), allowNull: false, unique: true }, sellerId: { type: DataTypes.STRING(100), allowNull: false }, productName: { type: DataTypes.STRING(255), allowNull: false }, status: { type: DataTypes.STRING(20), defaultValue: 'pending_review', validate: { isIn: [['pending_review', 'reviewed', 'published', 'sold_out', 'rejected', 'hidden']] } }, created_at: { type: DataTypes.DATE, defaultValue: Sequelize.NOW }, updated_at: { type: DataTypes.DATE, defaultValue: Sequelize.NOW, onUpdate: Sequelize.NOW } }, { sequelize, modelName: 'Product', tableName: 'products', timestamps: false }); // 测试数据库连接 async function testDbConnection() { try { await sequelize.authenticate(); console.log('数据库连接成功'); } catch (error) { console.error('数据库连接失败:', error); console.error('请检查.env文件中的数据库配置是否正确'); process.exit(1); } } // 获取所有待审核商品 async function getPendingReviewProducts() { try { const products = await Product.findAll({ where: { status: 'pending_review' }, attributes: ['id', 'productId', 'productName', 'created_at'] }); return products; } catch (error) { console.error('获取待审核商品失败:', error); return []; } } // 更新单个商品状态 async function updateSingleProduct(productId) { try { const result = await Product.update( { status: 'reviewed', updated_at: new Date() }, { where: { productId: productId } } ); if (result[0] > 0) { console.log(`成功更新商品状态: ${productId}`); return true; } else { console.log(`未找到商品: ${productId} 或该商品状态不是待审核`); return false; } } catch (error) { console.error(`更新商品状态失败: ${productId}`, error); return false; } } // 更新所有待审核商品状态 async function updateAllProducts() { try { const result = await Product.update( { status: 'reviewed', updated_at: new Date() }, { where: { status: 'pending_review' } } ); console.log(`成功更新 ${result[0]} 个商品的状态`); return result[0]; } catch (error) { console.error('批量更新商品状态失败:', error); return 0; } } // 主函数 async function main() { try { await testDbConnection(); // 获取待审核商品列表 const pendingProducts = await getPendingReviewProducts(); if (pendingProducts.length === 0) { console.log('当前没有待审核的商品'); rl.close(); process.exit(0); } console.log(`\n找到 ${pendingProducts.length} 个待审核的商品:`); pendingProducts.forEach((product, index) => { console.log(`${index + 1}. ID: ${product.productId}, 名称: ${product.productName}, 创建时间: ${product.created_at.toLocaleString()}`); }); // 询问用户要更新单个还是所有商品 rl.question('\n请选择操作 (1: 更新单个商品, 2: 更新所有商品, 0: 退出): ', async (choice) => { switch (choice) { case '1': rl.question('请输入要更新的商品ID: ', async (productId) => { await updateSingleProduct(productId); rl.close(); }); break; case '2': rl.question('确定要更新所有待审核商品的状态吗? (y/n): ', async (confirm) => { if (confirm.toLowerCase() === 'y') { await updateAllProducts(); } else { console.log('已取消操作'); } rl.close(); }); break; case '0': console.log('已退出'); rl.close(); break; default: console.log('无效的选择'); rl.close(); } }); rl.on('close', () => { console.log('\n操作已完成,小程序中刷新后即可看到已上架的货源'); process.exit(0); }); } catch (error) { console.error('程序执行出错:', error); rl.close(); process.exit(1); } } // 启动程序 main();