|
|
@@ -5,11 +5,11 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.fs.common.utils.StringUtils;
|
|
|
import com.fs.common.utils.spring.SpringUtils;
|
|
|
import com.fs.company.domain.*;
|
|
|
+import com.fs.company.mapper.CompanyVoiceRoboticCallLogCallphoneMapper;
|
|
|
import com.fs.company.mapper.CompanyVoiceRoboticCalleesMapper;
|
|
|
import com.fs.company.mapper.CompanyWorkflowNodeMapper;
|
|
|
import com.fs.company.param.ExecutionContext;
|
|
|
import com.fs.company.service.ICompanyVoiceRoboticService;
|
|
|
-import com.fs.company.service.IWorkflowNode;
|
|
|
import com.fs.company.service.easycall.IEasyCallService;
|
|
|
import com.fs.company.service.impl.CompanyVoiceRoboticCallLogCallphoneServiceImpl;
|
|
|
import com.fs.company.vo.AiCallConfigVO;
|
|
|
@@ -21,6 +21,8 @@ import com.fs.company.vo.easycall.EasyCallPhoneItemVO;
|
|
|
import com.fs.company.vo.easycall.EasyCallTaskVO;
|
|
|
import com.fs.enums.ExecutionStatusEnum;
|
|
|
import com.fs.enums.NodeTypeEnum;
|
|
|
+import com.fs.his.config.CidPhoneConfig;
|
|
|
+import com.fs.system.service.ISysConfigService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
import java.util.*;
|
|
|
@@ -46,6 +48,10 @@ public class AiCallTaskNode extends AbstractWorkflowNode {
|
|
|
private final String CALL_FROM_CALLBACK = "callBack";
|
|
|
private final String CALL_FROM_TIMER = "timer";
|
|
|
|
|
|
+ private final ISysConfigService configService = SpringUtils.getBean(ISysConfigService.class);
|
|
|
+
|
|
|
+ private final CompanyVoiceRoboticCallLogCallphoneMapper companyVoiceRoboticCallLogCallphoneMapper = SpringUtils.getBean(CompanyVoiceRoboticCallLogCallphoneMapper.class);;
|
|
|
+
|
|
|
public AiCallTaskNode(String nodeKey, String nodeName, Map<String, Object> properties) {
|
|
|
super(nodeKey, nodeName, properties);
|
|
|
}
|
|
|
@@ -166,11 +172,19 @@ public class AiCallTaskNode extends AbstractWorkflowNode {
|
|
|
super.updateWorkflowStatus(context.getWorkflowInstanceId(), ExecutionStatusEnum.INTERRUPT);
|
|
|
return ExecutionResult.failure().errorMessage("节点配置解析失败").build();
|
|
|
}
|
|
|
+
|
|
|
//执行外呼逻辑 需要传入节点信息
|
|
|
CompanyVoiceRoboticBusiness bus = super.getRoboticBusiness(context.getWorkflowInstanceId());
|
|
|
if (bus == null) {
|
|
|
return ExecutionResult.failure().errorMessage("未找到业务数据").build();
|
|
|
}
|
|
|
+
|
|
|
+ //进入手机号拨打次数校验
|
|
|
+ if(checkPhoneCallLimit(bus.getId())){
|
|
|
+ super.updateWorkflowStatus(context.getWorkflowInstanceId(), ExecutionStatusEnum.INTERRUPT);
|
|
|
+ return ExecutionResult.failure().errorMessage("今日拨打次数已达上限!").build();
|
|
|
+ }
|
|
|
+
|
|
|
//手动外呼配置 1、人工 2、ai外呼
|
|
|
if(Integer.valueOf(1).equals(callConfigVo.getCallMode())){
|
|
|
super.asyncWorkflowForBlockingNode(context.getWorkflowInstanceId(), context.getCurrentNodeKey(), context, ExecutionStatusEnum.WAITING_DO_CALL);
|
|
|
@@ -316,6 +330,22 @@ public class AiCallTaskNode extends AbstractWorkflowNode {
|
|
|
context.setVariable("easyCallBatchId", batchId);
|
|
|
}
|
|
|
|
|
|
+ private boolean checkPhoneCallLimit(Long businessId){
|
|
|
+ String json = configService.selectConfigByKey("cid.config");
|
|
|
+ if(StringUtils.isNotEmpty(json)){//数据存在
|
|
|
+ //转换数据
|
|
|
+ CidPhoneConfig config =JSONObject.parseObject(json,CidPhoneConfig.class);
|
|
|
+ if(config.getEnablePhoneLimitConfig() != null && config.getEnablePhoneLimitConfig()){//开启了拨打限制按钮
|
|
|
+ //获取当前外呼业务电话拨打信息
|
|
|
+ int num = companyVoiceRoboticCallLogCallphoneMapper.countTodayCallsByBusinessId(businessId);
|
|
|
+ if(num >= config.getNumberCalls()){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
// @Override
|
|
|
// protected void postExecute(ExecutionContext context, ExecutionResult result) {
|
|
|
// super.postExecute(context, result);
|