#include "StdAfx.h" #include "SLogic.h" #include "SItemAgentDetail.h" #include "SItemAgentStatus.h" #include "SItemAgenStateDuration.h" #include "SItemAgenStateTimeDetail.h" SINGLETON_IMPLEMENT(CSLogic) CSLogic::CSLogic(void) { } CSLogic::~CSLogic(void) { } /***************************************************************** **【函数名称】 __getAgentLoginId **【函数功能】 获取座席签入ID **【参数】 **【返回值】 ****************************************************************/ ULONG CSLogic::__getAgentLoginId( UINT AgentId ) { //CString SQL; //SQL.Format("SELECT LoginId FROM rep_agent_detail where AgentId = %d ORDER BY LoginId DESC", AgentId); //ULONG LoginID = IOtlConnection::getInstance()->GetSingleDataInt(SQL); //return ++LoginID; // 20201211 合并12345功能 CString SQL; ULONG LoginID = 0; CTime m_time; m_time = CTime::GetCurrentTime(); //获取当前时间日期 CString str = m_time.Format(_T("%Y%m%d")); int Timeid = atoi(str.GetBuffer(0)); SQL.Format("SELECT LoginId FROM rep_agentState_Duration where AgentId = %d ORDER BY LoginId DESC", AgentId); LoginID = IOtlConnection::getInstance()->GetSingleDataInt(SQL); ULONG LoninIDTime = LoginID / 100; if (LoginID == 0 || LoginID > 2917092801 || LoninIDTime < Timeid) { long lognid = Timeid * 100 + 1; return lognid; } return ++LoginID; } /***************************************************************** **【函数名称】 __onAgentLogin **【函数功能】 坐席签入处理 **【参数】 AgentId:签入坐席的工号 **【返回值】 ****************************************************************/ //void CSLogic::__onAgentLogin( UINT AgentId ) //{ // // 获取当前坐席的签入ID // ULONG LoginID = __getAgentLoginId(AgentId); // // CSItem* pItemDetail = new CSItemAgentDetail(AgentId, LoginID); // m_ItemMap.insert(pair(AgentId, pItemDetail)); // // CSItem* pItemStatus = new CSItemAgentStatus(AgentId, LoginID); // m_ItemMap.insert(pair(AgentId, pItemStatus)); //} void CSLogic::__onAgentLogin(UINT AgentId, UINT Exten, CString GroupID) { // 获取当前坐席的签入ID ULONG LoginID = __getAgentLoginId(AgentId); CSItem* pItemDetail = new CSItemAgentDetail(AgentId, LoginID); m_ItemMap.insert(pair(AgentId, pItemDetail)); CSItem* pItemStatus = new CSItemAgentStatus(AgentId, LoginID, Exten, GroupID); m_ItemMap.insert(pair(AgentId, pItemStatus)); CSItem* pItemState = new CSItemAgenState(AgentId, Exten, LoginID); m_ItemMap.insert(pair(AgentId, pItemState)); CSItem* pItemStateTimeDetail = new CSItemAgenStateTimeDetail(AgentId); m_ItemMap.insert(pair(AgentId, pItemStateTimeDetail)); } /***************************************************************** **【函数名称】 __onAgentLogout **【函数功能】 坐席签出处理 **【参数】 AgentId: 签出坐席的工号 **【返回值】 ****************************************************************/ void CSLogic::__onAgentLogout( UINT AgentId ) { SItemMap::iterator itrBegin; SItemMap::iterator itrEnd; itrBegin = m_ItemMap.find(AgentId); if(itrBegin == m_ItemMap.end()) return; itrEnd = m_ItemMap.upper_bound(AgentId); CSItem* pItem = NULL; for(SItemMap::iterator itr = itrBegin; itr != itrEnd; ++itr) { pItem = itr->second; if(pItem != NULL) delete pItem; pItem = NULL; } m_ItemMap.erase(itrBegin, itrEnd); } /***************************************************************** **【函数名称】 OnRepEvent **【函数功能】 统计事件变化通知 **【参数】 AgentId: 坐席工号 EvtType: 事件类型 Param: 参数 **【返回值】 ****************************************************************/ //void CSLogic::onSEvent( UINT AgentId, REP_EVENT EvtType, PARAM Param ) //{ // // 坐席签入处理 // if(EvtType == REP_EVENT_LOGIN) // __onAgentLogin(AgentId); // // SItemMap::iterator itr; // SItemMap::iterator itrEnd; // // itr = m_ItemMap.find(AgentId); // if(itr == m_ItemMap.end()) // return; // // itrEnd = m_ItemMap.upper_bound(AgentId); // // 事件消息群发 // for(; itr != itrEnd; ++itr) // { // itr->second->onSEvent(EvtType, Param); // } // // // 坐席签出处理 // if(EvtType == REP_EVENT_LOGOUT) // __onAgentLogout(AgentId); //} void CSLogic::onSEvent(UINT AgentId, UINT Exten, REP_EVENT EvtType, PARAM Param, CString GroupID) { // 坐席签入处理 if (EvtType == REP_EVENT_LOGIN) __onAgentLogin(AgentId, Exten,GroupID); SItemMap::iterator itr; SItemMap::iterator itrEnd; itr = m_ItemMap.find(AgentId); if (itr == m_ItemMap.end()) return; itrEnd = m_ItemMap.upper_bound(AgentId); // 事件消息群发 for (; itr != itrEnd; ++itr) { itr->second->onSEvent(EvtType, Param); } // 坐席签出处理 if (EvtType == REP_EVENT_LOGOUT) __onAgentLogout(AgentId); }