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
108 lines
4.3 KiB
// 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();
|