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

📄 phonerecorddlg.cpp

📁 基于Access数据库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	// TODO: Add your command handler code here
	CEmployeeDlg* dlg = new CEmployeeDlg;
	dlg->Create(IDD_EMPLOYEES_DIALOG,this);
	dlg->ShowWindow(SW_SHOW);
}

void CPhoneRecordDlg::OnMenumanufacture() 
{
	// TODO: Add your command handler code here
	CManufactureDlg* dlg = new CManufactureDlg;
	dlg->Create(IDD_MANUFACTURE_DIALOG,this);
	dlg->ShowWindow(SW_SHOW);

}

void CPhoneRecordDlg::OnMenuabout() 
{
	// TODO: Add your command handler code here
	CAboutDlg dlgAbout;
	dlgAbout.DoModal();
}

void CPhoneRecordDlg::OnMenuexit() 
{
	// TODO: Add your command handler code here
	if(MessageBox("确定要退出企业电话语音录音管理系统吗?","系统提示",
		MB_OKCANCEL|MB_ICONQUESTION)!=IDOK)
		return;
	//删除系统托盘
	NOTIFYICONDATA data;
	data.cbSize = sizeof(NOTIFYICONDATA);
	data.hWnd   = m_hWnd;
	data.uID    = IDR_MAINFRAME;
	Shell_NotifyIcon(NIM_DELETE,&data);
	delete []m_pLines;
	FreeDRV();
	CDialog::OnCancel();
}

void CPhoneRecordDlg::OnOK()
{
}

void CPhoneRecordDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	PUSH_PLAY();
	FeedSigFunc();	
	CString str;
	BOOL bOffHook = FALSE;
	for(int i=0;i<m_ChanelCount;i++)
	{
		if(m_pLines[i].IsReceiving)
		{
			StartSigCheck(i);
			ReadNumber(i);
		}
		if(RingDetect(i))
		{
			if(m_pLines[i].IsReceiving == FALSE)
			{
				StartSigCheck(i);
				ResetCallerIDBuffer(i);
				StartTimer(i,4);
				ReadNumber(i);
				m_pLines[i].IsReceiving = TRUE;
			}
		}
		
		if(m_pLines[i].State == CH_INCEPT)
		{
			m_Grid.SetItemText(i,4,"检测信号音");
			m_Grid.SetItemText(i,2,"来电是:" + m_CurNumber);
			//摘机,开始录音
			OffHook(i);
			StartSigCheck(i);
			m_RecordNum = 2;
			m_IsBusy    = TRUE;
			Record(i);
		}
		if(m_pLines[i].State == CH_FREE)
		{
			m_Grid.SetItemText(i,4,"空闲");
			m_Grid.SetItemText(i,2,"");
		}	
		switch(m_pLines[i].State)
		{
		case CH_DIAL:
			{
				m_Grid.SetItemText(i,4,"检测信号音");
				m_Grid.SetItemText(i,2,"呼叫号:" + m_Number);
				//检测某路DTMF发送是否结束,为1,以发送完毕,可以开始信号音检测
				if(CheckSendEnd(i) == 1)
				{
					StartSigCheck(i);
					m_pLines[i].State = CH_CHECKSIG;
				}
				break;
			}
		case CH_CHECKSIG:
			{
				int sig = Sig_CheckDial(i);
				if(sig == S_BUSY)
				{
					m_pLines[i].State = CH_BUSY;
				}
				else if(sig == S_CONNECT)
				{
					m_pLines[i].State = CH_CONNECT;
				}
				else if(sig == S_NOSIGNAL)
				{
					m_pLines[i].State = CH_NOSIGNAL;
				}
				else if(sig == S_NOBODY)
				{
					m_pLines[i].State = CH_NOBODY;
				}
				else if(sig == S_NODIALTONE)
				{
					m_pLines[i].State = CH_NODIALTONE;
				}
				break;
			}
		case CH_CONNECT:
			{
				m_RecordNum = 1;
				m_IsBusy    = TRUE;
				Record(i);
				break;
			}
		case CH_NODIALTONE: //没有信号音
		case CH_NOSIGNAL:   //没有信号
		case CH_BUSY:       //对方占线(检测到忙音)
			{
				OnHangup();
				break;
			}
		}
		if(m_IsBusy == TRUE)
		{
			if(Sig_CheckBusy(i) == 1) 
			{
				CString sql;
				CTime time = CTime::GetCurrentTime();
				StopRecordFile(i);
				m_IsOffHook = TRUE;
				Sig_ResetCheck(i);
				CString namefile;
				namefile = m_RecordFile.Left(m_RecordFile.GetLength()-4)+".vol";
				CString str1,str2;
				str1 = "f:\\"+m_RecordFile;
				str2 = "f:\\"+namefile;
				PcmtoWave(str2.GetBuffer(0),str1.GetBuffer(0));
				ADOConn m_AdoConn;
				m_AdoConn.OnInitADOConn();
				sql.Format("insert into tb_record(文件名称,文件路径,录制时间)values\
					('%s','%s','%s')",m_RecordFile,"f:\\",time.Format("%Y-%m-%d %H:%M:%S"));
				m_AdoConn.ExecuteSQL((_bstr_t)sql);
				m_AdoConn.ExitConnect();
				AddToDataBase(m_RecordFile,time);
				m_IsBusy = FALSE;
				Sig_ResetCheck(i);
				StartSigCheck(i);
				m_pLines[i].IsReceiving = FALSE;
				m_pLines[i].CallerID    = "";
				m_CurTime               = "";
				m_Grid.SetItemText(i,2,"");
				m_Grid.SetItemText(i,3,"");
				m_Grid.SetItemText(i,4,"");
				m_pLines[i].State = CH_FREE;
			}
		}
	}
	CDialog::OnTimer(nIDEvent);
}

void CPhoneRecordDlg::ReadNumber(WORD nID)
{
	char number[100];
	int  result;
	PUSH_PLAY();
	FeedSigFunc();	
	memset(number,0,100);	
	result = GetCallerIDStr(nID,number);
	GetDtmfCode(nID);
	if((result==3) || (result==4))
	{
		m_CurNumber = number;
		m_CurNumber = m_CurNumber.Mid(8);
		m_pLines[nID].CallerID = m_CurNumber;
		m_pLines[nID].State = CH_INCEPT;
		if(m_CurTime.IsEmpty())
			m_CurTime = CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S");
		m_Grid.SetItemText(nID,3,m_CurTime);
		InitDtmfBuf(nID);
	}
}

void CPhoneRecordDlg::OnDialup() 
{
	// TODO: Add your control notification handler code here
	CString str,number;
	m_Chanel.GetWindowText(str);
	m_PhoneNum.GetWindowText(number);
	m_Number = number;
	if(str.IsEmpty()||number.IsEmpty())
		return;
	m_CurChanel = atoi(str);
	OffHook(m_CurChanel);
	int ret = Sig_StartDial(m_CurChanel,m_Number.GetBuffer(0),"",0);
	if(!ret)
	{
		MessageBox("拨出失败");
		return;
	}
	m_pLines[m_CurChanel].State = CH_DIAL;
}

void CPhoneRecordDlg::OnHangup() 
{
	// TODO: Add your control notification handler code here
	if(m_RecordNum == 1)
	{
		CString sql;
		CTime time = CTime::GetCurrentTime();
		StopRecordFile(m_CurChanel);
		m_IsOffHook = TRUE;
		Sig_ResetCheck(m_CurChanel);
		CString namefile;
		namefile = m_RecordFile.Left(m_RecordFile.GetLength()-4)+".vol";
		CString str1,str2;
		str1 = "f:\\"+m_RecordFile;
		str2 = "f:\\"+namefile;
		PcmtoWave(str2.GetBuffer(0),str1.GetBuffer(0));
		ADOConn m_AdoConn;
		m_AdoConn.OnInitADOConn();
		sql.Format("insert into tb_record(文件名称,文件路径,录制时间)values\
			('%s','%s','%s')",m_RecordFile,"f:\\",time.Format("%Y-%m-%d %H:%M:%S"));
		m_AdoConn.ExecuteSQL((_bstr_t)sql);
		m_AdoConn.ExitConnect();
		AddToDataBase(m_RecordFile,time);
	}
	HangUp(m_CurChanel);
	Sig_ResetCheck(m_CurChanel);
	StartSigCheck(m_CurChanel);
	m_pLines[m_CurChanel].State = CH_FREE;
	m_RecordNum = -1;
}

void CPhoneRecordDlg::OnPhonebook() 
{
	// TODO: Add your control notification handler code here
	CPhoneBook dlg;
	dlg.DoModal();
	m_PhoneNum.SetWindowText(dlg.m_Num);
}

void CPhoneRecordDlg::Record(WORD num)
{
	CString file,sql,name,snum;
	CTime time = CTime::GetCurrentTime();
	//对方没有挂机
	if(ReadCheckResult(num,RECORD_CHECK) != R_BUSY)
	{
		if(m_IsOffHook == TRUE)
		{	
			CTime time = CTime::GetCurrentTime();
			sql.Format("select * from tb_record where YEAR(录制时间) = %d and MONTH(录制时间)\
				= %d and DAY(录制时间) = %d",atoi(time.Format("%Y")),atoi(time.Format("%m")),
				atoi(time.Format("%d")));
			ADOConn m_AdoConn;
			m_AdoConn.OnInitADOConn();
			m_AdoConn.m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql);
			if(!m_AdoConn.m_pRecordset->adoEOF)
			{
				while(!m_AdoConn.m_pRecordset->adoEOF)
				{
					snum = (char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("文件名称");
					m_AdoConn.m_pRecordset->MoveNext();
				}
				CString ss;
				ss = snum.Left(snum.GetLength()-4);
				name.Format("%s%04d",time.Format("%y%m%d"),atoi(ss.Right(4))+1);
			}
			else
				name.Format("%s0001",time.Format("%y%m%d"));
			m_AdoConn.ExitConnect();
			name += ".vol";
			m_RecordFile = name.Left(name.GetLength()-4)+".wav";
			file.Format("f:\\%s",name);
			m_IsOffHook = FALSE;
			StartRecordFile(num,file.GetBuffer(0),60 * 8000);
		}
	}
	if(CheckRecordEnd(num))
	{
		StopRecordFile(num);
		m_IsOffHook = TRUE;
		Sig_ResetCheck(num);
		CString namefile;
		namefile = m_RecordFile.Left(m_RecordFile.GetLength()-4)+".vol";
		CString str1,str2;
		str1 = "f:\\"+m_RecordFile;
		str2 = "f:\\"+namefile;
		PcmtoWave(str2.GetBuffer(0),str1.GetBuffer(0));
		ADOConn m_AdoConn;
		m_AdoConn.OnInitADOConn();
		sql.Format("insert into tb_record(文件名称,文件路径,录制时间)values\
			('%s','%s','%s')",m_RecordFile,"f:\\",time.Format("%Y-%m-%d %H:%M:%S"));
		m_AdoConn.ExecuteSQL((_bstr_t)sql);
		m_AdoConn.ExitConnect();
		AddToDataBase(m_RecordFile,time);
	}
}

void CPhoneRecordDlg::AddToDataBase(CString name,CTime time)
{
	CString sql,number,strname;
	m_PhoneNum.GetWindowText(number);
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	sql.Format("select * from tb_client where 联系电话 = '%s'",number);
	m_AdoConn.m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql);
	if(!m_AdoConn.m_pRecordset->adoEOF)
	{
		strname = (char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("客户名称");
	}
	else
		strname = "新客户";
	if(m_RecordNum == 1)
	{
		sql.Format("insert into tb_phoneout(客户名称,去电号码,去电时间,洽谈内容)values\
			('%s','%s','%s','%s')",strname,number,time.Format("%Y-%m-%d %H:%M:%S"),name);
		m_AdoConn.ExecuteSQL((_bstr_t)sql);
	}
	else if(m_RecordNum == 2)
	{
		sql.Format("insert into tb_phonein(客户名称,来电号码,来电时间,洽谈内容)values\
			('%s','%s','%s','%s')",strname,number,time.Format("%Y-%m-%d %H:%M:%S"),name);
		m_AdoConn.ExecuteSQL((_bstr_t)sql);
	}
	m_AdoConn.ExitConnect();
}

void CPhoneRecordDlg::OnPhonein() 
{
	// TODO: Add your control notification handler code here
	CPhoneinDlg dlg;
	if(dlg.DoModal()==IDOK)
	{
		m_PhoneNum.SetWindowText(dlg.m_Number);
		OnDialup();
	}
}

void CPhoneRecordDlg::OnPhoneout() 
{
	// TODO: Add your control notification handler code here
	CPhoneoutDlg dlg;
	if(dlg.DoModal()==IDOK)
	{
		m_PhoneNum.SetWindowText(dlg.m_Number);
		OnDialup();
	}
}

void CPhoneRecordDlg::OnRecord() 
{
	// TODO: Add your control notification handler code here
	CRecordDlg* dlg = new CRecordDlg;
	dlg->Create(IDD_RECORD_DIALOG,this);
	dlg->ShowWindow(SW_SHOW);
}

void CPhoneRecordDlg::OnClient() 
{
	// TODO: Add your control notification handler code here
	CClientDlg* dlg = new CClientDlg;
	dlg->Create(IDD_CLIENT_DIALOG,this);
	dlg->ShowWindow(SW_SHOW);
}

void CPhoneRecordDlg::OnEmployee() 
{
	// TODO: Add your control notification handler code here
	CEmployeeDlg* dlg = new CEmployeeDlg;
	dlg->Create(IDD_EMPLOYEES_DIALOG,this);
	dlg->ShowWindow(SW_SHOW);
}

void CPhoneRecordDlg::OnManufacture() 
{
	// TODO: Add your control notification handler code here
	CManufactureDlg* dlg = new CManufactureDlg;
	dlg->Create(IDD_MANUFACTURE_DIALOG,this);
	dlg->ShowWindow(SW_SHOW);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -