| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #include "stdafx.h"
- #include "CTaskIvrHoldOn.h"
- #include "LineHolder.h"
- #include "LogicLine.h"
- #include "SessionHolder.h"
- #include "CallSession.h"
- #include "CtiCore.h"
- #include "NetworkCti.h"
- CTaskIvrHoldOn::CTaskIvrHoldOn(CPduEntity &PduEntity) : CTask(PduEntity)
- {
- }
- CTaskIvrHoldOn::~CTaskIvrHoldOn(void)
- {
- }
- BOOL CTaskIvrHoldOn::DoTask()
- {
- // 校验
- if (!Verify()) return FALSE;
- // 设置当前操作类型
- m_pCurrLine->opType() = PDU_CMD_IVR_TURN_HOLDON;
- // 保存随路数据
- CCallSession* pSession = CSessionHolder::GetInstance().findSession(m_pCurrLine->callId());
- if (pSession != NULL)
- pSession->data() = m_CurrCmd.GetDataString(5);
- // 向底层设备发送转人工命令
- LineOpParam pLineOpParam;
- memset(&pLineOpParam, 0, sizeof(pLineOpParam));
- lstrcpy(pLineOpParam.szParam1, m_pCurrLine->callerNum());
- sprintf_s(pLineOpParam.szParam2, PHONE_NUM_LEN, "%u", m_CurrCmd.GetDataUInt(4));
- pLineOpParam.nParam2 = DEV_RES_TYPE_TRUNK;
- //呼叫之前执行会话处理 将CallID赋值给LogiclineExt //tj
- _PrcoCallNode(m_pCurrLine->lineId(), m_CurrCmd.GetDataUInt(4));
- //2019-09-11 颐和随访 转的是内线分机资源
- //2019-09-11 颐和随访项目
- CPduEntity cmdTurnAgent(PDU_CMD_IVR_TURN_HOLDON);
- // by 在转分机的时候使用中继通道,让ivr执行播放保持音,再呼叫分机
- bool b = CCtiCore::GetInstance().getDevLink().exec((long)this, LINE_OP_HOLD, m_pCurrLine->lineId(), &pLineOpParam);
- if (b == TRUE)
- {
- return b;
- }
- else
- {
- CPduEntity cmdholdon(PDU_CMD_IVR_TURN_HOLDON);
- cmdholdon.SetDataInt(0, false);
- CNetworkCti::GetInstance().send2IVR(cmdholdon);
- return FALSE;
- }
- }
- BOOL CTaskIvrHoldOn::Verify()
- {
- // 底层的呼叫转移命令的实现
- CString Info = "412";
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{CTaskIvrHoldOn}: 执行到CTaskIvrHoldOn[%s]"), Info);
- // 线路绑定校验
- if (!_bindLogicLine(m_CurrCmd.GetDataUInt(3)))
- return FALSE;
- // 座席线路是否存在
- CLogicLine* pExtn = CLineHolder::GetInstance().getLogicLine(m_CurrCmd.GetDataUInt(4));
- if (pExtn == NULL)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 线路[%d]执行IVR转座席任务校验时失败:请求的座席分机[%d]不存在"),
- m_pCurrLine->lineId(),
- m_CurrCmd.GetDataUInt(4));
- return FALSE;
- }
- // 座席线路是否空闲
- if (pExtn->status() != INNER_STATE_FREE)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 线路[%d]执行IVR转座席任务校验时失败:请求的座席分机[%d]非空闲"),
- m_pCurrLine->lineId(),
- pExtn->lineId());
- return FALSE;
- } // end if
- return TRUE;
- }
- BOOL CTaskIvrHoldOn::OnDevOpResult(EventOpResult &EvtInfo)
- {
- // 命令返回
- _ProcCmdReturn(EvtInfo.bIsSucceed, true);
- return TRUE;
- }
- void CTaskIvrHoldOn::OnDevOpProcess(EventOpProcess & EvtInfo)
- {
- // 获取对端线路
- CLogicLine *pAssoLine = CLineHolder::GetInstance().getLogicLine(EvtInfo.nAssoLine);
- if (pAssoLine == NULL) return;
- }
|