cisproc.cpp

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

CPP
2,145
字号
/*******************************************************************************函数说明:处理recv_data表数据*______________________________________________________________________________*版本号	|修改时间	|修改说明*------------------------------------------------------------------------------*v1.01	|20070717	|增加410文件处理*			|*------------------------------------------------------------------------------********************************************************************************/#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <sys/time.h>#include "MbToCis.h"#include "CisPub.hpp"#include "CisProc.hpp"#include "sybdblib.hpp"#include "CBase64.h"///////////////////////////////////////#ifndef BOOL#endif#ifndef TRUE        #define TRUE 1#endif//全局变量SybServer m_clsSybServer;BepsPub sCis;//文件处理函数int ParseFile( RECVDATA *recvData, char *RetMsg );//根据配置进行发送行内系统操作int SendtoMb();int SendToMb(int dataidx, char *retmsg );//获取系统日期 BOOL GetSysData(char *Data ){	struct  timeval ct;	struct  tm ttm;	struct  timezone zone;	gettimeofday(&ct, &zone);	localtime_r(&(ct.tv_sec), &ttm);	if (ttm.tm_year >= 70)		ttm.tm_year = ttm.tm_year + 1900;	else		ttm.tm_year = ttm.tm_year + 2000;	ttm.tm_mon = ttm.tm_mon + 1;	sprintf( Data , "%04d%02d%02d" , ttm.tm_year, ttm.tm_mon,ttm.tm_mday);	return 0;}  //格式化字符串int     STRTRIM( char *in_data ,char c){        int i,j = 0;        char tmp[1024];        memset(tmp,0,sizeof(tmp));        for(i = 0;i < strlen(in_data);i++)        {                if(in_data[i] != c)                        tmp[j++] = in_data[i];        }	strcpy( in_data , tmp);        return TRUE;}//连接数据库int connectToDB( char *dbname , char *username , char *passwd , char *wkname){    if(!m_clsSybServer.Open(dbname,username ,passwd))    {        filelog(CISPROLOG,"\n连接数据库[%s][%s][%s]失败!\n",dbname,username,passwd);        return -1;    }	filelog(CISPROLOG,"\n连接数据库[%s][%s][%s]成功!\n",dbname,username,passwd);    if(!m_clsSybServer.SetWrkDb(wkname))    {        filelog(CISPROLOG,"\n切换数据库[%s]失败!\n" , wkname);        return -1;    }	filelog(CISPROLOG,"\n切换数据库[%s]成功\n" , wkname);    return 0;}//断开数据库连接int disConnectToDB(){    m_clsSybServer.Close();    filelog(CISPROLOG,"断开数据库连接!\n");    return 0;}//主函数入口int main(int argc, char* argv[]){    //显示其版本号    if(argc == 2 && (memcmp(argv[1], "-v", 2)==0||memcmp(argv[1], "-V", 2)==0))    {        printf("System verison is: Direct CIS CisService CISProc V002R003C010\n");        exit(0);    }    //使主进程成为守护进程    pid_t main_pid =0;    main_pid = fork();    if(0!= main_pid)    {	exit(0);    }    int ret=0;    char doflag[1+1];    char CisNo[3+1];    char retMsg[255+1];    RECVDATA sRecvData;    char Password[20];    memset( Password , 0 , sizeof( Password ));    strcpy( Password , getenv("PASSWORD"));    char DBUserName[10];    memset( DBUserName , 0 , sizeof(DBUserName));    strcpy( DBUserName , getenv("DBUSERNAME"));    StrTrim(DBUserName , ' ');    if( strlen( DBUserName ) == 0 )    {	strcpy( DBUserName , "sa");    }    printf("DBUserName = [%s]\n", DBUserName );    ret = connectToDB( "SYBASE" , DBUserName , Password , "DIRWAYSDB");    if( ret != 0 )    {	filelog(CISPROLOG,"连接数据库失败!\n");	printf("连接数据库失败!\n");	return FALSE;    }/*版本授权    int flag = 0;    ret = sCis.CheckSerail(&flag);    if( flag != 0)    {        printf("system not permission exit!\n");	    exit(0);    }*/    while(1)    {	TCnapsTagMML *pTagMML = NULL;	pTagMML = new TCnapsTagMML;	if( NULL == pTagMML )	{		printf("分配TCnapsTagMML空间失败!\n");		filelog(CISPROLOG,"分配TCnapsTagMML空间失败!\n");		delete pTagMML;		return FALSE;	}	memset( doflag , 0 , sizeof( doflag));	memset( CisNo , 0 , sizeof( CisNo ));	memset( &sRecvData , 0 , sizeof( sRecvData ));	memset( retMsg , 0 , sizeof( retMsg ));            //获取未处理CIS报文        ret = sCis.GetCisInfo(&sRecvData,DATARECV_NO);        if( ret < 0 )        {            filelog(CISPROLOG,"102系统错误,检查前置机故障重新接收!\n"); 	    break;        }        if( ret == 0 )        {    		delete pTagMML;            printf( "\nCIS前置机系统没有报文可被提取......\n");            sleep(2);            continue;        }        if( ret > 0 )       	{            filelog( CISPROLOG, "====================>接收报文[%s]成功!<====================\n", sRecvData.msgid);            filelog( CISPROLOG, "报文内容:[%s]\n", sRecvData.msgcontent);       	}	memcpy( CisNo, sRecvData.msgid+3, 3 );        ret = 0;	switch( atoi(CisNo) )	{		case 100:			ret = Parse100( pTagMML, &sRecvData, retMsg );			break;		case 101:			ret = Parse101( pTagMML, &sRecvData, retMsg );			break;		case 201:			ret = Parse201( pTagMML, &sRecvData, retMsg );			break;		case 301:			ret = Parse301( pTagMML, &sRecvData, retMsg );			break;		case 302:			ret = Parse302( pTagMML, &sRecvData, retMsg );			break;		case 303:			ret = Parse303( pTagMML, &sRecvData, retMsg );			break;		case 305:			ret = Parse305( pTagMML, &sRecvData, retMsg );			break;		case 307:			ret = Parse307( pTagMML, &sRecvData, retMsg );			break;		case 308:			ret = Parse308( pTagMML, &sRecvData, retMsg );			break;		case 309:			ret = Parse309( pTagMML, &sRecvData, retMsg );			break;		case 310:			ret = Parse310( pTagMML, &sRecvData, retMsg );			break;		case 405:			ret = Parse405( pTagMML, &sRecvData, retMsg );			break;		case 406:			ret = Parse406( pTagMML, &sRecvData, retMsg );			break;		case 407:			ret = Parse407( pTagMML, &sRecvData, retMsg );			break;		case 408:			ret = Parse408( pTagMML, &sRecvData, retMsg );			break;		case 409:			ret = Parse409( pTagMML, &sRecvData, retMsg );			break;		case 410:			ret = Parse410( pTagMML, &sRecvData, retMsg );			break;		case 411:			ret = Parse411( pTagMML, &sRecvData, retMsg );			break;		case 412:			ret = Parse412( pTagMML, &sRecvData, retMsg );			break;		case 413:			ret = Parse413( pTagMML, &sRecvData, retMsg );			break;		case 414:			ret = Parse414( pTagMML, &sRecvData, retMsg );			break;		case 601:			ret = Parse601( pTagMML, &sRecvData, retMsg );			break;		case 602:			ret = Parse602( pTagMML, &sRecvData, retMsg );			break;		case 402:			ret = Parse402( pTagMML, &sRecvData, retMsg );			break;		case 404:			ret = Parse404( pTagMML, &sRecvData, retMsg );			break;		default:			printf( "未定义报文:[%s]\n", CisNo );			ret = -1;			filelog( CISPROLOG, "接收到未定义报文:[%s]\n", CisNo );			break;	}	if( ret <= 0 )	{		//修改recv_data处理状态位		strcpy( doflag, "2" );		printf("处理报文[%s]出错:%s\n", sRecvData.msgid, retMsg);		filelog(CISPROLOG, "处理报文[%s]出错:%s\n", sRecvData.msgid, retMsg);		filelog("ERROR.log", "[CisProc.bin]处理报文[%s]出错:[%s]\n", sRecvData.msgid, retMsg);	}	else	{		strcpy( doflag, "1" );	}		printf("处理recv_data表:dataidx=[%d]\t处理状态:doflag=[%s]\n",sRecvData.dataidx,doflag);	//更改接收报文队列表报文处理状态	ret = sCis.SetDoflag( "recv_data",&sRecvData.dataidx, doflag, retMsg );	if( ret < 0 )	{		printf("更改报文[%s]处理状态失败:%s\n", sRecvData.msgid,retMsg );		filelog(CISPROLOG, "更改报文[%s]处理状态失败:%s\n", sRecvData.msgid,retMsg );	}	filelog(CISPROLOG, SIGNLIMIT);    delete pTagMML;		    }//end while	    disConnectToDB();    return TRUE;}//modify by limh 0520 未核验报文不直接发送行内//解析CIS100支票业务报文  int Parse100( TCnapsTagMML *pTagMML, RECVDATA *pRecvData, char *RetMsg ){	int ret;	char Table[20];	char tmpstr[20];	char sSqlCmd[1024*1024];	char cmsgbuf[1024*1024];	char BackPicFilename[99+1];	//发起行行号+委托日期+交易系号.cis	char FrontPicFilename[99+1];	//发起行行号+委托日期+交易系号.cis	char filename[70+1];	CIS100  tmpCis100;	CIS100 *strCis=NULL;	strCis = &tmpCis100;	memset( Table, 0, sizeof(Table) );	memset( &tmpCis100, 0, sizeof(tmpCis100) );	memset( sSqlCmd, 0, sizeof(sSqlCmd) );	memset( BackPicFilename, 0, sizeof(BackPicFilename) );	memset( FrontPicFilename, 0, sizeof(FrontPicFilename) );		memset( filename, 0, sizeof(filename) );		memset( tmpstr, 0, sizeof(tmpstr) );		memset( cmsgbuf, 0, sizeof(cmsgbuf) );		//modified by hanyun 2007-04-08 	//$cis/RecvMsg/msg100+发起行行号+委托日期+交易系号.cis	strcat(filename, "cis100");	strcat(filename, pRecvData->orgno);//pRecvData->msgcontent保存文件名	strcat(filename,pRecvData->workdate);	//strcat(filename,"00");	sprintf(tmpstr,"%d",pRecvData->dataidx);	strcat(filename,tmpstr);	strcat(filename,".cis");		//modified above to below	char frontpicname[100];	char backpicname[100];	memset(frontpicname, 0, sizeof(frontpicname));	memset(backpicname, 0, sizeof(backpicname));	sprintf( frontpicname, "%sFRONT", filename);	sprintf( backpicname, "%sBACK", filename);	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 读取CIS100报文成功!进入CIS100报文解析处理!\n");//	printf("\r\n read file[%s]",pRecvData->msgcontent);	//从filein目录获取cis100报文	ret =  GetCisDataFromFile( pRecvData->msgcontent, cmsgbuf );	if( ret <= 0 )	{		printf("Get Data From File Error!\n");			return FALSE;	}	 	pTagMML->mmlInfo = cmsgbuf;	pTagMML->mmlInfoLen = strlen( cmsgbuf );	if(FALSE == pTagMML->parserMmlcmd())	{		filelog( CISPROLOG, "Parser file content failed\n");		return FALSE;	}	//得到委托日期	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":30A:", strCis->precativedate))	{		strcpy( RetMsg, "Can't find TAG:[:30A:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":0BC:", strCis->businessno))	{		strcpy( RetMsg, "Can't find TAG:[:0BC:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":CC5:", strCis->recvbankno))	{		strcpy( RetMsg, "Can't find TAG:[:CC5:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":59C:", strCis->recvaccounts))	{		strcpy( RetMsg, "Can't find TAG:[:59C:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":59A:", strCis->recvname))	{		strcpy( RetMsg, "Can't find TAG:[:59A:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D21:", strCis->paybankno))	{		strcpy( RetMsg, "Can't find TAG:[:D21:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D23:", strCis->payaccounts))	{		strcpy( RetMsg, "Can't find TAG:[:D23:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":D22:", strCis->payname))	{		strcpy( RetMsg, "Can't find TAG:[:D22:]!\n" );		return FALSE;	}	if(FALSE == pTagMML->getParaValue(MML_CONTTYPE_CONT, ":32A:", strCis->moneysum))	{

⌨️ 快捷键说明

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