Codex Assistant
昨天 c8dffd157cd8b62023b26e62a0b92c152d959423
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
const mysql = require('mysql2/promise');
 
// 从application.yml读取的数据库配置
const dbConfig = {
    host: '139.155.104.10',
    port: 3306,
    user: 'ryc',
    password: 'KiYap3E8X8RLcM6T',
    database: 'ryc',
    connectTimeout: 60000,
    acquireTimeout: 60000,
    timeout: 60000
};
 
async function verifyUserJudgeMapping() {
    console.log('=== 验证用户ID=152的评委权限 ===\n');
    
    let connection;
    try {
        // 连接数据库
        console.log('正在连接数据库...');
        connection = await mysql.createConnection(dbConfig);
        console.log('✅ 数据库连接成功\n');
        
        // 1. 查询用户ID=152的基本信息
        console.log('1. 查询用户ID=152的基本信息:');
        const [userRows] = await connection.execute(
            'SELECT id, name, phone, state, create_time FROM t_user WHERE id = ?',
            [152]
        );
        
        if (userRows.length === 0) {
            console.log('❌ 用户ID=152不存在');
            return;
        }
        
        const user = userRows[0];
        console.log('✅ 用户信息:');
        console.log(`   ID: ${user.id}`);
        console.log(`   姓名: ${user.name}`);
        console.log(`   手机号: ${user.phone}`);
        console.log(`   状态: ${user.state}`);
        console.log(`   创建时间: ${user.create_time}`);
        
        // 2. 查询该用户对应的评委记录
        console.log('\n2. 查询用户ID=152对应的评委记录:');
        const [judgeRows] = await connection.execute(
            'SELECT id, name, user_id, phone, state, title, company, create_time FROM t_judge WHERE user_id = ?',
            [152]
        );
        
        if (judgeRows.length === 0) {
            console.log('❌ 用户ID=152没有对应的评委记录');
            
            // 检查是否有同手机号的评委记录
            console.log('\n3. 检查是否有同手机号的评委记录:');
            const [judgeByPhoneRows] = await connection.execute(
                'SELECT id, name, user_id, phone, state FROM t_judge WHERE phone = ?',
                [user.phone]
            );
            
            if (judgeByPhoneRows.length > 0) {
                console.log('⚠️  发现同手机号的评委记录:');
                judgeByPhoneRows.forEach(judge => {
                    console.log(`   评委ID: ${judge.id}, 用户ID: ${judge.user_id}, 姓名: ${judge.name}, 状态: ${judge.state}`);
                });
            } else {
                console.log('❌ 没有找到同手机号的评委记录');
            }
            return;
        }
        
        const judge = judgeRows[0];
        console.log('✅ 评委信息:');
        console.log(`   评委ID: ${judge.id}`);
        console.log(`   用户ID: ${judge.user_id}`);
        console.log(`   姓名: ${judge.name}`);
        console.log(`   手机号: ${judge.phone}`);
        console.log(`   状态: ${judge.state}`);
        console.log(`   职位: ${judge.title || '未设置'}`);
        console.log(`   公司: ${judge.company || '未设置'}`);
        console.log(`   创建时间: ${judge.create_time}`);
        
        // 验证是否是评委ID=72
        if (judge.id === 72) {
            console.log('✅ 确认:用户ID=152对应评委ID=72');
        } else {
            console.log(`⚠️  注意:用户ID=152对应评委ID=${judge.id},不是72`);
        }
        
        // 3. 检查评委状态
        console.log('\n3. 检查评委状态:');
        if (judge.state === 1) {
            console.log('✅ 评委状态正常(state=1)');
        } else {
            console.log(`❌ 评委状态异常(state=${judge.state})`);
        }
        
        // 4. 查询评委参与的活动
        console.log('\n4. 查询评委参与的活动:');
        const [activityJudgeRows] = await connection.execute(
            'SELECT aj.activity_id, a.name as activity_name, aj.stage_id FROM t_activity_judge aj LEFT JOIN t_activity a ON aj.activity_id = a.id WHERE aj.judge_id = ? LIMIT 5',
            [judge.id]
        );
        
        if (activityJudgeRows.length > 0) {
            console.log('✅ 评委参与的活动:');
            activityJudgeRows.forEach(activity => {
                console.log(`   活动ID: ${activity.activity_id}, 活动名称: ${activity.activity_name || '未知'}, 阶段ID: ${activity.stage_id}`);
            });
        } else {
            console.log('⚠️  评委没有参与任何活动');
        }
        
        // 5. 查询最近的微信登录记录
        console.log('\n5. 查询用户最近的微信登录记录:');
        const [wxLoginRows] = await connection.execute(
            'SELECT id, wx_openid, user_id, login_time, phone_authorized FROM t_wx_login_record WHERE user_id = ? ORDER BY login_time DESC LIMIT 3',
            [152]
        );
        
        if (wxLoginRows.length > 0) {
            console.log('✅ 最近的微信登录记录:');
            wxLoginRows.forEach(record => {
                console.log(`   记录ID: ${record.id}, OpenID: ${record.wx_openid}, 登录时间: ${record.login_time}, 手机授权: ${record.phone_authorized}`);
            });
        } else {
            console.log('⚠️  没有找到微信登录记录');
        }
        
        // 6. 总结
        console.log('\n=== 总结 ===');
        if (judge.state === 1) {
            console.log('✅ 用户ID=152确实有有效的评委权限');
            console.log('✅ 如果后端仍然拒绝访问,可能是UserContextUtil的逻辑有问题');
        } else {
            console.log('❌ 评委记录存在但状态异常,这可能是权限被拒绝的原因');
        }
        
    } catch (error) {
        console.error('❌ 数据库查询失败:', error.message);
        console.error('错误详情:', error);
    } finally {
        if (connection) {
            await connection.end();
            console.log('\n数据库连接已关闭');
        }
    }
}
 
// 运行验证
if (require.main === module) {
    verifyUserJudgeMapping();
}
 
module.exports = { verifyUserJudgeMapping };