const mysql = require('mysql2/promise');
|
|
// 数据库配置
|
const dbConfig = {
|
host: '139.155.104.10',
|
port: 3306,
|
user: 'ryc',
|
password: 'KiYap3E8X8RLcM6T',
|
database: 'ryc'
|
};
|
|
async function testActivityStatesAndMapping() {
|
let connection;
|
|
try {
|
console.log('=== 小程序活动状态映射修复测试 ===\n');
|
|
// 连接数据库
|
connection = await mysql.createConnection(dbConfig);
|
console.log('✅ 数据库连接成功');
|
|
// 1. 检查数据库中的活动状态分布
|
console.log('\n📊 数据库活动状态分布:');
|
const [stateStats] = await connection.execute(`
|
SELECT
|
state,
|
COUNT(*) as count,
|
CASE
|
WHEN state = 0 THEN '未发布(删除)'
|
WHEN state = 1 THEN '发布'
|
WHEN state = 2 THEN '关闭'
|
ELSE '未知状态'
|
END as state_name
|
FROM t_activity
|
WHERE pid = 0
|
GROUP BY state
|
ORDER BY state
|
`);
|
|
stateStats.forEach(row => {
|
console.log(` State ${row.state} (${row.state_name}): ${row.count} 个活动`);
|
});
|
|
// 2. 验证修复后的状态映射逻辑
|
console.log('\n🔧 修复后的状态映射逻辑:');
|
console.log(' upcoming (即将开始) -> state=1 (发布)');
|
console.log(' ongoing (进行中) -> state=1 (发布)');
|
console.log(' ended (已结束) -> state=2 (关闭)');
|
console.log(' all (全部) -> state=null (后端过滤 state!=0)');
|
|
// 3. 模拟不同筛选条件的查询结果
|
console.log('\n🧪 模拟小程序筛选查询:');
|
|
// 模拟 filterStatus = 'all' (state = null)
|
const [allActivities] = await connection.execute(`
|
SELECT id, name, state,
|
CASE
|
WHEN state = 0 THEN '未发布(删除)'
|
WHEN state = 1 THEN '发布'
|
WHEN state = 2 THEN '关闭'
|
ELSE '未知状态'
|
END as state_name
|
FROM t_activity
|
WHERE pid = 0 AND state != 0
|
ORDER BY create_time DESC
|
LIMIT 5
|
`);
|
console.log(`\n 筛选条件: 全部 (all) - 应该排除已删除活动:`);
|
console.log(` 查询结果: ${allActivities.length} 个活动`);
|
allActivities.forEach(activity => {
|
console.log(` - ${activity.name} (state=${activity.state}, ${activity.state_name})`);
|
});
|
|
// 模拟 filterStatus = 'upcoming' 或 'ongoing' (state = 1)
|
const [publishedActivities] = await connection.execute(`
|
SELECT id, name, state,
|
CASE
|
WHEN state = 0 THEN '未发布(删除)'
|
WHEN state = 1 THEN '发布'
|
WHEN state = 2 THEN '关闭'
|
ELSE '未知状态'
|
END as state_name
|
FROM t_activity
|
WHERE pid = 0 AND state = 1
|
ORDER BY create_time DESC
|
LIMIT 5
|
`);
|
console.log(`\n 筛选条件: 即将开始/进行中 (upcoming/ongoing) - state=1:`);
|
console.log(` 查询结果: ${publishedActivities.length} 个活动`);
|
publishedActivities.forEach(activity => {
|
console.log(` - ${activity.name} (state=${activity.state}, ${activity.state_name})`);
|
});
|
|
// 模拟 filterStatus = 'ended' (state = 2)
|
const [closedActivities] = await connection.execute(`
|
SELECT id, name, state,
|
CASE
|
WHEN state = 0 THEN '未发布(删除)'
|
WHEN state = 1 THEN '发布'
|
WHEN state = 2 THEN '关闭'
|
ELSE '未知状态'
|
END as state_name
|
FROM t_activity
|
WHERE pid = 0 AND state = 2
|
ORDER BY create_time DESC
|
LIMIT 5
|
`);
|
console.log(`\n 筛选条件: 已结束 (ended) - state=2:`);
|
console.log(` 查询结果: ${closedActivities.length} 个活动`);
|
closedActivities.forEach(activity => {
|
console.log(` - ${activity.name} (state=${activity.state}, ${activity.state_name})`);
|
});
|
|
// 4. 验证是否还有state=0的活动会被显示
|
const [deletedActivities] = await connection.execute(`
|
SELECT id, name, state
|
FROM t_activity
|
WHERE pid = 0 AND state = 0
|
`);
|
|
console.log(`\n✅ 验证结果:`);
|
console.log(` - 数据库中有 ${deletedActivities.length} 个已删除活动 (state=0)`);
|
console.log(` - 修复后的映射确保这些活动不会在任何筛选条件下显示`);
|
console.log(` - 'all' 筛选会排除 state=0 的活动`);
|
console.log(` - 其他筛选条件只会查询 state=1 或 state=2 的活动`);
|
|
if (deletedActivities.length === 0) {
|
console.log(` - 当前数据库中没有已删除的活动,修复主要解决了状态映射问题`);
|
}
|
|
} catch (error) {
|
console.error('❌ 测试失败:', error.message);
|
} finally {
|
if (connection) {
|
await connection.end();
|
console.log('\n🔌 数据库连接已关闭');
|
}
|
}
|
}
|
|
// 运行测试
|
testActivityStatesAndMapping();
|