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

📄 feequery.cpp

📁 VC6.0环境下编写的一个交换机计费程序。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include "stdafx.h"
#include "fee.h"

#include "feeext.h"
#include "feeDoc.h"
#include "feeView.h"

#include"reportcdrquery.h"
#include "talkrecorddetailDlg.h"
#include "recordDlg.h"


void CFeeView::OnReportQuery() 
{
	// TODO: Add your command handler code here
	RemovePreTimer();
	Creportcdrquery	  reportqueryDlg;
	int nResponse;	
	nResponse=reportqueryDlg.DoModal();
	if (nResponse!=IDOK)
	{
		return;
	}
	RemoveAll();
	RemoveAllColumn();
	RemovePreTimer();
	actViewWindow=VIEWTALKREPORTCDRQUERY;


	long propertyflag;

	BOOL	binterior;
	BOOL	binternational;
	BOOL	blocal;
	BOOL	bspecial;
	BOOL	btoll;

	binterior = FALSE;
	binternational = FALSE;
	blocal = FALSE;
	bspecial = FALSE;
	btoll = FALSE;

	binterior=reportqueryDlg.m_binterior;
	blocal=reportqueryDlg.m_blocal;
	btoll=reportqueryDlg.m_btoll;
	binternational=reportqueryDlg.m_binternational;
	bspecial=reportqueryDlg.m_bspecial;
	long Interiorfeecol,localfeecol,tollfeecol,Internationalfeecol,specfeecol,totalfeecol;
	long Interiortimecol,localtimecol,tolltimecol,Internationaltimecol,spectimecol,totaltimecol;

	long  localcodeflag;
	CString	straddlocal;
	CString strlocalcode;


	Interiorfeecol=0;localfeecol=0;tollfeecol=0;
	Internationalfeecol=0;specfeecol=0;totalfeecol=0;
	Interiortimecol=0;localtimecol=0;tolltimecol=0;
	Internationaltimecol=0;spectimecol=0;totaltimecol=0;

	strlocalcode=reportqueryDlg.m_strLocalCode;


	propertyflag=0;
	CListCtrl *ctl;
	ctl=&GetListCtrl();
	ctl->InsertColumn(viewColumnNum,"Calling number",LVCFMT_LEFT,100);
	viewColumnNum++;
	if (binterior==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"Interior fee(ks)",LVCFMT_LEFT,90);
		Interiorfeecol=viewColumnNum;
		viewColumnNum++;
	}
	if (blocal==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"local fee(ks)",LVCFMT_LEFT,90);
		localfeecol=viewColumnNum;
		viewColumnNum++;
	}
	if (btoll==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"Toll fee(ks)",LVCFMT_LEFT,90);
		tollfeecol=viewColumnNum;
		viewColumnNum++;
	}
	if (binternational==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"International fee(ks)",LVCFMT_LEFT,90);
		Internationalfeecol=viewColumnNum;
		viewColumnNum++;
	}
	if (bspecial==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"Special fee(ks)",LVCFMT_LEFT,90);
		specfeecol=viewColumnNum;
		viewColumnNum++;
	}
	ctl->InsertColumn(viewColumnNum,"total fee(ks)",LVCFMT_LEFT,90);
	totalfeecol=viewColumnNum;
	viewColumnNum++;
	if (binterior==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"Interior minute",LVCFMT_LEFT,90);
		Interiortimecol=viewColumnNum;
		viewColumnNum++;
	}
	if (blocal==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"local minute",LVCFMT_LEFT,90);
		localtimecol=viewColumnNum;
		viewColumnNum++;
	}
	if (btoll==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"Toll minute",LVCFMT_LEFT,90);
		tolltimecol=viewColumnNum;
		viewColumnNum++;
	}
	if (binternational==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"International minute",LVCFMT_LEFT,90);
		Internationaltimecol=viewColumnNum;	
		viewColumnNum++;
	}
	if (bspecial==TRUE)
	{
		ctl->InsertColumn(viewColumnNum,"Special minute",LVCFMT_LEFT,90);
		spectimecol=viewColumnNum;
		viewColumnNum++;
	}
	ctl->InsertColumn(viewColumnNum,"total minute",LVCFMT_LEFT,90);
	totaltimecol=viewColumnNum;
	viewColumnNum++;
	CString strSql,strtemp,strtemp1,strtemp2;
	CString querycalling[10000];
	CString callingcondition[100];
	int querycallingnum,conditionnum;
	HRESULT result;
	long i,j,ltemp,ltemp1,ltemp2;
	int pos;

	querycallingnum=0;
	conditionnum=0;
	strtemp=reportqueryDlg.m_strcallingnum;
	if (strtemp!="")
	{
		//if (strtemp.Find("-")!=-1)
		while (strtemp.Find("&")!=-1)
		{
			pos=strtemp.Find("&");
			strtemp1=strtemp.Left(pos);
			strtemp.Delete(0,pos+1);
			callingcondition[conditionnum]=strtemp1;
			conditionnum++;
			if (conditionnum>100)
			{
				AfxMessageBox("condition too large");
				return;
			}
		}
		if (strtemp!="")
		{
			callingcondition[conditionnum]=strtemp;
			conditionnum++;		
			if (conditionnum>100)
			{
				AfxMessageBox("condition too large");
				return;
			}
		}
	}
	for(i=0;i<conditionnum;i++)
	{
		if ((callingcondition[i].Find("-"))==-1)
		{
			ltemp=atol(callingcondition[i]);
			if (querycallingnum>10000)
			{
				AfxMessageBox("telenum too large");
				return;
			}
			querycalling[querycallingnum].Format("%d",ltemp);
			querycallingnum++;
		}
		else
		{
			pos=callingcondition[i].Find("-");
			strtemp1=callingcondition[i].Left(pos);
			ltemp1=atol(strtemp1);
			callingcondition[i].Delete(0,pos+1);
			strtemp2=callingcondition[i];
			ltemp2=atol(strtemp2);
			if (ltemp2<ltemp1)
			{
				AfxMessageBox("telenum input error");
				return;
			}
			if ((querycallingnum+(ltemp2-ltemp1)+1)>10000)
			{
				AfxMessageBox("telenum range too large");
				return;
			}
			for(j=ltemp1;j<=ltemp2;j++)
			{
				querycalling[querycallingnum].Format("%d",j);
				querycallingnum++;
			}
		}
	}

	long lstartyear,lstartmonth,lstartday;
	long lendyear,lendmonth,lendday;
	long startdateflag,enddateflag;
	startdateflag=0;
	enddateflag=0;
	if (reportqueryDlg.m_strstarthour!="" 
		&& reportqueryDlg.m_strstartminute!=""
		&& reportqueryDlg.m_strstartsecond)
	{
		lstartyear=atol(reportqueryDlg.m_strstarthour);
		lstartmonth=atol(reportqueryDlg.m_strstartminute);
		lstartday=atol(reportqueryDlg.m_strstartsecond);
		startdateflag=availdate(lstartyear,lstartmonth,lstartday);
		if (startdateflag==1)
		{
			AfxMessageBox("start timeset error");
			return;
		}
		startdateflag=2;
	}
	if (reportqueryDlg.m_strendhour!="" 
		&& reportqueryDlg.m_strendminute!=""
		&& reportqueryDlg.m_strendsecond)
	{
		lendyear=atol(reportqueryDlg.m_strendhour);
		lendmonth=atol(reportqueryDlg.m_strendminute);
		lendday=atol(reportqueryDlg.m_strendsecond);
		enddateflag=availdate(lendyear,lendmonth,lendday);
		if (enddateflag==1)
		{
			AfxMessageBox("end timeset error");
			return;
		}
		enddateflag=2;
	}	





	CFeeApp* pApp=(CFeeApp *)AfxGetApp();	
	CString callingnum;
	if (querycallingnum==0)
	{
		strSql="select * from balancefee ";
		if (startdateflag==2)
		{
			strtemp.Format(" where talkenddate>=#%d-%d-%d#",lstartyear,lstartmonth,lstartday);
			strSql+=strtemp;
		}
		if (enddateflag==2)
		{
			if (startdateflag==2)
				strtemp.Format(" and talkenddate<=#%d-%d-%d#",lendyear,lendmonth,lendday);
			else
				strtemp.Format(" where talkenddate<=#%d-%d-%d#",lendyear,lendmonth,lendday);
			strSql+=strtemp;		
		}

		CString strcallingnum[1000];
		long feecallingnumshuliang;

		feecallingnumshuliang=0;

		result=pApp->m_pjifeiRecordset->Open(strSql.AllocSysString(),
			pApp->m_pjifeiConnection.GetInterfacePtr(),
			adOpenDynamic,adLockOptimistic,adCmdText);
		if (!SUCCEEDED(result))
		{
			AfxMessageBox("can't open balancefee table");
		}
		long i=0;
		long existflag;
		while(!pApp->m_pjifeiRecordset->adoEOF)
		{
			_variant_t varport;
			varport=pApp->m_pjifeiRecordset->GetCollect("callingnum");
			if (varport.vt!=VT_NULL)
				callingnum =(char*)_bstr_t(varport);
			else 
				callingnum="null";
			if (feecallingnumshuliang==0)
			{
				strcallingnum[feecallingnumshuliang]=callingnum;
				feecallingnumshuliang++;
			}
			else
			{
				existflag=0;
				for(int j=0;j<feecallingnumshuliang;j++)
				{
					if (strcallingnum[j]==callingnum)
						existflag=1;
				}
				if (existflag==0)
				{
					strcallingnum[feecallingnumshuliang]=callingnum;	
					feecallingnumshuliang++;
				}
				if (feecallingnumshuliang>=1000)
					feecallingnumshuliang=1000;
			}
			pApp->m_pjifeiRecordset->MoveNext();
		}
		pApp->m_pjifeiRecordset->Close();

		if(feecallingnumshuliang>0)
		{
		
			//	callingnum=(char*)(_bstr_t)pApp->m_pjifeiRecordset->GetCollect(_variant_t("telephoneCode"));
			for(int j=0;j<feecallingnumshuliang;j++)
			{
				callingnum=strcallingnum[j];
				if (callingnum=="65077")
				{
					existflag=0;
				}
				strSql.Format("select * from balancefee where callingnum='%s'", callingnum);
				if (startdateflag==2)
				{
					strtemp.Format(" and talkenddate>=#%d-%d-%d#",lstartyear,lstartmonth,lstartday);
					strSql+=strtemp;
				}
				if (enddateflag==2)
				{
					strtemp.Format(" and talkenddate<=#%d-%d-%d#",lendyear,lendmonth,lendday);
					strSql+=strtemp;		
				}
			
				result=pApp->m_pjifei2Recordset->Open(strSql.AllocSysString(),
					pApp->m_pjifei2Connection.GetInterfacePtr(),
					adOpenDynamic,adLockOptimistic,adCmdText);
				if (!SUCCEEDED(result))
				{
					AfxMessageBox("can't open balancefee table");
				}
				long feesum;
				long feeinterior,feelocal,feetoll;
				long feeinternational,feespecial;
				long flotemp;
				feesum=0;
				feeinterior=0;	feelocal=0;
				feetoll=0;	feeinternational=0;
				feespecial=0;

				long timeinterior,timelocal,timetoll;
				long timeinternational,timespecial;
				long timetemp,timetotal;

				timeinterior=0;	timelocal=0;
				timetoll=0;	timeinternational=0;
				timespecial=0,timetotal=0;

				while(!pApp->m_pjifei2Recordset->adoEOF)
				{
				//	strtemp=(char*)(_bstr_t)pApp->m_pjifei2Recordset->GetCollect(_variant_t("talkfee"));
				//	strtemp1=(char*)(_bstr_t)pApp->m_pjifei2Recordset->GetCollect(_variant_t("talkkind"));
				//	strtemp2=(char*)(_bstr_t)pApp->m_pjifei2Recordset->GetCollect(_variant_t("talktime"));
				
					_variant_t varport;
					varport=pApp->m_pjifei2Recordset->GetCollect("talkfee");
					if (varport.vt!=VT_NULL)
						strtemp =(char*)_bstr_t(varport);
					else 
						strtemp="null";
					varport=pApp->m_pjifei2Recordset->GetCollect("talkkind");
					if (varport.vt!=VT_NULL)
						strtemp1 =(char*)_bstr_t(varport);
					else 
						strtemp1="null";
					varport=pApp->m_pjifei2Recordset->GetCollect("talktime");
					if (varport.vt!=VT_NULL)
						strtemp2 =(char*)_bstr_t(varport);
					else 
						strtemp2="null";				
					if ((atol(strtemp))==0)
					{
						pApp->m_pjifei2Recordset->MoveNext();				
						continue;
					}
					if (strtemp1=="interior" && binterior == TRUE)
					{
						feeinterior+=atol(strtemp);
						feesum+=atol(strtemp);
						timeinterior+=((atol(strtemp2))/60);
						if (((atol(strtemp2))%60)!=0)
							timeinterior++;
						timetotal+=((atol(strtemp2))/60);
						if (((atol(strtemp2))%60)!=0)
							timetotal++;
					}
					if (strtemp1=="local" && blocal==TRUE)
					{
						feelocal+=atol(strtemp);
						feesum+=atol(strtemp);
						timelocal+=((atol(strtemp2))/60);
						if (((atol(strtemp2))%60)!=0)
							timelocal++;
						timetotal+=((atol(strtemp2))/60);
						if (((atol(strtemp2))%60)!=0)
							timetotal++;
					}
					if (strtemp1=="Toll" && btoll == TRUE)

⌨️ 快捷键说明

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