cisproc.cpp

来自「液晶电视完整代码可实现人机界面」· C++ 代码 · 共 2,145 行 · 第 1/5 页

CPP
2,145
字号
		strcpy( RetMsg, "Can't find TAG:[:32A:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D01:", strCis->billnum))	{		strcpy( RetMsg, "Can't find TAG:[:D01:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D35:", strCis->outbilldate))	{		strcpy( RetMsg, "Can't find TAG:[:D35:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D36:", strCis->promptpaydate))	{		strcpy( RetMsg, "Can't find TAG:[:D36:]!\n" );		return FALSE;	}	//可选项可能不存在该域	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D30:", strCis->paypassword))	{		strcpy( RetMsg, "Can't find TAG:[:D30:]!\n" );	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D37:", strCis->purpose))	{		strcpy( RetMsg, "Can't find TAG:[:D37:]!\n" );	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D38:", strCis->remark))	{		strcpy( RetMsg, "Can't find TAG:[:D38:]!\n" );	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D41:", strCis->authornum))	{		strcpy( RetMsg, "Can't find TAG:[:D41:]!\n" );	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D42:", strCis->authorlist))	{		strcpy( RetMsg, "Can't find TAG:[:D42:]!\n" );	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D34:", strCis->sysacceptdate))	{		strcpy( RetMsg, "Can't find TAG:[:D34:]!\n" );	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":BS6:", strCis->returnterm))	{		strcpy( RetMsg, "Can't find TAG:[:BS6:]!\n" );	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":BS4:", strCis->reissueflag))	{		strcpy( strCis->reissueflag , "0");		strcpy( RetMsg, "Can't find TAG:[:BS4:]!\n" );	}	//modify by limh 0525 增加了补发标志默认值 begin	STRTRIM( strCis->reissueflag ,' ');	if( strlen( strCis->reissueflag) == 0)		strcpy(strCis->reissueflag , "0");		if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":DA0:", strCis->checksignature))	{		strcpy( RetMsg, "Can't find TAG:[:DA0:]!\n" );	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":DA9:", strCis->signature))	{		strcpy( RetMsg, "Can't find TAG:[:DA9:]!\n" );		return FALSE;	}		if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":72E:", strCis->frontpicimage))	{		strcpy( RetMsg, "Can't find TAG:[:72E:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":72F:", strCis->backpicimage))	{		strcpy( RetMsg, "Can't find TAG:[:72F:]!\n" );	}			//将正面图像保存在文件中	ret = SaveCisPicDataToFile(FrontPicFilename,strCis->frontpicimage);	if( ret<=0 )	{		filelog(CISPROLOG,"写入文件失败[%s]",FrontPicFilename);		return FALSE;	}	//将反面图像保存在文件中	ret = SaveCisPicDataToFile(BackPicFilename,strCis->backpicimage);	if( ret<=0 )	{		filelog(CISPROLOG,"写入文件失败[%s]",BackPicFilename);		return FALSE;	}	//01提入行分中心核签失败”或“02提入行分中心查黑名单错	int hflag=0;	if( strncmp(strCis->checksignature, "01", 2)==0 || strncmp(strCis->checksignature, "02", 2)==0 )		hflag = 1;	hflag = 0;	memset( strCis->organizeno, 0x0, sizeof(strCis->organizeno));	memset( strCis->inputuserno, 0x0, sizeof(strCis->inputuserno));	strncpy( strCis->organizeno, ZERO, sizeof(strCis->organizeno)-1 );	strncpy( strCis->inputuserno,ZERO, sizeof(strCis->inputuserno)-1 );	strncpy( strCis->inputtime,  ZERO, sizeof(strCis->inputtime)-1 );	strncpy( strCis->checkuserno,ZERO, sizeof(strCis->checkuserno)-1 );	strncpy( strCis->checktime,  ZERO, sizeof(strCis->checktime)-1 );	strncpy( strCis->modifytime, ZERO, sizeof(strCis->modifytime)-1 );	strncpy( strCis->outuserno,  ZERO, sizeof(strCis->outuserno)-1 );	strncpy( strCis->outtime,    ZERO, sizeof(strCis->outtime)-1 );	char Body[8096];	char *Begin = NULL;	char *End = NULL;	char Tmp[4096];	char SendMbData[4096],Zero29[30];		memset( Body , 0 ,sizeof( Body ));	memset( Tmp , 0 , sizeof( Tmp ));	memset( SendMbData , 0 , sizeof( SendMbData ));	memset( Zero29 , 0 , sizeof( Zero29 ));		//处理发送到行内包begin	//去除报尾	Begin = strstr(cmsgbuf, "{C:");	End = strstr( Begin+3, "}");	memcpy(Begin, 0, End - Begin + 1 );	//去除72E	Begin = strstr(cmsgbuf, ":72E:");	End = strstr( Begin+5, ":");	if( End == NULL )		End = strstr( Begin+5, "}");	memcpy( sSqlCmd, cmsgbuf, Begin - cmsgbuf );	strncat( sSqlCmd, End, &cmsgbuf[strlen(cmsgbuf)]-End+1 );	memset(cmsgbuf, 0, sizeof(cmsgbuf));	strcpy( cmsgbuf, sSqlCmd );	Begin = strstr(cmsgbuf, ":72F:");	End = strstr( Begin+5, ":");	if( End == NULL )		End = strstr( Begin+5, "}");	memset(sSqlCmd, 0, sizeof(sSqlCmd));	memcpy( sSqlCmd, cmsgbuf, Begin - cmsgbuf );	strncat( sSqlCmd, End, &cmsgbuf[strlen(cmsgbuf)]-End+1 );	memset(cmsgbuf, 0, sizeof(cmsgbuf));	strcpy( cmsgbuf, sSqlCmd );	Begin = strstr(cmsgbuf, ":DA9:");	End = strstr( Begin+5, ":");	if( End == NULL )	{		End = strstr( Begin+5, "}");		if(End==NULL)			printf("End Error\n");	}	memset(sSqlCmd, 0, sizeof(sSqlCmd));	memcpy( sSqlCmd, cmsgbuf, Begin - cmsgbuf );	strncat( sSqlCmd, End, &cmsgbuf[strlen(cmsgbuf)]-End+1 );	strcpy( SendMbData, sSqlCmd );	strcat( SendMbData, ":DA9::72E:");	strcat( SendMbData, Zero29);	strcat( SendMbData , ":72F:");	strcat( SendMbData, Zero29);	strcat( SendMbData , "}{C    }");	Begin = strstr(SendMbData,"{3:");	End = strstr( Begin , ":DA9:"); 	if( End != NULL )	{		memcpy( Tmp , Begin+3 , End - Begin -4 );	}	sprintf( Body , "%s:DA9:%s:72F:%sBACK:72E:%sFRONT}",Tmp, strCis->signature,filename,filename);/****		//处理发送到行内包begin	Begin = strstr(cmsgbuf , ":DA9:");	if( Begin != NULL )	{		memcpy( SendMbData , cmsgbuf, Begin - &cmsgbuf[0]);		strcat( SendMbData, ":DA9::72E:");		strcat( SendMbData, Zero29);		strcat( SendMbData , ":72F:");		strcat( SendMbData, Zero29);		strcat( SendMbData , "}{C    }");	}	Begin = NULL;	//处理发送到行内包end	Begin = strstr(cmsgbuf,"{3:");	End = strstr( Begin , ":72E:"); 	if( End != NULL )	{		memcpy( Tmp , Begin+3 , End - Begin -3 );	}	sprintf( Body , "%s:72F:%sBACK:72E:%sFRONT}",Tmp ,filename,filename);****/	printf("\r\n======解析CIS100报文成功!进入保存CIS100报文处理\n");	//modify by limh 0603 接收来报机构号为提入行 begin	//取配置如果是直连机构码为提入行	char parcode[3+1];    char parvalue[1+1];    memset( parcode, 0, sizeof(parcode));    memset( parvalue, 0, sizeof(parvalue));    strcpy( parcode, "026" );	if( !sCis.GetCisSysCtlPar(parcode, parvalue, RetMsg) )	{		strcpy(RetMsg, "获取系统参数失败!!!\n");		return FALSE;	}    if( strcmp(parvalue, "0") == 0 )		strcpy( strCis->organizeno , strCis->paybankno);    else        sprintf(strCis->organizeno , "%s", getenv("BANKCODE"));	//核签正常业务	char status[3];	memset(status, 0, sizeof(status));	if( hflag==0 )		strcpy(status, "20");	else	//核签错		strcpy(status, "21");	char enrData[9];    memset( parvalue, 0, sizeof(parvalue));	memset( enrData , 0 ,sizeof( enrData ));    if( !sCis.GetCisSysCtlPar("032", parvalue, RetMsg) )	{		strcat(RetMsg, "查询系统配置参数失败!!!");		return FALSE;	}	//读取配置登记日期是否取自然日期 1 是 0否    if( strcmp(parvalue, "1") == 0 )		GetSysData( enrData );	else		sCis.GetWorkDate(enrData);	strcpy( Table, "cis100" );	sprintf( sSqlCmd, "INSERT INTO %s (organizeno,inputuserno,inputtime,"	"modifytime,outuserno,enrdate, status,resstatus,transferstatus,checkstatus,msgtype,responsecode,"	"resinfo,precativedate,businessno,recvbankno, recvaccounts,recvname,paybankno,payaccounts,"	"payname,moneysum,billnum,billkind,outbilldate,promptpaydate,paypassword, purpose,remark,"	"authornum,authorlist,sysacceptdate,returnterm,reissueflag,checksignature,signature,"	"frontpicname, backpicname,frontpicimage,backpicimage,message)"	"VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',"	"'%s',%d,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',"	"'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",			                   Table,	                   strCis->organizeno,	                   strCis->inputuserno,	                   strCis->inputtime,	                   strCis->modifytime,	                   strCis->outuserno,	                   enrData,	                   status,SPACE,SPACE,"00",LFLAG,SPACE,SPACE,	                   strCis->precativedate,	                   atoi(strCis->businessno),	                   strCis->recvbankno,	                   strCis->recvaccounts,	                   strCis->recvname,	                   strCis->paybankno,	                   strCis->payaccounts,	                   strCis->payname,	                   strCis->moneysum,	                   strCis->billnum,	                   "01",	                   strCis->outbilldate,	                   strCis->promptpaydate,	                   strCis->paypassword,	                   strCis->purpose,	                   strCis->remark,	                   strCis->authornum,	                   strCis->authorlist,	                   strCis->sysacceptdate,	                   strCis->returnterm,	                   strCis->reissueflag,	                   strCis->checksignature,	                   strCis->signature,			   frontpicname,backpicname,	                   SPACE,	                   SPACE,			   Body );		sCis.BeginTrans();	//保存入库	ret = sCis.SaveCisData ( Table, sSqlCmd, RetMsg );		if( ret <= 0 )	{		printf("保存报文失败!\n %s",sSqlCmd);		filelog(CISPROLOG, "保存CIS100报文到[%s]表失败!\n", Table);		filelog(CISPROLOG, "sSqlCmd:[%s]\n", sSqlCmd );		sCis.RollbackTrans();		return FALSE;	}	if( hflag == 1 )	{		memset(cmsgbuf,0,sizeof(cmsgbuf));		memset(sSqlCmd,0,sizeof(sSqlCmd));		char *P = SendMbData;		char Tail[1024];		char Purpose[61];		memset(Tail,0,sizeof(Tail));		memset(Purpose,0,sizeof(Purpose));    	Begin = strstr( P, ":D37:");    	if( Begin != NULL )    	{        	memcpy( cmsgbuf , P, Begin - P + 5);	        	End = strstr( Begin+5 , ":");        	if( End != NULL)        	{            	memcpy( sSqlCmd , Begin + 5 , End - Begin - 5 );            	memcpy( Tail , End , P + strlen(SendMbData) - End);        	}        	sprintf( Purpose , "%s%-58s", "35",sSqlCmd);        	sprintf( SendMbData, "%s%s%s",cmsgbuf,Purpose,Tail);//			printf("SendMbData = [%s]\n", SendMbData);    	}	}	/////////////发送行内处理/////////////////	char *pDataid = NULL;	memset( sSqlCmd , 0 , sizeof( sSqlCmd ));	memset( Table , 0 , sizeof( Table ));	strcpy( Table, "sendmb_data_tmp" );	pDataid = sCis.getSerialNo('3');        sprintf(sSqlCmd,"INSERT INTO %s VALUES(%d,'%s','%s',%d,'%s','%s','%s','%s')",	                   Table,atoi(pDataid),strCis->precativedate,strCis->recvbankno,atoi(strCis->businessno),"9","CIS100",SendMbData,"");	       ret = sCis.SaveCisData ( Table, sSqlCmd, RetMsg );	if( ret <= 0 )	{		printf("保存报文失败!\n %s",sSqlCmd);		filelog(CISPROLOG, "保存CIS100报文到[%s]失败!\n",Table);		filelog(CISPROLOG, "sSqlCmd:[%s]\n", sSqlCmd );				sCis.RollbackTrans();		return FALSE;	}//[改]根据配置进行发送行内处理	if( hflag == 1 )	{		ret = SendToMb( atoi(pDataid), RetMsg );		if( ret <= 0 )		{			filelog(CISPROLOG, "%s", RetMsg);			sCis.RollbackTrans();			return FALSE;		}	}	//视情况进行发送行内操作	sCis.CommitTrans();	return TRUE;}//解析CIS101通用业务报文int Parse101( TCnapsTagMML *pTagMML, RECVDATA *pRecvData, char *RetMsg ){	int ret;	char Table[20];	char sSqlCmd[1024*1024];	char cmsgbuf[1024*1024];	char filename[70+1];	//msg100+发起行行号+委托日期+交易系号.cis	char BackPicFilename[99+1];	//$cis/RecvMsg/msg100+发起行行号+委托日期+交易系号.cis	char FrontPicFilename[99+1];	//$cis/RecvMsg/msg100+发起行行号+委托日期+交易系号.cis	char tmpstr[20];	CIS101 tmpstrCis;	CIS101 *strCis;/*	filebuff = new char[1024*100];	if( NULL == filebuff )	{		printf("分配filebuff空间失败!\n");		delete [] filebuff;		return FALSE;	}*/		strCis = &tmpstrCis;	memset( Table, 0, sizeof(Table) );	memset( &tmpstrCis, 0, sizeof(tmpstrCis) );	memset( sSqlCmd, 0, sizeof(sSqlCmd) );	memset( cmsgbuf, 0, sizeof(cmsgbuf) );		memset( filename, 0, sizeof(filename) );	memset( BackPicFilename, 0, sizeof(BackPicFilename) );		memset( FrontPicFilename, 0, sizeof(FrontPicFilename) );		memset( tmpstr, 0, sizeof(tmpstr) );	strcat(filename, "cis101");	strcat(filename, pRecvData->orgno);//pRecvData->msgcontent保存文件名	strcat(filename,pRecvData->workdate);	sprintf(tmpstr,"%d",pRecvData->dataidx);	strcat(filename,tmpstr);	strcat(filename,".cis");	if(getenv("WORKDIR")!=NULL)	{        snprintf(FrontPicFilename, sizeof(FrontPicFilename), "%s/pic/%sFRONT", getenv("WORKDIR"), filename);        snprintf(BackPicFilename, sizeof(BackPicFilename), "%s/pic/%sBACK", getenv("WORKDIR"), filename);	} 	else 	{        snprintf(FrontPicFilename, sizeof(FrontPicFilename), "/home/cis/pic/%sFRONT", filename);        snprintf(BackPicFilename, sizeof(BackPicFilename), "/home/cis/pic/%sBACK", filename);	}	printf("\r\n read file[%s]",pRecvData->msgcontent);	ret =  GetCisDataFromFile( pRecvData->msgcontent, cmsgbuf );	if( ret <= 0 )	{	    printf("Get Data From File Error!\n");		    return FALSE;	}	 	pTagMML->mmlInfo = cmsgbuf;	pTagMML->mmlInfoLen = strlen( cmsgbuf );	printf("读取CIS101报文成功!进入CIS101报文解析处理!\n");		if(FALSE == pTagMML->parserMmlcmd())

⌨️ 快捷键说明

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