#include "StdAfx.h" #include "SItemAgenStateDuration.h" #include CSItemAgenState::CSItemAgenState(UINT AgentId,UINT Exten, ULONG LoginId) :m_AgentID(AgentId),m_Exten(Exten),m_LoginID(LoginId),m_CurrState(AGENT_STATE_UNKNOWN) { } CSItemAgenState::~CSItemAgenState(void) { } void CSItemAgenState::onSEvent(REP_EVENT EvtType, PARAM Param) { switch(EvtType) { case REP_EVENT_LOGIN: __OnAgentLogin(); break; case REP_EVENT_LOGOUT: __OnAgentLogout(); break; case REP_EVENT_STATE: __OnAgentState(Param); break; } } void CSItemAgenState::__OnAgentLogin() { m_CurrState = AGENT_STATE_FREE; CString m_strLoginDate; CTime m_time; m_time=CTime::GetCurrentTime(); //获取当前时间日期 m_strLoginDate=m_time.Format(_T("%Y-%m-%d %H:%M:%S")); // 编写SQL语句 m_Sql.Format(_T("INSERT INTO rep_agentState_Duration (AgentId, Exten,LoginId, LoginTime,LogoutTime)VALUES\ (%d,%d, %d, '%s',NULL)"), m_AgentID, m_Exten, m_LoginID, m_strLoginDate ); __execSQL(); } void CSItemAgenState::__OnAgentLogout() { __ProcStateEnd(m_CurrState); CString m_strLogoutDate; CTime m_time; m_time=CTime::GetCurrentTime(); //获取当前时间日期 m_strLogoutDate=m_time.Format(_T("%Y-%m-%d %H:%M:%S")); m_Sql.Format(_T("UPDATE rep_agentState_Duration SET LogoutTime = '%s' WHERE AgentId = %d AND LoginId = %d"), m_strLogoutDate, m_AgentID, m_LoginID ); __execSQL(); } void CSItemAgenState::__OnAgentState( PARAM Param) { T_EvtStatus* pStatus = (T_EvtStatus*)Param; ASSERT(pStatus != NULL); if(pStatus == NULL) return; if(!pStatus->StartFlag) return; __ProcStateEnd(m_CurrState); switch(pStatus->State) { case AGENT_STATE_FREE: { __ProcStateStart(AGENT_STATE_FREE); } break; case AGENT_STATE_BUSY: { __ProcStateStart(AGENT_STATE_BUSY); } break; case AGENT_STATE_POST_PROCESSING: { __ProcStateStart(AGENT_STATE_POST_PROCESSING); } break; case AGENT_STATE_REPOSE: { __ProcStateStart(AGENT_STATE_REPOSE); __ProcReposeCount(); } break; default: break; } m_CurrState = pStatus->State; } void CSItemAgenState::__ProcStateStart(AGENT_STATE state) { m_StartTime=CTime::GetCurrentTime(); //获取当前时间日期 } void CSItemAgenState::__ProcStateEnd(AGENT_STATE state) { if(m_StartTime==0) return; m_EndTime=CTime::GetCurrentTime(); //获取当前时间日期 CTimeSpan m_DuringTime = m_EndTime - m_StartTime; LONGLONG durtime= m_DuringTime.GetTotalSeconds(); __WriteToSQL((int)durtime,state); } void CSItemAgenState::__WriteToSQL(int second,AGENT_STATE state) { switch(state) { case AGENT_STATE_FREE: { m_Sql.Format(_T("UPDATE rep_agentState_Duration SET Free = Free+%d WHERE AgentId = %d AND LoginId = %d"), second, m_AgentID, m_LoginID ); } break; case AGENT_STATE_BUSY: { m_Sql.Format(_T("UPDATE rep_agentState_Duration SET Talking = Talking+%d WHERE AgentId = %d AND LoginId = %d"), second, m_AgentID, m_LoginID ); } break; case AGENT_STATE_POST_PROCESSING: { m_Sql.Format(_T("UPDATE rep_agentState_Duration SET PostProcess = PostProcess+%d WHERE AgentId = %d AND LoginId = %d"), second, m_AgentID, m_LoginID ); } break; case AGENT_STATE_REPOSE: { m_Sql.Format(_T("UPDATE rep_agentState_Duration SET Repose =Repose+%d WHERE AgentId = %d AND LoginId = %d"), second, m_AgentID, m_LoginID ); } break; default: break; } __execSQL(); } void CSItemAgenState::__ProcReposeCount() { m_Sql.Format(_T("UPDATE rep_agentState_Duration SET ReposeConut =ReposeConut+%d WHERE AgentId = %d AND LoginId = %d"), 1, m_AgentID, m_LoginID ); __execSQL(); }