?? package.cpp
字號:
// 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
extern int WriteParseLog(char *FileName, int Line, char *fmt, ...);
//////////////////////////////////////////////////////////////////////
// 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 tmpStr[80];
retVal = 0;
nDatalen = sizeof(PACKSTRUCT);
memset(tmpStr,0x00,sizeof(tmpStr));
memcpy(tmpStr,packstruct->m_Jydm,sizeof(packstruct->m_Jydm));
alltrimSpace(tmpStr);
WriteParseLog(__FILE__,__LINE__,"%s , %s=[%s]","請求處理開始","交易代碼=[%s]",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://卡內轉帳1
retVal=Function_Knzz( packstruct, cSendbuf );
break;
case 4102://卡內轉帳2
retVal=Function_KnzzNext( packstruct, cSendbuf );
break;
case 4110://卡卡轉帳
retVal=Function_Kkzz( packstruct, cSendbuf );
break;
default:
break;
}
return retVal;
}
extern int WriteParsecLog(char *FileName, int Line, char *fmt, ...);
char *Cpackage::WriteContNum()
{
/////讀取 流水號
int iNum = 0;
char cTmp[100];
iNum = GetPrivateProfileInt("SERVER","CONTINUM",0,"..\\conf\\Config.ini");
if(iNum >= 999)
iNum = 0;
iNum += 1;
memset(cTmp,0x00,sizeof(cTmp));
sprintf(cTmp,"%3d",iNum);
WritePrivateProfileString("SERVER","CONTINUM",cTmp,"..\\conf\\Config.ini");
memset(cTmp,0x00,sizeof(cTmp));
sprintf(cTmp,"%3d%3d",iNum,iNum);
return cTmp;
}
/*==================================================================================
//函數名稱: 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];
int iLen=0;
memset(tmpstr,0x00,sizeof(tmpstr));
//memset(packstruct,0x00,sizeof(PACKSTRUCT));
//sprintf(tmpstr,"%d",Errcode);
memcpy(packstruct->m_Fhdm,"9000",sizeof(packstruct->m_Fhdm));
memset(packstruct->m_Data,0x00,sizeof(packstruct->m_Data));
strcpy(packstruct->m_Data, "通信故障");
iLen = strlen(packstruct->m_Data);
packstruct->m_Data[iLen] = 0x01;
}
/*==================================================================================
//函數名稱: ClearPackStruct
//輸入參數: char *cRecvbuf: 返回的字符串
//輸出參數: PACKSTRUCT *packstruct:通信數據結構
//返 回: 通信數據結構的長度
//功 能: 數據轉換,將銀行返回的數據包轉換成本公司自定義包。
//開發人員: zhangl
//修改記錄: 1. 第一次編寫.
====================================================================================*/
int Cpackage::ExchangeRecvData(PACKSTRUCT *packstruct, char *cRecvbuf, char * cHoldmem)
{
int nDatalen = 0,retVal = 0;
int nCode = 0;
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));
alltrimSpace(tmp);
nCode = atoi(tmp);
switch( nCode )
{
case 1001://密碼校驗請求
retVal=Function_Mmjy_ans( nCode, packstruct, cRecvbuf );
break;
case 2001://50發卡驗證
case 2002://51發卡
case 2003://52換卡驗證
case 2004://53換卡
retVal=Function_KKHK_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 4102://卡內轉帳
retVal=Function_KnzzNext_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 ];
// char Buff[ 20 ], dateBuf[ 20 ];
int iLength,RetValue=0;
information_request Str_info_request;
memset( &Str_info_request, 0x30, sizeof(information_request) );
memset( tmpStr, 0x00, sizeof(tmpStr) );
memset( tmpstr, 0x00, sizeof(tmpstr) );
iLength = 0;
//信息查詢請求
//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);
iLength = strlen(tmpStr);
memcpy(Str_info_request.pprno,tmpStr,sizeof(Str_info_request.pprno));
WriteParseLog(__FILE__,__LINE__,"%s , %s=[%s]","信息查詢請求模塊","設備編號",tmpStr);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -