| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #include "StdAfx.h"
- #include "IncomingCallGroup.h"
- #include "IncomingCall.h"
- #include "MsgCenter.h"
- CIncomingCallGroup::CIncomingCallGroup(void)
- {
- }
- CIncomingCallGroup::~CIncomingCallGroup(void)
- {
- }
- /*****************************************************************
- **【函数名称】 __queue
- **【函数功能】 根据来电VIP级别排队
- **【参数】
- **【返回值】
- ****************************************************************/
- int CIncomingCallGroup::__queue( CIncomingCall* pCall )
- {
- CSingleLock Lock(&m_Cs4CallList, TRUE);
- int Index = m_nCount;
- if(Index == 0)
- {
- AddTail(pCall);
- return 0;
- }
- else
- {
- POSITION pos = GetTailPosition();
- POSITION FirstPos = GetHeadPosition();
- while(pos != NULL)
- {
- POSITION posPrev = pos;
- CIncomingCall* pTmpCall = GetPrev(pos);
- if(pTmpCall->vipLevel() >= pCall->vipLevel())
- {
- InsertAfter(posPrev, pCall);
- break;
- }
- if (posPrev == FirstPos)
- {
- InsertBefore(FirstPos, pCall);
- Index = 0;
- break;
- }
- --Index;
- } // end if
- return Index;
- } // end if
- }
- /*****************************************************************
- **【函数名称】 addCall
- **【函数功能】 添加呼叫
- **【参数】
- **【返回值】
- ****************************************************************/
- CIncomingCall* CIncomingCallGroup::addCall( CPduEntity* pCmd, int& Index )
- {
- CIncomingCall* pCall = new CIncomingCall(pCmd);
- ASSERT(pCall != NULL);
- Index = __queue(pCall);
- // 通知排队队列变化事件
- CMsgCenter::GetInstance().pushMsg(ACD_MSG_QUEUE_UPDATE, (PARAM)pCall->groupAsked());
- return pCall;
- }
- /*****************************************************************
- **【函数名称】 getCall
- **【函数功能】 查找指定索引的呼叫
- **【参数】
- **【返回值】
- ****************************************************************/
- CIncomingCall* CIncomingCallGroup::getCall( int Index )
- {
- CSingleLock Lock(&m_Cs4CallList, TRUE);
- CIncomingCall* pCall;
- POSITION pos = GetHeadPosition();
- while(pos != NULL)
- {
- pCall = GetNext(pos);
- if(pCall->index() == Index)
- return pCall;
- } // end while
- return NULL;
- }
- /*****************************************************************
- **【函数名称】 addCall
- **【函数功能】 添加呼叫
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CIncomingCallGroup::delCall( int Index )
- {
- CSingleLock Lock(&m_Cs4CallList, TRUE);
- CIncomingCall* pCall = NULL;
- POSITION pos = GetHeadPosition();
- while(pos != NULL)
- {
- POSITION posPrev = pos;
- pCall = GetNext(pos);
- ASSERT(pCall != NULL);
- if(pCall->index() == Index)
- {
- // 删除呼叫
- RemoveAt(posPrev);
- // 通知排队队列变化事件
- CMsgCenter::GetInstance().pushMsg(ACD_MSG_QUEUE_UPDATE, (PARAM)pCall->groupAsked());
- delete pCall;
- return true;
- } // end if
- } // end while
- return false;
- }
- /*****************************************************************
- **【函数名称】 clear
- **【函数功能】 释放所有呼叫
- **【参数】
- **【返回值】
- ****************************************************************/
- void CIncomingCallGroup::clear( void )
- {
- CSingleLock Lock(&m_Cs4CallList, TRUE);
- // 清除所有呼叫
- while(m_nCount > 0)
- {
- delete RemoveHead();
- }
- }
- /*****************************************************************
- **【函数名称】 getCallInfo
- **【函数功能】 获取指定呼叫的相关信息用于UI展现
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CIncomingCallGroup::getCallInfo( Call2Show& Info )
- {
- CSingleLock Lock(&m_Cs4CallList, TRUE);
- CIncomingCall* pCall = getCall(Info.Index);
- if(pCall != NULL)
- {
- Info.CallId = pCall->callId();
- Info.State = pCall->state();
- Info.VipLevel = pCall->vipLevel();
- Info.Group = pCall->groupAsked();
- Info.Strategy = pCall->agentStrategy();
- Info.Caller = pCall->callerNum();
- return true;
- }
- return false;
- }
- /*****************************************************************
- **【函数名称】 getTopWaitedCall
- **【函数功能】 得到当前可分配座席的呼叫
- **【参数】
- **【返回值】
- ****************************************************************/
- CIncomingCall* CIncomingCallGroup::getTopWaitedCall( void )
- {
- CSingleLock Lock(&m_Cs4CallList, TRUE);
- CIncomingCall* pCall = NULL;
- POSITION pos = GetHeadPosition();
- while(pos != NULL)
- {
- pCall = GetNext(pos);
- if(pCall->state() == OUTER_CALL_WAITING)
- return pCall;
- } // end while
- return NULL;
- }
|