int F820522(TRUSERID * handle, int iRequest, ST_PACK * in_pack, int *pRetCode, char *szMsg) { int ret; CAccTrans& ats=CAccTrans::GetInst(); ret=ats.Reset(); if(ret) return ret; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack, 0, 1); SetCol(handle, F_VSMESS, F_SDATE0, F_SDATE1, F_SDATE2, F_SDATE3, F_SSTATUS0, F_STIME0, 0); sprintf(out_pack->sdate0,"%d",ats.hostdate); sprintf(out_pack->stime0,"%06d",ats.hosttime); sprintf(out_pack->sdate1,"%d",ats.settledate); calcEndDate(out_pack->sdate1,-1,out_pack->sdate2); calcEndDate(out_pack->sdate1,1,out_pack->sdate3); PutRow(handle, out_pack, pRetCode, szMsg); 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 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 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 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; }
int UpdBadCard(TRUSERID *handle,int *pRetCode,char *szMsg) { int ret=0; CAccTrans& ats=CAccTrans::GetInst(); TRANS& trans=ats.trans; T_t_card tCard; memset(&tCard,0,sizeof(tCard)); if(trans.cardno<1) { ret=DB_t_card_read_by_cardphyid_and_status(trans.cardphyid,"1",&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDPHYID,trans.cardphyid); else return E_DB_CARD_R; } trans.cardno=tCard.cardno; } ret=DB_t_card_read_lock_by_c0_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.custid=tCard.custid; trans.cardtype=tCard.cardtype; trans.feetype=tCard.feetype; if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_c0(); return ERRINFO(E_CARD_LOGOUT,trans.cardno); } /* if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_c0(); return ERRINFO(E_CARD_FREEZE,trans.cardno); } */ if('1'==tCard.lossflag[0]) { DB_t_card_free_lock_by_c0(); return ERRINFO(E_CARD_LOST,trans.cardno); } //比较卡物理ID是否相同 if(strcmp(tCard.cardphyid,trans.cardphyid)!=0) { DB_t_card_free_lock_by_c0(); return ERRINFO(E_CARD_PHYNO_DIFFER,trans.cardphyid,tCard.cardphyid); } if('1'!=tCard.badflag[0]) { return ERRINFO(E_CARD_NOBADRECORD,trans.cardno); } if((CARDBADFLAG_CARDBAL!=tCard.badtype[0])&&(CARDBADFLAG_ACCBAL!=tCard.badtype[0])) { DB_t_card_free_lock_by_c0(); ERRTIP("该卡已经登记为卡片损坏,请检查该卡是否完全损坏,如果没有损坏,请修改该卡损坏类型为余额错误类型再来修复"); return E_COMMON_ERR; } char badtype=tCard.badtype[0]; char enddate[9]={0}; ret=calcEndDate(tCard.baddate,ats.sysPara.iRenewCardDayCnt,enddate); if(ret) { DB_t_card_free_lock_by_c0(); return ret; } if(strncmp(enddate,trans.transdate,8)>0) { DB_t_card_free_lock_by_c0(); return ERRINFO(E_BADCARD_RECORDDATE_NOTREACH,enddate); } tCard.badflag[0]='0'; tCard.badtype[0]=0; tCard.baddate[0]=0; 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,trans.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 ERRINFO(E_NOTEXIST_CUSTOMER,tCard.custid); else return E_DB_CUSTOMER_R; } } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(tCard.accno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { DB_t_account_free_lock_by_c0(); return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno); } if(CARDBADFLAG_ACCBAL==badtype) { //以卡修库 if(amtcmp(tCardAccount.balance,trans.cardbefbal)<0) { //在卡比库大的时候不允许更新 DB_t_account_free_lock_by_c0(); ERRTIP("卡余额比账户余额大,不允许以卡修库"); return E_COMMON_ERR; } if(amtcmp(tCardAccount.availbal,trans.cardbefbal)==0) { DB_t_account_free_lock_by_c0(); ERRTIP("卡余额与账户余额已经相等,不需要以卡修库"); return E_COMMON_ERR; } //库余额错误,以卡余额为准,但必须卡余额小于库余额 //更新账户余额与卡余额一致 trans.cardaftbal=trans.cardbefbal; tCardAccount.cardbal= trans.cardaftbal; tCardAccount.availbal+=tCardAccount.subsidybal; tCardAccount.subsidybal=0; tCardAccount.dpscnt = trans.aftdpscnt; tCardAccount.paycnt = trans.aftpaycnt; strcpy(tCardAccount.transtime,trans.sysdatetime); ret=DB_t_account_update_lock_by_c0(&tCardAccount); if(ret) { return E_DB_ACCOUNT_U; } //考虑消费流水丢失的情况,走长款处理 trans.cardflag=0;//一定要设为无卡 trans.transamt=D4U5(tCardAccount.availbal-trans.cardbefbal); trans.inputamt=trans.transamt; trans.unusedamt = trans.inputamt; trans.fundtype=0; des2src(trans.cardaccno,tCardAccount.accno); ats.trans.transtype=TRANSTYPE_MORE_CARDBALINCOME; ret=ats.DoTransByTransType(); if(ret) return ret; if(ats.trans.unusedamt>0) return E_INPUT_AMT; if(ats.trans.unusedamt<0) return E_AMT_LACK; } else { if(amtcmp(tCardAccount.balance,0)<0) { ERRTIP("卡余额不能小于0,该卡账户余额为%.2lf",tCardAccount.balance); return E_COMMON_ERR; } //卡余额错误,把库余额写入卡余额 //更新卡余额与账户余额一致 tCardAccount.availbal+=tCardAccount.subsidybal; tCardAccount.subsidybal=0; tCardAccount.cardbal= tCardAccount.balance; trans.cardaftbal=tCardAccount.cardbal; if(amtcmp(trans.cardaftbal,trans.cardbefbal)>0) { tCardAccount.dpscnt=trans.dpscnt+1; transdtl.cardcnt = tCardAccount.dpscnt; transdtl.transflag = TF_DPS; } else if(amtcmp(trans.cardaftbal,trans.cardbefbal)<0) { tCardAccount.paycnt = trans.paycnt+1; transdtl.cardcnt=tCardAccount.paycnt; transdtl.transflag = TF_PAY; ret=UpdateCardBitmap(trans.cardno,transdtl.cardcnt,CARDBITMAPTYPE_SYS_ONLINE); if(ret) return ret; } strcpy(tCardAccount.transtime,trans.sysdatetime); ret=DB_t_account_update_lock_by_c0(&tCardAccount); if(ret) { return E_DB_ACCOUNT_U; } } ret=UpdAllUnGetSubsidy(trans.cardno); if(ret) return ret; des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); des2src(transdtl.accdate,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.cardbefbal=trans.cardbefbal; transdtl.cardaftbal=trans.cardaftbal; transdtl.managefee=trans.totalfeeamt; transdtl.amount=trans.totaltransamt; transdtl.custid=tCardAccount.custid; des2src(transdtl.custname,tCardAccount.accname); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl.showcardno,tCard.showcardno); GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } 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_SMARKET_CODE2,F_SDATE0, F_LVOL0,F_STX_PWD,F_LVOL8,F_LVOL6, F_SORDER0,F_SEMP,F_LVOL11,F_LVOL12, F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_STIME3,F_SDATE3,0); outPack->lvol1=customer.custid; outPack->lsafe_level2=customer.custtype; outPack->lvol5=tCard.feetype; strncpy(outPack->sall_name,customer.custname,8); des2src(outPack->spager,customer.stuempno); des2src(outPack->scert_no,customer.deptcode); des2src(outPack->smarket_code2,customer.idtype); des2src(outPack->semail2,customer.idno); des2src(outPack->smarket_code,customer.sex); des2src(outPack->sdate0,tCard.expiredate); outPack->lvol0=tCard.cardno; outPack->lvol8=D4U5(transdtl.cardaftbal*100,0); outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); outPack->lvol6=tCardAccount.paycnt; // outPack->lvol4=tCardAccount.subsidyno; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->sdate3,ats.trans.accdate); des2src(outPack->stime3,ats.trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; des2src(outPack->vsmess,ats.remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
//无卡退卡 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; }