package com.ruoyi.web.task;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.ruoyi.common.core.redis.RedisCache;
|
import com.ruoyi.common.utils.DtoConversionUtils;
|
import com.ruoyi.common.utils.uuid.IdUtils;
|
import com.smartor.config.PhoneUtils;
|
import com.smartor.config.RobotPhoneUtils;
|
import com.smartor.domain.*;
|
import com.smartor.domain.robot.RobotData;
|
import com.smartor.domain.robot.RobotDataConfig;
|
import com.smartor.domain.robot.RobotIdlenumVO;
|
import com.smartor.domain.robot.RobotScritpTemplateVO;
|
|
import java.util.*;
|
import java.util.concurrent.TimeUnit;
|
|
public class PhoneTask implements Runnable {
|
private ServiceSubtask ivrTaskSingle;
|
private List<IvrTaskTemplateScriptVO> ivrTaskTemplateScriptVO;
|
private RedisCache redisCache;
|
private IvrTaskTemplateVO ivrTaskTemplateVO;
|
private String phonePath;
|
private RobotPhoneUtils robotPhoneUtils;
|
|
|
public PhoneTask(ServiceSubtask ivrTaskSingle, IvrTaskTemplateVO ivrTaskTemplateVO, RedisCache redisCache, String phonePath, RobotPhoneUtils robotPhoneUtils) {
|
this.ivrTaskSingle = DtoConversionUtils.sourceToTarget(ivrTaskSingle, ServiceSubtask.class);
|
this.ivrTaskTemplateScriptVO = DtoConversionUtils.sourceToTarget(ivrTaskTemplateVO.getIvrTaskTemplateScriptVOList(), IvrTaskTemplateScriptVO.class);
|
this.ivrTaskTemplateVO = DtoConversionUtils.sourceToTarget(ivrTaskTemplateVO, IvrTaskTemplateVO.class);
|
this.redisCache = redisCache;
|
this.phonePath = phonePath;
|
this.robotPhoneUtils = robotPhoneUtils;
|
}
|
|
@Override
|
public void run() {
|
if (phonePath.equals("1")) {
|
//上海的电话拨打
|
try {
|
//获取电话组,查看哪些电话可以使用
|
PhoneUtils phoneUtils = new PhoneUtils();
|
final String uuid = IdUtils.randomUUID();
|
//获取所有的“通配符”键值对
|
ObjectMapper objectMapper = new ObjectMapper();
|
Map<String, Map<String, String>> ivrTaskSingleMmap = objectMapper.readValue(ivrTaskSingle.getTextParam(), Map.class);
|
List<Map<String, String>> mapList = new ArrayList<>();
|
if (!Objects.isNull(ivrTaskSingleMmap)) {
|
for (Map<String, String> map : ivrTaskSingleMmap.values()) {
|
mapList.add(map);
|
}
|
//将模板问题话术里的通配符替换
|
for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : ivrTaskTemplateScriptVO) {
|
for (Map<String, String> map : mapList) {
|
for (String key : map.keySet()) {
|
ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace(key, map.get(key)));
|
}
|
}
|
}
|
}
|
Map<String, Object> objectMap = new HashMap<>();
|
objectMap.put("ivrTaskSingle", ivrTaskSingle);
|
objectMap.put("ivrTaskTemplateScriptVO", ivrTaskTemplateScriptVO);
|
//将数据放到redis中,方便在回调方法里获取
|
redisCache.setCacheObject(uuid, objectMap, 120, TimeUnit.MINUTES);
|
|
//记录首次问题
|
QuestionMessage returnQues = new QuestionMessage();
|
returnQues.setKcb(ivrTaskTemplateVO.getRevisitBefore());
|
for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : ivrTaskTemplateScriptVO) {
|
if (ivrTaskTemplateScriptVO.getTargetid() == ivrTaskTemplateVO.getFirstQuestionNum().intValue()) {
|
returnQues.setNowQuestion(ivrTaskTemplateScriptVO);
|
}
|
}
|
returnQues.setQuestionList(ivrTaskTemplateScriptVO);
|
//将问题,和模板信息放到redis中
|
redisCache.setCacheObject(uuid + "returnQues", returnQues, 120, TimeUnit.MINUTES);
|
redisCache.setCacheObject(uuid + "ivrTaskTemplateVO", ivrTaskTemplateVO, 120, TimeUnit.MINUTES);
|
|
System.out.println("----------------uuID为 :" + uuid + " " + ivrTaskSingle.getSendname() + " " + returnQues.getNowQuestion().getScriptContent() + " " + ivrTaskSingle.getPhone());
|
|
//先将话术放到ob_queue队列中
|
IvrTaskcallPhoneMQ ivrTaskcallPhoneMQ = new IvrTaskcallPhoneMQ();
|
ivrTaskcallPhoneMQ.setScript(ivrTaskTemplateVO.getRevisitBefore() + returnQues.getNowQuestion().getScriptContent());
|
ivrTaskcallPhoneMQ.setType("1");
|
ivrTaskcallPhoneMQ.setUuid(uuid);
|
String data = JSON.toJSONString(ivrTaskcallPhoneMQ);
|
// rabbitMqCallPhoneConfig.sendMessage("phone_exchange", "phone.ob1", data, 0L);
|
|
//调用机器人电话,开始电话
|
String ob = phoneUtils.ob("", "", "", "", "", "", "", ivrTaskSingle.getPhone(), uuid, true);
|
System.out.println("----------------uuID为 :" + uuid + " " + ivrTaskSingle.getSendname() + " " + returnQues.getNowQuestion().getScriptContent() + " " + ivrTaskSingle.getPhone() + "----------已经拨打");
|
Map<String, String> obMap = objectMapper.readValue(ob, Map.class);
|
Thread.sleep(1000);
|
redisCache.setCacheObject(uuid + "state_id", "0", 10, TimeUnit.MINUTES);
|
// rabbitMqCallPhoneConfig.sendMessage("phone_exchange", "phone.ob1", data, 0L);
|
//这里先注释,state_id,电话那边,只能返回6,不能返回0,还需要电话那边进行修改,那边修改之后,上面两行可删除,将下面的解开注释
|
// if (obMap.get("state_id").equals("0")) {
|
// // 说明打通了
|
// redisCache.setCacheObject(uuid + "state_id", "0", 10, TimeUnit.MINUTES);
|
// } else {
|
// while (true) {
|
// Thread.sleep(2000);
|
// redisCache.setCacheObject(uuid + "state_id", "0", 10, TimeUnit.MINUTES);
|
// }
|
// }
|
System.out.println("OB的值为:" + ob);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
} else if (phonePath.equals("2")) {
|
//杭州的电话拨打
|
RobotScritpTemplateVO robotScritpTemplateVO = new RobotScritpTemplateVO();
|
robotScritpTemplateVO.setNotes("aa");
|
robotScritpTemplateVO.setBs_uuid(UUID.randomUUID().toString());
|
robotScritpTemplateVO.setDnis(ivrTaskSingle.getPhone());
|
robotScritpTemplateVO.setSpecify_ch(false);
|
robotScritpTemplateVO.setTime_stamp(1566227782278333L);
|
robotScritpTemplateVO.setEngine("ali");
|
robotScritpTemplateVO.setAsr_sample("8000");
|
robotScritpTemplateVO.setAsr_ent("ZurNHpaQLq6P55YS");
|
robotScritpTemplateVO.setTts_ent("ZurNHpaQLq6P55YS");
|
robotScritpTemplateVO.setTts_vcn("Aixia");
|
robotScritpTemplateVO.setTts_volume(100);
|
robotScritpTemplateVO.setTts_speed(-300);
|
robotScritpTemplateVO.setDial_mode("呼叫对接方式,FS注册到网关、网关注册到FS、IP对接、IP校验账号对接");
|
robotScritpTemplateVO.setDial_server("call_out_group,192.168.2.108:5060");
|
robotScritpTemplateVO.setOutbound_codes("PCMU,PCMA,OPUS,G722");
|
robotScritpTemplateVO.setAuto_test(true);
|
RobotData robotData = new RobotData();
|
RobotDataConfig robotDataConfig = new RobotDataConfig();
|
robotDataConfig.setTemplate_name("inbound_88008001_16k_utf8.json");
|
robotData.setConfig(robotDataConfig);
|
robotScritpTemplateVO.setData(robotData);
|
|
RobotIdlenumVO robotIdlenumVO = DtoConversionUtils.sourceToTarget(robotScritpTemplateVO, RobotIdlenumVO.class);
|
// String idlenum = robotPhoneUtils.idlenum(robotIdlenumVO);
|
// System.out.println(idlenum);
|
robotPhoneUtils.outbound(robotScritpTemplateVO);
|
}
|
}
|
}
|