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

📄 cdrcombination.cpp

📁 Mysql的处理
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		memcpy(pGCdrCg[i].CauseForRecClosing,			  pGCdr[i].CauseForRecClosing,			  strlen(pGCdr[i].CauseForRecClosing));				memcpy(pGCdrCg[i].RecordSequenceNumber,			  pGCdr[i].RecordSequenceNumber,			  strlen(pGCdr[i].RecordSequenceNumber));		//		memcpy(pGCdrCg[i].RecordExtensions,//			  pGCdr[i].RecordExtensions,//			  strlen(pGCdr[i].RecordExtensions));				memcpy(pGCdrCg[i].LocalRecordSequeceNumnber,			  pGCdr[i].LocalRecordSequeceNumnber,			  strlen(pGCdr[i].LocalRecordSequeceNumnber));			}	for(int i = 0; i < numOfCdrRead; i++)	{		cout<<"pGCdrCg:"<<endl;		cout<<"ggsnaddr:"<<pGCdrCg[i].GGSNAddress<<endl;		cout<<"SGSNIPAddress:"<<pGCdrCg[i].SGSNIPAddress<<endl;		cout<<"CallDuration:"<<pGCdrCg[i].CallDuration<<endl;		cout<<endl;	}	return true;}static S_CGCDR * CreateCdr(int * numOfCdrRead){	/* 五张原始GCDR话单的内存分配和清空操作 */	char sConfigFileName[LEN_OF_FILE_NAME];	S_OGCDR2 *pGCdr = new S_OGCDR2[NUM_OF_CDR_READ];	S_CGCDR *pGCdrCg = new S_CGCDR[NUM_OF_CDR_READ];	int numOfCdrReadTmp = 0;	// 五张GCDR话单的内存分配和清空操作	for (int i = 0; i < NUM_OF_CDR_READ; i++)	{		memset((void *)&pGCdr[i], 0x00, SIZE_S_OGCDR2);	}	memset(sConfigFileName,0,LEN_OF_FILE_NAME);	/* 五张合并后GCDR话单的内存分配和清空操作 */	// 五张合并后GCDR话单的内存分配和清空操作	for (int i =0; i < NUM_OF_CDR_READ; i++)	{		memset((void *)&pGCdrCg[i], 0x00, SIZE_S_CGCDR);	}	strcpy(sConfigFileName, 	       FILE_NAME_OF_CONFIG);	  	C_ShareMemory ShareMemory_CDR(sConfigFileName,PROGRAM_GCDR,AREA_GCDR);	for(int i = 0; i < NUM_OF_CDR_READ; i++)	{		if (ShareMemory_CDR.ReadData((void *)(&pGCdr[i]), sizeof(S_OGCDR2), 0) == 0)		{			//return NULL;			break;		}		numOfCdrReadTmp++;		cout<<"pGCdr:"<<endl;		cout<<"ggsnaddr:"<<pGCdr[i].GGSNAddress<<endl;		cout<<"DataVolumeGPRSUp:"<<pGCdr[i].ListOfTrafficVolumn[2].DataVolumeGPRSUp<<endl;		cout<<"DataVolumeGPRSDown:"<<pGCdr[i].ListOfTrafficVolumn[3].DataVolumeGPRSDown<<endl;		cout<<"SGSNIPAddress:"<<pGCdr[i].SGSNIPAddress<<endl;		cout<<"CallDuration:"<<pGCdr[i].CallDuration<<endl;		cout<<endl;	}		if (0 == numOfCdrReadTmp)	{		delete []pGCdr;		delete []pGCdrCg;		return NULL;	}		//将原始话单转换为合并后的话单	ConvertOGcdrToCdrCg(pGCdr, pGCdrCg, numOfCdrReadTmp);		*numOfCdrRead = numOfCdrReadTmp;		//内存清空	delete []pGCdr;	return pGCdrCg;}S_LLOTV * CreateLotv(){	S_LLOTV * pLotv;	pLotv = new S_LLOTV[NUM_OF_CDR_DATA_VOL_READ];		for(int i = 0; i < NUM_OF_CDR_DATA_VOL_READ; i++)	{		memset((void *)&pLotv[i], 0x00, sizeof(S_LLOTV));	}	//设置第一个四维DataVolume的节点数值	memcpy(pLotv[0].DataVolumeGPRSUp,		   "1",		   strlen("1"));	memcpy(pLotv[0].DataVolumeGPRSDown,		   "1",		   strlen("1"));	memcpy(pLotv[1].DataVolumeGPRSUp,		   "11",		   strlen("11"));	memcpy(pLotv[1].DataVolumeGPRSDown,		   "11",		   strlen("11"));	memcpy(pLotv[2].DataVolumeGPRSUp,		   "111",		   strlen("111"));	memcpy(pLotv[2].DataVolumeGPRSDown,		   "111",		   strlen("111"));	memcpy(pLotv[3].DataVolumeGPRSUp,		   "1111",		   strlen("1111"));	memcpy(pLotv[3].DataVolumeGPRSDown,		   "1111",		   strlen("1111"));	//设置第二个四维DataVolume的节点数值	memcpy(pLotv[4].DataVolumeGPRSUp,		   "2",		   strlen("2"));	memcpy(pLotv[4].DataVolumeGPRSDown,		   "2",		   strlen("2"));	memcpy(pLotv[5].DataVolumeGPRSUp,		   "22",		   strlen("22"));	memcpy(pLotv[5].DataVolumeGPRSDown,		   "22",		   strlen("22"));	memcpy(pLotv[6].DataVolumeGPRSUp,		   "222",		   strlen("222"));	memcpy(pLotv[6].DataVolumeGPRSDown,		   "222",		   strlen("222"));	memcpy(pLotv[7].DataVolumeGPRSUp,		   "2222",		   strlen("2222"));	memcpy(pLotv[7].DataVolumeGPRSDown,		   "2222",		   strlen("2222"));		//设置第三个四维DataVolume的节点数值	memcpy(pLotv[8].DataVolumeGPRSUp,		   "3",		   strlen("3"));	memcpy(pLotv[8].DataVolumeGPRSDown,		   "3",		   strlen("3"));	memcpy(pLotv[9].DataVolumeGPRSUp,		   "33",		   strlen("33"));	memcpy(pLotv[9].DataVolumeGPRSDown,		   "33",		   strlen("33"));	memcpy(pLotv[10].DataVolumeGPRSUp,		   "333",		   strlen("333"));	memcpy(pLotv[10].DataVolumeGPRSDown,		   "333",		   strlen("333"));	memcpy(pLotv[11].DataVolumeGPRSUp,		   "3333",		   strlen("3333"));	memcpy(pLotv[11].DataVolumeGPRSDown,		   "3333",		   strlen("3333"));		   	//设置第四个四维DataVolume的节点数值	memcpy(pLotv[12].DataVolumeGPRSUp,		   "4",		   strlen("4"));	memcpy(pLotv[12].DataVolumeGPRSDown,		   "4",		   strlen("4"));	memcpy(pLotv[13].DataVolumeGPRSUp,		   "44",		   strlen("44"));	memcpy(pLotv[13].DataVolumeGPRSDown,		   "44",		   strlen("44"));	memcpy(pLotv[14].DataVolumeGPRSUp,		   "444",		   strlen("444"));	memcpy(pLotv[14].DataVolumeGPRSDown,		   "444",		   strlen("444"));	memcpy(pLotv[15].DataVolumeGPRSUp,		   "4444",		   strlen("4444"));	memcpy(pLotv[15].DataVolumeGPRSDown,		   "4444",		   strlen("4444"));		//设置第五个四维DataVolume的节点数值	memcpy(pLotv[16].DataVolumeGPRSUp,		   "5",		   strlen("5"));	memcpy(pLotv[16].DataVolumeGPRSDown,		   "5",		   strlen("5"));	memcpy(pLotv[17].DataVolumeGPRSUp,		   "55",		   strlen("55"));	memcpy(pLotv[17].DataVolumeGPRSDown,		   "55",		   strlen("55"));	memcpy(pLotv[18].DataVolumeGPRSUp,		   "555",		   strlen("555"));	memcpy(pLotv[18].DataVolumeGPRSDown,		   "555",		   strlen("555"));	memcpy(pLotv[19].DataVolumeGPRSUp,		   "5555",		   strlen("5555"));	memcpy(pLotv[19].DataVolumeGPRSDown,		   "5555",		   strlen("5555"));		   		   	return pLotv;}S_LCOMM *CreateComm(){	S_LCOMM * pComm;		pComm = new S_LCOMM[2];	memset((void *)&pComm[0], 0x00, sizeof(S_LCOMM));	memset((void *)&pComm[1], 0x00, sizeof(S_LCOMM));	memcpy(pComm[0].RecordExtensions,		   "001RecordExtensions",		   strlen("001RecordExtensions"));	memcpy(pComm[1].RecordExtensions,		   "002RecordExtensions",		   strlen("002RecordExtensions"));	   	return pComm;}static void ComputerTotalDurationForSortedRecSeqNum(S_CGCDR_C * pCg){	if (NULL == pCg)		return ;			printf("%s\n", pCg->RecordOpenTime);	printf("%s\n", pCg->RecordOpenTimeLast);	printf("%s\n", pCg->CallDurationLast);		long recOpenTimeFirst = atol(pCg->RecordOpenTime);	long recOpenTimeLast = atol(pCg->RecordOpenTimeLast);	long CallDurationLast = atol(pCg->CallDurationLast);	printf("%d\n", recOpenTimeFirst);	printf("%d\n", recOpenTimeLast);	printf("%d\n", CallDurationLast);		CallDurationLast = CallDurationLast + recOpenTimeLast - recOpenTimeFirst;		sprintf(pCg->CallDuration, "%d", CallDurationLast);	return ;}static bool IsSortedRecSeqNumContinuous(SortedRecSeqNumList * SortedRecSeqNum){	if (NULL == SortedRecSeqNum)		return false;			SortedRecSeqNumList * SortedRecSeqNumTemp = SortedRecSeqNum;	SortedRecSeqNumList * pSortedRecSeqNumTemp = SortedRecSeqNum;	long RecSeqNum = 0;	long RecSeqNumPrev = 0;	long delay = 0;		/* 如果只有一个节点,则无需重新计算DURATION */	if ( NULL == SortedRecSeqNumTemp->next )	{		printf("%d\n", __LINE__);		return false;	}		//while(NULL != SortedRecSeqNumTemp)	while(NULL != SortedRecSeqNumTemp->next)	{		SortedRecSeqNumTemp = SortedRecSeqNumTemp->next;				RecSeqNum = atol(SortedRecSeqNumTemp->RecordSequenceNumber);		RecSeqNumPrev = atol(pSortedRecSeqNumTemp->RecordSequenceNumber);		delay = RecSeqNum - RecSeqNumPrev;				/* 严格意义上,这里还需要增加判断:即RECORD OPEN TIME和CLOSE TIME的判断 */		if ((RecSeqNum > RecSeqNumPrev)&&		    (1 == delay))		{			printf("%d\n", __LINE__);			pSortedRecSeqNumTemp = SortedRecSeqNumTemp;			continue ;		}		else				{			printf("%d\n", __LINE__);			return false;		}			}	printf("%d\n", __LINE__);	return true;}static void DeleteSortedRecSeqNum(SortedRecSeqNumList * SortedRecSeqNum){	if (NULL == SortedRecSeqNum)		return ;			SortedRecSeqNumList * SortedRecSeqNumDelete = SortedRecSeqNum->next;	SortedRecSeqNumList * pSortedRecSeqNumDelete = SortedRecSeqNumDelete;		while(NULL != SortedRecSeqNumDelete)	{		SortedRecSeqNumDelete = SortedRecSeqNumDelete->next;		if (NULL != pSortedRecSeqNumDelete)		{			free(pSortedRecSeqNumDelete);			pSortedRecSeqNumDelete = NULL;		}		pSortedRecSeqNumDelete = SortedRecSeqNumDelete;	}}/* R99GCDR话单合并功能函数 *///static bool CombinationForR99Gcdr(S_R99CGCDR_C *pR99GCdr)C_GCdrCombination::C_GCdrCombination():	ShareMemory_GCDR(FILE_NAME_OF_CONFIG, PROGRAM_GCDR,AREA_GCDR),m_isCombination(false)	{	}	static void ClearGCdrMap(){	for(map<CidAndGgsnAddrStruct, S_CGCDR_C*>::iterator map_it = map_GCdrCg.begin(); 		map_it!=map_GCdrCg.end();map_it++)	{		delete map_it->second;	}	map_GCdrCg.clear();}void C_GCdrCombination::AddSortedRecSeqNum(S_CGCDR_C *pGCdrCg,			char * RecordSequenceNumber,			char * RecordOpenTime,			char * CallDuration){printf("%d\n", __LINE__);	/* 1.对输入参数的有效性的判断 */	if ((NULL == pGCdrCg)||	    (NULL == RecordSequenceNumber)||	    (NULL == RecordOpenTime)||	    (NULL == RecordOpenTime))	{		return ;	}printf("%d\n", __LINE__);		/* 2.如果链表为空,则插入到链表头 */	if(NULL == pGCdrCg->SortedRecSeqNum)	{		pGCdrCg->SortedRecSeqNum = (SortedRecSeqNumList * )malloc(sizeof(SortedRecSeqNumList));		memset(pGCdrCg->SortedRecSeqNum,		       0x00,		       sizeof(SortedRecSeqNumList));		       		pGCdrCg->SortedRecSeqNum->next = NULL;

⌨️ 快捷键说明

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