📄 phonerecorddlg.cpp
字号:
// 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 + -