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

IncomingCall.cpp 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include "StdAfx.h"
  2. #include "IncomingCall.h"
  3. #include "MsgCenter.h"
  4. #include "NetworkAcd.h"
  5. CIncomingCall::CIncomingCall(CPduEntity* pCmd)
  6. {
  7. updateQueueInfo(pCmd);
  8. }
  9. CIncomingCall::~CIncomingCall(void)
  10. {
  11. // 添加消息可供视图刷新
  12. CMsgCenter::GetInstance().pushMsg(ACD_MSG_CALL_FINISH, (const PARAM)m_IvrFlowId);
  13. }
  14. /*****************************************************************
  15. **【函数名称】 setCallState
  16. **【函数功能】 设置排队呼叫状态
  17. **【参数】
  18. **【返回值】
  19. ****************************************************************/
  20. void CIncomingCall::setCallState( OUTER_CALL_STATE State )
  21. {
  22. m_CallState = State;
  23. // 添加消息可供视图刷新
  24. CMsgCenter::GetInstance().pushMsg(ACD_MSG_CALL_INFO_UPDATE, (const PARAM)m_IvrFlowId);
  25. }
  26. /*****************************************************************
  27. **【函数名称】 updateQueueInfo
  28. **【函数功能】 更新请求排队信息
  29. **【参数】 pCmd: 更新排队信息的命令内容
  30. **【返回值】
  31. ****************************************************************/
  32. void CIncomingCall::updateQueueInfo( CPduEntity* pCmd )
  33. {
  34. // PDU命令
  35. m_Cmd = *pCmd;
  36. // 排队状态
  37. m_CallState = OUTER_CALL_WAITING;
  38. // 基础信息
  39. if(m_Cmd.GetCmdType() == PDU_CMD_IVR_WANT_AGENT) // 请求排队
  40. {
  41. m_IvrFlowId = m_Cmd.GetDataInt(1);
  42. m_CallId = m_Cmd.GetDataULong(2);
  43. m_AgentStrategy = (AGENT_STRATEGY)m_Cmd.GetDataUInt(3);
  44. m_GroupNo = m_Cmd.GetDataUInt(4);
  45. m_VipLevel = m_Cmd.GetDataInt(5);
  46. m_CallerNum = m_Cmd.GetDataString(6);
  47. m_InfoEx = m_Cmd.GetDataString(7);
  48. } // end if
  49. // 添加消息可供视图刷新
  50. CMsgCenter::GetInstance().pushMsg(ACD_MSG_CALL_INFO_UPDATE, (const PARAM)m_IvrFlowId);
  51. }
  52. /*****************************************************************
  53. **【函数名称】 onQueueOK
  54. **【函数功能】 请求座席成功处理
  55. **【参数】 AgentId: 成功请求到的座席工号
  56. Exten: 成功请求到的座席分机号
  57. **【返回值】
  58. ****************************************************************/
  59. void CIncomingCall::onQueueOK( UINT AgentId, UINT Exten )
  60. {
  61. // 发送执行结果返回命令
  62. m_Cmd.SetToExecReturn();
  63. m_Cmd.SetDataBool(0, true);
  64. if(m_Cmd.GetCmdType() == PDU_CMD_IVR_WANT_AGENT) // 请求座席命令
  65. {
  66. m_Cmd.SetDataUInt(9, AgentId);
  67. m_Cmd.SetDataUInt(10, Exten);
  68. }
  69. else // 继续请求排队命令
  70. {
  71. m_Cmd.SetDataUInt(7, AgentId);
  72. m_Cmd.SetDataUInt(8, Exten);
  73. } // end if
  74. CNetworkAcd::GetInstance().send2Cti(&m_Cmd);
  75. }
  76. /*****************************************************************
  77. **【函数名称】 onQueueFailed
  78. **【函数功能】 请求座席失败处理
  79. **【参数】 Reason: 失败原因
  80. **【返回值】
  81. ****************************************************************/
  82. void CIncomingCall::onQueueFailed( UINT Reason, UINT PosInQueue )
  83. {
  84. // 发送执行结果返回命令
  85. if(m_Cmd.GetCmdType() == PDU_CMD_IVR_WANT_AGENT) // 继续等待排队命令不需返回
  86. {
  87. // 暂停请求座席
  88. setCallState(OUTER_CALL_PAUSE);
  89. // 返回执行结果
  90. m_Cmd.SetToExecReturn();
  91. m_Cmd.SetDataBool(0, false);
  92. m_Cmd.SetDataUInt(8, Reason);
  93. m_Cmd.SetDataUInt(9, PosInQueue);
  94. CNetworkAcd::GetInstance().send2Cti(&m_Cmd);
  95. }
  96. else
  97. {
  98. setCallState(OUTER_CALL_WAITING);
  99. }
  100. }