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); 
 | 
        } 
 | 
    } 
 | 
} 
 |