zyy пре 2 недеља
родитељ
комит
f4ab70b2f0

+ 2 - 0
fs-service/src/main/java/com/fs/aiSipCall/param/ApiCallRecordByUuidQueryParams.java

@@ -27,5 +27,7 @@ public class ApiCallRecordByUuidQueryParams implements Serializable {
 
     private Long companyUserId;
 
+    private String intent;
+
 
 }

+ 28 - 3
fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallOutboundCdrServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fs.aiSipCall.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -26,14 +27,19 @@ 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.service.impl.call.node.AiCallTaskNode;
+import com.fs.company.vo.CidConfigVO;
 import com.fs.company.vo.easycall.EasyCallCallPhoneVO;
 import com.fs.company.vo.easycall.EasyCallOutBoundVO;
+import com.fs.system.service.ISysConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.util.*;
@@ -71,6 +77,11 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
 
     @Autowired
     private CompanyWorkflowEngine companyWorkflowEngine;
+    @Autowired
+    private ISysConfigService configService;
+
+    private static final BigDecimal DEFAULT_CALL_CHARGE = new BigDecimal("0.12");
+    private static final BigDecimal ONE_MINUTES_SECOND = new BigDecimal("60");
 
 
 
@@ -523,13 +534,27 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
         companyVoiceRoboticCallLogCallphone.setUuid(req.getUuid());
         companyVoiceRoboticCallLogCallphone.setCallCreateTime(callPhoneRes.getStartTime());
         companyVoiceRoboticCallLogCallphone.setCallAnswerTime(callPhoneRes.getAnsweredTime());
-//        companyVoiceRoboticCallLogCallphone.setIntention(callPhoneRes.getIntent());
+        companyVoiceRoboticCallLogCallphone.setIntention(req.getIntent());
         companyVoiceRoboticCallLogCallphone.setCompanyId(req.getCompanyId());
         companyVoiceRoboticCallLogCallphone.setCompanyUserId(req.getCompanyUserId());
         companyVoiceRoboticCallLogCallphone.setCallTime(Long.valueOf(callPhoneRes.getTimeLen()));
-//        companyVoiceRoboticCallLogCallphone.setCost(callPhoneRes.getTotalCost());
         companyVoiceRoboticCallLogCallphone.setCallType(Integer.valueOf(callType));
 
+        String json = configService.selectConfigByKey("cid.config");
+        CidConfigVO cidConfigVO = JSONUtil.toBean(json, CidConfigVO.class);
+        BigDecimal callCharge = cidConfigVO.getCallCharge();
+        //
+        if (null == callCharge) {
+            callCharge = DEFAULT_CALL_CHARGE;
+        }
+        //向上取整分钟数
+        BigDecimal divide = new BigDecimal(companyVoiceRoboticCallLogCallphone.getCallTime()).divide(ONE_MINUTES_SECOND, 0, RoundingMode.CEILING);
+        BigDecimal multiply = divide.multiply(callCharge);
+        companyVoiceRoboticCallLogCallphone.setCost(multiply);
+
+
+        int i = companyVoiceRoboticCallLogCallphoneMapper.insertCompanyVoiceRoboticCallLogCallphone(companyVoiceRoboticCallLogCallphone);
+
         Map<String, Object> param = new HashMap<>();
         param.put("callBackUuid", callBackUuid);
         param.put("callSource", "callBack");
@@ -538,7 +563,7 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
         redisCache.deleteObject(EASYCALL_WORKFLOW_REDIS_KEY +  callBackUuid);
 
 
-        return companyVoiceRoboticCallLogCallphoneMapper.insertCompanyVoiceRoboticCallLogCallphone(companyVoiceRoboticCallLogCallphone);
+        return i;
     }
 
 

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

@@ -439,7 +439,8 @@ 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_DO_CALL.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);
             }
 

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

@@ -150,7 +150,8 @@ public abstract class AbstractWorkflowNode implements IWorkflowNode {
             context.setVariable("currentNode", node);
             // 允许 PAUSED 或 WAITING 状态继续执行
             if (!Integer.valueOf(ExecutionStatusEnum.PAUSED.getValue()).equals(companyAiWorkflowExec.getStatus())
-                    && !Integer.valueOf(ExecutionStatusEnum.WAITING.getValue()).equals(companyAiWorkflowExec.getStatus())) {
+                    && !Integer.valueOf(ExecutionStatusEnum.WAITING.getValue()).equals(companyAiWorkflowExec.getStatus())
+                    && !Integer.valueOf(ExecutionStatusEnum.WAITING_DO_CALL.getValue()).equals(companyAiWorkflowExec.getStatus())) {
                 log.error("工作流状态不符合 - workflowInstanceId: {}, 当前状态: {}, 期望状态: PAUSED({}) 或 WAITING({})",
                         context.getWorkflowInstanceId(), companyAiWorkflowExec.getStatus(),
                         ExecutionStatusEnum.PAUSED.getValue(), ExecutionStatusEnum.WAITING.getValue());