lmx 1 vecka sedan
förälder
incheckning
88ddd54be4

+ 3 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyAiWorkflowExecLogMapper.java

@@ -3,6 +3,7 @@ package com.fs.company.mapper;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.company.domain.CompanyAiWorkflowExecLog;
+import com.fs.company.vo.CallContentVO;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -70,4 +71,6 @@ public interface CompanyAiWorkflowExecLogMapper extends BaseMapper<CompanyAiWork
     void batchInsert(@Param("list") List<CompanyAiWorkflowExecLog> logList);
 
     List<CompanyAiWorkflowExecLog> selectByInstanceIds(List<String> instanceIds);
+
+    List<CallContentVO> selectCallContent(@Param("ids") List<Long> ids);
 }

+ 46 - 24
fs-service/src/main/java/com/fs/company/service/impl/CompanyVoiceRoboticServiceImpl.java

@@ -1541,30 +1541,30 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
                 .filter(Objects::nonNull)
                 .collect(Collectors.toList());
 
-        //拿取业务id
-        List<Long> businessIds = records.stream()
-                .map(WorkflowExecRecordVo::getBusinessId)
-                .filter(Objects::nonNull)
-                .collect(Collectors.toList());
-
-        if (!businessIds.isEmpty()) {
-            List<CompanyVoiceRoboticBusiness> businesses = companyVoiceRoboticBusinessMapper.selectList(new LambdaQueryWrapper<CompanyVoiceRoboticBusiness>()
-                    .in(CompanyVoiceRoboticBusiness::getId, businessIds));
-            if (ObjectUtil.isNotEmpty(businesses)) {
-                Map<Long, CompanyVoiceRoboticBusiness> businessMap = businesses.stream().collect(Collectors.toMap(CompanyVoiceRoboticBusiness::getId, Function.identity()));
-                records.forEach(record -> {
-                    if (record.getBusinessId() != null && businessMap.containsKey(record.getBusinessId())) {
-                        CompanyVoiceRoboticBusiness business = businessMap.get(record.getBusinessId());
-                        CompanyVoiceRoboticCallLogCallphone callLogCallphone = companyVoiceRoboticCallLogCallphoneMapper.selectOne(new LambdaQueryWrapper<CompanyVoiceRoboticCallLogCallphone>()
-                                .eq(CompanyVoiceRoboticCallLogCallphone::getRoboticId, business.getRoboticId())
-                                .eq(CompanyVoiceRoboticCallLogCallphone::getCallerId, business.getCalleeId()));
-                        if (ObjectUtil.isNotEmpty(callLogCallphone)) {
-                            record.setContentList(callLogCallphone.getContentList());
-                        }
-                    }
-                });
-            }
-        }
+//        //拿取业务id
+//        List<Long> businessIds = records.stream()
+//                .map(WorkflowExecRecordVo::getBusinessId)
+//                .filter(Objects::nonNull)
+//                .collect(Collectors.toList());
+//
+//        if (!businessIds.isEmpty()) {
+//            List<CompanyVoiceRoboticBusiness> businesses = companyVoiceRoboticBusinessMapper.selectList(new LambdaQueryWrapper<CompanyVoiceRoboticBusiness>()
+//                    .in(CompanyVoiceRoboticBusiness::getId, businessIds));
+//            if (ObjectUtil.isNotEmpty(businesses)) {
+//                Map<Long, CompanyVoiceRoboticBusiness> businessMap = businesses.stream().collect(Collectors.toMap(CompanyVoiceRoboticBusiness::getId, Function.identity()));
+//                records.forEach(record -> {
+//                    if (record.getBusinessId() != null && businessMap.containsKey(record.getBusinessId())) {
+//                        CompanyVoiceRoboticBusiness business = businessMap.get(record.getBusinessId());
+//                        CompanyVoiceRoboticCallLogCallphone callLogCallphone = companyVoiceRoboticCallLogCallphoneMapper.selectOne(new LambdaQueryWrapper<CompanyVoiceRoboticCallLogCallphone>()
+//                                .eq(CompanyVoiceRoboticCallLogCallphone::getRoboticId, business.getRoboticId())
+//                                .eq(CompanyVoiceRoboticCallLogCallphone::getCallerId, business.getCalleeId()));
+//                        if (ObjectUtil.isNotEmpty(callLogCallphone)) {
+//                            record.setContentList(callLogCallphone.getContentList());
+//                        }
+//                    }
+//                });
+//            }
+//        }
 
         if (!instanceIds.isEmpty()) {
             List<CompanyAiWorkflowExecLog> allLogs = companyAiWorkflowExecLogMapper.selectByInstanceIds(instanceIds);
@@ -1668,6 +1668,9 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
         if (logs == null || logs.isEmpty()) {
             return new ArrayList<>();
         }
+        List<CompanyAiWorkflowExecLog> callLogs = logs.stream().filter(a -> "外呼".equals(a.getNodeName())).collect(Collectors.toList());
+        HashMap<Long,String> callContentMap = selectCallContentByCallLogs(callLogs);
+
         return logs.stream().map(log -> {
             WorkflowExecRecordVo.NodeExecLogVo vo = new WorkflowExecRecordVo.NodeExecLogVo();
             vo.setId(log.getId());
@@ -1682,7 +1685,26 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
             vo.setDuration(log.getDuration());
             vo.setErrorMessage(log.getErrorMessage());
             vo.setOutputData(log.getOutputData());
+            vo.setNodeContentList(callContentMap.get(log.getId()));
             return vo;
         }).collect(Collectors.toList());
     }
+
+    /**
+     * 根据外呼记录得到外呼内容
+     * @param callLogs
+     * @return
+     */
+    public  HashMap<Long,String> selectCallContentByCallLogs(List<CompanyAiWorkflowExecLog> callLogs){
+        List<Long> ids = callLogs.stream().map(a -> a.getId()).collect(Collectors.toList());
+        List<CallContentVO> callContentVOS = companyAiWorkflowExecLogMapper.selectCallContent(ids);
+        if(null != callContentVOS && !callContentVOS.isEmpty()){
+            HashMap<Long,String> map = new HashMap<>();
+            callContentVOS.forEach(a -> map.put(a.getLogId(),a.getCallContent()));
+            return map;
+        }
+        else{
+            return new HashMap<>();
+        }
+    }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/company/service/impl/call/node/AiCallTaskNode.java

@@ -295,7 +295,7 @@ public class AiCallTaskNode extends AbstractWorkflowNode {
         // 3. 构建创建任务参数(AI 外呼模式:taskType=1)
         EasyCallCreateTaskParam createParam = new EasyCallCreateTaskParam();
         // 任务名称:使用工作流实例 ID + 被叫人 ID 组合,保证唯一性
-        createParam.setBatchName("workflow_" + context.getWorkflowInstanceId() + "_" + calleeId);
+        createParam.setBatchName(robotic.getName() + "_" + context.getWorkflowInstanceId() + "_" + calleeId);
         if (null != callConfigVo.getMaxConcurrency())
             createParam.setThreadNum(Long.valueOf(callConfigVo.getMaxConcurrency()));
         else {

+ 16 - 0
fs-service/src/main/java/com/fs/company/vo/CallContentVO.java

@@ -0,0 +1,16 @@
+package com.fs.company.vo;
+
+import lombok.Data;
+
+/**
+ * @author MixLiu
+ * @date 2026/4/16 16:39
+ * @description
+ */
+@Data
+public class CallContentVO {
+
+    private Long logId;
+
+    private String callContent;
+}

+ 5 - 0
fs-service/src/main/java/com/fs/company/vo/WorkflowExecRecordVo.java

@@ -195,5 +195,10 @@ public class WorkflowExecRecordVo {
          * 输出数据
          */
         private String outputData;
+
+        /**
+         * 外呼节点的对话记录
+         */
+        private String nodeContentList;
     }
 }

+ 22 - 0
fs-service/src/main/resources/mapper/company/CompanyAiWorkflowExecLogMapper.xml

@@ -161,4 +161,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
         ORDER BY start_time ASC
     </select>
+
+    <select id="selectCallContent" resultType="com.fs.company.vo.CallContentVO" >
+        SELECT
+        t1.id as logId,
+        t2.content_list as callContent
+        FROM
+        company_ai_workflow_exec_log t1
+        INNER JOIN company_voice_robotic_call_log_callphone t2
+        ON
+        JSON_UNQUOTE(
+        JSON_EXTRACT(
+        JSON_UNQUOTE(input_data),
+        JSON_UNQUOTE('$.callBackUuid')
+        )
+        ) = t2.callback_uuid
+        WHERE
+        t1.id IN
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+
+    </select>
 </mapper>