#include "stdafx.h" #include "TaskIvrCall.h" #include "LineHolder.h" #include "LogicLine.h" #include "IvrFlowHolder.h" #include "IvrFlow.h" #include "StatisticsMgr.h" #include "CtiCore.h" CTaskIvrCall::CTaskIvrCall(CPduEntity &PduEntity) : CTask(PduEntity) { } CTaskIvrCall::~CTaskIvrCall(void) { } /***************************************************************** **【函数名称】 DoTask **【函数功能】 Task处理 **【参数】 **【返回值】 void ****************************************************************/ BOOL CTaskIvrCall::DoTask() { // 显示日志 ShowLog(); // 向底层设备发送IVR自动外呼命令 LineOpParam pLineOpParam; memset(&pLineOpParam, 0, sizeof(pLineOpParam)); pLineOpParam.nParam1 = m_CurrCmd.GetDataUInt(6); // 呼叫时长 lstrcpy(pLineOpParam.szParam1, m_CurrCmd.GetDataString(5)); // 主叫号 lstrcpy(pLineOpParam.szParam2, m_CurrCmd.GetDataString(4)); // 被叫号 return CCtiCore::GetInstance().getDevLink().exec((long)this, LINE_OP_PREDICTION_CALL, 0, &pLineOpParam); } /***************************************************************** **【函数名称】 ShowLog **【函数功能】 显示日志 **【参数】 **【返回值】 ****************************************************************/ void CTaskIvrCall::ShowLog() { // 显示日志 ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("IVR->CTI, CMD = [IVR外呼], \ IVR = %d, DestNum = %s, CallTimeOut = %d"), m_CurrCmd.GetDataInt(1), m_CurrCmd.GetDataString(4), m_CurrCmd.GetDataUInt(6)); } /***************************************************************** **【函数名称】 ProcLineOpProcess **【函数功能】 处理设备操作进展 **【参数】 EvtType 消息事件类型;lpContent 消息内容 **【返回值】 ****************************************************************/ void CTaskIvrCall::OnDevOpProcess(EventOpProcess &EvtInfo) { // 线路绑定校验 if(!_bindLogicLine(EvtInfo.nAssoLine)) return; // 设置当前操作类型 m_pCurrLine->opType() = PDU_CMD_IVR_CALL_OUT; // 设置IvrFlow关联线路 CIvrFlowHolder::GetInstance().getFlowByIvrId(m_CurrCmd.GetDataInt(1))->assoLineId() = m_pCurrLine->lineId(); // 创建会话 _PrcoCallNode(m_pCurrLine->lineId(), -1); // 统计自动外呼 REP_EVENT_IVR_CALL_OUT T_EvtIvrCallOut repInfo; memset(&repInfo, 0, sizeof(repInfo)); repInfo.nIvrLineId = EvtInfo.nHostLine; // 线路 lstrcpy(repInfo.szCalleeNum, EvtInfo.szCalleeNum); // 被叫号码 CStatisticsMgr::GetInstance().onCallDetail(m_pCurrLine->callId(), REP_EVENT_IVR_CALL_OUT, m_pCurrLine->lineId(), &repInfo); } /***************************************************************** **【函数名称】 OnDevOpResult **【函数功能】 设备操作结果返回 **【参数】 **【返回值】 void ****************************************************************/ BOOL CTaskIvrCall::OnDevOpResult(EventOpResult &EvtInfo) { m_CurrCmd.SetDataULong(2, m_pCurrLine->callId()); m_CurrCmd.SetDataUInt(3, m_pCurrLine->lineId()); // 命令返回 _ProcCmdReturn(EvtInfo.bIsSucceed, true); return TRUE; }