From 2866f44b619285a48461dcc9aabec4dadb193e2a Mon Sep 17 00:00:00 2001 From: Trae AI Date: Wed, 21 Jan 2026 09:58:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0followup=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=EF=BC=8C=E5=B9=B6=E4=BF=AE=E5=A4=8D=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E5=AD=97=E6=AE=B5=E5=86=99=E5=85=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/config.js | 21 +++++++-- src/services/databaseService.js | 7 +++ src/services/jiandaoyunService.js | 33 ++++++++++++-- test-single-user.js | 72 +++++++++++++++++++++++++++++++ test_jiandaoyun.js | 8 +++- 5 files changed, 134 insertions(+), 7 deletions(-) create mode 100644 test-single-user.js diff --git a/src/config/config.js b/src/config/config.js index 102538b..8049c7c 100644 --- a/src/config/config.js +++ b/src/config/config.js @@ -17,7 +17,14 @@ module.exports = { fields: { userId: 'userId', nickName: 'nickName', - phoneNumber: 'phoneNumber' + phoneNumber: 'phoneNumber', + company: 'company', + level: 'level', + demand: 'demand', + region: 'region', + detailedaddress: 'detailedaddress', + type: 'type', + followup: 'followup' } }, userManagements: { @@ -40,14 +47,22 @@ module.exports = { // 字段映射关系 fieldMapping: { 'userId': '_widget_1767422700667', - 'userName': '_widget_1747117151082' + 'userName': '_widget_1747117151082', + 'company': '_widget_1747117151075', + 'level': '_widget_1755333366982', + 'demand': '_widget_1757035166649', + 'region': '_widget_1749864292852', + 'detailedaddress': '_widget_1747204368174', + 'type': '_widget_1768897870066', + 'followup': '_widget_1767426290793' }, // 子表字段配置 subTableFields: { 'subTable': '_widget_1747117151085', 'nickName': '_widget_1747117151087', - 'phoneNumber': '_widget_1747117151088' + 'phoneNumber': '_widget_1747117151088', + 'detailedaddress': '_widget_1747204368174' }, // 同步配置 diff --git a/src/services/databaseService.js b/src/services/databaseService.js index dbac5f0..8b3a1d5 100644 --- a/src/services/databaseService.js +++ b/src/services/databaseService.js @@ -40,6 +40,13 @@ class DatabaseService { let usersQuery = `SELECT ${config.tables.users.fields.userId}, ${config.tables.users.fields.nickName}, ${config.tables.users.fields.phoneNumber}, + ${config.tables.users.fields.company}, + ${config.tables.users.fields.level}, + ${config.tables.users.fields.demand}, + ${config.tables.users.fields.region}, + ${config.tables.users.fields.detailedaddress}, + ${config.tables.users.fields.type}, + ${config.tables.users.fields.followup}, dataid FROM ${config.tables.users.name}`; diff --git a/src/services/jiandaoyunService.js b/src/services/jiandaoyunService.js index 4f319ae..1c9ed97 100644 --- a/src/services/jiandaoyunService.js +++ b/src/services/jiandaoyunService.js @@ -27,7 +27,9 @@ class JiandaoyunService { '袁嘉莉': 'woxjrqDwAAKLP25CjOCQg77lSv6oYiGQ', '汤敏': 'woxjrqDwAA0_YzPpRrb1THjzYi1zd4Cw', '杨率': 'woxjrqDwAAMkzyxQt_tE7V2GLPF8gokQ', - '李真音': 'woxjrqDwAAZxbx0YzET4gqGkN8693CbQ' + '李真音': 'woxjrqDwAAZxbx0YzET4gqGkN8693CbQ', + '李毅': 'woxjrqDwAAqSLFZnsNy9W61ELGeMazhQ', + '李文涛': 'woxjrqDwAAmm8IhlT0cdaB7DjNmIVLsg' }; } @@ -102,14 +104,39 @@ class JiandaoyunService { console.log('字段映射:', JSON.stringify(mapping, null, 2)); // 使用简道云API v1的正确值格式,使用value字段来包装值 - // 转换需要的字段:userId + // 转换需要的字段:userId, company, level, demand, region, type, followup jiandaoyunData[mapping.userId] = { value: user.userId || '' }; + jiandaoyunData[mapping.company] = { value: user.company || '' }; + jiandaoyunData[mapping.level] = { value: user.level || '' }; + + // 将demand转换为数组格式 + let demandValue = user.demand || ''; + let demandArray = []; + if (demandValue && demandValue !== '-') { + demandArray = demandValue.split(',').map(item => item.trim()); + } + jiandaoyunData[mapping.demand] = { value: demandArray }; + + // 将region转换为数组格式 + let regionValue = user.region || ''; + let regionArray = []; + if (regionValue && regionValue !== '-') { + regionArray = regionValue.split(',').map(item => item.trim()); + } + jiandaoyunData[mapping.region] = { value: regionArray }; + + jiandaoyunData[mapping.type] = { value: user.type || '' }; + + // 转换followup字段 + jiandaoyunData[mapping.followup] = { value: user.followup || '' }; // 处理子表字段 const subTableField = config.subTableFields.subTable; const subTableData = [{ [config.subTableFields.nickName]: { value: user.nickName || '' }, - [config.subTableFields.phoneNumber]: { value: user.phoneNumber || '' } + [config.subTableFields.phoneNumber]: { value: user.phoneNumber || '' }, + // 地址字段直接作为字符串写入子表 + [config.subTableFields.detailedaddress]: { value: user.detailedaddress || '' } }]; jiandaoyunData[subTableField] = { value: subTableData }; diff --git a/test-single-user.js b/test-single-user.js new file mode 100644 index 0000000..3efde98 --- /dev/null +++ b/test-single-user.js @@ -0,0 +1,72 @@ +// 测试单个用户数据同步 +const mysql = require('mysql2/promise'); +const config = require('./src/config/config'); +const jiandaoyunService = require('./src/services/jiandaoyunService'); + +async function testSingleUserSync() { + console.log('===== 测试单个用户数据同步 ====='); + + try { + // 连接数据库 + const connection = await mysql.createConnection(config.db); + + // 查询指定用户数据 + const [users] = await connection.execute( + `SELECT DISTINCT ${config.tables.users.fields.userId}, + ${config.tables.users.fields.nickName}, + ${config.tables.users.fields.phoneNumber}, + ${config.tables.users.fields.company}, + ${config.tables.users.fields.level}, + ${config.tables.users.fields.demand}, + ${config.tables.users.fields.region}, + ${config.tables.users.fields.detailedaddress}, + ${config.tables.users.fields.type}, + dataid + FROM ${config.tables.users.name} + WHERE ${config.tables.users.fields.userId} = ?`, + ['user_1768360161521_zz8rtwtip'] + ); + + if (users.length === 0) { + console.log('未找到指定用户数据'); + return; + } + + const user = users[0]; + console.log('用户数据:', JSON.stringify(user, null, 2)); + + // 查询负责人信息 + const [userManagements] = await connection.execute( + `SELECT ${config.tables.userManagements.fields.userName} + FROM ${config.tables.userManagements.name} + WHERE ${config.tables.userManagements.fields.userId} = ?`, + [user.userId] + ); + + const syncData = [{ + user: user, + userManagement: userManagements[0] || {}, + userId: user.userId + }]; + + // 转换数据格式 + const transformedData = jiandaoyunService.transformDataToJiandaoyunFormat(syncData[0]); + console.log('转换后的数据:', JSON.stringify(transformedData, null, 2)); + + // 检查地址字段是否正确包含在子表中 + const subTableData = transformedData[config.subTableFields.subTable].value; + console.log('子表数据:', JSON.stringify(subTableData, null, 2)); + + // 执行同步 + const results = await jiandaoyunService.batchSubmitData(syncData, connection); + console.log('同步结果:', JSON.stringify(results, null, 2)); + + await connection.end(); + console.log('测试完成'); + } catch (error) { + console.error('测试过程中发生错误:', error.message); + console.error('错误堆栈:', error.stack); + } +} + +testSingleUserSync(); diff --git a/test_jiandaoyun.js b/test_jiandaoyun.js index 3ddb57f..b026d3c 100644 --- a/test_jiandaoyun.js +++ b/test_jiandaoyun.js @@ -9,7 +9,13 @@ async function testJiandaoyunFix() { user: { userId: 'user_1767321160164_rs4adi855', nickName: '杨率', - phoneNumber: '15502828108' + phoneNumber: '15502828108', + company: '测试公司', + level: 'department-sea-pools', + demand: '测试需求', + region: '四川地区', + detailedaddress: '四川省成都市青羊区哈哈哈哈哈哈', + type: 'buyer' }, userManagement: { userName: '何佳芹'