int F846302(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); // ret=pAccTrans->checkCfgUpdate(); // if(ret) // return ret; des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_CARDOPENREV; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; char authrightflag=rPack->sstatus2[0]; des2src(trans.chkopercode,rPack->semp_no); if('1'==authrightflag) { ret=chk_oper_pwd(trans.chkopercode,rPack->scust_limit); if(ret) return ret; } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); char oldaccdate[9]=""; des2src(oldaccdate,rPack->sdate3); int oldtermid=rPack->lwithdraw_flag; int oldtermseqno=rPack->lserial1; trans.dpscnt=rPack->lvol5; trans.paycnt=rPack->lvol6; trans.cardbefbal=rPack->lvol7; des2src(trans.cardphyid,rPack->sstation1); if(trans.dpscnt>1||trans.paycnt>0) return E_CARD_USED; if(strlen(oldaccdate)<1) return E_INPUTNULL_ACCDATE; if(oldtermid<1) return E_INPUTNULL_TERMID; if(oldtermseqno<1) return E_INPUTNULL_TERMSEQNO; SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LSERIAL1,F_SSTATION0,F_VSMESS,F_STIME3,0); ret=doReverse(oldaccdate,oldtermid,oldtermseqno,outPack->sstation0); if(ret) return ret; outPack->lvol0=pAccTrans->trans.cardno; outPack->lvol8=0; des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,pAccTrans->trans.opercode); outPack->lserial1=pAccTrans->trans.termseqno; strcpy(outPack->vsmess,"开户冲正成功"); strcat(outPack->vsmess,pAccTrans->remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F846315(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); char oldaccdate[9]=""; des2src(oldaccdate,rPack->sdate3); int oldtermid=rPack->lwithdraw_flag; int oldtermseqno=rPack->lserial1; char authrightflag=rPack->sstatus2[0]; if(strlen(oldaccdate)<1) return E_INPUTNULL_ACCDATE; if(oldtermid<1) return E_INPUTNULL_TERMID; if(oldtermseqno<1) return E_INPUTNULL_TERMSEQNO; if('1'==authrightflag) { ret=chk_oper_pwd(rPack->semp_no,rPack->scust_limit); if(ret) return ret; } CAccTrans *pAccTrans=CAccTrans::getInstance(); ret=pAccTrans->checkCfgUpdate(); if(ret) return ret; pAccTrans->clear(); GetCpackDataString(rPack,pAccTrans->cpackdata); pAccTrans->trans.transcode=TC_TRANSREV; ret=pAccTrans->addOperDtl(rPack->semp); if(ret) return ret; ret=doReverse(authrightflag,oldaccdate,oldtermid,oldtermseqno); if(ret) return ret; SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LSERIAL1,F_VSMESS,0); outPack->lvol0=pAccTrans->trans.cardno; outPack->lvol8=0; des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->semp,pAccTrans->trans.opercode); outPack->lserial1=pAccTrans->trans.termseqno; strcpy(outPack->vsmess,pAccTrans->remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0;
int F847183(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char tx_date[8+1]=""; //发生日期 char tx_time[6+1]=""; //发生时间 int card_no=0; //卡号 char device_id[8+1]=""; //终端机ID int serial_no=0; //终端机流水号 double dUniqno=0; T_t_tif_tradeserial tTradeserial; //卡操作流水表 T_t_tif_rcvdtl tRcvdtl; char sysdate[11]=""; char systime[9]=""; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); memset(&tRcvdtl,0,sizeof(tRcvdtl)); memset(&tTradeserial,0,sizeof(tTradeserial)); getsysdate(sysdate); getsystime(systime); des2src(tTradeserial.enteract_time,systime); des2src(tx_date,rPack->sbank_pwd); des2src(tx_time,rPack->sbank_code); card_no=rPack->lvol0; des2src(device_id,rPack->sbank_pwd2); serial_no=rPack->lvol1; trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); if(strlen(rPack->scust_limit)==0) { *pRetCode=E_OPER_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scust_limit2)==0) { *pRetCode=E_INPUT_AUTH_OPER_NULL; goto L_RETU; } if(strcmp(rPack->scust_limit,rPack->scust_limit2)==0) { writelog(LOG_ERR,"oper[%s]auth_oper[%s]",rPack->scust_limit,rPack->scust_limit2); *pRetCode=E_OPER_AND_AUTH_OPER_EQ; goto L_RETU; } ret=chk_oper_pwd(rPack->scust_limit2,rPack->semp_pwd); if(ret) { if(E_OPER_NOT_EXIST==ret) *pRetCode=E_AUTH_OPER_NOT_EXIST; else if(E_PASSWORD_WRONG==ret) *pRetCode=E_AUTH_OPER_PWD; else *pRetCode=ret; goto L_RETU; } ret=DB_t_tif_rcvdtl_read_lock_by_c0_and_tx_date_and_tx_time_and_card_no_and_device_id_and_serial_no(tx_date,tx_time,card_no,device_id,serial_no,&tRcvdtl); if(ret) { if(DB_NOTFOUND==ret) { writelog(LOG_ERR,"tx_date[%s],tx_time[%s],card_no[%d],device_id[%s],serial_no[%d]",tx_date,tx_time,card_no,device_id,serial_no); *pRetCode=E_SERIALNO_NOT_EXIST; } else { writelog(LOG_ERR,"read_lock t_tif_rcvdtl err ret[%d]",ret); *pRetCode=E_DB_RCVDTL_R; } goto L_RETU; } if(tRcvdtl.status[0]=='4') { *pRetCode=E_TX_SERIAL_CZ; DB_t_tif_rcvdtl_free_lock_c0(); goto L_RETU; } if(tRcvdtl.status[0]!='3') { *pRetCode=E_TX_SERIAL_CANNOT_CZ; DB_t_tif_rcvdtl_free_lock_c0(); goto L_RETU; } if(tRcvdtl.amount<0) { *pRetCode=E_TX_SERIAL_CANNOT_CZ; DB_t_tif_rcvdtl_free_lock_c0(); goto L_RETU; } tRcvdtl.status[0]='4'; //冲正 des2src(tRcvdtl.oper_no,rPack->scust_limit); des2src(tRcvdtl.deal_date,sysdate); des2src(tRcvdtl.deal_time,systime); ret=DB_t_tif_rcvdtl_update_lock_by_c0(&tRcvdtl); if(ret) { *pRetCode=E_DB_RCVDTL_U; writelog(LOG_ERR,"DB_t_tif_rcvdtl_update_lock_by_c0[%d]",ret); goto L_RETU; } DB_t_tif_rcvdtl_free_lock_c0(); //赋值 ret=getdata(&tTradeserial,&tRcvdtl); if(ret) { *pRetCode=ret; goto L_RETU; } des2src(tTradeserial.operate_date,sysdate); des2src(tTradeserial.operate_time,systime); des2src(tTradeserial.collect_date,sysdate); des2src(tTradeserial.collect_time,systime); ret=GetLogicDate(tTradeserial.enteract_date); //业务日期 if(ret) { *pRetCode=ret; writelog(LOG_ERR,"GetLogicDate err ret[%d]",ret); goto L_RETU; } des2src(tTradeserial.enteract_time,systime); tTradeserial.in_balance =rPack->damt1; tTradeserial.trade_fee = -(tRcvdtl.amount/100.0); //本次消费金额 tTradeserial.out_balance=tTradeserial.in_balance-tTradeserial.trade_fee; tTradeserial.trade_count=rPack->lvol10; tTradeserial.maindevice_id=rPack->lvol6; // tTradeserial.sys_id=rPack->lvol6; des2src(tTradeserial.oper_code,rPack->sdate1); tTradeserial.reviseserial_no=tTradeserial.other_seri_no; //取流水号,从帐处理 ret=getNewUniqNo(KEYTYPE_TRADESERIAL, &dUniqno); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"getNewUniqNo err[%d]",ret); goto L_RETU; } tTradeserial.serial_no=(int)dUniqno; //###################################################### //入账处理 switch(tTradeserial.serial_type) { case 930031: if(0==tRcvdtl.amount) break; tTradeserial.serial_type=TXCODE_TX_REVEAL; ret=process930031(&tTradeserial); if(ret) { //业务处理失败处理 *pRetCode=ret; goto L_RETU; } break; default: *pRetCode=E_TXCODE_NOT_EXIST; //交易码错误 goto L_RETU; } //###################################################### //添加交易流水 tTradeserial.serial_state=SERISTAT_DEBT; ret = DB_t_tif_tradeserial_add(&tTradeserial); if (ret) { writelog(LOG_ERR,"DB_t_tif_tradeserial_add ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode= E_DB_TRADESERIAL_E; else *pRetCode= E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tTradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_DAMT3,F_VSMESS,0); out_pack->lserial1=tTradeserial.serial_no; out_pack->damt2=tTradeserial.out_balance; out_pack->damt3=-tTradeserial.trade_fee; sprintf(out_pack->vsmess,"流水号:%d 冲正金额:%.2lf元 冲正前卡余额:%.2lf元 卡当前余额:%.2lf元",tTradeserial.serial_no,-tTradeserial.trade_fee,tTradeserial.in_balance,tTradeserial.out_balance); writelog(LOG_DEBUG,out_pack->vsmess); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F846322(TRUSERID *handle, int iRequest, ST_PACK *rPack, int *pRetCode, char *szMsg) { int ret = 0; CAccTrans& ats = CAccTrans::GetInst(); TRANS& trans = ats.trans; des2src(ats.trans.opercode, rPack->semp); ats.trans.transcode = TC_CARDBALMOD; des2src(trans.cardasno, ats.reqpack->scard0); strcpy(ats.trans.samno, ats.reqpack->snote); ats.trans.termseqno=ats.reqpack->lserial0; ats.trans.termdate = atol(ats.reqpack->sdate0); ats.trans.termtime = atol(ats.reqpack->stime0); ats.SetCardCntAndCardBal(ats.reqpack->lvol5, ats.reqpack->lvol6, ats.reqpack->lvol7); des2src(trans.cardphyid, ats.reqpack->sstation1); if(ats.reqpack->lbank_acc_type > 0) { ats.trans.inputamt= D4U5(ats.reqpack->damt0 * 100.0); } else { ats.trans.inputamt = -D4U5(ats.reqpack->damt0 * 100.0); } ret = ats.ChkOper(); if(ret) return ret; ret = chk_oper_pwd(rPack->semp_no, rPack->scust_limit); if(ret) return ret; ret = GetCardIDByCardasno(trans.cardasno, &trans.cardid); if(ret) { return ret; } CCardBalUpd obj; obj.SetTrans(ats.trans); if(!obj.LockCard()) { return obj.GetErrCode(); } if(!obj.ExecBefChk()) { return obj.GetErrCode(); } if(!obj.Execute()) { return obj.GetErrCode(); } if(!obj.ExecAftChk()) { return obj.GetErrCode(); } if(!obj.SaveExecResult()) { return obj.GetErrCode(); } if(!obj.buildOutput()) { return obj.GetErrCode(); } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack, 0, 1); SetCol(handle, F_LVOL0, F_LVOL8, F_SDATE0, F_SCARD0, F_SDATE3, F_STIME3, F_SEMP, F_LWITHDRAW_FLAG, F_LSERIAL0, F_VSMESS, F_SNAME2,F_SALL_NAME,F_SPHONE,0); outPack->lvol0 = obj.GetObjCard().cardno; des2src(outPack->scard0, obj.GetObjCard().cardasno); outPack->lvol8 = obj.GetAftcardbal(); sprintf(outPack->sdate3, "%d", ats.hostdate); sprintf(outPack->stime3, "%06d", ats.hosttime); des2src(outPack->semp, trans.opercode); outPack->lwithdraw_flag = trans.termid; outPack->lserial0 = trans.operseqno; strcpy(outPack->sname2,obj.GetObjCardtype().cardtypename); strcpy(outPack->sall_name,obj.GetObjCustomer().custname); strcpy(outPack->sphone,obj.GetObjCustomer().mobile); writelog(LOG_ERR, "cardno:%d,cardbal:%d,date:%s,time:%s" , outPack->lvol0 , outPack->lvol8, outPack->sdate3, outPack->stime3); sprintf(trans.remark, "余额调整%.2lf元,卡余额%.2lf元",ats.trans.inputamt/ 100.0,obj.GetAftcardbal()/ 100.0); des2src(outPack->vsmess, trans.remark); PutRow(handle, outPack, pRetCode, szMsg); return 0; }
int F847183(TRUSERID *handle, int iRequest, ST_PACK *rPack, int *pRetCode, char *szMsg) { int ret = 0; char tx_date[8+1] = ""; //发生日期 // char tx_time[6+1]=""; //发生时间 int card_no = 0; //卡号 char device_id[8+1] = ""; //终端机ID int serial_no = 0; //终端机流水号 int flag = 0; double dUniqno = 0; T_t_tif_tradeserial tOldTradeserial; //当日流水表 T_t_tif_tradeserial tTradeserial; //当日流水表 T_t_tif_tradeserial_his tTradeserialhis; //历史流水表 T_t_pif_tradecode tTradeCode; T_t_pif_card tCard; RevAcc revAcc; char sysdate[11] = ""; char systime[9] = ""; char sYear[5] = ""; char sMonDay[5] = ""; char logic_date[9] = ""; int days = 0; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack, 0, 1); memset(&tTradeserial, 0, sizeof(tTradeserial)); memset(&tOldTradeserial, 0, sizeof(tOldTradeserial)); memset(&tTradeserialhis, 0, sizeof(tTradeserialhis)); memset(&tTradeCode, 0, sizeof tTradeCode); memset(&tCard, 0, sizeof tCard); memset(&revAcc,0,sizeof revAcc); getsysdate(sysdate); getsystime(systime); des2src(tTradeserial.enteract_time, systime); //取流水号,入帐处理 ret = getNewUniqNo(KEYTYPE_TRADESERIAL, &dUniqno); if (ret) { *pRetCode = ret; writelog(LOG_ERR, "getNewUniqNo err[%d]", ret); goto L_RETU; } if(db_commit()) return E_DB_COMMIT; writelog(LOG_ERR,"getNewUniqNo[%d]",D2I(dUniqno)); des2src(tx_date, rPack->sbank_pwd); // des2src(tx_time,rPack->sbank_code); card_no = rPack->lvol0; des2src(device_id, rPack->sbank_pwd2); serial_no = rPack->lvol1; trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); des2src(sYear, tx_date); des2src(sMonDay, tx_date + 4); if (strlen(rPack->scust_limit) == 0) { *pRetCode = E_OPER_NOT_EXIST; goto L_RETU; } if (strlen(rPack->scust_limit2) == 0) { *pRetCode = E_INPUT_AUTH_OPER_NULL; goto L_RETU; } if (strcmp(rPack->scust_limit, rPack->scust_limit2) == 0) { writelog(LOG_ERR, "oper[%s]auth_oper[%s]", rPack->scust_limit, rPack->scust_limit2); *pRetCode = E_OPER_AND_AUTH_OPER_EQ; goto L_RETU; } ret = chk_oper_pwd(rPack->scust_limit2, rPack->semp_pwd); if (ret) { if (E_OPER_NOT_EXIST == ret) *pRetCode = E_AUTH_OPER_NOT_EXIST; else if (E_PASSWORD_WRONG == ret) *pRetCode = E_AUTH_OPER_PWD; else *pRetCode = ret; goto L_RETU; } ret = DB_t_pif_card_read_by_card_id(card_no, &tCard); if (ret) { if (DB_NOTFOUND == ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } if (tCard.state_id[CARDSTAT_TYPE_REG] == '2') { writelog(LOG_ERR, "冲正交易卡号已注销cardid[%d]", tCard.card_id); *pRetCode = E_ACTNO_LOGOUT; goto L_RETU; } //查询当前流水表 // ret = DB_t_tif_tradeserial_read_lock_by_c4_and_operate_date_and_serial_no_and_card_id(tx_date, serial_no, card_no, &tOldTradeserial); // ret = DB_t_tif_tradeserial_read_lock_by_cur_and_serial_no(serial_no,&tOldTradeserial); ret = DB_t_tif_tradeserial_read_by_serial_no(serial_no,&tOldTradeserial); writelog(LOG_ERR, "tradeserial tx_date[%s]serial_no[%d]ret[%d]", tx_date, serial_no, ret); if (ret) { if (DB_NOTFOUND != ret) { *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } } else { // 如果入账日期相同,表示同一笔流水 if(strcmp(tOldTradeserial.enteract_date,tx_date) == 0) { flag = 1; memcpy(&tTradeserial, &tOldTradeserial, sizeof(tTradeserial)); //上传端流水号 tTradeserial.other_seri_no = tOldTradeserial.serial_no; des2src(tTradeserial.reserve_1, tOldTradeserial.enteract_date); /* tOldTradeserial.serial_state = SERISTAT_RUSH; //冲正 ret = DB_t_tif_tradeserial_update_lock_by_cur(&tOldTradeserial); if (ret) { *pRetCode = E_DB_TRADESERIAL_U; writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c4[%d]", ret); goto L_RETU; } DB_t_tif_tradeserial_free_lock_cur(); */ revAcc.iSerialNo= tOldTradeserial.serial_no; des2src(revAcc.sTxAccDate,tOldTradeserial.enteract_date); // des2src(revAcc.sTxDate,tOldTradeserial.operate_date); } } if (!flag) { //查询历史流水表 // ret = DB_t_tif_tradeserial_his_read_lock_by_c0_and_trans_year_and_trans_mon_day_and_serial_no_and_card_id(sYear, sMonDay, serial_no, card_no, &tTradeserialhis); // ret = DB_t_tif_tradeserial_his_read_lock_by_c1_and_enteract_date_and_serial_no( ret = DB_t_tif_tradeserial_his_read_by_bak_date_and_serial_no( tx_date,serial_no,&tTradeserialhis); writelog(LOG_ERR, "tradeserial_his enteract_date[%s]serialno[%d]ret[%d]", tx_date, serial_no, ret); if (ret) { if (DB_NOTFOUND == ret) { *pRetCode = E_SERIALNO_NOT_EXIST; goto L_RETU; } else { *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } } tTradeserial.other_seri_no = tTradeserialhis.serial_no; des2src(tTradeserial.reserve_1, tTradeserialhis.enteract_date); // 被冲正的流水的入账日期 tTradeserial.serial_state = tTradeserialhis.serial_state; //流水状态 tTradeserial.tmark = tTradeserialhis.tmark; //999交易标记 tTradeserial.maindevice_id = tTradeserialhis.maindevice_id; //上传工作站标识(前置机注册号) tTradeserial.sys_id = tTradeserialhis.sys_id; tTradeserial.comu_ver = tTradeserialhis.comu_ver; //通信版本号 tTradeserial.device_id = tTradeserialhis.device_id; des2src(tTradeserial.devphy999_id, tTradeserialhis.devphy999_id); //物理设备ID des2src(tTradeserial.dev_auth, tTradeserialhis.dev_auth); //终端设备授权号 des2src(tTradeserial.crc, tTradeserialhis.crc); //CRC校验 tTradeserial.card_id = tTradeserialhis.card_id; //交易卡号 tTradeserial.purse_id = tTradeserialhis.purse_id; //消费钱包号 tTradeserial.in_balance = tTradeserialhis.in_balance; //入卡金额 tTradeserial.out_balance = tTradeserialhis.out_balance; //出卡金额 tTradeserial.trade_fee = tTradeserialhis.trade_fee; //本次消费金额 tTradeserial.trade_count = tTradeserialhis.trade_count; //当前卡中帐户消费次数(累计使用次数) tTradeserial.serial_type = tTradeserialhis.serial_type; //交易代码 tTradeserial.boardfee = tTradeserialhis.boardfee; //搭伙费 des2src(tTradeserial.operate_date, tTradeserialhis.operate_date); //发生日期(格式化输入的日期) des2src(tTradeserial.operate_time, tTradeserialhis.operate_time); //发生时间(格式化输入的时间) // 历史入账日期 des2src(tTradeserial.enteract_date,tTradeserialhis.enteract_date); tTradeserial.condition_id = tTradeserialhis.condition_id; // 收费科目 // 保存被冲正交易的操作员号 //des2src(tTradeserial.oper_code, tTradeserialhis.oper_code); tTradeserial.customer_id = tTradeserialhis.customer_id; /* tTradeserialhis.serial_state = SERISTAT_RUSH; //冲正 ret = DB_t_tif_tradeserial_his_update_lock_by_c1(&tTradeserialhis); if (ret) { *pRetCode = E_DB_TRADESERIAL_U; writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c1[%d]", ret); goto L_RETU; } DB_t_tif_tradeserial_his_free_lock_by_c1(); */ revAcc.iSerialNo = tTradeserialhis.serial_no; des2src(revAcc.sTxAccDate,tTradeserialhis.enteract_date); // des2src(revAcc.sTxDate,tTradeserialhis.operate_date); } if (tTradeserial.card_id != card_no) { writelog(LOG_ERR, "流水中卡号不符cardid[%d]serial[%d]", card_no, tTradeserial.card_id); *pRetCode = E_SERIALNO_NOT_EXIST; goto L_RETU; } if (tTradeserial.serial_state == SERISTAT_RUSH) { *pRetCode = E_TX_SERIAL_CZ; goto L_RETU; } if (tTradeserial.serial_state != SERISTAT_DEBT) { *pRetCode = E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } /* if (amtcmp(tTradeserial.trade_fee, 0) <= 0) { *pRetCode = E_TX_SERIAL_CANNOT_CZ; strcpy(szMsg,"交易金额有误!"); goto L_RETU; } */ ret = DB_t_pif_tradecode_read_by_tradecode(tTradeserial.serial_type, &tTradeCode); if (ret) { if (DB_NOTFOUND == ret) { writelog(LOG_ERR,"补冲正交易码[%d]不存在",tTradeserial.serial_type); *pRetCode = E_DB_TRADECODE_N; } else *pRetCode = E_DB_TRADECODE_R; goto L_RETU; } if (strcmp(tTradeCode.flag,TYPE_YES) != 0) { *pRetCode = E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } ret = GetLogicDate(logic_date); //业务日期 if (ret) { *pRetCode = ret; writelog(LOG_ERR, "GetLogicDate err ret[%d]", ret); goto L_RETU; } /*// 小于 0 , 则不判断 if (tTradeCode.rush_max_day >= 0) { ret = DiffDay(logic_date, tTradeserial.enteract_date, &days); if (ret) { writelog(LOG_ERR,"ret[%d]date1[%s]date2[%s]",ret, logic_date,tTradeserial.enteract_date); *pRetCode = ret; goto L_RETU; } writelog(LOG_DEBUG,"tradecode[%d]max day[%d]diff day[%d]",tTradeCode.tradecode ,tTradeCode.rush_max_day,days); if (days > tTradeCode.rush_max_day) { writelog(LOG_ERR, "流水入账日期[%s],已超过期限[%d]天", tTradeserial.enteract_date, days-tTradeCode.rush_max_day); *pRetCode = E_TX_SERIAL_CANNOT_CZ; strcpy(szMsg, "流水入账日期已超过可冲正期限!"); goto L_RETU; } } if (tTradeCode.restrict_oper == IS_YES) { if (strcmp(rPack->scust_limit, tTradeserial.oper_code) != 0) { strcpy(szMsg, "必须由作此次交易的操作员来冲正"); *pRetCode = E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } } */ des2src(revAcc.sMdeOper, rPack->scust_limit); des2src(revAcc.sChkOper,rPack->scust_limit2); des2src(revAcc.sTxDate,sysdate); des2src(revAcc.sTxTime,systime); des2src(tTradeserial.operate_date, sysdate); des2src(tTradeserial.operate_time, systime); des2src(tTradeserial.collect_date, sysdate); des2src(tTradeserial.collect_time, systime); des2src(tTradeserial.enteract_date, logic_date); //业务日期 des2src(tTradeserial.enteract_time, systime); /////有卡冲正 if(rPack->lvol3) { if(rPack->lvol10 <=0) //交易次数 return E_INPUT_CARD_TXCNT; revAcc.iUseCardFlag = USE_CARD_TYPE_ONLINE; revAcc.iTradeCnt = rPack->lvol10 + 1; revAcc.dInCardBala = rPack->damt1; //有卡冲正,卡片上余额 tTradeserial.in_balance = rPack->damt1; tTradeserial.trade_count = rPack->lvol10 + 1; //交易次数增加 } else //使用流水的出卡值作为冲正流水的入卡值 { revAcc.iUseCardFlag = USE_CARD_TYPE_NULL; tTradeserial.in_balance = tTradeserial.out_balance ; revAcc.dInCardBala = tTradeserial.in_balance; revAcc.iTradeCnt = tTradeserial.trade_count; } revAcc.dOutCardBala=revAcc.dInCardBala; //在冲正模块中计算出卡值 tTradeserial.trade_fee = -1 * tTradeserial.trade_fee; //本次消费金额 tTradeserial.boardfee = -1 * tTradeserial.boardfee; //本次消费管理费 tTradeserial.maindevice_id = rPack->lvol6; tTradeserial.device_id = 0; revAcc.maindevice_id = tTradeserial.maindevice_id; // 上传的操作员号 des2src(tTradeserial.oper_code, rPack->scust_limit); tTradeserial.reviseserial_no = tTradeserial.other_seri_no; tTradeserial.serial_no = D2I(dUniqno); switch (tTradeserial.serial_type) { case 847106: // 现金充值冲正 ret = process847106(&tTradeserial); // 不是现金充值,不能冲正 if(ret) { *pRetCode = ret; goto L_RETU; } break; default: break; } //###################################################### //入账处理 revAcc.iRevSeriNo = tTradeserial.serial_no; revAcc.iTradeNo = tTradeserial.serial_type; ret = ReverseProcess(&revAcc); if(ret) { *pRetCode = ret; writelog(LOG_ERR, "ReverseProcess err[%d]", ret); goto L_RETU; } //###################################################### //添加交易流水 tTradeserial.serial_type = TXCODE_TX_REVEAL; //交易代码记录为冲正 tTradeserial.serial_state = SERISTAT_DEBT; tTradeserial.out_balance = revAcc.dOutCardBala; tTradeserial.tmark = 254; ret = DB_t_tif_tradeserial_add(&tTradeserial); writelog(LOG_ERR, "DB_t_tif_tradeserial_add ret[%d]", ret); if (ret) { if (DB_REPEAT == ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if (amtcmp(tTradeserial.out_balance, 0) < 0) { *pRetCode = E_ENTER_ACCOUNT; goto L_RETU; } if(db_commit()) return E_DB_COMMIT; //更新原来流水的状态 if(flag == 1) //更新流水表 { memset(&tOldTradeserial,0,sizeof tOldTradeserial); ret = DB_t_tif_tradeserial_read_lock_by_cur_and_serial_no(serial_no,&tOldTradeserial); writelog(LOG_ERR, "tradeserial tx_date[%s]serial_no[%d]ret[%d]", tx_date, serial_no, ret); if (ret) { *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } tOldTradeserial.serial_state = SERISTAT_RUSH; //冲正 ret = DB_t_tif_tradeserial_update_lock_by_cur(&tOldTradeserial); if (ret) { *pRetCode = E_DB_TRADESERIAL_U; writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c4[%d]", ret); goto L_RETU; } DB_t_tif_tradeserial_free_lock_cur(); } else //更新历史流水表 { memset(&tTradeserialhis,0,sizeof tTradeserialhis); ret = DB_t_tif_tradeserial_his_read_lock_by_c1_and_bak_date_and_serial_no( tx_date,serial_no,&tTradeserialhis); writelog(LOG_ERR, "tradeserial_his enteract_date[%s]serialno[%d]ret[%d]",tx_date, serial_no, ret); if (ret) { *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } tTradeserialhis.serial_state = SERISTAT_RUSH; //冲正 ret = DB_t_tif_tradeserial_his_update_lock_by_c1(&tTradeserialhis); if (ret) { *pRetCode = E_DB_TRADESERIAL_U; writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c1[%d]", ret); goto L_RETU; } DB_t_tif_tradeserial_his_free_lock_by_c1(); } SetCol(handle, 0); SetCol(handle, F_LSERIAL1, F_DAMT2, F_DAMT3, F_VSMESS, 0); out_pack->lserial1 = tTradeserial.serial_no; out_pack->damt2 = tTradeserial.out_balance; out_pack->damt3 = -tTradeserial.trade_fee; sprintf(out_pack->vsmess, "流水号:%d 冲正金额:%.2lf元,搭伙费:%.2lf元,冲正前卡余额:%.2lf元,卡当前余额:%.2lf元", tTradeserial.serial_no, -tTradeserial.trade_fee,-tTradeserial.boardfee, tTradeserial.in_balance, tTradeserial.out_balance); writelog(LOG_DEBUG, out_pack->vsmess); PutRow(handle, out_pack, pRetCode, szMsg); return 0; L_RETU: return -1; }
int F846326(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; des2src(pAccTrans->trans.opercode,rPack->semp); if(strlen(pAccTrans->trans.opercode)<1) { pAccTrans->trans.termid=rPack->lwithdraw_flag; } pAccTrans->trans.transcode=TC_WATERCARDBALMOD; ret=pAccTrans->InitTrans(); if(ret) return ret; des2src(pAccTrans->trans.chkopercode,rPack->semp_no); ret=chk_oper_pwd(pAccTrans->trans.chkopercode,rPack->scust_limit); if(ret) return ret; if(rPack->lbank_acc_type>0) trans.transamt=rPack->damt0; else trans.transamt=-rPack->damt0; trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol0; trans.purseno=PURSE_NO_TWO; trans.cardbefbal=rPack->lvol7/100.0; trans.cardaftbal= D4U5(trans.cardbefbal+trans.transamt); des2src(trans.cardphyid,rPack->sstation1); if(amtcmp(trans.transamt,0)==0) { ERRTIP("调整金额不能为0"); return E_COMMON_ERR; } double CardMaxBal=0; ret=GetPurseMaxBal(PURSE_NO_TWO,CardMaxBal); if(ret) return ret; if(amtcmp(trans.cardaftbal,CardMaxBal)>0) return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); 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; 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); } trans.custid=tCard.custid; 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.cardbefbal=trans.cardbefbal; transdtl.amount=trans.transamt; transdtl.managefee=trans.totalfeeamt; transdtl.cardaftbal=trans.cardaftbal; transdtl.custid=tCardAccount.custid; des2src(transdtl.custname,tCardAccount.accname); des2src(transdtl.opercode,trans.opercode); transdtl.showcardno=atol(tCard.showcardno); transdtl.status[0]=DTLSTATUS_SUCCESS; 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,F_LVOL0,F_LVOL8,F_LVOL10,F_LVOL11,F_LVOL12,F_SDATE0, F_SDATE3,F_STIME3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); int price1=0; int price2=0; int price3=0; ret=GetWaterPrice(price1,price2,price3); if(ret) { writelog(LOG_ERR,"读水价失败ret=%d",ret); return ret; } outPack->lvol10=price1; outPack->lvol11=price2; outPack->lvol12=price3; outPack->lvol0=tCard.cardno; outPack->lvol8=D4U5(pAccTrans->trans.cardaftbal*100,0); des2src(outPack->sdate0,pAccTrans->trans.accdate); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(trans.remark,"%s卡余额%.2lf元",pAccTrans->remark.c_str(),pAccTrans->trans.cardaftbal); des2src(outPack->vsmess,trans.remark); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F850001(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; des2src(trans.refno,rPack->sphone3); if(strlen(trans.refno)!=14) { ERRTIP("交易参考号错误"); return E_COMMON_ERR; } T_t_refno tRefno; memset(&tRefno,0,sizeof(tRefno)); ret=DB_t_refno_read_by_refno(trans.refno,&tRefno); if(ret) { if(DB_NOTFOUND==ret) return 0; else return E_DB_REFNO_R; } if(strncmp(tRefno.mac,rPack->saddr,8)!=0) { ERRTIP("交易参考号MAC校验错误"); return E_COMMON_ERR; } if(RS_SUCC!=tRefno.status) { TIPINFO("交易已冲正"); return 0; } pAccTrans->trans.transcode=TC_TRANSREV; pAccTrans->trans.termid=tRefno.termid; ret=pAccTrans->InitTrans(); if(ret) return ret; des2src(pAccTrans->trans.chkopercode,rPack->semp_no); char authrightflag=rPack->sstatus2[0]; if('1'==authrightflag) { ret=chk_oper_pwd(pAccTrans->trans.chkopercode,rPack->scust_limit); if(ret) return ret; ret=AccTransRev(tRefno.accdate,tRefno.termid,tRefno.termseqno); if(ret) { writelog(LOG_ERR,"acctransrev err ret=%d",ret); return ret; } } else { ret=OnlineTransRev(tRefno.accdate,tRefno.termid,tRefno.termseqno); if(ret) { writelog(LOG_ERR,"acctransrev err ret=%d",ret); return ret; } } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,F_LVOL0,F_SPHONE3,F_SADDR,F_LWITHDRAW_FLAG,F_SDATE3,F_STIME3,F_SEMP,F_LSERIAL1,F_VSMESS,0); outPack->lvol0=pAccTrans->trans.cardno; des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,pAccTrans->trans.opercode); outPack->lserial1=pAccTrans->trans.termseqno; strcpy(outPack->sphone3,tRefno.refno); strcpy(outPack->saddr,tRefno.mac); strcpy(outPack->vsmess,pAccTrans->remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F847127(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int i=0; int ret =0; char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; InAcc IA; char ia_buf[1024]=""; double dUniqno = 0; char sMsg[256]=""; T_t_tif_tradeserial tradeserial; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tradeserial,0,sizeof(tradeserial)); memset(&IA,0,sizeof(IA)); IA.pVoidPointer=ia_buf; ResetNormalCPack(&aPack,0,1); if(amtcmp(rPack->damt0,0)==0) { *pRetCode=E_INPUT_AMT_NULL; goto L_RETU; } trim(rPack->sbank_acc); trim(rPack->sbank_acc2); if(strcmp(rPack->sbank_acc,rPack->sbank_acc2)==0) { *pRetCode=E_INPUT_2ACTNO_EQ; goto L_RETU; } trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); if(strlen(rPack->scust_limit)==0) { *pRetCode=E_INPUT_OPER_NULL; goto L_RETU; } if(strlen(rPack->scust_limit2)==0) { *pRetCode=E_INPUT_OPER_NULL; goto L_RETU; } if(strcmp(rPack->scust_limit,rPack->scust_limit2)==0) { writelog(LOG_ERR,"oper1[%s]oper2[%s]",rPack->scust_limit,rPack->scust_limit2); *pRetCode=E_INPUT_2OPER_EQ; goto L_RETU; } ret=chk_oper_pwd(rPack->scust_limit2,rPack->semp_pwd); if(ret) { if(E_OPER_NOT_EXIST==ret) *pRetCode=E_INPUT_OPER_EXIST; else if(E_PASSWORD_WRONG==ret) *pRetCode=E_INPUT_OPER_PWD; else *pRetCode=ret; goto L_RETU; } getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } tradeserial.trade_fee = rPack->damt0; //发生金额 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqno); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR," ERRCODE = [%d]",ret); goto L_RETU; } tradeserial.serial_no = D2I(dUniqno); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type = TXCODE_CARD_DBCR; //交易码 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.in_balance=rPack->damt0; //入卡值 tradeserial.trade_count=0; //交易次数 des2src(tradeserial.oper_code,rPack->scust_limit); //操作员代码 des2src(tradeserial.reserve_1,rPack->scust_limit2); //错帐操作员代码 tradeserial.sys_id = 0; //外部系统标识 IA.iCardNo=0; IA.iFeeType=1; IA.dArrInAmt[0]=tradeserial.trade_fee; des2src(IA.sArrInActno[0],rPack->sbank_acc); //借方帐号 des2src(IA.sArrInActno[1],rPack->sbank_acc2); //贷方帐号 IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[1]=rPack->lvol1; IA.iArrInFeeSwitch[2]=rPack->lvol2; IA.iArrInFeeSwitch[3]=rPack->lvol3; IA.iArrInFeeSwitch[4]=rPack->lvol4; IA.iArrInFeeSwitch[5]=rPack->lvol5; ret=process(&IA,&tradeserial); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode=ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d ",IA.iSerialNo); for(i=1; i<=IA.iOutTxTypeCnt; i++) { if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } strcat(out_pack->vsmess,(char*)IA.pVoidPointer); writelog(LOG_DEBUG,out_pack->vsmess); SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_DAMT3,F_DAMT4,F_VSMESS,0); out_pack->lserial1=tradeserial.serial_no; //流水号 ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847183(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char tx_date[8+1]=""; //发生日期 // char tx_time[6+1]=""; //发生时间 int card_no=0; //卡号 char device_id[8+1]=""; //终端机ID int serial_no=0; //终端机流水号 int flag=0; double dUniqno=0; T_t_tif_tradeserial tOldTradeserial; //当日流水表 T_t_tif_tradeserial tTradeserial; //当日流水表 T_t_tif_tradeserial_his tTradeserialhis; //历史流水表 char sysdate[11]=""; char systime[9]=""; char sYear[5]=""; char sMonDay[5]=""; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); memset(&tTradeserial,0,sizeof(tTradeserial)); memset(&tOldTradeserial,0,sizeof(tOldTradeserial)); memset(&tTradeserialhis,0,sizeof(tTradeserialhis)); getsysdate(sysdate); getsystime(systime); des2src(tTradeserial.enteract_time,systime); des2src(tx_date,rPack->sbank_pwd); // des2src(tx_time,rPack->sbank_code); card_no=rPack->lvol0; des2src(device_id,rPack->sbank_pwd2); serial_no=rPack->lvol1; trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); des2src(sYear,tx_date); des2src(sMonDay,tx_date+4); if(strlen(rPack->scust_limit)==0) { *pRetCode=E_OPER_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scust_limit2)==0) { *pRetCode=E_INPUT_AUTH_OPER_NULL; goto L_RETU; } if(strcmp(rPack->scust_limit,rPack->scust_limit2)==0) { writelog(LOG_ERR,"oper[%s]auth_oper[%s]",rPack->scust_limit,rPack->scust_limit2); *pRetCode=E_OPER_AND_AUTH_OPER_EQ; goto L_RETU; } ret=chk_oper_pwd(rPack->scust_limit2,rPack->semp_pwd); if(ret) { if(E_OPER_NOT_EXIST==ret) *pRetCode=E_AUTH_OPER_NOT_EXIST; else if(E_PASSWORD_WRONG==ret) *pRetCode=E_AUTH_OPER_PWD; else *pRetCode=ret; goto L_RETU; } //查询当前流水表 ret=DB_t_tif_tradeserial_read_lock_by_c4_and_operate_date_and_serial_no_and_card_id(tx_date,serial_no,card_no,&tOldTradeserial); if(ret) { writelog(LOG_ERR,"tx_date[%s]serial_no[%d]ret[%d]",tx_date,serial_no,ret); if(DB_NOTFOUND!=ret) { *pRetCode=E_DB_TRADESERIAL_R; goto L_RETU; } } else { flag=1; memcpy(&tTradeserial,&tOldTradeserial,sizeof(tTradeserial)); tTradeserial.other_seri_no=tOldTradeserial.serial_no; //上传端流水号 tOldTradeserial.serial_state=SERISTAT_RUSH; //冲正 des2src(tOldTradeserial.oper_code,rPack->scust_limit); ret=DB_t_tif_tradeserial_update_lock_by_c4(&tOldTradeserial); if(ret) { *pRetCode=E_DB_TRADESERIAL_U; writelog(LOG_ERR,"DB_t_tif_tradeserial_update_lock_by_c4[%d]",ret); goto L_RETU; } DB_t_tif_tradeserial_free_lock_c4(); } if(!flag) { //查询历史流水表 ret=DB_t_tif_tradeserial_his_read_lock_by_c0_and_trans_year_and_trans_mon_day_and_serial_no_and_card_id(sYear,sMonDay,serial_no,card_no,&tTradeserialhis); if(ret) { writelog(LOG_ERR,"year[%s]date[%d]serialno[%d]ret[%d]",sYear,sMonDay,serial_no,ret); if(DB_NOTFOUND==ret) { *pRetCode=E_SERIALNO_NOT_EXIST; goto L_RETU; } else { *pRetCode=E_DB_TRADESERIAL_R; goto L_RETU; } } tTradeserial.other_seri_no=tTradeserialhis.serial_no; //上传端流水号 tTradeserial.serial_state = tTradeserialhis.serial_state ; //流水状态 tTradeserial.tmark=tTradeserialhis.tmark; //999交易标记 tTradeserial.maindevice_id = tTradeserialhis.maindevice_id; //上传工作站标识(前置机注册号) tTradeserial.sys_id= tTradeserialhis.sys_id; tTradeserial.comu_ver=tTradeserialhis.comu_ver; //通信版本号 des2src(tTradeserial.devphy999_id,tTradeserialhis.devphy999_id); //物理设备ID des2src(tTradeserial.dev_auth,tTradeserialhis.dev_auth); //终端设备授权号 des2src(tTradeserial.crc,tTradeserialhis.crc); //CRC校验 tTradeserial.card_id = tTradeserialhis.card_id; //交易卡号 tTradeserial.purse_id = tTradeserialhis.purse_id; //消费钱包号 tTradeserial.in_balance =tTradeserialhis.in_balance; //入卡金额 tTradeserial.out_balance = tTradeserialhis.out_balance; //出卡金额 tTradeserial.trade_fee = tTradeserialhis.trade_fee; //本次消费金额 tTradeserial.trade_count = tTradeserialhis.trade_count; //当前卡中帐户消费次数(累计使用次数) tTradeserial.serial_type = tTradeserialhis.serial_type; //交易代码 tTradeserial.boardfee = tTradeserialhis.boardfee ; //搭伙费 des2src(tTradeserial.operate_date,tTradeserialhis.operate_date); //发生日期(格式化输入的日期) des2src(tTradeserial.operate_time,tTradeserialhis.operate_time); //发生时间(格式化输入的时间) tTradeserial.condition_id = tTradeserialhis.condition_id; // 收费科目 tTradeserialhis.serial_state=SERISTAT_RUSH; //冲正 des2src(tTradeserialhis.oper_code,rPack->scust_limit); ret=DB_t_tif_tradeserial_his_update_lock_by_c0(&tTradeserialhis); if(ret) { *pRetCode=E_DB_TRADESERIAL_U; writelog(LOG_ERR,"DB_t_tif_tradeserial_update_lock_by_c4[%d]",ret); goto L_RETU; } DB_t_tif_tradeserial_his_free_lock_by_c0(); } if(tTradeserial.card_id!=card_no) { *pRetCode=E_SERIALNO_NOT_EXIST; goto L_RETU; } if(tTradeserial.serial_state==SERISTAT_RUSH) { *pRetCode=E_TX_SERIAL_CZ; goto L_RETU; } if(tTradeserial.serial_state!=SERISTAT_DEBT) { *pRetCode=E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } if(amtcmp(tTradeserial.trade_fee,0)<=0) { *pRetCode=E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } des2src(tTradeserial.operate_date,sysdate); des2src(tTradeserial.operate_time,systime); des2src(tTradeserial.collect_date,sysdate); des2src(tTradeserial.collect_time,systime); ret=GetLogicDate(tTradeserial.enteract_date); //业务日期 if(ret) { *pRetCode=ret; writelog(LOG_ERR,"GetLogicDate err ret[%d]",ret); goto L_RETU; } des2src(tTradeserial.enteract_time,systime); tTradeserial.in_balance =rPack->damt1; tTradeserial.trade_fee = -1 * tTradeserial.trade_fee; //本次消费金额 tTradeserial.boardfee = -1 * tTradeserial.boardfee; //本次消费管理费 tTradeserial.out_balance=tTradeserial.in_balance-tTradeserial.trade_fee; tTradeserial.trade_count=rPack->lvol10; tTradeserial.maindevice_id=rPack->lvol6; des2src(tTradeserial.oper_code,rPack->scust_limit); tTradeserial.reviseserial_no=tTradeserial.other_seri_no; //取流水号,从帐处理 ret=getNewUniqNo(KEYTYPE_TRADESERIAL, &dUniqno); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"getNewUniqNo err[%d]",ret); goto L_RETU; } tTradeserial.serial_no=D2I(dUniqno); //###################################################### //入账处理 switch(tTradeserial.serial_type) { case 930031: // 交易冲正 if(amtcmp(tTradeserial.trade_fee,0)<=0) break; tTradeserial.serial_type=TXCODE_TX_REVEAL; ret=process930031(&tTradeserial); if(ret) { //业务处理失败处理 *pRetCode=ret; goto L_RETU; } break; case 930034: // 充值冲正 if(amtcmp(tTradeserial.trade_fee,0)<=0) break; tTradeserial.serial_type=TXCODE_TX_REVEAL; ret=process930034(&tTradeserial); if(ret) { //业务处理失败处理 *pRetCode=ret; goto L_RETU; } break; case 930036: // 搭伙费冲正 if(amtcmp(tTradeserial.trade_fee,0)<=0) break; tTradeserial.serial_type=TXCODE_TX_REVEAL; ret=process930036(&tTradeserial); if(ret) { //业务处理失败处理 *pRetCode=ret; goto L_RETU; } break; default: *pRetCode=E_TXCODE_NOT_EXIST; //交易码错误 goto L_RETU; } //###################################################### //添加交易流水 tTradeserial.serial_state=SERISTAT_DEBT; ret = DB_t_tif_tradeserial_add(&tTradeserial); if (ret) { writelog(LOG_ERR,"DB_t_tif_tradeserial_add ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode= E_DB_TRADESERIAL_E; else *pRetCode= E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tTradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_DAMT3,F_VSMESS,0); out_pack->lserial1=tTradeserial.serial_no; out_pack->damt2=tTradeserial.out_balance; out_pack->damt3=-tTradeserial.trade_fee; sprintf(out_pack->vsmess,"流水号:%d 冲正金额:%.2lf元 冲正前卡余额:%.2lf元 卡当前余额:%.2lf元",tTradeserial.serial_no,-tTradeserial.trade_fee,tTradeserial.in_balance,tTradeserial.out_balance); writelog(LOG_DEBUG,out_pack->vsmess); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847127(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_MANUALDRCR; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); des2src(trans.draccno,rPack->sbank_acc); des2src(trans.craccno,rPack->sbank_acc2); trans.inputamt=rPack->damt0; if(amtcmp(trans.inputamt,0)==0) { return E_INPUT_AMT_NULL; } if(!strlen(trans.draccno)) return E_NO_DRACCNO; if(!strlen(trans.craccno)) return E_NO_CRACCNO; if(strcmp(trans.draccno,trans.craccno)==0) { return E_INPUT_2ACTNO_EQ; } des2src(trans.opercode,rPack->scust_limit); des2src(trans.chkopercode,rPack->scust_limit2); trim(rPack->semp_pwd); if(strlen(trans.opercode)==0) { return E_INPUT_OPER_NULL; } if(strlen(trans.chkopercode)==0) { return E_INPUTNULL_CHKOPER; } if(strcmp(trans.opercode,trans.chkopercode)==0) { writelog(LOG_ERR,"oper1[%s]chkoper[%s]",trans.opercode,trans.chkopercode); return E_INPUT_2OPER_EQ; } ret=chk_oper_pwd(trans.chkopercode,rPack->semp_pwd); if(ret) { return ret; } pAccTrans->trans.transamt=pAccTrans->trans.inputamt; pAccTrans->trans.fundtype=0; pAccTrans->trans.transtype=TRANSTYPE_MANDRCR; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; sprintf(trans.remark,"交易金额%.2lf,借方账户[%s]余额%.2lf,贷方账户[%s]余额%.2lf",trans.totaltransamt,trans.draccname,trans.draccaftbal,trans.craccname,trans.craccaftbal); SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); des2src(outPack->sdate3,pAccTrans->trans.sysdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(outPack->vsmess,"%s 借方账户[%s]贷方帐户[%s]",pAccTrans->remark.c_str(),pAccTrans->trans.draccname,trans.craccname); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F847183(TRUSERID *handle, int iRequest, ST_PACK *rPack, int *pRetCode, char *szMsg) { int ret = 0; char tx_date[8+1] = ""; //发生日期 // char tx_time[6+1]=""; //发生时间 int cardno = 0; //卡号 char deviceid[8+1] = ""; //终端机ID int serial_no = 0; //终端机流水号 int flag = 0; double iSeqNo = 0; T_t_tif_tradeserial tOldTradeserial; //当日流水表 T_t_tif_tradeserial tTradeserial; //当日流水表 T_t_tif_tradeserial_his tTradeserialhis; //历史流水表 T_t_tradecode tTradeCode; T_t_card tCard; char sysdate[11] = ""; char systime[9] = ""; char sYear[5] = ""; char sMonDay[5] = ""; char logic_date[9] = ""; int days = 0; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ST_PACK next_pack; ResetNormalCPack(&aPack, 0, 1); memset(&tTradeserial, 0, sizeof(tTradeserial)); memset(&tOldTradeserial, 0, sizeof(tOldTradeserial)); memset(&tTradeserialhis, 0, sizeof(tTradeserialhis)); memset(&tTradeCode, 0, sizeof tTradeCode); memset(&tCard, 0, sizeof tCard); getsysdate(sysdate); getsystime(systime); des2src(tTradeserial.enteract_time, systime); des2src(tx_date, rPack->sbank_pwd); // des2src(tx_time,rPack->sbank_code); cardno = rPack->lvol0; des2src(deviceid, rPack->sbank_pwd2); serial_no = rPack->lvol1; trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); des2src(sYear, tx_date); des2src(sMonDay, tx_date + 4); if (strlen(rPack->scust_limit) == 0) { *pRetCode = E_OPER_NOT_EXIST; goto L_RETU; } if (strlen(rPack->scust_limit2) == 0) { *pRetCode = E_INPUT_AUTH_OPER_NULL; goto L_RETU; } if (strcmp(rPack->scust_limit, rPack->scust_limit2) == 0) { writelog(LOG_ERR, "oper[%s]auth_oper[%s]", rPack->scust_limit, rPack->scust_limit2); *pRetCode = E_OPER_AND_AUTH_OPER_EQ; goto L_RETU; } ret = chk_oper_pwd(rPack->scust_limit2, rPack->semp_pwd); if (ret) { if (E_OPER_NOT_EXIST == ret) *pRetCode = E_AUTH_OPER_NOT_EXIST; else if (E_PASSWORD_WRONG == ret) *pRetCode = E_AUTH_OPER_PWD; else *pRetCode = ret; goto L_RETU; } ret = DB_t_card_read_by_cardno(cardno, &tCard); if (ret) { if (DB_NOTFOUND == ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } if (tCard.cardattr[CARDSTAT_TYPE_REG] == '2') { writelog(LOG_ERR, "冲正交易卡号已注销cardid[%d]", tCard.cardno); *pRetCode = E_ACTNO_LOGOUT; goto L_RETU; } //查询当前流水表 ret = DB_t_tif_tradeserial_read_lock_by_c4_and_operate_date_and_serial_no_and_cardno(tx_date, serial_no, cardno, &tOldTradeserial); if (ret) { writelog(LOG_ERR, "tx_date[%s]serial_no[%d]ret[%d]", tx_date, serial_no, ret); if (DB_NOTFOUND != ret) { *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } } else { flag = 1; memcpy(&tTradeserial, &tOldTradeserial, sizeof(tTradeserial)); tTradeserial.other_seri_no = tOldTradeserial.serial_no; //上传端流水号 tOldTradeserial.serial_state = SERISTAT_RUSH; //冲正 ret = DB_t_tif_tradeserial_update_lock_by_c4(&tOldTradeserial); if (ret) { *pRetCode = E_DB_TRADESERIAL_U; writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c4[%d]", ret); goto L_RETU; } DB_t_tif_tradeserial_free_lock_c4(); } if (!flag) { //查询历史流水表 ret = DB_t_tif_tradeserial_his_read_lock_by_c0_and_trans_year_and_trans_mon_day_and_serial_no_and_cardno(sYear, sMonDay, serial_no, cardno, &tTradeserialhis); if (ret) { writelog(LOG_ERR, "year[%s]date[%d]serialno[%d]ret[%d]", sYear, sMonDay, serial_no, ret); if (DB_NOTFOUND == ret) { *pRetCode = E_SERIALNO_NOT_EXIST; goto L_RETU; } else { *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } } tTradeserial.other_seri_no = tTradeserialhis.serial_no; //上传端流水号 tTradeserial.serial_state = tTradeserialhis.serial_state; //流水状态 tTradeserial.tmark = tTradeserialhis.tmark; //999交易标记 tTradeserial.maindeviceid = tTradeserialhis.maindeviceid; //上传工作站标识(前置机注册号) tTradeserial.sys_id = tTradeserialhis.sys_id; tTradeserial.comu_ver = tTradeserialhis.comu_ver; //通信版本号 // add by 汤成 2007-10-31 tTradeserial.deviceid = tTradeserialhis.deviceid; des2src(tTradeserial.devphyid, tTradeserialhis.devphyid); //物理设备ID des2src(tTradeserial.dev_auth, tTradeserialhis.dev_auth); //终端设备授权号 des2src(tTradeserial.crc, tTradeserialhis.crc); //CRC校验 tTradeserial.cardno = tTradeserialhis.cardno; //交易卡号 tTradeserial.purseno = tTradeserialhis.purseno; //消费钱包号 tTradeserial.in_balance = tTradeserialhis.in_balance; //入卡金额 tTradeserial.out_balance = tTradeserialhis.out_balance; //出卡金额 tTradeserial.trade_fee = tTradeserialhis.trade_fee; //本次消费金额 tTradeserial.trade_count = tTradeserialhis.trade_count; //当前卡中帐户消费次数(累计使用次数) tTradeserial.serial_type = tTradeserialhis.serial_type; //交易代码 tTradeserial.managefee = tTradeserialhis.managefee ; //搭伙费 des2src(tTradeserial.operate_date, tTradeserialhis.operate_date); //发生日期(格式化输入的日期) des2src(tTradeserial.operate_time, tTradeserialhis.operate_time); //发生时间(格式化输入的时间) tTradeserial.condition_id = tTradeserialhis.condition_id; // 收费科目 tTradeserialhis.serial_state = SERISTAT_RUSH; //冲正 // 保存被冲正交易的操作员号 des2src(tTradeserialhis.opercode, tTradeserialhis.opercode); ret = DB_t_tif_tradeserial_his_update_lock_by_c0(&tTradeserialhis); if (ret) { *pRetCode = E_DB_TRADESERIAL_U; writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c4[%d]", ret); goto L_RETU; } DB_t_tif_tradeserial_his_free_lock_by_c0(); } if (tTradeserial.cardno != cardno) { writelog(LOG_ERR, "流水中卡号不符cardid[%d]serial[%d]", cardno, tTradeserial.cardno); *pRetCode = E_SERIALNO_NOT_EXIST; goto L_RETU; } if (tTradeserial.serial_state == SERISTAT_RUSH) { *pRetCode = E_TX_SERIAL_CZ; goto L_RETU; } if (tTradeserial.serial_state != SERISTAT_DEBT) { *pRetCode = E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } if (amtcmp(tTradeserial.trade_fee, 0) == 0) { *pRetCode = E_TX_SERIAL_CANNOT_CZ; strcpy(szMsg,"交易金额有误!"); goto L_RETU; } ret = DB_t_tradecode_read_by_tradecode(tTradeserial.serial_type, &tTradeCode); if (ret) { if (DB_NOTFOUND == ret) *pRetCode = E_DB_TRADECODE_N; else *pRetCode = E_DB_TRADECODE_R; goto L_RETU; } if (tTradeCode.rush_flag != IS_YES) { *pRetCode = E_TX_SERIAL_CANNOT_CZ; strcpy(szMsg,"该交易不能被冲正"); goto L_RETU; } ret = GetLogicDate(logic_date); //业务日期 if (ret) { *pRetCode = ret; writelog(LOG_ERR, "GetLogicDate err ret[%d]", ret); goto L_RETU; } // 小于 0 , 则不判断 if (tTradeCode.rush_max_day >= 0) { ret = DiffDay(logic_date, tTradeserial.enteract_date, &days); if (ret) { *pRetCode = ret; goto L_RETU; } if (days > tTradeCode.rush_max_day) { writelog(LOG_ERR, "流水入账日期[%s],已超过期限[%d]天", tTradeserial.enteract_date, days); *pRetCode = E_TX_SERIAL_CANNOT_CZ; strcpy(szMsg, "流水日期已超过可冲正期限!"); goto L_RETU; } } if (tTradeCode.restrict_oper == IS_YES) { if (strcmp(rPack->scust_limit, tTradeserial.opercode) != 0) { strcpy(szMsg, "必须由作此次交易的操作员来冲正"); *pRetCode = E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } } // 保存上传的操作员号 des2src(tTradeserial.operate_date, sysdate); des2src(tTradeserial.operate_time, systime); des2src(tTradeserial.collect_date, sysdate); des2src(tTradeserial.collect_time, systime); des2src(tTradeserial.enteract_date, logic_date); //业务日期 des2src(tTradeserial.enteract_time, systime); tTradeserial.in_balance = rPack->damt1; tTradeserial.trade_fee = -1 * tTradeserial.trade_fee; //本次消费金额 tTradeserial.managefee = -1 * tTradeserial.managefee; //本次消费管理费 tTradeserial.out_balance = tTradeserial.in_balance - tTradeserial.trade_fee; if (rPack->lvol10 > 0) tTradeserial.trade_count = rPack->lvol10 + 1; tTradeserial.maindeviceid = rPack->lvol6; // 上传的操作员号 des2src(tTradeserial.opercode, rPack->scust_limit); tTradeserial.reviseserial_no = tTradeserial.other_seri_no; //取流水号,从帐处理 ret = getNewUniqNo(KEYTYPE_TRADESERIAL, &iSeqNo); if (ret) { *pRetCode = ret; writelog(LOG_ERR, "getNewUniqNo err[%d]", ret); goto L_RETU; } tTradeserial.serial_no = iSeqNo; //###################################################### //入账处理 switch (tTradeserial.serial_type) { case 930031: // 交易冲正 if (amtcmp(tTradeserial.trade_fee, 0) == 0) break; tTradeserial.serial_type = TXCODE_TX_REVEAL; ret = process930031(&tTradeserial); if (ret) { //业务处理失败处理 *pRetCode = ret; goto L_RETU; } break; case 930034: // 充值冲正 if (amtcmp(tTradeserial.trade_fee, 0) == 0) break; tTradeserial.serial_type = TXCODE_TX_REVEAL; ret = process930034(&tTradeserial); if (ret) { //业务处理失败处理 *pRetCode = ret; goto L_RETU; } break; case 930036: // 搭伙费冲正 if (amtcmp(tTradeserial.trade_fee, 0) == 0) break; tTradeserial.serial_type = TXCODE_TX_REVEAL; ret = process930036(&tTradeserial); if (ret) { //业务处理失败处理 *pRetCode = ret; goto L_RETU; } break; case 847106: // 现金充值冲正 memset(&next_pack,0,sizeof next_pack); tTradeserial.serial_type = TXCODE_SAVING_CASH; ret = do_flush_847106(&tTradeserial,&tCard); if(ret) { *pRetCode = ret; goto L_RETU; } break; default: *pRetCode = E_TXCODE_NOT_EXIST; //交易码错误 goto L_RETU; } //###################################################### //添加交易流水 tTradeserial.serial_state = SERISTAT_DEBT; ret = DB_t_tif_tradeserial_add(&tTradeserial); if (ret) { writelog(LOG_ERR, "DB_t_tif_tradeserial_add ret[%d]", ret); if (DB_REPEAT == ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if (amtcmp(tTradeserial.out_balance, 0) < 0) { *pRetCode = E_ENTER_ACCOUNT; goto L_RETU; } SetCol(handle, 0); SetCol(handle, F_LSERIAL1, F_DAMT2, F_DAMT3, F_VSMESS, 0); out_pack->lserial1 = tTradeserial.serial_no; out_pack->damt2 = tTradeserial.out_balance; out_pack->damt3 = -tTradeserial.trade_fee; sprintf(out_pack->vsmess, "流水号:%d 冲正金额:%.2lf元 冲正前卡余额:%.2lf元 卡当前余额:%.2lf元", tTradeserial.serial_no, -tTradeserial.trade_fee, tTradeserial.in_balance, tTradeserial.out_balance); writelog(LOG_DEBUG, out_pack->vsmess); PutRow(handle, out_pack, pRetCode, szMsg); return 0; L_RETU: return -1; }
int F846315(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); if(strlen(pAccTrans->trans.opercode)<1) { pAccTrans->trans.termid=rPack->lwithdraw_flag; } pAccTrans->trans.transcode=TC_TRANSREV; ret=pAccTrans->InitTrans(); if(ret) return ret; // TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); char oldaccdate[9]=""; des2src(oldaccdate,rPack->sdate3); int oldtermid=rPack->lwithdraw_flag; int oldtermseqno=rPack->lserial1; char authrightflag=rPack->sstatus2[0]; if(strlen(oldaccdate)<1) return E_INPUTNULL_ACCDATE; if(oldtermid<1) return E_INPUTNULL_TERMID; if(oldtermseqno<1) return E_INPUTNULL_TERMSEQNO; des2src(pAccTrans->trans.chkopercode,rPack->semp_no); if('1'==authrightflag) { ret=chk_oper_pwd(pAccTrans->trans.chkopercode,rPack->scust_limit); if(ret) return ret; ret=AccTransRev(oldaccdate,oldtermid,oldtermseqno); if(ret) { writelog(LOG_ERR,"acctransrev err ret=%d",ret); return ret; } } else { ret=OnlineTransRev(oldaccdate,oldtermid,oldtermseqno); if(ret) { writelog(LOG_ERR,"acctransrev err ret=%d",ret); return ret; } } SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_STIME3,F_SEMP,F_LSERIAL1,F_VSMESS,0); outPack->lvol0=pAccTrans->trans.cardno; outPack->lvol8=0; des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,pAccTrans->trans.opercode); outPack->lserial1=pAccTrans->trans.termseqno; strcpy(outPack->vsmess,pAccTrans->remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F847230(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; char sysdate[9] = ""; char systime[7] = ""; char db_date[9] = ""; char db_time[7] = ""; char volume[13] = ""; int auth_card_id = 0; T_t_pif_oper_authcard tAuthCard; T_t_tif_tradeserial tSerial; T_t_pif_operator tOper; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); double uni_no = 0.0; memset(&tAuthCard,0,sizeof tAuthCard); memset(&tSerial,0,sizeof tSerial); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); auth_card_id = rPack->lvol0; if(auth_card_id <= 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_pif_oper_authcard_read_by_card_id(auth_card_id,&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 == AUTHCARD_STATUS_CANCEL) { writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.card_id); *pRetCode = E_AUTHCARD_HAS_CANCEL; goto L_RETU; } memset(&tOper,0,sizeof tOper); ret = DB_t_pif_operator_read_by_oper_code(tAuthCard.oper_code,&tOper); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.oper_code); *pRetCode = E_DB_OPERATOR_N; } else *pRetCode = E_DB_OPERATOR_R; goto L_RETU; } if(strcmp(tOper.status,OPERATOR_LOGOUT) == 0) { writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.oper_code); *pRetCode = E_OPERLOGON_UNREG; goto L_RETU; } ret=chk_oper_pwd(tAuthCard.oper_code,rPack->semp_pwd); if(ret) { writelog(LOG_ERR,"operator password error, operator [%s]",tAuthCard.oper_code); 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; } tAuthCard.status = AUTHCARD_STATUS_NORMAL; ret = DB_t_pif_oper_authcard_update_by_card_id(tAuthCard.card_id,&tAuthCard); if(ret) { writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.card_id); *pRetCode = E_DB_OPER_AUTHCARD_U; goto L_RETU; } // 插入黑名单表 ret = InsertToBlkList(auth_card_id,DELETE_BLACKLIST); if(ret) { writelog(LOG_ERR,"insert into black list error, card id[%d]",auth_card_id); *pRetCode = ret; goto L_RETU; } // 生成流水 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&uni_no); if(ret) { *pRetCode = ret; goto L_RETU; } tSerial.serial_no = D2I(uni_no); getsysdate(sysdate); getsystime(systime); tSerial.card_id = tAuthCard.card_id; tSerial.serial_state = SERISTAT_NONEEDDEBT; tSerial.serial_type = TXCODE_UNLOSS_AUTHCARD; des2src(tSerial.operate_date,sysdate); des2src(tSerial.operate_time,systime); des2src(tSerial.enteract_date,sysdate); des2src(tSerial.enteract_time,systime); des2src(tSerial.collect_date,sysdate); des2src(tSerial.collect_time,systime); des2src(tSerial.oper_code,rPack->scust_limit); ret = DB_t_tif_tradeserial_add(&tSerial); if(ret) { if(DB_REPEAT == ret) { writelog(LOG_ERR,"记录流水表失败!"); *pRetCode = E_DB_TRADESERIAL_E; } else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } writelog(LOG_DEBUG,"解挂授权卡成功,操作员[%s]交易卡号[%d]流水号[%d]" ,tAuthCard.oper_code,tAuthCard.card_id,tSerial.serial_no); SetCol(handle,0); SetCol(handle,F_LVOL0,F_SSERIAL0,0); get_datetime_from_db(db_date,db_time); out_pack->lvol0 = auth_card_id; memcpy(volume,db_date+2,6); memcpy(volume+6,db_time,6); des2src(out_pack->sserial0,volume); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847127(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_MANUALDRCR; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); des2src(trans.draccno,rPack->sbank_acc); des2src(trans.craccno,rPack->sbank_acc2); trans.inputamt=rPack->damt0; trans.unusedamt = trans.inputamt; trans.transamt=trans.inputamt; if(amtcmp(trans.inputamt,0)==0) { return E_INPUT_AMT_NULL; } if(!strlen(trans.draccno)) return E_NO_DRACCNO; if(!strlen(trans.craccno)) return E_NO_CRACCNO; if(strcmp(trans.draccno,trans.craccno)==0) { return E_INPUT_2ACTNO_EQ; } //查询学号 /* T_t_account account; memset(&account,0,sizeof(account)); if((strlen(trans.draccno)==10)&&('1'==trans.draccno[0])) { ret=DB_t_account_read_by_accno(trans.draccno,&account); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,trans.draccno); else return E_DB_ACCOUNT_R; } if(account.custid) { trans.custid=account.custid; trans.cardno=account.cardno; if(trans.custid) { ret=GetCustBaseInfoByCustID(trans.custid,trans.custname,trans.stuempno,NULL); if(ret) return ret; } } } */ des2src(trans.chkopercode,rPack->semp_no); if(strlen(trans.opercode)==0) { return E_INPUT_OPER_NULL; } if(strlen(trans.chkopercode)==0) { return E_INPUTNULL_CHKOPER; } if(strcmp(trans.opercode,trans.chkopercode)==0) { writelog(LOG_ERR,"oper1[%s]chkoper[%s]",trans.opercode,trans.chkopercode); return E_INPUT_2OPER_EQ; } ret=chk_oper_pwd(trans.chkopercode,rPack->scust_limit); if(ret) { return ret; } pAccTrans->trans.fundtype=0; pAccTrans->trans.transtype=TRANSTYPE_MANDRCR; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; sprintf(trans.remark,"交易金额%.2lf,借方账户[%s]余额%.2lf,贷方账户[%s]余额%.2lf",trans.totaltransamt,trans.draccname,trans.draccaftbal,trans.craccname,trans.craccaftbal); SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(outPack->vsmess,"%s 借方账户[%s]贷方帐户[%s]",pAccTrans->remark.c_str(),pAccTrans->trans.draccname,trans.craccname); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int 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 F846322(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; des2src(pAccTrans->trans.opercode,rPack->semp); if(strlen(pAccTrans->trans.opercode)<1) { pAccTrans->trans.termid=rPack->lwithdraw_flag; } pAccTrans->trans.transcode=TC_CARDBALMOD; ret=pAccTrans->InitTrans(); if(ret) return ret; des2src(pAccTrans->trans.chkopercode,rPack->semp_no); ret=chk_oper_pwd(pAccTrans->trans.chkopercode,rPack->scust_limit); if(ret) return ret; trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol0; pAccTrans->SetCardCntAndCardBal(rPack->lvol5,rPack->lvol6,rPack->lvol7); des2src(trans.cardphyid,rPack->sstation1); if(rPack->lbank_acc_type>0) { trans.transamt=rPack->damt0; trans.transflag=TF_DPS; trans.aftdpscnt++; } else { trans.transamt=-rPack->damt0; trans.transflag=TF_PAY; trans.aftpaycnt++; } if(amtcmp(trans.transamt,0)==0) { ERRTIP("调整金额不能为0"); return E_COMMON_ERR; } trans.cardaftbal= D4U5(trans.cardbefbal+trans.transamt); 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; 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(amtcmp(trans.cardbefbal,tCardAccount.availbal)==0) { DB_t_account_free_lock_by_c0(); ERRTIP("该卡余额与账户余额一致,不需要调整"); return E_COMMON_ERR; } if(amtcmp(trans.cardbefbal,tCardAccount.balance)==0) { DB_t_account_free_lock_by_c0(); ERRTIP("该卡余额与账户余额一致,不需要调整"); return E_COMMON_ERR; } if(amtcmp(trans.cardaftbal,tCardAccount.balance)>0) { DB_t_account_free_lock_by_c0(); ERRTIP("调整后卡余额不能大于账户余额"); return E_COMMON_ERR; } tCardAccount.dpscnt=trans.dpscnt; tCardAccount.paycnt=trans.paycnt; if(rPack->lbank_acc_type>0) tCardAccount.dpscnt=trans.aftdpscnt; if(rPack->lbank_acc_type<0) tCardAccount.paycnt=trans.aftpaycnt; tCardAccount.cardbal=trans.cardaftbal; strcpy(tCardAccount.transtime,trans.sysdatetime); ret=DB_t_account_update_lock_by_c0(&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_U; } trans.custid=tCard.custid; 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.cardbefbal=trans.cardbefbal; transdtl.amount=trans.transamt; transdtl.managefee=trans.totalfeeamt; transdtl.cardaftbal=trans.cardaftbal; transdtl.custid=trans.custid; des2src(transdtl.opercode,trans.opercode); des2src(transdtl.showcardno,tCard.showcardno); GetCustBaseInfoByCustID(transdtl.custid,transdtl.custname,transdtl.stuempno,NULL); transdtl.status[0]=DTLSTATUS_SUCCESS; transdtl.transflag = trans.transflag; if(TF_DPS==transdtl.transflag) { transdtl.cardcnt=trans.aftdpscnt; } else { transdtl.cardcnt=trans.aftpaycnt; ret=UpdateCardBitmap(trans.cardno,transdtl.cardcnt,CARDBITMAPTYPE_SYS_ONLINE); if(ret) return ret; } ret=SaveCardTransInfo(); if(ret) { writelog(LOG_ERR,"SaveCardTransInfo ret=%d",ret); } 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,F_LVOL0,F_LVOL8,F_SDATE0, F_SDATE3,F_STIME3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); outPack->lvol0=tCard.cardno; outPack->lvol8=D4U5(pAccTrans->trans.cardaftbal*100,0); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(trans.remark,"%s卡余额%.2lf元",pAccTrans->remark.c_str(),pAccTrans->trans.cardaftbal); des2src(outPack->vsmess,trans.remark); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F240157(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int i=0; int ret =0; char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; InAcc IA; double dUniqno = 0; int card_id=0; int iSerialno=0; char physical_no[41]=""; char sMaxCardBalance[20]=""; char sMsg[256]=""; double dMaxCardBalance=0; T_t_pif_card tCard; T_t_cif_customer tCustomer; T_t_pif_spefee tSpeFee; T_t_aif_account tAccount; //帐户表 T_t_tif_tradeserial tradeserial; T_t_tif_diff_transfer tDiffTransfer; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tCard,0,sizeof(tCard)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tAccount,0,sizeof(tAccount)); memset(&tDiffTransfer,0,sizeof(tDiffTransfer)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&IA,0,sizeof(IA)); ResetNormalCPack(&aPack,0,1); if(amtcmp(rPack->damt1,0)==0) { *pRetCode=E_INPUT_AMT; goto L_RETU; } trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); 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; } card_id=rPack->lvol0; des2src(physical_no, rPack->sbank_acc); //物理卡号 getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } ret=DB_t_pif_card_read_by_card_id(card_id, &tCard); if(ret) { writelog(LOG_ERR,"card_id[%d]",card_id); if(DB_NOTFOUND==ret) *pRetCode=E_CARDNO_NOT_EXIST; else *pRetCode=E_DB_CARD_R; goto L_RETU; } if(card_id!=tCard.card_id) { writelog(LOG_ERR,"card_id[%d] db card_id[%d]",card_id,tCard.card_id); *pRetCode=E_DB_CARD_R; goto L_RETU; } if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0) { if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode=E_CARDNO_LOGOUT; else if('3'==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode=E_CARD_CHANGE; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_LOST]) *pRetCode=E_CARDNO_LOST; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_FREEZE]) *pRetCode=E_CARDNO_FREEZE; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_WFAIL]) *pRetCode=E_CARDNO_WFAIL; goto L_RETU; } trim(physical_no); trim(tCard.physical_no); if(strcmp(tCard.physical_no,physical_no)!=0) { writelog(LOG_ERR,"db physical_no[%s],input physical_no[%s]",tCard.physical_no,physical_no); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } iSerialno=rPack->lserial0; ret=DB_t_tif_diff_transfer_read_lock_by_c0_and_op_date_and_local_sn(rPack->sdate0,iSerialno,&tDiffTransfer); if(ret) { writelog(LOG_ERR,"operater_date[%s]Serialno[%d]",rPack->sdate0,iSerialno); if(DB_NOTFOUND==ret) *pRetCode=E_SERIALNO_NOT_EXIST; else *pRetCode=E_DB_TRADESERIAL_R; goto L_RETU; } if(card_id!=tDiffTransfer.card_id) { writelog(LOG_ERR,"input card_id [%d],DiffTransfer card_id[%d]",card_id,tDiffTransfer.card_id); DB_t_tif_diff_transfer_free_lock_by_c0(); *pRetCode=E_CARDNO_SERIAL_NE; goto L_RETU; } if(SERISTAT_NODEBT!=tDiffTransfer.status) { DB_t_tif_diff_transfer_free_lock_by_c0(); *pRetCode=E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } if(amtcmp(tDiffTransfer.diff_amt,rPack->damt1)!=0) { DB_t_tif_diff_transfer_free_lock_by_c0(); *pRetCode=E_INPUT_AMT; goto L_RETU; } tDiffTransfer.status=SERISTAT_DEBT; ret=DB_t_tif_diff_transfer_update_lock_by_c0(&tDiffTransfer); if(ret) { *pRetCode=E_DB_DIFF_TRANSFER_U; goto L_RETU; } DB_t_tif_diff_transfer_free_lock_by_c0(); //根据卡号和钱包号得到消费者账号(借方) ret=DB_t_aif_account_read_by_card_id_and_purse_id(card_id, PURSE_NO_ONE,&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_read_by_card_id_and_purse_id ret[%d]card_id[%d]",ret,card_id); if(DB_NOTFOUND==ret) *pRetCode=E_ACTNO_NOT_EXIST; else *pRetCode=E_DB_ACCOUNT_R; goto L_RETU; } ret=GetParameter(GLOBE_MAXCARDBALANCE,sMaxCardBalance); if(ret) { *pRetCode=ret; goto L_RETU; } dMaxCardBalance=atof(sMaxCardBalance); tradeserial.trade_fee = rPack->damt1; //充值金额 if(amtcmp(tAccount.cur_bala+tradeserial.trade_fee,dMaxCardBalance)>0) { *pRetCode= E_AMT_EXCEED_MAX; goto L_RETU; } ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(tCustomer.fee_type<1) { ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.fee_type=tCustomer.cut_type; } else { DB_t_cif_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } } DB_t_cif_customer_free_lock_cur(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqno); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR," ERRCODE = [%d]",ret); goto L_RETU; } tradeserial.serial_no = (int)dUniqno; //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type = TXCODE_MAKEUPSERIAL; tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 // tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.card_id =card_id; //卡号 tradeserial.purse_id = PURSE_NO_ONE; //钱包号 tradeserial.customer_id = tCard.cosumer_id; //客户标识 tradeserial.in_balance=rPack->damt0; //入卡值 tradeserial.trade_count=rPack->lvol1+1; //交易次数 des2src(tradeserial.oper_code,rPack->scust_limit); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 des2src(IA.sArrInActno[0],tAccount.account_id); //帐户 IA.iCardNo=tCard.card_id; IA.iFeeType=tCustomer.fee_type; IA.dArrInAmt[0]=tradeserial.trade_fee; IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[1]=rPack->lvol1; IA.iArrInFeeSwitch[2]=rPack->lvol2; IA.iArrInFeeSwitch[3]=rPack->lvol3; IA.iArrInFeeSwitch[4]=rPack->lvol4; IA.iArrInFeeSwitch[5]=rPack->lvol5; ret=process(&IA,&tradeserial); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode=ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d ",IA.iSerialNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tradeserial.deposit_fee=IA.dArrOutAmt[i]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: tradeserial.boardfee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: tradeserial.in_fee=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } writelog(LOG_DEBUG,out_pack->vsmess); SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_DAMT3,F_DAMT4,F_VSMESS,0); out_pack->lserial1=tradeserial.serial_no; //流水号 out_pack->damt2=tradeserial.trade_fee; //充值金额 out_pack->damt3=tradeserial.boardfee; //搭伙费 out_pack->damt4=tradeserial.out_balance; //出卡值 ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F846317(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char oldaccdate[9]=""; des2src(oldaccdate,rPack->sdate3); int oldtermid=rPack->lwithdraw_flag; int oldtermseqno=rPack->lserial1; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_POSDRAWREV; des2src(trans.refno,rPack->sphone3); if(14==strlen(trans.refno)) { trans.termid=rPack->lwithdraw_flag; T_t_refno tRefno; memset(&tRefno,0,sizeof(tRefno)); ret=DB_t_refno_read_by_refno(trans.refno,&tRefno); if(ret) { if(DB_NOTFOUND==ret) return 0; else return E_DB_REFNO_R; } if(strncmp(tRefno.mac,rPack->saddr,8)!=0) { ERRTIP("交易参考号MAC校验错误"); return E_COMMON_ERR; } if(RS_SUCC!=tRefno.status) { return E_TRANS_REVERSED; } des2src(oldaccdate,tRefno.accdate); oldtermid=tRefno.termid; oldtermseqno=tRefno.termseqno; } else { des2src(trans.chkopercode,rPack->semp_no); ret=chk_oper_pwd(trans.chkopercode,rPack->scust_limit); if(ret) return ret; } if(strlen(oldaccdate)<1) return E_INPUTNULL_ACCDATE; if(oldtermid<1) return E_INPUTNULL_TERMID; if(oldtermseqno<1) return E_INPUTNULL_TERMSEQNO; ret=pAccTrans->InitTrans(); if(ret) return ret; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LSERIAL1,F_SSTATION0,F_VSMESS,F_STIME3,0); trans.cardflag=1; trans.usecardflag=1; trans.cardno = rPack->lvol0; pAccTrans->SetCardCntAndCardBal(rPack->lvol5,rPack->lvol6,rPack->lvol7); trans.aftdpscnt++; ret=doReverse(oldaccdate,oldtermid,oldtermseqno); if(ret) return ret; ret=SaveCardTransInfo(); if(ret) { writelog(LOG_ERR,"SaveCardTransInfo ret=%d",ret); } outPack->lvol0=pAccTrans->trans.cardno; outPack->lvol8=D4U5(pAccTrans->trans.cardaftbal*100,0); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,pAccTrans->trans.opercode); outPack->lserial1=pAccTrans->trans.termseqno; sprintf(outPack->vsmess,"冲正金额%.2lf 卡余额%.2lf元",pAccTrans->trans.transamt,pAccTrans->trans.cardaftbal); PutRow(handle,outPack,pRetCode,szMsg); return 0; }