华辉中间件项目(代码服务器上没有,用杨成电脑的源代码上传的)

CallList.cpp 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. // TaskList.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "CallList.h"
  5. #include "../AcdCore.h"
  6. #include "../IncomingCall.h"
  7. // CTaskList
  8. IMPLEMENT_DYNAMIC(CCallList, CListCtrl)
  9. CCallList::CCallList()
  10. {
  11. m_bSortInc = TRUE;
  12. }
  13. CCallList::~CCallList()
  14. {
  15. }
  16. BEGIN_MESSAGE_MAP(CCallList, CListCtrl)
  17. ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick)
  18. END_MESSAGE_MAP()
  19. /*****************************************************************
  20. **【函数名称】 __indexItem
  21. **【函数功能】 索引任务
  22. **【参数】
  23. **【返回值】
  24. *****************************************************************/
  25. int CCallList::__indexItem( int _index )
  26. {
  27. for (int i=0; i < GetItemCount(); i++)
  28. {
  29. if (GetItemData(i) == _index)
  30. return i;
  31. }
  32. return -1;
  33. }
  34. /*****************************************************************
  35. **【函数名称】 __transStrategy
  36. **【函数功能】 翻译座席分配策略
  37. **【参数】
  38. **【返回值】
  39. *****************************************************************/
  40. void CCallList::__transStrategy( AGENT_STRATEGY Strategy, CString& Data )
  41. {
  42. switch(Strategy)
  43. {
  44. case AGENT_STRATEGY_LOOP:
  45. Data = _T("循环接听");
  46. break;
  47. case AGENT_STRATEGY_MAX_CUR_FREE_TIME:
  48. Data = _T("目前空闲最长");
  49. break;
  50. case AGENT_STRATEGY_SUMMAX_FREE_TIME:
  51. Data = _T("总空闲最长");
  52. break;
  53. case AGENT_STRATEGY_MINI_CALLS:
  54. Data = _T("接听最少");
  55. break;
  56. case AGENT_STRATEGY_MAX_SKILL:
  57. Data = _T("最高技能");
  58. break;
  59. case AGENT_STRATEGY_MIN_SKILL:
  60. Data = _T("最低技能");
  61. break;
  62. case AGENT_STRATEGY_KNOWN:
  63. Data = _T("之前服务过");
  64. break;
  65. case AGENT_STRATEGY_MAXAVGFREE_TIME:
  66. Data = _T("平均最大空闲");
  67. break;
  68. case AGENT_STRATEGY_MINAVG_CALLS:
  69. Data = _T("平均接听最少");
  70. break;
  71. case AGENT_STRATEGY_LESS_SKILL:
  72. Data = _T("最少技能种类");
  73. break;
  74. case AGENT_STRATEGY_UNKNOWN:
  75. default:
  76. ASSERT(FALSE);
  77. Data = _T("未知策略");
  78. break;
  79. }
  80. }
  81. /*****************************************************************
  82. **【函数名称】 __transState
  83. **【函数功能】 翻译来电状态
  84. **【参数】
  85. **【返回值】
  86. *****************************************************************/
  87. void CCallList::__transState( OUTER_CALL_STATE State, CString& Data )
  88. {
  89. if(State == OUTER_CALL_WAITING)
  90. Data = _T("等待排队");
  91. else if(State = OUTER_CALL_PAUSE)
  92. Data = _T("暂停排队");
  93. else if(State == OUTER_CALL_QUEUE)
  94. Data = _T("排队中");
  95. }
  96. /*****************************************************************
  97. **【函数名称】 __showTask
  98. **【函数功能】 显示任务
  99. **【参数】
  100. **【返回值】
  101. *****************************************************************/
  102. void CCallList::__showTask( Call2Show& Info )
  103. {
  104. CString Data;
  105. Data.Format(_T("%d"), Info.Index);
  106. InsertItem(0, Data);
  107. Data = _T("");
  108. Data.Format(_T("%d"), Info.CallId);
  109. SetItemText(0, 1, Data);
  110. Data = _T("");
  111. __transState(Info.State, Data);
  112. SetItemText(0, 2, Data);
  113. Data = _T("");
  114. Data.Format(_T("%d"), Info.VipLevel);
  115. SetItemText(0, 3, Data);
  116. Data.Format(_T("%u"), Info.Group);
  117. SetItemText(0, 4, Data);
  118. SetItemText(0, 5, Info.Caller);
  119. Data = _T("");
  120. __transStrategy(Info.Strategy, Data);
  121. SetItemText(0, 6, Data);
  122. SetItemData(0, Info.Index);
  123. }
  124. /*****************************************************************
  125. **【函数名称】 __updateTaskState
  126. **【函数功能】 更新任务
  127. **【参数】
  128. **【返回值】
  129. *****************************************************************/
  130. void CCallList::__updateCallState(int Item, Call2Show& Info)
  131. {
  132. CString Data = _T("");
  133. /*Data.Format(_T("%d"), Info.callId);
  134. SetItemText(Item, 1, Data);*/
  135. Data = _T("");
  136. __transState(Info.State, Data);
  137. SetItemText(0, 2, Data);
  138. /*Data = _T("");
  139. Data.Format(_T("%d"), Info.VipLevel);
  140. SetItemText(Item, 3, Data);
  141. Data.Format(_T("%u"), Info.Group);
  142. SetItemText(Item, 4, Data);
  143. SetItemText(Item, 5, Info.Caller);
  144. Data = _T("");
  145. __transStrategy(Info.Strategy, Data);
  146. SetItemText(Item, 6, Data);*/
  147. }
  148. /*****************************************************************
  149. **【函数名称】 format
  150. **【函数功能】 格式化控件
  151. **【参数】
  152. **【返回值】
  153. *****************************************************************/
  154. void CCallList::format( void )
  155. {
  156. CRect mRect;
  157. GetWindowRect(&mRect);
  158. int length = mRect.right - mRect.left;
  159. int perLength = length / 6;
  160. //加载日志列表
  161. SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  162. InsertColumn(0, (LPCTSTR)_T("流程ID"), LVCFMT_LEFT, perLength - 5);
  163. InsertColumn(1, (LPCTSTR)_T("呼叫ID"), LVCFMT_LEFT, perLength);
  164. InsertColumn(2, (LPCTSTR)_T("状态"), LVCFMT_LEFT, perLength);
  165. InsertColumn(3, (LPCTSTR)_T("VIP级别"), LVCFMT_LEFT,perLength);
  166. InsertColumn(4, (LPCTSTR)_T("座席组"), LVCFMT_LEFT, perLength);
  167. InsertColumn(5, (LPCTSTR)_T("主叫号码"), LVCFMT_LEFT, perLength);
  168. InsertColumn(6, (LPCTSTR)_T("座席策略"), LVCFMT_LEFT, perLength);
  169. }
  170. /*****************************************************************
  171. **【函数名称】 onTaskStateUpdated
  172. **【函数功能】 任务状态变化处理函数
  173. **【参数】
  174. **【返回值】
  175. *****************************************************************/
  176. void CCallList::onCallStateUpdated( int _index )
  177. {
  178. Call2Show Info;
  179. Info.Index = _index;
  180. int Item = __indexItem(_index);
  181. if(CAcdCore::GetInstance().getQueueMgr().getCallInfo(Info))
  182. {
  183. if(Item != -1)
  184. __updateCallState(Item, Info);
  185. else
  186. __showTask(Info);
  187. }
  188. else
  189. {
  190. if (Item != -1)
  191. DeleteItem(Item);
  192. }
  193. }
  194. /*****************************************************************
  195. **【函数名称】 onCallFinish
  196. **【函数功能】 来电结束处理函数
  197. **【参数】
  198. **【返回值】
  199. *****************************************************************/
  200. void CCallList::onCallFinish( int _index )
  201. {
  202. int Item = __indexItem(_index);
  203. if (Item != -1)
  204. DeleteItem(Item);
  205. }
  206. int CALLBACK CCallList::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamData)
  207. {
  208. CCallList* pListCtrl = (CCallList*)lParamData;
  209. int nItem1 = 0, nItem2 = 0;
  210. LVFINDINFO FindInfo;
  211. FindInfo.flags = LVFI_PARAM;
  212. FindInfo.lParam = lParam1;
  213. nItem1 = pListCtrl->FindItem(&FindInfo, -1);
  214. FindInfo.lParam = lParam2;
  215. nItem2 = pListCtrl->FindItem(&FindInfo, -1);
  216. if ((nItem1 == -1) || (nItem2 == -1))
  217. {
  218. TRACE("Not find!\n");
  219. return 0;
  220. }
  221. CString strItem1, strItem2;
  222. strItem1 = pListCtrl->GetItemText(nItem1, pListCtrl->m_CurSortColum);
  223. strItem2 = pListCtrl->GetItemText(nItem2, pListCtrl->m_CurSortColum);
  224. if (pListCtrl->IsColumNumber(strItem1) && pListCtrl->IsColumNumber(strItem2)) // 数字列
  225. {
  226. return pListCtrl->m_bSortInc ? atoi(strItem1) - atoi(strItem2)>0 : atoi(strItem1) - atoi(strItem2)<0;
  227. }
  228. else // 字符串
  229. {
  230. return pListCtrl->m_bSortInc ? lstrcmp(strItem1, strItem2) : lstrcmp(strItem2, strItem1);
  231. }
  232. }
  233. void CCallList::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)
  234. {
  235. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  236. m_CurSortColum = pNMListView->iSubItem;
  237. m_bSortInc = !m_bSortInc;
  238. SortItems(CompareFunction, (LPARAM)this);
  239. *pResult = 0;
  240. }
  241. BOOL CCallList::IsColumNumber(LPCTSTR pszText)
  242. {
  243. for (int i = 0; i < lstrlen(pszText); i++)
  244. {
  245. if (pszText[i] == '.')
  246. continue;
  247. if (!_istdigit(pszText[i]))
  248. return false;
  249. }
  250. return true;
  251. }