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

📄 cdrreadforbill.cpp

📁 Mysql的处理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CDRReadForBill.cpp: implementation of the C_CDRReadForBill class.////////////////////////////////////////////////////////////////////////#include "Date.h"#include "CDRReadForBill.h"#include<stdio.h>#include<iostream.h>#include<vector>using namespace std;#include <unistd.h>//////////////////////////////////////////////////////////////////////// Construction/Destruction///////////////////////////////////////////////////////////////////////** !!!!!!!输入的时间段需要修改*/C_CDRReadForBill::C_CDRReadForBill(int nNumber){	SQLscdr = new char[SQLMAX];	SQLgcdr = new char[SQLMAX];	SQLmcdr = new char[SQLMAX];	SQLmocdr = new char[SQLMAX];	SQLmtcdr = new char[SQLMAX];	}C_CDRReadForBill::~C_CDRReadForBill(){	if(SQLscdr != NULL)	{		delete SQLscdr;	}	if(SQLgcdr != NULL)	{		delete SQLgcdr;	}	if(SQLmcdr != NULL)	{		delete SQLmcdr;	}	if(SQLmocdr != NULL)	{		delete SQLmocdr;	}	if(SQLmtcdr != NULL)	{		delete SQLmtcdr;	}}bool C_CDRReadForBill::GetSQL(const char* szTableDate,		const char* szTableDate2,		const char* szSQLWhere,		char *szSeqId,		char *szTab1, char* szTab2, char* SQL){	memcpy(szTab1, &szTableDate[2],10);//yyyymmddhh24mi ss-> yymmddhh24mi	memcpy(szTab2, &szTableDate2[2],10);//	if(szTab1[8] >='3') 	{		szTab1[8]='3';szTab1[9]='0';	}	else	{		szTab1[8]='0';szTab1[9]='0';	}	if(szTab2[8] >='3') 	{		szTab2[8]='3';szTab2[9]='0';	}	else	{		szTab2[8]='0';szTab2[9]='0';	}	szTab1[10]=szTab2[10] = 0;	snprintf(SQL, SQLMAX, "DATECREATED>'%s' AND DATECREATED<'%s' AND %s", szSQLWhere); //	printf("%s\n\%s\n%s\n", SQLgcdr, szTableDate, szTableDate2);//	printf("%s\n\%s\n%s\n", SQLgcdr, szTab1, szTab2);	return true;}//数据从合并的表CSCDR中查询bool C_CDRReadForBill::SelectSCDR(								  const char* szTableDate,								  const char* szTableDate2,								  const char* szSQLWhere,								  		char *szSeqId,				S_CSCDR_LOAD** ppCDR, int *nOutNumber)								  {	int i;	int result;	vector<S_CSCDR_LOAD*> m_nCdrs;	vector<int> m_nCountCdrs;		int nOutNumber1; 		//[1]返回值设置为0	*nOutNumber =0;		//[2]计算时间段 !!!!!!!!!!!!!!!!!!!!!!!!!!!!	char szTab1[20],szTab2[20];	if(!GetSQL(szTableDate,szTableDate2,szSQLWhere,szSeqId,		szTab1, szTab2, SQLscdr))		return false;	CDate date(szTab1, szTab2);//	CDate date(szTableDate, szTableDate2);	date.Calculate();	int all = date.GetCount();		//[3]读取列表	char szTableName[LEN_TABLENAME+1];		int rr=0;	for(int kk=0;kk<all;kk++)	{		char dString[20];		string dString2 = date.GetAt(kk);		memset(dString, 0, 20);		snprintf(dString, 20, "%s", dString2.c_str());				snprintf(szTableName, LEN_TABLENAME+1, "CSCDR%s",dString);				S_CSCDR_LOAD* pCDR = NULL;		memset(&m_Out,0,sizeof(m_Out));		if((rr=DbCSCDRSelect((char*)szTableName, (char*)SQLscdr, &pCDR, &nOutNumber1, &m_Out)))		{			return false;		}				if(nOutNumber1>0)		{			m_nCdrs.push_back(pCDR);			m_nCountCdrs.push_back(nOutNumber1);		}				for(int i=0;i<nOutNumber1;i++)		{			S_CSCDR_LOAD* pCDR2 = &pCDR[i];			char *szSeqId = pCDR2->SeqId;			pCDR2->pListOfTrafficVolumn = NULL;			pCDR2->nListOfTrafficVolumn = 0;			pCDR2->pCommon = NULL;			pCDR2->nCommon = 0;			pCDR2->RecordType = sgsnPDPRecord;			char szTableName2[LEN_TABLENAME+1];			snprintf(szTableName2, LEN_TABLENAME+1, "LLOTV_CS%s", dString);					//	printf("TableName %s SeqId=%s\n", szTableName2, szSeqId);			if(DbLLOTVSelect(szTableName2, szSeqId, 				&pCDR2->pListOfTrafficVolumn, &pCDR2->nListOfTrafficVolumn, &m_Out) != 0)			{				return false;			}			snprintf(szTableName, LEN_TABLENAME+1, "LCOMM_CS%s", dString);			if(DbLCOMMSelect(szTableName, szSeqId, 				&pCDR2->pCommon, &pCDR2->nCommon, &m_Out) != 0)			{				return false;			}		}	}			//[4]写上输出结果	//[4-1]计算总长度	int nCdrs = m_nCountCdrs.size();	for(i=0;i<nCdrs;i++) 		*nOutNumber+= m_nCountCdrs.at(i);	//[4-2]分配空间	S_CSCDR_LOAD *ppCDR2 = NULL;		if(*nOutNumber>0)		ppCDR2 = (S_CSCDR_LOAD*)malloc(*nOutNumber* SIZE_S_CSCDR_LOAD);		//[4-3]组装结构	int index=0;	for(i=0,index=0;i<nCdrs;i++)	{		S_CSCDR_LOAD* p = m_nCdrs.at(i);		if(p != NULL)		{			int size = m_nCountCdrs.at(i);			memcpy(&ppCDR2[index], p, size* SIZE_S_CSCDR_LOAD);			index+=size;						if(p->pListOfTrafficVolumn != NULL)			{				free(p->pListOfTrafficVolumn);				p->pListOfTrafficVolumn = NULL;			}			if(p->pCommon != NULL)			{				free(p->pCommon);				p->pCommon = NULL;			}			free(p);			p = NULL;		}	}	*ppCDR = ppCDR2;			//[4-4]释放空间	m_nCdrs.clear();	m_nCountCdrs.clear();	return true;}//数据从合并的表CGCDR中查询bool C_CDRReadForBill::SelectGCDR(								  const char* szTableDate,								  const char* szTableDate2,								  const char* szSQLWhere,								  		char *szSeqId,S_CGCDR_LOAD** ppCDR, int *nOutNumber){	int i;	int result;	vector<S_CGCDR_LOAD*> m_nCdrs;	vector<int> m_nCountCdrs;			int nOutNumber1; 		//[1]返回值设置为0	*nOutNumber=0;		//[2]计算时间段	char szTab1[20],szTab2[20];	if(!GetSQL(szTableDate,szTableDate2,szSQLWhere,szSeqId,		szTab1, szTab2, SQLgcdr))		return false;	CDate date(szTab1, szTab2);//	printf("%s\n\%s\n%s\n", SQLgcdr, szTab1, szTab2);//	CDate date(szTableDate, szTableDate2);	date.Calculate();	int all = date.GetCount();		//[3]读取列表	for(int kk=0;kk<all;kk++)	{		char dString[20];		string dString2 = date.GetAt(kk);		snprintf(dString, 20, "%s", dString2.c_str());				char szTableName[LEN_TABLENAME+1];		snprintf(szTableName, LEN_TABLENAME+1, "CGCDR%s", dString);				S_CGCDR_LOAD* pCDR = NULL;		memset(&m_Out,0,sizeof(m_Out));		if(DbCGCDRSelect((char*)szTableName, (char*)SQLgcdr, &pCDR, &nOutNumber1, &m_Out)!=0)		{			return false;		}				if(nOutNumber1>0)		{			m_nCdrs.push_back(pCDR);			m_nCountCdrs.push_back(nOutNumber1);		}				for(int i=0;i<nOutNumber1;i++)		{			S_CGCDR_LOAD* pCDR2 = &pCDR[i];			char *szSeqId = pCDR2->SeqId;			pCDR2->pListOfTrafficVolumn = NULL;			pCDR2->nListOfTrafficVolumn = 0;			pCDR2->pCommon = NULL;			pCDR2->nCommon = 0;			pCDR2->RecordType = ggsnPDPRecord;						S_LLOTV* pLOTV = NULL;			snprintf(szTableName, LEN_TABLENAME+1, "LLOTV_CG%s", dString);			if(DbLLOTVSelect(szTableName, szSeqId, &pCDR2->pListOfTrafficVolumn, &pCDR2->nListOfTrafficVolumn, &m_Out) != 0)			{cout << "DbLLOTVSelect" << " " <<nOutNumber1<<endl;				return false;			}									snprintf(szTableName, LEN_TABLENAME+1, "LCOMM_CG%s", dString);//			cout << szTableName << endl;			if(DbLCOMMSelect(szTableName, szSeqId, &pCDR2->pCommon, &pCDR2->nCommon, &m_Out) != 0)			{cout << "DbLCOMMSelect" << " " <<nOutNumber1<<endl;				return false;			}		}	}			//[4]写上输出结果	//[4-1]计算总长度	int nCdrs = m_nCountCdrs.size();	for(i=0;i<nCdrs;i++) 	{		int num = m_nCountCdrs.at(i);		*nOutNumber+= num;	}			//[4-2]分配空间	S_CGCDR_LOAD *ppCDR2 = NULL;		if(*nOutNumber>0)		ppCDR2 = (S_CGCDR_LOAD*)malloc(*nOutNumber* SIZE_S_CGCDR_LOAD);		//[4-3]组装结构	int index=0;	for(i=0,index=0;i<nCdrs;i++)	{		S_CGCDR_LOAD* p = m_nCdrs.at(i);		if(p != NULL)		{			int size = m_nCountCdrs.at(i);			memcpy(&ppCDR2[index], p, size*SIZE_S_CGCDR_LOAD);			index+=size;						free(p);			p = NULL;		}	}			*ppCDR = ppCDR2;		//[4-4]释放空间	m_nCdrs.clear();	m_nCountCdrs.clear();	return true;}//数据从原始的表OMCDR中查询bool C_CDRReadForBill::SelectMCDR(								  const char* szTableDate,								  const char* szTableDate2,								  const char* szSQLWhere,								  		char *szSeqId,S_OMCDR_LOAD** ppCDR, int *nOutNumber){	int i;	int result;	//List	vector<S_OMCDR_LOAD*> m_nCdrs;	//count	vector<int> m_nCountCdrs;			int nOutNumber1; 		//[1]返回值设置为0	*nOutNumber=0;		//[2]计算时间段

⌨️ 快捷键说明

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