升龙物业 老版本 ocx IPO, 加密狗 转值班电话

TaskAgentThreeTalk.cpp 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. }