MiddleWares_YiHe 郑州颐和医院随访系统中间件

TaskIvrContinueQuene.cpp 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include "stdafx.h"
  2. #include "TaskIvrContinueQuene.h"
  3. #include "LineHolder.h"
  4. #include "LogicLine.h"
  5. #include "IvrFlowHolder.h"
  6. #include "IvrFlow.h"
  7. #include "NetworkCti.h"
  8. #include "CtiCore.h"
  9. CTaskIvrContinueQuene::CTaskIvrContinueQuene(CPduEntity &PduEntity): CTask(PduEntity), m_Step(0)
  10. {
  11. }
  12. CTaskIvrContinueQuene::~CTaskIvrContinueQuene(void)
  13. {
  14. }
  15. /*****************************************************************
  16. **【函数名称】 DoTask
  17. **【函数功能】 Task处理
  18. **【参数】
  19. **【返回值】 void
  20. ****************************************************************/
  21. BOOL CTaskIvrContinueQuene::DoTask()
  22. {
  23. // 显示日志
  24. ShowLog();
  25. // 校验
  26. if(!Verify()) return FALSE;
  27. // 设置当前操作类型
  28. m_pCurrLine->opType() = PDU_CMD_IVR_QUEUE_CONTINUE;
  29. // 设备操作
  30. LineOpParam pLineOpParam;
  31. memset(&pLineOpParam,0,sizeof(pLineOpParam));
  32. lstrcpy(pLineOpParam.szParam3,m_CurrCmd.GetDataString(5)); // 等待放音文件名
  33. pLineOpParam.nParam1 = PVM_PLAY_ONLY; // 1放音收号 2 只放音不收号
  34. return CCtiCore::GetInstance().getDevLink().exec((long)this, LINE_OP_PLAY_VOICE, m_pCurrLine->lineId(), &pLineOpParam);
  35. }
  36. /*****************************************************************
  37. **【函数名称】 Verify
  38. **【函数功能】 校验
  39. **【参数】
  40. **【返回值】 BOOL
  41. ****************************************************************/
  42. BOOL CTaskIvrContinueQuene::Verify()
  43. {
  44. // 线路绑定校验
  45. if(!_bindLogicLine(m_CurrCmd.GetDataUInt(3)))
  46. return FALSE;
  47. // 放音内容校验
  48. if(m_CurrCmd.GetDataString(5) == "")
  49. {
  50. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 线路[%d]执行IVR继续等待排队任务校验时失败:等待提示音文件为空"), m_pCurrLine->lineId());
  51. return FALSE;
  52. }
  53. return TRUE;
  54. }
  55. /*****************************************************************
  56. **【函数名称】 ShowLog
  57. **【函数功能】 显示日志
  58. **【参数】
  59. **【返回值】 void
  60. ****************************************************************/
  61. void CTaskIvrContinueQuene::ShowLog()
  62. {
  63. // 显示日志
  64. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("IVR->CTI, CMD = [IVR继续排队], \
  65. IVR = %d, Line = %u, CallerNum = %s, FileName = %s"),
  66. m_CurrCmd.GetDataInt(1),
  67. m_CurrCmd.GetDataUInt(3),
  68. m_CurrCmd.GetDataString(4),
  69. m_CurrCmd.GetDataString(5));
  70. }
  71. /*****************************************************************
  72. **【函数名称】 OnDevOpResult
  73. **【函数功能】 底层线路操作结果
  74. **【参数】
  75. **【返回值】 void
  76. ****************************************************************/
  77. BOOL CTaskIvrContinueQuene::OnDevOpResult(EventOpResult &EvtInfo)
  78. {
  79. if(m_Step == 0)
  80. {
  81. // 向ACD发暂停排队命令
  82. CPduEntity CmdPauseQueue(PDU_CMD_CTI_ACD_QUEUE_PAUSE);
  83. CmdPauseQueue.SetDataInt(0, m_CurrCmd.GetDataInt(1));
  84. CNetworkCti::GetInstance().send2ACD(CmdPauseQueue);
  85. // 命令返回
  86. _ProcCmdReturn(FALSE, true);
  87. }
  88. return FALSE;
  89. }
  90. /*****************************************************************
  91. **【函数名称】 OnCmdOperation
  92. **【函数功能】 task附加操作处理接口
  93. **【参数】 命令
  94. **【返回值】 void
  95. ****************************************************************/
  96. BOOL CTaskIvrContinueQuene::OnCmdOperation(CPduEntity &PduEntity)
  97. {
  98. // 设置排队成功标志
  99. if(PduEntity.GetCmdType() != PDU_CMD_IVR_QUEUE_CONTINUE) return FALSE;
  100. if(!PduEntity.GetIsExecReturn()) return FALSE;
  101. if(!PduEntity.GetDataBool(0)) return FALSE;
  102. m_Step = 1;
  103. // 发送停止放音
  104. // 2019-09-11,颐和随访
  105. LineOpParam pLineOpParam;
  106. memset(&pLineOpParam,0,sizeof(pLineOpParam));
  107. pLineOpParam.nParam1 = /*PVM_STOP_PLAY*/PVM_PLAY_ONLY;
  108. CCtiCore::GetInstance().getDevLink().exec((long)NULL, LINE_OP_PLAY_VOICE, m_pCurrLine->lineId(), &pLineOpParam); // 执行标识置为NULL,即不需等待底层的执行结果
  109. Sleep(200);
  110. // 获取返回命令信息 分配的坐席工号,分机号
  111. m_CurrCmd.SetDataUInt(7, PduEntity.GetDataUInt(7));
  112. m_CurrCmd.SetDataUInt(8, PduEntity.GetDataUInt(8));
  113. // 命令返回,并释放占用的线路
  114. _ProcCmdReturn(TRUE, true);
  115. return TRUE;
  116. }