升龙物业 老版本 ocx IPO, 加密狗 转值班电话

SItemAgentDetail.cpp 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "StdAfx.h"
  2. #include "SItemAgentDetail.h"
  3. CSItemAgentDetail::CSItemAgentDetail(UINT AgentId, ULONG LoginId)
  4. {
  5. m_AgentID = AgentId;
  6. m_LoginID = LoginId;
  7. m_ExtID = 0;
  8. memset(m_AgentIP, 0, PDU_IP_LEN);
  9. m_GroupID = _T("");
  10. m_AgentType = 0;
  11. m_TimeLogin = 0;
  12. m_TimeLogout = 0;
  13. m_LogoutHost = 0;
  14. m_LoginTimes = 0;
  15. m_FreeTimes = 0;
  16. m_ReposeTimes = 0;
  17. m_TalkTimes = 0;
  18. m_ReposeNum = 0;
  19. m_AnswerNum = 0;
  20. }
  21. CSItemAgentDetail::~CSItemAgentDetail(void)
  22. {
  23. }
  24. /*****************************************************************
  25. **【函数名称】 __onEvtLogin
  26. **【函数功能】 坐席签入事件
  27. **【参数】 签入信息指针
  28. **【返回值】
  29. ****************************************************************/
  30. void CSItemAgentDetail::__onEvtLogin( PARAM Param )
  31. {
  32. // GetEvtInfo
  33. T_EvtLogIn* repInfo = (T_EvtLogIn*)Param;
  34. m_ExtID = repInfo->nExtID; // 关联分机
  35. lstrcpy(m_AgentIP, repInfo->szAgentIP); // 坐席IP
  36. m_GroupID = repInfo->szGroup; // 组号
  37. m_AgentType = repInfo->nAgentType; // 坐席类型
  38. m_TimeLogin = time(NULL); // 签入时间
  39. // 编写sql语句
  40. m_Sql.Format(_T("INSERT INTO rep_agent_detail(AgentId, LoginId, ExtId, AgentIP, GroupId, AgentType, TimeLogin)VALUES\
  41. (%d, %d, %d, '%s', '%s', %d, %s)"),
  42. m_AgentID,
  43. m_LoginID,
  44. m_ExtID,
  45. m_AgentIP,
  46. m_GroupID,
  47. m_AgentType,
  48. FormatTime(m_TimeLogin));
  49. __execSQL();
  50. }
  51. /*****************************************************************
  52. **【函数名称】 __onEvtLogout
  53. **【函数功能】 坐席签出事件
  54. **【参数】 签入信息指针
  55. **【返回值】
  56. ****************************************************************/
  57. void CSItemAgentDetail::__onEvtLogout( PARAM Param )
  58. {
  59. // GetEvtInfo
  60. T_EvtLogout* repInfo = (T_EvtLogout*)Param;
  61. m_TimeLogout = time(NULL); // 签出时间
  62. m_LogoutHost = repInfo->nLogoutHost; // 签出原因
  63. m_LoginTimes = (UINT)(m_TimeLogout - m_TimeLogin); // 签入时长
  64. m_FreeTimes = repInfo->nTimeFree; // 空闲时长
  65. m_ReposeTimes = repInfo->nTimeRepose; // 小休时长
  66. m_TalkTimes = repInfo->nTimeTalk; // 通话时长
  67. m_ReposeNum = repInfo->nReposeCount; // 置忙次数
  68. m_AnswerNum = repInfo->nAnswerCount; // 应答次数
  69. //根据签出原因,判断签出类型
  70. if (m_LogoutHost == 0)
  71. {
  72. m_LogoutType = 2; //异常签出,连接断开
  73. }
  74. else if (m_LogoutHost == m_AgentID)
  75. {
  76. m_LogoutType = 0; //正常签出
  77. }
  78. else if (m_LogoutHost != m_AgentID)
  79. {
  80. m_LogoutType = 1; //强制签出
  81. }
  82. // 编写sql语句
  83. m_Sql.Format(_T("UPDATE rep_agent_detail SET TimeLogout = %s, LogoutHost = %d, LogoutType = %d, LoginTimes = %d,\
  84. ReposeTimes = %d, TalkTimes = %d, ReposeNum = %d, AnswerNum = %d WHERE AgentId = %d AND LoginId = %d"),
  85. FormatTime(m_TimeLogout),
  86. m_LogoutHost,
  87. m_LogoutType, //签出类型
  88. m_LoginTimes,
  89. m_ReposeTimes,
  90. m_TalkTimes,
  91. m_ReposeNum,
  92. m_AnswerNum,
  93. m_AgentID,
  94. m_LoginID);
  95. __execSQL();
  96. //执行数据统计存储过程
  97. if (DB_MySQL == IOtlConnection::getInstance()->GetDatabaseType())
  98. m_Sql.Format(_T("CALL proc_DataAnalysis(%d,%d,%s,%s)"), m_AgentID, m_LoginID, FormatTime(m_TimeLogin), FormatTime(m_TimeLogout));
  99. else
  100. m_Sql.Format(_T("exec proc_DataAnalysis %d,%d,%s,%s"), m_AgentID, m_LoginID, FormatTime(m_TimeLogin), FormatTime(m_TimeLogout));
  101. __execSQL();
  102. }
  103. /*****************************************************************
  104. **【函数名称】 onSEvent
  105. **【函数功能】 统计事件变化通知
  106. **【参数】
  107. **【返回值】
  108. ****************************************************************/
  109. void CSItemAgentDetail::onSEvent( REP_EVENT EvtType, PARAM Param )
  110. {
  111. if(Param == NULL) return;
  112. switch(EvtType)
  113. {
  114. case REP_EVENT_LOGIN: // 座席签入统计
  115. __onEvtLogin(Param);
  116. break;
  117. case REP_EVENT_LOGOUT: // 座席签出统计
  118. __onEvtLogout(Param);
  119. break;
  120. default:
  121. return;
  122. }
  123. }