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