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

TaskAgentTransfer.cpp 5.4KB

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