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 + -
显示快捷键?