📄 dsacd_ivrview.cpp
字号:
// dsACD_IVRView.cpp : implementation of the CDsACD_IVRView class
//
#include "stdafx.h"
#include "dsACD_IVR.h"
#include "dsACD_IVRDoc.h"
#include "dsACD_IVRView.h"
#include "VariableDefine.h"
#include "DataSort.h"
#include "DBConnection.h"
#include "ConControl.h"
#include "Switch.h"
#include "Match.h"
#include "Circulate.h"
#include "Function.h"
#include "Sign.h"
#include "Jump.h"
#include "VarOperate.h"
#include "Convert.h"
#include "DateTime.h"
#include "DBOperate.h"
#include "GetField.h"
#include "QueryCommand.h"
#include "QueryParameter.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDsACD_IVRView
static CString csTreeItems[] =
{
_T("数据定义"), //0
_T("返回值"), //1
_T("流程开始"), //2
_T("流程结束"), //3
_T("变量定义:"), //4
_T("数据库连接:"), //5
_T("数据分类"), //6
_T("变量运算:无变量 = 空 无操作 空"), //7
_T("文字转换:无变量 无操作"), //8
_T("日期时间:无变量 系统时间 无操作"), //9
_T("数据库操作:无数据库 无操作"), //10
_T("取字段值:无数据库 空 无变量"), //11
_T("设置查询命令:无数据库 自动匹配 空"), //12
_T("设置查询参数:无数据库 空 空"), //13
_T("带参数的查询命令"), //14
_T("条件控制: 空"), //15
_T("多路分支: 空"), //16
_T("分支匹配: 空"), //17
_T("循环控制: 空"), //18
_T("程序块"), //19
_T("标号位置:"), //20
_T("跳转语句: 无标号位置"), //21
_T("结束流程"), //22
_T("开始流程"), //23
_T("接入排队"), //24
_T("取得呼入标识ID"), //25
_T("取得主叫信息"), //26
_T("取得被叫信息"), //27
_T("设置优先级"), //28
_T("查找空闲坐席"), //29
_T("查找最近一次为该接入服务的座席"),//30
_T("分配接入给座席"), //31
_T("将接入转到座席组"), //32
_T("振铃: 1次"), //33
_T("应答"), //34
_T("呼叫: 空 电话号码 20秒"), //35
_T("放音: 空 可中断"), //36
_T("录音: 空 20秒 可中断"), //37
_T("收码: 无变量 1"), //38
_T("发码: 空"), //39
_T("休眠: 1.0秒 可中断") //40
};
static UINT nImages[] =
{
IDI_PUBLIC, //0
IDI_RETURNVALUE, //1
IDI_PUBLIC, //2
IDI_PUBLIC, //3
IDI_DATADEFINE, //4
IDI_DATADEFINE, //5
IDI_DATADEFINE, //6
IDI_DATAOPERATE, //7
IDI_DATAOPERATE, //8
IDI_DATAOPERATE, //9
IDI_DATAOPERATE, //10
IDI_DATAOPERATE, //11
IDI_DATAOPERATE, //12
IDI_DATAOPERATE, //13
IDI_DATAOPERATE, //14
IDI_FLOWCONTROL, //15
IDI_FLOWCONTROL, //16
IDI_FLOWCONTROL, //17
IDI_FLOWCONTROL, //18
IDI_FLOWCONTROL, //19
IDI_FLOWCONTROL, //20
IDI_FLOWCONTROL, //21
IDI_FLOWCONTROL, //22
IDI_FLOWCONTROL, //23
IDI_ACDOPERATE, //24
IDI_ACDOPERATE, //25
IDI_ACDOPERATE, //26
IDI_ACDOPERATE, //27
IDI_ACDOPERATE, //28
IDI_ACDOPERATE, //29
IDI_ACDOPERATE, //30
IDI_ACDOPERATE, //31
IDI_ACDOPERATE, //32
IDI_IVROPERATE, //33
IDI_IVROPERATE, //34
IDI_IVROPERATE, //35
IDI_IVROPERATE, //36
IDI_IVROPERATE, //37
IDI_IVROPERATE, //38
IDI_IVROPERATE, //39
IDI_IVROPERATE //40
};
/////////////////////////////////////////////////////////////////////////////
// CDsACD_IVRView
IMPLEMENT_DYNCREATE(CDsACD_IVRView, CTreeView)
BEGIN_MESSAGE_MAP(CDsACD_IVRView, CTreeView)
//{{AFX_MSG_MAP(CDsACD_IVRView)
ON_COMMAND(ID_DEF_VARIABLE, OnDefVariable)
ON_COMMAND(ID_DEF_DATASORT, OnDefDatasort)
ON_COMMAND(ID_DEF_DBCONNECTION, OnDefDBconnection)
ON_COMMAND(ID_OPE_CHARCONVERT, OnOpeCharconvert)
ON_COMMAND(ID_OPE_DATATIME, OnOpeDatatime)
ON_COMMAND(ID_OPE_DBOPERATE, OnOpeDboperate)
ON_COMMAND(ID_OPE_FIELDOPERATE, OnOpeFieldoperate)
ON_COMMAND(ID_OPE_QUERYCOMMAND, OnOpeQuerycommand)
ON_COMMAND(ID_OPE_QUERYPARAMETER, OnOpeQueryparameter)
ON_COMMAND(ID_OPE_VAROPERATE, OnOpeVaroperate)
ON_COMMAND(ID_FLOW_SWITCH, OnFlowSwitch)
ON_COMMAND(ID_FLOW_SIGN, OnFlowSign)
ON_COMMAND(ID_FLOW_RESTART, OnFlowRestart)
ON_COMMAND(ID_FLOW_MATCH, OnFlowMatch)
ON_COMMAND(ID_FLOW_JUMP, OnFlowJump)
ON_COMMAND(ID_FLOW_FUNCTION, OnFlowFunction)
ON_COMMAND(ID_FLOW_END, OnFlowEnd)
ON_COMMAND(ID_FLOW_CONDITION, OnFlowCondition)
ON_COMMAND(ID_FLOW_CIRCULATE, OnFlowCirculate)
ON_COMMAND(ID_ACD_ASSIGNTOACDGROUP, OnACDAssigntoACDgroup)
ON_COMMAND(ID_ACD_ASSIGNTOAGENT, OnACDAssigntoAgent)
ON_COMMAND(ID_ACD_FINDEMPTYAGENT, OnACDFindEmptyAgent)
ON_COMMAND(ID_ACD_FINDRECENTAGENT, OnACDFindRecentAgent)
ON_COMMAND(ID_ACD_GETCALLEDINFO, OnACDGetCalledInfo)
ON_COMMAND(ID_ACD_GETCALLERID, OnACDGetCallerID)
ON_COMMAND(ID_ACD_GETCALLERINFO, OnACDGetCallerInfo)
ON_COMMAND(ID_ACD_QUEUECALL, OnACDQueueCall)
ON_COMMAND(ID_ACD_SETPRIORITY, OnACDSetPriority)
ON_COMMAND(ID_IVR_CALL, OnIVRCall)
ON_COMMAND(ID_IVR_PLAY, OnIVRPlay)
ON_COMMAND(ID_IVR_RECEIVECODE, OnIVRReceiveCode)
ON_COMMAND(ID_IVR_RECORD, OnIVRRecord)
ON_COMMAND(ID_IVR_RESPONSE, OnIVRResponse)
ON_COMMAND(ID_IVR_RING, OnIVRRing)
ON_COMMAND(ID_IVR_SENDCODE, OnIVRSendCode)
ON_COMMAND(ID_IVR_SUSPEND, OnIVRSuspend)
ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnBegindrag)
ON_WM_CREATE()
ON_COMMAND(IDR_POP_DELETE, OnPopDelete)
ON_COMMAND(IDR_POP_PROPERTY, OnPopProperty)
ON_COMMAND(IDR_POP_EXTENDALL, OnPopExtendAll)
ON_COMMAND(IDR_POP_CLOSEALL, OnPopCloseAll)
ON_COMMAND(IDR_POP_EXTENDCURRENT, OnPopExtendCurrent)
ON_COMMAND(IDR_POP_CLOSECURRENT, OnPopCloseCurrent)
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
ON_WM_KEYDOWN()
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDsACD_IVRView construction/destruction
CDsACD_IVRView::CDsACD_IVRView()
{
//初始化变量
// m_dwItemCount=0;
m_csCurFileName.Empty();
m_bModified=FALSE;
}
CDsACD_IVRView::~CDsACD_IVRView()
{
}
BOOL CDsACD_IVRView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CTreeView::PreCreateWindow(cs);
}
int CDsACD_IVRView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CTreeView::OnCreate(lpCreateStruct) == -1)
return -1;
// Register Tree control as a drop target
m_CTreeDropTarget.Register(this);
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CDsACD_IVRView drawing
void CDsACD_IVRView::OnDraw(CDC* pDC)
{
CDsACD_IVRDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CDsACD_IVRView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
GetParentFrame ( )->SetWindowText (_T ("ACD编辑窗口"));
// TODO: You may populate your TreeView with items by directly accessing
// its tree control through a call to GetTreeCtrl().
m_TreeCtrl = &GetTreeCtrl();
m_TreeCtrl->ModifyStyle (0, TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT);
m_TreeCtrl->SetBkColor(RGB(0,0,0));
m_TreeCtrl->SetTextColor(RGB(0,255,0));
// m_Font.CreatePointFont (85, _T("Tahoma"));
// m_TreeCtrl->SetFont (&m_Font);
m_ImageList.Create (16, 16, true, 2, 1);
HICON hIcon;
for (int i =0; i < 41; ++i)
{
hIcon= AfxGetApp()->LoadIcon (nImages[i]);
m_ImageList.Add (hIcon);
}
m_TreeCtrl->SetImageList( &m_ImageList, TVSIL_NORMAL );
// add the first parent item
m_hParent1 = m_TreeCtrl->InsertItem( csTreeItems[0], 0, 0 );
dsACDObjectBase * pObj0 = new dsACDDataDefine;
g_MapObj.AddMapItem(m_hParent1, pObj0);
// add childeren items
m_hChild = m_TreeCtrl->InsertItem (csTreeItems[1], 1, 1, m_hParent1, TVI_LAST);
dsACDObjectBase * pObj1 = new dsACDReturnValue;
g_MapObj.AddMapItem(m_hChild, pObj1);
// add other parent items
m_hParent2 = m_TreeCtrl->InsertItem( csTreeItems[2], 2, 2 );
dsACDObjectBase * pObj2 = new dsACDFlowBegin;
g_MapObj.AddMapItem(m_hParent2, pObj2);
m_hParent3 = m_TreeCtrl->InsertItem( csTreeItems[3], 3, 3);
dsACDObjectBase * pObj3 = new dsACDFlowEnd;
g_MapObj.AddMapItem(m_hParent3, pObj3);
m_TreeCtrl->Expand(m_hParent1, TVE_EXPAND);
// GetWindowText(m_csTitle); //获得程序刚启动时的窗口标题
}
/////////////////////////////////////////////////////////////////////////////
// CDsACD_IVRView diagnostics
#ifdef _DEBUG
void CDsACD_IVRView::AssertValid() const
{
CTreeView::AssertValid();
}
void CDsACD_IVRView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
CDsACD_IVRDoc* CDsACD_IVRView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDsACD_IVRDoc)));
return (CDsACD_IVRDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDsACD_IVRView message handlers
HTREEITEM CDsACD_IVRView::AddFlowCondition(HTREEITEM hParent, HTREEITEM hInsertAfter)
{
HTREEITEM hConditionItem ;
HTREEITEM hConditionTrue ;
HTREEITEM hConditionFalse;
hConditionItem = m_TreeCtrl->InsertItem (csTreeItems[15], 15, 15, hParent, hInsertAfter);
dsCC_INFO * pCCInfo = new dsCC_INFO;
dsACDObjectBase * pObj0 = new dsACDConControl;
pObj0->Write(pCCInfo);
g_MapObj.AddMapItem(hConditionItem, pObj0);
hConditionTrue = m_TreeCtrl->InsertItem ("条件为真", 15, 15, hConditionItem, TVI_FIRST);
dsACDObjectBase * pObj1 = new dsACDConTrue;
g_MapObj.AddMapItem(hConditionTrue, pObj1);
hConditionFalse = m_TreeCtrl->InsertItem ("条件为假", 15, 15, hConditionItem, TVI_LAST);
dsACDObjectBase * pObj2 = new dsACDConFalse;
g_MapObj.AddMapItem(hConditionFalse, pObj2);
m_TreeCtrl->Expand(hConditionItem, TVE_EXPAND);
m_TreeCtrl->Expand(hParent, TVE_EXPAND);
m_bModified=TRUE;
return hConditionItem;
}
HTREEITEM CDsACD_IVRView::AddFlowSwitch(HTREEITEM hParent, HTREEITEM hInsertAfter)
{
HTREEITEM hSwitchItem ;
HTREEITEM hDefaultMatch;
hSwitchItem = m_TreeCtrl->InsertItem (csTreeItems[16], 16, 16, hParent, hInsertAfter);
dsSM_INFO * pSMInfo = new dsSM_INFO;
dsACDObjectBase * pObj0 = new dsACDSwitch;
pObj0->Write(pSMInfo);
g_MapObj.AddMapItem(hSwitchItem, pObj0);
hDefaultMatch = m_TreeCtrl->InsertItem ("缺省匹配", 16, 16, hSwitchItem, TVI_LAST);
dsACDObjectBase * pObj1 = new dsACDDefaultMatch;
g_MapObj.AddMapItem(hDefaultMatch, pObj1);
m_TreeCtrl->Expand(hSwitchItem, TVE_EXPAND);
m_TreeCtrl->Expand(hParent, TVE_EXPAND);
m_bModified=TRUE;
return hSwitchItem;
}
HTREEITEM CDsACD_IVRView::AddGeneralOperate(int i)
{
HTREEITEM hSelectedItem = m_TreeCtrl->GetSelectedItem();
HTREEITEM hSelectedItemBackup = hSelectedItem;
HTREEITEM hParentItem = m_TreeCtrl->GetParentItem(hSelectedItem);
HTREEITEM hItem;
if (NULL != hParentItem)
hSelectedItem = hParentItem;
if(m_hParent1 == hSelectedItem)
{
hItem = m_TreeCtrl->InsertItem (csTreeItems[i], i, i, m_hParent2, TVI_LAST);
m_TreeCtrl->Expand(m_hParent2, TVE_EXPAND);
}
else if(m_hParent2 == hSelectedItem)
{
hItem = m_TreeCtrl->InsertItem (csTreeItems[i], i, i, m_hParent2, m_TreeCtrl->GetSelectedItem());
m_TreeCtrl->Expand(m_hParent2, TVE_EXPAND);
}
else if(m_hParent3 == hSelectedItem)
{
hItem = m_TreeCtrl->InsertItem (csTreeItems[i], i, i, m_hParent3, m_TreeCtrl->GetSelectedItem());
m_TreeCtrl->Expand(m_hParent3, TVE_EXPAND);
}
else
{
CString csItemName = m_TreeCtrl->GetItemText(hParentItem);
if (csItemName.Left(8) == _T("条件控制") || csItemName.Left(8) == _T("多路分支"))
{
hItem = m_TreeCtrl->InsertItem (csTreeItems[i], i, i, hSelectedItemBackup, TVI_FIRST);
m_TreeCtrl->Expand(hSelectedItemBackup, TVE_EXPAND);
}
else
{
hItem = m_TreeCtrl->InsertItem (csTreeItems[i], i, i, hParentItem, m_TreeCtrl->GetSelectedItem());
m_TreeCtrl->Expand(hParentItem, TVE_EXPAND);
}
}
m_TreeCtrl->SelectItem(hItem);
m_bModified=TRUE;
return hItem;
}
void CDsACD_IVRView::OnDefVariable()
{
static int j= 0;
j++;
CString csTemp;
csTemp.Format("%s%d", "新变量", j);
CString csNewVariable = csTreeItems[4] + csTemp;
HTREEITEM hItem = m_TreeCtrl->InsertItem (csNewVariable, 4, 4, m_hParent1, m_TreeCtrl->GetSelectedItem());
m_TreeCtrl->SelectItem(hItem);
dsVD_INFO * pVDInfo = new dsVD_INFO;
pVDInfo->Name = csTemp;
dsACDObjectBase * pObj = new dsACDObjVariable;
pObj->Write(pVDInfo);
g_MapObj.AddMapItem(hItem,pObj);
m_bModified=TRUE;
}
void CDsACD_IVRView::OnDefDatasort()
{
HTREEITEM hItem = m_TreeCtrl->InsertItem (csTreeItems[6], 6, 6, m_hParent1, m_TreeCtrl->GetSelectedItem());
m_TreeCtrl->SelectItem(hItem);
dsDS_INFO * pDSInfo = new dsDS_INFO;
dsACDObjectBase * pObj = new dsACDObjDataSort;
pObj->Write(pDSInfo);
g_MapObj.AddMapItem(hItem,pObj);
m_bModified=TRUE;
}
void CDsACD_IVRView::OnDefDBconnection()
{
static int j= 0;
j++;
CString csTemp;
csTemp.Format("%s%d", "新数据库", j);
CString csNewVariable = csTreeItems[5] + csTemp + "自动匹配 空";
HTREEITEM hItem = m_TreeCtrl->InsertItem (csNewVariable, 5, 5, m_hParent1, m_TreeCtrl->GetSelectedItem());
m_TreeCtrl->SelectItem(hItem);
dsDBConn_INFO * pInfo = new dsDBConn_INFO;
pInfo->Name = csTemp;
pInfo->Type = "自动匹配";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -