int F847230(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_AUTHCARDUNLOSS; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); memset(&aPack,0,sizeof(aPack)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_SSERIAL0,0); trans.cardno= rPack->lvol0; if(trans.cardno<= 0) { return E_INPUT_CARDNO; } if(strlen(rPack->scust_limit) == 0) { return E_INPUT_OPER_NULL; } T_t_authcard tAuthCard; memset(&tAuthCard,0,sizeof(tAuthCard)); ret = DB_t_authcard_read_by_cardno(trans.cardno,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) return E_NOTEXIST_AUTHCARD; else return E_DB_AUTHCARD_R; } if(tAuthCard.status[0]==STATUS_DELETE) { writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno); return E_AUTHCARD_LOGOUT; } if(tAuthCard.lossflag[0]=='0') { return E_AUTHCARD_NOLOST; } T_t_operator tOper; memset(&tOper,0,sizeof tOper); ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode); return E_DB_OPERATOR_N; } else return E_DB_OPERATOR_R; } sprintf(trans.remark,"操作员[%s]授权卡卡号[%d]解挂",tAuthCard.opercode,tAuthCard.cardno); if(tOper.status[0]==STATUS_DELETE) { writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode); return E_OPERLOGON_UNREG; } ret=chk_oper_pwd(tAuthCard.opercode,rPack->semp_pwd); if(ret) { writelog(LOG_ERR,"operator password error, operator [%s]",tAuthCard.opercode); if(E_NOTEXIST_OPER==ret) return E_NOTEXIST_AUTHOPER; else if(E_OPERPWD==ret) return E_AUTH_OPER_PWD; else return ret; } tAuthCard.lossflag[0]='0'; strcpy(tAuthCard.lossdate,""); ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno); return E_DB_AUTHCARD_U; } // 插入黑名单表 T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tAuthCard.cardno; des2src(cardver.accdate,pAccTrans->trans.accdate); cardver.termid=pAccTrans->trans.termid; cardver.termseqno=pAccTrans->trans.termseqno; cardver.cardno=tAuthCard.cardno; des2src(cardver.cardphyid,tAuthCard.cardphyid); cardver.cardvertype=CARDVERTYPE_CARDUNLOSS; cardver.adddelflag[0]=ADDDELFLAG_DEL; cardver.status[0]=STATUS_NORMAL; 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; } outPack->lvol0=tAuthCard.cardno; des2src(outPack->sserial0,cardver.cardverno); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F847228(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; char sysdate[9] = ""; char systime[7] = ""; int auth_cardno = 0; T_t_authcard tAuthCard; T_t_operator tOper; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); double uni_no = 0.0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->checkCfgUpdate(); if(ret) return ret; pAccTrans->clear(); GetCpackDataString(rPack,pAccTrans->cpackdata); pAccTrans->trans.transcode=TC_AUTHCARDUPD; ret=pAccTrans->addOperDtl(rPack->semp); if(ret) return ret; memset(&tAuthCard,0,sizeof tAuthCard); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); auth_cardno = rPack->lvol0; if(auth_cardno <= 0) { *pRetCode = E_INPUT_CARDNO; goto L_RETU; } if(strlen(rPack->scust_limit) == 0) { *pRetCode = E_INPUT_OPER_NULL; goto L_RETU; } if(IsInvalidDateTime(rPack->sdate0,"YYYYMMDD")) { *pRetCode = E_INPUT_DATE; goto L_RETU; } ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_AUTHCARD_NOT_EXISTS; else *pRetCode = E_DB_OPER_AUTHCARD_R; goto L_RETU; } if(tAuthCard.status[0] == STATUS_LOGOUT) { writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno); *pRetCode = E_AUTHCARD_HAS_CANCEL; goto L_RETU; } if(tAuthCard.cardstatus[CARDSTAT_TYPE_LOST]== '1') { writelog(LOG_ERR,"auth card is loss , card id [%d]",tAuthCard.cardno); *pRetCode = E_AUTHCARD_IS_LOSS; goto L_RETU; } memset(&tOper,0,sizeof tOper); ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode); *pRetCode = E_DB_OPERATOR_N; } else *pRetCode = E_DB_OPERATOR_R; goto L_RETU; } if(tOper.status[0]==STATUS_LOGOUT) { writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode); *pRetCode = E_OPERLOGON_UNREG; goto L_RETU; } des2src(tAuthCard.expiredate,rPack->sdate0); tAuthCard.privilege = rPack->lvol1; ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno); *pRetCode = E_DB_OPER_AUTHCARD_U; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_SDATE0,F_SCUST_LIMIT,0); out_pack->lvol0 = tAuthCard.cardno; des2src(out_pack->sdate0,tAuthCard.expiredate); out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->scust_limit,tAuthCard.opercode); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F950052(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret =0; //writelog(LOG_INFO,"start pos deposit"); cpu_trade_t cpu_trade; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->CheckCfgUpdate(); if(ret) return ret; T_t_authcard tAuthCard; T_t_transdtl transdtl; T_t_dpsoper tDepositOper; T_t_dpsoperpos tDepositOperpos; T_t_dpsshoppos tDepositShoppos; T_t_shop tDepositShop; T_t_account tAccount; //帐户表 T_t_device tDevice; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tAuthCard,0,sizeof(tAuthCard)); memset(&tDepositOper,0,sizeof(tDepositOper)); memset(&tDepositOperpos,0,sizeof(tDepositOperpos)); memset(&tDepositShoppos,0,sizeof(tDepositShoppos)); memset(&tDepositShop,0,sizeof(tDepositShop)); memset(&tAccount,0,sizeof(tAccount)); memset(&transdtl,0,sizeof(transdtl)); int opercardno=rPack->lvol3; //操作员号 if(!opercardno) return E_INPUTNULL_CARDNO; trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol5; trans.purseno=PURSE_NO_ONE; trans.cardbefbal=rPack->lvol9/100.0; //入卡金额 trans.dpscnt= rPack->lvol7; //入卡金额 trans.inputamt= rPack->lvol8/100.0; //充值金额 trans.unusedamt = trans.inputamt; trans.fundtype=1; transdtl.sysid= rPack->lcert_code; //上传工作站标识(前置机注册号) des2src(transdtl.devphyid, rPack->sdate1); //物理设备ID transdtl.devseqno=rPack->lvol4; //上传端流水号 ret=GetDevIdByDevPhyId(&(trans.termid),transdtl.devphyid); if (ret) { writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] devphy999_id[%s]",ret,transdtl.devphyid); return ret; } ret = DB_t_device_read_by_deviceid(trans.termid,&tDevice); if(ret) { writelog(LOG_ERR," DB_t_device_read_by_deviceid err[%d]",ret); return E_DB_DEVICE_R; } //writelog(LOG_DEBUG,"trans.inputamt[%d]",trans.inputamt); T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=doCard(trans,tCard); if(ret) { return ret; } memset(&cpu_trade,0,sizeof cpu_trade); des2src(cpu_trade.random_key,rPack->sstock_code);//fixme cpu_trade.tradeamt = rPack->lvol8; cpu_trade.balance = rPack->lvol9; cpu_trade.termsno = rPack->lvol4; sprintf(cpu_trade.termno,"%012d",tDevice.deviceno); // 终端号 cpu_trade.tradecnt = trans.dpscnt; sprintf(cpu_trade.tx_datetime,"%s%s",rPack->spost_code,rPack->spost_code2); ret = doCheckMac(&cpu_trade,NULL,out_pack->sstock_code2); if(ret) { writelog(LOG_ERR,"doCheckMac err[%d]",ret); return ret; } trans.feetype=tCard.feetype; trans.cardtype=tCard.cardtype; // ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_INC,0); // if(ret) // return ret; // 读取操作员号 ret = DB_t_authcard_read_by_cardno(opercardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"get operator code from auth card error, auth_card_id[%d]",opercardno); if(DB_NOTFOUND == ret) return E_DB_AUTHCARD_N; else return E_DB_OPERATOR_R; } if(tAuthCard.status[0]!=STATUS_NORMAL) { return E_OPERLOGON_UNREG; } des2src(trans.opercode,tAuthCard.opercode); ret=DB_t_dpsoper_read_lock_by_c0_and_opercode(trans.opercode,&tDepositOper); if(ret) { if(DB_NOTFOUND==ret) return E_DB_DEPOSITOPER_R; else return E_DB_DEPOSITOPER_N; } if(tDepositOper.status[0]!=STATUS_NORMAL) { DB_t_dpsoper_free_lock_by_c0(); return E_DEPOSITOPER_STOP; } //判断是否是重复交易 if(tDepositOper.lastdevseqno==transdtl.devseqno) { DB_t_dpsoper_free_lock_by_c0(); ret=DB_t_transdtl_read_by_accdate_and_devphyid_and_devseqno( trans.transdate,tDepositOper.lastdevphyid,tDepositOper.lastdevseqno, &transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_R; } //if(transdtl.revflag[0]=='1') // return E_TRANSDTL_REV; ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0); out_pack->lvol5 = transdtl.cardno; out_pack->lvol10 = (int)D4U5(transdtl.cardaftbal*100,0); out_pack->lcert_code = transdtl.termseqno; writelog(LOG_INFO,"该交易已成功,卡号[%d]充值金额[%.2lf]卡余额[%.2lf]",transdtl.cardno, transdtl.amount,transdtl.cardaftbal); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } if(strncmp(tDepositOper.lasttransdate,trans.transdate,8)!=0) { des2src(tDepositOper.lasttransdate,trans.transdate); tDepositOper.depositcnt=0; tDepositOper.depositamt=0; } tDepositOper.depositcnt++; tDepositOper.depositamt+=trans.inputamt; tDepositOper.lastdevseqno=transdtl.devseqno; des2src(tDepositOper.lastdevphyid,transdtl.devphyid); des2src(tDepositOper.lastsaved,trans.sysdatetime); if(amtcmp(tDepositOper.maxdepositamt,0)>0) { DB_t_dpsoper_free_lock_by_c0(); if(amtcmp(tDepositOper.depositamt,tDepositOper.maxdepositamt)>0) { return E_OPER_OVER_MAX_DEPOSIT_AMT; } } ret=DB_t_dpsoper_update_lock_by_c0(&tDepositOper); if(ret) { return E_DB_DEPOSITOPER_U; } ret=DB_t_dpsshoppos_read_by_deviceid(trans.termid, &tDepositShoppos); if(ret) { if(DB_NOTFOUND==ret) { writelog(LOG_INFO,"PosDeposit termid[%d] ",trans.termid); trans.transcode = TC_POSDEPOSIT; } else { return E_DB_DEPOSITSHOPPOS_R; } } else { writelog(LOG_INFO,"ShopPosDeposit termid[%d] ",trans.termid); trans.transcode = TC_SHOPPOSDEPOSIT; ret=DB_t_shop_read_by_shopid(tDepositShoppos.shopid, &tDepositShop); if(ret) { if(DB_NOTFOUND==ret) return E_DB_SHOP_N; else return E_DB_SHOP_R; } if(tDepositShop.status[0]!=STATUS_NORMAL) { return E_SHOP_LOGOUT; } des2src(trans.draccno,tDepositShop.accno); } ret=pAccTrans->InitTrans(); if(ret) return ret; //根据卡号和钱包号得到消费者账号(借方) ret=DB_t_account_read_by_accno(tCard.accno,&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_account_read_by_accno ret[%d]cardno[%d]",ret,trans.cardno); if(DB_NOTFOUND==ret) return E_NOTEXIST_ACCNO; else return E_DB_ACCOUNT_R; } double CardMaxBal=0; ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal); if(ret) return ret; if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>=0) return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); trans.custid=tCard.custid; des2src(trans.cardaccno,tAccount.accno); ret=pAccTrans->doTrans(); if(ret) return ret; des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.transflag = TF_DPS; transdtl.cardcnt=trans.dpscnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.cardaftbal=trans.cardaftbal; transdtl.custid=trans.custid; des2src(transdtl.custname,tAccount.accname); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } sprintf(trans.remark,"卡号%d 充值前卡余额:%.2lf元 卡当前余额:%.2lf元",trans.cardno,trans.cardbefbal,trans.cardaftbal); writelog(LOG_INFO,trans.remark); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,F_SSTOCK_CODE2,0); out_pack->lvol5 = trans.cardno; out_pack->lvol10 = (int)D4U5(trans.cardaftbal*100,0); out_pack->lcert_code = trans.termseqno; PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F847229(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_AUTHCARDLOSS; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; int auth_cardno = 0; T_t_authcard tAuthCard; memset(&tAuthCard,0,sizeof tAuthCard); auth_cardno = rPack->lvol0; if(auth_cardno <= 0) { return E_INPUT_CARDNO; } if(strlen(rPack->scust_limit) == 0) { return E_INPUT_OPER_NULL; } ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) return E_NOTEXIST_AUTHCARD; else return E_DB_AUTHCARD_R; } sprintf(trans.remark,"操作员[%s]授权卡卡号[%d]挂失",tAuthCard.opercode,tAuthCard.cardno); if(tAuthCard.status[0]==STATUS_DELETE) { writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno); return E_AUTHCARD_LOGOUT; } if(tAuthCard.lossflag[0]=='1') { return E_AUTHCARD_IS_LOSS; } T_t_operator tOper; memset(&tOper,0,sizeof tOper); ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode); return E_DB_OPERATOR_N; } else return E_DB_OPERATOR_R; } if(tOper.status[0]==STATUS_DELETE) { writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode); return E_OPERLOGON_UNREG; } tAuthCard.lossflag[0]='1'; getsysdate(tAuthCard.lossdate); ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno); return E_DB_AUTHCARD_U; } // 插入黑名单表 T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tAuthCard.cardno; des2src(cardver.accdate,pAccTrans->trans.accdate); cardver.termid=pAccTrans->trans.termid; cardver.termseqno=pAccTrans->trans.termseqno; cardver.cardno=tAuthCard.cardno; des2src(cardver.cardphyid,tAuthCard.cardphyid); cardver.cardvertype=CARDVERTYPE_CARDLOSS; cardver.adddelflag=ADDDELFLAG_ADD; cardver.status[0]=STATUS_NORMAL; 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; } return 0; }
int F847228(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_AUTHCARDUPD; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; int auth_cardno = 0; T_t_authcard tAuthCard; T_t_operator tOper; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); double uni_no = 0.0; memset(&tAuthCard,0,sizeof tAuthCard); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); auth_cardno = rPack->lvol0; if(auth_cardno <= 0) { return E_INPUT_CARDNO; } if(strlen(rPack->scust_limit) == 0) { return E_INPUT_OPER_NULL; } if(IsInvalidDateTime(rPack->sdate0,"YYYYMMDD")) { return E_INPUT_DATE; } ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) return E_NOTEXIST_AUTHCARD; else return E_DB_AUTHCARD_R; } if(tAuthCard.status[0] == STATUS_DELETE) { writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno); return E_AUTHCARD_LOGOUT; } if(tAuthCard.lossflag[0]== '1') { writelog(LOG_ERR,"auth card is loss , card id [%d]",tAuthCard.cardno); return E_AUTHCARD_IS_LOSS; } memset(&tOper,0,sizeof tOper); ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode); return E_DB_OPERATOR_N; } else return E_DB_OPERATOR_R; } if(tOper.status[0]==STATUS_DELETE) { writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode); return E_OPERLOGON_UNREG; } des2src(tAuthCard.expiredate,rPack->sdate0); tAuthCard.privilege = rPack->lvol1; ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno); return E_DB_AUTHCARD_U; } SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_SDATE0,F_SCUST_LIMIT,0); out_pack->lvol0 = tAuthCard.cardno; des2src(out_pack->sdate0,tAuthCard.expiredate); out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->scust_limit,tAuthCard.opercode); sprintf(trans.remark,"操作员[%s]授权卡卡号[%d]更新",tAuthCard.opercode,tAuthCard.cardno); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F847229(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; char sysdate[9] = ""; char systime[7] = ""; int auth_cardno = 0; T_t_authcard tAuthCard; T_t_operator tOper; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->checkCfgUpdate(); if(ret) return ret; pAccTrans->clear(); GetCpackDataString(rPack,pAccTrans->cpackdata); pAccTrans->trans.transcode=TC_AUTHCARDLOSS; ret=pAccTrans->addOperDtl(rPack->semp); if(ret) return ret; memset(&tAuthCard,0,sizeof tAuthCard); auth_cardno = rPack->lvol0; if(auth_cardno <= 0) { *pRetCode = E_INPUT_CARDNO; goto L_RETU; } if(strlen(rPack->scust_limit) == 0) { *pRetCode = E_INPUT_OPER_NULL; goto L_RETU; } ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_AUTHCARD_NOT_EXISTS; else *pRetCode = E_DB_OPER_AUTHCARD_R; goto L_RETU; } if(tAuthCard.status[0]==STATUS_LOGOUT) { writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno); *pRetCode = E_AUTHCARD_HAS_CANCEL; goto L_RETU; } memset(&tOper,0,sizeof tOper); ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode); *pRetCode = E_DB_OPERATOR_N; } else *pRetCode = E_DB_OPERATOR_R; goto L_RETU; } if(tOper.status[0]==STATUS_LOGOUT) { writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode); *pRetCode = E_OPERLOGON_UNREG; goto L_RETU; } tAuthCard.cardstatus[CARDSTAT_TYPE_LOST]='1'; getsysdate(tAuthCard.lossdate); ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno); *pRetCode = E_DB_OPER_AUTHCARD_U; goto L_RETU; } // 插入黑名单表 ret = InsertToBlkList(auth_cardno,ADD_BLACKLIST); if(ret) { writelog(LOG_ERR,"insert into black list error, card id[%d]",auth_cardno); *pRetCode = ret; goto L_RETU; } // 生成流水 return 0; L_RETU: return -1; }
int F849005(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; int device_id=0; char sDevPhyid[31]=""; char current_date[9] = ""; CAccTrans& ats=CAccTrans::GetInst(); TRANS& trans=ats.trans; ret=ats.CheckCfgUpdate(); if(ret) return ret; T_t_authcard auth_card; memset(&auth_card,0,sizeof auth_card); writelog(LOG_INFO,"充值操作员签到,操作员卡号%d,设备%s",rPack->lvol5,rPack->sphone3); ret = DB_t_authcard_read_by_cardno(rPack->lvol5,&auth_card); if(ret) { if(DB_NOTFOUND == ret) return E_DB_AUTHCARD_N; else return E_DB_AUTHCARD_R; } if(auth_card.status[0]!=STATUS_NORMAL) return E_AUTHCARD_LOGOUT; if(auth_card.lossflag[0] == '1') { return E_AUTHCARD_IS_LOSS; } // 判断授权卡权限 // if((auth_card.privilege & AUTHCARD_PRV_ADDPOS) == 0) // { // *pRetCode = E_AUTHCARD_IS_LOSS; // goto L_RETU; // } // 判断有效期 if(strcmp(auth_card.expiredate,trans.accdate) < 0) { return E_CARD_EXPIRED; } T_t_operator oper; memset(&oper,0,sizeof oper); ret = DB_t_operator_read_by_opercode(auth_card.opercode,&oper); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_OPER; else return E_DB_OPERATOR_R; } T_t_dpsoper tDepositOper; memset(&tDepositOper,0,sizeof tDepositOper); ret=DB_t_dpsoper_read_by_opercode(auth_card.opercode,&tDepositOper); if(ret) { if(DB_NOTFOUND==ret) return E_DB_DEPOSITOPER_R; else return E_DB_DEPOSITOPER_N; } if(tDepositOper.status[0]!=STATUS_NORMAL) { return E_DEPOSITOPER_STOP; } ret=GetDevIdByDevPhyId(&device_id,rPack->sphone3); if (ret) { writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] device_id[%d]devphyid[%s]",ret,device_id,rPack->sphone3); return ret; } T_t_dpsshoppos tDepositShoppos; if('1'==tDepositOper.shopoperflag[0]) { memset(&tDepositShoppos,0,sizeof(tDepositShoppos)); ret=DB_t_dpsshoppos_read_by_deviceid(device_id, &tDepositShoppos); if(ret) { if(DB_NOTFOUND==ret) { writelog(LOG_INFO,"PosDeposit device_id[%d] ",device_id); return E_DB_DEPOSITSHOPPOS_N; } else { return E_DB_DEPOSITSHOPPOS_R; } } T_t_shop tShop; memset(&tShop,0,sizeof(tShop)); ret=DB_t_shop_read_by_shopid(tDepositShoppos.shopid, &tShop); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_SHOPID,tDepositShoppos.shopid); else return E_DB_SHOP_R; } if(tShop.status[0]!=STATUS_NORMAL) { return ERRINFO(E_SHOP_LOGOUT,tDepositShoppos.shopid); } } else { memset(&tDepositShoppos,0,sizeof(tDepositShoppos)); ret=DB_t_dpsshoppos_read_by_deviceid(device_id, &tDepositShoppos); if(ret) { if(DB_NOTFOUND!=ret) { writelog(LOG_ERR,"PosDeposit termid[%d] ",device_id); return E_DB_DEPOSITSHOPPOS_R; } } else { ERRTIP("设备号[%d]属于属于充值商户,非充值商户操作员不能使用该设备"); return E_COMMON_ERR; } } if(tDepositOper.devlimitflag[0]=='1') { T_t_dpsoperpos tDepositOperpos; memset(&tDepositOperpos,0,sizeof tDepositOperpos); ret=DB_t_dpsoperpos_read_by_opercode_and_deviceid(tDepositOper.opercode, device_id,&tDepositOperpos); if(ret) { writelog(LOG_ERR,"DB_t_dpsoperpos_read_by_opercode_and_deviceid ret[%d]oper_code[%s] device_id[%d]devphy999_id[%s]",ret,tDepositOper.opercode, device_id,sDevPhyid); if(DB_NOTFOUND==ret) return E_OPER_NO_RIGHT_FOR_DEVICE; else return E_DB_DEPOSITOPERPOS_R; } } return 0;
int F849003(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret =0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->CheckCfgUpdate(); if(ret) return ret; T_t_authcard tAuthCard; T_t_transdtl transdtl; T_t_dpsoper tDepositOper; T_t_dpsoperpos tDepositOperpos; T_t_dpsshoppos tDepositShoppos; T_t_shop tDepositShop; T_t_account tAccount; //帐户表 ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tAuthCard,0,sizeof(tAuthCard)); memset(&tDepositOper,0,sizeof(tDepositOper)); memset(&tDepositOperpos,0,sizeof(tDepositOperpos)); memset(&tDepositShoppos,0,sizeof(tDepositShoppos)); memset(&tDepositShop,0,sizeof(tDepositShop)); memset(&tAccount,0,sizeof(tAccount)); memset(&transdtl,0,sizeof(transdtl)); int opercardno=rPack->lvol3; //操作员号 if(!opercardno) return E_INPUTNULL_CARDNO; trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol5; trans.purseno=PURSE_NO_ONE; trans.cardbefbal=rPack->lvol9/100.0; //入卡金额 trans.cardaftbal=trans.cardbefbal; trans.dpscnt= rPack->lvol7; //入卡金额 trans.inputamt= rPack->lvol8/100.0; //充值金额 trans.unusedamt = trans.inputamt; trans.fundtype=1; ret=IsWaterExceptCard(trans.cardno); if(ret) { ERRTIP("卡号[%d]水控余额异常,充值功能暂停使用,请联系一卡通管理中心处理!!!",trans.cardno); return ERRIF_CARDACC_EXCEPT; } T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=doCard(trans,tCard); if(ret) { return ret; } trans.feetype=tCard.feetype; trans.cardtype=tCard.cardtype; // ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_INC,0); // if(ret) // return ret; transdtl.sysid= rPack->lcert_code; //上传工作站标识(前置机注册号) des2src(transdtl.devphyid, rPack->sphone3); //物理设备ID transdtl.devseqno=rPack->lvol4; //上传端流水号 // 读取操作员号 ret = DB_t_authcard_read_by_cardno(opercardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"get operator code from auth card error, auth_card_id[%d]",opercardno); if(DB_NOTFOUND == ret) return E_DB_AUTHCARD_N; else return E_DB_OPERATOR_R; } if(tAuthCard.status[0]!=STATUS_NORMAL) { return E_OPERLOGON_UNREG; } des2src(trans.opercode,tAuthCard.opercode); ret=GetDevIdByDevPhyId(&(trans.termid),transdtl.devphyid); if (ret) { writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] devphy999_id[%s]",ret,transdtl.devphyid); return ret; } ret=DB_t_dpsoper_read_lock_by_c0_and_opercode(trans.opercode,&tDepositOper); if(ret) { if(DB_NOTFOUND==ret) return E_DB_DEPOSITOPER_R; else return E_DB_DEPOSITOPER_N; } if(tDepositOper.status[0]!=STATUS_NORMAL) { DB_t_dpsoper_free_lock_by_c0(); return E_DEPOSITOPER_STOP; } //判断是否是重复交易 if(tDepositOper.lastdevseqno==transdtl.devseqno) { DB_t_dpsoper_free_lock_by_c0(); ret=DB_t_transdtl_read_by_accdate_and_termid_and_devseqno(trans.accdate,trans.termid,tDepositOper.lastdevseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_R; } //if(transdtl.revflag[0]=='1') // return E_TRANSDTL_REV; ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0); out_pack->lvol5 = transdtl.cardno; out_pack->lvol10 = (int)D4U5(transdtl.cardaftbal*100,0); out_pack->lcert_code = transdtl.termseqno; writelog(LOG_INFO,"该交易已成功,卡号[%d]充值金额[%.2lf]卡余额[%.2lf]",transdtl.cardno,transdtl.amount,transdtl.cardaftbal); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } if(strncmp(tDepositOper.lasttransdate,trans.transdate,8)!=0) { des2src(tDepositOper.lasttransdate,trans.transdate); tDepositOper.depositcnt=0; tDepositOper.depositamt=0; } tDepositOper.depositcnt++; tDepositOper.depositamt+=trans.inputamt; tDepositOper.lastdevseqno=transdtl.devseqno; des2src(tDepositOper.lastdevphyid,transdtl.devphyid); des2src(tDepositOper.lastsaved,trans.sysdatetime); if(amtcmp(tDepositOper.maxdepositamt,0)>0) { DB_t_dpsoper_free_lock_by_c0(); if(amtcmp(tDepositOper.depositamt,tDepositOper.maxdepositamt)>0) { return E_OPER_OVER_MAX_DEPOSIT_AMT; } } ret=DB_t_dpsoper_update_lock_by_c0(&tDepositOper); if(ret) { return E_DB_DEPOSITOPER_U; } if('1'==tDepositOper.shopoperflag[0]) { ret=DB_t_dpsshoppos_read_by_deviceid(trans.termid, &tDepositShoppos); if(ret) { if(DB_NOTFOUND==ret) { writelog(LOG_INFO,"PosDeposit termid[%d] ",trans.termid); return E_DB_DEPOSITSHOPPOS_N; } else { return E_DB_DEPOSITSHOPPOS_R; } } ret=DB_t_shop_read_by_shopid(tDepositShoppos.shopid, &tDepositShop); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_SHOPID,tDepositShoppos.shopid); else return E_DB_SHOP_R; } if(tDepositShop.status[0]!=STATUS_NORMAL) { return ERRINFO(E_SHOP_LOGOUT,tDepositShop.shopid); } trans.transcode = TC_SHOPPOSDEPOSIT; des2src(trans.shopaccno,tDepositShop.accno); writelog(LOG_INFO,"充值商户充值"); } else { ret=DB_t_dpsshoppos_read_by_deviceid(trans.termid, &tDepositShoppos); if(ret) { if(DB_NOTFOUND!=ret) { writelog(LOG_INFO,"PosDeposit termid[%d] ",trans.termid); return E_DB_DEPOSITSHOPPOS_R; } } else { ERRTIP("设备号[%d]属于属于充值商户,非充值商户操作员不能使用该设备",trans.termid); return E_COMMON_ERR; } trans.transcode = TC_POSDEPOSIT; } ret=pAccTrans->InitTrans(); if(ret) return ret; //根据卡号和钱包号得到消费者账号(借方) ret=DB_t_account_read_by_accno(tCard.accno,&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_account_read_by_accno ret[%d]cardno[%d]accno[%s]",ret,trans.cardno,tCard.accno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_ACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } if(tAccount.lastdpscnt>trans.dpscnt) { return ERRINFO(E_CARDCNT_LT_LASTCARDCNT,trans.dpscnt,tAccount.lastdpscnt); } // double CardMaxBal=0; // ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal); // if(ret) // return ret; // if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>0) // return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); trans.custid=tCard.custid; des2src(trans.cardaccno,tAccount.accno); ret=pAccTrans->doTrans(); if(ret) return ret; des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.transflag=TF_DPS; transdtl.cardcnt=trans.dpscnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.cardaftbal=trans.cardaftbal; transdtl.custid=trans.custid; transdtl.showcardno=atol(tCard.showcardno); des2src(transdtl.custname,tAccount.accname); des2src(transdtl.opercode,trans.opercode); GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); transdtl.status[0]=DTLSTATUS_SUCCESS; ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } sprintf(trans.remark,"卡号%d 充值前卡余额:%.2lf元 卡当前余额:%.2lf元",trans.cardno,trans.cardbefbal,trans.cardaftbal); writelog(LOG_INFO,trans.remark); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0); out_pack->lvol5 = trans.cardno; out_pack->lvol10 = (int)D4U5(trans.cardaftbal*100,0); out_pack->lcert_code = trans.termseqno; PutRow(handle,out_pack,pRetCode,szMsg); return 0; }