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

📄 package.cpp.bak

📁 一个与银行通讯的测试程序
💻 BAK
📖 第 1 页 / 共 5 页
字号:
// package.cpp: implementation of the Cpackage class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HmComm.h"
#include "package.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Cpackage::Cpackage()
{
	memset(cTranCode,0,9);
}

Cpackage::~Cpackage()
{

}

/*==================================================================================
//函数名称: ClearPackStruct
//输入参数: char *cRecvbuf: 返回的字符串
//输出参数: PACKSTRUCT *packstruct:通信数据结构
//返    回: 通信数据结构的长度
//功    能: 数据转换,将本公司自定义包转换成银行需要的数据包。
//开发人员: zhangl
//修改记录: 1. 第一次编写.
====================================================================================*/
int Cpackage::ExchangeSendData(PACKSTRUCT *packstruct, char *cSendbuf, char * cHoldmem)
{
	int nDatalen,jydm=0;
	int retVal;
	char cLen[5];
	nDatalen = sizeof(PACKSTRUCT);
    retVal = 0;
    char tmpStr[80];

    memset(tmpStr,0x00,sizeof(tmpStr));
    memcpy(tmpStr,packstruct->m_Jydm,sizeof(packstruct->m_Jydm));
	alltrimSpace(tmpStr);
	jydm = atoi(tmpStr);
	switch( jydm )
	{
			case 1001://密码校验请求
				retVal=Function_Mmjy( packstruct, cSendbuf );
				break;
			case 2001://50发卡验证
			case 2002://51发卡
			case 2003://52换卡验证
			case 2004://53换卡
				retVal=Function_KKHK( jydm, packstruct, cSendbuf );
				break;
				//储蓄 国库券信息  代收费信息 
				//多媒体客户综合  全国通
				//卡号 币  种	储  种	笔数号	查询起始日期   */
			case 4011://储蓄信息查询
			case 4012://储蓄信息查询
			case 4013://储蓄信息查询
			case 4015://储蓄信息查询
			case 4016://储蓄信息查询
			case 4018://储蓄信息查询
			case 4019://储蓄信息查询
			case 4020://储蓄信息查询
				retVal=Function_Cxxxcx(jydm,packstruct, cSendbuf );
				break;
			case 4030://国库券信息
				retVal=Function_CxGkq( packstruct, cSendbuf );
				break;
			case 4040://代收费信息
				retVal=Function_CxDsf( packstruct, cSendbuf );
				break;
			case 4050://综合查询
				retVal=Function_CxZhxx( packstruct, cSendbuf );
				break;
			case 4060://全国通查询
				retVal=Function_CxQgt( packstruct, cSendbuf );
				break;
			case 4100://卡内转帐
				retVal=Function_Knzz( packstruct, cSendbuf );
				break;
			case 4110://卡卡转帐
				retVal=Function_Kkzz( packstruct, cSendbuf );
				break;
			default:
				break;

	}
	return retVal;

}

/*==================================================================================
//函数名称: AppendRecord
//输入参数: char *dbffile: 数据库名称
//          char *jydm: 交易代码
//          PACKSTRUCT *packstruct: 通信数据结构
//          TDBF dbf: 数据库类
//输出参数: 无
//返    回: 无
//功    能: 追加记录。
//开发人员: zhangl
//修改记录: 1. 第一次编写.
====================================================================================*/
void Cpackage::AppendRecord(char *dbffile, char *jydm, PACKSTRUCT *packstruct, TDBF dbf)
{
	int  datalen, recordlength, recordcount , offset, i ;
	char fileName[80], tempStr[80];

	memset( fileName, 0x00, sizeof(fileName) );
	//GetCurrentDirectory(80,tempStr);
	strcpy( fileName, "..\\conf\\dbffile.txt");

	memset(tempStr,0x00,sizeof(tempStr));
	GetPrivateProfileString(jydm,"total","temp.dbf",tempStr, 80, fileName);
	recordlength = atoi( tempStr );
	if(recordlength == 0)
		return;

	memset(tempStr,0x00,sizeof(tempStr));
	//packLen must is true!!!!!!!!!!!!!!! zhangl
	memcpy(tempStr, packstruct->m_DataLen,sizeof(packstruct->m_DataLen));
    //for test zhangl
	datalen = atoi(tempStr);
	    
	recordcount = datalen/recordlength;

	dbf.Open(dbffile, ReadWrite);
	offset = MAX_HEAD_LEN;
//	AfxMessageBox("Append");
    for(i = 0 ; i< recordcount ; i++)
	{
		memset(tempStr,0x00, sizeof(tempStr));
		strcpy(tempStr," ");
		memcpy(tempStr+1, packstruct->m_Data+i*recordlength, recordlength);
	
//		AfxMessageBox(tempStr);

		dbf.SetRecordBuffer(tempStr);
		offset = offset + recordlength;
		dbf.AppendRecord();
	}
	dbf.Close();
}

/*==================================================================================
//函数名称: CreateDbfFile
//输入参数: char *jydm: 交易代码
//          char *dbffile: 数据库名称
//          TDBF dbf: 数据库类
//输出参数: 无
//返    回: 无
//功    能: 生成数据库表。
//开发人员: zhangl
//修改记录: 1. 第一次编写.
====================================================================================*/
void Cpackage::CreateDbfFile(char *jydm, char *dbffile, TDBF dbf)
{
	char fileName[80];
	char tempStr[80];
	TDBFField  field[100];
	int total;
	int  fieldnumber, i;
	
	memset( dbffile, 0, sizeof(dbffile) );
	memset( fileName, 0, sizeof( fileName ) );
	GetCurrentDirectory(80,tempStr);
	strcpy( fileName, "..\\conf\\dbffile.txt");
	memset(tempStr,0x00,sizeof(tempStr));
	GetPrivateProfileString(jydm,"fileName","temp.dbf",tempStr, 80, fileName);
	//strcpy( dbffile,tempStr);
	sprintf( dbffile, "..\\dbf\\%s",tempStr);

	memset(tempStr,0x00,sizeof(tempStr));
	GetPrivateProfileString(jydm,"fieldnumber","1",tempStr, 80, fileName);
	fieldnumber = atoi(tempStr);
	memset(tempStr,0x00,sizeof(tempStr));
	GetPrivateProfileString(jydm,"total","1",tempStr, 80, fileName);
	total = atoi(tempStr);

	for (i = 0 ; i < fieldnumber; i++)
	{
		char Str[40];
		int j = 0;
		memset(Str,0x00,sizeof(Str));

		j = i + 1 ;
		sprintf(Str,"field%d", j );
		strcat(Str,".name");
		memset(tempStr, 0x00, sizeof(tempStr));
		GetPrivateProfileString(jydm,Str,"1",tempStr, 80, fileName);
		strcpy(field[i].Name,tempStr);

		memset(Str,0x00,sizeof(Str));
		sprintf(Str,"field%d", j );
		strcat(Str,".type");
		memset(tempStr, 0x00, sizeof(tempStr));
		GetPrivateProfileString(jydm,Str,"C",tempStr, 80, fileName);
		field[i].Type=tempStr[0]; 

		memset(Str,0x00,sizeof(Str));
		sprintf(Str,"field%d", j );
		strcat(Str,".width");
		memset(tempStr, 0x00, sizeof(tempStr));
		GetPrivateProfileString(jydm,Str,"10",tempStr, 80, fileName);
		field[i].Width = atoi( tempStr ); 

		memset(Str,0x00,sizeof(Str));
		sprintf(Str,"field%d", j );
		strcat( Str, ".dec" );
		memset(tempStr, 0x00, sizeof(tempStr));
		GetPrivateProfileString(jydm,Str,"0",tempStr, 80, fileName);
		field[i].Dec = atoi( tempStr ); 
	}
	dbf.New(dbffile,field,fieldnumber);
	dbf.Close();
}

/*==================================================================================
//函数名称: ClearPackStruct
//输入参数: PACKSTRUCT *packstruct: 通信数据结构
//输出参数: 无
//返    回: 无
//功    能: 清空通信数据结构。
//开发人员: zhangl
//修改记录: 1. 第一次编写.
====================================================================================*/
void Cpackage::ClearPackStruct(int Errcode, PACKSTRUCT *packstruct)
{
	char tmpstr[10];
	memset(tmpstr,0x00,sizeof(tmpstr));
	memset(packstruct,0x00,sizeof(PACKSTRUCT));
	sprintf(tmpstr,"%-4.4s",Errcode);
	memcpy(packstruct->m_Fhdm,"9000",sizeof(packstruct->m_Fhdm));
}

/*==================================================================================
//函数名称: ClearPackStruct
//输入参数: char *cRecvbuf: 返回的字符串
//输出参数: PACKSTRUCT *packstruct:通信数据结构
//返    回: 通信数据结构的长度
//功    能: 数据转换,将银行返回的数据包转换成本公司自定义包。
//开发人员: zhangl
//修改记录: 1. 第一次编写.
====================================================================================*/
int Cpackage::ExchangeRecvData(PACKSTRUCT *packstruct, char *cRecvbuf, char * cHoldmem)
{
	int nDatalen,retVal;
	int nCode;

	char tmp[800];//add zhangl for test
	int iLen;//add zhangl for test

	memset(tmp,0x00,sizeof(tmp));
	memcpy(tmp,packstruct->m_Jydm,sizeof(packstruct->m_Jydm));
	nCode = atoi(tmp);

	switch( nCode )
	{
			case 1001://密码校验请求
				retVal=Function_Mmjy_ans( nCode, packstruct, cRecvbuf );
				break;
				//储蓄 国库券信息  代收费信息 
				//多媒体客户综合  全国通
			case 4011://储蓄信息查询
			case 4012://储蓄信息查询
			case 4013://储蓄信息查询
			case 4015://储蓄信息查询
			case 4016://储蓄信息查询
			case 4018://储蓄信息查询
			case 4019://储蓄信息查询
			case 4020://储蓄信息查询
				retVal=Function_Cxxxcx_ans( nCode, packstruct, cRecvbuf );
				break;
			case 4030://国库券信息
				retVal=Function_CxGkq_ans( nCode, packstruct, cRecvbuf );
				break;
			case 4040://代收费信息
				retVal=Function_CxDsf_ans( nCode, packstruct, cRecvbuf );
				break;
			case 4050://客户综合
				retVal=Function_CxZhxx_ans( nCode, packstruct, cRecvbuf );
				break;
			case 4060://全国通
				retVal=Function_CxQgt_ans( nCode, packstruct, cRecvbuf );
				break;
			case 4100://卡内转帐
				retVal=Function_Knzz_ans( nCode, packstruct, cRecvbuf );
				break;
			case 4110://卡卡转帐
				retVal=Function_Kkzz_ans( nCode, packstruct, cRecvbuf );
				break;
			default:
				break;

	}
		bEndFlag = TRUE;
	return nDatalen;
}


	


//储蓄信息信息查询请求
int Cpackage::Function_Cxxxcx(int jydm, PACKSTRUCT *packstruct, char *cSendbuf)
{
	/*
	card_no 
	币  种
	储  种
	笔数号
	查询起始日期YYYYMMDD
    */
	char	tmpStr[ 200 ], tmpstr[ 200 ], Buff[ 20 ], dateBuf[ 20 ];
	int RetValue=0;
	information_request Str_info_request;

	memset( &Str_info_request, 0x00, sizeof(information_request) );
	memset( tmpStr, 0x00, sizeof(tmpStr) );
	memset( tmpstr, 0x00, sizeof(tmpstr) );
	
 	//信息查询请求
	//02 - 信息查询 jylx[2];
	memcpy(Str_info_request.jylx,"02",sizeof(Str_info_request.jylx));
    

	//多媒体查询 设备编号 3
	memset(tmpStr,0x00,sizeof(tmpStr));
    memcpy(tmpStr,packstruct->m_Zdh,sizeof(packstruct->m_Zdh));
	alltrimSpace(tmpStr);
	memcpy(Str_info_request.pprno,tmpStr,sizeof(Str_info_request.pprno));
//	WriteParseLog(__FILE__,__LINE__,"%s  , %s=[%s]","信息查询请求模块","设备编号",tmpStr);


	//处理号 3  ????????????????????
	//memset(tmpstr,0x00,sizeof(tmpstr));
    //mwmcpy(tmpstr,packstruct->m_Zdh,sizeof(packstruct->m_Zdh));
	//alltrimSpace(tmpstr);
	memcpy(Str_info_request.pprclh,"000",sizeof(Str_info_request.pprclh));
	
	//card_no 16
	memset(tmpStr,0x00,sizeof(tmpstr));
	GetValue( packstruct->m_Data, tmpStr, 1, 0x01 );
    alltrimSpace(tmpStr);
	memcpy(Str_info_request.card_no,tmpStr,sizeof(Str_info_request.card_no));
	WriteParseLog(__FILE__,__LINE__,"%s  , %s=[%s]","信息查询请求模块","card_no",tmpStr);

	//币  种  2
	if((jydm == 4018)||(jydm == 4019))
	{
	memset(tmpStr,0x00,sizeof(tmpstr));
	GetValue( packstruct->m_Data, tmpStr, 2, 0x01 );
    alltrimSpace(tmpStr);
	memcpy(Str_info_request.bz,tmpStr,sizeof(Str_info_request.bz));
	}
	else
	{
	memcpy(Str_info_request.bz,"01",sizeof(Str_info_request.bz));
	}
	WriteParseLog(__FILE__,__LINE__,"%s  , %s=[%s]","信息查询请求模块","bz",Str_info_request.bz);

⌨️ 快捷键说明

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