// sync-review-status.js // 这个脚本用于修复手动在数据库中将pending_review改为reviewed后小程序不显示正确状态的问题 const { Sequelize } = require('sequelize'); require('dotenv').config(); // 获取命令行参数 const args = process.argv.slice(2); const autoPublish = args.includes('--publish'); const forceUpdate = args.includes('--force'); // 使用与simple-fix.js相同的数据库连接配置 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 }, define: { timestamps: false, freezeTableName: true }, timezone: '+08:00' // 设置时区为UTC+8 } ); // 主要同步函数 - 直接使用SQL查询以避免模型定义问题 async function syncReviewStatus() { try { console.log('===== 开始同步已审核状态... ====='); // 验证数据库连接 await sequelize.authenticate(); console.log('数据库连接成功'); // 1. 查找所有状态为reviewed的商品 const [reviewedProducts, _] = await sequelize.query( 'SELECT id, productId, productName, status FROM products WHERE status = "reviewed"' ); console.log(`找到 ${reviewedProducts.length} 个状态为reviewed的商品`); // 显示找到的商品信息 if (reviewedProducts.length > 0) { console.log('\n已审核商品列表:'); reviewedProducts.forEach(product => { console.log(`- ID: ${product.id}, 商品ID: ${product.productId}, 名称: ${product.productName}, 状态: ${product.status}`); }); } // 2. 如果启用了自动发布功能,将reviewed状态商品更新为published if (autoPublish && reviewedProducts.length > 0) { console.log('\n===== 开始自动发布已审核商品 ====='); // 执行批量更新 const [result] = await sequelize.query( 'UPDATE products SET status = "published", updated_at = NOW() WHERE status = "reviewed"' ); console.log(`成功将 ${result.affectedRows} 个商品从reviewed状态更新为published状态`); console.log('商品状态更新完成!现在这些商品在小程序中应该显示为已上架状态。'); } // 3. 提供状态转换建议 if (reviewedProducts.length > 0) { console.log('\n操作建议:'); if (autoPublish) { console.log('✅ 已自动将所有reviewed状态商品更新为published状态'); } else { console.log('1. 在小程序中下拉刷新卖家页面,查看更新后的状态'); console.log('2. 可以在小程序中直接将这些商品上架(会自动变为published状态)'); console.log('3. 如需批量将reviewed状态转为published,请运行: node sync-review-status.js --publish'); } console.log('4. 如果仍然存在问题,请运行: node sync-review-status.js --force --publish 强制执行更新'); } console.log('\n===== 同步完成! ====='); console.log('注意:如果您在数据库中手动修改了商品状态,小程序需要重新从服务器同步数据才能显示最新状态。'); console.log('请在小程序中下拉刷新页面或重新进入卖家页面。'); } catch (error) { console.error('同步过程中发生错误:', error.message); console.log('请检查数据库连接和权限后重试。'); console.log('尝试使用 --force 参数强制执行: node sync-review-status.js --force --publish'); } finally { // 关闭数据库连接 await sequelize.close(); console.log('数据库连接已关闭'); } } // 执行同步 console.log('=== 商品审核状态同步工具 ==='); console.log('此工具用于检查并同步已审核(reviewed)状态的商品'); console.log('解决手动在数据库修改状态后小程序显示不正确的问题\n'); console.log('使用方法:'); console.log(' - 查看状态: node sync-review-status.js'); console.log(' - 自动发布: node sync-review-status.js --publish'); console.log(' - 强制更新: node sync-review-status.js --force --publish\n'); syncReviewStatus();