소스 검색

人工外呼回调

zyy 2 주 전
부모
커밋
9956d73986

+ 26 - 10
fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallOutboundCdrServiceImpl.java

@@ -25,7 +25,9 @@ import com.fs.company.mapper.CompanyVoiceRoboticBusinessMapper;
 import com.fs.company.mapper.CompanyVoiceRoboticCallLogCallphoneMapper;
 import com.fs.company.mapper.EasyCallMapper;
 import com.fs.company.param.ExecutionContext;
+import com.fs.company.service.CompanyWorkflowEngine;
 import com.fs.company.vo.easycall.EasyCallCallPhoneVO;
+import com.fs.company.vo.easycall.EasyCallOutBoundVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,6 +41,8 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
+import static com.fs.company.service.impl.call.node.AiCallTaskNode.EASYCALL_WORKFLOW_REDIS_KEY;
+
 /**
  * aiSIP手动外呼通话记录Service业务层处理
  * 
@@ -65,6 +69,10 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
     @Autowired
     private CompanyVoiceRoboticBusinessMapper companyVoiceRoboticBusinessMapper;
 
+    @Autowired
+    private CompanyWorkflowEngine companyWorkflowEngine;
+
+
 
     @Override
     public AiSipCallOutboundCdr selectAiSipCallOutboundCdrById(String id) {
@@ -477,7 +485,8 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
 
         String callType = StringUtils.isBlank(req.getCallType()) ? "03" : req.getCallType();
 
-        EasyCallCallPhoneVO callPhoneRes = easyCallMapper.getCallPhoneInfoByUuid(req.getUuid());
+//        EasyCallCallPhoneVO callPhoneRes = easyCallMapper.getCallPhoneInfoByUuid(req.getUuid());
+        EasyCallOutBoundVO callPhoneRes = easyCallMapper.getOutBoundInfoByUuid(req.getUuid());
         String callBackUuid = UUID.randomUUID().toString();
         CompanyAiWorkflowExec record = currentExecutionMapper.selectByWorkflowInstanceId(req.getWorkflowInstanceId());
         CompanyVoiceRoboticBusiness business = companyVoiceRoboticBusinessMapper.selectOne(new LambdaQueryWrapper<CompanyVoiceRoboticBusiness>()
@@ -503,24 +512,31 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
         if (ObjectUtil.isNotEmpty(business)) {
             companyVoiceRoboticCallLogCallphone.setCallerId(business.getCalleeId());
         }
-        companyVoiceRoboticCallLogCallphone.setRunTime(new Date(callPhoneRes.getCalloutTime()));
+        companyVoiceRoboticCallLogCallphone.setRunTime(new Date(callPhoneRes.getStartTime()));
         companyVoiceRoboticCallLogCallphone.setRunParam(null);
         companyVoiceRoboticCallLogCallphone.setResult(null);
         companyVoiceRoboticCallLogCallphone.setStatus(req.getStatus());
-        companyVoiceRoboticCallLogCallphone.setRecordPath(callPhoneRes.getRecordServerUrl());
-        companyVoiceRoboticCallLogCallphone.setContentList(callPhoneRes.getDialogue());
-        companyVoiceRoboticCallLogCallphone.setCallerNum(callPhoneRes.getTelephone());
-        companyVoiceRoboticCallLogCallphone.setCalleeNum(callPhoneRes.getCallerNumber());
+        companyVoiceRoboticCallLogCallphone.setRecordPath(callPhoneRes.getRecordFilename());
+        companyVoiceRoboticCallLogCallphone.setContentList(callPhoneRes.getChatContent());
+        companyVoiceRoboticCallLogCallphone.setCallerNum(callPhoneRes.getCallee());
+        companyVoiceRoboticCallLogCallphone.setCalleeNum(callPhoneRes.getCaller());
         companyVoiceRoboticCallLogCallphone.setUuid(req.getUuid());
-        companyVoiceRoboticCallLogCallphone.setCallCreateTime(callPhoneRes.getCalloutTime());
-        companyVoiceRoboticCallLogCallphone.setCallAnswerTime(callPhoneRes.getConnectedTime());
-        companyVoiceRoboticCallLogCallphone.setIntention(callPhoneRes.getIntent());
+        companyVoiceRoboticCallLogCallphone.setCallCreateTime(callPhoneRes.getStartTime());
+        companyVoiceRoboticCallLogCallphone.setCallAnswerTime(callPhoneRes.getAnsweredTime());
+//        companyVoiceRoboticCallLogCallphone.setIntention(callPhoneRes.getIntent());
         companyVoiceRoboticCallLogCallphone.setCompanyId(req.getCompanyId());
         companyVoiceRoboticCallLogCallphone.setCompanyUserId(req.getCompanyUserId());
         companyVoiceRoboticCallLogCallphone.setCallTime(Long.valueOf(callPhoneRes.getTimeLen()));
-        companyVoiceRoboticCallLogCallphone.setCost(callPhoneRes.getTotalCost());
+//        companyVoiceRoboticCallLogCallphone.setCost(callPhoneRes.getTotalCost());
         companyVoiceRoboticCallLogCallphone.setCallType(Integer.valueOf(callType));
 
+        Map<String, Object> param = new HashMap<>();
+        param.put("callBackUuid", callBackUuid);
+        param.put("callSource", "callBack");
+        companyWorkflowEngine.resumeFromBlockingNode(req.getWorkflowInstanceId(),record.getCurrentNodeKey(),param);
+
+        redisCache.deleteObject(EASYCALL_WORKFLOW_REDIS_KEY +  callBackUuid);
+
 
         return companyVoiceRoboticCallLogCallphoneMapper.insertCompanyVoiceRoboticCallLogCallphone(companyVoiceRoboticCallLogCallphone);
     }

+ 4 - 0
fs-service/src/main/java/com/fs/company/mapper/EasyCallMapper.java

@@ -3,6 +3,7 @@ package com.fs.company.mapper;
 import com.fs.common.annotation.DataSource;
 import com.fs.common.enums.DataSourceType;
 import com.fs.company.vo.easycall.EasyCallCallPhoneVO;
+import com.fs.company.vo.easycall.EasyCallOutBoundVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -18,4 +19,7 @@ public interface EasyCallMapper {
     @DataSource(DataSourceType.EASYCALL)
     EasyCallCallPhoneVO getCallPhoneInfoByUuid(@Param("uuid") String uuid);
 
+    @DataSource(DataSourceType.EASYCALL)
+    EasyCallOutBoundVO getOutBoundInfoByUuid(@Param("uuid") String uuid);
+
 }

+ 1 - 1
fs-service/src/main/java/com/fs/company/service/impl/CompanyWorkflowEngineImpl.java

@@ -439,7 +439,7 @@ public class CompanyWorkflowEngineImpl implements CompanyWorkflowEngine {
 
             // 检查当前工作流是否处于暂停状态
             if (!Integer.valueOf(ExecutionStatusEnum.PAUSED.getValue()).equals(currentExec.getStatus()) &&
-                !Integer.valueOf(ExecutionStatusEnum.WAITING.getValue()).equals(currentExec.getStatus())) {
+                !Integer.valueOf(ExecutionStatusEnum.WAITING.getValue()).equals(currentExec.getStatus()) && !Integer.valueOf(ExecutionStatusEnum.WAITING_DO_CALL.getValue()).equals(currentExec.getStatus())) {
                 throw new CustomException("工作流未处于暂停状态,无法唤醒: " + workflowInstanceId);
             }
 

+ 52 - 0
fs-service/src/main/java/com/fs/company/vo/easycall/EasyCallOutBoundVO.java

@@ -0,0 +1,52 @@
+package com.fs.company.vo.easycall;
+
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@Data
+@ApiModel("外呼CDR记录")
+public class EasyCallOutBoundVO {
+
+    @ApiModelProperty("主键ID")
+    private String id;
+
+    @ApiModelProperty("主叫号码")
+    private String caller;
+
+    @ApiModelProperty("工号")
+    private String opnum;
+
+    @ApiModelProperty("被叫号码")
+    private String callee;
+
+    @ApiModelProperty("开始时间(时间戳)")
+    private Long startTime;
+
+    @ApiModelProperty("接通时间(时间戳)")
+    private Long answeredTime;
+
+    @ApiModelProperty("挂断时间(时间戳)")
+    private Long endTime;
+
+    @ApiModelProperty("通话UUID")
+    private String uuid;
+
+    @ApiModelProperty("通话类型(audio/video)")
+    private String callType;
+
+    @ApiModelProperty("通话时长(秒)")
+    private Integer timeLen;
+
+    @ApiModelProperty("有效通话时长(秒,接通后)")
+    private Integer timeLenValid;
+
+    @ApiModelProperty("录音文件名")
+    private String recordFilename;
+
+    @ApiModelProperty("对话内容")
+    private String chatContent;
+
+    @ApiModelProperty("挂断原因")
+    private String hangupCause;
+}

+ 4 - 0
fs-service/src/main/resources/mapper/company/EasyCallMapper.xml

@@ -7,5 +7,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="getCallPhoneInfoByUuid" resultType="com.fs.company.vo.easycall.EasyCallCallPhoneVO">
         select * from cc_call_phone where uuid = #{uuid}
     </select>
+    <select id="getOutBoundInfoByUuid" resultType="com.fs.company.vo.easycall.EasyCallOutBoundVO" parameterType="java.lang.String">
+        select * from cc_outbound_cdr where uuid = #{uuid}
+    </select>
+
 
 </mapper>