int F846315(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); if(strlen(pAccTrans->trans.opercode)<1) { pAccTrans->trans.termid=rPack->lwithdraw_flag; } pAccTrans->trans.transcode=TC_TRANSREV; ret=pAccTrans->InitTrans(); if(ret) return ret; // TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); char oldaccdate[9]=""; des2src(oldaccdate,rPack->sdate3); int oldtermid=rPack->lwithdraw_flag; int oldtermseqno=rPack->lserial1; char authrightflag=rPack->sstatus2[0]; if(strlen(oldaccdate)<1) return E_INPUTNULL_ACCDATE; if(oldtermid<1) return E_INPUTNULL_TERMID; if(oldtermseqno<1) return E_INPUTNULL_TERMSEQNO; des2src(pAccTrans->trans.chkopercode,rPack->semp_no); if('1'==authrightflag) { ret=chk_oper_pwd(pAccTrans->trans.chkopercode,rPack->scust_limit); if(ret) return ret; ret=AccTransRev(oldaccdate,oldtermid,oldtermseqno); if(ret) { writelog(LOG_ERR,"acctransrev err ret=%d",ret); return ret; } } else { ret=OnlineTransRev(oldaccdate,oldtermid,oldtermseqno); if(ret) { writelog(LOG_ERR,"acctransrev err ret=%d",ret); return ret; } } SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_STIME3,F_SEMP,F_LSERIAL1,F_VSMESS,0); outPack->lvol0=pAccTrans->trans.cardno; outPack->lvol8=0; des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,pAccTrans->trans.opercode); outPack->lserial1=pAccTrans->trans.termseqno; strcpy(outPack->vsmess,pAccTrans->remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F846314(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); // ret=pAccTrans->checkCfgUpdate(); // if(ret) // return ret; des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_CARDDRAW; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol0; trans.purseno=PURSE_NO_ONE; trans.paycnt=rPack->lvol6+1; trans.cardbefbal=rPack->lvol7/100.0; trans.cardaftbal=trans.cardbefbal; // trans.fundtype=PAYTYPE_CASH; des2src(trans.cardphyid,rPack->sstation0); trans.inputamt=rPack->damt0; trans.unusedamt = trans.inputamt; if(amtcmp(trans.inputamt,trans.cardbefbal)>0) { return ERRINFO(E_CARD_BALANCE_SHORTAGE,trans.cardbefbal); } T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=doCard(trans,tCard); if(ret) { return ret; } // ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_DEC,0); // if(ret) // return ret; T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno); } if(tCardAccount.lastpaycnt>trans.paycnt) { return ERRINFO(E_CARDCNT_LT_LASTCARDCNT,trans.paycnt,tCardAccount.lastpaycnt); } strcpy(trans.cardaccno,tCardAccount.accno); trans.feetype=tCard.feetype; trans.custid=tCard.custid; strcpy(trans.draccno,tCardAccount.accno); ret=pAccTrans->doTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; // transdtl.paytype=trans.fundtype; // des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.transflag =TF_PAY; transdtl.cardcnt=trans.paycnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.cardaftbal=trans.cardaftbal; transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.custid=tCardAccount.custid; des2src(transdtl.custname,tCardAccount.accname); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; transdtl.showcardno=atol(tCard.showcardno); GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE0, F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_STIME3,0); outPack->lvol0=tCard.cardno; outPack->lvol8=D4U5(pAccTrans->trans.cardaftbal*100,0); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(trans.remark,"%s卡余额%.2lf元",pAccTrans->remark.c_str(),pAccTrans->trans.cardaftbal); des2src(outPack->vsmess,trans.remark); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F846334(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_EACCDRAW; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); des2src(trans.eaccno,rPack->sbank_acc); if(!strlen(trans.eaccno)) return E_INPUTNULL_ACCNO; //去帐户信息 T_t_netacc eaccount; memset(&eaccount,0,sizeof(eaccount)); ret=DB_t_netacc_read_by_accno(trans.eaccno,&eaccount); if(ret) { writelog(LOG_ERR,"accno[%s]",trans.eaccno); if(DB_NOTFOUND==ret) return E_NOTEXIST_EACCNO; else return E_DB_ACCOUNT_R; } if(eaccount.status[0]!=STATUS_NORMAL) { return E_EACCNO_LOGOUT; } char seedkey[33]=""; char inpwd_crypt[65]=""; char inpwd_plain[65]=""; char dbpwd_plain[65]=""; des2src(inpwd_crypt,rPack->snote2); if(!strlen(inpwd_crypt)) return E_PWD_NULL; ret=GetSysParaVal(GLOBLE_SYSPARA_STATIC_KEY,seedkey); if(ret) return ret; ret=decrypt_elec_card_pwd(0,seedkey,inpwd_crypt,inpwd_plain); if(ret) return E_EACCPWD; ret=decrypt_elec_card_pwd(0,seedkey,eaccount.accpwd,dbpwd_plain); if(ret) return E_PWD_DECRYPT; if(strcmp(inpwd_plain,dbpwd_plain)!=0) return E_EACCPWD; if(eaccount.stoppayflag[0]=='1') return E_EACC_STOPPAY; pAccTrans->trans.inputamt=rPack->damt0; pAccTrans->trans.unusedamt = trans.inputamt; if(amtcmp(pAccTrans->trans.inputamt,0)==0) return E_INPUT_AMT_NULL; if(amtcmp(pAccTrans->trans.inputamt,eaccount.balance)>0) return E_BALANCE_SHORTAGE; // 创建账号 pAccTrans->trans.custid=eaccount.custid; pAccTrans->trans.fundtype=0; ret=pAccTrans->doTrans(); if(ret) return ret; SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(outPack->vsmess,"%s %s 帐户余额:%.2f元",eaccount.accname,pAccTrans->remark.c_str(),pAccTrans->trans.draccaftbal); des2src(trans.remark,outPack->vsmess); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
//取消换卡 static int DoCardInsteadCancel(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_LVOL1,F_LSAFE_LEVEL2,F_LVOL4,F_LVOL5, F_SALL_NAME,F_SPAGER,F_SCERT_NO, F_SEMAIL2,F_SMARKET_CODE,F_SDATE0, F_LVOL0,F_STX_PWD,F_LVOL8,F_LVOL6,F_LSAFE_LEVEL,F_SMARKET_CODE2,F_SHOLDER_AC_NO, F_SORDER0,F_SEMP,F_SDATE3,F_STIME3,F_LVOL11,F_LVOL12, F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_SNAME2,0); 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; } if(tCard.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==tCard.badflag[0]) { return ERRINFO(E_CARD_BADRECORD,trans.cardno); } T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } T_t_customer customer; memset(&customer,0,sizeof(customer)); if(tCard.custid) { ret=DB_t_customer_read_by_custid(tCard.custid,&customer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,tCard.custid); else return E_DB_CUSTOMER_R; } } char cardpwd[33]=""; char key[17]=""; strcpy(key,STATIC_SEED_KEY); EncodePwd(key,cardpwd,tCard.cardpwd, 1); T_t_cardinsteaddtl cardinsteaddtl; memset(&cardinsteaddtl,0,sizeof(cardinsteaddtl)); ret=DB_t_cardinsteaddtl_read_lock_by_c0_and_cardno(trans.cardno,&cardinsteaddtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_CARDINSTEADDTL_N; else return E_DB_CARDINSTEADDTL_R; } if(cardinsteaddtl.status[0]==STATUS_NORMAL) { T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); des2src(transdtl.accdate,pAccTrans->trans.accdate); des2src(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.cardcnt=cardinsteaddtl.oldcardcnt; transdtl.cardbefbal=cardinsteaddtl.oldcardbal; transdtl.cardaftbal=transdtl.cardbefbal; transdtl.managefee=trans.totalfeeamt; transdtl.amount=trans.totaltransamt; transdtl.custid=tCard.custid; des2src(transdtl.custname,customer.custname); des2src(transdtl.stuempno,customer.stuempno); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl.showcardno,cardinsteaddtl.oldshowcardno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } outPack->lvol1=tCard.custid; outPack->lsafe_level2=customer.custtype; outPack->lvol5=tCard.feetype; des2src(outPack->sall_name,customer.custname); des2src(outPack->spager,customer.stuempno); des2src(outPack->scert_no,customer.deptcode); des2src(outPack->semail2,customer.idno); des2src(outPack->smarket_code,customer.sex); des2src(outPack->sdate0,tCard.expiredate); sprintf(outPack->sholder_ac_no,"%d",10); //发行方标识 des2src(outPack->smarket_code2,customer.idtype); des2src(outPack->sname2,tCard.cardverno); outPack->lsafe_level=tCard.cardtype; outPack->lvol0=tCard.cardno; outPack->lvol8=(int)(cardinsteaddtl.oldcardbal*100); outPack->lvol4=cardinsteaddtl.oldsubsidyno; outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); outPack->lvol6=cardinsteaddtl.oldcardcnt; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; des2src(outPack->stx_pwd,cardpwd); PutRow(handle,outPack,pRetCode,szMsg); return 0; } if(cardinsteaddtl.revflag[0]=='1') { return E_CARDINSTEAD_CANCEL; } T_t_card cardtmp; memset(&cardtmp,0,sizeof(cardtmp)); ret=DB_t_card_read_by_cardphyid_and_status(trans.cardphyid,"1",&cardtmp); if(ret!=DB_NOTFOUND) { if(DB_SUCCESS==ret) return ERRINFO(E_EXIST_CARDPHYID,trans.cardphyid); else return E_DB_CARD_R; } if(pAccTrans->sysPara.bEnableCardMgr) { ret=DB_t_card_read_by_showcardno_and_status(trans.showcardno,"1",&tCard); if(ret!=DB_NOTFOUND) { if(DB_SUCCESS==ret) return ERRINFO(E_EXIST_SHOWCARDNO,trans.showcardno); else return E_DB_CARD_R; } //回收卡 ret=UseShowCardNoBack(trans.opercode,cardinsteaddtl.showcardno); if(ret) { return ret; } T_t_carddtl carddtl; memset(&carddtl,0,sizeof(carddtl)); des2src(carddtl.accdate,pAccTrans->trans.accdate); des2src(carddtl.acctime,trans.acctime); carddtl.termid=trans.termid; carddtl.termseqno=trans.termseqno; des2src(carddtl.opercode,trans.opercode); carddtl.cardtype=trans.cardtype; carddtl.usetype=CARDUSETYPE_REUSE; carddtl.inoutflag=INOUTFLAG_IN; carddtl.transcnt=1; strcpy(carddtl.summary,"换卡撤销(新卡回收)"); des2src(carddtl.cardphyid,cardinsteaddtl.cardphyid); des2src(carddtl.showcardno,cardinsteaddtl.showcardno); ret=DB_t_carddtl_add(&carddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } //使用原卡 int cardtype=0; ret=UseShowCardNo(trans.opercode,cardinsteaddtl.oldshowcardno,cardtype); if(ret) { return ret; } memset(&carddtl,0,sizeof(carddtl)); des2src(carddtl.accdate,pAccTrans->trans.accdate); des2src(carddtl.acctime,trans.acctime); carddtl.termid=trans.termid; carddtl.termseqno=trans.termseqno; des2src(carddtl.opercode,trans.opercode); carddtl.cardtype=cardinsteaddtl.oldcardtype; carddtl.usetype=CARDUSETYPE_USE; carddtl.inoutflag=INOUTFLAG_OUT; carddtl.transcnt=1; strcpy(carddtl.summary,"换卡撤销(重发原卡)"); des2src(carddtl.cardphyid,cardinsteaddtl.oldcardphyid); des2src(carddtl.showcardno,cardinsteaddtl.oldshowcardno); ret=DB_t_carddtl_add(&carddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } } //更新卡信息 memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(trans.cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return E_CARD_LOGOUT; } tCard.cardtype=cardinsteaddtl.oldcardtype; des2src(tCard.cardphyid,cardinsteaddtl.oldcardphyid); des2src(tCard.showcardno,cardinsteaddtl.oldshowcardno); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_U; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.cardcnt=cardinsteaddtl.oldcardcnt; transdtl.cardbefbal=cardinsteaddtl.oldcardbal; transdtl.cardaftbal=transdtl.cardbefbal; transdtl.managefee=trans.totalfeeamt; transdtl.amount=trans.totaltransamt; transdtl.custid=tCard.custid; des2src(transdtl.custname,customer.custname); des2src(transdtl.stuempno,customer.stuempno); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl.showcardno,cardinsteaddtl.oldshowcardno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } outPack->lvol1=tCard.custid; outPack->lsafe_level2=customer.custtype; outPack->lvol5=trans.feetype; des2src(outPack->sall_name,customer.custname); des2src(outPack->spager,customer.stuempno); des2src(outPack->scert_no,customer.deptcode); des2src(outPack->semail2,customer.idno); des2src(outPack->smarket_code,customer.sex); des2src(outPack->sdate0,tCard.expiredate); des2src(outPack->smarket_code2,customer.idtype); sprintf(outPack->sholder_ac_no,"%d",10); //发行方标识 des2src(outPack->sname2,tCard.cardverno); outPack->lsafe_level=tCard.cardtype; outPack->lvol0=tCard.cardno; outPack->lvol4=cardinsteaddtl.oldsubsidyno; outPack->lvol8=(int)(cardinsteaddtl.oldcardbal*100); outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); outPack->lvol6=cardinsteaddtl.oldcardcnt; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,trans.opercode); des2src(outPack->stx_pwd,cardpwd); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F847183(TRUSERID *handle, int iRequest, ST_PACK *rPack, int *pRetCode, char *szMsg) { int ret = 0; char tx_date[8+1] = ""; //发生日期 // char tx_time[6+1]=""; //发生时间 int cardno = 0; //卡号 char deviceid[8+1] = ""; //终端机ID int serial_no = 0; //终端机流水号 int flag = 0; double iSeqNo = 0; T_t_tif_tradeserial tOldTradeserial; //当日流水表 T_t_tif_tradeserial tTradeserial; //当日流水表 T_t_tif_tradeserial_his tTradeserialhis; //历史流水表 T_t_tradecode tTradeCode; T_t_card tCard; char sysdate[11] = ""; char systime[9] = ""; char sYear[5] = ""; char sMonDay[5] = ""; char logic_date[9] = ""; int days = 0; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ST_PACK next_pack; ResetNormalCPack(&aPack, 0, 1); memset(&tTradeserial, 0, sizeof(tTradeserial)); memset(&tOldTradeserial, 0, sizeof(tOldTradeserial)); memset(&tTradeserialhis, 0, sizeof(tTradeserialhis)); memset(&tTradeCode, 0, sizeof tTradeCode); memset(&tCard, 0, sizeof tCard); getsysdate(sysdate); getsystime(systime); des2src(tTradeserial.enteract_time, systime); des2src(tx_date, rPack->sbank_pwd); // des2src(tx_time,rPack->sbank_code); cardno = rPack->lvol0; des2src(deviceid, rPack->sbank_pwd2); serial_no = rPack->lvol1; trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); des2src(sYear, tx_date); des2src(sMonDay, tx_date + 4); if (strlen(rPack->scust_limit) == 0) { *pRetCode = E_OPER_NOT_EXIST; goto L_RETU; } if (strlen(rPack->scust_limit2) == 0) { *pRetCode = E_INPUT_AUTH_OPER_NULL; goto L_RETU; } if (strcmp(rPack->scust_limit, rPack->scust_limit2) == 0) { writelog(LOG_ERR, "oper[%s]auth_oper[%s]", rPack->scust_limit, rPack->scust_limit2); *pRetCode = E_OPER_AND_AUTH_OPER_EQ; goto L_RETU; } ret = chk_oper_pwd(rPack->scust_limit2, rPack->semp_pwd); if (ret) { if (E_OPER_NOT_EXIST == ret) *pRetCode = E_AUTH_OPER_NOT_EXIST; else if (E_PASSWORD_WRONG == ret) *pRetCode = E_AUTH_OPER_PWD; else *pRetCode = ret; goto L_RETU; } ret = DB_t_card_read_by_cardno(cardno, &tCard); if (ret) { if (DB_NOTFOUND == ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } if (tCard.cardattr[CARDSTAT_TYPE_REG] == '2') { writelog(LOG_ERR, "冲正交易卡号已注销cardid[%d]", tCard.cardno); *pRetCode = E_ACTNO_LOGOUT; goto L_RETU; } //查询当前流水表 ret = DB_t_tif_tradeserial_read_lock_by_c4_and_operate_date_and_serial_no_and_cardno(tx_date, serial_no, cardno, &tOldTradeserial); if (ret) { writelog(LOG_ERR, "tx_date[%s]serial_no[%d]ret[%d]", tx_date, serial_no, ret); if (DB_NOTFOUND != ret) { *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } } else { flag = 1; memcpy(&tTradeserial, &tOldTradeserial, sizeof(tTradeserial)); tTradeserial.other_seri_no = tOldTradeserial.serial_no; //上传端流水号 tOldTradeserial.serial_state = SERISTAT_RUSH; //冲正 ret = DB_t_tif_tradeserial_update_lock_by_c4(&tOldTradeserial); if (ret) { *pRetCode = E_DB_TRADESERIAL_U; writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c4[%d]", ret); goto L_RETU; } DB_t_tif_tradeserial_free_lock_c4(); } if (!flag) { //查询历史流水表 ret = DB_t_tif_tradeserial_his_read_lock_by_c0_and_trans_year_and_trans_mon_day_and_serial_no_and_cardno(sYear, sMonDay, serial_no, cardno, &tTradeserialhis); if (ret) { writelog(LOG_ERR, "year[%s]date[%d]serialno[%d]ret[%d]", sYear, sMonDay, serial_no, ret); if (DB_NOTFOUND == ret) { *pRetCode = E_SERIALNO_NOT_EXIST; goto L_RETU; } else { *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } } tTradeserial.other_seri_no = tTradeserialhis.serial_no; //上传端流水号 tTradeserial.serial_state = tTradeserialhis.serial_state; //流水状态 tTradeserial.tmark = tTradeserialhis.tmark; //999交易标记 tTradeserial.maindeviceid = tTradeserialhis.maindeviceid; //上传工作站标识(前置机注册号) tTradeserial.sys_id = tTradeserialhis.sys_id; tTradeserial.comu_ver = tTradeserialhis.comu_ver; //通信版本号 // add by 汤成 2007-10-31 tTradeserial.deviceid = tTradeserialhis.deviceid; des2src(tTradeserial.devphyid, tTradeserialhis.devphyid); //物理设备ID des2src(tTradeserial.dev_auth, tTradeserialhis.dev_auth); //终端设备授权号 des2src(tTradeserial.crc, tTradeserialhis.crc); //CRC校验 tTradeserial.cardno = tTradeserialhis.cardno; //交易卡号 tTradeserial.purseno = tTradeserialhis.purseno; //消费钱包号 tTradeserial.in_balance = tTradeserialhis.in_balance; //入卡金额 tTradeserial.out_balance = tTradeserialhis.out_balance; //出卡金额 tTradeserial.trade_fee = tTradeserialhis.trade_fee; //本次消费金额 tTradeserial.trade_count = tTradeserialhis.trade_count; //当前卡中帐户消费次数(累计使用次数) tTradeserial.serial_type = tTradeserialhis.serial_type; //交易代码 tTradeserial.managefee = tTradeserialhis.managefee ; //搭伙费 des2src(tTradeserial.operate_date, tTradeserialhis.operate_date); //发生日期(格式化输入的日期) des2src(tTradeserial.operate_time, tTradeserialhis.operate_time); //发生时间(格式化输入的时间) tTradeserial.condition_id = tTradeserialhis.condition_id; // 收费科目 tTradeserialhis.serial_state = SERISTAT_RUSH; //冲正 // 保存被冲正交易的操作员号 des2src(tTradeserialhis.opercode, tTradeserialhis.opercode); ret = DB_t_tif_tradeserial_his_update_lock_by_c0(&tTradeserialhis); if (ret) { *pRetCode = E_DB_TRADESERIAL_U; writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c4[%d]", ret); goto L_RETU; } DB_t_tif_tradeserial_his_free_lock_by_c0(); } if (tTradeserial.cardno != cardno) { writelog(LOG_ERR, "流水中卡号不符cardid[%d]serial[%d]", cardno, tTradeserial.cardno); *pRetCode = E_SERIALNO_NOT_EXIST; goto L_RETU; } if (tTradeserial.serial_state == SERISTAT_RUSH) { *pRetCode = E_TX_SERIAL_CZ; goto L_RETU; } if (tTradeserial.serial_state != SERISTAT_DEBT) { *pRetCode = E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } if (amtcmp(tTradeserial.trade_fee, 0) == 0) { *pRetCode = E_TX_SERIAL_CANNOT_CZ; strcpy(szMsg,"交易金额有误!"); goto L_RETU; } ret = DB_t_tradecode_read_by_tradecode(tTradeserial.serial_type, &tTradeCode); if (ret) { if (DB_NOTFOUND == ret) *pRetCode = E_DB_TRADECODE_N; else *pRetCode = E_DB_TRADECODE_R; goto L_RETU; } if (tTradeCode.rush_flag != IS_YES) { *pRetCode = E_TX_SERIAL_CANNOT_CZ; strcpy(szMsg,"该交易不能被冲正"); goto L_RETU; } ret = GetLogicDate(logic_date); //业务日期 if (ret) { *pRetCode = ret; writelog(LOG_ERR, "GetLogicDate err ret[%d]", ret); goto L_RETU; } // 小于 0 , 则不判断 if (tTradeCode.rush_max_day >= 0) { ret = DiffDay(logic_date, tTradeserial.enteract_date, &days); if (ret) { *pRetCode = ret; goto L_RETU; } if (days > tTradeCode.rush_max_day) { writelog(LOG_ERR, "流水入账日期[%s],已超过期限[%d]天", tTradeserial.enteract_date, days); *pRetCode = E_TX_SERIAL_CANNOT_CZ; strcpy(szMsg, "流水日期已超过可冲正期限!"); goto L_RETU; } } if (tTradeCode.restrict_oper == IS_YES) { if (strcmp(rPack->scust_limit, tTradeserial.opercode) != 0) { strcpy(szMsg, "必须由作此次交易的操作员来冲正"); *pRetCode = E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } } // 保存上传的操作员号 des2src(tTradeserial.operate_date, sysdate); des2src(tTradeserial.operate_time, systime); des2src(tTradeserial.collect_date, sysdate); des2src(tTradeserial.collect_time, systime); des2src(tTradeserial.enteract_date, logic_date); //业务日期 des2src(tTradeserial.enteract_time, systime); tTradeserial.in_balance = rPack->damt1; tTradeserial.trade_fee = -1 * tTradeserial.trade_fee; //本次消费金额 tTradeserial.managefee = -1 * tTradeserial.managefee; //本次消费管理费 tTradeserial.out_balance = tTradeserial.in_balance - tTradeserial.trade_fee; if (rPack->lvol10 > 0) tTradeserial.trade_count = rPack->lvol10 + 1; tTradeserial.maindeviceid = rPack->lvol6; // 上传的操作员号 des2src(tTradeserial.opercode, rPack->scust_limit); tTradeserial.reviseserial_no = tTradeserial.other_seri_no; //取流水号,从帐处理 ret = getNewUniqNo(KEYTYPE_TRADESERIAL, &iSeqNo); if (ret) { *pRetCode = ret; writelog(LOG_ERR, "getNewUniqNo err[%d]", ret); goto L_RETU; } tTradeserial.serial_no = iSeqNo; //###################################################### //入账处理 switch (tTradeserial.serial_type) { case 930031: // 交易冲正 if (amtcmp(tTradeserial.trade_fee, 0) == 0) break; tTradeserial.serial_type = TXCODE_TX_REVEAL; ret = process930031(&tTradeserial); if (ret) { //业务处理失败处理 *pRetCode = ret; goto L_RETU; } break; case 930034: // 充值冲正 if (amtcmp(tTradeserial.trade_fee, 0) == 0) break; tTradeserial.serial_type = TXCODE_TX_REVEAL; ret = process930034(&tTradeserial); if (ret) { //业务处理失败处理 *pRetCode = ret; goto L_RETU; } break; case 930036: // 搭伙费冲正 if (amtcmp(tTradeserial.trade_fee, 0) == 0) break; tTradeserial.serial_type = TXCODE_TX_REVEAL; ret = process930036(&tTradeserial); if (ret) { //业务处理失败处理 *pRetCode = ret; goto L_RETU; } break; case 847106: // 现金充值冲正 memset(&next_pack,0,sizeof next_pack); tTradeserial.serial_type = TXCODE_SAVING_CASH; ret = do_flush_847106(&tTradeserial,&tCard); if(ret) { *pRetCode = ret; goto L_RETU; } break; default: *pRetCode = E_TXCODE_NOT_EXIST; //交易码错误 goto L_RETU; } //###################################################### //添加交易流水 tTradeserial.serial_state = SERISTAT_DEBT; ret = DB_t_tif_tradeserial_add(&tTradeserial); if (ret) { writelog(LOG_ERR, "DB_t_tif_tradeserial_add ret[%d]", ret); if (DB_REPEAT == ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if (amtcmp(tTradeserial.out_balance, 0) < 0) { *pRetCode = E_ENTER_ACCOUNT; goto L_RETU; } SetCol(handle, 0); SetCol(handle, F_LSERIAL1, F_DAMT2, F_DAMT3, F_VSMESS, 0); out_pack->lserial1 = tTradeserial.serial_no; out_pack->damt2 = tTradeserial.out_balance; out_pack->damt3 = -tTradeserial.trade_fee; sprintf(out_pack->vsmess, "流水号:%d 冲正金额:%.2lf元 冲正前卡余额:%.2lf元 卡当前余额:%.2lf元", tTradeserial.serial_no, -tTradeserial.trade_fee, tTradeserial.in_balance, tTradeserial.out_balance); writelog(LOG_DEBUG, out_pack->vsmess); PutRow(handle, out_pack, pRetCode, szMsg); return 0; L_RETU: return -1; }
int F250001(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char host[16]=""; //对方机器的ip short port=0; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); //char senddata[327]=""; //char rcvdata[327]=""; CTcpSocket tcpsocket ; ext_phone_trans_t PhoneTrans; //memset(senddata,0x20,sizeof senddata); //memset(rcvdata,0x20,sizeof rcvdata); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_SSECTYPES,0); des2src(host,rPack->scust_auth); port=rPack->lvol0; memset(&PhoneTrans,0,sizeof(PhoneTrans)); memcpy(&PhoneTrans, rPack->ssectypes,127); memset(PhoneTrans.plugdata,0x20,sizeof(PhoneTrans.plugdata)); memcpy(PhoneTrans.signcheck,gSignCheck,strlen(gSignCheck)); //writelog(LOG_ERR,"package_send=[%s] ",rPack->ssectypes); writelog(LOG_INFO,"Connect to boss system ip_addr[%s],port[%d] ",host,port); ret = tcpsocket.ConnectTcp(host, port); if(!ret) { writelog(LOG_ERR,"Connect to boss system error,error code is [%d],ip_addr[%s],port[%d] ",ret,host,port); *pRetCode=E_MOBILE_TRANS_CONNECT; goto l_ret; } printf("send:[%s]\n",(char*)&PhoneTrans); ret = tcpsocket.Send((char*)&PhoneTrans,sizeof(PhoneTrans)); if (ret<0) { // 发送时,端口有问题,包括被关闭 writelog(LOG_ERR,"Send to boss system error,error code is [%d] ",ret); *pRetCode=E_MOBILE_TRANS_REQUEST; goto l_ret; } else if(0==ret){ // 不应该出现这种情况 writelog(LOG_ERR,"Send to boss system error,CTcpSocket.Send should not return this error,error code is[%d]!\n",ret); *pRetCode=E_MOBILE_TRANS_REQUEST; goto l_ret; } memset(&PhoneTrans,0,sizeof(PhoneTrans)); if(rPack->lvol1==1) { ret = tcpsocket.Recv((char*)&PhoneTrans, sizeof(PhoneTrans), 15000); tcpsocket.Close(); if (ret!=327) { writelog(LOG_ERR,"Receive from boss system error,error code is [%d] ",ret); *pRetCode=E_MOBILE_TRANS_TIME_OUT; goto l_ret; // 接收时候出错,或超时 } printf("trans recv:[%s]\n",(char*)&PhoneTrans); // memcpy(out_pack->ssectypes,&PhoneTrans,127); if(strncmp(PhoneTrans.retnum,"00",2)!=0) { if(strncmp(PhoneTrans.retnum,"01",2)==0) { writelog(LOG_ERR,"trans error,mac error,ret[%s] ",PhoneTrans.retnum); *pRetCode=E_MOBILE_CHECK_MAC; goto l_ret; } if(strncmp(PhoneTrans.retnum,"02",2)==0) { writelog(LOG_ERR,"trans falied ret[%s] ",PhoneTrans.retnum); *pRetCode=E_MOBILE_TRANS_FAILURE; goto l_ret; } } else { writelog(LOG_INFO,"trans success ret[%s] ","00"); } }else{ ret=tcpsocket.Recv((char*)&PhoneTrans, sizeof(PhoneTrans), 15000); tcpsocket.Close(); if (ret!=327) { writelog(LOG_ERR,"Receive from boss system error,error code is [%d] ",ret); *pRetCode=E_MOBILE_TRANS_TIME_OUT; goto l_ret; // 接收时候出错,或超时 } printf("query recv:[%s]\n",(char*)&PhoneTrans); // memcpy(out_pack->ssectypes,&PhoneTrans,127); if(strncmp(PhoneTrans.retnum,"00",2)!=0) { if(strncmp(PhoneTrans.retnum,"01",2)==0) { writelog(LOG_ERR,"query error,mac error,ret[%s] ",PhoneTrans.retnum); *pRetCode=E_MOBILE_CHECK_MAC; goto l_ret; } if(strncmp(PhoneTrans.retnum,"02",2)==0) { writelog(LOG_ERR,"query falied ret[%s] ",PhoneTrans.retnum); *pRetCode=E_MOBILE_CHECK_FAIL; goto l_ret; } } else { writelog(LOG_INFO,"query success ret[%s] ","00"); } } //writelog(LOG_ERR,"package_recv=[%s] ",out_pack->ssectypes); PutRow(handle,out_pack,pRetCode,szMsg); return 0; l_ret: return -1; }
static int SaveOldCardInfo(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; 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; } if(tCard.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==tCard.badflag[0]) { return ERRINFO(E_CARD_BADRECORD,trans.cardno); } //比较卡物理ID是否相同 if(strcmp(tCard.cardphyid,trans.cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,trans.cardphyid); return E_CARD_PHYNO_DIFFER; } T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(tCard.accno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } int existflag=0; ret=IsExistUnGetSubsidy(tCard.cardno,&existflag); if(ret) { return ret; } if(existflag) { ERRTIP("有未领补助,请领取补助后再换卡"); return E_COMMON_ERR; } ret=DB_t_cardinsteaddtl_del_by_cardno(trans.cardno); if(ret) { if(DB_NOTFOUND!=ret) return E_DB_CARDINSTEADDTL_R; } T_t_cardinsteaddtl cardinsteaddtl; memset(&cardinsteaddtl,0,sizeof(cardinsteaddtl)); des2src(cardinsteaddtl.accdate,pAccTrans->trans.accdate); cardinsteaddtl.termid = trans.termid; cardinsteaddtl.termseqno = trans.termseqno; cardinsteaddtl.cardno = trans.cardno; cardinsteaddtl.oldcardtype=tCard.cardtype; des2src(cardinsteaddtl.oldcardphyid,trans.cardphyid); des2src(cardinsteaddtl.oldshowcardno,tCard.showcardno); cardinsteaddtl.oldcardcnt = trans.paycnt; cardinsteaddtl.oldcardbal = trans.cardbefbal; cardinsteaddtl.oldsubsidyno=trans.cardsubsidyno; cardinsteaddtl.revflag[0]='0'; cardinsteaddtl.status[0]=STATUS_NORMAL; ret=DB_t_cardinsteaddtl_add(&cardinsteaddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDINSTEADDTL_E; else return E_DB_CARDINSTEADDTL_I; } T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tCard.cardno; des2src(cardver.accdate,pAccTrans->trans.accdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,cardinsteaddtl.cardphyid); des2src(cardver.stuempno,trans.stuempno); cardver.cardvertype=CARDVERTYPE_CARDINSTEADOLD; ret=getCardVerNo(cardver.cardverno); if(ret) return ret; ret=DB_t_cardver_add(&cardver); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } T_t_newcardchange newcardchange; memset(&newcardchange,0,sizeof(newcardchange)); ret=DB_t_newcardchange_read_lock_by_c1_and_showcardno(trans.showcardno,&newcardchange); if(ret) { writelog(LOG_ERR,"showcardno[%s]",trans.showcardno); if(DB_NOTFOUND==ret) return E_DB_NEWCARDCHANGE_N; else return E_DB_NEWCARDCHANGE_R; } newcardchange.status= NEWCARDSTATUS_INIT; des2src(newcardchange.oldcardphyid,cardinsteaddtl.oldcardphyid); des2src(newcardchange.cardphyid,rPack->scust_no2); des2src(newcardchange.lastsaved,trans.sysdatetime); ret=DB_t_newcardchange_update_lock_by_c1(&newcardchange); if(ret) { return E_DB_NEWCARDCHANGE_U; } //保存水控钱包卡余额 map<int,double> CardBalMap; CardBalMap[rPack->lvol10]=D4U5(rPack->lvol1/100.0); CardBalMap[rPack->lvol11]=D4U5(rPack->lvol2/100.0); CardBalMap[rPack->lvol12]=D4U5(rPack->lvol3/100.0); map<int,double>::iterator itMap; for(itMap=CardBalMap.begin();itMap!=CardBalMap.end();itMap++) { int pursetype=itMap->first; double balance=itMap->second; if(pursetype<1) continue; T_t_cardbalance cardbalance; memset(&cardbalance,0,sizeof(cardbalance)); ret=DB_t_cardbalance_read_lock_by_c0_and_accno_and_pursetype(tCard.accno,pursetype,&cardbalance); if(ret) { if(DB_NOTFOUND!=ret) return E_DB_CARDBALANCE_R; else { memset(&cardbalance,0,sizeof(cardbalance)); des2src(cardbalance.accno,tCardAccount.accno); cardbalance.pursetype=pursetype; cardbalance.cardno=tCard.cardno; cardbalance.balance=balance; cardbalance.cardbal=balance; cardbalance.accumdpsamt=balance; ret=DB_t_cardbalance_add(&cardbalance); if(ret) { return E_DB_CARDBALANCE_I; } } } else { cardbalance.cardno=tCard.cardno; cardbalance.cardbal=balance; ret=DB_t_cardbalance_update_lock_by_c0(&cardbalance); if(ret) { return E_DB_CARDBALANCE_U; } } writelog(LOG_INFO,"pursertype[%d]cardbalance[%.2lf]",pursetype,cardbalance.cardbal); } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_SDATE3,F_STIME3,0); des2src(outPack->semp,trans.opercode); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F847104(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret =0; int len = 0; int i=0; int hi_cutid=0; char h_showcardid[11] = ""; //显示卡号 char h_password[7] = ""; //卡密码 double h_temp_Card_id = 0; //卡号 double dSerialNo=0; char seed_key[17] = ""; //种子密钥 char card_endtime[8 + 1] = ""; //卡的有效截至日期 char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; char sEndDate[9]=""; char sMsg[256]=""; char sMaxCardBalance[20]=""; char lost_date[11]=""; double dMaxCardBalance=0; int lost_card_id=0; T_t_pif_card tCard; T_t_pif_card tOldCard; T_t_cif_customer tCustomer; T_t_pif_spefee tSpeFee; // T_t_pif_cardlossinfo tCardLossInfo; T_t_tif_tradeserial tradeserial; T_t_aif_account tAccount; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL5, F_SCUST_NO, F_SCUST_NO2,F_SCUST_AUTH,F_SCUST_AUTH2, F_SDATE0,F_SNAME,F_SNAME2, F_SOPEN_EMP,F_SSTATUS0, F_DAMT2,F_LSERIAL1,F_VSMESS,0); memset(&tCard,0,sizeof(tCard)); memset(&tOldCard,0,sizeof(tOldCard)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSpeFee,0,sizeof(tSpeFee)); // memset(&tCardLossInfo,0,sizeof(tCardLossInfo)); memset(&tAccount,0,sizeof(tAccount)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&IA,0,sizeof(IA)); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } //检查客户信息,判断是否可以发行卡 hi_cutid=rPack->lvol0; //客户号 des2src(tCard.physical_no, rPack->sbank_acc); //物理卡号 trim(h_showcardid); ret=IsExistFreezeCardByCustomId(hi_cutid); if(ret) { *pRetCode = ret; goto L_RETU; } ret=IsExistNoLostCardByCustomId(hi_cutid); if(ret) { *pRetCode = ret; goto L_RETU; } if(strlen(h_showcardid)) { ret=IsExistShowCardNo(h_showcardid); if(ret) { *pRetCode = ret; goto L_RETU; } } ret=IsExistCardByPhyCardNo(tCard.physical_no); if(ret) { *pRetCode = ret; goto L_RETU; } ret=GetLostCardIdByCustomId_TypeId(hi_cutid,CT_NORMAL,&lost_card_id); if(ret) { writelog(LOG_ERR,"customer[%d]tCard type_id[%d]",hi_cutid,CT_NORMAL); *pRetCode = ret; goto L_RETU; } /* ret=DB_t_pif_cardlossinfo_read_by_card_id_and_state_id(lost_card_id, STATE_VALID, &tCardLossInfo); if(ret) { writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } */ ret=get_latest_lost_date_by_card_no(lost_card_id,lost_date); if(ret) { writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id); *pRetCode =ret; goto L_RETU; } //先检查客户的挂失的正式卡是否到了补办日期 ret=GetLostCardValiddate(lost_date,sEndDate); if(ret) { *pRetCode =ret; goto L_RETU; } if(strncmp(sEndDate,sysdate,8)>0) { writelog(LOG_ERR,"lost_normal_card_id[%d]lost_date[%s]end_date[%s]",lost_card_id,lost_date,sEndDate); *pRetCode = E_NORMALCARD_NOT_REACH_ENDDATE; goto L_RETU; } /* //更新卡挂失日期表中该卡状态为无效 ret=UpdateCardLossInfoState(lost_card_id,STATE_VALID,STATE_INVALID); if(ret) { *pRetCode = ret; goto L_RETU; } */ //注销原卡 ret=DB_t_pif_card_read_lock_by_cur_and_card_id(lost_card_id,&tOldCard); if(ret) { writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } des2src(tOldCard.state_id,CARDSTAT_LOGOUT); //注销 des2src(tOldCard.end_time,sysdate); //注销日期 ret=DB_t_pif_card_update_lock_by_cur(&tOldCard); if(ret) { writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } DB_t_pif_card_free_lock_by_cur(); ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(hi_cutid, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",hi_cutid); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(tCustomer.fee_type<1) { ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.fee_type=tCustomer.cut_type; } else { DB_t_cif_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } } DB_t_cif_customer_free_lock_cur(); tradeserial.trade_fee =D4U5(rPack->damt0,2); // 准备数据插入卡信息表 memcpy(seed_key,STATIC_SEED_KEY,16); //读种子密钥 if(strlen(tCustomer.can_time)==8) { ret=IsInvalidDateTime(tCustomer.can_time,"YYYYMMDD"); if(ret) { *pRetCode=E_TB_CUSTOMER_ENDTIME; goto L_RETU; } if(strncmp(tCustomer.can_time,sysdate,8)<=0) { *pRetCode=E_TB_CUSTOMER_ENDTIME; goto L_RETU; } des2src(card_endtime,tCustomer.can_time); } else if(strlen(rPack->sdate0)==0) { *pRetCode=E_TB_CUSTOMER_NO_ENDTIME; goto L_RETU; } else { ret=IsInvalidDateTime(rPack->sdate0,"YYYYMMDD"); if(ret) { *pRetCode = E_INPUT_DATE; goto L_RETU; } if(strncmp(rPack->sdate0,sysdate,8)<=0) { *pRetCode=E_INPUT_DATE; goto L_RETU; } des2src(card_endtime,rPack->sdate0); } tradeserial.trade_fee = rPack->damt0; //金额 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.purse_id = PURSE_NO_ONE; //钱包号 tradeserial.customer_id = tCustomer.cut_id; //客户标识 tradeserial.sys_id = 0; //外部系统标识 des2src(tradeserial.oper_code, rPack->scust_limit); //操作员号 len=strlen(tCustomer.man_id) ; if (len >= 6) { strncpy(h_password,&(tCustomer.man_id[len-6]),6); if(h_password[5]>'9'||h_password[5]<'0') h_password[5]='0'; } else { strcpy(h_password,DEFAULT_CUST_PWD); } ret = getNewUniqNo(KEYTYPE_CARD_ID,&h_temp_Card_id); //获取最大卡号 if(ret) { *pRetCode = ret; goto L_RETU; } tCard.card_id = (int)h_temp_Card_id; //卡号 des2src(tCard.showid,h_showcardid); //显示卡号 des2src(tCard.is_main,TYPE_YES); //是否为主卡 des2src(tCard.state_id,CARDSTAT_REG); //卡状态 tCard.type_id = CT_NORMAL; //卡类别 EncodePwd(seed_key,h_password,tCard.password,0); //卡密码 tCard.cosumer_id = hi_cutid; //客户标识 tCard.account_count = ACCOUNT_COUNT_ONE; //卡对应帐户个数 des2src(tCard.begin_time,sysdate); //注册时间 des2src(tCard.end_time, card_endtime); //截至时间 tCard.phytype = PHYTYPE_NO_ONE; //设备物理型号;默认为1 // 插入卡信息 ret = DB_t_pif_card_add(&tCard); if (ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_CARD_E; else *pRetCode = E_DB_CARD_I; goto L_RETU; } //修改帐户表中对应的卡号,类型,状态 ret=DB_t_aif_account_read_lock_by_c0_and_card_id_and_purse_id(lost_card_id,PURSE_NO_ONE,&tAccount); if (ret) { writelog(LOG_ERR,"normalcard_account_id[%s]",lost_card_id); if(DB_NOTFOUND==ret) *pRetCode = E_ACTNO_NOT_EXIST; else *pRetCode = E_DB_ACCOUNT_R; } if(tAccount.current_state!=1) { *pRetCode=E_ACTNO_LOGOUT; goto L_RETU; } tAccount.card_id=tCard.card_id; tAccount.card_balance=tAccount.cur_freebala; //更新卡余额与库余额一致 tAccount.consume_count=0; ret=DB_t_aif_account_update_lock_by_c0(&tAccount); if (ret) { writelog(LOG_ERR,"DB_t_aif_account_update_lock_by_cur4 ret[%d]account_id[%s]",ret,tAccount.account_id); if(DB_NOTFOUND==ret) *pRetCode = E_ACTNO_EXIST; else *pRetCode = E_DB_ACCOUNT_U; } DB_t_aif_account_free_lock_c0(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo); //获得最大流水号 if(ret) { *pRetCode=ret; goto L_RETU; } tradeserial.serial_no=(int)dSerialNo; tradeserial.serial_type=TXCODE_CHANGE_CARD; tradeserial.card_id=tCard.card_id; //新卡号 des2src(tradeserial.showid,tCard.showid); //显示卡号 strcpy(IA.sArrInActno[0],tAccount.account_id); //账号 IA.dArrInAmt[0]=tradeserial.trade_fee; //交易金额 IA.iUseCardFlag=USE_CARD_TYPE_ONLINE; //联机交易 IA.dInCardBala=tAccount.cur_freebala; //入卡值 IA.iTxCnt=1; IA.iCardNo=tCard.card_id; IA.iFeeType=tCustomer.fee_type; IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[1]=rPack->lvol1; IA.iArrInFeeSwitch[2]=rPack->lvol2; IA.iArrInFeeSwitch[3]=rPack->lvol3; IA.iArrInFeeSwitch[4]=rPack->lvol4; IA.iArrInFeeSwitch[5]=rPack->lvol5; IA.iArrInFeeSwitch[6]=rPack->lvol6; IA.iArrInFeeSwitch[7]=rPack->lvol7; IA.iArrInFeeSwitch[8]=rPack->lvol8; IA.iArrInFeeSwitch[9]=rPack->lvol9; IA.iArrInFeeSwitch[10]=rPack->lvol10; ret=process(&IA,&tradeserial); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode=ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tradeserial.deposit_fee=IA.dArrOutAmt[i]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: tradeserial.boardfee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: tradeserial.in_fee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CARDCOST: tradeserial.cost_fee=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } sprintf(sMsg,"卡当前余额:%.2lf元",tradeserial.out_balance); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } //检查金额是否超过最大额度 ret=GetParameter(GLOBE_MAXCARDBALANCE,sMaxCardBalance); if(ret) { *pRetCode=ret; goto L_RETU; } dMaxCardBalance=atof(sMaxCardBalance); if(amtcmp(tradeserial.out_balance,dMaxCardBalance)>0) { writelog(LOG_ERR,"tradeserial.out_balance[%lf]",tradeserial.out_balance); *pRetCode=E_AMT_EXCEED_MAX; goto L_RETU; } // 增加发行新卡时的门禁名单表检查 ret = CheckNewCardHook(&tCustomer, tCard.card_id); if(ret) { *pRetCode = ret; goto L_RETU; } //返回卡号\密码\显示卡号\客户类型\图书证号\有效截至日期 out_pack->lvol0 = (int)h_temp_Card_id; //交易卡号 out_pack->lvol1 = tCustomer.cut_type; //客户类别 out_pack->lvol5 = tCustomer.fee_type; //收费类别 des2src(out_pack->scust_no,h_showcardid); //显示卡号 des2src(out_pack->scust_no2,tCustomer.classdept_no); //部门号 des2src(out_pack->scust_auth,tCustomer.stuemp_no); //学号 des2src(out_pack->scust_auth2,tCustomer.man_id); //身份证号 des2src(out_pack->sname,tCustomer.cut_name); //客户姓名 des2src(out_pack->sname2,tCustomer.lib_cardid); //图书证号 des2src(out_pack->sstatus0,tCustomer.sex); //性别 des2src(out_pack->sopen_emp,h_password); //卡密码 des2src(out_pack->sdate0,card_endtime); //有效截至日期 out_pack->damt2=tradeserial.out_balance; //出卡值 out_pack->lserial1=tradeserial.serial_no; //流水号 // add by 汤成 2005-8-8 // 增加向名单表写入记录 ret = InsertToBlkList((int)h_temp_Card_id,CHCARD_BLACKLIST); if(ret) { *pRetCode = ret; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
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; }
int F930203(TRUSERID *handle, int iRequest, ST_PACK *in_pack, int *pRetCode, char *szMsg) { T_t_doordtl tDoordtl; T_t_card tCard; T_t_device device; T_t_dooreventdtl event; T_t_customer tCust; int ret; char weigand_no[12+1] = ""; memset(&device, 0, sizeof device); writelog(LOG_INFO, "接收前置数据:device=[%d],parent_id=[%d],dev_no=[%d],cardno=[%d],phycarid=[%s],ret=[%d]",in_pack->lvol5, in_pack->lvol2, in_pack->lvol1,in_pack->lvol0,in_pack->sdate1,ret); // 查询设备ID号 if (in_pack->lvol5 > 0) { ret = DB_t_device_read_by_deviceid(in_pack->lvol5, &device); } else { // 先判断是不是有父设备ID if (in_pack->lvol2 > 0) ret = get_door_dev_by_parent_and_termid(&device, in_pack->lvol2 , in_pack->lvol1); // 通过机号查询 else { // 判断父设备机号 if (in_pack->lvol3 > 0) ret = find_device_by_parent_termid(&device, in_pack->lvol3, in_pack->lvol1 , in_pack->lserial0); // 通过父设备机号与设备机号查询 else { // 通过子系统号与设备机号查询 ret = find_device_by_devinfo(&device, in_pack->lcert_code, in_pack->lvol1 , in_pack->sbank_code, in_pack->lserial0); } } } if (ret) { writelog(LOG_ERR, "获取设备信息失败:deviceid=[%d],parent_id=[%d],dev_no=[%d],ret=[%d]",in_pack->lvol5, in_pack->lvol2, in_pack->lvol1, ret); if (ret == E_DB_DEVICE_N) { writelog(LOG_ERR, "上传记录找不到对应的设备termid[%d]type[%s]parent[%d][%d],sys[%d],phytype[%d]",in_pack->lvol1, in_pack->sbank_code, in_pack->lvol2, in_pack->lvol3, in_pack->lcert_code, in_pack->lserial0); return ret; } else { *pRetCode = ret; goto L_RETU; } } // 没有物理卡号,也没有交易卡号 if ((strlen(in_pack->sdate1) == 0) && in_pack->lvol0 == 0) { //事件 memset(&event, 0, sizeof event); event.deviceid = device.deviceid; event.eventcode = atoi(in_pack->semp_no); des2src(event.eventmsg, in_pack->vsmess); event.sysid= in_pack->lcert_code; des2src(event.transdate, in_pack->sdate0); des2src(event.transtime, in_pack->stime0); getsysdate(event.coldate); getsystime(event.coltime); ret = DB_t_dooreventdtl_add(&event); if (ret) { if (DB_REPEAT == ret) return 0; return E_DB_DOOREVENTDTL_I; } return 0; } else { memset(&tCard, 0, sizeof tCard); if(strlen(in_pack->sdate1) >0) { // 有物理卡号 ret = get_card_by_phyno(&tCard, in_pack->sdate1); if (ret) { if (ret == E_DB_CARD_N) { ConverPhyNo(in_pack->sdate1, weigand_no); ret = get_card_by_weigand_no(&tCard, weigand_no); if (ret) { writelog(LOG_ERR, "Get_card_by_weigand_no err,weigand_no=[%s],ret=[%d]", weigand_no, ret); // 没有这张卡,仍然保留流水 if (ret != E_DB_CARD_N) { *pRetCode = ret; goto L_RETU; } } } else { *pRetCode = ret; goto L_RETU; } } } else { // 根据交易卡号查询 ret = DB_t_card_read_by_cardno(in_pack->lvol0, &tCard); if(ret) { *pRetCode = E_DB_CARD_R; goto L_RETU; } } memset(&tDoordtl, 0, sizeof tDoordtl); tDoordtl.deviceid = device.deviceid; des2src(tDoordtl.devphyid,device.devphyid); writelog(LOG_DEBUG,"deviceid[%d],devphyid[%s]",device.deviceid,device.devphyid); tDoordtl.cardno = tCard.cardno; tDoordtl.sysid = in_pack->lcert_code; tDoordtl.custid = tCard.custid; if (!ret) des2src(tDoordtl.cardphyid, tCard.cardphyid); else des2src(tDoordtl.cardphyid, in_pack->sdate1); if(tDoordtl.custid) { memset(&tCust,0,sizeof tCust); ret = DB_t_customer_read_by_custid(tDoordtl.custid, &tCust); if(ret ) { if(ret != DB_NOTFOUND) return E_DB_CUSTOMER_R; } else { des2src(tDoordtl.stuempno,tCust.stuempno); des2src(tDoordtl.custname,tCust.custname); } } //writelog(LOG_DEBUG,"door serial date[%s] time[%s]",in_pack->sdate0,in_pack->stime0); des2src(tDoordtl.transdate, in_pack->sdate0); des2src(tDoordtl.transtime, in_pack->stime0); getsysdate(tDoordtl.coldate); getsystime(tDoordtl.coltime); tDoordtl.transmark = atoi(in_pack->semp_no); ret = getNewUniqNo(KEYTYPE_DOORDTL,&(tDoordtl.devseqno)); if(ret) { writelog(LOG_ERR,"生成流水号失败"); *pRetCode = ret; goto L_RETU; } // 保存门禁流水 ret = DB_t_doordtl_add(&tDoordtl); if (ret) { // 重复流水忽略 if (DB_REPEAT == ret) { writelog(LOG_DEBUG, "流水重复card[%s],date[%s],time[%s]", in_pack->sdate1,in_pack->sdate0, in_pack->stime0); return 0; } writelog(LOG_ERR, "保存流水失败card[%s],date[%s],time[%s]", in_pack->sdate1,in_pack->sdate0, in_pack->stime0); *pRetCode = E_DB_DOOREVENTDTL_I; goto L_RETU; } switch (device.devusage) { case DU_JSB_CONFRENCE: /* ret = SaveDoorJSBSerial(&tDoordtl); if(ret) { writelog(LOG_ERR,"保存计时宝流水失败,errcode[%d]",ret); break; } ret = UpdateConferSerial(&tDoordtl); */ // break; case DU_JSB_ATTENDANCE: // ret = SaveKQSerial(&tDoordtl); // if (ret) // { // writelog(LOG_ERR, "插入考勤流水表失败,errcode[%d]", ret); // break; // } default: //ret = SaveDoorJSBSerial(&tDoordtl); /* ret = SaveDoorDtl(&tDoordtl); if (ret) { writelog(LOG_ERR, "插入考勤流水表失败,errcode[%d]", ret); break; } */ break; } if (ret) { *pRetCode = ret; goto L_RETU; } } return 0; L_RETU: return -1; }
int F847132(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int i=0; int iTotalCnt=0; double dTotalAmt=0.0; double dSerialNo = 0; char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; char sMsg[256]=""; T_t_tif_tradeserial tradeserial; T_t_tif_savdtl tSavdtl; T_t_tif_subsidy tSubsidy; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tSavdtl,0,sizeof(tSavdtl)); memset(&tSubsidy,0,sizeof(tSubsidy)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&IA,0,sizeof(IA)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSMESS,0); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } if(strlen(rPack->scust_limit)<1) { *pRetCode=E_INPUT_BATCH_NO; goto L_RETU; } if(strlen(rPack->scust_no)<1) { *pRetCode=E_INPUT_OPER_NULL; goto L_RETU; } if(amtcmp(rPack->damt0,0)<=0) { *pRetCode=E_INPUT_AMT; goto L_RETU; } des2src(tSubsidy.summary,rPack->semail); //补助摘要 if(strlen(rPack->semail)<1) { *pRetCode=E_INPUT_SUMMARY; goto L_RETU; } des2src(tSubsidy.batch_no,rPack->scust_limit); tSubsidy.bill_type=rPack->lvol2; //票据类型 des2src(tSubsidy.bill_no,rPack->scust_auth2); //票据号码 tSubsidy.amount=rPack->damt0; //补助金额 des2src(tSubsidy.subsidytype,rPack->smain_flag);//补助标志(0增值1减值) des2src(tSubsidy.subsidytype,"1"); //补助标志(0增值1减值) des2src(tSubsidy.broker_id,rPack->sname); //经办人身份证号 des2src(tSubsidy.broker_name,rPack->semail2); //经办人姓名 IA.dArrInAmt[0]=tradeserial.trade_fee; switch(tSubsidy.bill_type) { case TYPE_CASH: //现金 IA.iArrInFeeSwitch[1]=1; break; case TYPE_BILL: //支票 IA.iArrInFeeSwitch[2]=1; break; case TYPE_FUNDBOOK: //经费本 IA.iArrInFeeSwitch[3]=1; break; default: *pRetCode=E_INPUT_DEPOSIT_TYPE; goto L_RETU; } ret=stat_subsidy_amount_by_batch_no(tSubsidy.batch_no, &iTotalCnt,&dTotalAmt); if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret[%d]",ret); goto L_RETU; } if(iTotalCnt!=rPack->lvol3) { strcpy(szMsg,"补助人数与导入的数据不符"); *pRetCode=E_INPUT_DATA_INVAILD; goto L_RETU; } if(amtcmp(dTotalAmt,rPack->damt0)!=0) { strcpy(szMsg,"补助总金额与导入的补助数据不符"); *pRetCode=E_INPUT_DATA_INVAILD; goto L_RETU; } // writelog(LOG_DEBUG,"subsidy no : %s",tSubsidy.batch_no); des2src(tSubsidy.tx_date,sysdate); des2src(tSubsidy.tx_time,systime); ret=update_subsidy_info_by_batch_no(&tSubsidy); if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret[%d]",ret); goto L_RETU; } ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret[%d]",ret); goto L_RETU; } tradeserial.serial_no = (int)dSerialNo; //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type = TXCODE_SET_SUBSIDY; tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,logicdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.device_id = rPack->lvol7; //采集设备标识 des2src(tradeserial.oper_code , rPack->scust_no); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 // 设置发生金额 tradeserial.trade_fee = dTotalAmt; switch(tSubsidy.bill_type) { case TYPE_CASH: //现金 break; case TYPE_BILL: //支票 case TYPE_FUNDBOOK: //经费本 tSavdtl.amount=rPack->damt0; //发生额 if(amtcmp(tSavdtl.amount,0)<=0) break; des2src(tSavdtl.bill_no,tSubsidy.bill_no); //票据号码 if(strlen(tSavdtl.bill_no)<1) { *pRetCode=E_INPUT_BILLNO; goto L_RETU; } tSavdtl.card_no=0; //卡号 des2src(tSavdtl.oper_no,rPack->scust_limit); //操作员 tSavdtl.seqno=tradeserial.serial_no; //流水号 des2src(tSavdtl.tx_date,sysdate); //发生日期 des2src(tSavdtl.tx_time,systime); //发生时间 tSavdtl.cnt=1; //票据数量 tSavdtl.bill_type=tSubsidy.bill_type; //票据类型 tSavdtl.tx_code=tradeserial.serial_type; //交易码 ret=DB_t_tif_savdtl_add(&tSavdtl); if(ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_SAVDTL_E; else *pRetCode = E_DB_SAVDTL_I; goto L_RETU; } break; default: *pRetCode=E_INPUT_DEPOSIT_TYPE; goto L_RETU; } IA.iFeeType=1; //默认值 IA.dArrInAmt[0]=tradeserial.trade_fee; // writelog(LOG_DEBUG,"补助金额[%lf]",tradeserial.trade_fee); // if(strncmp(tSubsidy.subsidytype,"1",1)==0) // IA.dArrInAmt[0]=tradeserial.trade_fee; // else if(strncmp(tSubsidy.subsidytype,"2",1)==0) // { // IA.dArrInAmt[0]=-tradeserial.trade_fee; // IA.iTxFlag=1; // } // else // { // *pRetCode=E_INPUT_DATA_INVAILD; // sprintf(szMsg,"输入的补助类型%s不存在",strncmp(tSubsidy.subsidytype); // goto L_RETU; // } IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[5]=rPack->lvol5; IA.iArrInFeeSwitch[6]=rPack->lvol6; IA.iArrInFeeSwitch[7]=rPack->lvol7; IA.iArrInFeeSwitch[8]=rPack->lvol8; IA.iArrInFeeSwitch[9]=rPack->lvol9; IA.iArrInFeeSwitch[10]=rPack->lvol10; ret=process(&IA,&tradeserial); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode=ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d ",IA.iSerialNo); // writelog(LOG_DEBUG,"out tx type count %d",IA.iOutTxTypeCnt); for(i=1;i<=IA.iOutTxTypeCnt;i++) { if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } sprintf(sMsg,",共%d笔",iTotalCnt); strcat(out_pack->vsmess,sMsg); // strcat(out_pack->vsmess,sMsg); // writelog(LOG_DEBUG,out_pack->vsmess); ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F950073(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; char packid[30]={0}; char reqid[20]={0}; T_t_device tDevice; T_t_transpack transpack; CAccTrans& ats = CAccTrans::GetInst(); TRANS &trans = ats.trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); memset(&tDevice,0,sizeof tDevice); memset(&transpack,0,sizeof transpack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LCERT_CODE,F_SPHONE3,F_LSERIAL0,F_LWITHDRAW_FLAG,0); GetCpackDataString(rPack,transpack.reqdata); des2src(tDevice.devphyid,rPack->sphone3); ret = addPOSCheckPOS(rPack->lwithdraw_flag,tDevice); if(ret) { outPack->lcert_code = ret; } else { des2src(transpack.transdate,rPack->sdate0); des2src(transpack.transtime,rPack->stime0); transpack.reqsno = rPack->lserial0; sprintf(transpack.packetid,"%s%s%03d",transpack.transdate,transpack.transtime,transpack.reqsno%1000); sprintf(transpack.reqid,"%d",tDevice.deviceid); transpack.funcno = iRequest; transpack.status[0]=TRANSPACKSTATE_NODEAL; des2src(transpack.lastupdtime,trans.sysdatetime); transpack.datalen = strlen(transpack.reqdata); if(rPack->lvol10 == 2) // 中途拔卡,发送交易取消 { transpack.status[0] = TRANSPACKSTATE_WRITEFAILD; transpack.revflag = 0; } else if(rPack->lvol10 == 1)//交易冲正 { transpack.revflag = 1; } else { transpack.errcode = ERRIF_DATA; transpack.status[0] = TRANSPACKSTATE_DENY; } ret = DB_t_transpack_add(&transpack); if(ret) { if(DB_REPEAT == ret) { // des2src(packid,transpack.packetid); des2src(reqid,transpack.reqid); memset(&transpack,0,sizeof transpack); ret = DB_t_transpack_read_lock_by_c0_and_packetid_and_reqid(packid,reqid,&transpack); if(ret) { outPack->lcert_code = ERRIF_SYSTEM; } else { des2src(transpack.lastupdtime,trans.sysdatetime); if(rPack->lvol10 == 2) // 中途拔卡,发送交易取消 { transpack.status[0] = TRANSPACKSTATE_WRITEFAILD; transpack.revflag = 0; } else if(rPack->lvol10 == 1)//交易冲正 { transpack.revflag = 1; transpack.retrycnt++; } else { transpack.errcode = ERRIF_DATA; } ret = DB_t_transpack_update_lock_by_c0(&transpack); if(ret) { outPack->lcert_code = ERRIF_SYSTEM; } else { outPack->lcert_code = 0; } } } else { outPack->lcert_code = ERRIF_SYSTEM; } } else { // 没有对应的充值记录 outPack->lcert_code = 0; } } des2src(outPack->sphone3,tDevice.devphyid); outPack->lwithdraw_flag = tDevice.deviceid; PutRow(handle,outPack,pRetCode,szMsg); return 0; }
//冲正 int ReverseProcess(RevAcc * revacc) { int ret = -1; int rows = 0; char sTxdate[9] = ""; //char *pMessage = (char*) revacc->pVoidPointer; T_t_tif_tradelog tTradelog; T_t_tif_tradelog_his tTradeloghis; memset(&tTradelog,0,sizeof tTradelog); memset(&tTradeloghis,0,sizeof tTradeloghis); GetLogicDate(sTxdate); if(strcmp(revacc->sTxAccDate,sTxdate) == 0) //查当前账务表 { ret = DB_t_tif_tradelog_open_select_by_c2_and_serino_and_seri_type_and_outorin(revacc->iSerialNo, revacc->iTradeNo, DBCR_DEBIT); if(ret) { if(DB_NOTFOUND == ret) return E_FAN_SERIAL_NOT_EXISTS; else return E_DB_TRADELOG_R; } while(1) { memset(&tTradelog,0,sizeof tTradelog); ret = DB_t_tif_tradelog_fetch_select_by_c2(&tTradelog); if(ret) { if(DB_NOTFOUND == ret) { if(rows > 0) break; else return E_FAN_SERIAL_NOT_EXISTS; } else return E_DB_TRADELOG_R; } rows++; ret = do_reverse_balance(&tTradelog,revacc); if(ret) { DB_t_tif_tradelog_close_select_by_c2(); return ret; } } DB_t_tif_tradelog_close_select_by_c2(); } else // 查历史账务表 { ret = DB_t_tif_tradelog_his_open_select_by_c0_and_bak_date_and_serino_and_outorin(revacc->sTxAccDate, revacc->iSerialNo,DBCR_DEBIT ); if(ret) { if(DB_NOTFOUND == ret) return E_FAN_SERIAL_NOT_EXISTS; else return E_DB_TRADELOG_R; } while(1) { memset(&tTradelog,0,sizeof tTradelog); ret = DB_t_tif_tradelog_his_fetch_select_by_c0(&tTradeloghis); if(ret) { if(DB_NOTFOUND == ret) { if(rows > 0) break; else return E_FAN_SERIAL_NOT_EXISTS; } else return E_DB_TRADELOG_R; } rows++; tTradelog.fee_type = tTradeloghis.fee_type; des2src(tTradelog.act_id,tTradeloghis.act_id); des2src(tTradelog.subno,tTradeloghis.subno); des2src(tTradelog.other_actid,tTradeloghis.other_actid); des2src(tTradelog.other_subno,tTradeloghis.other_subno); tTradelog.outorin= tTradeloghis.outorin; tTradelog.op_fee= tTradeloghis.op_fee; tTradelog.new_fee = tTradeloghis.new_fee; tTradelog.cur_frozebala= tTradeloghis.cur_frozebala; tTradelog.annex= tTradeloghis.annex; des2src(tTradelog.comments,tTradeloghis.comments); ret = do_reverse_balance(&tTradelog,revacc); if(ret) { DB_t_tif_tradelog_his_close_select_by_c0(); return ret; } } DB_t_tif_tradelog_his_close_select_by_c0(); } return 0; }
int do_reverse_balance(T_t_tif_tradelog *tTradelog,RevAcc *revacc) { int ret = -1; int idxSub=0; T_t_aif_account tAccountDb; T_t_aif_account tAccountCr; T_t_tif_tradelog tTradelogDb; T_t_tif_tradelog tTradelogCr; T_t_tif_subject tSubject; T_t_tif_cfgsplit tCfgsplit; memset(&tAccountDb,0,sizeof tAccountDb); memset(&tAccountCr,0,sizeof tAccountCr); memset(&tSubject,0,sizeof tSubject); memset(&tCfgsplit,0,sizeof tCfgsplit); memset(&tTradelogDb,0,sizeof tTradelogDb); memset(&tTradelogCr,0,sizeof tTradelogCr); // 处理借方 memcpy(&tTradelogDb,tTradelog,sizeof tTradelogDb); tTradelogDb.seri_type = TXCODE_TX_REVEAL; // 交易代码记录为冲正 ret = DB_t_aif_account_read_lock_by_cur_and_account_id(tTradelog->act_id, &tAccountDb); if(ret) { if(DB_NOTFOUND==ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_R; } if(tAccountDb.current_state == ACCOUNTSTAT_LOGOUT) { DB_t_aif_account_free_lock_cur(); writelog(LOG_ERR, "read account err[%d]act_id[%s]", E_ACTNO_LOGOUT, tAccountDb.account_id); return E_ACTNO_LOGOUT; } ret = DB_t_tif_subject_read_by_subno(tAccountDb.subno, &tSubject); if(ret) { DB_t_aif_account_free_lock_cur(); return ret; } if (SUBTYPE_FUND== tSubject.subtype|| SUBTYPE_COST== tSubject.subtype ) { tAccountDb.cur_bala = D4U5(tAccountDb.cur_bala- tTradelog->op_fee,6); tAccountDb.cur_freebala = D4U5(tAccountDb.cur_freebala- tTradelog->op_fee,6); //db_amt_flag=1; } else { //db_amt_flag=-1; if(strncmp(tAccountDb.subno,"201",3)==0) { //消费时从冻结金额中扣除搭伙费 ret = DB_t_tif_cfgsplit_read_by_txtype(tTradelog->fee_type, &tCfgsplit); if(ret) { DB_t_aif_account_free_lock_cur(); return ret; } switch(tCfgsplit.fundtype) { case FUNDTYPE_BOARD://搭伙费 tAccountDb.cur_bala =D4U5(tAccountDb.cur_bala+ tTradelog->op_fee,6); //总余额 tAccountDb.cur_frozebala = D4U5(tAccountDb.cur_frozebala + tTradelog->op_fee,6); break; default: tAccountDb.cur_bala =D4U5(tAccountDb.cur_bala+ tTradelog->op_fee,6); //总余额 tAccountDb.cur_freebala =D4U5(tAccountDb.cur_freebala+tTradelog->op_fee,6); //可用余额 //更新卡余额 if(USE_CARD_TYPE_ONLINE==revacc->iUseCardFlag) { //联机交易保留交易金额的交易时间 getsysdate(tAccountDb.reserve_1); if(amtcmp(revacc->dInCardBala,0)>=0) { //有入卡值,没有出卡值,计算出卡值,卡余? revacc->dOutCardBala=D4U5(revacc->dInCardBala + tTradelog->op_fee,2); tAccountDb.card_balance=revacc->dOutCardBala; //账户卡余额 if(revacc->iTradeCnt>0) tAccountDb.consume_count=revacc->iTradeCnt; } } else if(USE_CARD_TYPE_NULL==revacc->iUseCardFlag) { if((tAccountDb.consume_count<=revacc->iTradeCnt)||(strncmp(revacc->sTxDate,tAccountDb.reserve_1,8)>0)) { strcpy(tAccountDb.reserve_1,revacc->sTxDate); tAccountDb.card_balance=D4U5(revacc->dInCardBala + tTradelog->op_fee,2); //账户卡余额 } revacc->dOutCardBala=D4U5(revacc->dInCardBala + tTradelog->op_fee,2); } break; } } else { tAccountDb.cur_bala =D4U5(tAccountDb.cur_bala + tTradelog->op_fee,6); tAccountDb.cur_freebala =D4U5(tAccountDb.cur_freebala+ tTradelog->op_fee,6); } } tTradelogDb.new_fee = tAccountDb.cur_bala; //借方帐户总余额 tTradelogDb.cur_frozebala=tAccountDb.cur_frozebala; //冻结金额 ret = DB_t_aif_account_update_lock_by_cur(&tAccountDb); if (ret) { writelog(LOG_ERR, "update account err[%d] account[%s]", ret,tAccountDb.account_id); if (DB_NOTFOUND == ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_U; } DB_t_aif_account_free_lock_cur(); // 处理贷方 ret = DB_t_aif_account_read_lock_by_cur_and_account_id(tTradelog->other_actid, &tAccountCr); if (ret) { writelog(LOG_ERR, "read account err[%d]act_id[%s]", ret, tTradelog->other_actid); if (DB_NOTFOUND == ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_R; } if(tAccountCr.current_state == ACCOUNTSTAT_LOGOUT) { DB_t_aif_account_free_lock_cur(); writelog(LOG_ERR, "read account err[%d]act_id[%s]", E_ACTNO_LOGOUT, tAccountCr.account_id); return E_ACTNO_LOGOUT; } memset(&tSubject,0,sizeof tSubject); ret = DB_t_tif_subject_read_by_subno(tAccountCr.subno, &tSubject); if(ret) { DB_t_aif_account_free_lock_cur(); return ret; } if (SUBTYPE_FUND== tSubject.subtype|| SUBTYPE_COST== tSubject.subtype) { tAccountCr.cur_bala =D4U5(tAccountCr.cur_bala+ tTradelog->op_fee,6); //当前总余额 tAccountCr.cur_freebala =D4U5(tAccountCr.cur_freebala+tTradelog->op_fee,6); //当前可用余额 //cr_amt_flag=-1; } else { //cr_amt_flag=1; //如果帐户类型为个人,则计算搭伙费,主要是充值使用 if(strncmp(tAccountCr.subno,"201",3)==0) { tAccountCr.cur_bala =D4U5(tAccountCr.cur_bala- tTradelog->op_fee,6); //总余额 if(tCfgsplit.txtype ==0) //第一次读取 { ret = DB_t_tif_cfgsplit_read_by_txtype(tTradelog->fee_type, &tCfgsplit); if(ret) { DB_t_aif_account_free_lock_cur(); return ret; } } switch(tCfgsplit.fundtype) { case FUNDTYPE_BOARD: //搭伙费 tAccountCr.cur_frozebala =D4U5(tAccountCr.cur_frozebala- tTradelog->op_fee,6); break; default: tAccountCr.cur_freebala =D4U5(tAccountCr.cur_freebala- tTradelog->op_fee,6); //可用余额 //更新卡余额 if(USE_CARD_TYPE_ONLINE==revacc->iUseCardFlag) { getsysdate(tAccountCr.reserve_1); if(revacc->iTradeCnt>0) tAccountCr.consume_count=revacc->iTradeCnt; //消费次数增加 if(amtcmp(revacc->dInCardBala,0)>=0) { //有入卡值,没有出卡值,计算出卡值,卡余额 revacc->dOutCardBala=D4U5(revacc->dInCardBala -tTradelog->op_fee,2); tAccountCr.card_balance=revacc->dOutCardBala; //账户卡余额 } } else if(USE_CARD_TYPE_NULL==revacc->iUseCardFlag) { if((tAccountCr.consume_count<=revacc->iTradeCnt)||(strncmp(revacc->sTxDate,tAccountCr.reserve_1,8)>0)) { strcpy(tAccountCr.reserve_1,revacc->sTxDate); tAccountCr.card_balance=D4U5(revacc->dInCardBala - tTradelog->op_fee,2); //账户卡余额 } revacc->dOutCardBala=D4U5(revacc->dInCardBala - tTradelog->op_fee,2); } break; } } else { tAccountCr.cur_bala =D4U5(tAccountCr.cur_bala-tTradelog->op_fee,6); //当前总余额 tAccountCr.cur_freebala=D4U5(tAccountCr.cur_freebala-tTradelog->op_fee,6) ; //当前可用余额 } } ret = DB_t_aif_account_update_lock_by_cur(&tAccountCr); if (ret) { writelog(LOG_ERR, "update account err[%d] account[%s]", ret,tAccountCr.account_id); if (DB_NOTFOUND == ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_U; } DB_t_aif_account_free_lock_cur(); des2src(tTradelogDb.operate_date,revacc->sTxDate); des2src(tTradelogDb.operate_time,revacc->sTxTime); des2src(tTradelogDb.collect_date,revacc->sTxDate); des2src(tTradelogDb.collect_time,revacc->sTxTime); des2src(tTradelogDb.enteract_date,revacc->sTxDate); des2src(tTradelogDb.enteract_time,revacc->sTxTime); des2src(tTradelogDb.check_oper,revacc->sChkOper); des2src(tTradelogDb.record_oper,revacc->sMdeOper); tTradelogDb.serino = revacc->iRevSeriNo; tTradelogDb.op_fee = -tTradelogDb.op_fee; tTradelogDb.maindevice_id = revacc->maindevice_id; tTradelogDb.device_id = 0; ret = DB_t_tif_tradelog_add(&tTradelogDb); if (ret) { writelog(LOG_ERR, "add ArrTradelog err[%d] seri_no[%d],seri_type[%d],fee_type[%d],act_id[%s]", ret,tTradelogDb.serino,tTradelogDb.seri_type, tTradelogDb.fee_type,tTradelogDb.act_id); return E_DB_TRADELOG_I; } memcpy(&tTradelogCr,&tTradelogDb,sizeof tTradelogCr); tTradelogCr.new_fee = tAccountCr.cur_bala; //贷方帐户余额 tTradelogCr.cur_frozebala=tAccountCr.cur_frozebala; //冻结金额 des2src(tTradelogCr.act_id,tTradelogDb.other_actid); des2src(tTradelogCr.subno,tTradelogDb.other_subno); des2src(tTradelogCr.other_actid,tTradelogDb.act_id); des2src(tTradelogCr.other_subno,tTradelogDb.subno); tTradelogCr.outorin = DBCR_CREDIT; ret = DB_t_tif_tradelog_add(&tTradelogCr); if (ret) { writelog(LOG_ERR, "add ArrTradelog err[%d] seri_no[%d],seri_type[%d],fee_type[%d],act_id[%s]", ret,tTradelogCr.serino,tTradelogCr.seri_type, tTradelogCr.fee_type,tTradelogCr.act_id); return E_DB_TRADELOG_I; } return 0; }
int F847221(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; double tx_money = 0.0; char ia_buf[1024]=""; char sMsg[256]=""; double dUniNo = 0; T_t_tif_tradeserial serial; T_t_tif_tradeserial old_serial; T_t_group_cash_report group_cash; T_t_groups groups; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); int i; ResetNormalCPack(&aPack,0,1); if(strlen(rPack->scard0) <= 0) { *pRetCode = E_NOTEXIST_OPER; goto L_RETU; } ret = CheckOperatorPwd(rPack->scard0,rPack->semp_pwd); if(ret) { *pRetCode = ret; goto L_RETU; } if(rPack->lvol1 <= 0) { *pRetCode = E_FAN_SERIAL_NOT_EXISTS; goto L_RETU; } // 更新被冲正流水的状态 memset(&old_serial,0,sizeof old_serial); ret = DB_t_tif_tradeserial_read_lock_by_cur_and_serial_no(rPack->lvol1,&old_serial); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_FAN_SERIAL_NOT_EXISTS; else *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } if(SERISTAT_RUSH == old_serial.serial_state) { writelog(LOG_ERR,"流水已被冲正,流水号[%d]",old_serial.serial_no); *pRetCode = E_FAN_ALREADY_RUSHED; DB_t_tif_tradeserial_free_lock_cur(); goto L_RETU; } old_serial.serial_state = SERISTAT_RUSH; ret = DB_t_tif_tradeserial_update_lock_by_cur(&old_serial); if(ret) { writelog(LOG_ERR,"更新流水[%d]状态失败",old_serial.serial_no); *pRetCode = E_DB_TRADESERIAL_U; goto L_RETU; } DB_t_tif_tradeserial_free_lock_cur(); tx_money = old_serial.trade_fee; // 生成新的冲正流水 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniNo); if(ret) { *pRetCode = ret; goto L_RETU; } // 查询组可解款余额 memset(&group_cash,0,sizeof group_cash); ret = DB_t_group_cash_report_read_lock_by_c1_and_groupid(old_serial.showid,&group_cash); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_FAN_ACC_NOT_EXISTS; else *pRetCode = E_DB_GRP_CASH_RPT_R; goto L_RETU; } /* if(amtcmp(tx_money,group_cash.cur_money)>0) { *pRetCode = E_FAN_ACC_INSUFFICIENT; DB_t_group_cash_report_free_lock_by_c1(); goto L_RETU; } */ // 生成流水 memset(&serial,0,sizeof serial); serial.serial_no = (int)dUniNo; serial.serial_state = SERISTAT_DEBT; serial.serial_type = TXCODE_FAN_RUSH_PAY; getsysdate(serial.operate_date); getsystime(serial.operate_time); des2src(serial.collect_date,serial.operate_date); des2src(serial.collect_time,serial.operate_time); GetLogicDate(serial.enteract_date); des2src(serial.enteract_time,serial.operate_time); des2src(serial.opercode,rPack->scard0); des2src(serial.reserve_1,rPack->scert_addr); serial.cardbefbal = tx_money; serial.trade_fee = tx_money * -1; // 商户号 des2src(serial.showid,old_serial.showid); // 入账 memset(&IA,0,sizeof IA); IA.dArrInAmt[0] = serial.trade_fee; IA.iCardNo = 0; //收费类别为 1 IA.iFeeType = 1; IA.iTxFlag = ACC_TYPE_RUSH; IA.pVoidPointer = ia_buf; ret = process(&IA,&serial); if(ret) { writelog(LOG_ERR,"account process error [%d]",ret); *pRetCode = ret; DB_t_group_cash_report_free_lock_by_c1(); goto L_RETU; } SetCol(handle,0); SetCol(handle,F_VSMESS,F_LVOL1,F_DAMT1,F_DAMT2,F_SBANK_ACC,0); sprintf(out_pack->vsmess,"流水号:%d ",IA.iSerialNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } strcat(out_pack->vsmess,(char*)IA.pVoidPointer); writelog(LOG_DEBUG,out_pack->vsmess); des2src(group_cash.last_check_date,serial.operate_date); des2src(group_cash.last_check_time,serial.operate_time); group_cash.cur_money = group_cash.cur_money + tx_money; out_pack->lvol1 = serial.serial_no; out_pack->damt1 = serial.trade_fee; out_pack->damt2 = group_cash.cur_money; //更新组未解款金额 ret = DB_t_group_cash_report_update_lock_by_c1(&group_cash); if(ret) { *pRetCode = E_DB_GRP_CASH_RPT_U; goto L_RETU; } // add DB_t_group_cash_report_free_lock_by_c1(); ret = DB_t_groups_read_by_groupid(group_cash.groupid,&groups); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_GROUP_N; else *pRetCode = E_DB_GROUP_R; goto L_RETU; } des2src(out_pack->sbank_acc,groups.group_acc); //保存流水 ret = DB_t_tif_tradeserial_add(&serial); if(ret) { if(DB_REPEAT == ret) return E_DB_TRADESERIAL_E; else return E_DB_TRADESERIAL_I; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
static int ConfirmTrans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; T_t_transdtl dtl; int ret; ST_CPACK aPack; ST_PACK *out_pack=&(aPack.pack); memset(&dtl,0,sizeof dtl); T_t_refno tRefno; memset(&tRefno,0,sizeof(tRefno)); ret=DB_t_refno_read_by_refno(rPack->sphone3,&tRefno); writelog(LOG_DEBUG,"confirm refno[%s]",rPack->sphone3); if(ret) { if(DB_NOTFOUND==ret) return 0; else return E_DB_REFNO_R; } if(RS_SUCC==tRefno.status) { TIPINFO("交易已确认"); return 0; } 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; } ret = DB_t_transdtl_read_lock_by_c0_and_accdate_and_termid_and_termseqno( tRefno.accdate,tRefno.termid,tRefno.termseqno,&dtl); if(ret) { if(DB_NOTFOUND == ret) return E_DB_TRANSDTL_N; return E_DB_TRANSDTL_R; } dtl.errcode = rPack->lvol0; des2src(dtl.remark,rPack->vsmess); des2src(dtl.voucherno,rPack->sphone2); writelog(LOG_ERR,"begin DB_t_transdtl_update_lock_by_c0"); ret = DB_t_transdtl_update_lock_by_c0(&dtl); if(ret) { writelog(LOG_ERR,"更新流水表失败,ret[%d]",ret); return E_DB_TRANSDTL_U; } writelog(LOG_ERR,"end DB_t_transdtl_update_lock_by_c0"); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL5,F_DAMT0,F_DAMT1,F_DAMT2,F_SNAME2,F_SDATE1,0); out_pack->lvol0 = dtl.termseqno; out_pack->damt0 = dtl.cardaftbal; out_pack->damt1 = dtl.amount; out_pack->damt2 = dtl.cardbefbal; out_pack->lvol5 = D2I(dtl.cardaftbal * 100.0); des2src(out_pack->sname2,dtl.refno); des2src(out_pack->sdate1,dtl.accdate); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F930060(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int mesid=0; T_t_tif_meslist tMesList; T_t_device tDevice; memset(&tDevice,0,sizeof tDevice); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tMesList,0,sizeof(tMesList)); if(strlen(in_pack->sdate0)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } AddXmlItemInt(tMesList.incontent, XML_KEY_SUBSIDYONOFF, in_pack->lvol4); if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice))) { *pRetCode = ret; goto L_RETU; } tMesList.devid = tDevice.deviceid; tMesList.funid = 930060; tMesList.level = 2; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMesList.funid) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } mesid=tMesList.mesid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++) { sleep(1); memset(&tMesList,0,sizeof(tMesList)); ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList); if(ret) { writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret); *pRetCode=E_DB_MESLIST_R; goto L_RETU; } } switch(tMesList.ecode) { case 0: //成功 des2src(out_pack->vsvarstr0,"成功"); ret=F930055( handle,iRequest, in_pack,pRetCode,szMsg); if(ret) { writelog(LOG_ERR,"设备签退成功,但F930055 更新签退状态失败"); goto L_RETU; } break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMesList.emsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
static int TestTrans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; 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); CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; trans.transcode=TC_CARDPAYMENT; des2src(trans.opercode,rPack->semp); trans.termid=rPack->lwithdraw_flag; ret=pAccTrans->InitTrans(); if(ret) return ret; int paycode=rPack->lcert_code; trans.cardno=rPack->lvol0; if(trans.cardno<1) { return E_INPUTNULL_CARDNO; } trans.cardflag=1; trans.usecardflag=1; trans.purseno=PURSE_NO_ONE; trans.paycnt=rPack->lvol6+1; des2src(trans.cardphyid,rPack->sstation1); trans.inputamt= D4U5(rPack->lvol1/100.0); trans.unusedamt = trans.inputamt; trans.cardbefbal=rPack->lvol7/100.0; trans.cardaftbal=trans.cardbefbal - trans.inputamt; if(amtcmp(trans.inputamt,0)<=0) { ERRTIP("交易金额不能为0"); return E_COMMON_ERR; } if(amtcmp(trans.inputamt,trans.cardbefbal)>0) { return ERRINFO(E_CARD_BALANCE_SHORTAGE,trans.cardbefbal); } T_t_card tCard; memset(&tCard,0,sizeof(tCard)); T_t_account tAccount; memset(&tAccount,0,sizeof(tAccount)); ret=pAccTrans->CheckAcc(&tCard,&tAccount); if(ret) { writelog(LOG_INFO,"检查状态失败"); return ret; } if(amtcmp(trans.cardbefbal-tAccount.balance,MAXAMT_CARDGTACC)>0) { writelog(LOG_ERR,"卡余额[%.2lf]错误",trans.cardbefbal); return ERRIF_CARDBAL_EXCEPT; } if(strlen(rPack->stx_pwd)) { ret=check_card_pwd_by_card(trans.cardno,rPack->stx_pwd); if(ret) return ret; } if(tCard.custid>0) { ret=GetCustBaseInfoByCustID(trans.custid,trans.custname,trans.stuempno,NULL); if(ret) return ret; } CPaymentBase *payment; payment = CPaymentBase::find_payment(paycode); if(NULL == payment) { return E_TRANS_FUNC_NONSUPPORT; } ret = payment->init(handle,&aPack,rPack); if(ret) { writelog(LOG_ERR,"trade[%d],ret[%d]",paycode,ret); return ret; } int waterflag=0; double waterbefbal=0; double wateraftbal=0; if(paycode/1000==1)//水控 { waterflag=1; } if(waterflag) { switch(rPack->lvol1) { case 500: case 1000: case 1500: case 2000: break; default: ERRTIP("交易金额只能为5、10、15、20元"); return E_COMMON_ERR; } waterbefbal = rPack->lsafe_level/100.0; wateraftbal = D4U5(waterbefbal+trans.inputamt); double CardMaxBal=0; ret=GetPurseMaxBal(PURSE_NO_TWO,CardMaxBal); if(ret) return ret; if(amtcmp(wateraftbal,CardMaxBal)>0) return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); if(1061==paycode) { int price1=0; int price2=0; int price3=0; ret=GetWaterPrice(price1,price2,price3); if(ret) { writelog(LOG_ERR,"读水价失败ret=%d",ret); return ret; } outPack->lvol10=price1; outPack->lvol11=price2; outPack->lvol12=price3; } } // 保持第三方账号 T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); transdtl.exttype = paycode; if(waterflag) { sprintf(transdtl.extdata,"%.2lf",wateraftbal); } else { des2src(transdtl.extdata,rPack->sbank_acc); } ret = pAccTrans->GenTransdtl(&transdtl,DTLSTATUS_INIT); if(ret) { writelog(LOG_ERR,"GenTransdtl ret=%d",ret); return ret; } ret=db_commit(); if(ret) { return ret; } trans.cardaftbal=trans.cardbefbal; ret=pAccTrans->doTrans(); if(ret) { writelog(LOG_ERR,"doTrans err=%d",ret); return ret; } ret=pAccTrans->doTransEnd(); if(ret) { writelog(LOG_ERR,"doTransEnd err=%d",ret); return ret; } if(amtcmp(trans.cardaftbal,transdtl.cardaftbal)!=0) { ERRTIP("卡余额计算有误"); return E_COMMON_ERR; } ret=db_rollback(); if(ret) { writelog(LOG_ERR,"db_rollback err"); return ret; } // 输出参数 outPack->lvol0=tCard.cardno; outPack->lvol1=D4U5(trans.inputamt*100,0); outPack->lvol8=D4U5(transdtl.cardaftbal*100,0); 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,trans.cardpwd); //mac sprintf(trans.remark,"%s卡余额%.2lf元",pAccTrans->remark.c_str(),pAccTrans->trans.cardaftbal); des2src(outPack->vsmess,trans.remark); if(payment->payment_.onlinepay>0&&payment->payment_.paychkflag>0) { 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->qry_acc(handle,rPack,outPack); if(ret) return ret; if(payment->pushflag_ != 1) PutRow(handle,outPack,pRetCode,szMsg); } else { PutRow(handle,outPack,pRetCode,szMsg); } return 0; }
int F930032(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; //返回码 int hi_sign = 0; //挂失解挂标志 double h_temp_Serial_no = 0; //本地流水号 char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; int dev_id=0; T_t_tif_tradeserial tradeserial; memset(&tradeserial,0,sizeof(tradeserial)); hi_sign = in_pack->lvol6; //挂失解挂标志 ret=chk_dyn_key(in_pack->lcert_code,in_pack->scust_limit2); if(ret) { *pRetCode = ret; goto L_RETU; } getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode = ret; goto L_RETU; } switch (hi_sign) { case 0: tradeserial.serial_type = TXCODE_CARD_LOSS; //挂失 break; case 1: tradeserial.serial_type = TXCODE_CARD_COMEBACK_LOSS; //解挂 break; case 2: tradeserial.serial_type = TXCODE_MODIFICATIONPW; //修改密码 break; default: *pRetCode = -1; writelog(LOG_ERR,"挂失解挂修改密码标志出错。ERRCODE[%d] ",*pRetCode); goto L_RETU; break; } /* 读取设备ID */ ret = GetDevIdByDevPhyId(&dev_id,in_pack->sdate1); if (ret) { *pRetCode = ret; writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] ",ret); goto L_RETU; } tradeserial.serial_state = SERISTAT_NODEBT; //流水状态 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&h_temp_Serial_no); if(ret) { *pRetCode = ret; writelog(LOG_ERR,"获取最大流水号错误: ERRCODE = [%d]",ret); goto L_RETU; } tradeserial.serial_no = D2I(h_temp_Serial_no); //流水号 snprintf(tradeserial.operate_date,9,"20%s",in_pack->spost_code); //发生日期(格式化输入的日期) des2src(tradeserial.operate_time,in_pack->spost_code2); //发生时间(格式化输入的时间) des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.other_seri_no = in_pack->lvol4; //上传端流水号 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 tradeserial.maindeviceid = in_pack->lcert_code; //上传工作站标识 tradeserial.deviceid = dev_id; //采集设备标识 tradeserial.cardno = in_pack->lvol5; //卡号 Strncpy_t(tradeserial.showid,in_pack->sstation0,sizeof(tradeserial.showid)); //显示卡号 Strncpy_t(tradeserial.oldpwd,in_pack->sstock_code,sizeof(tradeserial.oldpwd)); //原始密码 Strncpy_t(tradeserial.newpwd,in_pack->sstock_code2,sizeof(tradeserial.newpwd)); //更新密码 des2src(tradeserial.opercode,"system"); ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } return 0; L_RETU: return -1; }
int F847222(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char ia_buf[1024]=""; char sMsg[256]=""; double dUniNo; InAcc IA; T_t_tif_tradeserial serial; T_t_aif_account account; T_t_cif_shop shop; trade_param_t param; int shop_id; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); int i; ResetNormalCPack(&aPack,0,1); shop_id = atoi(rPack->sbank_acc); if(shop_id <= 0) { *pRetCode = E_SHOP_ACTNO_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scard0) <= 0) { *pRetCode = E_OPER_NOT_EXIST; goto L_RETU; } if(amtcmp(rPack->damt1,0)<=0) { *pRetCode = E_INPUT_AMT; goto L_RETU; } ret = CheckOperatorPwd(rPack->scard0,rPack->semp_pwd); if(ret) { *pRetCode = ret; goto L_RETU; } memset(&account,0,sizeof account); memset(&shop,0,sizeof shop); ret = DB_t_cif_shop_read_by_shop_id(shop_id,&shop); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_SHOP_ACTNO_NOT_EXIST; else *pRetCode = E_DB_SHOP_R; goto L_RETU; } if(strcmp(shop.is_indep, TYPE_YES)) { *pRetCode = E_FAN_SHOP_NOT_INDEP; goto L_RETU; } memset(&IA,0,sizeof IA); memset(¶m,0,sizeof param); param.pIA = &IA; IA.pVoidPointer = ia_buf; param.shop_id = shop.shop_id; param.remain_balance = rPack->damt1; ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniNo); if(ret) { *pRetCode = ret; goto L_RETU; } param.serial_no = D2I(dUniNo); //初始化流水记录 memset(&serial,0,sizeof serial); serial.serial_no = param.serial_no; serial.serial_state = SERISTAT_DEBT; serial.serial_type = TXCODE_FAN_BALANCE; // 借用显示卡号字段保存商户号 sprintf(serial.showid,"%d",param.shop_id); getsysdate(serial.operate_date); getsystime(serial.operate_time); des2src(serial.collect_date,serial.operate_date); des2src(serial.collect_time,serial.operate_time); // 客户号 serial.customer_id = shop.cut_id; GetLogicDate(serial.enteract_date); des2src(serial.enteract_time,serial.operate_time); des2src(serial.oper_code,rPack->scard0); des2src(serial.reserve_1,rPack->scert_addr); serial.in_balance = param.remain_balance; serial.trade_fee = param.remain_balance; des2src(param.tx_date,serial.operate_date); des2src(param.tx_time,serial.operate_time); des2src(param.oper_code,rPack->scard0); ret = do_parse_shop(¶m); if(ret) { writelog(LOG_ERR,"商户解款失败shop[%d] ret [%d]",param.shop_id,ret); *pRetCode = ret; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_VSMESS,F_LVOL1,F_DAMT1,0); for(i=1;i<=IA.iOutTxTypeCnt;i++) { if(amtcmp(IA.dArrOutAmt[i],0)!=0) { //sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); //strcat(out_pack->vsmess,sMsg); writelog(LOG_INFO,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); } } out_pack->lvol1 = IA.iSerialNo; out_pack->damt1 = param.free_balance; sprintf(out_pack->vsmess,"流水号:%d 解款金额[%.2lf]元,余额[%.2lf]元" ,IA.iSerialNo,rPack->damt1,out_pack->damt1); //strcat(out_pack->vsmess,IA.pVoidPointer); writelog(LOG_DEBUG,out_pack->vsmess); //保存流水 ret = DB_t_tif_tradeserial_add(&serial); if(ret) { if(DB_REPEAT == ret) return E_DB_TRADESERIAL_E; else return E_DB_TRADESERIAL_I; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
static int DoCardInstead(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char sqlcmd[2048]=""; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; int nOldCardno=trans.cardno; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL1,F_LSAFE_LEVEL2,F_LVOL4,F_LVOL5, F_SALL_NAME,F_SPAGER,F_SCERT_NO,F_LSAFE_LEVEL,F_SMARKET_CODE2,F_SHOLDER_AC_NO, F_SEMAIL2,F_SMARKET_CODE,F_SDATE0, F_LVOL0,F_STX_PWD,F_LVOL8,F_LVOL6, F_SORDER0,F_SEMP,F_SDATE3,F_STIME3,F_LVOL11,F_LVOL12, F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_SNAME2,0); T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(trans.cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==tCard.badflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_BADRECORD,trans.cardno); } tCard.status[0]=STATUS_DELETE; des2src(tCard.closedate,trans.transdate); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { return E_DB_CARD_U; } memset(tCard.closedate,0,sizeof(tCard.closedate)); tCard.status[0]=STATUS_NORMAL; T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } int existflag=0; ret=IsExistUnGetSubsidy(tCard.cardno,&existflag); if(ret) { return ret; } if(existflag) { ERRTIP("有未领补助,请领取补助后再换卡"); return E_COMMON_ERR; } T_t_customer customer; memset(&customer,0,sizeof(customer)); if(tCard.custid) { ret=DB_t_customer_read_by_custid(tCard.custid,&customer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,tCard.custid); else return E_DB_CUSTOMER_R; } des2src(trans.stuempno,customer.stuempno); des2src(trans.custname,customer.custname); trans.custid=customer.custid; } char cardpwd[33]=""; char key[17]=""; strcpy(key,STATIC_SEED_KEY); EncodePwd(key,cardpwd,tCard.cardpwd, 1); T_t_cardinsteaddtl cardinsteaddtl; memset(&cardinsteaddtl,0,sizeof(cardinsteaddtl)); ret=DB_t_cardinsteaddtl_read_lock_by_c0_and_cardno(trans.cardno,&cardinsteaddtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_CARDINSTEADDTL_N; else return E_DB_CARDINSTEADDTL_R; } //核对登记信息与卡表是否一致 if(strcmp(cardinsteaddtl.oldcardphyid,tCard.cardphyid)!=0) { DB_t_cardinsteaddtl_free_lock_by_c0(); strcpy(szMsg,"保存的卡信息与原卡物理ID不一致"); return E_CARD_PHYNO_DIFFER; } //核对原物理ID是否一致 if(strcmp(cardinsteaddtl.oldcardphyid,rPack->scust_no)!=0) { DB_t_cardinsteaddtl_free_lock_by_c0(); return E_CARD_PHYNO_DIFFER; } if(cardinsteaddtl.revflag[0]=='1') { DB_t_cardinsteaddtl_free_lock_by_c0(); return E_CARDINSTEAD_CANCEL; } if(cardinsteaddtl.status[0]=='2') { DB_t_cardinsteaddtl_free_lock_by_c0(); if(strcmp(cardinsteaddtl.cardphyid,trans.cardphyid)!=0) { return ERRINFO(E_CARD_PHYNO_DIFFER,trans.cardphyid,cardinsteaddtl.cardphyid); } outPack->lvol1=tCard.custid; outPack->lsafe_level2=customer.custtype; outPack->lvol5=tCard.feetype; des2src(outPack->sall_name,customer.custname); des2src(outPack->spager,customer.stuempno); des2src(outPack->scert_no,customer.deptcode); des2src(outPack->semail2,customer.idno); des2src(outPack->smarket_code,customer.sex); des2src(outPack->sdate0,tCard.expiredate); sprintf(outPack->sholder_ac_no,"%d",10); //发行方标识 des2src(outPack->smarket_code2,customer.idtype); outPack->lsafe_level=tCard.cardtype; des2src(outPack->sname2,tCard.cardverno); outPack->lvol0=tCard.cardno; outPack->lvol8=(int)(cardinsteaddtl.oldcardbal*100); outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); outPack->lvol6=cardinsteaddtl.oldcardcnt; outPack->lvol4=cardinsteaddtl.oldsubsidyno; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->semp,trans.opercode); des2src(outPack->stx_pwd,cardpwd); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; PutRow(handle,outPack,pRetCode,szMsg); return 0; } cardinsteaddtl.status[0]=STATUS_DELETE; des2src(cardinsteaddtl.cardphyid,trans.cardphyid); des2src(cardinsteaddtl.showcardno,trans.showcardno); ret=DB_t_cardinsteaddtl_update_lock_by_c0(&cardinsteaddtl); if(ret) { return E_DB_CARDINSTEADDTL_U; } T_t_newcardchange newcardchange; memset(&newcardchange,0,sizeof(newcardchange)); ret=DB_t_newcardchange_read_lock_by_c1_and_showcardno(cardinsteaddtl.showcardno,&newcardchange); if(ret) { writelog(LOG_ERR,"showcardno[%s]",trans.showcardno); if(DB_NOTFOUND==ret) return E_DB_NEWCARDCHANGE_N; else return E_DB_NEWCARDCHANGE_R; } newcardchange.status= NEWCARDSTATUS_SUCCESS; des2src(newcardchange.oldcardphyid,cardinsteaddtl.oldcardphyid); des2src(newcardchange.cardphyid,cardinsteaddtl.cardphyid); des2src(newcardchange.lastsaved,CAccTrans::getInstance()->trans.sysdatetime); ret=DB_t_newcardchange_update_lock_by_c1(&newcardchange); if(ret) { return E_DB_NEWCARDCHANGE_U; } //检查新卡物理id T_t_card cardtmp; memset(&cardtmp,0,sizeof(cardtmp)); ret=DB_t_card_read_by_cardphyid_and_status(trans.cardphyid,"1",&cardtmp); if(ret!=DB_NOTFOUND) { if(DB_SUCCESS==ret) return ERRINFO(E_EXIST_CARDPHYID,trans.cardphyid); else return E_DB_CARD_R; } ret = getNewUniqNo(KEYTYPE_CARDNO,&tCard.cardno); //获取最大卡号 if(ret) { return ret; } T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tCard.cardno; des2src(cardver.accdate,pAccTrans->trans.accdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,cardinsteaddtl.oldcardphyid); des2src(cardver.stuempno,trans.stuempno); cardver.cardvertype=CARDVERTYPE_CARDINSTEADNEW; ret=getCardVerNo(cardver.cardverno); if(ret) return ret; ret=DB_t_cardver_add(&cardver); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } //使用卡片 des2src(tCard.cardphyid,trans.cardphyid); des2src(tCard.showcardno,trans.showcardno); des2src(tCard.lastsaved,trans.sysdatetime); des2src(tCard.cardverno,cardver.cardverno); tCard.status[0]=STATUS_NORMAL; ret=DB_t_card_add(&tCard); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_U; } T_t_cardbalance cardbalance; ret=DB_t_cardbalance_open_select_for_update_by_c2_and_accno(tCard.accno); if(ret) { return E_DB_CARDBALANCE_R; } while(1) { memset(&cardbalance,0,sizeof(cardbalance)); ret=DB_t_cardbalance_fetch_select_by_c2(&cardbalance); if(ret) { if(DB_NOTFOUND==ret) break; else return E_DB_CARDBALANCE_R; } cardbalance.oldcardno=cardbalance.cardno; cardbalance.cardno=tCard.cardno; ret= DB_t_cardbalance_update_select_by_c2(&cardbalance); if(ret) { DB_t_cardbalance_close_select_by_c2(); return E_DB_CARDBALANCE_U; } } tCardAccount.cardno=tCard.cardno; tCardAccount.dpscnt=0; tCardAccount.paycnt=0; strcpy(tCardAccount.transtime,trans.sysdatetime); ret=DB_t_account_update_by_accno(tCard.accno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return E_DB_ACCOUNT_N; else return E_DB_ACCOUNT_R; } //插入卡位图表 T_t_cardbitmap tCardBitmap; memset(&tCardBitmap,0,sizeof(tCardBitmap)); tCardBitmap.cardno=tCard.cardno; tCardBitmap.baseno=0; memset(tCardBitmap.bitmap0,'0',sizeof(tCardBitmap.bitmap0)-1); memset(tCardBitmap.bitmap1,'0',sizeof(tCardBitmap.bitmap1)-1); memset(tCardBitmap.bitmap2,'0',sizeof(tCardBitmap.bitmap2)-1); memset(tCardBitmap.bitmap3,'0',sizeof(tCardBitmap.bitmap3)-1); memset(tCardBitmap.bitmap4,'0',sizeof(tCardBitmap.bitmap4)-1); memset(tCardBitmap.bitmap5,'0',sizeof(tCardBitmap.bitmap5)-1); memset(tCardBitmap.bitmap6,'0',sizeof(tCardBitmap.bitmap6)-1); memset(tCardBitmap.bitmap7,'0',sizeof(tCardBitmap.bitmap7)-1); memset(tCardBitmap.bitmap8,'0',sizeof(tCardBitmap.bitmap8)-1); memset(tCardBitmap.bitmap9,'0',sizeof(tCardBitmap.bitmap9)-1); ret=DB_t_cardbitmap_add(&tCardBitmap); if (ret) { if (DB_REPEAT==ret) return E_DB_CARDBITMAP_E; else return E_DB_CARDBITMAP_I; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.exttype=EXTTYPE_NEWCARD; sprintf(transdtl.extdata,"%d",tCard.cardno); transdtl.purseno=trans.purseno; transdtl.cardcnt=cardinsteaddtl.oldcardcnt; transdtl.cardbefbal=cardinsteaddtl.oldcardbal; transdtl.cardaftbal=cardinsteaddtl.oldcardbal; transdtl.managefee=trans.totalfeeamt; transdtl.amount=trans.totaltransamt; transdtl.custid=tCard.custid; des2src(transdtl.custname,customer.custname); des2src(transdtl.stuempno,customer.stuempno); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl.showcardno,tCard.showcardno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } outPack->lvol1=tCard.custid; outPack->lsafe_level2=customer.custtype; outPack->lvol5=tCard.feetype; des2src(outPack->sall_name,customer.custname); des2src(outPack->spager,customer.stuempno); des2src(outPack->scert_no,customer.deptcode); des2src(outPack->semail2,customer.idno); des2src(outPack->smarket_code,customer.sex); des2src(outPack->sdate0,tCard.expiredate); sprintf(outPack->sholder_ac_no,"%d",10); //发行方标识 des2src(outPack->smarket_code2,customer.idtype); outPack->lsafe_level=tCard.cardtype; outPack->lvol0=tCard.cardno; outPack->lvol4=cardinsteaddtl.oldsubsidyno; outPack->lvol8=(int)(cardinsteaddtl.oldcardbal*100); outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); outPack->lvol6=cardinsteaddtl.oldcardcnt; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->stx_pwd,cardpwd); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; PutRow(handle,outPack,pRetCode,szMsg); return 0; }
static int do_process_trade(trade_param_t * param) { int ret; T_t_cif_shop shop; T_t_aif_account account; void * pTmp; InAcc * IA; memset(&shop,0,sizeof shop); ret = DB_t_cif_shop_read_by_shop_id(param->out_shop_id,&shop); //writelog(LOG_DEBUG,"trade shop id[%d]",param->out_shop_id); if(ret) { if(DB_NOTFOUND == ret) return E_DB_SHOP_N; else return E_DB_SHOP_R; } memset(&account,0,sizeof account); ret = DB_t_aif_account_read_by_customer_id_and_act_type( shop.cut_id,ACCTYPE_SHOPMAIN,&account); if(ret) { writelog(LOG_ERR,"shop id[%d] custid[%d]",shop.shop_id,shop.cut_id); if(DB_NOTFOUND == ret) return E_FAN_ACC_NOT_EXISTS; return E_DB_ACCOUNT_R; } //writelog(LOG_DEBUG,"对叶子商户[%d]进行解款[%.2lf]金额[%.2lf]", // param->out_shop_id,account.last_bala,param->remain_balance); if(amtcmp(account.last_bala,0) <= 0) { // 商户无余额不处理 return 0; } // 检查是否已经解款完成 if(amtcmp(param->remain_balance,0) == 0) { //只计算商户余额 param->free_balance += account.last_bala; return 0; } // 计算交易金额 if(amtcmp(param->remain_balance,account.last_bala) >= 0) { param->trade_fee = account.last_bala; } else { param->trade_fee = param->remain_balance; } // 入账 IA = param->pIA; //pTmp = IA->pVoidPointer; memset(IA,0,sizeof(InAcc)); des2src(IA->sArrInActno[1],account.account_id); IA->pVoidPointer = pTmp; ret = process(IA,param); if(ret) { writelog(LOG_ERR,"process account failed,ret [%d]shopid[%d]subindex[%d]", ret,param->out_shop_id,param->index); return ret; } // 更新账户余额 // 入账之后账户余额已经被更新,需要重新读取 memset(&account,0,sizeof account); ret = DB_t_aif_account_read_by_customer_id_and_act_type( shop.cut_id,ACCTYPE_SHOPMAIN,&account); if(ret) { if(DB_NOTFOUND == ret) return E_FAN_ACC_NOT_EXISTS; return E_DB_ACCOUNT_R; } account.last_bala -= param->trade_fee; account.last_freebala -= param->trade_fee; if(amtcmp(account.last_bala,0)< 0) { account.last_bala = 0.0; account.last_freebala = 0.0; } else { param->free_balance += account.last_bala; } ret = DB_t_aif_account_update_by_account_id(account.account_id,&account); if(ret) { writelog(LOG_ERR,"更新商户账户余额失败ret[%d]",ret); if(DB_NOTFOUND == ret) return E_DB_ACCOUNT_N; return E_DB_ACCOUNT_R; } writelog(LOG_DEBUG,"商户[%d]解款金额[%.2lf]余额[%.2lf]" ,shop.shop_id,param->trade_fee,account.last_bala); return ret; }
int F846327(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); ret=pAccTrans->CheckCfgUpdate(); if(ret) return ret; pAccTrans->trans.termid=rPack->lcert_code; //des2src(pAccTrans->trans.opercode,rPack->semp); TRANS& trans=pAccTrans->trans; switch(rPack->sstatus0[0]) { case 'S'://保存卡信息 trans.transcode=TC_CARDSAVEINFO; ret=pAccTrans->InitTrans(); if(ret) return ret; trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol0; trans.cardsubsidyno=rPack->lvol4; pAccTrans->SetCardCntAndCardBal(rPack->lvol5,rPack->lvol6,rPack->lvol7); des2src(trans.cardphyid,rPack->scust_no); des2src(trans.showcardno,rPack->sorder0); ret=SaveOldCardInfo(handle,rPack,pRetCode,szMsg); break; case 'C': trans.transcode=TC_CARDINSTEAD; ret=pAccTrans->InitTrans(); if(ret) return ret; trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol0; trans.cardsubsidyno=rPack->lvol4; pAccTrans->SetCardCntAndCardBal(rPack->lvol5,rPack->lvol6,rPack->lvol7); des2src(trans.cardphyid,rPack->scust_no2); des2src(trans.showcardno,rPack->sorder0); ret=DoCardInstead(handle,rPack,pRetCode,szMsg); break; case 'D'://换卡撤销 trans.transcode=TC_CARDINSTEADREV; ret=pAccTrans->InitTrans(); if(ret) return ret; trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol0; trans.cardsubsidyno=rPack->lvol4; pAccTrans->SetCardCntAndCardBal(rPack->lvol5,rPack->lvol6,rPack->lvol7); des2src(trans.cardphyid,rPack->scust_no2); des2src(trans.showcardno,rPack->sorder0); ret=DoCardInsteadCancel(handle,rPack,pRetCode,szMsg); break; default: return -1; } if(ret) return ret; return 0; }
int F930037(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int row=0; int dev_id=0; char devphy999_id[9]=""; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); T_t_pif_device p; T_t_pif_device parent; #ifdef DEBUG writelog(LOG_DEBUG,"subsystem_id[%d]",rPack->lcert_code); writelog(LOG_DEBUG,"dyn_key[%s]",rPack->scust_limit2); #endif ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_SDATE2,F_SDATE1,F_LVOL4,F_SEMP,F_SDATE3,F_SHOLDER_TYPE,F_SNOTE2,F_LVOL1,F_LVOL5,F_STIME0,F_LVOL6,F_LVOL7,F_LVOL8,F_SSTATION0,F_SBANK_CODE,F_LVOL9,F_LVOL10,F_SSERIAL0,F_SSERIAL1,F_LVOL11,F_SCUST_AUTH,F_LVOL12,F_SCUST_AUTH2,F_LVOL0,0); writelog(LOG_DEBUG,"前置机%d下载设备档案",rPack->lcert_code); ret=chk_dyn_key(rPack->lcert_code,rPack->scust_limit2); if(ret) { *pRetCode = ret; goto L_RETU; } strncpy(devphy999_id,rPack->sdate1,sizeof(devphy999_id)-1); trim(devphy999_id); if(strlen(devphy999_id)&&strncmp(devphy999_id,"00000000",8)!=0) { memset(&p,0,sizeof(p)); ret = GetDevIdByDevPhyId(&dev_id,devphy999_id); if(ret) { *pRetCode=ret; goto L_RETU; } ret=DB_t_pif_device_read_by_devphy999_id(devphy999_id, &p); if(ret) { writelog(LOG_ERR,"devphy999_id[%s]",devphy999_id); if(DB_NOTFOUND==ret) *pRetCode=E_DB_DEVICE_N; else *pRetCode=E_DB_DEVICE_R; goto L_RETU; } if(p.state_id==DEVISTAT_LOGOUT) { *pRetCode=E_DB_DEVICE_N; goto L_RETU; } p.state_id=DEVISTAT_REGIST; if((strncmp(p.dev999_id,"FFFFFFFF",8)==0)||(strlen(p.dev999_id)==0)) { *pRetCode=E_DB_DEVICE_N; goto L_RETU; } if(ROOT_DEVICE_ID == p.fdev_id) memset(out_pack->stime0,0,sizeof(out_pack->stime0)); else { out_pack->lvol0 = p.device_id; memset(&parent,0,sizeof parent); ret = DB_t_pif_device_read_by_device_id(p.fdev_id,&parent); if(ret) { des2src(out_pack->stime0,"FFFFFFFF"); } else { des2src(out_pack->stime0,parent.devphy999_id); } } strncpy(out_pack->sdate2,p.dev999_id,sizeof(out_pack->sdate2)-1); strncpy(out_pack->sdate1,p.devphy999_id,sizeof(out_pack->sdate1)-1); out_pack->lvol4=p.dev999_no; strncpy(out_pack->semp,p.devtype,sizeof(out_pack->semp)-1); strncpy(out_pack->sdate3,p.devversion,sizeof(out_pack->sdate3)-1); strncpy(out_pack->sholder_type,p.cardstr,sizeof(out_pack->sholder_type)-1); strncpy(out_pack->snote2,p.cardtype,sizeof(out_pack->snote2)-1); out_pack->lvol5=p.portcount; out_pack->lvol6=p.portno; out_pack->lvol7=p.state_id; out_pack->lvol8=p.joinmode; strncpy(out_pack->sstation0,p.comadd,sizeof(out_pack->sstation0)-1); strncpy(out_pack->sbank_code,p.port,sizeof(out_pack->sbank_code)-1); out_pack->lvol9=p.baudrate; out_pack->lvol10=p.comtype; strncpy(out_pack->sserial0,p.bsheetvdate,sizeof(out_pack->sserial0)-1); strncpy(out_pack->sserial1,p.bsheetver,sizeof(out_pack->sserial1)-1); out_pack->lvol11=p.lasttraserno; strncpy(out_pack->scust_auth,p.lasttradate,sizeof(out_pack->scust_auth)-1); out_pack->lvol12=p.lastshutserno; strncpy(out_pack->scust_auth2,p.lastshutdate,sizeof(out_pack->scust_auth2)-1); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } ret=DB_t_pif_device_open_select_by_c1_and_subsystem_id(rPack->lcert_code); writelog(LOG_DEBUG,"subsystem [%d]",rPack->lcert_code); if(ret) { writelog(LOG_ERR,"sub_system_id[%d]",rPack->lcert_code); *pRetCode=E_DB_DEVICE_R; goto L_RETU; } while(1) { memset(&p,0,sizeof(p)); ret=DB_t_pif_device_fetch_select_by_c1(&p); if(ret) { if(DB_NOTFOUND==ret) { if(row) break; else *pRetCode=E_DB_DEVICE_N; } else *pRetCode=E_DB_DEVICE_R; goto L_RETU; } if(p.state_id==DEVISTAT_LOGOUT || PHYTYPE_999_DEV != p.phytype) continue; p.state_id=DEVISTAT_REGIST; if((strncmp(p.dev999_id,"FFFFFFFF",8)==0)||(strlen(p.dev999_id)==0)) continue; if(ROOT_DEVICE_ID == p.fdev_id) { memset(out_pack->stime0,0,sizeof(out_pack->stime0)); out_pack->lvol1 = -1; } else { out_pack->lvol1 = p.fdev_id; memset(&parent,0,sizeof parent); ret = DB_t_pif_device_read_by_device_id(p.fdev_id,&parent); if(ret) { des2src(out_pack->stime0,"FFFFFFFF"); } else { des2src(out_pack->stime0,parent.dev999_id); } } out_pack->lvol0 = p.device_id; out_pack->lvol7=p.state_id; strncpy(out_pack->sdate2,p.dev999_id,sizeof(out_pack->sdate2)-1); strncpy(out_pack->sdate1,p.devphy999_id,sizeof(out_pack->sdate1)-1); out_pack->lvol4=p.dev999_no; strncpy(out_pack->semp,p.devtype,sizeof(out_pack->semp)-1); strncpy(out_pack->sdate3,p.devversion,sizeof(out_pack->sdate3)-1); strncpy(out_pack->sholder_type,p.cardstr,sizeof(out_pack->sholder_type)-1); strncpy(out_pack->snote2,p.cardtype,sizeof(out_pack->snote2)-1); out_pack->lvol5=p.portcount; out_pack->lvol6=p.portno; out_pack->lvol8=p.joinmode; strncpy(out_pack->sstation0,p.comadd,sizeof(out_pack->sstation0)-1); strncpy(out_pack->sbank_code,p.port,sizeof(out_pack->sbank_code)-1); out_pack->lvol9=p.baudrate; out_pack->lvol10=p.comtype; strncpy(out_pack->sserial0,p.bsheetvdate,sizeof(out_pack->sserial0)-1); strncpy(out_pack->sserial1,p.bsheetver,sizeof(out_pack->sserial1)-1); out_pack->lvol11=p.lasttraserno; strncpy(out_pack->scust_auth,p.lasttradate,sizeof(out_pack->scust_auth)-1); out_pack->lvol12=p.lastshutserno; strncpy(out_pack->scust_auth2,p.lastshutdate,sizeof(out_pack->scust_auth2)-1); row++; PutRow(handle,out_pack,pRetCode,szMsg); if(row%10==0) AnswerDataPart(handle,*pRetCode,szMsg); } AnswerData(handle,*pRetCode,szMsg); return 0; L_RETU: return -1; }
int F930063(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int msgid=0; T_t_msglist tMsgList; T_t_device tDevice; memset(&tDevice,0,sizeof tDevice); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tMsgList,0,sizeof(tMsgList)); if(strlen(in_pack->sdate0)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } AddXmlItemStr(tMsgList.reqdata, XML_KEY_ADMPWD, in_pack->semp_pwd); if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice))) { *pRetCode = ret; goto L_RETU; } tMsgList.deviceid = tDevice.deviceid; tMsgList.funcno = 930063; tMsgList.msglevel = 2; ret=AddMsgLst(&tMsgList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMsgList.funcno) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } msgid=tMsgList.msgid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0;(cnt<10)&&(tMsgList.errcode!=0);cnt++) { sleep(1); memset(&tMsgList,0,sizeof(tMsgList)); ret=DB_t_msglist_read_by_msgid(msgid, &tMsgList); if(ret) { writelog(LOG_ERR,"DB_t_msglist_read_by_msgid err[%d]",ret); *pRetCode=E_DB_MSGLIST_R; goto L_RETU; } } switch(tMsgList.errcode) { case 0: //成功 des2src(out_pack->vsvarstr0,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMsgList.errmsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
static int Add848012(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int rows = 0; T_t_doorgrpmember tDoorGrpMem; T_t_doorholiday tHoliday; T_t_door_oper_right tOper; ST_PACK send_pack; int holiday_count = 0; char holiday[241] = ""; int subsysid; if(in_pack->lvol0 < 1 ) { return E_INPUT_GROUP_ID; } if(in_pack->lvol1 < 1) { return E_INPUt_doorholidayid; } if(strlen(in_pack->scust_limit) < 1) { return E_INPUT_DATA_INVAILD; } //writelog(LOG_DEBUG,"lvol0 : [%d]",in_pack->lvol0); //writelog(LOG_DEBUG,"lvol1 : [%d]",in_pack->lvol1); memset(&tHoliday,0,sizeof tHoliday); ret = DB_t_doorholiday_read_by_holidayid(in_pack->lvol1,&tHoliday); if(ret) { if(DB_NOTFOUND == ret) { return E_DB_DOOR_HOLIDAY_N; } return E_DB_DOOR_HOLIDAY_R; } ret = DB_t_doorgrpmember_open_select_by_cur1_and_groupid(in_pack->lvol0); if(ret) { return E_DB_DOOR_GROUP_MEMBER_R; } while(1) { memset(&tDoorGrpMem,0,sizeof tDoorGrpMem); ret = DB_t_doorgrpmember_fetch_select_by_cur1(&tDoorGrpMem); if(ret) { if(DB_NOTFOUND == ret) { if(rows > 0) { return 0; } return E_DB_DOOR_GROUP_MEMBER_N; } return E_DB_DOOR_GROUP_MEMBER_R; } ret = get_subsysid_by_phyid(tDoorGrpMem.deviceid,&subsysid); if(ret) { // 设备不存在,继续下一个设备 continue; } rows++; memset(&tOper,0,sizeof tOper); ret = DB_t_door_oper_right_read_by_oper_no_and_deviceid( in_pack->scust_limit,tDoorGrpMem.deviceid,&tOper); if(ret ) { DB_t_doorgrpmember_close_select_by_cur1(); // 只对该操作员有权限的设备处理 if(DB_NOTFOUND == ret) { sprintf(szMsg,"操作员对设备%s没有操作权限",tDoorGrpMem.deviceid); return E_OPER_NO_RIGHT_FOR_DEVICE; } return E_DB_DOOR_OPER_RIGHT_R; } memset(holiday,0,sizeof holiday); holiday_count = 0; ret = AddDoorDevHld(tDoorGrpMem.deviceid,in_pack->lvol1,holiday,&holiday_count); if(ret) { // 一个门禁已经设置了该节假日就跳过 if(E_DB_DOOR_DEV_HLD_E == ret) { continue; } DB_t_doorgrpmember_close_select_by_cur1(); return ret; } memset(&send_pack,0,sizeof send_pack); send_pack.lvol1 = 930109; des2src(send_pack.sdate0,tDoorGrpMem.deviceid); send_pack.lvol5 = holiday_count; des2src(send_pack.vsvarstr0,holiday); ret = F930109(handle,iRequest,&send_pack,pRetCode,szMsg); if(ret) { DB_t_doorgrpmember_close_select_by_cur1(); return *pRetCode; } } return 0; }
int F847123(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int card_id=0; char sSeedKey[17] = ""; //种子密钥 char sPwd[7] = ""; //卡密码 char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; double dSerialno=0; T_t_pif_card tCard; T_t_cif_customer tCustomer; T_t_pif_spefee tSpeFee; T_t_aif_account tAccount; T_t_tif_tradeserial tTradeserial; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tCard,0,sizeof(tCard)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tAccount,0,sizeof(tAccount)); memset(&tTradeserial,0,sizeof(tTradeserial)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL10,F_LVOL5, F_SCUST_NO, F_SCUST_NO2,F_SCUST_AUTH,F_SCUST_AUTH2, F_SDATE0,F_SNAME,F_SNAME2, F_SOPEN_EMP,F_SSTATUS0, F_DAMT2,F_LSERIAL1,F_VSMESS,0); card_id=rPack->lvol0; if(card_id<1) { *pRetCode=E_INPUT_CARDNO; goto L_RETU; } getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } //判断卡状态是否为写卡未成功状态 ret=DB_t_pif_card_read_lock_by_cur_and_card_id(card_id, &tCard); if(ret) { writelog(LOG_ERR,"card_id[%d]",card_id); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_R; goto L_RETU; } if(card_id!=tCard.card_id) { writelog(LOG_ERR,"card_id[%d] db card_id[%d]",card_id,tCard.card_id); DB_t_pif_card_free_lock_by_cur(); *pRetCode=E_DB_CARD_R; goto L_RETU; } if('3'!=tCard.state_id[CARDSTAT_TYPE_REG]) { DB_t_pif_card_free_lock_by_cur(); if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode=E_CARDNO_LOGOUT; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_LOST]) *pRetCode=E_CARDNO_LOST; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_FREEZE]) *pRetCode=E_CARDNO_FREEZE; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_WFAIL]) *pRetCode=E_CARDNO_WFAIL; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode=E_OLDCARDINFO_NOSAVE; goto L_RETU; } trim(rPack->sbank_acc); trim(rPack->scust_no); trim(rPack->sdate0); if(strlen(rPack->scust_no)) { ret=IsExistShowCardNo(rPack->scust_no); if(ret) { *pRetCode = ret; goto L_RETU; } } if(strcmp(tCard.physical_no,rPack->sbank_acc)!=0) { ret=IsExistCardByPhyCardNo(rPack->sbank_acc); if(ret) { *pRetCode = ret; goto L_RETU; } } ret=IsInvalidDateTime(rPack->sdate0,"YYYYMMDD"); if(ret) { *pRetCode=ret; goto L_RETU; } des2src(tCard.physical_no, rPack->sbank_acc); //物理卡号 des2src(tCard.showid,rPack->scust_no); //显示卡号 des2src(tCard.end_time,rPack->sdate0); //到期日期 ret=DB_t_pif_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"card_id[%d]",card_id); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_U; goto L_RETU; } DB_t_pif_card_free_lock_by_cur(); memcpy(sSeedKey,STATIC_SEED_KEY,16); //读种子密钥 EncodePwd(sSeedKey,sPwd,tCard.password,1); //卡密码 //注销帐户 ret=DB_t_aif_account_read_by_card_id_and_purse_id(card_id,PURSE_NO_ONE, &tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_read_by_card_id_and_purse_id ret[%d]card_id[%d]",ret,card_id); if(DB_NOTFOUND==ret) *pRetCode= E_ACTNO_NOT_EXIST; else *pRetCode= E_DB_ACCOUNT_R; goto L_RETU; } if(tAccount.consume_count<1) { *pRetCode=E_CARD_TXCNT; goto L_RETU; } if(amtcmp(tAccount.card_balance,0)<0) { *pRetCode=E_CARD_BALA; goto L_RETU; } ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(tCustomer.fee_type<1) { ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.fee_type=tCustomer.cut_type; } else { DB_t_cif_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } } DB_t_cif_customer_free_lock_cur(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialno); //获得流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU; } tTradeserial.serial_no = (int)dSerialno; //流水号 tTradeserial.other_seri_no = 0; //上传端流水号 tTradeserial.serial_type = 847123; //交易代码;备注:发卡+充值 用一个交易码,即847101; 发卡(不充值)另用一个交易码,即新的发卡程序文件名,从而区分发卡充值与发卡不充值的卡操作信息。 tTradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tTradeserial.operate_date,sysdate); //发生日期 des2src(tTradeserial.operate_time,systime); //发生时间 des2src(tTradeserial.collect_date,sysdate); //采集日期 des2src(tTradeserial.collect_time,systime); //采集时间 des2src(tTradeserial.enteract_date,logicdate); //处理日期 des2src(tTradeserial.enteract_time,systime); //处理时间 des2src(tTradeserial.oper_code , rPack->scust_limit); tTradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tTradeserial.device_id = rPack->lvol7; //采集设备标识 tTradeserial.card_id = tCard.card_id; //卡号 des2src(tTradeserial.showid,tCard.showid); //显示卡号 tTradeserial.purse_id = PURSE_NO_ONE; //钱包号 tTradeserial.customer_id = tCard.cosumer_id; //客户标识 //插入交易流水表 ret = DB_t_tif_tradeserial_add(&tTradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } out_pack->lvol0 = card_id; //交易卡号 out_pack->lvol1 = tCustomer.cut_type; //客户类别 out_pack->lvol5 = tCustomer.fee_type; //收费类别 des2src(out_pack->scust_no,tCard.showid); //显示卡号 des2src(out_pack->scust_no2,tCustomer.classdept_no); //部门号 des2src(out_pack->scust_auth,tCustomer.stuemp_no); //学号 des2src(out_pack->scust_auth2,tCustomer.man_id); //身份证号 des2src(out_pack->sname,tCustomer.cut_name); //客户姓名 des2src(out_pack->sname2,tCustomer.lib_cardid); //图书证号 des2src(out_pack->sstatus0,tCustomer.sex); //性别 des2src(out_pack->sopen_emp,sPwd); //卡密码 des2src(out_pack->sdate0,tCard.end_time); //有效截至日期 out_pack->damt2=D4U5(tAccount.card_balance,2); //卡余额 out_pack->lvol10=tAccount.consume_count; //消费次数 out_pack->lserial1=tTradeserial.serial_no; //流水号 sprintf(out_pack->vsmess,"流水号:%d 卡号:%d 学工号:%s 姓名:%s 卡余额:%.2lf元",tTradeserial.serial_no,card_id,tCustomer.stuemp_no,tCustomer.cut_name,tAccount.card_balance); writelog(LOG_DEBUG,out_pack->vsmess); // add by 汤成 2005-8-8 // 增加向名单表写入记录 ret = InsertToBlkList(card_id,CHCARD_BLACKLIST); if(ret) { *pRetCode = ret; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F930203(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { T_t_door_txdtl txdtl; T_t_pif_card tCard; T_t_pif_device device; T_t_door_events event; int ret; char weigand_no[12+1]=""; memset(&device,0,sizeof device); ret = get_door_dev_by_parent_and_termid(&device,in_pack->lvol2,in_pack->lvol1); if(ret) { writelog(LOG_ERR,"get_door_dev_by_parent_and_termid err,parent_id=[%d],dev_no=[%d],ret=[%d]",in_pack->lvol2,in_pack->lvol1,ret); if(ret == E_DB_DEVICE_N) { return 0; } else { *pRetCode = ret; goto L_RETU; } } if(strlen(in_pack->sdate1) == 0) { //事件 memset(&event,0,sizeof event); event.device_id = device.device_id; event.event_code = atoi(in_pack->semp_no); des2src(event.event_msg,in_pack->vsmess); event.sysid = in_pack->lcert_code; des2src(event.tx_date,in_pack->sdate0); des2src(event.tx_time,in_pack->stime0); getsysdate(event.col_date); getsystime(event.col_time); ret = DB_t_door_events_add(&event); if(ret) { if(DB_REPEAT == ret) return 0; *pRetCode = E_DB_DOOR_TXDTL_I; goto L_RETU; } return 0; } /* else if(strlen(in_pack->sdate1) !=8) { // 流水卡号错误 ret=get_card_by_weigand_no(&tCard,in_pack->sdate1); if(ret) { } writelog(LOG_DEBUG,"数据有误"); return 0; } */ else { memset(&tCard,0,sizeof tCard); ret = get_card_by_phyno(&tCard,in_pack->sdate1); if(ret) { if(ret==E_DB_CARD_N) { ConverPhyNo(in_pack->sdate1,weigand_no); ret=get_card_by_weigand_no(&tCard,weigand_no); if(ret) { writelog(LOG_ERR,"Get_card_by_weigand_no err,weigand_no=[%s],ret=[%d]",weigand_no,ret); // 没有这张卡,仍然保留流水 if(ret != E_DB_CARD_N) { *pRetCode=ret; goto L_RETU; }; } } else { *pRetCode=ret; goto L_RETU; }; } memset(&txdtl,0,sizeof txdtl); txdtl.device_id = device.device_id; txdtl.card_no = tCard.card_id; txdtl.sys_id = in_pack->lcert_code; txdtl.cust_id = tCard.cosumer_id; if(!ret) des2src(txdtl.phycard_no,tCard.physical_no); else des2src(txdtl.phycard_no,in_pack->sdate1); //writelog(LOG_DEBUG,"door serial date[%s] time[%s]",in_pack->sdate0,in_pack->stime0); des2src(txdtl.tx_date,in_pack->sdate0); des2src(txdtl.tx_time,in_pack->stime0); getsysdate(txdtl.col_date); getsystime(txdtl.col_time); txdtl.tx_mark = atoi(in_pack->semp_no); ret = DB_t_door_txdtl_add(&txdtl); if(ret) { // 重复流水忽略 if(DB_REPEAT == ret) { writelog(LOG_DEBUG,"流水重复card[%s],date[%s],time[%s]",in_pack->sdate1 ,in_pack->sdate0,in_pack->stime0); return 0; } writelog(LOG_ERR,"保存流水失败card[%s],date[%s],time[%s]",in_pack->sdate1 ,in_pack->sdate0,in_pack->stime0); *pRetCode = E_DB_DOOR_TXDTL_I; goto L_RETU; } } return 0; L_RETU: return -1; }
int F847127(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_MANUALDRCR; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); des2src(trans.draccno,rPack->sbank_acc); des2src(trans.craccno,rPack->sbank_acc2); trans.inputamt=rPack->damt0; if(amtcmp(trans.inputamt,0)==0) { return E_INPUT_AMT_NULL; } if(!strlen(trans.draccno)) return E_NO_DRACCNO; if(!strlen(trans.craccno)) return E_NO_CRACCNO; if(strcmp(trans.draccno,trans.craccno)==0) { return E_INPUT_2ACTNO_EQ; } des2src(trans.opercode,rPack->scust_limit); des2src(trans.chkopercode,rPack->scust_limit2); trim(rPack->semp_pwd); if(strlen(trans.opercode)==0) { return E_INPUT_OPER_NULL; } if(strlen(trans.chkopercode)==0) { return E_INPUTNULL_CHKOPER; } if(strcmp(trans.opercode,trans.chkopercode)==0) { writelog(LOG_ERR,"oper1[%s]chkoper[%s]",trans.opercode,trans.chkopercode); return E_INPUT_2OPER_EQ; } ret=chk_oper_pwd(trans.chkopercode,rPack->semp_pwd); if(ret) { return ret; } pAccTrans->trans.transamt=pAccTrans->trans.inputamt; pAccTrans->trans.fundtype=0; pAccTrans->trans.transtype=TRANSTYPE_MANDRCR; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; sprintf(trans.remark,"交易金额%.2lf,借方账户[%s]余额%.2lf,贷方账户[%s]余额%.2lf",trans.totaltransamt,trans.draccname,trans.draccaftbal,trans.craccname,trans.craccaftbal); SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); des2src(outPack->sdate3,pAccTrans->trans.sysdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(outPack->vsmess,"%s 借方账户[%s]贷方帐户[%s]",pAccTrans->remark.c_str(),pAccTrans->trans.draccname,trans.craccname); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
//联机冲正,当日即时冲正 int OnlineTransRev(char *oldaccdate,int oldtermid,int oldtermseqno) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); ret=DB_t_transdtl_read_lock_by_c0_and_accdate_and_termid_and_termseqno(oldaccdate,oldtermid,oldtermseqno,&transdtl); if(ret) { writelog(LOG_ERR,"ret[%d]accdate[%s]termid[%d]termseqno[%d]",ret,oldaccdate,oldtermid,oldtermseqno); if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_R; } if('1'==transdtl.revflag[0]) { DB_t_transdtl_free_lock_by_c0(); pAccTrans->remark="该交易已冲正"; return 0; } transdtl.revflag[0]='1'; ret=DB_t_transdtl_update_lock_by_c0(&transdtl); if(ret) { writelog(LOG_ERR,"UpdateTransdtlRevFlag ret[%d]accdate[%s]termid[%d]termseqno[%d]",ret,oldaccdate,oldtermid,oldtermseqno); return ret; } if(transdtl.cardcnt>0&&transdtl.cardno>0) { if(TF_PAY==transdtl.transflag) { ret=UpdateCardBitmap(transdtl.cardno,transdtl.cardcnt,CARDBITMAPTYPE_REV); if(ret) { writelog(LOG_ERR,"UpdateCardBitmap err ret[%d]cardno[%d]cardcnt[%d]",ret,transdtl.cardno,transdtl.cardcnt); } } } if(strlen(transdtl.opercode)) { if(strcmp(transdtl.opercode,pAccTrans->trans.opercode)!=0) { return ERRINFO(E_REVOPER,transdtl.opercode); } } else { des2src(transdtl.opercode,trans.opercode); } /* if(transdtl.cardno) { T_t_card card; memset(&card,0,sizeof(card)); ret=DB_t_card_read_by_cardno(transdtl.cardno,&card); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,transdtl.cardno); else return E_DB_CARD_R; } strcpy(pAccTrans->trans.cardaccno,card.accno); } */ trans.cardno=transdtl.cardno; trans.cardflag=1; trans.offlineflag=1; trans.revflag=1;//冲正标志 trans.cardbefbal=transdtl.cardaftbal; trans.cardaftbal=transdtl.cardbefbal; ret=GetAccnoByCardno(trans.cardno,trans.cardaccno); if(ret) return ret; ret=pAccTrans->doTodayReverseTrans(oldaccdate,oldtermid,oldtermseqno); if(ret) return ret; ret=UpdCardBalByAccno(trans.cardaccno,transdtl.cardbefbal,transdtl.transflag,transdtl.cardcnt,1,0); if(ret) return ret; transdtl.cardaftbal=transdtl.cardbefbal; transdtl.revflag[0]='0'; strcpy(transdtl.accdate,pAccTrans->trans.accdate); strcpy(transdtl.acctime,pAccTrans->trans.acctime); des2src(transdtl.transdate,pAccTrans->trans.transdate); des2src(transdtl.transtime,pAccTrans->trans.transtime); transdtl.transcode= pAccTrans->trans.transcode; transdtl.termid = pAccTrans->trans.termid; transdtl.termseqno = pAccTrans->trans.termseqno; transdtl.amount = -transdtl.amount; transdtl.managefee = -transdtl.managefee; ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } return 0; }