| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- // TaskList.cpp : 实现文件
- //
- #include "stdafx.h"
- #include "CallList.h"
- #include "../AcdCore.h"
- #include "../IncomingCall.h"
- // CTaskList
- IMPLEMENT_DYNAMIC(CCallList, CListCtrl)
- CCallList::CCallList()
- {
- m_bSortInc = TRUE;
- }
- CCallList::~CCallList()
- {
- }
- BEGIN_MESSAGE_MAP(CCallList, CListCtrl)
- ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick)
- END_MESSAGE_MAP()
- /*****************************************************************
- **【函数名称】 __indexItem
- **【函数功能】 索引任务
- **【参数】
- **【返回值】
- *****************************************************************/
- int CCallList::__indexItem( int _index )
- {
- for (int i=0; i < GetItemCount(); i++)
- {
- if (GetItemData(i) == _index)
- return i;
- }
- return -1;
- }
- /*****************************************************************
- **【函数名称】 __transStrategy
- **【函数功能】 翻译座席分配策略
- **【参数】
- **【返回值】
- *****************************************************************/
- void CCallList::__transStrategy( AGENT_STRATEGY Strategy, CString& Data )
- {
- switch(Strategy)
- {
- case AGENT_STRATEGY_LOOP:
- Data = _T("循环接听");
- break;
- case AGENT_STRATEGY_MAX_CUR_FREE_TIME:
- Data = _T("目前空闲最长");
- break;
- case AGENT_STRATEGY_SUMMAX_FREE_TIME:
- Data = _T("总空闲最长");
- break;
- case AGENT_STRATEGY_MINI_CALLS:
- Data = _T("接听最少");
- break;
- case AGENT_STRATEGY_MAX_SKILL:
- Data = _T("最高技能");
- break;
- case AGENT_STRATEGY_MIN_SKILL:
- Data = _T("最低技能");
- break;
- case AGENT_STRATEGY_KNOWN:
- Data = _T("之前服务过");
- break;
- case AGENT_STRATEGY_MAXAVGFREE_TIME:
- Data = _T("平均最大空闲");
- break;
- case AGENT_STRATEGY_MINAVG_CALLS:
- Data = _T("平均接听最少");
- break;
- case AGENT_STRATEGY_LESS_SKILL:
- Data = _T("最少技能种类");
- break;
- case AGENT_STRATEGY_UNKNOWN:
- default:
- ASSERT(FALSE);
- Data = _T("未知策略");
- break;
- }
- }
- /*****************************************************************
- **【函数名称】 __transState
- **【函数功能】 翻译来电状态
- **【参数】
- **【返回值】
- *****************************************************************/
- void CCallList::__transState( OUTER_CALL_STATE State, CString& Data )
- {
- if(State == OUTER_CALL_WAITING)
- Data = _T("等待排队");
- else if(State = OUTER_CALL_PAUSE)
- Data = _T("暂停排队");
- else if(State == OUTER_CALL_QUEUE)
- Data = _T("排队中");
- }
- /*****************************************************************
- **【函数名称】 __showTask
- **【函数功能】 显示任务
- **【参数】
- **【返回值】
- *****************************************************************/
- void CCallList::__showTask( Call2Show& Info )
- {
- CString Data;
- Data.Format(_T("%d"), Info.Index);
- InsertItem(0, Data);
- Data = _T("");
- Data.Format(_T("%d"), Info.CallId);
- SetItemText(0, 1, Data);
- Data = _T("");
- __transState(Info.State, Data);
- SetItemText(0, 2, Data);
- Data = _T("");
- Data.Format(_T("%d"), Info.VipLevel);
- SetItemText(0, 3, Data);
- Data.Format(_T("%u"), Info.Group);
- SetItemText(0, 4, Data);
- SetItemText(0, 5, Info.Caller);
- Data = _T("");
- __transStrategy(Info.Strategy, Data);
- SetItemText(0, 6, Data);
-
- SetItemData(0, Info.Index);
- }
- /*****************************************************************
- **【函数名称】 __updateTaskState
- **【函数功能】 更新任务
- **【参数】
- **【返回值】
- *****************************************************************/
- void CCallList::__updateCallState(int Item, Call2Show& Info)
- {
- CString Data = _T("");
- /*Data.Format(_T("%d"), Info.callId);
- SetItemText(Item, 1, Data);*/
- Data = _T("");
- __transState(Info.State, Data);
- SetItemText(0, 2, Data);
- /*Data = _T("");
- Data.Format(_T("%d"), Info.VipLevel);
- SetItemText(Item, 3, Data);
- Data.Format(_T("%u"), Info.Group);
- SetItemText(Item, 4, Data);
- SetItemText(Item, 5, Info.Caller);
- Data = _T("");
- __transStrategy(Info.Strategy, Data);
- SetItemText(Item, 6, Data);*/
-
- }
- /*****************************************************************
- **【函数名称】 format
- **【函数功能】 格式化控件
- **【参数】
- **【返回值】
- *****************************************************************/
- void CCallList::format( void )
- {
- CRect mRect;
- GetWindowRect(&mRect);
-
- int length = mRect.right - mRect.left;
- int perLength = length / 6;
- //加载日志列表
- SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
- InsertColumn(0, (LPCTSTR)_T("流程ID"), LVCFMT_LEFT, perLength - 5);
- InsertColumn(1, (LPCTSTR)_T("呼叫ID"), LVCFMT_LEFT, perLength);
- InsertColumn(2, (LPCTSTR)_T("状态"), LVCFMT_LEFT, perLength);
- InsertColumn(3, (LPCTSTR)_T("VIP级别"), LVCFMT_LEFT,perLength);
- InsertColumn(4, (LPCTSTR)_T("座席组"), LVCFMT_LEFT, perLength);
- InsertColumn(5, (LPCTSTR)_T("主叫号码"), LVCFMT_LEFT, perLength);
- InsertColumn(6, (LPCTSTR)_T("座席策略"), LVCFMT_LEFT, perLength);
- }
- /*****************************************************************
- **【函数名称】 onTaskStateUpdated
- **【函数功能】 任务状态变化处理函数
- **【参数】
- **【返回值】
- *****************************************************************/
- void CCallList::onCallStateUpdated( int _index )
- {
- Call2Show Info;
- Info.Index = _index;
- int Item = __indexItem(_index);
- if(CAcdCore::GetInstance().getQueueMgr().getCallInfo(Info))
- {
- if(Item != -1)
- __updateCallState(Item, Info);
- else
- __showTask(Info);
- }
- else
- {
- if (Item != -1)
- DeleteItem(Item);
- }
- }
- /*****************************************************************
- **【函数名称】 onCallFinish
- **【函数功能】 来电结束处理函数
- **【参数】
- **【返回值】
- *****************************************************************/
- void CCallList::onCallFinish( int _index )
- {
- int Item = __indexItem(_index);
- if (Item != -1)
- DeleteItem(Item);
- }
- int CALLBACK CCallList::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamData)
- {
- CCallList* pListCtrl = (CCallList*)lParamData;
- int nItem1 = 0, nItem2 = 0;
- LVFINDINFO FindInfo;
- FindInfo.flags = LVFI_PARAM;
- FindInfo.lParam = lParam1;
- nItem1 = pListCtrl->FindItem(&FindInfo, -1);
- FindInfo.lParam = lParam2;
- nItem2 = pListCtrl->FindItem(&FindInfo, -1);
- if ((nItem1 == -1) || (nItem2 == -1))
- {
- TRACE("Not find!\n");
- return 0;
- }
- CString strItem1, strItem2;
- strItem1 = pListCtrl->GetItemText(nItem1, pListCtrl->m_CurSortColum);
- strItem2 = pListCtrl->GetItemText(nItem2, pListCtrl->m_CurSortColum);
- if (pListCtrl->IsColumNumber(strItem1) && pListCtrl->IsColumNumber(strItem2)) // 数字列
- {
- return pListCtrl->m_bSortInc ? atoi(strItem1) - atoi(strItem2)>0 : atoi(strItem1) - atoi(strItem2)<0;
- }
- else // 字符串
- {
- return pListCtrl->m_bSortInc ? lstrcmp(strItem1, strItem2) : lstrcmp(strItem2, strItem1);
- }
- }
- void CCallList::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)
- {
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- m_CurSortColum = pNMListView->iSubItem;
- m_bSortInc = !m_bSortInc;
- SortItems(CompareFunction, (LPARAM)this);
- *pResult = 0;
- }
- BOOL CCallList::IsColumNumber(LPCTSTR pszText)
- {
- for (int i = 0; i < lstrlen(pszText); i++)
- {
- if (pszText[i] == '.')
- continue;
- if (!_istdigit(pszText[i]))
- return false;
- }
- return true;
- }
|