CustomerHandleFSM.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #include "stdafx.h"
  2. #include "SpBase.h"
  3. #include "CustomerHandleFSM.h"
  4. #include "EventCode.h"
  5. #include "Event.h"
  6. CCustomerHandleFSM::CCustomerHandleFSM()
  7. {
  8. }
  9. CCustomerHandleFSM::~CCustomerHandleFSM()
  10. {
  11. }
  12. void CCustomerHandleFSM::OnStateTrans( int iSrcState, int iDstState )
  13. {
  14. LOG_TRACE("CustomerHandle from state %s to %s", GetStateName(iSrcState), GetStateName(iDstState));
  15. //客户经理录像,或者用户桌面状态为'I'和'U'时屏蔽客户感知
  16. if (iSrcState != FSM_STATE_INIT && iDstState != FSM_STATE_EXIT)
  17. {
  18. SetSysState(iDstState);
  19. }
  20. else
  21. {
  22. Dbg("Sales Recoding or other desktop type,ignore all event!");
  23. }
  24. }
  25. ErrorCodeEnum CCustomerHandleFSM::SetSysState( int state )
  26. {
  27. static char *sts[] = {
  28. "N", // None
  29. "A", // Attention
  30. "C", // Control
  31. "T", // Assist
  32. "G", // Agent
  33. "A", // Attention
  34. "N", // None
  35. };
  36. ErrorCodeEnum errCode;
  37. if (*sts[state] != 'N' && *sts[nOldstate] == 'N')
  38. {
  39. m_uid = CUUID::Create(m_uid);
  40. Dbg("NEW SessionID=%s",m_uid.ToString());
  41. errCode = GetEntityBase()->GetFunction()->SetSysVar("SessionID",m_uid.ToString());
  42. if (errCode != Error_Succeed)
  43. {
  44. Dbg("set SessionID failed (%d).",errCode);
  45. }
  46. LogEvent(Severity_Middle, EVENT_MOD_CUSTOMERAWARE_BEGIN, m_uid.ToString());
  47. }
  48. //当从S5(录音录像状态)跳到S2(接近状态),或者进入S5状态时生成新的uuid防止uuid不断开
  49. else if((state == s2 && *sts[state] == 'A' && *sts[nOldstate] == 'A')||(state == s5))
  50. {
  51. m_uid = CUUID::Create(m_uid);
  52. Dbg("NEW SessionID=%s",m_uid.ToString());
  53. errCode = GetEntityBase()->GetFunction()->SetSysVar("SessionID",m_uid.ToString());
  54. if (errCode != Error_Succeed)
  55. {
  56. Dbg("set SessionID failed (%d).",errCode);
  57. }
  58. }
  59. else if (*sts[state] == 'N')
  60. {
  61. if (*sts[nOldstate] != 'N')
  62. {
  63. LogEvent(Severity_Middle, EVENT_MOD_CUSTOMERAWARE_END, m_uid.ToString());
  64. //客户离开,清空sessionid
  65. errCode = GetEntityBase()->GetFunction()->SetSysVar("SessionID","N");
  66. if (errCode != Error_Succeed)
  67. {
  68. Dbg("set SessionID to Null failed (%d).",errCode);
  69. }
  70. }
  71. }
  72. nOldstate = state;
  73. Dbg("SetsysVar CustomerHandle to %s",sts[state]);
  74. return GetEntityBase()->GetFunction()->SetSysVar("CustomerHandle", sts[state]);
  75. }
  76. ErrorCodeEnum CCustomerHandleFSM::OnInit()
  77. {
  78. AddStateHooker(this);
  79. nOldstate = 0;
  80. m_bIsSalesRecord = FALSE;
  81. return Error_Succeed;
  82. }
  83. ErrorCodeEnum CCustomerHandleFSM::OnExit()
  84. {
  85. return Error_Succeed;
  86. }
  87. void CCustomerHandleFSM::s0_on_entry()
  88. {
  89. LogEvent(Severity_Middle, LOG_EVT_HEADLIGHT_GREEN_OFF, "LOG_EVT_HEADLIGHT_GREEN_OFF");
  90. }
  91. void CCustomerHandleFSM::s0_on_exit()
  92. {
  93. LogEvent(Severity_Middle, LOG_EVT_HEADLIGHT_GREEN_ON, "LOG_EVT_HEADLIGHT_GREEN_ON");
  94. }
  95. unsigned int CCustomerHandleFSM::s0_on_event(FSMEvent* event)
  96. {
  97. return 0;
  98. }
  99. void CCustomerHandleFSM::s1_on_entry() {}
  100. void CCustomerHandleFSM::s1_on_exit() {}
  101. unsigned int CCustomerHandleFSM::s1_on_event(FSMEvent* event)
  102. {
  103. return 0;
  104. }
  105. void CCustomerHandleFSM::s2_on_entry() {}
  106. void CCustomerHandleFSM::s2_on_exit() {}
  107. unsigned int CCustomerHandleFSM::s2_on_event(FSMEvent* event)
  108. {
  109. return 0;
  110. }
  111. void CCustomerHandleFSM::s3_on_entry() {}
  112. void CCustomerHandleFSM::s3_on_exit() {}
  113. unsigned int CCustomerHandleFSM::s3_on_event(FSMEvent* event)
  114. {
  115. return 0;
  116. }
  117. void CCustomerHandleFSM::s4_on_entry() {}
  118. void CCustomerHandleFSM::s4_on_exit() {}
  119. unsigned int CCustomerHandleFSM::s4_on_event(FSMEvent* event)
  120. {
  121. return 0;
  122. }
  123. void CCustomerHandleFSM::s5_on_entry()
  124. {
  125. return;
  126. }
  127. void CCustomerHandleFSM::s5_on_exit()
  128. {
  129. return;
  130. }
  131. unsigned int CCustomerHandleFSM::s5_on_event(FSMEvent* event)
  132. {
  133. return 0;
  134. }
  135. void CCustomerHandleFSM::s6_on_entry()
  136. {
  137. return;
  138. }
  139. void CCustomerHandleFSM::s6_on_exit()
  140. {
  141. return;
  142. }
  143. unsigned int CCustomerHandleFSM::s6_on_event(FSMEvent* event)
  144. {
  145. return 0;
  146. }