You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
4.3 KiB

3 months ago
// 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();