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; }
static int check(int cardno,T_t_customer& tCustomer,T_t_card& tCard) { int ret=0; ret=DB_t_card_read_by_cardno(cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]=='1') { return E_REWCARD_CARDFROZE; } if((tCard.cardattr[CARDSTAT_TYPE_LOST]!='1')&&(tCard.cardattr[CARDSTAT_TYPE_BAD]!='1')) { return E_REWCARD_CARDSTATUS; } 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 E_DB_CARDTYPE_N; else return E_DB_CARDTYPE_R; } if(tCardtype.renewable[0]!='1') { return E_CARD_CANNOT_RENEW; } if(tCard.custid) { ret=DB_t_customer_read_by_custid(tCard.custid,&tCustomer); if(ret) { if(DB_NOTFOUND==ret) return E_CUSTOMER_NOT_EXIST; else return E_DB_CUSTOMER_R; } if(tCustomer.status[0]=='2') { return E_CUSTOMER_LOGOUT; } if(tCustomer.feetype<1) { return E_NOSET_CUSTOMER_FEETYPE; } } char lossexpiredate[9]=""; char sysdate[9]=""; char sDays[10]=""; ret=getParaVal(GLOBE_RENEWCARDDATE,sDays); if(ret) return ret; int days=atoi(sDays); ret=calcEndDate(tCard.lossdate,days,lossexpiredate); if(ret) return ret; getsysdate(sysdate); if(strcmp(sysdate,lossexpiredate)<0) { return E_CARDLOSSDATE_NOREACH; } return 0; }
static int AddCard(T_t_customer& tCustomer,T_t_card& tCard) { //检查卡是否已经使用 int ret=0; char sysdate[9]; getsysdate(sysdate); tCard.status[0]=STATUS_NORMAL; ret=DB_t_card_read_by_cardphyid_and_status(tCard.cardphyid,tCard.status,&tCard); if(ret!=DB_NOTFOUND) { if(DB_SUCCESS==ret) return E_CARDPHYID_EXIST; else return E_DB_CARD_R; } ret=DB_t_card_read_by_showcardno_and_status(tCard.showcardno,tCard.status,&tCard); if(ret!=DB_NOTFOUND) { if(DB_SUCCESS==ret) return E_SHOWCARDNO_EXIST; else return E_DB_CARD_R; } 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 E_DB_CARDTYPE_N; else return E_DB_CARDTYPE_R; } //判断到期日期 if(strlen(tCard.expiredate)<1) { ret=IsInvalidDateTime(tCustomer.outdate,"YYYYMMDD"); if(ret==0) { if(strncmp(tCustomer.outdate,sysdate,8)>0) { des2src(tCard.expiredate,tCustomer.outdate); } } else { if(tCardtype.validdays<1) return E_NOSET_CARDTYPE_VALIDDAYS; ret=calcEndDate(sysdate,tCardtype.validdays,tCard.expiredate); if(ret) return ret; } } else { ret=IsInvalidDateTime(tCard.expiredate,"YYYYMMDD"); if(ret) return E_INPUT_EXPIREDATE; if(strncmp(tCard.expiredate,sysdate,8)<0) return E_INPUT_EXPIREDATE; } tCard.custid=tCustomer.custid; des2src(tCard.stuempno,tCustomer.stuempno); memset(tCard.cardattr,'0',sizeof(tCard.cardattr)); des2src(tCard.opendate,sysdate); getfmtsysdatetime(tCard.lastsaved); ret = getNewUniqNo(KEYTYPE_CARDNO,&tCard.cardno); //获取最大卡号 if(ret) { return ret; } ret=DB_t_card_add(&tCard); if(ret) { if(DB_REPEAT==ret) return E_DB_CARD_E; else return E_DB_CARD_I; } 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; }