⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsacd_ivrview.cpp

📁 dsacd_ivr 的实现
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// 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 + -