int F240004(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; T_t_refno tRefno; T_t_transdtl transdtl; //卡操作流水表,用做冲正用 memset(&transdtl,0,sizeof transdtl); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); SetCol(handle,0); SetCol(handle,F_SHOLDER_AC_NO,F_SCLOSE_EMP,F_SORDER0,F_SORDER1,F_SSERIAL1,F_LVOL0,F_LVOL1,F_SDATE0,F_STIME0,F_SDATE1,F_STIME1,F_SCUST_NO,F_SCHANGE_EMP,F_SSERIAL0,F_LVOL2,F_SCUST_AUTH,F_SSTATUS1,F_SEMP_PWD,F_SEMP_PWD2,F_SSTATION0,F_SSTATION1,F_SORDER2,0); ret = DB_t_refno_open_select_by_c1_and_status(RS_YKTREVSUCC); if(ret) { if(DB_NOTFOUND == ret) return E_DB_REFNO_N; return E_DB_REFNO_R; } while(1) { memset(&tRefno,0,sizeof tRefno); ret = DB_t_refno_fetch_select_by_c1(&tRefno); if(ret) { if(DB_NOTFOUND==ret) return 0; else return E_DB_REFNO_R; } break; } ret=DB_t_transdtl_read_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl); if(ret) { if(ret==DB_NOTFOUND) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_R; } sprintf(out_pack->sorder0,"%-9d", int(transdtl.amount)); // 转账时 限制了金额不能有小数 Strncpy_t(out_pack->sdate0,transdtl.transdate,sizeof(out_pack->sdate0)); Strncpy_t(out_pack->stime0,transdtl.transtime,sizeof(out_pack->stime0)); sprintf(out_pack->sserial0,"%-10d",transdtl.cardno); Strncpy_t(out_pack->scust_auth,transdtl.extdata,sizeof(out_pack->scust_auth)); out_pack->lvol0=atoi(transdtl.refno+8); //out_pack->lvol1=atoi(transdtl.refno+8); out_pack->lvol2=transdtl.termid; des2src(out_pack->sholder_ac_no,transdtl.refno); // 交易参考号 des2src(out_pack->sdate1,tRefno.mac); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
static int NormalTrans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL8,F_LVOL10,F_LVOL11,F_LVOL12,F_SDATE0,F_SPHONE3,F_SADDR,F_LSAFE_LEVEL2, F_SDATE3,F_STIME3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); des2src(trans.refno,rPack->sphone3); //交易参考号 if(strlen(trans.refno)!=14) { ERRTIP("交易参考号错误"); return E_COMMON_ERR; } T_t_refno tRefno; memset(&tRefno,0,sizeof(tRefno)); ret=DB_t_refno_read_by_refno(trans.refno,&tRefno); if(ret) { if(DB_NOTFOUND==ret) return E_DB_REFNO_N; else return E_DB_REFNO_R; } if(strncmp(tRefno.mac,rPack->saddr,8)!=0) { ERRTIP("交易参考号MAC校验错误"); return E_COMMON_ERR; } if(RS_FAIL==tRefno.status) { ERRTIP("交易已失败"); return E_COMMON_ERR; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); ret=DB_t_transdtl_read_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_TRANSDTL; else return E_DB_TRANSDTL_R; } int waterflag=0; if(transdtl.exttype/1000==1)//水控 waterflag=1; if(RS_SUCC==tRefno.status) { outPack->lvol0=transdtl.cardno; outPack->lvol1=D4U5(transdtl.amount*100,0); outPack->lvol8=D4U5(transdtl.cardaftbal*100,0); if(waterflag)//水控 { double wateraftbal= atof(transdtl.extdata); outPack->lsafe_level2=D4U5(wateraftbal*100,0); } des2src(outPack->sdate3,transdtl.transdate); des2src(outPack->stime3,transdtl.transtime); des2src(outPack->semp,transdtl.opercode); outPack->lwithdraw_flag=transdtl.termid; outPack->lserial1=transdtl.termseqno; des2src(outPack->sphone3,transdtl.refno); des2src(outPack->saddr,tRefno.mac); PutRow(handle,outPack,pRetCode,szMsg); return 0; } if(transdtl.status[0]!=DTLSTATUS_INIT) { ERRTIP("交易流水表状态错误"); return E_COMMON_ERR; } des2src(trans.opercode,transdtl.opercode); trans.termid=transdtl.termid; trans.termseqno=transdtl.termseqno; trans.cardflag=1; trans.usecardflag=1; trans.transcode=transdtl.transcode; trans.cardno=transdtl.cardno; trans.purseno=transdtl.purseno; trans.paycnt=transdtl.cardcnt; trans.cardbefbal=transdtl.cardbefbal; trans.cardaftbal=transdtl.cardbefbal; trans.inputamt= transdtl.amount; trans.unusedamt = trans.inputamt; CPaymentBase *payment; payment = CPaymentBase::find_payment(transdtl.exttype); if(NULL == payment) { return E_TRANS_FUNC_NONSUPPORT; } rPack->lcert_code = transdtl.exttype; strcpy(rPack->sbank_acc,transdtl.extdata); ret = payment->init(handle,&aPack,rPack); if(ret) { writelog(LOG_ERR,"trade[%d],ret[%d]",transdtl.exttype,ret); return ret; } pAccTrans->SetSummary(payment->payment_.summary); T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(trans.cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } strcpy(trans.cardaccno,tCard.accno); trans.feetype=tCard.feetype; trans.custid=tCard.custid; ret=pAccTrans->doTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; ret=UpdateCardBitmap(trans.cardno,trans.paycnt,CARDBITMAPTYPE_SYS_ONLINE); if(ret) return ret; transdtl.status[0]=DTLSTATUS_SUCCESS; ret=DB_t_transdtl_update_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_U; } tRefno.status=RS_SUCC; strcpy(tRefno.lastsaved,trans.sysdatetime); ret=DB_t_refno_update_by_refno(tRefno.refno,&tRefno); if(ret) { if(DB_NOTFOUND==ret) return E_DB_REFNO_N; else return E_DB_REFNO_U; } outPack->lvol0=tCard.cardno; outPack->lvol1=D4U5(trans.inputamt*100,0); outPack->lvol8=D4U5(trans.cardaftbal*100,0); if(waterflag)//水控 { double wateraftbal= atof(transdtl.extdata); outPack->lsafe_level2=D4U5(wateraftbal*100,0); } des2src(outPack->sdate3,trans.accdate); des2src(outPack->stime3,trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; des2src(outPack->sphone3,trans.refno); des2src(outPack->saddr,tRefno.mac); sprintf(trans.remark,"%s卡余额%.2lf元",pAccTrans->remark.c_str(),pAccTrans->trans.cardaftbal); des2src(outPack->vsmess,trans.remark); // AnswerData(handle,*pRetCode,szMsg); //进行第三方支付 if(payment->payment_.onlinepay) { ret=db_commit(); if(ret) { writelog(LOG_ERR,"数据库事务提交失败 ret=%d",ret); return E_DB_COMMIT; } rPack->lwithdraw_flag=outPack->lwithdraw_flag; rPack->lserial1=outPack->lserial1; rPack->lvol0=outPack->lvol0; rPack->lvol1=outPack->lvol1; rPack->lvol8=outPack->lvol8; rPack->lsafe_level2=outPack->lsafe_level2; des2src(rPack->sdate3,outPack->sdate3); des2src(rPack->stime3,outPack->stime3); des2src(rPack->sphone3,outPack->sphone3); des2src(rPack->saddr,outPack->saddr); //mac des2src(rPack->semp,outPack->semp); ret=payment->transfer(handle,rPack,outPack); if(ret) { writelog(LOG_ERR,"与第三方系统交易失败 ret=%d",ret); return ret; } if(payment->pushflag_ != 1) PutRow(handle,outPack,pRetCode,szMsg); } else { PutRow(handle,outPack,pRetCode,szMsg); } return 0; }
static int NormalTrans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL2,F_LVOL8,F_LVOL10,F_LVOL11,F_LVOL12,F_SDATE0,F_SPHONE3,F_SADDR,F_LSAFE_LEVEL2, F_SDATE3,F_STIME3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); if(rPack->lvol0<1) { ERRTIP("请输入付款方卡号"); return E_COMMON_ERR; } if(rPack->lvol2<1) { ERRTIP("请输入收款方卡号"); return E_COMMON_ERR; } des2src(trans.refno,rPack->sphone3); //交易参考号 if(strlen(trans.refno)!=14) { ERRTIP("交易参考号错误"); return E_COMMON_ERR; } T_t_refno tRefno; memset(&tRefno,0,sizeof(tRefno)); ret=DB_t_refno_read_by_refno(trans.refno,&tRefno); if(ret) { if(DB_NOTFOUND==ret) return E_DB_REFNO_N; else return E_DB_REFNO_R; } if(strncmp(tRefno.mac,rPack->saddr,8)!=0) { ERRTIP("交易参考号MAC校验错误"); return E_COMMON_ERR; } if(RS_FAIL==tRefno.status) { ERRTIP("交易已失败"); return E_COMMON_ERR; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); ret=DB_t_transdtl_read_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_TRANSDTL; else return E_DB_TRANSDTL_R; } if(RS_SUCC==tRefno.status) { outPack->lvol0=transdtl.cardno; outPack->lvol1=D4U5(transdtl.amount*100,0); outPack->lvol8=D4U5(transdtl.cardaftbal*100,0); outPack->lsafe_level2=rPack->lsafe_level+D4U5(transdtl.amount*100,0); des2src(outPack->sdate3,transdtl.transdate); des2src(outPack->stime3,transdtl.transtime); des2src(outPack->semp,transdtl.opercode); outPack->lwithdraw_flag=transdtl.termid; outPack->lserial1=transdtl.termseqno; des2src(outPack->sphone3,transdtl.refno); PutRow(handle,outPack,pRetCode,szMsg); return 0; } int cardno=atoi(transdtl.voucherno); if(rPack->lvol2!=cardno) { ERRTIP("收款方卡号错误"); return E_COMMON_ERR; } if(transdtl.status[0]!=DTLSTATUS_INIT) { ERRTIP("交易流水表状态错误"); return E_COMMON_ERR; } des2src(trans.opercode,transdtl.opercode); trans.termid=transdtl.termid; trans.termseqno=transdtl.termseqno; trans.cardflag=0; trans.usecardflag=0; trans.transcode=transdtl.transcode; trans.cardno=transdtl.cardno; trans.purseno=transdtl.purseno; trans.paycnt=transdtl.cardcnt; trans.cardbefbal=transdtl.cardbefbal; trans.cardaftbal=transdtl.cardaftbal; trans.inputamt= transdtl.amount; trans.unusedamt = trans.inputamt; T_t_card tOutCard; memset(&tOutCard,0,sizeof(tOutCard)); T_t_card tInCard; memset(&tInCard,0,sizeof(tInCard)); ret=DB_t_card_read_by_cardno(trans.cardno,&tOutCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } ret=DB_t_card_read_by_cardno(rPack->lvol2,&tInCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,rPack->lvol2); else return E_DB_CARD_R; } trans.feetype=tOutCard.feetype; trans.custid=tOutCard.custid; // trans.cardaftbal=trans.cardbefbal; strcpy(pAccTrans->trans.draccno,tOutCard.accno); strcpy(pAccTrans->trans.craccno,tInCard.accno); ret=pAccTrans->doTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; transdtl.status[0]=DTLSTATUS_SUCCESS; ret=DB_t_transdtl_update_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_U; } tRefno.status=RS_SUCC; des2src(tRefno.lastsaved,trans.sysdatetime); ret=DB_t_refno_update_by_refno(tRefno.refno,&tRefno); if(ret) { if(DB_NOTFOUND==ret) return E_DB_REFNO_N; else return E_DB_REFNO_U; } ///////////////////////////////////////////////////////////////////////////////////////////////// //记录转入卡的卡交易流水 pAccTrans->Reset(); trans.termid=transdtl.termid; trans.dpscnt=rPack->lvol3+1; trans.cardbefbal=rPack->lsafe_level/100.0; trans.cardaftbal=(rPack->lvol1+rPack->lsafe_level)/100.0; trans.cardno=atoi(transdtl.voucherno); if(trans.cardno!=rPack->lvol2) { ERRTIP("收款卡号不符"); return E_COMMON_ERR; } ret=GetCustBaseInfoByCustID(tInCard.custid,trans.custname,trans.stuempno,trans.remark); if(ret) return ret; ret=pAccTrans->GetTermSeqno(); if(ret) { return ret; } T_t_transdtl transdtl2; memset(&transdtl2,0,sizeof(transdtl2)); des2src(transdtl2.refno,transdtl.refno); des2src(transdtl2.transdate,transdtl.transdate); des2src(transdtl2.transtime,transdtl.transtime); strcpy(transdtl2.accdate,transdtl.accdate); strcpy(transdtl2.acctime,transdtl.acctime); transdtl2.termid=trans.termid; transdtl2.termseqno=trans.termseqno; transdtl2.transcode=transdtl.transcode; sprintf(transdtl2.voucherno,"%d",transdtl.cardno); transdtl2.cardno=trans.cardno; transdtl2.purseno=trans.purseno; transdtl2.transflag =TF_DPS; transdtl2.cardcnt=trans.dpscnt; transdtl2.cardbefbal=trans.cardbefbal; transdtl2.cardaftbal=trans.cardaftbal; transdtl2.amount= transdtl.amount; transdtl2.managefee=0; transdtl2.custid=tInCard.custid; des2src(transdtl2.custname,trans.custname); des2src(transdtl2.opercode,trans.opercode); transdtl2.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl2.showcardno,tInCard.showcardno); des2src(transdtl2.stuempno,trans.stuempno); transdtl2.exttype=EXTTYPE_OPPSNO; des2src(transdtl2.extdata,transdtl.stuempno); sprintf(transdtl2.remark,"由(%s)转出",transdtl.custname); ret=DB_t_transdtl_add(&transdtl2); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } T_t_account OutAccount; memset(&OutAccount,0,sizeof(OutAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(tOutCard.accno,&OutAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tOutCard.accno); else return E_DB_ACCOUNT_R; } OutAccount.paycnt=transdtl.cardcnt; OutAccount.cardbal=transdtl.cardaftbal; OutAccount.lastpaycnt=transdtl.cardcnt-1; OutAccount.lastcardbal=transdtl.cardbefbal; strcpy(OutAccount.lastaccdate,transdtl.transdate); ret=DB_t_account_update_lock_by_c0(&OutAccount); if(ret) { writelog(LOG_ERR,"更新付款方账户表错误ret=%d",ret); return E_DB_ACCOUNT_U; } T_t_account InAccount; memset(&InAccount,0,sizeof(InAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(tInCard.accno,&InAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tInCard.accno); else return E_DB_ACCOUNT_R; } InAccount.dpscnt=transdtl2.cardcnt; InAccount.cardbal=transdtl2.cardaftbal; InAccount.lastdpscnt=transdtl2.cardcnt-1; InAccount.lastcardbal=transdtl2.cardbefbal; strcpy(InAccount.lastaccdate,transdtl2.transdate); ret=DB_t_account_update_lock_by_c0(&InAccount); if(ret) { writelog(LOG_ERR,"更新收款方账户表错误ret=%d",ret); return E_DB_ACCOUNT_U; } outPack->lvol0=transdtl.cardno; outPack->lvol2=transdtl2.cardno; outPack->lvol1=D4U5(transdtl.amount*100,0); outPack->lvol8=D4U5(transdtl.cardaftbal*100,0); outPack->lsafe_level2=D4U5(transdtl2.cardaftbal*100,0); des2src(outPack->sdate3,trans.accdate); des2src(outPack->stime3,trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=transdtl.termid; outPack->lserial1=transdtl.termseqno; des2src(outPack->sphone3,transdtl.refno); des2src(outPack->vsmess,trans.remark); PutRow(handle,outPack,pRetCode,szMsg); return 0; }