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

📄 ipcountdlg.cpp

📁 IP电话计费管理系统本地版
💻 CPP
📖 第 1 页 / 共 5 页
字号:

           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 + -