From 7065d22a3e626568e53ea76b05049a02d5514563 Mon Sep 17 00:00:00 2001 From: SwTt29 <2055018491@qq.com> Date: Wed, 7 Jan 2026 13:42:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B5=8B=E8=AF=95=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E4=BF=9D=E7=95=99=E5=85=B3=E9=94=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check-specific-user.js | 89 +++++++++++++++++++++++++++++++++ reset-sync-status.js | 63 +++++++++++++++++++++++ src/services/databaseService.js | 10 +++- test-incremental.js | 46 ----------------- 4 files changed, 161 insertions(+), 47 deletions(-) create mode 100644 check-specific-user.js create mode 100644 reset-sync-status.js delete mode 100644 test-incremental.js diff --git a/check-specific-user.js b/check-specific-user.js new file mode 100644 index 0000000..bfaca28 --- /dev/null +++ b/check-specific-user.js @@ -0,0 +1,89 @@ +// 检查特定用户的同步状态和jiandaoyun_record_id字段 +const mysql = require('mysql2/promise'); +const config = require('./src/config/config'); + +// 要检查的用户ID +const targetUserId = 'user_1766039120078_lcmc7kom1'; + +async function checkSpecificUser() { + console.log(`===== 检查用户 ${targetUserId} 的同步状态 =====`); + + let connection = null; + + try { + // 1. 连接数据库 + console.log('1. 连接数据库...'); + connection = await mysql.createConnection({ + host: config.db.host, + port: config.db.port, + user: config.db.user, + password: config.db.password, + database: config.db.database + }); + console.log('数据库连接成功'); + + // 2. 查询该用户的详细信息 + console.log(`\n2. 查询用户 ${targetUserId} 的详细信息...`); + const checkSql = ` + SELECT userId, phoneNumber, nickName, type, authorized_region, sync_status, + last_sync_time, jiandaoyun_record_id, jiandao_record_id + FROM ${config.tables.users.name} + WHERE userId = ? + `; + const [rows] = await connection.execute(checkSql, [targetUserId]); + + if (rows.length === 0) { + console.log(`未找到用户 ${targetUserId}`); + return; + } + + const userInfo = rows[0]; + console.log('用户信息:', JSON.stringify(userInfo, null, 2)); + + // 3. 检查是否有该用户的同步记录 + console.log(`\n3. 检查用户 ${targetUserId} 是否在同步队列中...`); + const syncSql = ` + SELECT userId, phoneNumber, sync_status, jiandaoyun_record_id + FROM ${config.tables.users.name} + WHERE (sync_status = 0 OR sync_status IS NULL) + AND (jiandaoyun_record_id IS NULL OR jiandaoyun_record_id = '') + LIMIT 10 + `; + const [syncRows] = await connection.execute(syncSql); + + console.log(`当前需要同步的用户数量: ${syncRows.length}`); + const isInSyncQueue = syncRows.some(user => user.userId === targetUserId); + console.log(`用户 ${targetUserId} 是否在同步队列中: ${isInSyncQueue}`); + + if (syncRows.length > 0) { + console.log('同步队列中的用户ID:', syncRows.map(user => user.userId)); + } + + // 4. 检查是否有该用户的相关产品数据 + console.log(`\n4. 检查用户 ${targetUserId} 的产品数据...`); + const productSql = ` + SELECT * FROM ${config.tables.products.name} + WHERE userId = ? + LIMIT 5 + `; + const [productRows] = await connection.execute(productSql, [targetUserId]); + + console.log(`用户 ${targetUserId} 的产品数量: ${productRows.length}`); + if (productRows.length > 0) { + console.log('产品示例:', JSON.stringify(productRows.slice(0, 2), null, 2)); + } + + } catch (error) { + console.error('检查过程中发生错误:', error); + console.error('错误堆栈:', error.stack); + } finally { + if (connection) { + await connection.end(); + console.log('\n数据库连接已关闭'); + } + console.log('\n===== 检查完成 ====='); + } +} + +// 运行检查 +checkSpecificUser(); \ No newline at end of file diff --git a/reset-sync-status.js b/reset-sync-status.js new file mode 100644 index 0000000..630f1b2 --- /dev/null +++ b/reset-sync-status.js @@ -0,0 +1,63 @@ +// 选择有收藏产品的用户并重置同步状态 +const mysql = require('mysql2/promise'); +const config = require('./src/config/config'); + +async function resetSyncStatus() { + console.log('===== 重置有收藏产品用户的同步状态 ====='); + + try { + // 连接数据库 + const connection = await mysql.createConnection(config.db); + console.log('数据库连接成功'); + + // 查询有收藏产品的用户 + const [usersWithFavorites] = await connection.execute( + 'SELECT DISTINCT u.id, u.userId, u.phoneNumber FROM users u INNER JOIN favorites f ON u.phoneNumber = f.user_phone LIMIT 1' + ); + + if (usersWithFavorites.length === 0) { + console.log('没有找到有收藏产品的用户'); + await connection.end(); + return; + } + + const testUser = usersWithFavorites[0]; + const phoneNumber = testUser.phoneNumber; + const userId = testUser.userId; + + console.log('选择测试用户:', JSON.stringify(testUser)); + + // 重置同步状态 + await connection.execute( + 'UPDATE users SET sync_status = 0 WHERE phoneNumber = ?', + [phoneNumber] + ); + + console.log(`已将用户 ${phoneNumber} 的同步状态重置为未同步`); + + // 验证重置结果 + const [updatedUser] = await connection.execute( + 'SELECT id, userId, phoneNumber, sync_status FROM users WHERE phoneNumber = ?', + [phoneNumber] + ); + + if (updatedUser.length > 0) { + console.log('重置后的用户状态:', updatedUser[0]); + } + + await connection.end(); + console.log('\n✅ 操作完成!'); + + } catch (error) { + console.error('操作过程中发生错误:', error.message); + if (error.sql) { + console.error('SQL语句:', error.sql); + } + } +} + +// 执行操作 +resetSyncStatus().catch(error => { + console.error('操作执行失败:', error.message); + process.exit(1); +}); diff --git a/src/services/databaseService.js b/src/services/databaseService.js index 672f2d0..c69c7ad 100644 --- a/src/services/databaseService.js +++ b/src/services/databaseService.js @@ -71,6 +71,12 @@ class DatabaseService { const phoneNumber = user[config.tables.users.fields.phoneNumber]; const jiandaoyunRecordId = user.jiandaoyun_record_id; + // 手动映射字段名,确保数据库的authorized_region正确映射到user.authorizedRegion + // 这是因为数据库查询结果中的字段名保持原始的蛇形命名,而转换方法使用驼峰命名 + if (config.tables.users.fields.authorizedRegion in user) { + user.authorizedRegion = user[config.tables.users.fields.authorizedRegion]; + } + // 查询负责人信息(usermanagements表) const [userManagements] = await this.connection.execute( `SELECT ${config.tables.userManagements.fields.userName} @@ -120,7 +126,8 @@ class DatabaseService { // 即使该字段的值为null const userWithRecordId = { ...user, - jiandaoyun_record_id: user.jiandaoyun_record_id + // 直接使用之前获取的jiandaoyunRecordId变量,确保字段存在 + jiandaoyun_record_id: jiandaoyunRecordId }; syncData.push({ @@ -268,3 +275,4 @@ class DatabaseService { } module.exports = new DatabaseService(); + diff --git a/test-incremental.js b/test-incremental.js deleted file mode 100644 index 245fcf6..0000000 --- a/test-incremental.js +++ /dev/null @@ -1,46 +0,0 @@ -// 测试增量同步功能 -const DatabaseService = require('./src/services/databaseService'); -const config = require('./src/config/config'); - -async function testIncrementalSync() { - console.log('===== 测试增量同步功能 ====='); - - try { - // 连接数据库 - await DatabaseService.connect(); - - // 检查配置 - console.log('当前同步配置:', JSON.stringify(config.sync, null, 2)); - - // 查询需要同步的数据 - console.log('查询需要同步的数据...'); - const syncData = await DatabaseService.getAllSyncData(); - - console.log(`\n测试结果:`); - console.log(`增量同步模式: ${config.sync.incremental ? '开启' : '关闭'}`); - console.log(`查询到需要同步的数据条数: ${syncData.length}`); - - if (syncData.length > 0) { - console.log('\n前3条数据示例:'); - for (let i = 0; i < Math.min(3, syncData.length); i++) { - console.log(`\n用户ID: ${syncData[i].userId}`); - console.log(`公司: ${syncData[i].user.company}`); - console.log(`联系人: ${syncData[i].user.nickName}`); - console.log(`购买商品数量: ${syncData[i].cartItems.length}`); - console.log(`销售商品数量: ${syncData[i].products.length}`); - } - } - - } catch (error) { - console.error('测试过程中发生错误:', error.message); - } finally { - // 断开数据库连接 - await DatabaseService.disconnect(); - } -} - -// 执行测试 -testIncrementalSync().catch(error => { - console.error('测试执行失败:', error.message); - process.exit(1); -}); \ No newline at end of file