📄 xe_ssjj.ec
字号:
#define EXTERNEXEC SQL include "acckz.h";EXEC SQL include "xezf.h";int XE_ssjjlr(struct accjz *);int XE_ssjjjz(struct accjz *);int XE_ssjjcx1(struct accjz *);int XE_ssjjcx2(struct accjz *);int iXE_ssczjz(struct accjz *);/*小额支付实时借记*/XE_SSJJ(TPSVCINFO * rqst){ struct accjz tBuf; /*交易报文结构*/ struct appfunc tApp; /*业务处理函数*/ int iRet; /*调用交易公共初始化例程*/ iRet = PubTrBegin(rqst,&tBuf,&tApp); if( iRet == 0 ) { tApp.func_jylr= XE_ssjjlr; tApp.func_jyjz= XE_ssjjjz; tApp.func_jycx1 = XE_ssjjcx1; tApp.func_jycx2 = XE_ssjjcx2; /*调用交易流程控制函数*/ iRet = PubTrApp( &tApp, &tBuf ); } /*调用交易公共结束例程*/ PubTrEnd(iRet,&tBuf);}int XE_ssjjcx1(struct accjz *ptBuf){ ZF_ZFHHMC tZfhhmc; /*接收行*/ acclog("p_bh1=%s",ptBuf->p_bh1); if(XPub_GetZfhhmc(ptBuf -> p_bh1, &tZfhhmc) < 0) { PLOG("调用XPub_GetZfhhmc()错"); acclog("p_bh11=%s",ptBuf->p_bh1); return -1; } strcpy(ptBuf -> p_dh1, tZfhhmc.lname); /*付款行名称*/ strcpy(ptBuf -> p_zjh1, tZfhhmc.qshh); /*付款行清算行号*/ /*发起行*/ if(XPub_GetZfhhmc(ptBuf -> p_wdh, &tZfhhmc) < 0) { PLOG("调用XPub_GetZfhhmc()错"); return -1; } strcpy(ptBuf -> p_bh2, tZfhhmc.zfxthh); /*发起行行号*/ strcpy(ptBuf -> p_zjh2, tZfhhmc.qshh); /*发起行清算行号*/ return 0;}int XE_ssjjcx2(struct accjz *ptBuf){ ACCINFO*pAccQs = NULL; struct zhxx tB1; memset( (char *)&tB1, 0, sizeof( tB1 ) );/* 收款人帐号 */ PUBACCINIT("zh2", ptBuf->p_zh2, NULL, NULL, &pAccQs);/* 取帐户详细信息 */ PUBGETFHXX(pAccQs, &tB1); if(tB1.zhzt[0] == '1') { PubErr(-1,__FILE__,__LINE__,PXYM,"[%s]已销户", tB1.zh); return -1; } if(strncmp(tB1.khjg, ptBuf->p_wdh, 5)) { PubErr(-1,__FILE__,__LINE__,PXYM,"[%s]非本机构帐号", tB1.zh); return -1; } if(tB1.zl[0] != '2' && tB1.zl[0] != '3') { PubErr(-1,__FILE__,__LINE__,PXYM,"[%s]不是客户存款帐户", tB1.zh); return -1; }/** 所有对公户都能做小额 * if(tB1.zl[0] == '2' && tB1.bz[2] != '1') { PubErr(-1,__FILE__,__LINE__,PXYM,"对公帐号必须是结算户", tB1.zh); return -1; }**/ /* 无个人结算户标志,必须通过科目号判断 ***/ if(tB1.zl[0] == '3' && strncmp(tB1.kmh , "2110102" ,7) != 0) { PubErr(-1,__FILE__,__LINE__,PXYM,"储蓄帐号必须是个人结算户", tB1.zh); return -1; } strcpy(ptBuf->p_mc2,tB1.zhmc); return 0;}int XE_ssjjlr(struct accjz *ptBuf){ if(atol(ptBuf -> p_bz1) == 30101) /*储蓄通兑*/ { if(ptBuf -> p_bz3[0] == '1') /*转帐缴手续费*/ ptBuf -> p_je3 = ptBuf -> p_je1 + ptBuf -> p_je2; else ptBuf -> p_je3 = ptBuf -> p_je1; if(ptBuf -> p_bz7[0] == '0') /*现金通兑*/ { PubStrTrim(ptBuf -> p_wdh); sprintf(ptBuf -> p_zh2, "%s01101101000001", ptBuf -> p_wdh); strcpy(ptBuf -> p_mc2, "现金"); } } else ptBuf -> p_je3 = ptBuf -> p_je1; return 0;} int XE_ssjjjz(struct accjz *ptBuf){ EXEC SQL BEGIN DECLARE SECTION; XE_WZ tWz; XE_LZ tLz; ZF_ZFHHMC tZfhhmc; long lXgls ,lPlbxh; XE_FJSJ tFjsj; struct accjz tBuf; EXEC SQL END DECLARE SECTION; int iCount,iRet;/** struct zhjzxx jzxx;update by fdx **/ struct zhxx jzxx;/** struct AB20ZWZD tB20; update by fdx**/ memcpy(&tBuf, ptBuf, sizeof(struct accjz)); memset(&tLz, 0x00, sizeof(XE_LZ)); /*写小额往帐登记簿*/ memset(&tWz, 0x00, sizeof(XE_WZ)); tWz.lsh = ptBuf -> p_zjls; /*流水号*/ tWz.xglsh = ptBuf -> p_zjls; /*相关流水号*/ tWz.jzrq = ptBuf -> p_jyrq; /*登记日期*/ if(XPub_GetXeXtrq(&tWz.wtrq) < 0) /*委托日期*/ { PLOG("调用XPub_GetXeXtrq()错"); return -1; } if(XPub_GetXh(XEXH_WZB, &lPlbxh) < 0) /*批量包序号*/ { PLOG("调用XPub_GetXh()错"); return -1; } sprintf(tWz.plbxh, "%08d", lPlbxh); acclog("plbxh=%s",tWz.plbxh); strcpy(tWz.jgh, ptBuf -> p_wdh); strcpy(tWz.sjgh, ptBuf -> p_wdh); tWz.je = ptBuf -> p_je3 ; /*清算金额*/ tWz.wzbz[0] = '4'; /*已组包发送*/ tWz.wzbz[1] = '3'; /*已组包发送*/ strcpy(tWz.plblxh, "004"); /*批量包类型号*/ if(XPub_GetXh(XEXH_ZFWZJY, &(tWz.zfjyxh)) < 0) /*支付交易序号*/ { PLOG("调用XPub_GetXh()错"); return -1; } strcpy(tWz.ywlx, "30101"); /*业务类型*/ strcpy(tWz.ywzl, "90"); /*业务种类*/ strcpy(tWz.fkrkhhh, ptBuf -> p_bh1); /*付款人开户行号*/ strcpy(tWz.jshh, ptBuf -> p_bh1); /*接收行行号*/ strcpy(tWz.skrkhhh, ptBuf -> p_bh2); /*收款人开户行号*/ strcpy(tWz.txcyfqhh, ptBuf -> p_bh2);/*发报行行号*/ strcpy(tWz.jsqshh, ptBuf -> p_zjh1); /*接收清算行行号*/ strcpy(tWz.fqqshh, ptBuf -> p_zjh2); /*发报清算行行号*/ strcpy(tWz.fkrzh, ptBuf -> p_zh1); /*付款人帐号*/ strcpy(tWz.fkrmc, ptBuf -> p_mc1); /*付款人名称*/ strcpy(tWz.fkrdz, ptBuf -> p_dz1); /*付款人地址*/ strcpy(tWz.skrzh, ptBuf -> p_zh2); /*收款人帐号*/ strcpy(tWz.skrmc, ptBuf -> p_mc2); /*收款人名称*/ if(PubGetLsh(&(tWz.xglsh)) < 0) /*此处取得流水号 */ { PLOG("调用PubGetLsh()错"); return -1; } EXEC SQL insert into xe_wz values(:tWz); if(sqlca.sqlcode != 0) { PubErr(-1,__FILE__,__LINE__,PXYM,"写表xe_wz错"); return -1; } /*登记附加数据*/ memset(&tFjsj, 0x00, sizeof(XE_FJSJ)); tFjsj.rq = tWz.jzrq; /*日期*/ tFjsj.lsh = tWz.lsh; /*日期*/ tFjsj.lb[0] = '1'; /*往帐*/ tFjsj.je = ptBuf -> p_je1; /*交易金额*/ tFjsj.dfje = ptBuf -> p_je2; /*委托行手续费*/ tFjsj.fkrzhlx[0] = ptBuf -> p_bz4[0]; /*付款人帐户类型*/ tFjsj.skrzhlx[0] = ptBuf -> p_bz5[0]; /*收款人帐户类型*/ if(ptBuf -> p_bz7[0] == '0') /*现金通兑*/ { strcpy(tFjsj.jflx,"0"); } else { strcpy(tFjsj.jflx,"1"); } tFjsj.mmlx[0] = ptBuf -> p_bz6[0]; /*密码类型*/ PubStrncpy(tFjsj.mmyzsf, ptBuf -> p_bz2, 2); /*密码验证算法*/ tFjsj.yxxxh=strlen(ptBuf -> p_zh6); PubStrTrim(ptBuf -> p_zh6); strcpy(tFjsj.mmyzm, ptBuf -> p_zh6); /*密码验证码*/ EXEC SQL insert into xe_fjsj values(:tFjsj); if(sqlca.sqlcode != 0) { PubErr(-1,__FILE__,__LINE__,PXYM,"写表xe_fjsj错"); return -1; } acclog("p_bz5=%s,p_zjls=%ld,p_jyrq=%ld,p_jysj=%ld,p_zglx=%s",ptBuf->p_bz5, ptBuf->p_zjls,ptBuf->p_jyrq,ptBuf->p_jysj,ptBuf->p_zgxl); /**** 报文发送***/ iRet = ssb_cl( &tWz); if ( iRet < 0 ) { PubErr(-1,__FILE__,__LINE__,PXYM,"实时包发送失败"); return -1; } if (tpfcommit() < 0) { tpfabort(); return PubErr(-1, __FILE__, __LINE__, PXYM, "提交事务错!"); } /*接收实时借记回执*/ iCount = 0; for(;;) { if(iCount == 80) { sprintf(ptBuf->p_xh2,"%d", tWz.zfjyxh); iRet = iXE_ssczjz(ptBuf); if ( iRet < 0 ) { PubErr(-1,__FILE__,__LINE__,PXYM,"实时包冲正失败"); return -1; } else { PubErr(-1,__FILE__,__LINE__,"800","该交易已发起冲正请查询变更登记簿"); return 0; } } EXEC SQL select * into :tLz from xe_lz where ywtrq = :tWz.wtrq and yzfjyxh = :tWz.zfjyxh and jsqshh = :tWz.fqqshh; PubErr(0,__FILE__,__LINE__,PXYM,"wtrq=%d,ywtrq=%d,zfjyxh=%d", tWz.wtrq,tWz.ywtrq,tWz.zfjyxh); if(SQLCODE == 0) /*收到回执*/ { break; } sleep(1); iCount ++; } switch ( atol ( tLz.cljg ) ) { case 0: PubErr(0,__FILE__,__LINE__,PXYM,"成功"); break; case 1: PubErr(-1,__FILE__,__LINE__,PXYM,"账号不存在"); return -1; case 2: PubErr(-1,__FILE__,__LINE__,PXYM,"账号户名不符"); return -1; case 3: PubErr(-1,__FILE__,__LINE__,PXYM,"账户余额不足"); return -1; case 4: PubErr(-1,__FILE__,__LINE__,PXYM,"当天通兑金额超上限"); return -1; case 10: PubErr(-1,__FILE__,__LINE__,PXYM,"账户密码错"); return -1; case 11: PubErr(-1,__FILE__,__LINE__,PXYM,"帐户状态错误"); return -1; case 99: PubErr(-1,__FILE__,__LINE__,PXYM,"其他错误"); return -1; default: PubErr(-1,__FILE__,__LINE__,PXYM, "错误代码非法,请检查该笔业务[%s]", tLz.cljg); return -1; } /*下一段事务*/ if (tpfbegin(60) < 0) /*定义事务 */ { PubErr(-1, __FILE__, __LINE__, PXYM, "启始事务出错!"); return -1; } if(ssjj_zwclfdx(ptBuf) < 0) { PLOG("调用ssjj_zwcl()错"); tpfabort(); return -1; } /*修改实借回执记录*/ EXEC SQL update xe_lz set lzbz[1] = '1' where ywtrq = :tWz.wtrq and yzfjyxh = :tWz.zfjyxh and jsqshh = :tWz.fqqshh; if(sqlca.sqlcode != 0 || sqlca.sqlerrd[2] != 1) { PubErr(-1,__FILE__,__LINE__, PXYM, "修改来帐标志错"); tpfabort(); return -1; } /*修改往报批量包信息*/ PubErr(-1,__FILE__,__LINE__, PXYM, "wtrq=%d,plbxh=%s,fchh=%s", tWz.wtrq,tWz.plbxh,tWz.fqqshh); EXEC SQL update xe_plbxx set bz[1] = '1' where wtrq = :tWz.wtrq and fcbxh = :tWz.plbxh and wlbz[1] = '1' and fchh = :tWz.fqqshh; if(sqlca.sqlcode != 0 || sqlca.sqlerrd[2] != 1) { PubErr(-1,__FILE__,__LINE__, PXYM, "修改往帐包信息错"); tpfabort(); return -1; } /*修改来报批量包信息*/ PubErr(-1,__FILE__,__LINE__, PXYM, "wtrq=%d,plbxh=%s,fchh=%s", tWz.wtrq,tLz.plbxh,tLz.fqqshh); EXEC SQL update xe_plbxx set bz[1] = '1' where ywtrq = :tWz.wtrq and jsbxh = :tLz.plbxh and wlbz[1] = '0' and fchh = :tLz.fqqshh; if(sqlca.sqlcode != 0 || sqlca.sqlerrd[2] != 1) { PubErr(-1,__FILE__,__LINE__, PXYM, "修改往帐报信息错"); tpfabort(); return -1; } if (tpfcommit(60) < 0) /*定义事务 */ { PubErr(-1, __FILE__, __LINE__, PXYM, "提交事务出错!"); return -1; } if (tpfbegin(60) < 0) /*定义事务 */ { PubErr(-1, __FILE__, __LINE__, PXYM, "启始事务出错!"); return -1; } return 0;}int ssjj_zwclfdx(struct accjz * ptBuf){ EXEC SQL BEGIN DECLARE SECTION ; EXEC SQL END DECLARE SECTION ; ACCINFO *pAcc = NULL ; char zh[33]; memset(zh,0,sizeof(zh)); INITAMTINFO( "lzje", CUR_STD, NULL, ptBuf->p_je3, NULL ); sprintf(zh,"%-*.*s%s", 5, 5, pTrInfo->fswd, XEXTLZ); PUBACCINIT( "LZZH", zh, NULL, NULL, &pAcc ); INITAMTINFO( "qxje", CUR_STD, NULL, ptBuf->p_je3, NULL ); INITAMTINFO( "yjje", CUR_STD, NULL, ptBuf->p_je3, NULL ); INITAMTINFO( "sxf", CUR_STD, NULL, ptBuf->p_je2, NULL ); if(ptBuf -> p_bz7[0] == '0') /*现金通兑*/ { INITAMTINFO( "xjje", CUR_STD, NULL, ptBuf->p_je1, NULL ); } if(ptBuf -> p_bz7[0] != '0') /*转帐通兑*/ { INITAMTINFO( "JZJE", CUR_STD, NULL, ptBuf->p_je1, NULL ); PUBACCINIT( "khzh", ptBuf->p_zh2, NULL, NULL, &pAcc ); } /*手续费分录*/ if(strcmp(ptBuf->p_bz3,"0")==0) { INITAMTINFO( "sxfxj", CUR_STD, NULL, ptBuf->p_je2, NULL ); } /****/ RUNACCCORE( ACC_JZ ); PubErr(-1,__FILE__,__LINE__,PXYM,"============sucess======\n"); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -