中间件标准版5.1git,去除基础模块

TaskDevCall.cpp 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "stdafx.h"
  2. #include "TaskDevCall.h"
  3. #include "Task.h"
  4. #include "LineHolder.h"
  5. #include "LogicLine.h"
  6. #include "LogicLineExt.h"
  7. #include "StatisticsMgr.h"
  8. #include "NetworkCti.h"
  9. #include "CtiCore.h"
  10. CTaskDevCall::CTaskDevCall(EventDevOperation &DevOpInfo): CTask(DevOpInfo)
  11. {
  12. }
  13. CTaskDevCall::~CTaskDevCall(void)
  14. {
  15. }
  16. /*****************************************************************
  17. **【函数名称】 DoTask
  18. **【函数功能】 Task处理
  19. **【参数】
  20. **【返回值】 void
  21. ****************************************************************/
  22. BOOL CTaskDevCall::DoTask()
  23. {
  24. if(m_pCurrLine == NULL)
  25. {
  26. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 线路[%d]执行设备外呼任务失败:无法获取对应线路"), m_CurrDevOp.nLineId);
  27. return FALSE;
  28. }
  29. // 向底层传递信息
  30. return CCtiCore::GetInstance().getDevLink().exec((long)this, LINE_OP_TRANSFER_INFO, m_pCurrLine->lineId(), NULL);
  31. }
  32. /*****************************************************************
  33. **【函数名称】 ProcLineOpProcess
  34. **【函数功能】 处理设备操作进展
  35. **【参数】 EvtType 消息事件类型;lpContent 消息内容
  36. **【返回值】 void
  37. ****************************************************************/
  38. void CTaskDevCall::OnDevOpProcess(EventOpProcess &EvtInfo)
  39. {
  40. // 显示日志
  41. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Task}: [设备外呼], 操作进展, HostLine = %u, AssoLine = %u, AssoLineType = %u"),
  42. EvtInfo.nHostLine,
  43. EvtInfo.nAssoLine,
  44. EvtInfo.nAssoLineType);
  45. // 处理会话
  46. _PrcoCallNode(EvtInfo.nHostLine, EvtInfo.nAssoLine);
  47. // 获取对端线路
  48. CLogicLine *pAssoLine = CLineHolder::GetInstance().getLogicLine(EvtInfo.nAssoLine);
  49. if(pAssoLine == NULL) return;
  50. // 统计 REP_EVENT_EXT_CALL_OUT
  51. T_EvtExtCallOut repInfoCallOut;
  52. memset(&repInfoCallOut, 0, sizeof(repInfoCallOut));
  53. repInfoCallOut.nCallType = 1; // 呼出方式(0:ocx外呼,1:话机外呼)
  54. repInfoCallOut.nPeerLineType = EvtInfo.nAssoLineType; // 对端线路类型
  55. repInfoCallOut.nCallerAgentId = m_pCurrLine->getAgentNum(); // 主叫坐席工号
  56. repInfoCallOut.nCalleeAgentId = pAssoLine->getAgentNum(); // 被叫坐席工号
  57. lstrcpy(repInfoCallOut.szCalleeNum, EvtInfo.szCalleeNum); // 被叫号码
  58. CStatisticsMgr::GetInstance().onCallDetail(m_pCurrLine->callId(), REP_EVENT_EXT_CALL_OUT, m_pCurrLine->lineId(), &repInfoCallOut);
  59. // 统计REP_EVENT_EXT_CALL_IN
  60. T_EvtExtCallIn repInfoCallIn;
  61. if(pAssoLine->type() != DEV_RES_TYPE_EXT) return;
  62. memset(&repInfoCallIn, 0, sizeof(repInfoCallIn));
  63. repInfoCallIn.nCallType = 0; // 呼入方式(1:转坐席呼入,2:转移呼入,3:会议呼入)
  64. repInfoCallIn.nPeerLineType = m_pCurrLine->type(); // 对端线路类型
  65. repInfoCallIn.nCallerAgentId = m_pCurrLine->getAgentNum(); // 主叫坐席工号
  66. sprintf_s(repInfoCallIn.szCallerNum, REP_PHONE_NUM_LENGTH, "%d", m_pCurrLine->lineId());
  67. repInfoCallIn.nCalleeAgentId = pAssoLine->getAgentNum(); // 被叫坐席工号
  68. CStatisticsMgr::GetInstance().onCallDetail(pAssoLine->callId(), REP_EVENT_EXT_CALL_IN, pAssoLine->lineId(), &repInfoCallIn);
  69. }
  70. /*****************************************************************
  71. **【函数名称】 OnDevOpResult
  72. **【函数功能】 底层线路操作结果
  73. **【参数】 EvtType 消息事件类型;lpContent 消息内容
  74. **【返回值】 BOOL
  75. ****************************************************************/
  76. BOOL CTaskDevCall::OnDevOpResult(EventOpResult &EvtInfo)
  77. {
  78. // 向OCX发送外呼结果事件
  79. CPduEntity Cmd(PDU_CMD_CTI_DEV_CALL);
  80. Cmd.SetDataBool(0, EvtInfo.bIsSucceed == FALSE ? false : true); // 外呼结果
  81. Cmd.SetDataUInt(1, m_pCurrLine->lineId()); // 分机Id
  82. Cmd.SetDataUInt(2, m_pCurrLine->getAgentNum()); // 坐席工号
  83. Cmd.SetDataULong(3, m_TaskCallId); // CallId
  84. Cmd.SetDataString(4, m_CurrDevOp.szCalleeNum); // 被叫号码
  85. Cmd.SetDataUInt(5, m_CurrDevOp.nAssoLineType == 0 ? 1:0); // 外呼类型 0外线 1 内线
  86. CNetworkCti::GetInstance().send2ACD(Cmd);
  87. return TRUE;
  88. }