📄 pkgtrxsbase.hpp
字号:
//------------------------------------------------------------------- // 系统名:小额批量支付系统MBFE// 文件名:PKGTrxsBase.hpp// 描 述:MBFE后台服务基础类// 版 本:v1.0// Copyright (c) 2005 YLINK//------------------------------------------------------------------- #ifndef __PKGTRXSBASE__#define __PKGTRXSBASE__//公共头文件#include "SvrDef.hpp"#include "BepsMbfePub.hpp"#include <math.h>// 系统错#define E_ReadBigDataFail 21753001 // CB0S5001 查询大文本数据存储表失败#define E_UpdateBigDataFail 21753002 // CB0S5003 更新大文本数据存储表失败#define E_SaveBigDataFail 21753003 // CB0S5002 保存大文本数据存储表失败#define E_GetCmtAttrFail 21753004 // CB0S5001 查询报文属性表失败#define E_SaveRunInfoFail 21753005 // CB0S5002 保存运行信息通知表失败 #define E_GetQueueNoFail 21753006 // CB0S5013 产生队列序号失败 #define E_SaveAPIMBRQFail 21753007 // CB0S5002 保存接口数据来帐队列失败#define E_DelBigDataFail 21753008 // CB0S5004 删除大文本数据存储表失败#define E_DelAPIMBSQFail 21753009 // CB0S5004 删除接口数据往帐队列失败#define E_DelAPIMBRQFail 21753010 // CB0S5004 删除接口数据来帐队列失败#define E_SaveCOMMBFESQFail 21753011 // CB0S5002 保存通讯数据往帐队列失败#define E_DelCOMMBFERQFail 21753012 // CB0S5004 删除通讯数据来帐队列失败#define E_MdyCOMMBFERQFail 21753013 // CB0S5003 修改通讯数据来帐队列失败#define E_BuildMsgHeaderFail 21753014 // CB0S2004 组报文头失败#define E_UnknownAppCode 21753015 // CB0S9999 错误的系统编码#define E_Pack911HeaderFail 21753016 // CB0S2004 组911报文头失败#define E_Pack911BusinessFail 21753017 // CB0S2004 组911正文失败#define E_MdyAPIMBSQFail 21753019 // CB0S5003 更新接口数据往帐表失败#define E_MsgHeaderError 21753020 // CB0S2003 报文头错#define E_GetSysWorkDateFail 21753021 // CB0S5001 取系统工作日期失败#define E_MdyRecordStateError 21753022 // CB0S5003 修改状态失败// 业务错#define E_CheckRecvNodeLegFail 21753501 // CB0O1407 接收节点关系合法性检查失败#define E_CheckSendNodeLegFail 21753502 // CB0O1406 发起节点关系合法性检查失败#define E_CheckRdfiCodeStatusFail 21753503 // CB0O2004 接收行状态合法性检查失败#define E_CheckOdfiCodeStatusFail 21753504 // CB0O2003 发起行状态合法性检查失败#define E_CheckPubRecvFail 21753505 // CB0O1999 来帐检查失败#define E_CheckOdfiCodeRecvGrantFail 21753506 // CB0O5002 接收清算行接收业务权限合法性检查失败#define E_CheckSdfiCodeSendGrantFail 21753507 // CB0O5001 发起清算行发起业务权限合法性检查失败#define E_CheckOsdfiCodeFail 21753508 // CB0O2004 接收清算行状态合法性检查失败#define E_CheckIsdfiCodeFail 21753509 // CB0O2003 发起清算行状态合法性检查失败#define E_CheckOdfiCenterFail 21753510 // CB0O1101 发报中心状态合法性检查失败#define E_CheckDateFail 21753511 // CB0O1005 日期合法性检查失败#define E_CheckSdfiCenterFail 21753512 // CB0O1102 收报中心状态合法性检查失败#define E_CheckNpcLegFail 21753513 // CB0O3001 NPC状态合法性检查#define E_SendIsdfiCodeNotEq 21753514 // CB0O1103 报文头发起清算行和正文发起清算行是否一致#define E_SendRdfiCodeNotEq 21753515 // CB0O1102 报文头收报中心和正文收报中心是否一致#define E_SendOsdfiCodeNotEq 21753516 // CB0O1104 报文头中接收清算行和正文接收清算行是否一致#define E_GetCcpcCenterFail 21753517 // CB0O1309 取CCPC号码失败#define E_MsgHeaderReceiverLengthErr 21753518 // CB0O1999 报文头中接收方长度错误#define E_CheckMacError 21753519 // CB0O4001 核地方押失败#define E_MakeMacError 21753520 // CB0O4002 加地方押失败#define E_CallMacError 21753521 // CB0O4999 密押卡工作异常 #define AMOUNT_ZERO (0.001) // 金额0extern MainCtlToSo * strMainCtlToSo;class PKGTrxsBase {public: PKGTrxsBase(); virtual ~PKGTrxsBase(){}; void PkgHdle(); protected: // 勾对函数的输入结构 struct ChkPkg { char m_schkdate[9]; // 对账日期 char m_spkgsender[13]; // 包发起清算行 char m_spkgpredate[9]; // 委托日期 int m_ipkgserno; // 业务包号 char m_chpkgstate; // 包处理状态 }; // MBFEBPDT2602小额业务汇总对账表结构(对账函数需要) struct strMBFEBPDT2602 { int nROW_ID; // 记录标识 char sChkdate[9]; // 对账日期 char sPkgtype[4]; // 包类型号 char sPkgstate[2]; // 包处理状态 int nSendpkgcnt; // 往账包总数 double dSendpkgamt; // 往账包金额合计 int nRecvpkgcnt; // 来账包总数 double dRecvpkgamt; // 来账包金额合计 char sRollnet[2]; // 轧差节点 char sRolldate[9]; // 轧差日期 int nRollno; // 轧差场次 char sChkstate[2]; // 对账状态 }; protected:/* 功能 :解析包头,放入数据到包头结构m_strPkgBatHeader 入口参数:sPkgBatHeader:包头报文 出口参数:无 */ virtual void ParsePkgBatHeader(char *sPkgBatHeader) = 0; /* 功能 :往帐检查(重帐检查,回执期限检查,重复回执检查,原支付信息包检查等) 入口参数:无 出口参数:无*/ virtual void SendPrvCheckGrant() = 0; /* 功能 :往帐保存数据 入口参数:无 出口参数:无*/ virtual void SaveSendData() = 0; /* 功能:来帐检查(重帐检查等) 入口参数:无 出口参数:无*/ virtual void RecvPrvCheckGrant() = 0; /* 功能 :来帐保存数据 入口参数:cSrcFlag:'1' 补发 出口参数:无*/ virtual void SaveRecvData() = 0; /* 功能 :判断业务是来帐还是往帐 入口参数:无 出口参数:无 返回 :true:往帐 false:来帐*/ BOOL IsSendTrans(); /* 功能 :判断业务是否要转发 入口参数:无 出口参数:无 返回 :true:转发 false:不转发 */ BOOL IsRouteTrans();/* 功能 :对账函数 入口参数:无 出口参数:无 返回 :true:转发 false:不转发 */ int Dend01CompareAccount(const char *sCompareDate, int *nSapsedCnt, CString & csSapsed, int *nOthCnt, CString & csOth); /* 功能 :勾对函数 入口参数:无 出口参数:无 返回 :true:转发 false:不转发 */ int PkgWriteOff(const ChkPkg &chkpkg); /* 功能 :日终处理(SP) 入口参数:无 出口参数:无 返回 :true:转发 false:不转发 */ BOOL Dend01DayEndOk(char *sResDesc);/* 功能 :解析行内单笔报文 入口参数:无 出口参数:无 add by lihai 2005-9-1*/ virtual void ParseMBMsg();/* 功能 :发送报文至行内 入口参数:无 出口参数:无 add by lihai 2005-9-8*/ void SendMsgToMb(); void Save001(); void Save002(); void Save008(); //void Save012(); private: void ReadBigData(); void SendPubCheckGrant(); void RecvPubCheckGrant(); void BuilderHeader(const char *sCmtNo, const char *sSender, const char *sReceiver, char *sMsgId,char *strMsgHeader); void ProcSendBusiness(); void ProcRecvBusiness(char *sMsgHeader); void SendPkgHdle(); void RecvPkgHdle(); void Build912BusinessData(char *sAppCode, char *strBusinessData); void BuildMb920BusinessData(char *sAppCode, char *strBusinessData); void BuildCcpc920BusinessData(char *sAppCode, char *strBusinessData); void SendPackFailProc(); void SendRspMb(char *sAppCode); void SendRspCcpc(char *sAppCode); void CheckMacContent(); void GetListSeal(); void ParseMBMsgHeader(); protected: SybServer *m_clsSybServer; // 数据库对象 QueueData *m_strQueueData; // 数据队列结构 BepsInit *m_strBepsInit; // 系统配置参数 SysCtlPar *m_strSysCtlPar; // 系统控制参数 BepsPub m_clsMbfePub; // 数据库执行类 CheckGrant m_strCheckGrant; // 公共权限检 MsgHeader m_strMBMsgHeader; //MB报文头结构 MsgDetail m_strDetail; //MB报文明细结构 MbfeToMbHeader m_clsMbfeMsgHeader; //MBFE发来的报文头 CMTMsgHeader m_strMsgHeader; //小额报文头 PkgBatHeader m_strPkgBatHeader; // 包头结构 BigData m_strBigData; // 大文本数据 SybCommand m_clsSybCommand; // CMTPkgMsg m_clsCmtPkgMsg; int m_nModuleNo; char m_sModuleNo[21]; CString m_clsListSeal; // 明细数据指纹 CString m_clsPkgHeaderMac; // 包头明细数据指纹 CString m_clsPkgSeal; // 密押字符串 CString m_clsExpData; //附加数据 CString m_clsMBMsgHeader; //行内报文头 CString m_clsMBMsgBody; //行内报文体 };inline BOOL PKGTrxsBase::IsSendTrans(){ return strcmp(m_strQueueData->m_sQueueName, T_APIMBSQ) == 0;}//*************Declare PkgReal********************class PkgReal: public PKGTrxsBase{public: // 功能描述:构造函数,初始化类成员变量 PkgReal(); // 功能描述:析构函数,释放资源 virtual ~PkgReal() { }protected: //组包 void CreatPkg(); //设置包头 virtual void MapPKG(CMTOperator * cmtOperator); //设置正文体 virtual void MapBody(CMTOperator * cmtOperator,CString *ExtDatatmp,BOOL bPack); //解包 void UnpackPkg(); //组行内报文 void BuildMBMsg(); //将处理过的明细改为已打包 void PkgUpdateDetail(); //组行内报文体 virtual void BuildMBMsgBody(char *sMsgBody); CMTPkgMsg m_clsCmtPkgMsg; //pkg报文结构类 int m_nPkgLength; //包长度 int m_nPkgSerno; //生成的包号 char m_sProcState[3]; //处理状态 char m_sDealDesc[61]; //处理描述private: //组批量包头 void CreatPkgHeader(CMTOperator &clsCmtOperator); //组正文体 void CreateDetail(); //更新包头 void UpdatePkgHeader(); //发送包 void SendPkg(int &iDataIndex); //插入包头汇总表 void InsertPkg(int iDataIndex);};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -