#include "StdAfx.h" #include "SItemAgentDetail.h" CSItemAgentDetail::CSItemAgentDetail(UINT AgentId, ULONG LoginId) { m_AgentID = AgentId; m_LoginID = LoginId; m_ExtID = 0; memset(m_AgentIP, 0, PDU_IP_LEN); m_GroupID = _T(""); m_AgentType = 0; m_TimeLogin = 0; m_TimeLogout = 0; m_LogoutHost = 0; m_LoginTimes = 0; m_FreeTimes = 0; m_ReposeTimes = 0; m_TalkTimes = 0; m_ReposeNum = 0; m_AnswerNum = 0; } CSItemAgentDetail::~CSItemAgentDetail(void) { } /***************************************************************** **【函数名称】 __onEvtLogin **【函数功能】 坐席签入事件 **【参数】 签入信息指针 **【返回值】 ****************************************************************/ void CSItemAgentDetail::__onEvtLogin( PARAM Param ) { // GetEvtInfo T_EvtLogIn* repInfo = (T_EvtLogIn*)Param; m_ExtID = repInfo->nExtID; // 关联分机 lstrcpy(m_AgentIP, repInfo->szAgentIP); // 坐席IP m_GroupID = repInfo->szGroup; // 组号 m_AgentType = repInfo->nAgentType; // 坐席类型 m_TimeLogin = time(NULL); // 签入时间 // 编写sql语句 m_Sql.Format(_T("INSERT INTO rep_agent_detail(AgentId, LoginId, ExtId, AgentIP, GroupId, AgentType, TimeLogin)VALUES\ (%d, %d, %d, '%s', '%s', %d, %s)"), m_AgentID, m_LoginID, m_ExtID, m_AgentIP, m_GroupID, m_AgentType, FormatTime(m_TimeLogin)); __execSQL(); } /***************************************************************** **【函数名称】 __onEvtLogout **【函数功能】 坐席签出事件 **【参数】 签入信息指针 **【返回值】 ****************************************************************/ void CSItemAgentDetail::__onEvtLogout( PARAM Param ) { // GetEvtInfo T_EvtLogout* repInfo = (T_EvtLogout*)Param; m_TimeLogout = time(NULL); // 签出时间 m_LogoutHost = repInfo->nLogoutHost; // 签出原因 m_LoginTimes = (UINT)(m_TimeLogout - m_TimeLogin); // 签入时长 m_FreeTimes = repInfo->nTimeFree; // 空闲时长 m_ReposeTimes = repInfo->nTimeRepose; // 小休时长 m_TalkTimes = repInfo->nTimeTalk; // 通话时长 m_ReposeNum = repInfo->nReposeCount; // 置忙次数 m_AnswerNum = repInfo->nAnswerCount; // 应答次数 //根据签出原因,判断签出类型 if (m_LogoutHost == 0) { m_LogoutType = 2; //异常签出,连接断开 } else if (m_LogoutHost == m_AgentID) { m_LogoutType = 0; //正常签出 } else if (m_LogoutHost != m_AgentID) { m_LogoutType = 1; //强制签出 } // 编写sql语句 m_Sql.Format(_T("UPDATE rep_agent_detail SET TimeLogout = %s, LogoutHost = %d, LogoutType = %d, LoginTimes = %d,\ ReposeTimes = %d, TalkTimes = %d, ReposeNum = %d, AnswerNum = %d WHERE AgentId = %d AND LoginId = %d"), FormatTime(m_TimeLogout), m_LogoutHost, m_LogoutType, //签出类型 m_LoginTimes, m_ReposeTimes, m_TalkTimes, m_ReposeNum, m_AnswerNum, m_AgentID, m_LoginID); __execSQL(); //执行数据统计存储过程 if (DB_MySQL == IOtlConnection::getInstance()->GetDatabaseType()) m_Sql.Format(_T("CALL proc_DataAnalysis(%d,%d,%s,%s)"), m_AgentID, m_LoginID, FormatTime(m_TimeLogin), FormatTime(m_TimeLogout)); else m_Sql.Format(_T("exec proc_DataAnalysis %d,%d,%s,%s"), m_AgentID, m_LoginID, FormatTime(m_TimeLogin), FormatTime(m_TimeLogout)); __execSQL(); } /***************************************************************** **【函数名称】 onSEvent **【函数功能】 统计事件变化通知 **【参数】 **【返回值】 ****************************************************************/ void CSItemAgentDetail::onSEvent( REP_EVENT EvtType, PARAM Param ) { if(Param == NULL) return; switch(EvtType) { case REP_EVENT_LOGIN: // 座席签入统计 __onEvtLogin(Param); break; case REP_EVENT_LOGOUT: // 座席签出统计 __onEvtLogout(Param); break; default: return; } }