📄 ipcountdlg.cpp
字号:
if (nCom == nGwCom[0])
nLine = nLine + 1;
else if (nCom == nGwCom[1])
nLine = nLine + 9;
if((sdlg->m_SaleGrid.GetTextMatrix(nLine,1),"空闲")==0)//看是否能去掉收不到号的情况
nFlagLine[nLine-1]=0;
if((nFlagLine[nLine-1]!=1)&&(nFlagLine[nLine-1]!=0)&&(nFlagLine[nLine-1]!=7))//在其他情况下,不发送数字,确定是否可收号
{
if((sdlg->m_SaleGrid.GetTextMatrix(nLine,1),"空闲")!=0)
{
m_strRXData[0]="";
return;
}
}
if(bOpenSale)
{
m_CalledNum[nLine-1]=m_strRXData[0].Mid(k+14,1);//数字
if(IsCharAlpha(m_CalledNum[nLine-1][0]))//处理掉非数字的字符
{
m_CalledNum[nLine-1]="2";
}
if(strcmp(m_CalledNum[nLine-1],"#")!=0)
{
m_CalledNum[nLine-1]=m_CalledTempNum[nLine-1]+m_CalledNum[nLine-1];
m_CalledTempNum[nLine-1]=m_CalledNum[nLine-1];
}
m_strRXData[0]="";
sdlg->m_SaleGrid.SetTextMatrix(nLine,2,m_CalledTempNum[nLine-1]);
sdlg->m_SaleGrid.SetTextMatrix(nLine,1,"拨号");
}
}
else //v12.2(R)处,网关登陆成功信息
{
m_strRXData[0]="";
}
}
}
void CIPCountDlg::OnRecvDTMF2(int nCom)
{
int k=0;
int nLine = 0;
k=m_strRXData[1].Find('(',0);
if(k!=-1)
{
CString strChan=m_strRXData[1].Mid(k-4,2);
if(strcmp(strChan,"ch")==0)//判断是否是摘挂机
{
CString strLine=m_strRXData[1].Mid(k+1,1);
CString strHangUp=m_strRXData[1].Mid(k+9,2);
m_strRXData[1]="";
nLine=atoi(strLine);
if (nCom == nGwCom[0])
nLine = nLine + 1;
else if (nCom == nGwCom[1])
nLine = nLine + 9;
if(strcmp(strHangUp,"up")==0)
{
if(bOpenSale)
{
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine,9),"开")==0)
{
nFlagLine[nLine-1]=1;//摘机
ShowStatus(nLine,1,"摘机");
ShowStatus(nLine,2,"");
ShowStatus(nLine,3,"");
ShowStatus(nLine,4,"");
ShowStatus(nLine,5,"");
ShowStatus(nLine,6,"");
m_CalledTempNum[nLine-1]="";
bClosed[nLine-1]=FALSE;
bTalking[nLine-1]=FALSE;
}//end of 是否开按钮
else
m_CalledTempNum[nLine-1]="";//09-26
}//end of bOpenSale
}//end of up
else //挂机
{
if(bOpenSale)
{
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine,9),"开")==0)
{
nFlagLine[nLine-1]=6;//挂机
if(bClosed[nLine-1])//对方先挂机
bClosed[nLine-1]=FALSE;//待测试
if((!bClosed[nLine-1])&&(!bTalking[nLine-1]))//没有通话或对方先挂机
{
if(bClosedLine[nLine-1])
{
sdlg->nCountClk[nLine-1]=0;
nFlagLine[nLine-1]=7;//锁定
ShowStatus(nLine,1,"锁定");
ShowStatus(nLine,9,"关");
ShowLineColor(nLine-1,RGB(255,50,0));
}
else
{
nFlagLine[nLine-1]=0;
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine,3),"")==0)//拨号未通话时
{
ShowStatus(nLine,2,"");//清空信息
ShowStatus(nLine,5,"");
}
ShowStatus(nLine,1,"空闲");
ShowLineColor(nLine-1,RGB(0,40,140));
}
return;
}
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine,2),"锁定")!=0)
{
int nRadio=mdlg->GetRadio();//从注册表获得设置信息
if(nRadio==0)
nRadio=1;//默认为挂机自动锁定
if(nRadio==1)//如果是挂机自动锁机
{
sdlg->nCountClk[nLine-1]=0;
sdlg->ControlLine(sdlg->nCountClk[nLine-1],nLine);//
}
else
{
if(bClosedLine[nLine-1])
{
nFlagLine[nLine-1]=7;//锁定
ShowStatus(nLine,1,"锁定");
ShowStatus(nLine,9,"关");
ShowLineColor(nLine-1,RGB(255,50,0));
}
else
{
nFlagLine[nLine-1]=0;
ShowStatus(nLine,1,"空闲");
ShowLineColor(nLine-1,RGB(0,40,140));
}
}
}
}
else //状态为关
{
nFlagLine[nLine-1]=7;//锁定
ShowStatus(nLine,1,"锁定");
}
}
}
m_strRXData[1]="";
}
else if(strcmp(strChan,"Ch")==0)//拨号
{
CString strLine=m_strRXData[1].Mid(k+1,1);
if(IsCharAlpha(strLine[0]))//处理掉非数字的字符,如果线号出错,直接返回
return;
nLine=atoi(strLine);
if (nCom == nGwCom[0])
nLine = nLine + 1;
else if (nCom == nGwCom[1])
nLine = nLine + 9;
if((sdlg->m_SaleGrid.GetTextMatrix(nLine,1),"空闲")==0)//看是否能去掉收不到号的情况
nFlagLine[nLine-1]=0;
if((nFlagLine[nLine-1]!=1)&&(nFlagLine[nLine-1]!=0)&&(nFlagLine[nLine-1]!=7))//在其他情况下,不发送数字,确定是否可收号
{
if((sdlg->m_SaleGrid.GetTextMatrix(nLine,1),"空闲")!=0)
{
m_strRXData[1]="";
return;
}
}
if(bOpenSale)
{
m_CalledNum[nLine-1]=m_strRXData[1].Mid(k+14,1);//数字
if(IsCharAlpha(m_CalledNum[nLine-1][0]))//处理掉非数字的字符
{
m_CalledNum[nLine-1]="2";
}
if(strcmp(m_CalledNum[nLine-1],"#")!=0)
{
m_CalledNum[nLine-1]=m_CalledTempNum[nLine-1]+m_CalledNum[nLine-1];
m_CalledTempNum[nLine-1]=m_CalledNum[nLine-1];
}
m_strRXData[1]="";
sdlg->m_SaleGrid.SetTextMatrix(nLine,2,m_CalledTempNum[nLine-1]);
sdlg->m_SaleGrid.SetTextMatrix(nLine,1,"拨号");
}
}
else //v12.2(R)处,网关登陆成功信息
{
m_strRXData[1]="";
}
}
}
void CIPCountDlg::MidInfo(CString strInfo,int nRecCom)
{
int nEnd=0;
int nCols=0;
int nStart=0;
CString iItems[10];
int i;
char tmp[256];
while(true)
{
nEnd=strInfo.Find(';',nStart);
if (nEnd==-1)
break;
if (nStart==strInfo.GetLength())
break;
memset(tmp,'\0',256);
for( i=nStart;i<nEnd;i++)
tmp[i-nStart]=LOBYTE(strInfo[i]);
nStart=nEnd;
nStart++;
if(nCols<6)
{
nCols++;
iItems[nCols]=tmp;
}
}
ComMsg->m_CallStatus=iItems[1];
ComMsg->m_CallStatus=ComMsg->m_CallStatus.Mid(0,2);
int strLen=0;
if(bOpenSale)
{
ComMsg->m_LineID=iItems[2];//添加其他从串口获得的数据
if(ComMsg->m_LineID.GetLength()>5)
{
ComMsg->m_LineID=ComMsg->m_LineID.Mid(5);
nLine=atoi(ComMsg->m_LineID);
if (nRecCom == nGwCom[1])
nLine = nLine + 8;
}
if(strcmp(ComMsg->m_CallStatus,"Al")==0)
{
if(nFlagLine[nLine]==3)//处理掉第二次Alerting
return;
bClosed[nLine]=FALSE;
nFlagLine[nLine]=3;//振铃状态
ShowStatus(nLine+1,1,"振铃");
sdlg->GetFeeRate(m_CalledTempNum[nLine],nLine);
if(sdlg->strGFeeRate[nLine].IsEmpty())//修改如果没读到费率时,确保以0.3元计费
sdlg->strGFeeRate[nLine]="0.3/m";
double nStartCountMin=atof(sdlg->strStartTLen[nLine]);
int nStartCountSecond=nStartCountMin*60;
CString strShowFeeRate="";
if(nStartCountSecond!=0)
{
CString strTempRate="";
if(nStartCountSecond<59)
{
strTempRate.Format("%d",nStartCountSecond);
strShowFeeRate=sdlg->strGFeeRate[nLine]+"/"+strTempRate+"s";//修改费率显示的状态
}
else
{
strTempRate.Format("%.2f",atof(sdlg->strGFeeRate[nLine])/*/nStartCountMin*/);
strShowFeeRate=strTempRate+"/m";//修改费率显示的状态
}
}//v12.03.07
ShowStatus(nLine+1,5,strShowFeeRate);//v12.03.05
//////////////////////////////////////////////////////////
//加一条件以确定是否需设优惠时段
strCutRate[nLine]="";
nCutLevelFlag[nLine]=0;
if(nGetSaleCutFlag==1)//启用优惠时段计费
{
for(int nCalledNum=5;nCalledNum>=0;nCalledNum--)
{
if(m_CalledTempNum[nLine].GetLength()>=nCalledNum)
{
m_CalledTempNum[nLine]=m_CalledTempNum[nLine].Mid(0,nCalledNum);
GetFromCutTb(nLine,m_CalledTempNum[nLine]);//获得折扣率
if(!strCutRate[nLine].IsEmpty())
break;
}
}
}
//////////////////////////////////////////////////////////
m_CalledTempNum[nLine]="";
}
else if(strcmp(ComMsg->m_CallStatus,"Ta")==0)
{
DealTalk(nLine);
}
else if(strcmp(ComMsg->m_CallStatus,"Cl")==0)
{
if(bTalking[nLine])
{
bClosed[nLine]=TRUE;
bTalking[nLine]=FALSE;
sdlg->nTempCount[nLine] = 0;
//增加滚动条代码
///////////////////////////////////////////////////////////////////////
m_RecodeInfo[nLine].m_Line = sdlg->m_SaleGrid.GetTextMatrix(nLine+1,0);
m_RecodeInfo[nLine].m_CalledNum = sdlg->m_SaleGrid.GetTextMatrix(nLine+1,2);
m_RecodeInfo[nLine].m_CDay = sdlg->m_SaleGrid.GetTextMatrix(nLine+1,3);
m_RecodeInfo[nLine].m_RTLen = sdlg->m_SaleGrid.GetTextMatrix(nLine+1,4);
m_RecodeInfo[nLine].m_Rate = sdlg->m_SaleGrid.GetTextMatrix(nLine+1,5);
m_RecodeInfo[nLine].m_RCount = sdlg->m_SaleGrid.GetTextMatrix(nLine+1,6);
m_RecodeInfo[nLine].m_StreamNum = strStreamNum[nLine];
m_RecodeInfo[nLine].m_COper = sdlg->m_strCName;
m_RecodeInfo[nLine].m_ORate = sdlg->strTotalORate[nLine];//03-03-26
m_RecodeInfo[nLine].m_PrePay = sdlg->m_SaleGrid.GetTextMatrix(nLine+1,7);
m_RecodeInfo[nLine].m_Remain = sdlg->m_SaleGrid.GetTextMatrix(nLine+1,8);
///////////////////////////////////////////v12.03.08//////////////////////////////
sdlg->m_ListScroll.InsertItem(0,m_RecodeInfo[nLine].m_StreamNum);
sdlg->m_ListScroll.SetItemText(0,1,m_RecodeInfo[nLine].m_Line);//线号
sdlg->m_ListScroll.SetItemText(0,8,m_RecodeInfo[nLine].m_COper);//操作员
sdlg->m_ListScroll.SetItemText(0,2,m_RecodeInfo[nLine].m_CalledNum);//被叫
sdlg->m_ListScroll.SetItemText(0,3,m_RecodeInfo[nLine].m_CDay);//起始时间
CString strTempTLen="";//临时变量
strTempTLen=m_RecodeInfo[nLine].m_RTLen;
if(strTempTLen.IsEmpty())//修改没读到时长时,显示信息为空
strTempTLen="00:00:00";
sdlg->m_ListScroll.SetItemText(0,4,strTempTLen);//时长
sdlg->m_ListScroll.SetItemText(0,5,m_RecodeInfo[nLine].m_Rate);//费率
sdlg->m_ListScroll.SetItemText(0,6,m_RecodeInfo[nLine].m_ORate);//总附加费
sdlg->m_ListScroll.SetItemText(0,7,m_RecodeInfo[nLine].m_RCount);//总话费
//AddToDb(nLine);
PostThreadMessage(dwThreadId, WM_ADD_DB, nLine, 0);
}
else
{
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine+1,9),"关")==0)
return;
if(!bClosed[nLine])
{
nFlagLine[nLine]=0;//空闲状态
ShowStatus(nLine+1,1,"空闲");
ShowLineColor(nLine,RGB(0,40,140));
return;
}
}
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine+1,9),"关")!=0)
{
int nRadio=mdlg->GetRadio();//从注册表获得设置信息
if(nRadio==0)
nRadio=1;//默认为挂机自动锁定
if(nRadio==1)//如果是挂机自动锁机
{
sdlg->nCountClk[nLine]=0;//nLine-1 ->nLine
sdlg->ControlLine(sdlg->nCountClk[nLine],nLine+1);//
}
else
{
bTalking[nLine]=FALSE;
if(bClosedLine[nLine])
{
nFlagLine[nLine]=7;//锁定
ShowStatus(nLine+1,1,"锁定");
ShowStatus(nLine+1,9,"关");
ShowLineColor(nLine,RGB(255,50,0));
}
else
{
nFlagLine[nLine]=0;
ShowStatus(nLine+1,1,"空闲");
ShowLineColor(nLine,RGB(0,40,140));
}
}
}
}//end else if closed
}//end bOpenSale
else
{
for(int nStatus=0;nStatus<16;nStatus++)
{
bTalking[nStatus]=FALSE;
bClosed[nStatus]=FALSE;
}
}
}
void CIPCountDlg::ShowStatus(int nRow,int nItem,CString strStatus)
{
sdlg->m_SaleGrid.SetTextMatrix(nRow,nItem,strStatus);
}
void CIPCountDlg::OnLogin()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
strLevel="";
int nResult1,nResult2;
nResult1=nResult2=-1;
//获得文件的当前路径
TCHAR pFileName[MAX_PATH];
GetModuleFileName(NULL,pFileName,MAX_PATH);
if(strchr(pFileName,'\\'))
*strrchr(pFileName,'\\')='\0';
strcat(pFileName,"\\IPUser.dat");
set.Open(pFileName);
while(!set.IsEOF())
{
nResult1=strcmp(set.UserName,m_strName);
nResult2=strcmp(set.UserPswd,m_strPswd);
if((nResult1==0)&&(nResult2==0))
{
strLevel=set.UserLevel;
break;
}
set.MoveNext();
}
set.UserName="";
set.UserPswd="";
set.UserLevel="";
if((nResult1!=0)||(nResult2!=0))
AfxMessageBox("登陆失败!");
else
{
if(strcmp(strLevel,"营业员")==0)
nFlagLevel=1;
else if(strcmp(strLevel,"超级管理员")==0)
nFlagLevel=2;
m_BLogin.ShowWindow(SW_HIDE);
//标题按钮图标
m_BTitle.ShowWindow(SW_SHOW);
m_BTitle.SetIcon(IDI_ICON_TITLE,20,20);
m_BTitle.SetImageOffset(5);
m_BTitle.SetTextOffset(-5);
switch(nFlagLevel)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -