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

TaskAgentThreeTalk.cpp 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include "stdafx.h"
  2. #include "TaskAgentThreeTalk.h"
  3. #include "LineHolder.h"
  4. #include "LogicLine.h"
  5. #include "StatisticsMgr.h"
  6. #include "CtiCore.h"
  7. CTaskAgentThreeTalk::CTaskAgentThreeTalk( CPduEntity &PduEntity ) : CTask( PduEntity )
  8. {
  9. }
  10. CTaskAgentThreeTalk::~CTaskAgentThreeTalk( void )
  11. {
  12. }
  13. /*****************************************************************
  14. **【函数名称】 DoTask
  15. **【函数功能】 Task处理
  16. **【参数】
  17. **【返回值】 void
  18. ****************************************************************/
  19. BOOL CTaskAgentThreeTalk::DoTask()
  20. {
  21. // 显示日志
  22. ShowLog();
  23. // 校验
  24. if( !Verify() ) return FALSE;
  25. m_pCurrLine->opType() = PDU_CMD_AGENT_THREETALK;
  26. // 向底层设备发送三方通话
  27. LineOpParam pLineOpParam;
  28. memset( &pLineOpParam, 0, sizeof( pLineOpParam ) );
  29. pLineOpParam.nParam1 = m_pCurrLine->callId();
  30. lstrcpy( pLineOpParam.szParam1, m_CurrCmd.GetDataString( 4 ) );
  31. lstrcpy( pLineOpParam.szParam2, m_CurrCmd.GetDataString( 3 ) );
  32. return CCtiCore::GetInstance().getDevLink().exec( ( long )this, LINE_OP_CONFERENCE, m_pCurrLine->lineId(), &pLineOpParam );
  33. }
  34. /*****************************************************************
  35. **【函数名称】 Verify
  36. **【函数功能】 校验
  37. **【参数】
  38. **【返回值】 BOOL
  39. ****************************************************************/
  40. BOOL CTaskAgentThreeTalk::Verify()
  41. {
  42. // 线路绑定校验
  43. if( !_bindLogicLine( m_CurrCmd.GetDataUInt( 1 ) ) )
  44. return FALSE;
  45. // 本端线路状态校验
  46. if( m_pCurrLine->status() != INNER_STATE_TALKING )
  47. {
  48. ILogger::getInstance().log( LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T( "{Task}: 线路[%d]执行座席三方任务校验时失败:当前线路未在通话中" ), m_pCurrLine->lineId() );
  49. return FALSE;
  50. }
  51. // 对端线路状态验证
  52. int nAssoLineId;
  53. sscanf_s( m_CurrCmd.GetDataString( 3 ).GetBuffer(), "%d", &nAssoLineId );
  54. CLogicLine *pAssoLine = CLineHolder::GetInstance().getLogicLine( nAssoLineId );
  55. if( pAssoLine != NULL && pAssoLine->type() == DEV_RES_TYPE_EXT &&
  56. pAssoLine->status() != INNER_STATE_INIT &&
  57. pAssoLine->status() != INNER_STATE_FREE )
  58. {
  59. ILogger::getInstance().log( LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T( "{Task}: 线路[%d]执行座席三方任务校验时失败:关联线路状态校验不通过" ), m_pCurrLine->lineId() );
  60. return FALSE;
  61. }
  62. return TRUE;
  63. }
  64. /*****************************************************************
  65. **【函数名称】 ShowLog
  66. **【函数功能】 显示日志
  67. **【参数】
  68. **【返回值】 void
  69. ****************************************************************/
  70. void CTaskAgentThreeTalk::ShowLog()
  71. {
  72. // 显示日志
  73. ILogger::getInstance().log( LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T( "AGENT->CTI, CMD = [座席三方], \
  74. Exten = %d DestNum = %s" ),
  75. m_CurrCmd.GetDataUInt( 1 ),
  76. m_CurrCmd.GetDataString( 3 ) );
  77. }
  78. /*****************************************************************
  79. **【函数名称】 ProcLineOpProcess
  80. **【函数功能】 处理设备操作进展
  81. **【参数】 EvtType 消息事件类型;lpContent 消息内容
  82. **【返回值】 void
  83. ****************************************************************/
  84. void CTaskAgentThreeTalk::OnDevOpProcess( EventOpProcess &EvtInfo )
  85. {
  86. // 处理会话
  87. _PrcoCallNode( m_pCurrLine->lineId(), EvtInfo.nAssoLine );
  88. //获取对端线路
  89. CLogicLine *pAssoLine = CLineHolder::GetInstance().getLogicLine( EvtInfo.nAssoLine );
  90. if( pAssoLine == NULL ) return;
  91. // 统计 REP_EVENT_CONFERENCE
  92. T_EvtConference repInfoConf;
  93. memset( &repInfoConf, 0, sizeof( repInfoConf ) );
  94. repInfoConf.nPeerLineType = pAssoLine->type(); // 对端线路类型
  95. repInfoConf.nCallerAgentId = m_pCurrLine->getAgentNum(); // 主叫坐席工号
  96. repInfoConf.nCalleeAgentId = pAssoLine->getAgentNum(); // 被叫坐席工号
  97. lstrcpy( repInfoConf.szCalleeNum, m_CurrCmd.GetDataString( 3 ) ); // 三方号码
  98. repInfoConf.szTrunkId = pAssoLine->lineId(); // 被转移线路Id
  99. CStatisticsMgr::GetInstance().onCallDetail( m_pCurrLine->callId(), REP_EVENT_CONFERENCE, m_pCurrLine->lineId(), &repInfoConf );
  100. // 统计 REP_EVENT_EXT_CALL_IN
  101. if( pAssoLine->type() != DEV_RES_TYPE_EXT )
  102. return;
  103. T_EvtExtCallIn repInfoCallIn;
  104. memset( &repInfoCallIn, 0, sizeof( repInfoCallIn ) );
  105. repInfoCallIn.nCallType = 3; // 呼入方式(1:转坐席呼入,2:转移呼入,3:会议呼入)
  106. repInfoCallIn.nPeerLineType = m_pCurrLine->type(); // 对端线路类型
  107. repInfoCallIn.nCallerAgentId = m_pCurrLine->getAgentNum(); // 主叫坐席工号
  108. sprintf_s( repInfoCallIn.szCallerNum, REP_PHONE_NUM_LENGTH, "%d", m_pCurrLine->lineId() ); // 主叫号码
  109. repInfoCallIn.nCalleeAgentId = pAssoLine->getAgentNum(); // 被叫坐席工号
  110. CStatisticsMgr::GetInstance().onCallDetail( pAssoLine->callId(), REP_EVENT_EXT_CALL_IN, pAssoLine->lineId(), &repInfoCallIn );
  111. }
  112. /*****************************************************************
  113. **【函数名称】 OnDevOpResult
  114. **【函数功能】 设备操作结果返回
  115. **【参数】
  116. **【返回值】 void
  117. ****************************************************************/
  118. BOOL CTaskAgentThreeTalk::OnDevOpResult( EventOpResult &EvtInfo )
  119. {
  120. // 命令返回
  121. _ProcCmdReturn( EvtInfo.bIsSucceed );
  122. // 统计
  123. T_EvtConference repInfo;
  124. memset( &repInfo, 0, sizeof( repInfo ) );
  125. repInfo.bEvtResult = EvtInfo.bIsSucceed;
  126. CStatisticsMgr::GetInstance().onCallDetail( m_TaskCallId, REP_EVENT_CONF_RESULT, m_pCurrLine->lineId(), &repInfo );
  127. return TRUE;
  128. }