中间件底层,websocket

SLogic.cpp 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #include "StdAfx.h"
  2. #include "SLogic.h"
  3. #include "SItemAgentDetail.h"
  4. #include "SItemAgentStatus.h"
  5. #include "SItemAgenStateDuration.h"
  6. #include "SItemAgenStateTimeDetail.h"
  7. SINGLETON_IMPLEMENT(CSLogic)
  8. CSLogic::CSLogic(void)
  9. {
  10. }
  11. CSLogic::~CSLogic(void)
  12. {
  13. }
  14. /*****************************************************************
  15. **【函数名称】 __getAgentLoginId
  16. **【函数功能】 获取座席签入ID
  17. **【参数】
  18. **【返回值】
  19. ****************************************************************/
  20. ULONG CSLogic::__getAgentLoginId( UINT AgentId )
  21. {
  22. //CString SQL;
  23. //SQL.Format("SELECT LoginId FROM rep_agent_detail where AgentId = %d ORDER BY LoginId DESC", AgentId);
  24. //ULONG LoginID = IOtlConnection::getInstance()->GetSingleDataInt(SQL);
  25. //return ++LoginID;
  26. // 20201211 合并12345功能
  27. CString SQL;
  28. ULONG LoginID = 0;
  29. CTime m_time;
  30. m_time = CTime::GetCurrentTime(); //获取当前时间日期
  31. CString str = m_time.Format(_T("%Y%m%d"));
  32. int Timeid = atoi(str.GetBuffer(0));
  33. SQL.Format("SELECT LoginId FROM rep_agentState_Duration where AgentId = %d ORDER BY LoginId DESC", AgentId);
  34. LoginID = IOtlConnection::getInstance()->GetSingleDataInt(SQL);
  35. ULONG LoninIDTime = LoginID / 100;
  36. if (LoginID == 0 || LoginID > 2917092801 || LoninIDTime < Timeid)
  37. {
  38. long lognid = Timeid * 100 + 1;
  39. return lognid;
  40. }
  41. return ++LoginID;
  42. }
  43. /*****************************************************************
  44. **【函数名称】 __onAgentLogin
  45. **【函数功能】 坐席签入处理
  46. **【参数】 AgentId:签入坐席的工号
  47. **【返回值】
  48. ****************************************************************/
  49. //void CSLogic::__onAgentLogin( UINT AgentId )
  50. //{
  51. // // 获取当前坐席的签入ID
  52. // ULONG LoginID = __getAgentLoginId(AgentId);
  53. //
  54. // CSItem* pItemDetail = new CSItemAgentDetail(AgentId, LoginID);
  55. // m_ItemMap.insert(pair<UINT, CSItem*>(AgentId, pItemDetail));
  56. //
  57. // CSItem* pItemStatus = new CSItemAgentStatus(AgentId, LoginID);
  58. // m_ItemMap.insert(pair<UINT, CSItem*>(AgentId, pItemStatus));
  59. //}
  60. void CSLogic::__onAgentLogin(UINT AgentId, UINT Exten, CString GroupID)
  61. {
  62. // 获取当前坐席的签入ID
  63. ULONG LoginID = __getAgentLoginId(AgentId);
  64. CSItem* pItemDetail = new CSItemAgentDetail(AgentId, LoginID);
  65. m_ItemMap.insert(pair<UINT, CSItem*>(AgentId, pItemDetail));
  66. CSItem* pItemStatus = new CSItemAgentStatus(AgentId, LoginID, Exten, GroupID);
  67. m_ItemMap.insert(pair<UINT, CSItem*>(AgentId, pItemStatus));
  68. CSItem* pItemState = new CSItemAgenState(AgentId, Exten, LoginID);
  69. m_ItemMap.insert(pair<UINT, CSItem*>(AgentId, pItemState));
  70. CSItem* pItemStateTimeDetail = new CSItemAgenStateTimeDetail(AgentId);
  71. m_ItemMap.insert(pair<UINT, CSItem*>(AgentId, pItemStateTimeDetail));
  72. }
  73. /*****************************************************************
  74. **【函数名称】 __onAgentLogout
  75. **【函数功能】 坐席签出处理
  76. **【参数】 AgentId: 签出坐席的工号
  77. **【返回值】
  78. ****************************************************************/
  79. void CSLogic::__onAgentLogout( UINT AgentId )
  80. {
  81. SItemMap::iterator itrBegin;
  82. SItemMap::iterator itrEnd;
  83. itrBegin = m_ItemMap.find(AgentId);
  84. if(itrBegin == m_ItemMap.end())
  85. return;
  86. itrEnd = m_ItemMap.upper_bound(AgentId);
  87. CSItem* pItem = NULL;
  88. for(SItemMap::iterator itr = itrBegin; itr != itrEnd; ++itr)
  89. {
  90. pItem = itr->second;
  91. if(pItem != NULL)
  92. delete pItem;
  93. pItem = NULL;
  94. }
  95. m_ItemMap.erase(itrBegin, itrEnd);
  96. }
  97. /*****************************************************************
  98. **【函数名称】 OnRepEvent
  99. **【函数功能】 统计事件变化通知
  100. **【参数】 AgentId: 坐席工号
  101. EvtType: 事件类型
  102. Param: 参数
  103. **【返回值】
  104. ****************************************************************/
  105. //void CSLogic::onSEvent( UINT AgentId, REP_EVENT EvtType, PARAM Param )
  106. //{
  107. // // 坐席签入处理
  108. // if(EvtType == REP_EVENT_LOGIN)
  109. // __onAgentLogin(AgentId);
  110. //
  111. // SItemMap::iterator itr;
  112. // SItemMap::iterator itrEnd;
  113. //
  114. // itr = m_ItemMap.find(AgentId);
  115. // if(itr == m_ItemMap.end())
  116. // return;
  117. //
  118. // itrEnd = m_ItemMap.upper_bound(AgentId);
  119. // // 事件消息群发
  120. // for(; itr != itrEnd; ++itr)
  121. // {
  122. // itr->second->onSEvent(EvtType, Param);
  123. // }
  124. //
  125. // // 坐席签出处理
  126. // if(EvtType == REP_EVENT_LOGOUT)
  127. // __onAgentLogout(AgentId);
  128. //}
  129. void CSLogic::onSEvent(UINT AgentId, UINT Exten, REP_EVENT EvtType, PARAM Param, CString GroupID)
  130. {
  131. // 坐席签入处理
  132. if (EvtType == REP_EVENT_LOGIN)
  133. __onAgentLogin(AgentId, Exten,GroupID);
  134. SItemMap::iterator itr;
  135. SItemMap::iterator itrEnd;
  136. itr = m_ItemMap.find(AgentId);
  137. if (itr == m_ItemMap.end())
  138. return;
  139. itrEnd = m_ItemMap.upper_bound(AgentId);
  140. // 事件消息群发
  141. for (; itr != itrEnd; ++itr)
  142. {
  143. itr->second->onSEvent(EvtType, Param);
  144. }
  145. // 坐席签出处理
  146. if (EvtType == REP_EVENT_LOGOUT)
  147. __onAgentLogout(AgentId);
  148. }