feat(CustomerDetail): 添加对客户扩展字段的处理逻辑
支持处理两种不同格式的表单数据:基础信息+additional_info格式和customerExpandFieldMap格式。当表单数据包含customerExpandFieldMap时,会解析其中的扩展字段并根据不同类型(单选、多选、文本等)提取答案,组合到最终的分析文本中。
This commit is contained in:
@@ -190,47 +190,94 @@ const startBasicAnalysis = async () => {
|
||||
let formInfoText = '暂无表单信息';
|
||||
|
||||
if (Object.keys(formData).length > 0) {
|
||||
const basicInfo = [];
|
||||
const additionalInfo = [];
|
||||
|
||||
// 处理基础信息字段
|
||||
const basicFields = {
|
||||
name: '姓名',
|
||||
mobile: '手机号',
|
||||
occupation: '职业',
|
||||
territory: '地区',
|
||||
child_name: '孩子姓名',
|
||||
child_gender: '孩子性别',
|
||||
child_education: '孩子教育阶段',
|
||||
child_relation: '与孩子关系'
|
||||
};
|
||||
|
||||
Object.entries(basicFields).forEach(([key, label]) => {
|
||||
if (formData[key] && formData[key] !== '暂无' && formData[key] !== '') {
|
||||
basicInfo.push(`${label}: ${formData[key]}`);
|
||||
}
|
||||
});
|
||||
|
||||
// 处理 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}`);
|
||||
console.log(888888,formData);
|
||||
const allInfo = [];
|
||||
|
||||
// 处理第一种格式:基础信息和additional_info
|
||||
if (formData.name || formData.mobile || formData.additional_info) {
|
||||
const basicInfo = [];
|
||||
const additionalInfo = [];
|
||||
|
||||
// 处理基础信息字段
|
||||
const basicFields = {
|
||||
name: '姓名',
|
||||
mobile: '手机号',
|
||||
occupation: '职业',
|
||||
territory: '地区',
|
||||
child_name: '孩子姓名',
|
||||
child_gender: '孩子性别',
|
||||
child_education: '孩子教育阶段',
|
||||
child_relation: '与孩子关系'
|
||||
};
|
||||
|
||||
Object.entries(basicFields).forEach(([key, label]) => {
|
||||
if (formData[key] && formData[key] !== '暂无' && formData[key] !== '') {
|
||||
basicInfo.push(`${label}: ${formData[key]}`);
|
||||
}
|
||||
});
|
||||
|
||||
// 处理 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);
|
||||
}
|
||||
}
|
||||
|
||||
// 组合所有信息
|
||||
const allInfo = [];
|
||||
if (basicInfo.length > 0) {
|
||||
allInfo.push('=== 基础信息 ===');
|
||||
allInfo.push(...basicInfo);
|
||||
// 处理第二种格式:customerExpandFieldMap
|
||||
if (formData.customerExpandFieldMap) {
|
||||
const expandInfo = [];
|
||||
const map = formData.customerExpandFieldMap;
|
||||
|
||||
// 处理所有expand字段
|
||||
Object.entries(map).forEach(([key, value]) => {
|
||||
// 跳过原型链上的属性
|
||||
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);
|
||||
}
|
||||
}
|
||||
if (additionalInfo.length > 0) {
|
||||
allInfo.push('\n=== 问卷信息 ===');
|
||||
allInfo.push(...additionalInfo);
|
||||
}
|
||||
|
||||
|
||||
formInfoText = allInfo.length > 0 ? allInfo.join('\n') : '暂无表单信息';
|
||||
}
|
||||
|
||||
@@ -261,6 +308,8 @@ ${chatInfoText}
|
||||
${callData.length > 0 && callData[0].record_context ? callData[0].record_context : callInfoText}
|
||||
|
||||
请基于以上客户的表单信息、聊天记录和通话记录,分析客户的基本情况、背景信息和初步画像。`;
|
||||
|
||||
console.log(888888,formInfoText);
|
||||
try {
|
||||
await chatService_01.sendMessage(
|
||||
query,
|
||||
|
||||
Reference in New Issue
Block a user