多数据源中间件标准版1.0

SItemAgenStateDuration.cpp 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. #include "StdAfx.h"
  2. #include "SItemAgenStateDuration.h"
  3. #include <atltime.h>
  4. CSItemAgenState::CSItemAgenState(UINT AgentId,UINT Exten, ULONG LoginId) :m_AgentID(AgentId),m_Exten(Exten),m_LoginID(LoginId),m_CurrState(AGENT_STATE_UNKNOWN)
  5. {
  6. }
  7. CSItemAgenState::~CSItemAgenState(void)
  8. {
  9. }
  10. void CSItemAgenState::onSEvent(REP_EVENT EvtType, PARAM Param)
  11. {
  12. switch(EvtType)
  13. {
  14. case REP_EVENT_LOGIN:
  15. __OnAgentLogin();
  16. break;
  17. case REP_EVENT_LOGOUT:
  18. __OnAgentLogout();
  19. break;
  20. case REP_EVENT_STATE:
  21. __OnAgentState(Param);
  22. break;
  23. }
  24. }
  25. void CSItemAgenState::__OnAgentLogin()
  26. {
  27. m_CurrState = AGENT_STATE_FREE;
  28. CString m_strLoginDate;
  29. CTime m_time;
  30. m_time=CTime::GetCurrentTime(); //获取当前时间日期
  31. m_strLoginDate=m_time.Format(_T("%Y-%m-%d %H:%M:%S"));
  32. // 编写SQL语句
  33. m_Sql.Format(_T("INSERT INTO rep_agentState_Duration (AgentId, Exten,LoginId, LoginTime,LogoutTime)VALUES\
  34. (%d,%d, %d, '%s',NULL)"),
  35. m_AgentID,
  36. m_Exten,
  37. m_LoginID,
  38. m_strLoginDate
  39. );
  40. __execSQL();
  41. }
  42. void CSItemAgenState::__OnAgentLogout()
  43. {
  44. __ProcStateEnd(m_CurrState);
  45. CString m_strLogoutDate;
  46. CTime m_time;
  47. m_time=CTime::GetCurrentTime(); //获取当前时间日期
  48. m_strLogoutDate=m_time.Format(_T("%Y-%m-%d %H:%M:%S"));
  49. m_Sql.Format(_T("UPDATE rep_agentState_Duration SET LogoutTime = '%s' WHERE AgentId = %d AND LoginId = %d"),
  50. m_strLogoutDate,
  51. m_AgentID,
  52. m_LoginID
  53. );
  54. __execSQL();
  55. }
  56. void CSItemAgenState::__OnAgentState( PARAM Param)
  57. {
  58. T_EvtStatus* pStatus = (T_EvtStatus*)Param;
  59. ASSERT(pStatus != NULL);
  60. if(pStatus == NULL)
  61. return;
  62. if(!pStatus->StartFlag) return;
  63. __ProcStateEnd(m_CurrState);
  64. switch(pStatus->State)
  65. {
  66. case AGENT_STATE_FREE:
  67. {
  68. __ProcStateStart(AGENT_STATE_FREE);
  69. }
  70. break;
  71. case AGENT_STATE_BUSY:
  72. {
  73. __ProcStateStart(AGENT_STATE_BUSY);
  74. }
  75. break;
  76. case AGENT_STATE_POST_PROCESSING:
  77. {
  78. __ProcStateStart(AGENT_STATE_POST_PROCESSING);
  79. }
  80. break;
  81. case AGENT_STATE_REPOSE:
  82. {
  83. __ProcStateStart(AGENT_STATE_REPOSE);
  84. __ProcReposeCount();
  85. }
  86. break;
  87. default:
  88. break;
  89. }
  90. m_CurrState = pStatus->State;
  91. }
  92. void CSItemAgenState::__ProcStateStart(AGENT_STATE state)
  93. {
  94. m_StartTime=CTime::GetCurrentTime(); //获取当前时间日期
  95. }
  96. void CSItemAgenState::__ProcStateEnd(AGENT_STATE state)
  97. {
  98. if(m_StartTime==0) return;
  99. m_EndTime=CTime::GetCurrentTime(); //获取当前时间日期
  100. CTimeSpan m_DuringTime = m_EndTime - m_StartTime;
  101. LONGLONG durtime= m_DuringTime.GetTotalSeconds();
  102. __WriteToSQL(durtime,state);
  103. }
  104. void CSItemAgenState::__WriteToSQL(int second,AGENT_STATE state)
  105. {
  106. switch(state)
  107. {
  108. case AGENT_STATE_FREE:
  109. {
  110. m_Sql.Format(_T("UPDATE rep_agentState_Duration SET Free = Free+%d WHERE AgentId = %d AND LoginId = %d"),
  111. second,
  112. m_AgentID,
  113. m_LoginID
  114. );
  115. }
  116. break;
  117. case AGENT_STATE_BUSY:
  118. {
  119. m_Sql.Format(_T("UPDATE rep_agentState_Duration SET Talking = Talking+%d WHERE AgentId = %d AND LoginId = %d"),
  120. second,
  121. m_AgentID,
  122. m_LoginID
  123. );
  124. }
  125. break;
  126. case AGENT_STATE_POST_PROCESSING:
  127. {
  128. m_Sql.Format(_T("UPDATE rep_agentState_Duration SET PostProcess = PostProcess+%d WHERE AgentId = %d AND LoginId = %d"),
  129. second,
  130. m_AgentID,
  131. m_LoginID
  132. );
  133. }
  134. break;
  135. case AGENT_STATE_REPOSE:
  136. {
  137. m_Sql.Format(_T("UPDATE rep_agentState_Duration SET Repose =Repose+%d WHERE AgentId = %d AND LoginId = %d"),
  138. second,
  139. m_AgentID,
  140. m_LoginID
  141. );
  142. }
  143. break;
  144. default:
  145. break;
  146. }
  147. __execSQL();
  148. }
  149. void CSItemAgenState::__ProcReposeCount()
  150. {
  151. m_Sql.Format(_T("UPDATE rep_agentState_Duration SET ReposeConut =ReposeConut+%d WHERE AgentId = %d AND LoginId = %d"),
  152. 1,
  153. m_AgentID,
  154. m_LoginID
  155. );
  156. __execSQL();
  157. }