feat(CustomerDetail): 添加对客户扩展字段的处理逻辑

支持处理两种不同格式的表单数据:基础信息+additional_info格式和customerExpandFieldMap格式。当表单数据包含customerExpandFieldMap时,会解析其中的扩展字段并根据不同类型(单选、多选、文本等)提取答案,组合到最终的分析文本中。
This commit is contained in:
2025-08-25 11:23:37 +08:00
parent f1fe585fc4
commit 0347da9cdc

View File

@@ -190,45 +190,92 @@ const startBasicAnalysis = async () => {
let formInfoText = '暂无表单信息'; let formInfoText = '暂无表单信息';
if (Object.keys(formData).length > 0) { if (Object.keys(formData).length > 0) {
const basicInfo = []; console.log(888888,formData);
const additionalInfo = []; const allInfo = [];
// 处理基础信息字段 // 处理第一种格式基础信息和additional_info
const basicFields = { if (formData.name || formData.mobile || formData.additional_info) {
name: '姓名', const basicInfo = [];
mobile: '手机号', const additionalInfo = [];
occupation: '职业',
territory: '地区',
child_name: '孩子姓名',
child_gender: '孩子性别',
child_education: '孩子教育阶段',
child_relation: '与孩子关系'
};
Object.entries(basicFields).forEach(([key, label]) => { // 处理基础信息字段
if (formData[key] && formData[key] !== '暂无' && formData[key] !== '') { const basicFields = {
basicInfo.push(`${label}: ${formData[key]}`); name: '姓名',
} mobile: '手机号',
}); occupation: '职业',
territory: '地区',
child_name: '孩子姓名',
child_gender: '孩子性别',
child_education: '孩子教育阶段',
child_relation: '与孩子关系'
};
// 处理 additional_info 数组 Object.entries(basicFields).forEach(([key, label]) => {
if (formData.additional_info && Array.isArray(formData.additional_info)) { if (formData[key] && formData[key] !== '暂无' && formData[key] !== '') {
formData.additional_info.forEach(item => { basicInfo.push(`${label}: ${formData[key]}`);
if (item.topic && item.answer) {
additionalInfo.push(`${item.topic}\n答案: ${item.answer}`);
} }
}); });
// 处理 additional_info 数组
if (formData.additional_info && Array.isArray(formData.additional_info)) {
formData.additional_info.forEach(item => {
if (item.topic && item.answer) {
additionalInfo.push(`${item.topic}\n答案: ${item.answer}`);
}
});
}
// 添加基础信息
if (basicInfo.length > 0) {
allInfo.push('=== 基础信息 ===');
allInfo.push(...basicInfo);
}
// 添加问卷信息
if (additionalInfo.length > 0) {
allInfo.push('\n=== 问卷信息 ===');
allInfo.push(...additionalInfo);
}
} }
// 组合所有信息 // 处理第二种格式customerExpandFieldMap
const allInfo = []; if (formData.customerExpandFieldMap) {
if (basicInfo.length > 0) { const expandInfo = [];
allInfo.push('=== 基础信息 ==='); const map = formData.customerExpandFieldMap;
allInfo.push(...basicInfo);
} // 处理所有expand字段
if (additionalInfo.length > 0) { Object.entries(map).forEach(([key, value]) => {
allInfo.push('\n=== 问卷信息 ==='); // 跳过原型链上的属性
allInfo.push(...additionalInfo); if (!map.hasOwnProperty(key)) return;
// 如果是对象类型包含key和typeCode的字段
if (value && typeof value === 'object' && value.key) {
const question = value.key;
let answer = '';
// 根据不同的类型处理答案
if (value.typeCode === 'SINGLE_SELECT' || value.typeCode === 'MULTIPLE_SELECT') {
if (value.expandValueList && value.expandValueList.length > 0) {
answer = value.expandValueList.map(item => item.itemName).join('、');
}
} else if (value.typeCode === 'TEXT' || value.typeCode === 'TEXTAREA' || value.typeCode === 'NUMBER') {
// 直接从formData中获取对应的expand值
answer = formData[key] || '';
}
// 只添加有答案的问题
if (answer && answer !== '暂无' && answer !== '') {
expandInfo.push(`${question}\n答案: ${answer}`);
}
}
});
// 添加扩展信息
if (expandInfo.length > 0) {
if (allInfo.length > 0) allInfo.push('\n'); // 如果已有其他信息,添加分隔行
allInfo.push('=== 问卷详细信息 ===');
allInfo.push(...expandInfo);
}
} }
formInfoText = allInfo.length > 0 ? allInfo.join('\n') : '暂无表单信息'; formInfoText = allInfo.length > 0 ? allInfo.join('\n') : '暂无表单信息';
@@ -261,6 +308,8 @@ ${chatInfoText}
${callData.length > 0 && callData[0].record_context ? callData[0].record_context : callInfoText} ${callData.length > 0 && callData[0].record_context ? callData[0].record_context : callInfoText}
请基于以上客户的表单信息、聊天记录和通话记录,分析客户的基本情况、背景信息和初步画像。`; 请基于以上客户的表单信息、聊天记录和通话记录,分析客户的基本情况、背景信息和初步画像。`;
console.log(888888,formInfoText);
try { try {
await chatService_01.sendMessage( await chatService_01.sendMessage(
query, query,