|
|
|
@ -6,9 +6,8 @@ class JiandaoyunService { |
|
|
|
constructor() { |
|
|
|
// 简道云API基础配置
|
|
|
|
this.baseUrl = 'https://api.jiandaoyun.com'; |
|
|
|
this.apiKey = config.jiandaoyun.apiKey; |
|
|
|
this.appId = config.jiandaoyun.appId; |
|
|
|
this.entryId = config.jiandaoyun.entryId; |
|
|
|
// 从配置中获取apiKey(所有表单共享)
|
|
|
|
this.apiKey = config.jiandaoyun.default.apiKey; |
|
|
|
|
|
|
|
// 人员简道云编号映射表
|
|
|
|
this.userNameToUsernameMap = { |
|
|
|
@ -33,11 +32,26 @@ class JiandaoyunService { |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
// 根据syncStatus获取对应的表单配置
|
|
|
|
getFormConfig(syncStatus) { |
|
|
|
// 如果syncStatus为0或未定义,使用默认配置
|
|
|
|
if (!syncStatus || syncStatus === 0) { |
|
|
|
return config.jiandaoyun.default; |
|
|
|
} |
|
|
|
// 否则使用对应的配置,如果不存在则使用默认配置
|
|
|
|
return config.jiandaoyun[syncStatus] || config.jiandaoyun.default; |
|
|
|
} |
|
|
|
|
|
|
|
// 提交数据到简道云表单
|
|
|
|
async submitDataToForm(data, userManagement = null) { |
|
|
|
async submitDataToForm(data, userManagement = null, syncStatus = 0) { |
|
|
|
try { |
|
|
|
console.log('准备提交数据到简道云:', JSON.stringify(data, null, 2)); |
|
|
|
|
|
|
|
// 根据syncStatus获取对应的表单配置
|
|
|
|
const formConfig = this.getFormConfig(syncStatus); |
|
|
|
const appId = formConfig.appId; |
|
|
|
const entryId = formConfig.entryId; |
|
|
|
|
|
|
|
// 使用简道云API v5版本,支持data_creator参数
|
|
|
|
const url = `${this.baseUrl}/api/v5/app/entry/data/create`; |
|
|
|
const headers = { |
|
|
|
@ -61,8 +75,8 @@ class JiandaoyunService { |
|
|
|
|
|
|
|
// 构建请求体,添加data_creator参数
|
|
|
|
const payload = { |
|
|
|
app_id: this.appId, |
|
|
|
entry_id: this.entryId, |
|
|
|
app_id: appId, |
|
|
|
entry_id: entryId, |
|
|
|
data: data, |
|
|
|
data_creator: dataCreator |
|
|
|
}; |
|
|
|
@ -92,11 +106,16 @@ class JiandaoyunService { |
|
|
|
} |
|
|
|
|
|
|
|
// 将数据库数据转换为简道云表单所需格式
|
|
|
|
transformDataToJiandaoyunFormat(databaseData) { |
|
|
|
transformDataToJiandaoyunFormat(databaseData, syncStatus) { |
|
|
|
console.log('开始转换数据:', JSON.stringify(databaseData, null, 2)); |
|
|
|
console.log('使用的syncStatus:', syncStatus); |
|
|
|
|
|
|
|
// 根据syncStatus获取对应的表单配置
|
|
|
|
const formConfig = this.getFormConfig(syncStatus); |
|
|
|
const mapping = formConfig.fieldMapping; |
|
|
|
const subTableConfig = formConfig.subTableFields; |
|
|
|
|
|
|
|
const jiandaoyunData = {}; |
|
|
|
const mapping = config.fieldMapping; |
|
|
|
|
|
|
|
// 转换主表数据
|
|
|
|
const user = databaseData.user; |
|
|
|
@ -131,12 +150,12 @@ class JiandaoyunService { |
|
|
|
jiandaoyunData[mapping.followup] = { value: user.followup || '' }; |
|
|
|
|
|
|
|
// 处理子表字段
|
|
|
|
const subTableField = config.subTableFields.subTable; |
|
|
|
const subTableField = subTableConfig.subTable; |
|
|
|
const subTableData = [{ |
|
|
|
[config.subTableFields.nickName]: { value: user.nickName || '' }, |
|
|
|
[config.subTableFields.phoneNumber]: { value: user.phoneNumber || '' }, |
|
|
|
[subTableConfig.nickName]: { value: user.nickName || '' }, |
|
|
|
[subTableConfig.phoneNumber]: { value: user.phoneNumber || '' }, |
|
|
|
// 地址字段直接作为字符串写入子表
|
|
|
|
[config.subTableFields.detailedaddress]: { value: user.detailedaddress || '' } |
|
|
|
[subTableConfig.detailedaddress]: { value: user.detailedaddress || '' } |
|
|
|
}]; |
|
|
|
jiandaoyunData[subTableField] = { value: subTableData }; |
|
|
|
|
|
|
|
@ -209,27 +228,31 @@ class JiandaoyunService { |
|
|
|
console.log(`从数据库获取到简道云记录ID: ${recordId}`); |
|
|
|
} |
|
|
|
|
|
|
|
// 获取sync_statuss值,默认为0
|
|
|
|
const syncStatus = item.user[config.sync.statusField] || 0; |
|
|
|
console.log(`当前用户的sync_statuss值: ${syncStatus}`); |
|
|
|
|
|
|
|
if (recordId) { |
|
|
|
console.log(`使用记录ID ${recordId} 更新数据`); |
|
|
|
|
|
|
|
// 转换数据格式
|
|
|
|
const jiandaoyunData = this.transformDataToJiandaoyunFormat(item); |
|
|
|
// 转换数据格式,传递syncStatus
|
|
|
|
const jiandaoyunData = this.transformDataToJiandaoyunFormat(item, syncStatus); |
|
|
|
|
|
|
|
try { |
|
|
|
// 更新数据,传递userManagement参数
|
|
|
|
const result = await this.updateDataInForm(recordId, jiandaoyunData, item.userManagement); |
|
|
|
// 更新数据,传递userManagement参数和syncStatus
|
|
|
|
const result = await this.updateDataInForm(recordId, jiandaoyunData, item.userManagement, syncStatus); |
|
|
|
|
|
|
|
// 更新数据库中的同步状态
|
|
|
|
if (dbConnection && item.user && item.user.userId) { |
|
|
|
try { |
|
|
|
console.log(`更新用户 ${item.user.userId} 的同步状态`); |
|
|
|
console.log(`更新用户 ${item.user.userId} 的同步状态为${config.sync.syncedValue}`); |
|
|
|
const [updateResult] = await dbConnection.execute( |
|
|
|
`UPDATE ${config.tables.users.name} SET ${config.sync.statusField} = ${config.sync.syncedValue} WHERE userId = ?`, |
|
|
|
[item.user.userId] |
|
|
|
); |
|
|
|
|
|
|
|
if (updateResult.affectedRows > 0) { |
|
|
|
console.log(`✅ 成功更新用户 ${item.user.userId} 的同步状态`); |
|
|
|
console.log(`✅ 成功更新用户 ${item.user.userId} 的同步状态为${config.sync.syncedValue}`); |
|
|
|
} else { |
|
|
|
console.log(`⚠️ 更新用户 ${item.user.userId} 的同步状态失败: 未找到匹配的用户`); |
|
|
|
} |
|
|
|
@ -271,11 +294,11 @@ class JiandaoyunService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 转换数据格式
|
|
|
|
const jiandaoyunData = this.transformDataToJiandaoyunFormat(item); |
|
|
|
// 转换数据格式,传递syncStatus
|
|
|
|
const jiandaoyunData = this.transformDataToJiandaoyunFormat(item, syncStatus); |
|
|
|
|
|
|
|
// 提交数据,传递userManagement参数
|
|
|
|
const result = await this.submitDataToForm(jiandaoyunData, item.userManagement); |
|
|
|
// 提交数据,传递userManagement参数和syncStatus
|
|
|
|
const result = await this.submitDataToForm(jiandaoyunData, item.userManagement, syncStatus); |
|
|
|
|
|
|
|
// 保存返回的记录ID到数据库
|
|
|
|
console.log('检查返回结果结构:', JSON.stringify(result, null, 2)); |
|
|
|
@ -286,7 +309,7 @@ class JiandaoyunService { |
|
|
|
|
|
|
|
if (dbConnection && item.user && item.user.userId) { |
|
|
|
try { |
|
|
|
console.log(`准备更新用户 ${item.user.userId} 的dataid为 ${newRecordId} 并设置同步状态`); |
|
|
|
console.log(`准备更新用户 ${item.user.userId} 的dataid为 ${newRecordId} 并设置同步状态为${config.sync.syncedValue}`); |
|
|
|
const [updateResult] = await dbConnection.execute( |
|
|
|
`UPDATE ${config.tables.users.name} SET dataid = ?, ${config.sync.statusField} = ${config.sync.syncedValue} WHERE userId = ?`, |
|
|
|
[newRecordId, item.user.userId] |
|
|
|
@ -294,7 +317,7 @@ class JiandaoyunService { |
|
|
|
|
|
|
|
console.log(`数据库更新结果:`, updateResult); |
|
|
|
if (updateResult.affectedRows > 0) { |
|
|
|
console.log(`✅ 成功将简道云记录ID ${newRecordId} 保存到数据库并更新同步状态`); |
|
|
|
console.log(`✅ 成功将简道云记录ID ${newRecordId} 保存到数据库并更新同步状态为${config.sync.syncedValue}`); |
|
|
|
} else { |
|
|
|
console.log(`⚠️ 更新用户 ${item.user.userId} 的dataid和同步状态失败: 未找到匹配的用户`); |
|
|
|
} |
|
|
|
@ -349,8 +372,13 @@ class JiandaoyunService { |
|
|
|
} |
|
|
|
|
|
|
|
// 更新简道云表单中的数据
|
|
|
|
async updateDataInForm(recordId, data, userManagement = null) { |
|
|
|
async updateDataInForm(recordId, data, userManagement = null, syncStatus = 0) { |
|
|
|
try { |
|
|
|
// 根据syncStatus获取对应的表单配置
|
|
|
|
const formConfig = this.getFormConfig(syncStatus); |
|
|
|
const appId = formConfig.appId; |
|
|
|
const entryId = formConfig.entryId; |
|
|
|
|
|
|
|
// 使用简道云API v5版本,支持data_creator参数
|
|
|
|
const url = `${this.baseUrl}/api/v5/app/entry/data/update`; |
|
|
|
const headers = { |
|
|
|
@ -374,8 +402,8 @@ class JiandaoyunService { |
|
|
|
|
|
|
|
// 构建更新请求体:记录ID和要更新的数据
|
|
|
|
const payload = { |
|
|
|
app_id: this.appId, |
|
|
|
entry_id: this.entryId, |
|
|
|
app_id: appId, |
|
|
|
entry_id: entryId, |
|
|
|
data_id: recordId, |
|
|
|
data: data, |
|
|
|
data_creator: dataCreator |
|
|
|
@ -389,13 +417,13 @@ class JiandaoyunService { |
|
|
|
console.log('更新响应:', JSON.stringify(response.data, null, 2)); |
|
|
|
return response.data; |
|
|
|
} catch (error) { |
|
|
|
console.error('更新数据失败:', error.message); |
|
|
|
if (error.response) { |
|
|
|
console.error('响应状态:', error.response.status); |
|
|
|
console.error('响应数据:', JSON.stringify(error.response.data, null, 2)); |
|
|
|
console.error('更新数据失败:', error.message); |
|
|
|
if (error.response) { |
|
|
|
console.error('响应状态:', error.response.status); |
|
|
|
console.error('响应数据:', JSON.stringify(error.response.data, null, 2)); |
|
|
|
} |
|
|
|
throw error; |
|
|
|
} |
|
|
|
throw error; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 测试简道云API连接
|
|
|
|
|