int DoFrozeCard(int cardno) { 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_lock_by_cur_and_cardno(cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,cardno); else return E_DB_CARD_R; } des2src(trans.showcardno,tCard.showcardno); if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOGOUT,cardno); } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_FREEZE,cardno); } tCard.frozeflag[0]='1'; des2src(tCard.frozedate,trans.sysdate); ret=getCardVerNo(tCard.cardverno); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } getfmtsysdatetime(tCard.lastsaved); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_U; } 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 E_NOTEXIST_CUSTOMER; else return E_DB_CUSTOMER_R; } trans.custid=tCard.custid; des2src(trans.custname,customer.custname); } //修改以前的解冻记录为删除状态 UpdCardVerStatus(cardno,CARDVERTYPE_CARDUNFROZE); //更新系统黑名单最大版本号 ret=SetSysParaVal(SYSPARA_MAXBLACKCARDVERNO,tCard.cardverno); if(ret) { return ret; } T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tCard.cardno; des2src(cardver.accdate,pAccTrans->trans.sysdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.cardno=tCard.cardno; des2src(cardver.cardphyid,tCard.cardphyid); des2src(cardver.stuempno,customer.stuempno); cardver.cardvertype=CARDVERTYPE_CARDFROZE; cardver.adddelflag[0]=ADDDELFLAG_ADD; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardverno,tCard.cardverno); 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_msglist tMsgList; memset(&tMsgList,0,sizeof(tMsgList)); AddXmlItemInt(tMsgList.reqdata, XML_KEY_CARDID,tCard.cardno); AddXmlItemStr(tMsgList.reqdata, XML_KEY_VERNUM,tCard.cardverno); AddXmlItemInt(tMsgList.reqdata, XML_KEY_ADDDELSIGN,0); //增删标志 tMsgList.funcno = 930005; tMsgList.pfuncno = 846307; tMsgList.msglevel = MESLIST_PRIORITY_REALTIME; tMsgList.msgtype = MESLIST_TYPE_ORDER; ret=AddMsgLst(&tMsgList); if(ret) { writelog(LOG_ERR,"AddMsgLst err[%d]",ret); return ret; } des2src(trans.summary,cardver.cardverno); return 0; }
int F847121(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; double dSerialno=0; int cardno=0; char cardphyid[16+1]=""; T_t_card tCard; T_t_tif_tradeserial tTradeserial; memset(&tCard,0,sizeof(tCard)); memset(&tTradeserial,0,sizeof(tTradeserial)); cardno=rPack->lvol0; des2src(cardphyid,rPack->sbank_acc); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); /* if(rPack->lvol2!=IS_NO) { 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; } } */ trim(rPack->scust_no); ret=IsInvalidDateTime(rPack->sdate0, "YYYYMMDD"); if(ret) { *pRetCode=ret; goto L_RETU; } //判断卡状态是否为写卡未成功状态 if(cardno==0) { ret=get_cardno_by_physical_no(&cardno,cardphyid); if(ret) { *pRetCode= E_CARDNO_NOT_EXIST; writelog(LOG_ERR,"get_cardno_by_physical_no error,ret=[%d] cardphyid=[%s]",ret,cardphyid); goto L_RETU; } } ret=DB_t_card_read_lock_by_cur_and_cardno(cardno, &tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_R; goto L_RETU; } if('2'==tCard.cardattr[CARDSTAT_TYPE_REG]) { DB_t_card_free_lock_by_cur(); *pRetCode=E_CARD_CLOSE; goto L_RETU; } // if('3'==tCard.cardattr[CARDSTAT_TYPE_REG]) // { // DB_t_card_free_lock_by_cur(); // *pRetCode=E_CARD_CHANGE; // goto L_RETU; // } trim(rPack->scust_no); // if(strlen(rPack->scust_no)!=0) // { // if(strcmp(tCard.showid,rPack->scust_no)!=0) // { // ret=IsExistShowCardNo(rPack->scust_no); // if(ret) // { // DB_t_card_free_lock_by_cur(); // writelog(LOG_ERR,"showcardno[%s]",rPack->scust_no); // *pRetCode=ret; // goto L_RETU; // } // } // } trim(rPack->sbank_acc); if(strcmp(tCard.cardphyid,rPack->sbank_acc)!=0) { DB_t_card_free_lock_by_cur(); writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,rPack->sbank_acc); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } if(strlen(rPack->scust_no)==10) des2src(tCard.showid,rPack->scust_no); if(strlen(rPack->sdate0)==8) des2src(tCard.endtime,rPack->sdate0); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_U; goto L_RETU; } DB_t_card_free_lock_by_cur(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialno); //获得流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU; } tTradeserial.serial_no = D2I(dSerialno); //流水号 tTradeserial.other_seri_no = 0; //上传端流水号 tTradeserial.serial_type = 847121; //交易代码;备注:发卡+充值 用一个交易码,即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.opercode , rPack->scust_limit); tTradeserial.maindeviceid = rPack->lvol6; //上传工作站标识 tTradeserial.deviceid = rPack->lvol7; //采集设备标识 tTradeserial.cardno = tCard.cardno; //卡号 des2src(tTradeserial.showid,tCard.showid); //显示卡号 tTradeserial.purseno = PURSE_NO_ONE; //钱包号 tTradeserial.custid = tCard.custid; //客户标识 // tTradeserial.reviseserial_no=dSerialno; //原写卡失败流水号 des2src(tTradeserial.reserve_1,rPack->scust_limit2); //授权操作员号 des2src(tTradeserial.reserve_2,rPack->semp_pwd); //授权操作员密码 if(rPack->lvol2!=IS_NO) { // 如果写卡余额 tTradeserial.in_balance = rPack->damt0; tTradeserial.out_balance = rPack->damt1; tTradeserial.trade_fee = rPack->damt1 - rPack->damt0; tTradeserial.trade_count = rPack->lvol1+1; } // 插入交易流水表 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; } return 0; L_RETU: return -1; }
int F846305(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int freefeeflag=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_CARDRENEW; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; trans.usecardflag=1; trans.cardno=rPack->lvol0; des2src(trans.showcardno,rPack->sorder0); des2src(trans.cardphyid,rPack->sstation0); if (!strlen(trans.cardphyid)) return E_INPUT_CARDPHYID; // if (!strlen(trans.showcardno)) // return E_INPUT_SHOWCARDNO; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,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) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } trans.cardtype=tCard.cardtype; trans.feetype=tCard.feetype; trans.custid=tCard.custid; 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.badflag[0]) { if((CARDBADFLAG_CARDBAL==tCard.badtype[0])||(CARDBADFLAG_ACCBAL==tCard.badtype[0])) { DB_t_card_free_lock_by_cur(); ERRTIP("该卡余额错误,请使用坏卡修复功能来处理,不必补办"); return E_CARD_BAD_AND_NEED_UPDATE; } } //无卡只有挂失或卡物理损坏的情况下才可以补办卡 if(tCard.lossflag[0]!='1'&& tCard.badflag[0]!='1') { DB_t_card_free_lock_by_cur(); ERRTIP("该卡状态正常,不能补办"); return E_COMMON_ERR; } //检查该客户是否存在未注销的卡 // ret=IsExistOtherCardByCustid(tCard.custid,tCard.cardno); ret=IsExistNormalTmpCardByCustid(tCard.custid); if(ret) { DB_t_card_free_lock_by_cur(); if(DB_EXIST==ret) { ERRTIP("该客户存在正常的过渡临时卡,请先注销过渡临时卡再补办"); return E_EXIST_OTHERCARD; } else return ret; } if('1'==tCard.badflag[0]) { //检查卡是否到了销卡的时间 char enddate[9]=""; ret=calcEndDate(tCard.baddate,pAccTrans->sysPara.iPosdtlMaxDayCnt,enddate); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } if(strncmp(enddate,pAccTrans->trans.transdate,8)>0) { DB_t_card_free_lock_by_cur(); ERRTIP("请等到期后再补办"); return ERRINFO(E_BADCARD_RECORDDATE_NOTREACH,enddate); } if(CARDBADFLAG_QUALITY==tCard.badtype[0]) freefeeflag=1; } else if('1'==tCard.lossflag[0]) { char enddate[9]=""; ret=calcEndDate(tCard.lossdate,pAccTrans->sysPara.iPosdtlMaxDayCnt,enddate); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } if(strncmp(enddate,pAccTrans->trans.transdate,8)>0) { DB_t_card_free_lock_by_cur(); ERRTIP("请等到期后再补办"); return ERRINFO(E_CARDLOSSDATE_NOREACH,enddate); } } ret=getCardVerNo(tCard.cardverno); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } tCard.status[0]=STATUS_DELETE; strcpy(tCard.closedate,trans.transdate); getfmtsysdatetime(tCard.lastsaved); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,tCard.cardno); else return E_DB_CARD_U; } //删除卡库不平表该卡的记录 ret=DelCardAccDiffByCardno(trans.cardno); if(ret) return ret; T_t_customer tCustomer; memset(&tCustomer,0,sizeof(tCustomer)); if(trans.custid>0) { ret=DB_t_customer_read_by_custid(trans.custid,&tCustomer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,trans.custid); else return E_DB_CUSTOMER_R; } trans.custid=tCustomer.custid; des2src(trans.custname,tCustomer.custname); des2src(trans.stuempno,tCustomer.stuempno); } T_t_cardtyperight cardtyperight; memset(&cardtyperight,0,sizeof(cardtyperight)); ret=DB_t_cardtyperight_read_by_cardtype_and_feetype(tCard.cardtype,tCard.feetype,&cardtyperight); if(ret) { writelog(LOG_ERR,"cardtype[%d]feetype[%d]",tCard.cardtype,tCard.feetype); if(DB_NOTFOUND==ret) return E_NOCARDTYPERIGHT; else return E_DB_CARDTYPERIGHT_R; } ////添加旧卡版本号记录 T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tCard.cardno; des2src(cardver.accdate,pAccTrans->trans.sysdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.cardno=tCard.cardno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,tCard.cardphyid); des2src(cardver.stuempno,trans.stuempno); cardver.cardvertype=CARDVERTYPE_CARDCLOSE; des2src(cardver.cardverno,tCard.cardverno); 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_card tCardTest; ret=DB_t_card_read_by_cardphyid_and_status(trans.cardphyid,"1",&tCardTest); 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",&tCardTest); if (ret!=DB_NOTFOUND) { if (DB_SUCCESS==ret) return ERRINFO(E_EXIST_SHOWCARDNO,trans.showcardno); else return E_DB_CARD_R; } int cardtype=0; ret=UseShowCardNo(trans.opercode,trans.showcardno,cardtype); if(ret) { return ret; } if(cardtype!=tCard.cardtype) { return ERRINFO(E_DIFF_CARDTYPE,cardtype,tCard.cardtype); } T_t_carddtl carddtl; memset(&carddtl,0,sizeof(carddtl)); des2src(carddtl.accdate,pAccTrans->trans.sysdate); des2src(carddtl.acctime,trans.systime); carddtl.termid=trans.termid; carddtl.termseqno=trans.termseqno; des2src(carddtl.opercode,trans.opercode); carddtl.cardtype=tCard.cardtype; carddtl.usetype=CARDUSETYPE_USE; carddtl.inoutflag=INOUTFLAG_OUT; carddtl.transcnt=1; strcpy(carddtl.summary,"补办卡"); des2src(carddtl.cardphyid,trans.cardphyid); des2src(carddtl.showcardno,trans.showcardno); ret=DB_t_carddtl_add(&carddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } } //使用卡片 T_t_card tNewCard; memset(&tNewCard,0,sizeof(tNewCard)); des2src(tNewCard.cardphyid,trans.cardphyid); des2src(tNewCard.showcardno,trans.showcardno); des2src(tNewCard.expiredate,tCard.expiredate); des2src(tNewCard.accno,tCard.accno); tNewCard.cardtype=tCard.cardtype; tNewCard.feetype=tCard.feetype; des2src(tNewCard.cardpwd,tCard.cardpwd); tNewCard.custid=tCustomer.custid; tNewCard.lossflag[0]='0'; tNewCard.frozeflag[0]='0'; tNewCard.badflag[0]='0'; tNewCard.status[0]=STATUS_NORMAL; des2src(tNewCard.opendate,pAccTrans->trans.transdate); getfmtsysdatetime(tNewCard.lastsaved); ret = getNewUniqNo(KEYTYPE_CARDNO,&tNewCard.cardno); //获取最大卡号 if(ret) { return ret; } ret=getCardVerNo(tNewCard.cardverno); if(ret) { return ret; } ret=DB_t_card_add(&tNewCard); if(ret) { if(DB_REPEAT==ret) return E_DB_CARD_E; else return E_DB_CARD_I; } ////添加新卡版本号记录 // T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); des2src(cardver.accdate,pAccTrans->trans.sysdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.cardno=tNewCard.cardno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,tNewCard.cardphyid); des2src(cardver.stuempno,trans.stuempno); cardver.cardvertype=CARDVERTYPE_CARDOPEN; des2src(cardver.cardverno,tNewCard.cardverno); 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_cardnochange tCardnoChange; memset(&tCardnoChange,0,sizeof(tCardnoChange)); des2src(tCardnoChange.changedate,pAccTrans->trans.sysdate); tCardnoChange.oldcardno=tCard.cardno; tCardnoChange.newcardno=tNewCard.cardno; ret=DB_t_cardnochange_add(&tCardnoChange); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDNOCHANGE_E; else return E_DB_CARDNOCHANGE_I; } //插入卡位图表 T_t_cardbitmap tCardBitmap; memset(&tCardBitmap,0,sizeof(tCardBitmap)); tCardBitmap.cardno=tNewCard.cardno; tCardBitmap.baseno=0; memset(tCardBitmap.bitmap0,'0',sizeof(tCardBitmap.bitmap0)); memset(tCardBitmap.bitmap1,'0',sizeof(tCardBitmap.bitmap1)); memset(tCardBitmap.bitmap2,'0',sizeof(tCardBitmap.bitmap2)); memset(tCardBitmap.bitmap3,'0',sizeof(tCardBitmap.bitmap3)); memset(tCardBitmap.bitmap4,'0',sizeof(tCardBitmap.bitmap4)); memset(tCardBitmap.bitmap5,'0',sizeof(tCardBitmap.bitmap5)); memset(tCardBitmap.bitmap6,'0',sizeof(tCardBitmap.bitmap6)); memset(tCardBitmap.bitmap7,'0',sizeof(tCardBitmap.bitmap7)); memset(tCardBitmap.bitmap8,'0',sizeof(tCardBitmap.bitmap8)); memset(tCardBitmap.bitmap9,'0',sizeof(tCardBitmap.bitmap9)); tCardBitmap.bitmap0[0]=CARDBITMAPTYPE_INC; 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_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_cardno_and_purseno(trans.cardno,trans.purseno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_CARDNO_PURSENO_NOACCNO,trans.cardno,trans.purseno); else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno); } double subsidyamt=0; int maxsubsidyno=0; //检查补助信息 ret = GetSubsidy(tCard.cardno,tCardAccount.subsidyno,0,subsidyamt,maxsubsidyno); if(ret) { writelog(LOG_ERR,"DoGetSubsidy ret=[%d]",ret); return ret; } strcpy(trans.cardaccno,tCardAccount.accno); //押金处理 // double returncashamt=0; if(freefeeflag) { pAccTrans->SetFreeFlag(); } else { //扣押金 if(amtcmp(tCardAccount.foregift,0)>0) { trans.transamt=tCardAccount.foregift; trans.inputamt=tCardAccount.foregift; trans.fundtype=0; pAccTrans->trans.transtype=TRANSTYPE_FOREGIFT2COSTFEE; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; if(amtcmp(pAccTrans->trans.unusedamt,0)>0) return E_INPUT_AMT; if(amtcmp(pAccTrans->trans.unusedamt,0)<0) return E_AMT_LACK; } } if(amtcmp(tCardAccount.availbal,tCardAccount.lastcardbal)<=0) trans.cardbefbal=D4U5(tCardAccount.availbal+tCardAccount.subsidybal); else trans.cardbefbal=D4U5(tCardAccount.lastcardbal+tCardAccount.subsidybal); if(amtcmp(tCardAccount.subsidybal,0)!=0) { //领取补助 memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(trans.cardaccno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_ACCNO,trans.cardaccno); else return E_DB_ACCOUNT_R; } tCardAccount.availbal=D4U5(tCardAccount.availbal+tCardAccount.subsidybal); tCardAccount.subsidybal=0; ret=DB_t_account_update_lock_by_c0(&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return E_DB_ACCOUNT_U; else return E_DB_ACCOUNT_R; } } if(amtcmp(tCardAccount.balance-tCardAccount.frozebal,trans.cardbefbal)>0) { //走长款处理 trans.transamt=D4U5(tCardAccount.balance-tCardAccount.frozebal-trans.cardbefbal); trans.inputamt=trans.transamt; trans.fundtype=0; pAccTrans->trans.transtype=TRANSTYPE_MORE_CARDBALINCOME; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; if(amtcmp(pAccTrans->trans.unusedamt,0)>0) return E_INPUT_AMT; if(amtcmp(pAccTrans->trans.unusedamt,0)<0) return E_AMT_LACK; } trans.cardflag=1; trans.usecardflag=1; trans.feetype=tCard.feetype; trans.fundtype=rPack->lvol9; trans.cardcnt=1; trans.inputamt=rPack->damt0; if(trans.fundtype>4) { //如果从账户中扣卡成本费,则没有充值业务 trans.fundtype=0; ret=pAccTrans->doFeeTrans(); if(ret) return ret; } else { des2src(trans.voucherno,rPack->scust_auth2); ret=pAccTrans->doTrans(); if(ret) return ret; } ret=pAccTrans->doTransEnd(); if(ret) return ret; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(trans.cardaccno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,trans.cardaccno); else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { DB_t_account_free_lock_by_c0(); return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno); } //取可用余额作为出卡值 trans.cardaftbal=tCardAccount.availbal; if(amtcmp(trans.cardaftbal,0)<0) { DB_t_account_free_lock_by_c0(); return ERRINFO(E_CARD_BALANCE_SHORTAGE,trans.cardaftbal); } if(amtcmp(trans.cardaftbal,tCardAccount.cardmaxbal)>=0) { DB_t_account_free_lock_by_c0(); return ERRINFO(E_AMT_EXCEED_MAX,tCardAccount.cardmaxbal); } tCardAccount.cardno=tNewCard.cardno; tCardAccount.lastcardcnt=1; tCardAccount.lastsubsidyno=maxsubsidyno; tCardAccount.lastcardbal=trans.cardaftbal; des2src(tCardAccount.lasttransdate,trans.transdate); ret=DB_t_account_update_lock_by_c0(&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return E_DB_ACCOUNT_U; else return E_DB_ACCOUNT_R; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); strcpy(transdtl.transdate,trans.transdate); strcpy(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.sysdate); strcpy(transdtl.acctime,trans.systime); transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.cardno=tNewCard.cardno; transdtl.cardcnt=trans.cardcnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.cardaftbal=trans.cardaftbal; transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; transdtl.errcode=0; transdtl.custid=tCustomer.custid; des2src(transdtl.custname,tCustomer.custname); transdtl.showcardno=atol(tNewCard.showcardno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } char cardpwd[33]=""; char key[17]=""; //get_init_passwd_by_man_id(tCustomer.idno,cardpwd); strcpy(key,STATIC_SEED_KEY); EncodePwd(key,cardpwd,tNewCard.cardpwd, 1); 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_LVOL11,F_LVOL12, F_SORDER0,F_SDATE3,F_SEMP, F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); outPack->lvol1=tNewCard.custid; outPack->lsafe_level2=tCustomer.custtype; outPack->lvol5=tNewCard.feetype; des2src(outPack->sall_name,tCustomer.custname); des2src(outPack->spager,tCustomer.stuempno); des2src(outPack->scert_no,tCustomer.deptcode); des2src(outPack->semail2,tCustomer.idno); des2src(outPack->smarket_code,tCustomer.sex); des2src(outPack->sdate0,tNewCard.expiredate); outPack->lvol0=tNewCard.cardno; des2src(outPack->stx_pwd,cardpwd); outPack->lvol4=maxsubsidyno; outPack->lvol8=D4U5(pAccTrans->trans.cardaftbal*100,0); outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); des2src(outPack->sorder0,tNewCard.showcardno); des2src(outPack->sdate3,pAccTrans->trans.sysdate); 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; }
static int doReverse(char* oldaccdate,int oldtermid,int oldtermseqno) { //查找操作员流水 int ret=0; T_t_card tCard; 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) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_R; } if(trans.cardno!=transdtl.cardno) { DB_t_transdtl_free_lock_by_c0(); return E_CARDNO_DIFFER; } if(transdtl.transcode!=TC_POSDEPOSIT&& transdtl.transcode!=TC_POSDEPOSITREV&& transdtl.transcode!=TC_SHOPPOSDEPOSIT&& transdtl.transcode!=TC_SHOPPOSDEPOSITREV&& transdtl.transcode!=TC_CARDDEPOSIT&& transdtl.transcode!=TC_CARDDEPOSITREV) { DB_t_transdtl_free_lock_by_c0(); return E_TRANSCODE_NOT_SAVING; } if(transdtl.revflag[0]=='1') { DB_t_transdtl_free_lock_by_c0(); memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(transdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",transdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } //pAccTrans->remark="该交易已冲正"; //strcpy(cardphyid,tCard.cardphyid); return E_TRANS_REVERSED; } transdtl.revflag[0]='1'; ret=DB_t_transdtl_update_lock_by_c0(&transdtl); if(ret) { return E_DB_TRANSDTL_U; } memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(transdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",transdtl.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,transdtl.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,transdtl.cardno); } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_FREEZE,transdtl.cardno); } if('1'==tCard.lossflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOST,transdtl.cardno); } if('1'==tCard.badflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_BADRECORD,transdtl.cardno); } // strcpy(cardphyid,tCard.cardphyid); getfmtsysdatetime(tCard.lastsaved); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,transdtl.cardno); else return E_DB_CARD_U; } ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_INCREV,0); if(ret) return ret; T_t_transdtl transdtlrev; memset(&transdtlrev,0,sizeof(transdtlrev)); des2src(transdtlrev.transdate,trans.transdate); des2src(transdtlrev.transtime,trans.transtime); des2src(transdtlrev.accdate,pAccTrans->trans.sysdate); strcpy(transdtlrev.acctime,trans.systime); transdtlrev.termid=trans.termid; transdtlrev.termseqno=trans.termseqno; transdtlrev.transcode=trans.transcode; transdtlrev.paytype=0; transdtlrev.cardno=transdtl.cardno; transdtlrev.purseno=transdtl.purseno; transdtlrev.cardcnt=trans.cardcnt; transdtlrev.cardbefbal=trans.cardbefbal; transdtlrev.amount = -transdtl.amount; transdtlrev.managefee= -transdtl.managefee; transdtlrev.custid=transdtl.custid; des2src(transdtlrev.custname,transdtl.custname); if(TC_POSDEPOSITREV==transdtl.transcode|| TC_SHOPPOSDEPOSITREV==transdtl.transcode) transdtlrev.cardaftbal=transdtlrev.cardbefbal+(transdtl.cardbefbal-transdtl.cardaftbal); else transdtlrev.cardaftbal=transdtlrev.cardbefbal-(transdtl.cardaftbal-transdtl.cardbefbal); if(amtcmp(transdtlrev.cardaftbal,0)<0) return ERRINFO(E_CARD_BALANCE_SHORTAGE,transdtlrev.cardaftbal); des2src(transdtlrev.opercode,trans.opercode); transdtlrev.status[0]=DTLSTATUS_SUCCESS; transdtlrev.errcode=0; ret=DB_t_transdtl_add(&transdtlrev); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } ret=pAccTrans->doReverseTrans(oldaccdate,oldtermid,oldtermseqno); if(ret) return ret; trans.cardaftbal=transdtlrev.cardaftbal; trans.transamt=transdtlrev.amount; return 0; }
//有卡退卡 static int CardCloseWithCard(ST_PACK *rPack) { //检查卡 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_lock_by_cur_and_cardno(trans.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); 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); } if(strcmp(tCard.cardphyid,trans.cardphyid)!=0) { DB_t_card_free_lock_by_cur(); // writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,trans.cardphyid); return ERRINFO(E_CARD_PHYNO_DIFFER,trans.cardphyid,tCard.cardphyid); } ret=getCardVerNo(tCard.cardverno); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } tCard.status[0]=STATUS_DELETE; strcpy(tCard.closedate,trans.accdate); des2src(tCard.lastsaved,trans.sysdatetime); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,tCard.cardno); else return E_DB_CARD_U; } trans.cardtype=tCard.cardtype; trans.custid=tCard.custid; trans.feetype=tCard.feetype; des2src(trans.showcardno,tCard.showcardno); T_t_customer tCustomer; memset(&tCustomer,0,sizeof(tCustomer)); if(trans.custid>0) { ret=DB_t_customer_read_lock_by_cur_and_custid(trans.custid,&tCustomer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,trans.custid); else return E_DB_CUSTOMER_R; } if(tCustomer.holdcardcnt) { tCustomer.holdcardcnt--; } des2src(tCustomer.lastsaved,trans.sysdatetime); ret=DB_t_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,trans.custid); else return E_DB_CUSTOMER_U; } des2src(trans.custname,tCustomer.custname); des2src(trans.stuempno,tCustomer.stuempno); } ////添加卡版本号记录 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.cardno=tCard.cardno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,tCard.cardphyid); des2src(cardver.stuempno,trans.stuempno); cardver.cardvertype=CARDVERTYPE_CARDCLOSE; des2src(cardver.cardverno,tCard.cardverno); 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_cardtype tCardType; memset(&tCardType,0,sizeof(tCardType)); ret=DB_t_cardtype_read_by_cardtype(tCard.cardtype,&tCardType); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDTYPE,tCard.cardtype); else return E_DB_CARDTYPE_R; } if(tCardType.reuseable[0]=='1') { if(pAccTrans->sysPara.bEnableCardMgr) { ret=UseShowCardNoBack(trans.opercode,tCard.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=tCard.cardtype; carddtl.usetype=CARDUSETYPE_REUSE; carddtl.inoutflag=INOUTFLAG_IN; carddtl.transcnt=1; strcpy(carddtl.summary,"销户回收卡"); des2src(carddtl.cardphyid,tCard.cardphyid); des2src(carddtl.showcardno,tCard.showcardno); ret=DB_t_carddtl_add(&carddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } } } //读取帐户信息 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; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno); } //检查补助信息 ret=UpdAllUnGetSubsidy(trans.cardno); if(ret) return ret; trans.cardaftbal=D4U5(trans.cardbefbal+tCardAccount.subsidybal); strcpy(trans.cardaccno,tCardAccount.accno); //押金处理 double returncashamt=0; if(tCardAccount.foregift>0) { returncashamt=tCardAccount.foregift; trans.inputamt=tCardAccount.foregift; trans.unusedamt = trans.inputamt; trans.transamt=tCardAccount.foregift; trans.fundtype=0;//0表示从帐户扣 //退押金 pAccTrans->trans.transtype=TRANSTYPE_RETURNFOREGIFT; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; } if(amtcmp(tCardAccount.balance,0)<0)//处理负账户 { trans.inputamt= - tCardAccount.balance; if(amtcmp(trans.inputamt,pAccTrans->sysPara.dAutoRenewAccMaxAmt)>0) { return ERRIF_CARDBAL_OVERDRAW; } trans.unusedamt = trans.inputamt; trans.transamt=trans.inputamt; trans.fundtype=0;//0表示从帐户扣 //营业外支出 pAccTrans->trans.transtype=TRANSTYPE_LESS_CARDBAL; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; trans.cardaftbal=0; } //判断卡余额是否大于账户余额 else if(amtcmp(trans.cardaftbal,tCardAccount.balance)>0) { trans.cardaftbal=tCardAccount.balance; } /* if(amtcmp(cardbal - availbal,pAccTrans->sysPara.dAutoRenewAccMaxAmt)>0) { return ERRINFO(E_CARDBAL_EXCEPTION,cardbal,availbal); } // if(amtcmp(trans.cardbefbal,tCardAccount.availbal)!=0) // { trans.inputamt=D4U5(cardbal-availbal); trans.unusedamt = trans.inputamt; trans.transamt=trans.inputamt; trans.fundtype=0;//0表示从帐户扣 //营业外支出 pAccTrans->trans.transtype=TRANSTYPE_LESS_CARDBAL; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; // } // else // { //如果卡本身余额等于账户余额,则按照卡余额退款 // cardbal=tCardAccount.balance; // } */ else if(amtcmp(trans.cardaftbal,tCardAccount.balance)<0) { //营业外收入 // if('C'==backcardtype) // { //以卡余额为准 trans.inputamt=D4U5(tCardAccount.balance-trans.cardaftbal); trans.unusedamt = trans.inputamt; trans.transamt=trans.inputamt; trans.fundtype=0;//0表示从帐户扣 //营业外支 pAccTrans->trans.transtype=TRANSTYPE_MORE_CARDBALINCOME; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; // } // else // { //以库余额为准 // trans.cardaftbal=tCardAccount.balance; // } } //下面退款按账户金额来退 returncashamt= D4U5(returncashamt+trans.cardaftbal); if(amtcmp(trans.cardaftbal,0)>0) { trans.inputamt=trans.cardaftbal;//按卡余额来退款 trans.unusedamt = trans.inputamt; trans.feetype=tCard.feetype; /* if('1'==backfunctype) { trans.fundtype=PAYTYPE_OUTLAY; des2src(trans.voucherno,rPack->scust_auth2); } */ ret=pAccTrans->doTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; } sprintf(trans.remark,"销户成功,%s,总共应退款%.2lf元",pAccTrans->remark.c_str(),returncashamt); return 0; }
int F847304(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; T_t_card tCard; T_t_tif_writefailed tWriteFailed; T_t_tif_tradeserial tTradeSerial; char logicdate[11] = ""; double dUniqNo = 0; memset(&tCard, 0, sizeof tCard); memset(&tWriteFailed, 0, sizeof tWriteFailed); memset(&tTradeSerial, 0, sizeof(tTradeSerial)); ret = DB_t_tif_tradeserial_read_by_serial_no(in_pack->lvol1, &tTradeSerial); //消费流水号 if (ret) { writelog(LOG_DEBUG,"输入号不存在消费流水号[%d]",in_pack->lvol1); if (DB_NOTFOUND == ret) { *pRetCode = E_DB_TRADESERIAL_N; } else { *pRetCode = E_DB_TRADESERIAL_R; } goto L_RETU; } ret = DB_t_card_read_lock_by_cur_and_cardno(tTradeSerial.cardno, &tCard); if (ret) { if (DB_NOTFOUND == ret) { *pRetCode = E_DB_CARD_N; } else { *pRetCode = E_DB_CARD_R; } goto L_RETU; } ret = DB_t_tif_writefailed_read_by_cardno_and_serial_no(tCard.cardno, tTradeSerial.serial_no, &tWriteFailed); if (ret) { if (DB_NOTFOUND != ret) { *pRetCode = E_DB_WRITEFAILED_R; goto L_RETU; } } else { if (CARDWFAIL_PACKET_DEAL_FLAG_Y == tWriteFailed.deal_flag[0]) *pRetCode = E_WRITEFAILED_DEAL_FLAG_Y; else *pRetCode = E_WRITEFAILED_DEAL_FLAG_N; goto L_RETU; } ret = getNewUniqNo(KEYTYPE_WRITEFAILED, &dUniqNo); // 获得写卡失败表最大ID号 if (ret) { writelog(LOG_ERR,"ret[%d]",ret); *pRetCode = ret; DB_t_card_free_lock_by_cur(); goto L_RETU; } GetLogicDate(logicdate); tWriteFailed.cardno = tCard.cardno; des2src(tWriteFailed.transdate,logicdate); tWriteFailed.id = D2I(dUniqNo); tWriteFailed.serial_no = tTradeSerial.serial_no; tWriteFailed.serial_type = tTradeSerial.serial_type; tWriteFailed.purese_no = tTradeSerial.purseno; tWriteFailed.deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_Y; tWriteFailed.deal_bala = tTradeSerial.trade_fee; // des2src(tWriteFailed.comments, "大钱包写卡失败"); des2src(tWriteFailed.comments, in_pack->vsmess); // 注释写卡失败原因 ret = DB_t_tif_writefailed_add(&tWriteFailed); if (ret) { *pRetCode = E_DB_WRITEFAILED_I; DB_t_card_free_lock_by_cur(); goto L_RETU; } tCard.cardstatus[CARDSTAT_TYPE_WFAIL] = STATE_TRUE; ret = DB_t_card_update_lock_by_cur(&tCard); if (ret) { *pRetCode = E_DB_CARD_U; goto L_RETU; } DB_t_card_free_lock_by_cur(); return 0; L_RETU: return -1; }
static int process(ST_PACK *rPack,InAcc *IA,T_t_tif_tradeserial *p) { int ret =0; int *ptype=NULL; double dSerialNo=0; int upd_flag=0; T_t_aif_account tAccount; T_t_customer tCustomer; T_t_card tCard; T_t_spefee tSpeFee; int cancel_account = 1; double subsidy_money = 0.0; memset(&tCustomer,0,sizeof(tCustomer)); memset(&tAccount,0,sizeof(tAccount)); memset(&tCard,0,sizeof(tCard)); memset(&tSpeFee,0,sizeof(tSpeFee)); //注销原卡 ret=DB_t_card_read_lock_by_cur_and_cardno(p->cardno, &tCard); if(ret) { if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } if(p->cardno!=tCard.cardno) { DB_t_card_free_lock_by_cur(); writelog(LOG_ERR,"cardno[%d] db cardno[%d]",p->cardno,tCard.cardno); return E_DB_CARD_R; } p->depositfee =tCard.depositfee; //押金 // tCard.depositfee=0; des2src(tCard.cardattr,CARDSTAT_LOGOUT); //注销 des2src(tCard.endtime,p->operate_date); //注销日期 ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); return E_DB_CARD_U; } DB_t_card_free_lock_by_cur(); //如果是非记名临时卡则注销客户 ret=DB_t_customer_read_lock_by_cur_and_custid(tCard.custid,&tCustomer); if(ret) { writelog(LOG_ERR,"custid[%d]",tCard.custid); if(DB_NOTFOUND==ret) return E_CUSTOMER_NOT_EXIST; else return E_DB_CUSTOMER_R; } if(CT_TEMP_NONAME==tCard.type_id) { tCustomer.cut_state=CUSTSTAT_LOGOUT; //注销 upd_flag=1; } if(tCustomer.feetype<1) { ret=DB_t_spefee_read_by_deptcode_and_custtype(tCustomer.deptcode, tCustomer.custtype,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.feetype=tCustomer.custtype; } else { DB_t_customer_free_lock_cur(); return E_DB_SPEFEE_R; } } else { tCustomer.feetype=tSpeFee.feetype; } upd_flag=1; } if(upd_flag) { ret=DB_t_customer_update_lock_by_cur(&tCustomer); if(ret) { writelog(LOG_ERR,"custid[%d]",tCard.custid); return E_DB_CUSTOMER_U; } } DB_t_customer_free_lock_cur(); IA->iFeeType=tCustomer.feetype; ret=DB_t_aif_account_read_by_cardno_and_purseno(tCard.cardno,PURSE_NO_ONE, &tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_read_by_cardno_and_purseno ret[%d]cardno[%d]",ret,tCard.cardno); if(DB_NOTFOUND==ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_R; } /*Changed by hhd at 2005-10-22 14:21 处理卡库不平的退卡问题,如果卡库不等,则判断卡余额 是否小于库余额,如果不是这程序退出,否则按照库余额 和卡余额的差值进行退卡。搭伙费按照差值进行计算的余 额进行退还,该账户不注销,等待未上传得流水 */ if(USE_CARD_TYPE_ONLINE==IA->iUseCardFlag) //有卡交易 { if(amtcmp(D4U5(tAccount.cur_freebala,2),IA->dInCardBala)<0) { writelog(LOG_ERR,"cardno[%d] act_id[%s] cur_freebala[%lf],input card_balance[%lf]",tCard.cardno,tAccount.account_id,tAccount.cur_freebala,IA->dInCardBala); return E_CARD_ACC_NO_EQ; } if(amtcmp(D4U5(tAccount.cur_freebala,2),IA->dInCardBala)>0) { writelog(LOG_ERR,"cardno[%d] act_id[%s] cur_freebala[%lf],input card_balance[%lf]",tCard.cardno,tAccount.account_id,tAccount.cur_freebala,IA->dInCardBala); //只修改发生额,搭伙费全退,流水入账模块进行处理吧 p->trade_fee = IA->dInCardBala; //可用余额//Changed by hhd at 2005-10-22 14:21 strcpy(p->reserve_2,"卡库不符|按卡余额退卡"); // 不销户 cancel_account = 0; //p->managefee = (D4U5(tAccount.cur_freebala,2)-IA->dInCardBala); } else p->trade_fee = tAccount.cur_freebala; } else { p->trade_fee = tAccount.cur_freebala; //可用余额//Changed by hhd at 2005-10-22 14:21 } des2src(IA->sArrInActno[0],tAccount.account_id); //卡帐户 // 是否退未领取补助, 先退补助 if(IS_YES==rPack->lvol4) { // 计算未领取补助金额 if(USE_CARD_TYPE_ONLINE==IA->iUseCardFlag) //有卡交易 ret = do_refundment_subsidy(&tAccount,&subsidy_money,p->opercode,rPack->lvol5); else ret = do_refundment_subsidy(&tAccount,&subsidy_money,p->opercode,-1); if(ret) { return ret; } /* ret = do_accounting_subsidy(IA,subsidy_money); if(ret) { writelog(LOG_ERR,"accounting subsidy error,ret[%d]",ret); return ret; } */ if(amtcmp(subsidy_money,0.0)>0) { IA->dArrInAmt[4] = subsidy_money; } else { IA->dArrInAmt[5] = -subsidy_money; } p->trade_fee += subsidy_money; //IA->dInCardBala += subsidy_money; writelog(LOG_DEBUG,"account[%s]cardid[%d],subsidy_money[%.2f]", tAccount.account_id,tAccount.cardno,subsidy_money); } ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo); //获得最大流水号 if(ret) { return ret; } //把预提费用转为学校收益 p->serial_no=D2I(dSerialNo); des2src(p->showid,tCard.showid); //显示卡号 p->in_fee = 0; //管理费/手续费 //p->trade_fee = tAccount.cur_freebala; //可用余额//Changed by hhd at 2005-10-22 14:21 p->managefee = tAccount.cur_frozebala; //冻结金额//Changed by hhd at 2005-10-22 14:21 IA->iTradeNo=p->serial_type; //交易码 IA->iMainDevId=p->maindeviceid; //工作站标识 IA->iDevId=p->deviceid; //设备ID IA->iSerialNo=p->serial_no; //流水号 des2src(IA->sTxDate,p->operate_date); //交易日期 des2src(IA->sTxTime,p->operate_time); //交易时间 des2src(IA->sTxCollectDate,p->collect_date); //采集日期 des2src(IA->sTxCollectTime,p->collect_time); //采集时间 des2src(IA->sTxAccDate,p->enteract_date); //记账日期 des2src(IA->sTxAccTime,p->enteract_time); //记账时间 ptype=(int*)IA->pVoidPointer; switch(*ptype) { 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: writelog(LOG_ERR,"type[%d]",*ptype); IA->iArrInFeeSwitch[1]=1; break; } IA->pVoidPointer=NULL; //是否退卡余额和搭伙费 if(IS_YES==rPack->lvol3) { IA->iArrInFeeSwitch[5]=1; } //是否退押金 if(IS_YES==rPack->lvol2) { IA->iArrInFeeSwitch[6]=1; } IA->dArrInAmt[0]=p->trade_fee; //卡余额 IA->dArrInAmt[1]=p->managefee; //搭伙费 IA->dArrInAmt[2]=p->depositfee; //押金 ret=AccountProcess(IA); if(ret) { writelog(LOG_ERR,"AccountProcess ret[%d]",ret); return ret; } //注销帐户 memset(&tAccount,0,sizeof(tAccount)); ret=DB_t_aif_account_read_lock_by_cur_and_account_id(IA->sArrInActno[0],&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_read_lock_by_cur_and_account_id ret[%d]account_id[%s]",ret,IA->sArrInActno[0]); if(DB_NOTFOUND==ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_R; } //Changed by hhd at 2005-10-22 14:21 //修改账户状态时,这些账户置为4临时状态 //等待未上传流水回传入账 //if(strcmp(p->reserve_2,"卡库不符|按卡余额退卡")==0) if(!cancel_account) { tAccount.current_state= ACCOUNTSTAT_TEMP; //临时状态 } else { tAccount.current_state= ACCOUNTSTAT_LOGOUT; //注销 } des2src(tAccount.close_date,p->operate_date); //销户日期 des2src(tAccount.close_time,p->operate_time); //销户时间 ret=DB_t_aif_account_update_lock_by_cur(&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_update_lock_by_cur ret[%d]account_id[%s]",ret,tAccount.account_id); if(DB_NOTFOUND==ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_U; } DB_t_aif_account_free_lock_cur(); writelog(LOG_ERR,"out_balance= [%f]",IA->dOutCardBala); if(amtcmp(IA->dOutCardBala,0)>0) { return E_ENTER_ACCOUNT; } p->out_balance=0; //出卡值 /* ret = process_change_card(&tCustomer,&tCard); return ret; */ 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 F847122(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int cardno=0; T_t_card tCard; T_t_aif_account tAccount; memset(&tCard,0,sizeof(tCard)); memset(&tAccount,0,sizeof(tAccount)); cardno=rPack->lvol0; if(cardno<1) { *pRetCode=E_INPUT_CARDNO; goto L_RETU; } if(rPack->lvol10<1) { *pRetCode=E_INPUT_CARD_TXCNT; goto L_RETU; } if(amtcmp(rPack->damt0,0)<0) { *pRetCode=E_INPUT_CARD_BALA; goto L_RETU; } //判断卡状态是否为写卡未成功状态 ret=DB_t_card_read_lock_by_cur_and_cardno(cardno, &tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_R; goto L_RETU; } if(cardno!=tCard.cardno) { writelog(LOG_ERR,"cardno[%d] db cardno[%d]",cardno,tCard.cardno); DB_t_card_free_lock_by_cur(); *pRetCode=E_DB_CARD_R; goto L_RETU; } if(strncmp(tCard.cardattr,CARDSTAT_REG,4)!=0) { DB_t_card_free_lock_by_cur(); if('2'==tCard.cardattr[CARDSTAT_TYPE_REG]) *pRetCode=E_CARD_CLOSE; else if('3'==tCard.cardattr[CARDSTAT_TYPE_REG]) return 0; else if(STATE_TRUE==tCard.cardattr[CARDSTAT_TYPE_LOST]) *pRetCode=E_CARD_LOST; else if(STATE_TRUE==tCard.cardattr[CARDSTAT_TYPE_FREEZE]) *pRetCode=E_CARD_FREEZE; else if(STATE_TRUE==tCard.cardattr[CARDSTAT_TYPE_WFAIL]) *pRetCode=E_CARDNO_WFAIL; goto L_RETU; } trim(rPack->sbank_acc); if(strcmp(tCard.cardphyid,rPack->sbank_acc)!=0) { DB_t_card_free_lock_by_cur(); writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,rPack->sbank_acc); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } tCard.cardattr[CARDSTAT_TYPE_REG]='3'; ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_U; goto L_RETU; } DB_t_card_free_lock_by_cur(); //注销帐户 ret=DB_t_aif_account_read_lock_by_cur4_and_cardno_and_purseno(cardno,PURSE_NO_ONE, &tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_read_lock_by_cur4_and_cardno_and_purseno ret[%d]cardno[%d]",ret,cardno); if(DB_NOTFOUND==ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_R; } tAccount.consume_count=rPack->lvol10; tAccount.card_balance=rPack->damt0; ret=DB_t_aif_account_update_lock_by_cur4(&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) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_U; } DB_t_aif_account_free_lock_cur4(); return 0; L_RETU: return -1; }
static int doReverse(char* oldaccdate,int oldtermid,int oldtermseqno,char *cardphyid) { //查找操作员流水 int ret=0; T_t_card tCard; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; trans.revflag=1;//冲正标志 char transdtlname[61]={0}; ret=GetTransdtlTableName(oldaccdate,transdtlname); if(ret) { writelog(LOG_ERR,"GetTransdtlTableName err"); return ret; } T_t_transdtl transdtl; ret=ReadTransdtlData(transdtlname,oldaccdate,oldtermid,oldtermseqno,transdtl); if(ret) { writelog(LOG_ERR,"ReadTransdtlData transdtlname[%s],oldaccdate[%s],oldtermid[%d],oldtermseqno[%d]",transdtlname,oldaccdate,oldtermid,oldtermseqno); return ret; } trans.cardno=transdtl.cardno; if('1'==transdtl.revflag[0]) { memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(transdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",transdtl.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,tCard.cardno); else return E_DB_CARD_R; } pAccTrans->remark="该交易已冲正"; strcpy(cardphyid,tCard.cardphyid); return 0; } if(transdtl.cardcnt>0&&transdtl.cardno>0) { ret=UpdateCardBitmap(transdtl.cardno,transdtl.cardcnt,CARDBITMAPTYPE_REV); if(ret) return ret; } if(strlen(transdtl.opercode)) { if(strcmp(transdtl.opercode,pAccTrans->trans.opercode)!=0) { return ERRINFO(E_REVOPER,transdtl.opercode); } } else { des2src(transdtl.opercode,trans.opercode); } ret=UpdateTransdtlHisRevFlag(transdtlname,oldaccdate,oldtermid,oldtermseqno); if(ret) { writelog(LOG_ERR,"UpdateTransdtlRevFlag ret[%d] transdtlname[%s]accdate[%s]termid[%d]termseqno[%d]",ret,transdtlname,oldaccdate,oldtermid,oldtermseqno); return ret; } transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); des2src(transdtl.opercode,trans.opercode); transdtl.transcode=TC_CARDOPENREV; transdtl.cardcnt=trans.paycnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.cardaftbal=0; transdtl.amount=-transdtl.amount; if(amtcmp(trans.cardbefbal,0)>0) { transdtl.transflag=TF_PAY; transdtl.cardcnt=trans.paycnt; } transdtl.managefee=-transdtl.managefee; transdtl.revflag[0]=0; ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(transdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",transdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOGOUT,transdtl.cardno); } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_FREEZE,transdtl.cardno); } if('1'==tCard.lossflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOST,transdtl.cardno); } if('1'==tCard.badflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_BADRECORD,transdtl.cardno); } ret=getCardVerNo(tCard.cardverno); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } tCard.status[0]=STATUS_DELETE; strcpy(cardphyid,tCard.cardphyid); strcpy(tCard.closedate,trans.transdate); des2src(tCard.lastsaved,trans.sysdatetime); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_U; } T_t_customer tCustomer; memset(&tCustomer,0,sizeof(tCustomer)); //检查客户 if(tCard.custid) { ret=DB_t_customer_read_lock_by_cur_and_custid(tCard.custid,&tCustomer); if(ret) { writelog(LOG_ERR,"custid[%d]",tCard.custid); if(DB_NOTFOUND==ret) return E_DB_CUSTOMER_N; else return E_DB_CUSTOMER_R; } if(tCustomer.status[0]!=STATUS_NORMAL) { DB_t_customer_free_lock_cur(); return E_CUSTOMER_LOGOUT; } tCustomer.holdcardcnt--; des2src(tCustomer.lastsaved,trans.sysdatetime); ret=DB_t_customer_update_lock_by_cur(&tCustomer); if(ret) { writelog(LOG_ERR,"custid[%d]",tCard.custid); if(DB_NOTFOUND==ret) return E_DB_CUSTOMER_N; else return E_DB_CUSTOMER_U; } des2src(trans.stuempno,tCustomer.stuempno); } ////添加卡版本号记录 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.cardno=tCard.cardno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,tCard.cardphyid); des2src(cardver.stuempno,tCustomer.stuempno); cardver.cardvertype=CARDVERTYPE_CARDCLOSE; des2src(cardver.cardverno,tCard.cardverno); ret=DB_t_cardver_add(&cardver); if(ret) { writelog(LOG_ERR,"cardverno[%s]",cardver.cardverno); if(DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } if(pAccTrans->sysPara.bEnableCardMgr) { ret=UseShowCardNoRev(tCard.showcardno); if(ret) return ret; trans.cardno=tCard.cardno; T_t_carddtl carddtl; memset(&carddtl,0,sizeof(carddtl)); des2src(carddtl.accdate,trans.accdate); des2src(carddtl.acctime,trans.acctime); carddtl.termid=trans.termid; carddtl.termseqno=trans.termseqno; des2src(carddtl.opercode,trans.opercode); carddtl.cardtype=tCard.cardtype; carddtl.usetype=CARDUSETYPE_GET; carddtl.inoutflag=INOUTFLAG_IN; carddtl.transcnt=1; strcpy(carddtl.summary,"发卡冲正"); des2src(carddtl.cardphyid,tCard.cardphyid); des2src(carddtl.showcardno,tCard.showcardno); ret=DB_t_carddtl_add(&carddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } } /* //回收卡 T_t_cardbook tCardBook; memset(&tCardBook,0,sizeof(tCardBook)); ret=getCardBookRecordNo(tCardBook.recordno); if(ret) return ret; tCardBook.cardtype=tCard.cardtype; // strcpy(tCardBook.curno,tCard.showcardno); // strcpy(tCardBook.startno,tCard.showcardno); // strcpy(tCardBook.endno,tCard.showcardno); //// tCardBook.usedcnt=0; // tCardBook.unusedcnt=1; tCardBook.status[0]=STATUS_NORMAL; strcpy(tCardBook.opercode,trans.opercode); ret=DB_t_cardbook_add(&tCardBook); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDBOOK_E; else return E_DB_CARDBOOK_I; } //添加卡片回收明细记录 T_t_carddtl tCarddtl; memset(&tCarddtl,0,sizeof(tCarddtl)); des2src(tCarddtl.accdate,pAccTrans->sysPara.sSettleDate); tCarddtl.termid=trans.termid; tCarddtl.termseqno=trans.termseqno; tCarddtl.cardtype=tCard.cardtype; des2src(tCarddtl.showcardno,tCard.showcardno); des2src(tCarddtl.cardphyid,tCard.cardphyid); tCarddtl.cardusetype=CARDUSETYPE_REUSE; des2src(tCarddtl.opercode,trans.opercode); ret=DB_t_carddtl_add(&tCarddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } */ //删除卡交易位图数据 /* ret=DB_t_cardbitmap_del_by_cardno(tCard.cardno); if(ret) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); return E_DB_CARDBITMAP_D; } */ T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { writelog(LOG_ERR,"transdtl.cardno[%d],transdtl.purseno[%d]",transdtl.cardno,transdtl.purseno); if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDACCNO; else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return E_CARDACC_LOGOUT; } des2src(trans.cardaccno,tCardAccount.accno); ret=pAccTrans->doHistoryReverseTrans(oldaccdate,oldtermid,oldtermseqno); if(ret) { if(E_DB_ACCDTL_N!=ret) return ret; } //注销帐户 memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(tCard.accno,&tCardAccount); if(ret) { writelog(LOG_ERR,"transdtl.cardno[%d],transdtl.purseno[%d]",transdtl.cardno,transdtl.purseno); if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDACCNO; else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { DB_t_account_free_lock_by_c0(); return E_CARDACC_LOGOUT; } if(amtcmp(tCardAccount.balance,0)!=0) { writelog(LOG_ERR,"balance[%.2lf]",tCardAccount.balance); DB_t_account_free_lock_by_c0(); return E_CARDACC_BALANCE_NOZERO; } if(amtcmp(tCardAccount.foregift,0)!=0) { writelog(LOG_ERR,"foregift[%.2lf]",tCardAccount.foregift); DB_t_account_free_lock_by_c0(); return E_CARDACC_FOREGIFT_NOZERO; } tCardAccount.status[0]=STATUS_DELETE; tCardAccount.cardbal=0; strcpy(tCardAccount.closedate,trans.transdate); ret=DB_t_account_update_lock_by_c0(&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDACCNO; else return E_DB_ACCOUNT_U; } return 0; }
static int doReverse(ST_PACK *rPack,char* oldaccdate,int oldtermid,int oldtermseqno) { //查找操作员流水 int ret=0; T_t_card tCard; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; trans.cardno=rPack->lvol0; T_t_cardtransdtl cardtransdtl; memset(&cardtransdtl,0,sizeof(cardtransdtl)); ret=DB_t_cardtransdtl_read_lock_by_c0_and_accdate_and_termid_and_termseqno(oldaccdate,oldtermid,oldtermseqno,&cardtransdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_CARDTRANSDTL_N; else return E_DB_CARDTRANSDTL_R; } if(trans.cardno!=cardtransdtl.cardno) { DB_t_cardtransdtl_free_lock_by_c0(); return E_CARDNO_DIFFER; } if(cardtransdtl.transcode!=TC_POSDRAW&& cardtransdtl.transcode!=TC_POSDRAW) { DB_t_cardtransdtl_free_lock_by_c0(); return E_TRANSCODE_NOT_DRAW; } if(cardtransdtl.revflag[0]=='1') { DB_t_cardtransdtl_free_lock_by_c0(); memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(cardtransdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardtransdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } pAccTrans->remark="该交易已冲正"; //strcpy(cardphyid,tCard.cardphyid); return 0; } cardtransdtl.revflag[0]='1'; ret=DB_t_cardtransdtl_update_lock_by_c0(&cardtransdtl); if(ret) { return E_DB_CARDTRANSDTL_U; } memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(cardtransdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardtransdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return E_CARD_LOGOUT; } if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]=='1') { DB_t_card_free_lock_by_cur(); return E_CARDNO_FREEZE; } if(tCard.cardattr[CARDSTAT_TYPE_LOST]=='1') { DB_t_card_free_lock_by_cur(); return E_CARDNO_LOST; } // strcpy(cardphyid,tCard.cardphyid); getfmtsysdatetime(tCard.lastsaved); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_U; } T_t_cardtransdtl cardtransdtlrev; memset(&cardtransdtlrev,0,sizeof(cardtransdtlrev)); des2src(cardtransdtlrev.transdate,trans.transdate); des2src(cardtransdtlrev.transtime,trans.transtime); des2src(cardtransdtlrev.accdate,trans.accdate); strcpy(cardtransdtlrev.acctime,trans.acctime); cardtransdtlrev.termid=trans.termid; cardtransdtlrev.termseqno=trans.termseqno; cardtransdtlrev.custid=cardtransdtl.custid; cardtransdtlrev.transcode=trans.transcode; cardtransdtlrev.paytype=0; cardtransdtlrev.cardno=cardtransdtl.cardno; cardtransdtlrev.purseno=cardtransdtl.purseno; cardtransdtlrev.cardcnt=rPack->lvol6+1; cardtransdtlrev.cardbefbal=rPack->lvol7/100.0; cardtransdtlrev.amount=cardtransdtl.amount; cardtransdtlrev.cardaftbal=cardtransdtlrev.cardbefbal+(cardtransdtl.cardaftbal-cardtransdtl.cardbefbal); des2src(cardtransdtlrev.opercode,trans.opercode); cardtransdtlrev.status[0]=DTLSTATUS_SUCCESS; cardtransdtlrev.errcode=0; ret=DB_t_cardtransdtl_add(&cardtransdtlrev); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDTRANSDTL_E; else return E_DB_CARDTRANSDTL_I; } ret=pAccTrans->doReverseTrans(oldaccdate,oldtermid,oldtermseqno); if(ret) return ret; trans.cardaftbal=cardtransdtlrev.cardaftbal; return 0; }
int F846305(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int i=0; int ret=0; char sysdate[9]=""; char systime[7]=""; char sMsg[256]=""; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->checkCfgUpdate(); if(ret) return ret; pAccTrans->clear(); ret=pAccTrans->initOperDtl(rPack->semp); if(ret) return ret; GetCpackDataString(rPack,pAccTrans->cpackdata); pAccTrans->trans.transcode=TC_CARDRENEW; ret=pAccTrans->addOperDtl(); if(ret) return ret; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); //检查操作员 //检查客户 T_t_customer tCustomer; T_t_card tOldCard; memset(&tCustomer,0,sizeof(tCustomer)); memset(&tOldCard,0,sizeof(tOldCard)); int cardno=rPack->lvol0; ret=check(cardno,tCustomer,tOldCard); if(ret) return ret; //注销原卡 ret=DB_t_card_read_lock_by_cur_and_cardno(tOldCard.cardno,&tOldCard); if(ret) { writelog(LOG_ERR,"lost_cardno[%d]",tOldCard.cardno); if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } tOldCard.status[0]=STATUS_LOGOUT; //注销 des2src(tOldCard.closedate,sysdate); //注销日期 ret=DB_t_card_update_lock_by_cur(&tOldCard); if(ret) { writelog(LOG_ERR,"lost_cardno[%d]",tOldCard.cardno); if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } //使用卡片 T_t_card tCard; memset(&tCard,0,sizeof(tCard)); des2src(tCard.cardphyid,rPack->sstation0); des2src(tCard.showcardno,rPack->sorder0); des2src(tCard.expiredate,tOldCard.expiredate); tCard.cardtype=tOldCard.cardtype; tCard.feetype=tOldCard.feetype; des2src(tCard.cardpwd,tOldCard.cardpwd); ret=chkShowCardNo(trans.opercode,tCard.cardtype,tCard.showcardno); if(ret) { return ret; } char cardpwd[33]=""; char key[17]=""; //get_init_passwd_by_man_id(tCustomer.idno,cardpwd); strcpy(key,STATIC_SEED_KEY); EncodePwd(key,cardpwd,tOldCard.cardpwd, 1); ret=AddCard(tCustomer,tCard); if(ret) return ret; //添加卡片使用明细 T_t_carddtl tCarddtl; memset(&tCarddtl,0,sizeof(tCarddtl)); /////////////////////////////////rPack2TableStuct//////////////////////// des2src(tCarddtl.accdate,trans.accdate); tCarddtl.termid=trans.termid; tCarddtl.termseqno=trans.termseqno; tCarddtl.cardtype=tCard.cardtype; des2src(tCarddtl.showcardno,tCard.showcardno); des2src(tCarddtl.cardphyid,tCard.cardphyid); tCarddtl.cardusetype[0]=CARDUSETYPE_OPENCARD; des2src(tCarddtl.opercode,trans.opercode); ret=DB_t_carddtl_add(&tCarddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } //添加换卡记录 T_t_cardinstead tCardinstead; memset(&tCardinstead,0,sizeof(tCardinstead)); des2src(tCardinstead.accdate,trans.accdate); tCardinstead.termid=trans.termid; tCardinstead.termseqno=trans.termseqno; tCardinstead.oldcardno=tOldCard.cardno; des2src(tCardinstead.oldcardphyid,tOldCard.cardphyid); tCardinstead.cardno=tCard.cardno; des2src(tCardinstead.cardphyid,tCard.cardphyid); ret=DB_t_cardinstead_add(&tCardinstead); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDINSTEAD_E; else return E_DB_CARDINSTEAD_I; } //插入卡位图表 T_t_cardbitmap tCardBitmap; tCardBitmap.cardno=tCard.cardno; tCardBitmap.baseno=0; memset(tCardBitmap.bitmap,'0',sizeof(tCardBitmap.bitmap)); tCardBitmap.bitmap[0]='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_account tCardaccount; memset(&tCardaccount,0,sizeof(tCardaccount)); ret=DB_t_account_read_lock_by_c1_and_cardno_and_purseno(tOldCard.cardno,PURSE_NO_ONE,&tCardaccount); if(ret) { if(DB_NOTFOUND==ret) return E_DB_ACCOUNT_N; else return E_DB_ACCOUNT_R; } tCardaccount.cardno=tCard.cardno; //考虑补助 tCardaccount.availbal= tCardaccount.availbal+ tCardaccount.subsidybal; tCardaccount.subsidybal=0; tCardaccount.lastcardcnt=1; tCardaccount.lastcardbal=tCardaccount.availbal; getsysdate(tCardaccount.lasttransdate); ret=DB_t_account_update_lock_by_c1(&tCardaccount); if(ret) { return E_DB_ACCOUNT_U; } /////////////////////////////// pAccTrans->trans.usecardflag=1; pAccTrans->trans.custid=tCustomer.custid; pAccTrans->trans.feetype=tCard.feetype; ////////////////////////////// pAccTrans->trans.fundtype=rPack->lvol9; pAccTrans->trans.inputamt=rPack->damt0; des2src(pAccTrans->cti.cardaccno,tCardaccount.accno); pAccTrans->cti.cardno=tCardaccount.cardno; pAccTrans->cti.purseno=tCardaccount.purseno; pAccTrans->cti.cardtype=tCard.cardtype; pAccTrans->cti.cardbefbal=0; pAccTrans->cti.cardaftbal=0; pAccTrans->cti.cardcnt=1; pAccTrans->cti.calaftbalflag=0; ret=pAccTrans->doAccTrans(); if(ret) return ret; T_t_cardtransdtl cardtransdtl; memset(&cardtransdtl,0,sizeof(cardtransdtl)); strcpy(cardtransdtl.transdate,trans.transdate); strcpy(cardtransdtl.transtime,trans.transtime); strcpy(cardtransdtl.accdate,trans.accdate); strcpy(cardtransdtl.acctime,trans.acctime); cardtransdtl.termid=trans.termid; cardtransdtl.termseqno=trans.termseqno; cardtransdtl.transcode=trans.transcode; des2src(cardtransdtl.opercode,trans.opercode); cardtransdtl.status[0]=DTLSTATUS_SUCCESS; cardtransdtl.errcode=0; ret=DB_t_cardtransdtl_add(&cardtransdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDTRANSDTL_E; else return E_DB_CARDTRANSDTL_I; } SetCol(handle,F_LVOL1,F_LSAFE_LEVEL2,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_SORDER0,F_SDATE3,F_SEMP, F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); outPack->lvol1=tCustomer.custid; outPack->lsafe_level2=tCustomer.custtype; outPack->lvol5=tCard.feetype; des2src(outPack->sall_name,tCustomer.custname); des2src(outPack->spager,tCustomer.stuempno); des2src(outPack->scert_no,tCustomer.deptcode); des2src(outPack->semail2,tCustomer.idno); des2src(outPack->smarket_code,tCustomer.sex); des2src(outPack->sdate0,tCard.expiredate); outPack->lvol0=tCard.cardno; des2src(outPack->stx_pwd,cardpwd); outPack->lvol8=0; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->sdate3,trans.accdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; strcpy(outPack->vsmess,pAccTrans->remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int DoUnlossCard(int cardno) { int ret=0; T_t_card tCard; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; trans.transcode=TC_CARDUNLOSS; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(cardno,&tCard); if (ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if (DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,cardno); else return E_DB_CARD_R; } des2src(trans.showcardno,tCard.showcardno); if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOGOUT,trans.cardno); } // if('1'!=tCard.lossflag[0]) // { // DB_t_card_free_lock_by_cur(); // return ERRINFO(E_CARDNO_NOLOST,trans.cardno); // } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_cur(); ERRTIP("请先解冻后再解挂"); return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.badflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_BADRECORD,trans.cardno); } //判断是否存在过渡临时卡 if(CARDTYPE_TEMP!=tCard.cardtype) { ret=IsExistNormalTmpCardByCustid(tCard.custid); if(ret) { DB_t_card_free_lock_by_cur(); if(DB_EXIST==ret) { //锁定该卡,该卡只能销户 ERRTIP("该客户存在卡状态正常的过渡临时卡,请先退掉过卡状态正常的渡临时卡再解挂"); return E_EXIST_NORMALCARD; } else return ret; } } else { //检查是否存在其他正常的卡 ret=IsExistOtherNormalCardByCustid(tCard.custid,tCard.cardno); if(ret) { if(DB_EXIST==ret) { //锁定该卡,该卡只能销户 TIPINFO("该客户存在卡状态正常的其他卡,该卡解挂后将不能再使用,请解挂后注销该卡!"); tCard.lockflag[0]='1'; des2src(tCard.lockdate,trans.accdate); } else { DB_t_card_free_lock_by_cur(); return ret; } } } tCard.lossflag[0]='0'; tCard.lossdate[0]=0; ret=getCardVerNo(tCard.cardverno); if (ret) { DB_t_card_free_lock_by_cur(); return ret; } des2src(tCard.lastsaved,trans.sysdatetime); ret=DB_t_card_update_lock_by_cur(&tCard); if (ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if (DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_U; } 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 E_NOTEXIST_CUSTOMER; else return E_DB_CUSTOMER_R; } trans.custid=tCard.custid; des2src(trans.custname,customer.custname); des2src(trans.stuempno,customer.stuempno); } UpdCardVerStatus(cardno,CARDVERTYPE_CARDLOSS); if('1'==tCard.lockflag[0]) { //不下发名单 strcpy(trans.summary,"000101010101"); return 0; } //更新系统黑名单最大版本号 ret=SetSysParaVal(SYSPARA_MAXBLACKCARDVERNO,tCard.cardverno); 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.cardno=tCard.cardno; des2src(cardver.cardphyid,tCard.cardphyid); des2src(cardver.stuempno,customer.stuempno); cardver.cardvertype=CARDVERTYPE_CARDUNLOSS; cardver.adddelflag=ADDDELFLAG_DEL; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardverno,tCard.cardverno); ret=DB_t_cardver_add(&cardver); if (ret) { if (DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } des2src(trans.summary,cardver.cardverno); char broadcastblkflag[20]={0}; ret=GetSysParaVal(SYSPARA_BROADCASTBLKLIST,broadcastblkflag); if(ret) { if(DB_NOTFOUND==ret) return 0; else return E_DB_SYSKEY_R; } if(broadcastblkflag[0]!='1') return 0; T_t_msglist tMsgList; memset(&tMsgList,0,sizeof(tMsgList)); AddXmlItemInt(tMsgList.reqdata, XML_KEY_CARDID,tCard.cardno); AddXmlItemStr(tMsgList.reqdata, XML_KEY_VERNUM,tCard.cardverno); AddXmlItemInt(tMsgList.reqdata, XML_KEY_ADDDELSIGN,1); //增删标志 tMsgList.funcno = 930005; tMsgList.pfuncno = 846307; tMsgList.msglevel = MESLIST_PRIORITY_REALTIME; tMsgList.msgtype = MESLIST_TYPE_ORDER; ret=AddMsgLst(&tMsgList); if(ret) { writelog(LOG_ERR,"AddMsgLst err[%d]",ret); return ret; } return 0; }
static int doCard(TRANS& trans,T_t_card& tCard) { int ret=0; ret=DB_t_card_read_lock_by_cur_and_cardno(trans.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); 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); } //比较卡物理ID是否相同 if(strcmp(tCard.cardphyid,trans.cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,trans.cardphyid); DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_PHYNO_DIFFER,trans.cardphyid,tCard.cardphyid); } //回收卡 T_t_cardtype tCardType; memset(&tCardType,0,sizeof(tCardType)); ret=DB_t_cardtype_read_by_cardtype(tCard.cardtype,&tCardType); if(tCardType.recycleable[0]!='1') { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARDTYPE_CANNOT_REUSE,tCardType.cardtype); } if(tCardType.fixdaycnt<1) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_NOSET_CARDTYPE_VALIDDAYS,tCardType.cardtype); } ret=calcEndDate(trans.transdate,tCardType.fixdaycnt,tCard.expiredate); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } char cardpwd[33]=""; char key[17]=""; get_init_passwd_by_man_id("",cardpwd); strcpy(key,STATIC_SEED_KEY); EncodePwd(key,cardpwd,tCard.cardpwd, 0); // memset(tCard.cardstatus,'0',sizeof(tCard.cardstatus)); des2src(tCard.lastsaved,trans.sysdatetime); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_U; } //用来输出卡密码 strcpy(tCard.cardpwd,cardpwd); /* //添加卡片回收明细记录 T_t_carddtl tCarddtl; memset(&tCarddtl,0,sizeof(tCarddtl)); /////////////////////////////////rPack2TableStuct//////////////////////// des2src(tCarddtl.accdate,pAccTrans->sysPara.sSettleDate); tCarddtl.termid=trans.termid; tCarddtl.termseqno=trans.termseqno; tCarddtl.cardtype=tCard.cardtype; des2src(tCarddtl.showcardno,tCard.showcardno); des2src(tCarddtl.cardphyid,tCard.cardphyid); tCarddtl.cardusetype=CARDUSETYPE_RETURNCARD; des2src(tCarddtl.opercode,trans.opercode); ret=DB_t_carddtl_add(&tCarddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } */ return 0; }
int F847105(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret =0; int i=0; int origin_cardno = 0; int billtype=0; char cardphyid[16+1] = ""; char logicdate[11] = ""; //业务日期 char sysdate[11]=""; char lost_date[11]=""; char systime[9]=""; char sEndDate[9]=""; char sMsg[256]=""; T_t_card tCard; T_t_cardlossinfo cardlossinfo; T_t_tif_tradeserial tradeserial; // T_t_tif_savdtl tSavdtl; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tCard,0,sizeof(tCard)); memset(&cardlossinfo,0,sizeof(cardlossinfo)); memset(&tradeserial,0,sizeof(tradeserial)); // memset(&tSavdtl,0,sizeof(tSavdtl)); memset(&IA,0,sizeof(IA)); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } origin_cardno = rPack->lvol1; //原卡号 des2src(cardphyid, rPack->sbank_acc); //物理卡号 if(rPack->lvol1<1) { *pRetCode=E_INPUT_CARDNO_CANNOT_NULL; goto L_RETU; } //查询支票经费本有无充值记录 /* ret=ChkSavdtl(origin_cardno,&tSavdtl); if(ret) { writelog(LOG_ERR,"ChkSavdtl ret[%d]",ret); *pRetCode=ret; goto L_RETU; } //Added by hhd at 2006-06-29 begin //增加判断:如果入卡值大于100,检查经费本知否充值过 //否则不加任何判断,退款到现金中 if(amtcmp(rPack->damt2,100.00)<0) { tSavdtl.billtype=TYPE_CASH; } */ //Added by hhd at 2006-06-29 end tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type=TXCODE_CALLBACK_CARD; //功能号 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.maindeviceid = rPack->lvol6; //上传工作站标识 tradeserial.deviceid = rPack->lvol7; //采集设备标识 tradeserial.purseno = PURSE_NO_ONE; //钱包号 tradeserial.sys_id = 0; //外部系统标识 des2src(tradeserial.opercode, rPack->scust_limit); //操作员号 tradeserial.cardno=origin_cardno; ret=DB_t_card_read_lock_by_cur_and_cardno(origin_cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_R; goto L_RETU; } // writelog(LOG_DEBUG,"input cardno[%d] cardno[%d]",origin_cardno,tCard.cardno); tradeserial.custid = tCard.custid; //客户标识 if(strncmp(tCard.cardattr,CARDSTAT_REG,4)==0) { //检查物理卡号是否一致 trim(cardphyid); trim(tCard.cardphyid); if(strcmp(tCard.cardphyid,cardphyid)!=0) { DB_t_card_free_lock_by_cur(); writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,cardphyid); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } } else if('2'==tCard.cardattr[CARDSTAT_TYPE_REG]) { DB_t_card_free_lock_by_cur(); *pRetCode = E_CARD_CLOSE; goto L_RETU; } //changed by hhd,泰州现场修改,复旦也有这种情况,必须人为干预 //换卡写卡失败和其它写卡失败,都已库为准退卡,屏蔽掉这两判断 /* else if('3'==tCard.cardattr[CARDSTAT_TYPE_REG]) { DB_t_card_free_lock_by_cur(); *pRetCode=E_CARD_CHANGE; goto L_RETU; } */ else if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]==STATE_TRUE) { DB_t_card_free_lock_by_cur(); *pRetCode=E_CARD_FREEZE; goto L_RETU; } /* else if(tCard.cardattr[CARDSTAT_TYPE_WFAIL]==STATE_TRUE) { DB_t_card_free_lock_by_cur(); *pRetCode=E_CARDNO_WFAIL; goto L_RETU; } */ else if(tCard.cardattr[CARDSTAT_TYPE_LOST]==STATE_TRUE) { if(IS_YES==rPack->lvol12) { DB_t_card_free_lock_by_cur(); *pRetCode=E_CARD_LOST; goto L_RETU; } /* ret=DB_t_cardlossinfo_read_by_cardno_and_state_id(origin_cardno, STATE_VALID, &cardlossinfo); if(ret) { DB_t_card_free_lock_by_cur(); writelog(LOG_ERR,"lost_cardno[%d]",origin_cardno); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } */ ret=get_latest_lost_date_by_cardno(origin_cardno,lost_date); if(ret) { DB_t_card_free_lock_by_cur(); writelog(LOG_ERR,"lost_cardno[%d]",origin_cardno); *pRetCode =ret; goto L_RETU; } //先检查客户的挂失的正式卡是否到了补办日期 ret=GetLostCardValiddate(lost_date,sEndDate); if(ret) { DB_t_card_free_lock_by_cur(); *pRetCode =ret; goto L_RETU; } if(strncmp(sEndDate,sysdate,8)>0) { DB_t_card_free_lock_by_cur(); writelog(LOG_ERR,"lost_normal_cardno[%d]lost_date[%s]end_date[%s]",origin_cardno,lost_date,sEndDate); *pRetCode = E_NORMALCARD_NOT_REACH_ENDDATE; goto L_RETU; } /* //更新卡挂失日期表中该卡状态为无效 ret=UpdateCardLossInfoState(origin_cardno,STATE_VALID,STATE_INVALID); if(ret) { DB_t_card_free_lock_by_cur(); *pRetCode =ret; goto L_RETU; } */ //正常情况下的押金都是退的,但是如果卡丢失则不退的 // IsReturnDeposit=IS_NO; } else if(IS_YES!=rPack->lvol12) { DB_t_card_free_lock_by_cur(); *pRetCode=E_NOCARD; goto L_RETU; } //注销原卡 des2src(tCard.cardattr,CARDSTAT_LOGOUT); //注销 des2src(tCard.endtime,tradeserial.operate_date); //注销日期 ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } DB_t_card_free_lock_by_cur(); //是否退费,规定正式卡和临时卡退押金,非记名临时卡退押金 if(IS_YES==rPack->lvol12) { IA.iUseCardFlag=USE_CARD_TYPE_ONLINE; //联机交易 IA.dInCardBala = rPack->damt2; //入卡值 IA.dOutCardBala=-1; //-1 表示空值 IA.iTxCnt = rPack->lvol10+1; //当前卡交易次数 tradeserial.in_balance = IA.dInCardBala; //入卡值 tradeserial.trade_count = IA.iTxCnt; } else { IA.iUseCardFlag=USE_CARD_TYPE_NULL; IA.dInCardBala = -1; //-1 表示空值 IA.dOutCardBala=-1; //-1 表示空值 IA.iTxCnt = -1; //-1 表示空值 } billtype=TYPE_CASH; // IA.pVoidPointer=&tSavdtl.billtype; IA.pVoidPointer=&billtype; IA.iCardNo=tCard.cardno; ret=process(rPack,&IA,&tradeserial); if(ret) { *pRetCode=ret; goto L_RETU; } writelog(LOG_DEBUG,"input cardno[%d] cardno[%d]",origin_cardno,tCard.cardno); 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; } ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_DAMT0,F_DAMT1,F_DAMT2,F_DAMT3,F_DAMT4,F_SDATE0,F_LVOL1,F_SPHONE,F_LSERIAL1,F_VSMESS,0); sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_DEDUCT_DEPOSIT: tradeserial.depositfee=IA.dArrOutAmt[i]; break; case TXTYPE_RETURN_DEPOSIT: case TXTYPE_RETURN_DEPOSIT_BILL: case TXTYPE_RETURN_DEPOSIT_FUNDBOOK: tradeserial.depositfee=IA.dArrOutAmt[i]; out_pack->damt0+=IA.dArrOutAmt[i]; break; case TXTYPE_DEDUCT_BOARD: tradeserial.managefee=IA.dArrOutAmt[i]; break; case TXTYPE_RETURN_BOARD: case TXTYPE_RETURN_BOARD_BILL: case TXTYPE_RETURN_BOARD_FUNDBOOK: tradeserial.managefee=IA.dArrOutAmt[i]; out_pack->damt0+=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; case TXTYPE_DRAW_CASH: case TXTYPE_DRAW_BILL: case TXTYPE_DRAW_FUNDBOOK: case TXTYPE_DRAW_OTHER: tradeserial.trade_fee=IA.dArrOutAmt[i]; out_pack->damt0+=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); /* if((TXTYPE_DRAW_BILL==IA.iArrOutTxType[i])|| (TXTYPE_DRAW_FUNDBOOK==IA.iArrOutTxType[i])|| (TXTYPE_DRAW_OTHER==IA.iArrOutTxType[i])) { sprintf(sMsg,"票据号码:%s ",tSavdtl.billno); strcat(out_pack->vsmess,sMsg); } */ } } sprintf(sMsg,"实际应退金额:%.2lf元",out_pack->damt0); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } // out_pack->lvol1=tSavdtl.billtype; out_pack->lvol1=billtype; // des2src(out_pack->sdate0,tSavdtl.tx_date); // out_pack->damt1=tSavdtl.amount; //经费本充值金额 out_pack->lserial1=tradeserial.serial_no; //流水号 // des2src(out_pack->sphone,tSavdtl.billno); ret = InsertToCutUpdList(origin_cardno, CUTUPD_CANCEL,tCard.cardphyid); if( ret ) { *pRetCode = ret; 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; 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_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; } //检查新卡物理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; } if(pAccTrans->sysPara.bEnableCardMgr) { ret=DB_t_card_read_by_showcardno_and_status(trans.showcardno,"1",&cardtmp); 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,tCard.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=tCard.cardtype; carddtl.usetype=CARDUSETYPE_REUSE; carddtl.inoutflag=INOUTFLAG_IN; 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; } } ////添加卡版本号记录 // T_t_cardver cardver; // // memset(&cardver,0,sizeof(cardver)); // cardver.cardno=trans.cardno; // des2src(cardver.accdate,pAccTrans->sysPara.sSettleDate); // 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_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; // } if(pAccTrans->sysPara.bEnableCardMgr) { int cardtype=0; //使用新卡 ret=UseShowCardNo(trans.opercode,trans.showcardno,cardtype); if(ret) { return ret; } if(cardtype!=tCard.cardtype) { if(CARDTYPE_TEMP==tCard.cardtype||CARDTYPE_TEMP==cardtype) { ERRTIP("过渡临时卡与其他卡不能互换"); return E_COMMON_ERR; } } tCard.cardtype=cardtype; T_t_cardtyperight cardtyperight; memset(&cardtyperight,0,sizeof(cardtyperight)); ret=DB_t_cardtyperight_read_by_cardtype_and_feetype(tCard.cardtype,tCard.feetype,&cardtyperight); if (ret) { writelog(LOG_ERR,"cardtype[%d]feetype[%d]",tCard.cardtype,tCard.feetype); if (DB_NOTFOUND==ret) return ERRINFO(E_NOCARDTYPERIGHT,tCard.feetype,tCard.cardtype); else return E_DB_CARDTYPERIGHT_R; } 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=tCard.cardtype; carddtl.usetype=CARDUSETYPE_USE; carddtl.inoutflag=INOUTFLAG_OUT; 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; } } 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; } 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; des2src(outPack->sname2,cardver.cardverno); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
static int do_process(T_t_card *tCard, T_t_tif_writefailed *tWriteFailed, ST_PACK *rPack, T_t_tif_tradeserial *tradeserial) { int ret = 0; int free_lock_flag = 1; //0关闭, 1表示打开 char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; char operate_date[11]=""; // char sSerialno[20]=""; char cardphyid[17]=""; char old_physical_no[17]=""; char deal_flag[1 + 1] = ""; int iSerialno=0; int cardno=0; int serial_type=0; int flag=0; double dSerialno=0; double dAmt=0; int cnt_purse_no = 0; int card_use_cnt=0; int seri_use_cnt=0; double seri_in_bala=0; double seri_out_bala=0; double seri_in_bala_next=0; double seri_out_bala_next=0; int amt_flag=0; char tx_date[11]=""; T_t_tif_tradeserial_his tradeserialhis; T_t_tif_tradeserial old_tradeserial; memset(&old_tradeserial,0,sizeof(old_tradeserial)); memset(&tradeserialhis,0,sizeof(tradeserialhis)); des2src(cardphyid,rPack->sbank_acc); cardno=rPack->lvol0; card_use_cnt=rPack->lvol8; cnt_purse_no = rPack->lvol4; getsysdate(sysdate); getsystime(systime); deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_Y; ret=GetLogicDate(logicdate); //业务日期 if(ret) { free_lock_flag = 0; goto L_RETU_INNER; } //判断卡状态是否为写卡未成功状态 ret=DB_t_card_read_by_cardno(cardno, tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) ret = E_CARDNO_NOT_EXIST; else ret = E_DB_CARD_R; free_lock_flag = 0; goto L_RETU_INNER; } if(STATE_FALSE==tCard->state_id[CARDSTAT_TYPE_WFAIL]) { ret = E_CARDSTATE_NOTWRITEFAIL; free_lock_flag = 0; goto L_RETU_INNER; } ret = DB_t_tif_writefailed_read_lock_by_c1_and_cardno_and_purese_no_and_deal_flag(tCard->cardno,cnt_purse_no,&deal_flag[0],tWriteFailed); if (ret) { if (DB_NOTFOUND == ret) // ret = E_DB_WRITEFAILED_N; ret = E_WRITEFAILED_DEAL_FLAG_N; // 没有查到, 就是已经写过了 else ret = E_DB_WRITEFAILED_R; goto L_RETU_INNER; } // writelog(LOG_ERR,"XXX"); iSerialno = tWriteFailed->serial_no; des2src(operate_date,tWriteFailed->tx_date); writelog(LOG_DEBUG,"Serialno[%d]",iSerialno); writelog(LOG_DEBUG,"operate_date[%s]",operate_date); writelog(LOG_DEBUG,"logictime[%s]",logicdate); if(strncmp(logicdate,operate_date,8)==0) { ret=DB_t_tif_tradeserial_read_by_serial_no(iSerialno,&old_tradeserial); if(ret) { writelog(LOG_ERR,"Serialno[%d]",iSerialno); if(DB_NOTFOUND==ret) ret = E_SERIALNO_NOT_EXIST; else ret = E_DB_TRADESERIAL_R; goto L_RETU_INNER; } if(cardno!=old_tradeserial.cardno) { writelog(LOG_ERR,"input cardno [%d],tradeserial cardno[%d]",cardno,old_tradeserial.cardno); ret = E_CARDNO_SERIAL_NE; goto L_RETU_INNER; } serial_type=old_tradeserial.serial_type; flag=TYPE_CUR; } else { // TODO: 需要在数据库上建立索引 ret=DB_t_tif_tradeserial_his_read_by_operate_date_and_serial_no(operate_date,iSerialno,&tradeserialhis); if(ret) { writelog(LOG_ERR,"operate_date[%s]Serialno[%d]",operate_date,iSerialno); if(DB_NOTFOUND==ret) ret = E_SERIALNO_NOT_EXIST; else ret = E_DB_TRADESERIAL_R; goto L_RETU_INNER; } if(cardno!=tradeserialhis.cardno) { writelog(LOG_ERR,"input cardno [%d],tradeserial cardno[%d]",cardno,tradeserialhis.cardno); ret = E_CARDNO_SERIAL_NE; goto L_RETU_INNER; } serial_type=tradeserialhis.serial_type; flag=TYPE_HIS; } if(TYPE_CUR==flag) { seri_in_bala=old_tradeserial.in_balance; seri_out_bala=old_tradeserial.out_balance; strncpy(tx_date,old_tradeserial.operate_date,sizeof(tx_date)); dAmt=D4U5(old_tradeserial.out_balance-old_tradeserial.in_balance,2); //发生额=出卡值-入卡值 seri_use_cnt=old_tradeserial.trade_count; } else { seri_in_bala=tradeserialhis.in_balance; seri_out_bala=tradeserialhis.out_balance; strncpy(tx_date,tradeserialhis.operate_date,sizeof(tx_date)); dAmt=D4U5(tradeserialhis.out_balance-tradeserialhis.in_balance,2); //发生额=出卡值-入卡值 seri_use_cnt=tradeserialhis.trade_count; } des2src(old_physical_no,tCard->cardphyid); trim(cardphyid); trim(old_physical_no); switch(serial_type) { //发行正式卡 case 847101: //补办正式卡 case 847104: //发行过渡临时卡 case 847116: //发行非记名临时卡 case 847124: case 847125: case 847126: if(strcmp(old_physical_no,cardphyid)!=0) { ret=IsExistCardByPhyCardNo(cardphyid); if(ret) { goto L_RETU_INNER; } //修改卡标志,置为正常状态 ret=DB_t_card_read_lock_by_cur_and_cardno(cardno, tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) ret = E_CARDNO_NOT_EXIST; else ret = E_DB_CARD_R; goto L_RETU_INNER; } ret = InsertToCutUpdList(tCard->cardno,CUTUPD_CH_OLDCARD,tCard->cardphyid); if(ret) { DB_t_card_free_lock_by_cur(); goto L_RETU_INNER; } des2src(tCard->cardphyid,cardphyid); //更换物理卡号 ret=DB_t_card_update_lock_by_cur(tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) ret = E_CARDNO_NOT_EXIST; else ret = E_DB_CARD_U; goto L_RETU_INNER; } DB_t_card_free_lock_by_cur(); ret = InsertToCutUpdList(tCard->cardno,CUTUPD_CH_NEWCARD,tCard->cardphyid); if(ret) { goto L_RETU_INNER; } // 宏定义的判断, 0表示成功, 1表示不需要插入 /* if (0 == insert_chcard_blacklist(serial_type)) { ret = InsertToBlkList(tCard->cardno,CHCARD_BLACKLIST); if (ret) { goto L_RETU_INNER; } } */ // add by 汤成 2005-8-10 // 增加向名单表写入记录 /* switch(serial_type) { //补办正式卡 case 847104: //发行过渡临时卡 case 847116: // 记名临时卡 //case 847124: // VIP 卡 case 847126: ret = InsertToBlkList(tCard.cardno,CHCARD_BLACKLIST); if(ret) { goto L_RETU_INNER; } break; default: break; } */ } tradeserial->in_balance=0; //入卡值 des2src(tWriteFailed->comments, "补写卡成功"); break; //补写水控小钱包, 因小钱包扣款失败而起 //水控小钱包补写归类到847119中,不单独编写 case 847300: des2src(tWriteFailed->comments, "小钱包补写卡成功"); tradeserial->in_balance = rPack->damt1; writelog(LOG_ERR,"小钱包入卡值[%f]",tradeserial->in_balance); break; //补写水控大钱包, 因大钱包扣款失败而起 //水控制大钱包补写归类到847119中, 不单独编写 case 847301: des2src(tWriteFailed->comments, "大钱包补写卡成功"); tradeserial->in_balance = rPack->damt1; break; //银行转帐-Added by hhd at 20051225 //考虑到有可能圈存写卡成功,但是提示失败 //避免重复写卡 case 240001: //判断卡中交易次数是否等于发生错误的流水的交易次数 writelog(LOG_ERR,"card_use_cnt=[%d],seri_use_cnt=[%d]",card_use_cnt,seri_use_cnt); if((card_use_cnt+1)==seri_use_cnt) { //判断上传入卡值是否等于发生错误的流水的入卡值 if(amtcmp(rPack->damt1,seri_in_bala)==0) //入卡值等于入卡值,卡没有写上 tradeserial->in_balance=rPack->damt1; else if(amtcmp(rPack->damt1,seri_out_bala)==0) //入卡值等于出卡值,卡已经写上 { tradeserial->in_balance=rPack->damt1; amt_flag=1; } else { writelog(LOG_ERR,"In_balance abnormity,in_bala=[%f]",rPack->damt1); ret = E_ENTER_ACCOUNT; goto L_RETU_INNER; } } else if((card_use_cnt+1)>seri_use_cnt) { //当写卡不成功时,一般不会更新卡的交易次数, //导致下一次的交易次数还是等于失败流水的次数, //所以去下一条流水的时候,如果取不到,就+1 ret=Get_card_next_serial(tCard->cardno,tx_date,seri_use_cnt,&seri_in_bala_next,&seri_out_bala_next); if(ret) { if(DB_NOTFOUND==ret) { ret=Get_card_next_serial(tCard->cardno,tx_date,seri_use_cnt+1,&seri_in_bala_next,&seri_out_bala_next); if(ret) { writelog(LOG_ERR,"Get_card_next_serial(=) error,errcode=[%d]",ret); writelog(LOG_ERR,"没有找到下一笔流水"); goto L_RETU_INNER; } } else { writelog(LOG_ERR,"Get_card_next_serial(+1) error,errcode=[%d]",ret); goto L_RETU_INNER; } } writelog(LOG_INFO,"seri_in_bala_next=[%f],seri_in_bala=[%f],seri_out_bala=[%f]",seri_in_bala_next,seri_in_bala,seri_out_bala); if(amtcmp(seri_in_bala_next/100,seri_in_bala)==0) tradeserial->in_balance=rPack->damt1; else if(amtcmp(seri_in_bala_next/100,seri_out_bala)==0) { tradeserial->in_balance=rPack->damt1; amt_flag=1; } else { tradeserial->in_balance=rPack->damt1; writelog(LOG_ERR,"In_balance abnormity,in_bala=[%f]",rPack->damt1); ret = E_ENTER_ACCOUNT; goto L_RETU_INNER; } } else { writelog(LOG_ERR,"In_total_cnt abnormity,in_total_cnt=[%d]",card_use_cnt); ret = E_ENTER_ACCOUNT; goto L_RETU_INNER; } default: if(strcmp(old_physical_no,cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",old_physical_no,cardphyid); ret = E_CARD_PHYNO_DIFFER; goto L_RETU_INNER; } tradeserial->in_balance=rPack->damt1; //入卡值 break; } if(TYPE_CUR==flag) dAmt=D4U5(old_tradeserial.out_balance-old_tradeserial.in_balance,2); //发生额=出卡值-入卡值 else dAmt=D4U5(tradeserialhis.out_balance-tradeserialhis.in_balance,2); //发生额=出卡值-入卡值 //说明不需要写卡,则发生额置为0 if(amt_flag==1) { tradeserial->trade_fee=0; //补写卡值 } else { tradeserial->trade_fee=dAmt; //补写卡值 } tradeserial->out_balance=tradeserial->in_balance+dAmt; //出卡值 writelog(LOG_ERR,"小钱包出卡值[%f]",tradeserial->out_balance); writelog(LOG_ERR,"小钱包交易金额[%f]",dAmt); if(tradeserial->out_balance<0||tradeserial->out_balance>999) { writelog(LOG_ERR,"tradeserial.out_balance[%lf]",tradeserial->out_balance); ret = E_TX_SERIAL; goto L_RETU_INNER; } writelog(LOG_DEBUG,"写卡失败日期%s,补写流水号%d,交易码%d,卡号%d,补写金额%.2lf,入卡值%lf,出卡值%lf",operate_date,iSerialno,serial_type,cardno,dAmt,tradeserial->in_balance,tradeserial->out_balance); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialno); //获得流水号 if(ret) { writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU_INNER; } tradeserial->serial_no = D2I(dSerialno); //流水号 tradeserial->other_seri_no = 0; //上传端流水号 tradeserial->serial_type = TXCODE_REWRITE_CARD; //交易代码;备注:发卡+充值 用一个交易码,即847101; 发卡(不充值)另用一个交易码,即新的发卡程序文件名,从而区分发卡充值与发卡不充值的卡操作信息。 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); //处理时间 des2src(tradeserial->opercode , rPack->scust_limit); tradeserial->maindeviceid = rPack->lvol6; //上传工作站标识 tradeserial->deviceid = rPack->lvol7; //采集设备标识 tradeserial->cardno = tCard->cardno; //卡号 des2src(tradeserial->showid,tCard->showid); //显示卡号 tradeserial->purseno = cnt_purse_no; //钱包号,根据具体发现需要补写的钱包号决定 tradeserial->custid = tCard->custid; //客户标识 tradeserial->reviseserial_no = iSerialno; //原写卡失败流水号 tradeserial->trade_count = card_use_cnt + 1; //交易次数为卡交易次数+1 // 插入交易流水表 ret = DB_t_tif_tradeserial_add(tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) ret = E_DB_TRADESERIAL_E; else ret = E_DB_TRADESERIAL_I; goto L_RETU_INNER; } /******************************************************************/ //更新写卡失败表 tWriteFailed->deal_serial_no = tradeserial->serial_no; // writelog(LOG_ERR,"流水号[%d]",tWriteFailed->deal_serial_no); tWriteFailed->deal_bala = tradeserial->trade_fee; des2src(tWriteFailed->deal_date,sysdate); des2src(tWriteFailed->deal_time,systime); // tWriteFailed->deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_N; ret = DB_t_tif_writefailed_update_lock_by_c1(tWriteFailed); if (ret) { if (DB_NOTFOUND == ret) { ret = E_DB_WRITEFAILED_N; } else { ret = E_DB_WRITEFAILED_U; } goto L_RETU_INNER; } DB_t_tif_writefailed_free_lock_by_c1(); /******************************************************************/ return 0; L_RETU_INNER: if (free_lock_flag) DB_t_tif_writefailed_free_lock_by_c1(); return ret; }
int F847302(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret = 0; T_t_card tCard; T_t_tif_tradeserial tTradeSerial, tPacketSerial; T_t_tif_writefailed tWriteFailed; char logicdate[11] = ""; double dUniqNo = 0; memset(&tCard, 0, sizeof tCard); memset(&tTradeSerial, 0, sizeof tTradeSerial); memset(&tPacketSerial, 0, sizeof tPacketSerial); memset(&tWriteFailed, 0, sizeof tWriteFailed); if (rPack->lvol3 != 0 && rPack->lvol3 != 1) { writelog(LOG_DEBUG,"输入标志错误[%d]",rPack->lvol3); *pRetCode = E_INPUT_ERROR; goto L_RETU; } ret = DB_t_tif_tradeserial_read_by_serial_no(rPack->lvol1,&tTradeSerial); //消费流水号 if (ret) { writelog(LOG_DEBUG,"输入号不存在消费流水号[%d]",rPack->lvol1); if (DB_NOTFOUND == ret) { *pRetCode = E_DB_TRADESERIAL_N; } else { *pRetCode = E_DB_TRADESERIAL_R; } goto L_RETU; } ret = DB_t_card_read_lock_by_cur_and_cardno(tTradeSerial.cardno,&tCard); if (ret) { if (DB_NOTFOUND == ret) { *pRetCode = E_DB_CARD_N; } else { *pRetCode = E_DB_CARD_R; } goto L_RETU; } ret = DB_t_tif_tradeserial_read_by_serial_no(rPack->lvol2,&tPacketSerial); //充值流水号 if (ret) { writelog(LOG_DEBUG,"输入号不存在充值流水号[%d]",rPack->lvol2); if (DB_NOTFOUND == ret) { *pRetCode = E_DB_TRADESERIAL_N; } else { *pRetCode = E_DB_TRADESERIAL_R; } goto L_RETU; } GetLogicDate(logicdate); tWriteFailed.cardno = tCard.cardno; des2src(tWriteFailed.tx_date,logicdate); writelog(LOG_DEBUG,"大钱包交易金额[%f]",tTradeSerial.trade_fee); // 大钱包写卡失败 if (0 == rPack->lvol3) { // 大钱包写卡失败 ret = getNewUniqNo(KEYTYPE_WRITEFAILED, &dUniqNo); //获得写卡失败表最大ID号 if (ret) { writelog(LOG_ERR,"ret[%d]",ret); *pRetCode = ret; goto L_RETU; } tWriteFailed.id = D2I(dUniqNo); tWriteFailed.serial_no = tTradeSerial.serial_no; tWriteFailed.serial_type = tTradeSerial.serial_type; tWriteFailed.purese_no = PURSE_NO_ONE; tWriteFailed.deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_Y; tWriteFailed.deal_bala = tTradeSerial.trade_fee; des2src(tWriteFailed.comments, "大钱包写卡失败"); ret = DB_t_tif_writefailed_add(&tWriteFailed); if (ret) { *pRetCode = E_DB_WRITEFAILED_I; goto L_RETU; } } tCard.cardattr[CARDSTAT_TYPE_WFAIL] = STATE_TRUE; ret = DB_t_card_update_lock_by_cur(&tCard); if (ret) { *pRetCode = E_DB_CARD_U; goto L_RETU; } DB_t_card_free_lock_by_cur(); ret = getNewUniqNo(KEYTYPE_WRITEFAILED, &dUniqNo); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); *pRetCode = ret; goto L_RETU; } writelog(LOG_DEBUG,"小钱包交易金额[%f]",tPacketSerial.trade_fee); tWriteFailed.id = D2I(dUniqNo); tWriteFailed.serial_no = tPacketSerial.serial_no; tWriteFailed.serial_type = tPacketSerial.serial_type; tWriteFailed.deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_Y; tWriteFailed.purese_no = PURSE_NO_TWO; tWriteFailed.deal_bala = tPacketSerial.trade_fee; des2src(tWriteFailed.comments, "小钱包充值失败"); ret = DB_t_tif_writefailed_add(&tWriteFailed); if (ret) { *pRetCode = E_DB_WRITEFAILED_I; goto L_RETU; } return 0; L_RETU: return -1; }
//无卡退卡 static int CardCloseWithoutCard(ST_PACK *rPack) { //检查卡 int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; int ReturnForgift=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) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } trans.cardtype=tCard.cardtype; 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(); ERRTIP("请先解冻后再销户"); return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.badflag[0]) { if((CARDBADFLAG_CARDBAL==tCard.badtype[0])||(CARDBADFLAG_ACCBAL==tCard.badtype[0])) { DB_t_card_free_lock_by_cur(); ERRTIP("该卡余额错误,请使用坏卡修复功能处理,不可以直接退卡"); return E_CARD_BAD_AND_NEED_UPDATE; } } //无卡只有挂失或卡物理损坏的情况下才可以退卡 if(tCard.lossflag[0]!='1'&& tCard.badflag[0]!='1') { DB_t_card_free_lock_by_cur(); ERRTIP("该卡状态正常,请先放卡再销户!"); return E_COMMON_ERR; } if(tCard.badflag[0]=='1') { //检查卡是否到了销卡的时间 /* T_t_badcardbook badcardbook; memset(&badcardbook,0,sizeof(badcardbook)); ret=DB_t_badcardbook_read_by_cardno(trans.cardno,&badcardbook); if(ret) { DB_t_card_free_lock_by_cur(); if(DB_NOTFOUND==ret) return E_DB_BADCARDBOOK_N; else return E_DB_BADCARDBOOK_R; } */ char enddate[9]= {0}; ret=calcEndDate(tCard.baddate,pAccTrans->sysPara.iRenewCardDayCnt,enddate); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } if(strncmp(enddate,pAccTrans->trans.transdate,8)>0) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_BADCARD_RECORDDATE_NOTREACH,enddate); } if(tCard.badtype[0]!=CARDBADFLAG_MANMADE) ReturnForgift=1; } else if('1'==tCard.lossflag[0]) { if(strlen(tCard.lossdate)) { char enddate[9]= {0}; ret=calcEndDate(tCard.lossdate,pAccTrans->sysPara.iRenewCardDayCnt,enddate); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } if(strncmp(enddate,pAccTrans->trans.transdate,8)>0) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARDLOSSDATE_NOREACH,enddate); } } } tCard.status[0]=STATUS_DELETE; ret=getCardVerNo(tCard.cardverno); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } strcpy(tCard.closedate,trans.transdate); des2src(tCard.lastsaved,trans.sysdatetime); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,tCard.cardno); else return E_DB_CARD_U; } trans.custid=tCard.custid; trans.feetype=tCard.feetype; des2src(trans.showcardno,tCard.showcardno); T_t_customer tCustomer; memset(&tCustomer,0,sizeof(tCustomer)); if(tCard.custid>0) { ret=DB_t_customer_read_lock_by_cur_and_custid(trans.custid,&tCustomer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,trans.custid); else return E_DB_CUSTOMER_R; } if(tCustomer.holdcardcnt) { tCustomer.holdcardcnt--; } des2src(tCustomer.lastsaved,trans.sysdatetime); ret=DB_t_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,trans.custid); else return E_DB_CUSTOMER_U; } des2src(trans.custname,tCustomer.custname); des2src(trans.stuempno,tCustomer.stuempno); } ////添加卡版本号记录 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.cardno=tCard.cardno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,tCard.cardphyid); des2src(cardver.stuempno,trans.stuempno); cardver.cardvertype=CARDVERTYPE_CARDCLOSE; des2src(cardver.cardverno,tCard.cardverno); ret=DB_t_cardver_add(&cardver); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } //检查补助信息 //double cardbal=D4U5(trans.cardbefbal+subsidyamt); //读取帐户信息 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; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno); } ret=UpdAllUnGetSubsidy(trans.cardno); if(ret) return ret; strcpy(trans.cardaccno,tCardAccount.accno); //押金处理 double returncashamt=0; if(tCardAccount.foregift>0) { trans.inputamt=tCardAccount.foregift; trans.unusedamt = trans.inputamt; trans.transamt=tCardAccount.foregift; trans.fundtype=0;//0表示从帐户扣 //退押金 if(ReturnForgift) { pAccTrans->trans.transtype=TRANSTYPE_RETURNFOREGIFT; returncashamt=tCardAccount.foregift; } else { pAccTrans->trans.transtype=TRANSTYPE_FOREGIFT2COSTFEE; } ret=pAccTrans->DoTransByTransType(); if(ret) ret=pAccTrans->doTransEnd(); if(ret) return ret; } if(amtcmp(tCardAccount.balance,0)<0)//处理负账户 { trans.inputamt= - tCardAccount.balance; if(amtcmp(trans.inputamt,pAccTrans->sysPara.dAutoRenewAccMaxAmt)>0) { return ERRIF_CARDBAL_OVERDRAW; } trans.unusedamt = trans.inputamt; trans.transamt=trans.inputamt; trans.fundtype=0;//0表示从帐户扣 //营业外支出 pAccTrans->trans.transtype=TRANSTYPE_LESS_CARDBAL; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; } /* double ReturnCardBal=0; ReturnCardBal=D4U5(tCardAccount.cardbal+tCardAccount.subsidybal); if(amtcmp(tCardAccount.balance,ReturnCardBal)>0) { if('C'==backcardtype) { //走长款处理 trans.transamt=D4U5(tCardAccount.balance-ReturnCardBal); trans.inputamt=trans.transamt; trans.unusedamt = trans.inputamt; trans.fundtype=0; pAccTrans->trans.transtype=TRANSTYPE_MORE_CARDBALINCOME; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; if(pAccTrans->trans.unusedamt>0) return E_INPUT_AMT; if(pAccTrans->trans.unusedamt<0) return E_AMT_LACK; } } */ else { //下面退款按账户金额来退 returncashamt = D4U5(returncashamt+tCardAccount.balance); trans.inputamt=tCardAccount.balance; trans.unusedamt = trans.inputamt; trans.feetype=tCard.feetype; /* if('1'==backfunctype) { trans.fundtype=PAYTYPE_OUTLAY; des2src(trans.voucherno,rPack->scust_auth2); } */ ret=pAccTrans->doTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; } sprintf(trans.remark,"销户成功 %s 总共应退款%.2lf元",pAccTrans->remark.c_str(),returncashamt); return 0; }