int check_cardno(int cardno) { int ret=0; T_t_card tCard; memset(&tCard,0,sizeof(tCard)); if(cardno<1) { return E_INPUT_CARDNO_CANNOT_NULL; } ret=DB_t_card_read_by_cardno(cardno, &tCard); if(ret) { writelog(LOG_ERR,"cardno[%s]ret[%d]",cardno,ret); if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } if(strncmp(tCard.cardattr,CARDSTAT_REG,4)!=0) { if('2'==tCard.cardattr[CARDSTAT_TYPE_REG]) return E_CARDNO_LOGOUT; else if(tCard.cardattr[CARDSTAT_TYPE_LOST]==STATE_TRUE) return E_CARDNO_LOST; else if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]==STATE_TRUE) return E_CARDNO_FREEZE; } return 0; }
int F240000(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; trans.termid=atoi(rPack->sorder2); char seed_key[17] = ""; char sInputPwd[33] = ""; //存放加密前的卡密钥 char sCryptPwd[33] = ""; //存放加密后的卡密钥 T_t_card card; memset(&card,0,sizeof(card)); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_DAMT0,F_DAMT1,F_DAMT2,F_LVOL1,F_LVOL2,F_SDATE0,0); trans.cardno=rPack->lvol0; if(trans.cardno<1) trans.cardno=atoi(rPack->sserial0); ret=DB_t_card_read_by_cardno(trans.cardno,&card); if(ret) { writelog(LOG_ERR,"Create serial_no error,error code=[%d]",ret); return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if(card.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==card.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==card.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==card.badflag[0]) { return ERRINFO(E_CARD_BADRECORD,trans.cardno); } if('1'==card.lockflag[0]) { return ERRINFO(E_CARDNO_LOCKED,trans.cardno); } des2src(sInputPwd,rPack->scust_limit); //卡密码 strcpy(seed_key,STATIC_SEED_KEY); //种子密钥 EncodePwd(seed_key,sInputPwd,sCryptPwd,0); //加密 if(strcmp(sCryptPwd,card.cardpwd)!=0) { writelog(LOG_ERR,"card err input[%s]db[%s]",sCryptPwd,card.cardpwd); return E_CARDPWD; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F847318(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int cardno=0; int custid,ret; custid = in_pack->lvol0; if(custid == 0 ) { return E_INPUT_DATA_INVAILD; } if(in_pack->lvol1 >0) cardno = in_pack->lvol1; else { ret = get_cardno_by_custid(custid,&cardno); if(ret) { return ret; } } T_t_card tCard; memset(&tCard,0,sizeof tCard); ret = DB_t_card_read_by_cardno(cardno,&tCard); if(ret) { if(DB_NOTFOUND == ret) return ERRINFO(E_NOTEXIST_CARDNO,cardno); else return E_DB_CARD_R; } // 检查卡密码 if(strcmp(in_pack->sstatus0,TYPE_YES) == 0) { ret = CheckUserPswd(in_pack->semp_pwd,tCard.cardpwd); if(ret) { return E_CARDPWD; } } des2src(in_pack->semp,in_pack->scust_limit); in_pack->lwithdraw_flag = in_pack->lvol6; in_pack->lvol0=tCard.cardno; in_pack->sstatus1[0]='1'; ret = F846307(handle,iRequest,in_pack,pRetCode,szMsg); if(ret) return ret; return 0; }
static int doCard(T_t_card& tCard) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=DB_t_card_read_by_cardno(trans.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_R; } trans.cardtype=tCard.cardtype; trans.feetype=tCard.feetype; if(tCard.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==tCard.badflag[0]) { return ERRINFO(E_CARD_BADRECORD,trans.cardno); } if('1'==tCard.lockflag[0]) { return ERRINFO(E_CARDNO_LOCKED,trans.cardno); } //比较卡物理ID是否相同 if(strcmp(tCard.cardphyid,trans.cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,trans.cardphyid); return E_CARD_PHYNO_DIFFER; } //检查卡的有效期 if(strcmp(tCard.expiredate,trans.transdate)<=0) return E_CARD_EXPIRED; return 0; }
static int checklosecardacc(int cardno,T_t_card *tCard,T_t_account *tAccount) { int ret = DB_t_card_read_by_cardno(cardno, tCard); if(tCard->status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOGOUT,cardno); } /* if('1'==tCard->frozeflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_FREEZE,cardno); } if('1'==tCard->badflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_BADRECORD,cardno); } // 只有挂失状态才能无卡退 if('1'!=tCard->lossflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARDNO_NOLOST,cardno); } */ ret=DB_t_account_read_by_accno(tCard->accno,tAccount); if(ret) { writelog(LOG_ERR,"accno[%s]",tCard->accno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_ACCNO,tCard->accno); else return E_DB_ACCOUNT_R; } if(tAccount->status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARDACC_LOGOUT,tAccount->accno); } return 0; }
static int doCard(TRANS& trans,CARDTRANSINFO& cti,T_t_card& tCard) { int ret=0; ret=DB_t_card_read_by_cardno(trans.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } cti.cardtype=tCard.cardtype; cti.feetype=tCard.feetype; if(tCard.status[0]!=STATUS_NORMAL) { return E_CARD_LOGOUT; } if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]=='1') { return E_CARDNO_FREEZE; } if(tCard.cardattr[CARDSTAT_TYPE_LOST]=='1') { return E_CARDNO_LOST; } //比较卡物理ID是否相同 if(strcmp(tCard.cardphyid,cti.cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,cti.cardphyid); return E_CARD_PHYNO_DIFFER; } //检查卡的有效期 if(strcmp(tCard.expiredate,trans.transdate)<=0) return E_CARD_EXPIRED; return 0; }
static int CheckCardStatus() { CAccTrans& ats = CAccTrans::GetInst(); TRANS& trans = ats.trans; T_t_card tCard; memset(&tCard, 0, sizeof(tCard)); int ret = 0; ret = DB_t_card_read_by_cardno(trans.cardno, &tCard); if(ret) { writelog(LOG_ERR, "cardno[%d]", trans.cardno); if(DB_NOTFOUND == ret) return ERRINFO(E_NOTEXIST_CARDNO, trans.cardno); else return E_DB_CARD_R; } if(tCard.status[0] != STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT, trans.cardno); } if('1' == tCard.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE, trans.cardno); } if('1' == tCard.lossflag[0]) { return ERRINFO(E_CARD_LOST, trans.cardno); } if('1' == tCard.badflag[0]) { return ERRINFO(E_CARD_BADRECORD, trans.cardno); } //检查卡的有效期 if(strcmp(tCard.expiredate, trans.transdate) <= 0) return E_CARD_EXPIRED; trans.cardphytype = tCard.cardphytype; return 0; }
int F240011(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int custid=0; char stuempno[20+1]=""; char bankcardno[30+1]=""; int cardno=0; T_t_card t_card; T_t_customer t_customer; T_t_bankcard t_bankcard; memset(&t_card,0,sizeof(t_card)); memset(&t_customer,0,sizeof t_customer); memset(&t_bankcard,0,sizeof t_bankcard); custid=rPack->lvol8; des2src(stuempno,rPack->scust_auth); cardno=rPack->lvol0; des2src(bankcardno,rPack->sphone); writelog(LOG_INFO,"bankcardno[%s]stuemp[%s]custid[%d]cardno[%d]",bankcardno,stuempno,custid,cardno); //判断对应关系是否相符 if(custid<1) { if(cardno>0) { ret=DB_t_card_read_by_cardno(cardno,&t_card); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_R; } if(t_card.status[0]!='1') return E_CARD_CLOSE; custid=t_card.custid; } else { return E_NOTEXIST_CARDNO; } } if(custid>0) { ret=DB_t_bankcard_read_by_custid_and_bankcardno(custid,bankcardno,&t_bankcard); if(ret) { writelog(LOG_ERR,"DB_t_bankcard_read_by_custid_and_bankcardno ret,ret[%d]custid[%d]bankcardno[%s]",ret,custid,bankcardno); if(DB_NOTFOUND==ret) return E_TRANS_RELATION_NOEXIT; else return E_DB_BANKCARD_R; } } else { writelog(LOG_ERR,"stuempno input[%s]",stuempno); return E_TRANS_RELATION_NOEXIT; } 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; }
static int SaveOldCardInfo(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(trans.cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==tCard.badflag[0]) { return ERRINFO(E_CARD_BADRECORD,trans.cardno); } //比较卡物理ID是否相同 if(strcmp(tCard.cardphyid,trans.cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,trans.cardphyid); return E_CARD_PHYNO_DIFFER; } 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; } int existflag=0; ret=IsExistUnGetSubsidy(tCard.cardno,&existflag); if(ret) { return ret; } if(existflag) { ERRTIP("有未领补助,请领取补助后再换卡"); return E_COMMON_ERR; } ret=DB_t_cardinsteaddtl_del_by_cardno(trans.cardno); if(ret) { if(DB_NOTFOUND!=ret) return E_DB_CARDINSTEADDTL_R; } T_t_cardinsteaddtl cardinsteaddtl; memset(&cardinsteaddtl,0,sizeof(cardinsteaddtl)); des2src(cardinsteaddtl.accdate,pAccTrans->trans.accdate); cardinsteaddtl.termid = trans.termid; cardinsteaddtl.termseqno = trans.termseqno; cardinsteaddtl.cardno = trans.cardno; cardinsteaddtl.oldcardtype=tCard.cardtype; des2src(cardinsteaddtl.oldcardphyid,trans.cardphyid); des2src(cardinsteaddtl.oldshowcardno,tCard.showcardno); cardinsteaddtl.oldcardcnt = trans.paycnt; cardinsteaddtl.oldcardbal = trans.cardbefbal; cardinsteaddtl.oldsubsidyno=trans.cardsubsidyno; cardinsteaddtl.revflag[0]='0'; cardinsteaddtl.status[0]=STATUS_NORMAL; ret=DB_t_cardinsteaddtl_add(&cardinsteaddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDINSTEADDTL_E; else return E_DB_CARDINSTEADDTL_I; } T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tCard.cardno; des2src(cardver.accdate,pAccTrans->trans.accdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,cardinsteaddtl.cardphyid); des2src(cardver.stuempno,trans.stuempno); cardver.cardvertype=CARDVERTYPE_CARDINSTEADOLD; ret=getCardVerNo(cardver.cardverno); if(ret) return ret; ret=DB_t_cardver_add(&cardver); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } T_t_newcardchange newcardchange; memset(&newcardchange,0,sizeof(newcardchange)); ret=DB_t_newcardchange_read_lock_by_c1_and_showcardno(trans.showcardno,&newcardchange); if(ret) { writelog(LOG_ERR,"showcardno[%s]",trans.showcardno); if(DB_NOTFOUND==ret) return E_DB_NEWCARDCHANGE_N; else return E_DB_NEWCARDCHANGE_R; } newcardchange.status= NEWCARDSTATUS_INIT; des2src(newcardchange.oldcardphyid,cardinsteaddtl.oldcardphyid); des2src(newcardchange.cardphyid,rPack->scust_no2); des2src(newcardchange.lastsaved,trans.sysdatetime); ret=DB_t_newcardchange_update_lock_by_c1(&newcardchange); if(ret) { return E_DB_NEWCARDCHANGE_U; } //保存水控钱包卡余额 map<int,double> CardBalMap; CardBalMap[rPack->lvol10]=D4U5(rPack->lvol1/100.0); CardBalMap[rPack->lvol11]=D4U5(rPack->lvol2/100.0); CardBalMap[rPack->lvol12]=D4U5(rPack->lvol3/100.0); map<int,double>::iterator itMap; for(itMap=CardBalMap.begin();itMap!=CardBalMap.end();itMap++) { int pursetype=itMap->first; double balance=itMap->second; if(pursetype<1) continue; T_t_cardbalance cardbalance; memset(&cardbalance,0,sizeof(cardbalance)); ret=DB_t_cardbalance_read_lock_by_c0_and_accno_and_pursetype(tCard.accno,pursetype,&cardbalance); if(ret) { if(DB_NOTFOUND!=ret) return E_DB_CARDBALANCE_R; else { memset(&cardbalance,0,sizeof(cardbalance)); des2src(cardbalance.accno,tCardAccount.accno); cardbalance.pursetype=pursetype; cardbalance.cardno=tCard.cardno; cardbalance.balance=balance; cardbalance.cardbal=balance; cardbalance.accumdpsamt=balance; ret=DB_t_cardbalance_add(&cardbalance); if(ret) { return E_DB_CARDBALANCE_I; } } } else { cardbalance.cardno=tCard.cardno; cardbalance.cardbal=balance; ret=DB_t_cardbalance_update_lock_by_c0(&cardbalance); if(ret) { return E_DB_CARDBALANCE_U; } } writelog(LOG_INFO,"pursertype[%d]cardbalance[%.2lf]",pursetype,cardbalance.cardbal); } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_SDATE3,F_STIME3,0); des2src(outPack->semp,trans.opercode); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; PutRow(handle,outPack,pRetCode,szMsg); return 0; }
static int NormalTrans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL8,F_LVOL10,F_LVOL11,F_LVOL12,F_SDATE0,F_SPHONE3,F_SADDR,F_LSAFE_LEVEL2, F_SDATE3,F_STIME3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); 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 E_DB_REFNO_N; else return E_DB_REFNO_R; } if(strncmp(tRefno.mac,rPack->saddr,8)!=0) { ERRTIP("交易参考号MAC校验错误"); return E_COMMON_ERR; } if(RS_FAIL==tRefno.status) { ERRTIP("交易已失败"); return E_COMMON_ERR; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); ret=DB_t_transdtl_read_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_TRANSDTL; else return E_DB_TRANSDTL_R; } int waterflag=0; if(transdtl.exttype/1000==1)//水控 waterflag=1; if(RS_SUCC==tRefno.status) { outPack->lvol0=transdtl.cardno; outPack->lvol1=D4U5(transdtl.amount*100,0); outPack->lvol8=D4U5(transdtl.cardaftbal*100,0); if(waterflag)//水控 { double wateraftbal= atof(transdtl.extdata); outPack->lsafe_level2=D4U5(wateraftbal*100,0); } des2src(outPack->sdate3,transdtl.transdate); des2src(outPack->stime3,transdtl.transtime); des2src(outPack->semp,transdtl.opercode); outPack->lwithdraw_flag=transdtl.termid; outPack->lserial1=transdtl.termseqno; des2src(outPack->sphone3,transdtl.refno); des2src(outPack->saddr,tRefno.mac); PutRow(handle,outPack,pRetCode,szMsg); return 0; } if(transdtl.status[0]!=DTLSTATUS_INIT) { ERRTIP("交易流水表状态错误"); return E_COMMON_ERR; } des2src(trans.opercode,transdtl.opercode); trans.termid=transdtl.termid; trans.termseqno=transdtl.termseqno; trans.cardflag=1; trans.usecardflag=1; trans.transcode=transdtl.transcode; trans.cardno=transdtl.cardno; trans.purseno=transdtl.purseno; trans.paycnt=transdtl.cardcnt; trans.cardbefbal=transdtl.cardbefbal; trans.cardaftbal=transdtl.cardbefbal; trans.inputamt= transdtl.amount; trans.unusedamt = trans.inputamt; CPaymentBase *payment; payment = CPaymentBase::find_payment(transdtl.exttype); if(NULL == payment) { return E_TRANS_FUNC_NONSUPPORT; } rPack->lcert_code = transdtl.exttype; strcpy(rPack->sbank_acc,transdtl.extdata); ret = payment->init(handle,&aPack,rPack); if(ret) { writelog(LOG_ERR,"trade[%d],ret[%d]",transdtl.exttype,ret); return ret; } pAccTrans->SetSummary(payment->payment_.summary); T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(trans.cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } strcpy(trans.cardaccno,tCard.accno); trans.feetype=tCard.feetype; trans.custid=tCard.custid; ret=pAccTrans->doTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; ret=UpdateCardBitmap(trans.cardno,trans.paycnt,CARDBITMAPTYPE_SYS_ONLINE); if(ret) return ret; transdtl.status[0]=DTLSTATUS_SUCCESS; ret=DB_t_transdtl_update_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_U; } tRefno.status=RS_SUCC; strcpy(tRefno.lastsaved,trans.sysdatetime); ret=DB_t_refno_update_by_refno(tRefno.refno,&tRefno); if(ret) { if(DB_NOTFOUND==ret) return E_DB_REFNO_N; else return E_DB_REFNO_U; } outPack->lvol0=tCard.cardno; outPack->lvol1=D4U5(trans.inputamt*100,0); outPack->lvol8=D4U5(trans.cardaftbal*100,0); if(waterflag)//水控 { double wateraftbal= atof(transdtl.extdata); outPack->lsafe_level2=D4U5(wateraftbal*100,0); } des2src(outPack->sdate3,trans.accdate); des2src(outPack->stime3,trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; des2src(outPack->sphone3,trans.refno); des2src(outPack->saddr,tRefno.mac); sprintf(trans.remark,"%s卡余额%.2lf元",pAccTrans->remark.c_str(),pAccTrans->trans.cardaftbal); des2src(outPack->vsmess,trans.remark); // AnswerData(handle,*pRetCode,szMsg); //进行第三方支付 if(payment->payment_.onlinepay) { ret=db_commit(); if(ret) { writelog(LOG_ERR,"数据库事务提交失败 ret=%d",ret); return E_DB_COMMIT; } rPack->lwithdraw_flag=outPack->lwithdraw_flag; rPack->lserial1=outPack->lserial1; rPack->lvol0=outPack->lvol0; rPack->lvol1=outPack->lvol1; rPack->lvol8=outPack->lvol8; rPack->lsafe_level2=outPack->lsafe_level2; des2src(rPack->sdate3,outPack->sdate3); des2src(rPack->stime3,outPack->stime3); des2src(rPack->sphone3,outPack->sphone3); des2src(rPack->saddr,outPack->saddr); //mac des2src(rPack->semp,outPack->semp); ret=payment->transfer(handle,rPack,outPack); if(ret) { writelog(LOG_ERR,"与第三方系统交易失败 ret=%d",ret); return ret; } if(payment->pushflag_ != 1) PutRow(handle,outPack,pRetCode,szMsg); } else { PutRow(handle,outPack,pRetCode,szMsg); } return 0; }
int F930203(TRUSERID *handle, int iRequest, ST_PACK *in_pack, int *pRetCode, char *szMsg) { T_t_doordtl tDoordtl; T_t_card tCard; T_t_device device; T_t_dooreventdtl event; T_t_customer tCust; int ret; char weigand_no[12+1] = ""; memset(&device, 0, sizeof device); writelog(LOG_INFO, "接收前置数据:device=[%d],parent_id=[%d],dev_no=[%d],cardno=[%d],phycarid=[%s],ret=[%d]",in_pack->lvol5, in_pack->lvol2, in_pack->lvol1,in_pack->lvol0,in_pack->sdate1,ret); // 查询设备ID号 if (in_pack->lvol5 > 0) { ret = DB_t_device_read_by_deviceid(in_pack->lvol5, &device); } else { // 先判断是不是有父设备ID if (in_pack->lvol2 > 0) ret = get_door_dev_by_parent_and_termid(&device, in_pack->lvol2 , in_pack->lvol1); // 通过机号查询 else { // 判断父设备机号 if (in_pack->lvol3 > 0) ret = find_device_by_parent_termid(&device, in_pack->lvol3, in_pack->lvol1 , in_pack->lserial0); // 通过父设备机号与设备机号查询 else { // 通过子系统号与设备机号查询 ret = find_device_by_devinfo(&device, in_pack->lcert_code, in_pack->lvol1 , in_pack->sbank_code, in_pack->lserial0); } } } if (ret) { writelog(LOG_ERR, "获取设备信息失败:deviceid=[%d],parent_id=[%d],dev_no=[%d],ret=[%d]",in_pack->lvol5, in_pack->lvol2, in_pack->lvol1, ret); if (ret == E_DB_DEVICE_N) { writelog(LOG_ERR, "上传记录找不到对应的设备termid[%d]type[%s]parent[%d][%d],sys[%d],phytype[%d]",in_pack->lvol1, in_pack->sbank_code, in_pack->lvol2, in_pack->lvol3, in_pack->lcert_code, in_pack->lserial0); return ret; } else { *pRetCode = ret; goto L_RETU; } } // 没有物理卡号,也没有交易卡号 if ((strlen(in_pack->sdate1) == 0) && in_pack->lvol0 == 0) { //事件 memset(&event, 0, sizeof event); event.deviceid = device.deviceid; event.eventcode = atoi(in_pack->semp_no); des2src(event.eventmsg, in_pack->vsmess); event.sysid= in_pack->lcert_code; des2src(event.transdate, in_pack->sdate0); des2src(event.transtime, in_pack->stime0); getsysdate(event.coldate); getsystime(event.coltime); ret = DB_t_dooreventdtl_add(&event); if (ret) { if (DB_REPEAT == ret) return 0; return E_DB_DOOREVENTDTL_I; } return 0; } else { memset(&tCard, 0, sizeof tCard); if(strlen(in_pack->sdate1) >0) { // 有物理卡号 ret = get_card_by_phyno(&tCard, in_pack->sdate1); if (ret) { if (ret == E_DB_CARD_N) { ConverPhyNo(in_pack->sdate1, weigand_no); ret = get_card_by_weigand_no(&tCard, weigand_no); if (ret) { writelog(LOG_ERR, "Get_card_by_weigand_no err,weigand_no=[%s],ret=[%d]", weigand_no, ret); // 没有这张卡,仍然保留流水 if (ret != E_DB_CARD_N) { *pRetCode = ret; goto L_RETU; } } } else { *pRetCode = ret; goto L_RETU; } } } else { // 根据交易卡号查询 ret = DB_t_card_read_by_cardno(in_pack->lvol0, &tCard); if(ret) { *pRetCode = E_DB_CARD_R; goto L_RETU; } } memset(&tDoordtl, 0, sizeof tDoordtl); tDoordtl.deviceid = device.deviceid; des2src(tDoordtl.devphyid,device.devphyid); writelog(LOG_DEBUG,"deviceid[%d],devphyid[%s]",device.deviceid,device.devphyid); tDoordtl.cardno = tCard.cardno; tDoordtl.sysid = in_pack->lcert_code; tDoordtl.custid = tCard.custid; if (!ret) des2src(tDoordtl.cardphyid, tCard.cardphyid); else des2src(tDoordtl.cardphyid, in_pack->sdate1); if(tDoordtl.custid) { memset(&tCust,0,sizeof tCust); ret = DB_t_customer_read_by_custid(tDoordtl.custid, &tCust); if(ret ) { if(ret != DB_NOTFOUND) return E_DB_CUSTOMER_R; } else { des2src(tDoordtl.stuempno,tCust.stuempno); des2src(tDoordtl.custname,tCust.custname); } } //writelog(LOG_DEBUG,"door serial date[%s] time[%s]",in_pack->sdate0,in_pack->stime0); des2src(tDoordtl.transdate, in_pack->sdate0); des2src(tDoordtl.transtime, in_pack->stime0); getsysdate(tDoordtl.coldate); getsystime(tDoordtl.coltime); tDoordtl.transmark = atoi(in_pack->semp_no); ret = getNewUniqNo(KEYTYPE_DOORDTL,&(tDoordtl.devseqno)); if(ret) { writelog(LOG_ERR,"生成流水号失败"); *pRetCode = ret; goto L_RETU; } // 保存门禁流水 ret = DB_t_doordtl_add(&tDoordtl); if (ret) { // 重复流水忽略 if (DB_REPEAT == ret) { writelog(LOG_DEBUG, "流水重复card[%s],date[%s],time[%s]", in_pack->sdate1,in_pack->sdate0, in_pack->stime0); return 0; } writelog(LOG_ERR, "保存流水失败card[%s],date[%s],time[%s]", in_pack->sdate1,in_pack->sdate0, in_pack->stime0); *pRetCode = E_DB_DOOREVENTDTL_I; goto L_RETU; } switch (device.devusage) { case DU_JSB_CONFRENCE: /* ret = SaveDoorJSBSerial(&tDoordtl); if(ret) { writelog(LOG_ERR,"保存计时宝流水失败,errcode[%d]",ret); break; } ret = UpdateConferSerial(&tDoordtl); */ // break; case DU_JSB_ATTENDANCE: // ret = SaveKQSerial(&tDoordtl); // if (ret) // { // writelog(LOG_ERR, "插入考勤流水表失败,errcode[%d]", ret); // break; // } default: //ret = SaveDoorJSBSerial(&tDoordtl); /* ret = SaveDoorDtl(&tDoordtl); if (ret) { writelog(LOG_ERR, "插入考勤流水表失败,errcode[%d]", ret); break; } */ break; } if (ret) { *pRetCode = ret; goto L_RETU; } } return 0; L_RETU: return -1; }
static int doReverse(char* oldaccdate,int oldtermid,int oldtermseqno) { //查找操作员流水 int ret=0; T_t_card tCard; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; char transdtlname[61]= {0}; ret=GetTransdtlTableName(oldaccdate,transdtlname); if(ret) { writelog(LOG_ERR,"GetTransdtlTableName err"); return ret; } T_t_transdtl transdtl; ret=ReadTransdtlData(transdtlname,oldaccdate,oldtermid,oldtermseqno,transdtl); if(ret) { writelog(LOG_ERR,"ReadTransdtlData transdtlname[%s]oldaccdate[%s]oldtermid[%d]oldtermseqno[%d]",transdtlname,oldaccdate,oldtermid,oldtermseqno); return ret; } if('1'==transdtl.revflag[0]) { return E_TRANS_REVERSED; } if(strlen(transdtl.opercode)) { if(strcmp(transdtl.opercode,pAccTrans->trans.opercode)!=0) { return ERRINFO(E_REVOPER,transdtl.opercode); } } if(trans.cardno!=transdtl.cardno) { return E_CARDNO_DIFFER; } if(transdtl.transcode!=TC_POSDRAW&& transdtl.transcode!=TC_POSDRAW&& transdtl.transcode!=TC_CARDDRAW&& transdtl.transcode!=TC_BUSDRAW&& transdtl.transcode!=TC_CARD2CARD&& transdtl.transcode!=TC_WATERTRANS&& transdtl.transcode!=TC_CARDPAYMENT) { return E_TRANSCODE_NOT_DRAW; } if(transdtl.revflag[0]=='1') { /* memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(vTransdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",vTransdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } */ pAccTrans->remark="该交易已冲正"; return E_TRANS_REVERSED; } ret=UpdateTransdtlHisRevFlag(transdtlname,oldaccdate,oldtermid,oldtermseqno); if(ret) { writelog(LOG_ERR,"UpdateTransdtlRevFlag ret[%d]accdate[%s]termid[%d]termseqno[%d]",ret,oldaccdate,oldtermid,oldtermseqno); return ret; } memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(transdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",transdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==tCard.badflag[0]) { return ERRINFO(E_CARD_BADRECORD,trans.cardno); } // ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_DECREV,0); // if(ret) // return ret; T_t_transdtl transdtlrev; memset(&transdtlrev,0,sizeof(transdtlrev)); des2src(transdtlrev.transdate,trans.transdate); des2src(transdtlrev.transtime,trans.transtime); des2src(transdtlrev.accdate,trans.accdate); strcpy(transdtlrev.acctime,trans.acctime); transdtlrev.termid=trans.termid; transdtlrev.termseqno=trans.termseqno; transdtlrev.transcode=trans.transcode; transdtlrev.paytype=0; transdtlrev.exttype=transdtl.exttype; des2src(transdtlrev.extdata,transdtl.extdata); des2src(transdtlrev.refno,transdtl.refno); transdtlrev.cardbefbal=trans.cardbefbal; transdtlrev.cardno=transdtl.cardno; transdtlrev.purseno=transdtl.purseno; transdtlrev.transflag=TF_DPS; transdtlrev.cardcnt=trans.aftdpscnt; transdtlrev.amount=transdtl.amount; transdtlrev.managefee=transdtl.managefee; transdtlrev.custid=transdtl.custid; des2src(transdtlrev.showcardno,transdtl.showcardno); des2src(transdtlrev.custname,transdtl.custname); des2src(transdtlrev.stuempno,transdtl.stuempno); transdtlrev.cardaftbal=transdtlrev.cardbefbal+(transdtl.cardbefbal-transdtl.cardaftbal); if(amtcmp(transdtlrev.cardaftbal,0)<0) return ERRIF_CARDACC_OVERDRAW;; des2src(transdtlrev.opercode,trans.opercode); transdtlrev.status[0]=DTLSTATUS_SUCCESS; transdtlrev.errcode=0; ret=DB_t_transdtl_add(&transdtlrev); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } trans.cardflag=1; trans.cardphytype=tCard.cardphytype; strcpy(pAccTrans->trans.cardaccno,tCard.accno); ret=pAccTrans->doHistoryReverseTrans(oldaccdate,oldtermid,oldtermseqno); if(ret) return ret; trans.cardaftbal=transdtlrev.cardaftbal; trans.transamt=transdtlrev.amount; return 0; }
int F930101(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret= 0; int dev_usage = 0; //T_t_attend_txdtl tTxdtl; T_t_door_txdtl tTxdtl; T_t_device tDevice; T_t_card tCard; if(strlen(rPack->sdate0) != 8) { *pRetCode = E_DEVPHYID_NULL; goto L_RETU; } /* ret=chk_dyn_key(rPack->lcert_code,rPack->scust_limit2); if(ret) { writelog(LOG_ERR,"subsys_id[%d]dyn_key[%s]",rPack->lcert_code,rPack->scust_limit2); *pRetCode = ret; goto L_RETU; } */ memset(&tTxdtl,0,sizeof(tTxdtl)); memset(&tDevice,0,sizeof tDevice); /* tTxdtl.serial_no= rPack->lvol3; //上传端流水号 tTxdtl.sys_id = rPack->lcert_code; //上传工作站标识(前置机注册号) // tTxdtl.mode_code=rPack->lvol6; //模式代码 tTxdtl.cardno= rPack->lvol7; //交易卡号 // tTxdtl.use_type= rPack->lvol8; //考勤类型 // tTxdtl.inductor_no= rPack->lvol9; //感应头标记 // tTxdtl.work_mark=rPack->lvol10; //上下班标志 tTxdtl.tx_mark=rPack->lvol11; //999交易标志 des2src(tTxdtl.deviceid, rPack->sdate0); //物理设备ID des2src(tTxdtl.tx_date,rPack->sdate1); //发生日期(格式化输入的日期) des2src(tTxdtl.crc,rPack->sbank_code2); //CRC校验 des2src(tTxdtl.tx_time,rPack->spost_code2); //发生时间(格式化输入的时间) getsysdate(tTxdtl.col_date); getsystime(tTxdtl.col_time); // ret=check(&tTxdtl); // if(ret) // { // tTxdtl.status[0]='5'; //无效交易 // //tTxdtl.err_code=ret; // writelog(LOG_DEBUG,"无效流水deviceid[%d]serial_no[%d]",tTxdtl.deviceid,tTxdtl.serial_no); // return ret; // } // else // tTxdtl.status[0]='1'; ret = SaveDoorJSBSerial(&tTxdtl); */ tTxdtl.serial_no= rPack->lvol3; //上传端流水号 tTxdtl.sys_id = rPack->lcert_code; //上传工作站标识(前置机注册号) // tTxdtl.mode_code=rPack->lvol6; //模式代码 tTxdtl.cardno= rPack->lvol7; //交易卡号 memset(&tCard,0,sizeof tCard); ret = DB_t_card_read_by_cardno(tTxdtl.cardno,&tCard); if(ret) { if(DB_NOTFOUND == ret) { // 卡号不存在 } else { *pRetCode = E_DB_CARD_R; goto L_RETU; } } // tTxdtl.use_type= rPack->lvol8; //考勤类型 // tTxdtl.inductor_no= rPack->lvol9; //感应头标记 // tTxdtl.work_mark=rPack->lvol10; //上下班标志 tTxdtl.cust_id = tCard.custid; //客户号 tTxdtl.tx_mark=rPack->lvol11; //999交易标志 //des2src(tTxdtl.deviceid, rPack->sdate0); //物理设备ID ret = get_devinfo_by_phyid(rPack->sdate0,&tDevice); if(ret) { if(DB_NOTFOUND == ret) { // 设备不存在 writelog(LOG_ERR,"采集计时宝流水,设备不存在或已注销[%s]" ,rPack->sdate0); return 0; } else { *pRetCode = ret; goto L_RETU; } } tTxdtl.deviceid = tDevice.deviceid; des2src(tTxdtl.tx_date,rPack->sdate1); //发生日期(格式化输入的日期) des2src(tTxdtl.crc,rPack->sbank_code2); //CRC校验 des2src(tTxdtl.tx_time,rPack->spost_code2); //发生时间(格式化输入的时间) getsysdate(tTxdtl.col_date); getsystime(tTxdtl.col_time); ret = SaveKQSerial(&tTxdtl); if(ret) { writelog(LOG_ERR,"插入考勤流水表失败,errcode[%d]",ret); *pRetCode = ret; goto L_RETU; } return 0; L_RETU: return -1; }
static int SaveOldCardInfo(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(trans.cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==tCard.badflag[0]) { return ERRINFO(E_CARD_BADRECORD,trans.cardno); } //比较卡物理ID是否相同 if(strcmp(tCard.cardphyid,trans.cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,trans.cardphyid); return E_CARD_PHYNO_DIFFER; } T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } int existflag=0; ret=IsExistUnGetSubsidy(tCard.cardno,&existflag); if(ret) { return ret; } if(existflag) { ERRTIP("有未领补助,请领取补助后再换卡"); return E_COMMON_ERR; } ret=DB_t_cardinsteaddtl_del_by_cardno(trans.cardno); if(ret) { if(DB_NOTFOUND!=ret) return E_DB_CARDINSTEADDTL_R; } T_t_cardinsteaddtl cardinsteaddtl; memset(&cardinsteaddtl,0,sizeof(cardinsteaddtl)); des2src(cardinsteaddtl.accdate,pAccTrans->trans.accdate); cardinsteaddtl.termid = trans.termid; cardinsteaddtl.termseqno = trans.termseqno; cardinsteaddtl.cardno = trans.cardno; cardinsteaddtl.oldcardtype=tCard.cardtype; des2src(cardinsteaddtl.oldcardphyid,trans.cardphyid); des2src(cardinsteaddtl.oldshowcardno,tCard.showcardno); cardinsteaddtl.oldcardcnt = trans.paycnt; cardinsteaddtl.oldcardbal = trans.cardbefbal; cardinsteaddtl.oldsubsidyno=trans.cardsubsidyno; cardinsteaddtl.revflag[0]='0'; cardinsteaddtl.status[0]=STATUS_NORMAL; ret=DB_t_cardinsteaddtl_add(&cardinsteaddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDINSTEADDTL_E; else return E_DB_CARDINSTEADDTL_I; } T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tCard.cardno; des2src(cardver.accdate,pAccTrans->trans.accdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,cardinsteaddtl.cardphyid); des2src(cardver.stuempno,trans.stuempno); cardver.cardvertype=CARDVERTYPE_CARDINSTEADOLD; ret=getCardVerNo(cardver.cardverno); if(ret) return ret; ret=DB_t_cardver_add(&cardver); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_SDATE3,F_STIME3,0); des2src(outPack->semp,trans.opercode); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; PutRow(handle,outPack,pRetCode,szMsg); return 0; }
static int do950070(T_t_device &tDevice,T_t_card &tCard,T_t_dpsopercard &tDpsCard, T_t_dpsoper &tOperator,ST_PACK *rPack) { int ret; des2src(tDevice.devphyid,rPack->sphone3); ret = addPOSCheckPOS(rPack->lwithdraw_flag,tDevice); if(ret) return ret; ret = DB_t_card_read_by_cardno(rPack->lvol0,&tCard); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"card [%d] is not exists!",rPack->lvol0); return ERRIF_CARD_NOTEXIST; } else { writelog(LOG_ERR,"DB_t_card_read_by_cardno error"); return ERRIF_SYSTEM; } } ret = DB_t_dpsopercard_read_by_cardno_and_disableflag(tCard.cardno,ADDDELFLAG_ADD,&tDpsCard); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"card[%d] has not been auth!",tCard.cardno); return ERRIF_AUTHCARD_NORIGHT; } else { writelog(LOG_ERR,"DB_t_dpsopercard_read_by_cardno_and_disableflag error"); return ERRIF_SYSTEM; } } ret = DB_t_dpsoper_read_by_opercode(tDpsCard.opercode,&tOperator); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"oper[%s] not exists!",tDpsCard.opercode); return ERRIF_AUTHCARD_EXPIRED; } else { writelog(LOG_ERR,"DB_t_dpsoper_read_by_opercode error"); return ERRIF_SYSTEM; } } if(tOperator.status[0] == STATUS_DELETE) { writelog(LOG_ERR,"oper[%s] has been cancled ",tOperator.opercode); return ERRIF_AUTHCARD_EXPIRED; } ret = doCard(tCard); if(ret) { writelog(LOG_ERR,"card[%d] error , ret=[%d]",tCard.cardno,ret); return ret; } ret = chk_cardpwd_by_cardno(tCard.cardno,rPack->stx_pwd); if(ret) { writelog(LOG_ERR,"card[%d] password error",tCard.cardno); if(E_CARD_PWD_DIFFER == ret) return ERRIF_AUTHCARD_PWD; else { writelog(LOG_ERR,"chk_cardpwd_by_cardno error"); return ERRIF_SYSTEM; } } return 0; }
static int check(int cardno,T_t_customer& tCustomer,T_t_card& tCard) { int ret=0; ret=DB_t_card_read_by_cardno(cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]=='1') { return E_REWCARD_CARDFROZE; } if((tCard.cardattr[CARDSTAT_TYPE_LOST]!='1')&&(tCard.cardattr[CARDSTAT_TYPE_BAD]!='1')) { return E_REWCARD_CARDSTATUS; } T_t_cardtype tCardtype; memset(&tCardtype,0,sizeof(tCardtype)); ret=DB_t_cardtype_read_by_cardtype(tCard.cardtype,&tCardtype); if(ret) { if(DB_NOTFOUND==ret) return E_DB_CARDTYPE_N; else return E_DB_CARDTYPE_R; } if(tCardtype.renewable[0]!='1') { return E_CARD_CANNOT_RENEW; } if(tCard.custid) { ret=DB_t_customer_read_by_custid(tCard.custid,&tCustomer); if(ret) { if(DB_NOTFOUND==ret) return E_CUSTOMER_NOT_EXIST; else return E_DB_CUSTOMER_R; } if(tCustomer.status[0]=='2') { return E_CUSTOMER_LOGOUT; } if(tCustomer.feetype<1) { return E_NOSET_CUSTOMER_FEETYPE; } } char lossexpiredate[9]=""; char sysdate[9]=""; char sDays[10]=""; ret=getParaVal(GLOBE_RENEWCARDDATE,sDays); if(ret) return ret; int days=atoi(sDays); ret=calcEndDate(tCard.lossdate,days,lossexpiredate); if(ret) return ret; getsysdate(sysdate); if(strcmp(sysdate,lossexpiredate)<0) { return E_CARDLOSSDATE_NOREACH; } return 0; }
static int doReverse(char* oldaccdate,int oldtermid,int oldtermseqno,char *cardphyid) { //查找操作员流水 int ret=0; T_t_card tCard; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; trans.revflag=1;//冲正标志 char transdtlname[61]={0}; ret=GetTransdtlTableName(oldaccdate,transdtlname); if(ret) { writelog(LOG_ERR,"GetTransdtlTableName err"); return ret; } T_t_transdtl transdtl; ret=ReadTransdtlData(transdtlname,oldaccdate,oldtermid,oldtermseqno,transdtl); if(ret) { writelog(LOG_ERR,"ReadTransdtlData transdtlname[%s],oldaccdate[%s],oldtermid[%d],oldtermseqno[%d]",transdtlname,oldaccdate,oldtermid,oldtermseqno); return ret; } trans.cardno=transdtl.cardno; if('1'==transdtl.revflag[0]) { memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(transdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",transdtl.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,tCard.cardno); else return E_DB_CARD_R; } pAccTrans->remark="该交易已冲正"; strcpy(cardphyid,tCard.cardphyid); return 0; } if(transdtl.cardcnt>0&&transdtl.cardno>0) { ret=UpdateCardBitmap(transdtl.cardno,transdtl.cardcnt,CARDBITMAPTYPE_REV); if(ret) return ret; } if(strlen(transdtl.opercode)) { if(strcmp(transdtl.opercode,pAccTrans->trans.opercode)!=0) { return ERRINFO(E_REVOPER,transdtl.opercode); } } else { des2src(transdtl.opercode,trans.opercode); } ret=UpdateTransdtlHisRevFlag(transdtlname,oldaccdate,oldtermid,oldtermseqno); if(ret) { writelog(LOG_ERR,"UpdateTransdtlRevFlag ret[%d] transdtlname[%s]accdate[%s]termid[%d]termseqno[%d]",ret,transdtlname,oldaccdate,oldtermid,oldtermseqno); return ret; } transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); des2src(transdtl.opercode,trans.opercode); transdtl.transcode=TC_CARDOPENREV; transdtl.cardcnt=trans.paycnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.cardaftbal=0; transdtl.amount=-transdtl.amount; if(amtcmp(trans.cardbefbal,0)>0) { transdtl.transflag=TF_PAY; transdtl.cardcnt=trans.paycnt; } transdtl.managefee=-transdtl.managefee; transdtl.revflag[0]=0; ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(transdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",transdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOGOUT,transdtl.cardno); } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_FREEZE,transdtl.cardno); } if('1'==tCard.lossflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOST,transdtl.cardno); } if('1'==tCard.badflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_BADRECORD,transdtl.cardno); } ret=getCardVerNo(tCard.cardverno); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } tCard.status[0]=STATUS_DELETE; strcpy(cardphyid,tCard.cardphyid); strcpy(tCard.closedate,trans.transdate); des2src(tCard.lastsaved,trans.sysdatetime); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_U; } T_t_customer tCustomer; memset(&tCustomer,0,sizeof(tCustomer)); //检查客户 if(tCard.custid) { ret=DB_t_customer_read_lock_by_cur_and_custid(tCard.custid,&tCustomer); if(ret) { writelog(LOG_ERR,"custid[%d]",tCard.custid); if(DB_NOTFOUND==ret) return E_DB_CUSTOMER_N; else return E_DB_CUSTOMER_R; } if(tCustomer.status[0]!=STATUS_NORMAL) { DB_t_customer_free_lock_cur(); return E_CUSTOMER_LOGOUT; } tCustomer.holdcardcnt--; des2src(tCustomer.lastsaved,trans.sysdatetime); ret=DB_t_customer_update_lock_by_cur(&tCustomer); if(ret) { writelog(LOG_ERR,"custid[%d]",tCard.custid); if(DB_NOTFOUND==ret) return E_DB_CUSTOMER_N; else return E_DB_CUSTOMER_U; } des2src(trans.stuempno,tCustomer.stuempno); } ////添加卡版本号记录 T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tCard.cardno; des2src(cardver.accdate,pAccTrans->trans.accdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.cardno=tCard.cardno; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardphyid,tCard.cardphyid); des2src(cardver.stuempno,tCustomer.stuempno); cardver.cardvertype=CARDVERTYPE_CARDCLOSE; des2src(cardver.cardverno,tCard.cardverno); ret=DB_t_cardver_add(&cardver); if(ret) { writelog(LOG_ERR,"cardverno[%s]",cardver.cardverno); if(DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } if(pAccTrans->sysPara.bEnableCardMgr) { ret=UseShowCardNoRev(tCard.showcardno); if(ret) return ret; trans.cardno=tCard.cardno; T_t_carddtl carddtl; memset(&carddtl,0,sizeof(carddtl)); des2src(carddtl.accdate,trans.accdate); des2src(carddtl.acctime,trans.acctime); carddtl.termid=trans.termid; carddtl.termseqno=trans.termseqno; des2src(carddtl.opercode,trans.opercode); carddtl.cardtype=tCard.cardtype; carddtl.usetype=CARDUSETYPE_GET; carddtl.inoutflag=INOUTFLAG_IN; carddtl.transcnt=1; strcpy(carddtl.summary,"发卡冲正"); des2src(carddtl.cardphyid,tCard.cardphyid); des2src(carddtl.showcardno,tCard.showcardno); ret=DB_t_carddtl_add(&carddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } } /* //回收卡 T_t_cardbook tCardBook; memset(&tCardBook,0,sizeof(tCardBook)); ret=getCardBookRecordNo(tCardBook.recordno); if(ret) return ret; tCardBook.cardtype=tCard.cardtype; // strcpy(tCardBook.curno,tCard.showcardno); // strcpy(tCardBook.startno,tCard.showcardno); // strcpy(tCardBook.endno,tCard.showcardno); //// tCardBook.usedcnt=0; // tCardBook.unusedcnt=1; tCardBook.status[0]=STATUS_NORMAL; strcpy(tCardBook.opercode,trans.opercode); ret=DB_t_cardbook_add(&tCardBook); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDBOOK_E; else return E_DB_CARDBOOK_I; } //添加卡片回收明细记录 T_t_carddtl tCarddtl; memset(&tCarddtl,0,sizeof(tCarddtl)); des2src(tCarddtl.accdate,pAccTrans->sysPara.sSettleDate); tCarddtl.termid=trans.termid; tCarddtl.termseqno=trans.termseqno; tCarddtl.cardtype=tCard.cardtype; des2src(tCarddtl.showcardno,tCard.showcardno); des2src(tCarddtl.cardphyid,tCard.cardphyid); tCarddtl.cardusetype=CARDUSETYPE_REUSE; des2src(tCarddtl.opercode,trans.opercode); ret=DB_t_carddtl_add(&tCarddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } */ //删除卡交易位图数据 /* ret=DB_t_cardbitmap_del_by_cardno(tCard.cardno); if(ret) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); return E_DB_CARDBITMAP_D; } */ T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { writelog(LOG_ERR,"transdtl.cardno[%d],transdtl.purseno[%d]",transdtl.cardno,transdtl.purseno); if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDACCNO; else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return E_CARDACC_LOGOUT; } des2src(trans.cardaccno,tCardAccount.accno); ret=pAccTrans->doHistoryReverseTrans(oldaccdate,oldtermid,oldtermseqno); if(ret) { if(E_DB_ACCDTL_N!=ret) return ret; } //注销帐户 memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(tCard.accno,&tCardAccount); if(ret) { writelog(LOG_ERR,"transdtl.cardno[%d],transdtl.purseno[%d]",transdtl.cardno,transdtl.purseno); if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDACCNO; else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { DB_t_account_free_lock_by_c0(); return E_CARDACC_LOGOUT; } if(amtcmp(tCardAccount.balance,0)!=0) { writelog(LOG_ERR,"balance[%.2lf]",tCardAccount.balance); DB_t_account_free_lock_by_c0(); return E_CARDACC_BALANCE_NOZERO; } if(amtcmp(tCardAccount.foregift,0)!=0) { writelog(LOG_ERR,"foregift[%.2lf]",tCardAccount.foregift); DB_t_account_free_lock_by_c0(); return E_CARDACC_FOREGIFT_NOZERO; } tCardAccount.status[0]=STATUS_DELETE; tCardAccount.cardbal=0; strcpy(tCardAccount.closedate,trans.transdate); ret=DB_t_account_update_lock_by_c0(&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDACCNO; else return E_DB_ACCOUNT_U; } return 0; }
// 退水控钱包到主钱包 static int waterbalareturn(CAccTrans *pAccTrans,ST_PACK *rPack,ST_PACK *outPack) { int ret=0; double waterbefbal = 0; double wateraftbal = 0; TRANS& trans=pAccTrans->trans; trans.cardno=rPack->lvol0; trans.purseno=PURSE_NO_ONE; trans.cardflag=1; trans.usecardflag=1; pAccTrans->SetCardCntAndCardBal(rPack->lvol5,rPack->lvol6,rPack->lvol7); trans.aftdpscnt++; des2src(trans.cardphyid,rPack->sstation1); T_t_card tCard; memset(&tCard,0,sizeof(tCard)); T_t_account tAccount; memset(&tAccount,0,sizeof(tAccount)); /* if(!rPack->lvol2) // 有卡 { ERRTIP("无卡小钱包余额不退"); return E_COMMON_ERR; } ret=pAccTrans->CheckAcc(&tCard,&tAccount); if(ret) { writelog(LOG_ERR,"检查状态失败"); return ret; } */ ret = DB_t_card_read_by_cardno(trans.cardno,&tCard); if(ret) { if(DB_NOTFOUND == ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); return ret; } trans.custid=tCard.custid; des2src(trans.showcardno,tCard.showcardno); des2src(trans.cardaccno,tCard.accno); ret=DB_t_account_read_by_accno(tCard.accno,&tAccount); if(ret) { return E_DB_ACCOUNT_R; } strcpy(trans.custname,tAccount.accname); // 小钱包类型 T_t_pursetype pursetype; memset(&pursetype,0,sizeof(pursetype)); pursetype.pursetype=rPack->lvol1; if(pursetype.pursetype<1) { ERRTIP("请输入小钱包类型"); return E_COMMON_ERR; } ret=DB_t_pursetype_read_by_pursetype(pursetype.pursetype,&pursetype); if(ret) { if(DB_NOTFOUND==ret) { ERRTIP("钱包类型[%d]不存在",pursetype.pursetype); return E_COMMON_ERR; } else return E_DB_PURSETYPE_R; } if(!pursetype.enableflag) { ERRTIP("钱包类型[%d]未启用",pursetype.pursetype); return E_COMMON_ERR; } if(!pursetype.refundflag) { //ERRTIP("钱包类型[%d]不允许退款",pursetype.pursetype); outPack->lvol0=tCard.cardno; outPack->lvol9=D2I(pAccTrans->trans.cardaftbal*100); outPack->lvol8=0; outPack->lsafe_level2=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); sprintf(trans.remark,"小钱包不允许退款"); des2src(outPack->vsmess,trans.remark); return 0; } /* T_t_cardbalance cardbalance; memset(&cardbalance,0,sizeof(cardbalance)); ret=DB_t_cardbalance_read_lock_by_c0_and_accno_and_pursetype(tAccount.accno,pursetype.pursetype,&cardbalance); if(ret) { if(DB_NOTFOUND==ret) // 早期的卡没开小钱包账户 { return E_DB_CARDBALANCE_N; } else return E_DB_CARDBALANCE_R; } if(rPack->lvol2) //有卡 { trans.cardflag=1; trans.usecardflag=1; pAccTrans->SetCardCntAndCardBal(rPack->lvol5,rPack->lvol6,rPack->lvol7); trans.aftdpscnt++; des2src(trans.cardphyid,rPack->sstation1); waterbefbal = D4U5(rPack->lsafe_level/100.0); trans.inputamt= waterbefbal; if(amtcmp(trans.inputamt,pursetype.pursemaxbal)>0) trans.inputamt=pursetype.pursemaxbal; if(amtcmp(trans.inputamt,cardbalance.balance)>0) trans.inputamt=cardbalance.balance; } else { //无卡 if(amtcmp(cardbalance.cardbal,cardbalance.balance)>0) trans.inputamt=cardbalance.balance; else trans.inputamt=cardbalance.cardbal; waterbefbal = trans.inputamt; trans.cardflag=1; // 涉及到计算卡余额,不然退大钱包有问题 trans.cardbefbal=tAccount.cardbal; // 大钱包卡余额 trans.cardaftbal=tAccount.cardbal; des2src(trans.custname,tAccount.accname); des2src(trans.showcardno,tCard.showcardno); des2src(trans.cardaccno,tCard.accno); } */ //waterbefbal = D4U5(rPack->lsafe_level/100.0); if(rPack->lvol2)//有卡 { waterbefbal = D4U5(rPack->lsafe_level/100.0); } else//无卡 { if(pursetype.refundflag == 1)//无卡退小钱包 { T_t_cardbalance cardbalance; memset(&cardbalance,0,sizeof(cardbalance)); ret=DB_t_cardbalance_read_lock_by_c0_and_accno_and_pursetype(tAccount.accno,pursetype.pursetype,&cardbalance); if(ret) { if(DB_NOTFOUND==ret) // 早期的卡没开小钱包账户 { return E_DB_CARDBALANCE_N; } else return E_DB_CARDBALANCE_R; } if(amtcmp(cardbalance.cardbal,cardbalance.balance)>0) waterbefbal=cardbalance.balance; else waterbefbal=cardbalance.cardbal; trans.cardflag=1; trans.cardbefbal=tAccount.cardbal; // 大钱包卡余额 trans.cardaftbal=tAccount.cardbal; // 更新水控卡余额 cardbalance.balance = 0; cardbalance.cardbal = 0; ret=DB_t_cardbalance_update_lock_by_c0(&cardbalance); if(ret) { return E_DB_CARDBALANCE_U; } } } trans.inputamt= waterbefbal; if(amtcmp(trans.inputamt,pursetype.pursemaxbal)>0) { //"小钱包余额大于最大钱包余额,只能按最大余额退卡"; trans.inputamt=pursetype.pursemaxbal; } double CardMaxBal=0; ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal); if(ret) return ret; if(amtcmp(trans.cardbefbal+trans.inputamt,CardMaxBal)>0) return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); trans.feetype=tCard.feetype; trans.custid=tCard.custid; trans.transamt=trans.inputamt; trans.unusedamt = trans.inputamt; if(pursetype.onlineflag) { //联机水控退款 pAccTrans->trans.transtype=TRANSTYPE_WATERREFUND; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; } else { if(pursetype.shopid<1) { ERRTIP("钱包类型[%d]没有设置对应的水控商户",pursetype.pursetype); return E_COMMON_ERR; } //否则脱机水控 int shoptype=0; char shopstatus[2]={0}; ret=ShopAccReadbyShopid(pursetype.shopid,trans.shopaccno,&shoptype,shopstatus); if(ret) { writelog(LOG_ERR,"shopid[%d]",pursetype.shopid); return ret; } if(shopstatus[0]!=STATUS_NORMAL) return ERRIF_SHOP_CLOSE; if(shoptype!=SHOPTYPE_COSUMESHOP) return ERRIF_SHOP_TYPE; pAccTrans->trans.transtype=TRANSTYPE_SHOPREFUND; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.refno,trans.refno); 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.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.transflag= TF_DPS; transdtl.cardcnt=trans.aftdpscnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.cardaftbal=trans.cardaftbal; transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.custid=trans.custid; des2src(transdtl.custname,trans.custname); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl.showcardno,trans.showcardno); GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } T_t_pursetransdtl pursetransdtl; memset(&pursetransdtl,0,sizeof(pursetransdtl)); des2src(pursetransdtl.refno,transdtl.refno); des2src(pursetransdtl.transdate,transdtl.transdate); des2src(pursetransdtl.transtime,transdtl.transtime); strcpy(pursetransdtl.accdate,transdtl.accdate); strcpy(pursetransdtl.acctime,transdtl.acctime); pursetransdtl.termid=transdtl.termid; pursetransdtl.termseqno=transdtl.termseqno; pursetransdtl.transcode=transdtl.transcode; pursetransdtl.cardno=transdtl.cardno; pursetransdtl.pursetype=pursetype.pursetype; pursetransdtl.transflag= TF_PAY; pursetransdtl.cardcnt=0; pursetransdtl.cardbefbal=waterbefbal; pursetransdtl.cardaftbal=wateraftbal; pursetransdtl.amount=transdtl.amount; pursetransdtl.custid=transdtl.custid; des2src(pursetransdtl.custname,transdtl.custname); des2src(pursetransdtl.opercode,transdtl.opercode); pursetransdtl.status[0]=transdtl.status[0]; des2src(pursetransdtl.showcardno,trans.showcardno); des2src(pursetransdtl.stuempno,transdtl.stuempno); ret=DB_t_pursetransdtl_add(&pursetransdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_PURSETRANSDTL_E; else return E_DB_PURSETRANSDTL_I; } outPack->lvol0=tCard.cardno; outPack->lvol9=D2I(pAccTrans->trans.cardaftbal*100); outPack->lvol8=D2I(pAccTrans->trans.totaltransamt*100); //outPack->lsafe_level=D2I(wateraftbal*100); outPack->lsafe_level2=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); return 0; }
static int doReverse(ST_PACK *rPack,char* oldaccdate,int oldtermid,int oldtermseqno) { //查找操作员流水 int ret=0; T_t_card tCard; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; trans.cardno=rPack->lvol0; T_t_cardtransdtl cardtransdtl; memset(&cardtransdtl,0,sizeof(cardtransdtl)); ret=DB_t_cardtransdtl_read_lock_by_c0_and_accdate_and_termid_and_termseqno(oldaccdate,oldtermid,oldtermseqno,&cardtransdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_CARDTRANSDTL_N; else return E_DB_CARDTRANSDTL_R; } if(trans.cardno!=cardtransdtl.cardno) { DB_t_cardtransdtl_free_lock_by_c0(); return E_CARDNO_DIFFER; } if(cardtransdtl.transcode!=TC_POSDRAW&& cardtransdtl.transcode!=TC_POSDRAW) { DB_t_cardtransdtl_free_lock_by_c0(); return E_TRANSCODE_NOT_DRAW; } if(cardtransdtl.revflag[0]=='1') { DB_t_cardtransdtl_free_lock_by_c0(); memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(cardtransdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardtransdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } pAccTrans->remark="该交易已冲正"; //strcpy(cardphyid,tCard.cardphyid); return 0; } cardtransdtl.revflag[0]='1'; ret=DB_t_cardtransdtl_update_lock_by_c0(&cardtransdtl); if(ret) { return E_DB_CARDTRANSDTL_U; } memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(cardtransdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardtransdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return E_CARD_LOGOUT; } if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]=='1') { DB_t_card_free_lock_by_cur(); return E_CARDNO_FREEZE; } if(tCard.cardattr[CARDSTAT_TYPE_LOST]=='1') { DB_t_card_free_lock_by_cur(); return E_CARDNO_LOST; } // strcpy(cardphyid,tCard.cardphyid); getfmtsysdatetime(tCard.lastsaved); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_U; } T_t_cardtransdtl cardtransdtlrev; memset(&cardtransdtlrev,0,sizeof(cardtransdtlrev)); des2src(cardtransdtlrev.transdate,trans.transdate); des2src(cardtransdtlrev.transtime,trans.transtime); des2src(cardtransdtlrev.accdate,trans.accdate); strcpy(cardtransdtlrev.acctime,trans.acctime); cardtransdtlrev.termid=trans.termid; cardtransdtlrev.termseqno=trans.termseqno; cardtransdtlrev.custid=cardtransdtl.custid; cardtransdtlrev.transcode=trans.transcode; cardtransdtlrev.paytype=0; cardtransdtlrev.cardno=cardtransdtl.cardno; cardtransdtlrev.purseno=cardtransdtl.purseno; cardtransdtlrev.cardcnt=rPack->lvol6+1; cardtransdtlrev.cardbefbal=rPack->lvol7/100.0; cardtransdtlrev.amount=cardtransdtl.amount; cardtransdtlrev.cardaftbal=cardtransdtlrev.cardbefbal+(cardtransdtl.cardaftbal-cardtransdtl.cardbefbal); des2src(cardtransdtlrev.opercode,trans.opercode); cardtransdtlrev.status[0]=DTLSTATUS_SUCCESS; cardtransdtlrev.errcode=0; ret=DB_t_cardtransdtl_add(&cardtransdtlrev); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDTRANSDTL_E; else return E_DB_CARDTRANSDTL_I; } ret=pAccTrans->doReverseTrans(oldaccdate,oldtermid,oldtermseqno); if(ret) return ret; trans.cardaftbal=cardtransdtlrev.cardaftbal; return 0; }
static int NormalTrans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL2,F_LVOL8,F_LVOL10,F_LVOL11,F_LVOL12,F_SDATE0,F_SPHONE3,F_SADDR,F_LSAFE_LEVEL2, F_SDATE3,F_STIME3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); if(rPack->lvol0<1) { ERRTIP("请输入付款方卡号"); return E_COMMON_ERR; } if(rPack->lvol2<1) { ERRTIP("请输入收款方卡号"); return E_COMMON_ERR; } 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 E_DB_REFNO_N; else return E_DB_REFNO_R; } if(strncmp(tRefno.mac,rPack->saddr,8)!=0) { ERRTIP("交易参考号MAC校验错误"); return E_COMMON_ERR; } if(RS_FAIL==tRefno.status) { ERRTIP("交易已失败"); return E_COMMON_ERR; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); ret=DB_t_transdtl_read_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_TRANSDTL; else return E_DB_TRANSDTL_R; } if(RS_SUCC==tRefno.status) { outPack->lvol0=transdtl.cardno; outPack->lvol1=D4U5(transdtl.amount*100,0); outPack->lvol8=D4U5(transdtl.cardaftbal*100,0); outPack->lsafe_level2=rPack->lsafe_level+D4U5(transdtl.amount*100,0); des2src(outPack->sdate3,transdtl.transdate); des2src(outPack->stime3,transdtl.transtime); des2src(outPack->semp,transdtl.opercode); outPack->lwithdraw_flag=transdtl.termid; outPack->lserial1=transdtl.termseqno; des2src(outPack->sphone3,transdtl.refno); PutRow(handle,outPack,pRetCode,szMsg); return 0; } int cardno=atoi(transdtl.voucherno); if(rPack->lvol2!=cardno) { ERRTIP("收款方卡号错误"); return E_COMMON_ERR; } if(transdtl.status[0]!=DTLSTATUS_INIT) { ERRTIP("交易流水表状态错误"); return E_COMMON_ERR; } des2src(trans.opercode,transdtl.opercode); trans.termid=transdtl.termid; trans.termseqno=transdtl.termseqno; trans.cardflag=0; trans.usecardflag=0; trans.transcode=transdtl.transcode; trans.cardno=transdtl.cardno; trans.purseno=transdtl.purseno; trans.paycnt=transdtl.cardcnt; trans.cardbefbal=transdtl.cardbefbal; trans.cardaftbal=transdtl.cardaftbal; trans.inputamt= transdtl.amount; trans.unusedamt = trans.inputamt; T_t_card tOutCard; memset(&tOutCard,0,sizeof(tOutCard)); T_t_card tInCard; memset(&tInCard,0,sizeof(tInCard)); ret=DB_t_card_read_by_cardno(trans.cardno,&tOutCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } ret=DB_t_card_read_by_cardno(rPack->lvol2,&tInCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,rPack->lvol2); else return E_DB_CARD_R; } trans.feetype=tOutCard.feetype; trans.custid=tOutCard.custid; // trans.cardaftbal=trans.cardbefbal; strcpy(pAccTrans->trans.draccno,tOutCard.accno); strcpy(pAccTrans->trans.craccno,tInCard.accno); ret=pAccTrans->doTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; transdtl.status[0]=DTLSTATUS_SUCCESS; ret=DB_t_transdtl_update_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_U; } tRefno.status=RS_SUCC; des2src(tRefno.lastsaved,trans.sysdatetime); ret=DB_t_refno_update_by_refno(tRefno.refno,&tRefno); if(ret) { if(DB_NOTFOUND==ret) return E_DB_REFNO_N; else return E_DB_REFNO_U; } ///////////////////////////////////////////////////////////////////////////////////////////////// //记录转入卡的卡交易流水 pAccTrans->Reset(); trans.termid=transdtl.termid; trans.dpscnt=rPack->lvol3+1; trans.cardbefbal=rPack->lsafe_level/100.0; trans.cardaftbal=(rPack->lvol1+rPack->lsafe_level)/100.0; trans.cardno=atoi(transdtl.voucherno); if(trans.cardno!=rPack->lvol2) { ERRTIP("收款卡号不符"); return E_COMMON_ERR; } ret=GetCustBaseInfoByCustID(tInCard.custid,trans.custname,trans.stuempno,trans.remark); if(ret) return ret; ret=pAccTrans->GetTermSeqno(); if(ret) { return ret; } T_t_transdtl transdtl2; memset(&transdtl2,0,sizeof(transdtl2)); des2src(transdtl2.refno,transdtl.refno); des2src(transdtl2.transdate,transdtl.transdate); des2src(transdtl2.transtime,transdtl.transtime); strcpy(transdtl2.accdate,transdtl.accdate); strcpy(transdtl2.acctime,transdtl.acctime); transdtl2.termid=trans.termid; transdtl2.termseqno=trans.termseqno; transdtl2.transcode=transdtl.transcode; sprintf(transdtl2.voucherno,"%d",transdtl.cardno); transdtl2.cardno=trans.cardno; transdtl2.purseno=trans.purseno; transdtl2.transflag =TF_DPS; transdtl2.cardcnt=trans.dpscnt; transdtl2.cardbefbal=trans.cardbefbal; transdtl2.cardaftbal=trans.cardaftbal; transdtl2.amount= transdtl.amount; transdtl2.managefee=0; transdtl2.custid=tInCard.custid; des2src(transdtl2.custname,trans.custname); des2src(transdtl2.opercode,trans.opercode); transdtl2.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl2.showcardno,tInCard.showcardno); des2src(transdtl2.stuempno,trans.stuempno); transdtl2.exttype=EXTTYPE_OPPSNO; des2src(transdtl2.extdata,transdtl.stuempno); sprintf(transdtl2.remark,"由(%s)转出",transdtl.custname); ret=DB_t_transdtl_add(&transdtl2); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } T_t_account OutAccount; memset(&OutAccount,0,sizeof(OutAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(tOutCard.accno,&OutAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tOutCard.accno); else return E_DB_ACCOUNT_R; } OutAccount.paycnt=transdtl.cardcnt; OutAccount.cardbal=transdtl.cardaftbal; OutAccount.lastpaycnt=transdtl.cardcnt-1; OutAccount.lastcardbal=transdtl.cardbefbal; strcpy(OutAccount.lastaccdate,transdtl.transdate); ret=DB_t_account_update_lock_by_c0(&OutAccount); if(ret) { writelog(LOG_ERR,"更新付款方账户表错误ret=%d",ret); return E_DB_ACCOUNT_U; } T_t_account InAccount; memset(&InAccount,0,sizeof(InAccount)); ret=DB_t_account_read_lock_by_c0_and_accno(tInCard.accno,&InAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tInCard.accno); else return E_DB_ACCOUNT_R; } InAccount.dpscnt=transdtl2.cardcnt; InAccount.cardbal=transdtl2.cardaftbal; InAccount.lastdpscnt=transdtl2.cardcnt-1; InAccount.lastcardbal=transdtl2.cardbefbal; strcpy(InAccount.lastaccdate,transdtl2.transdate); ret=DB_t_account_update_lock_by_c0(&InAccount); if(ret) { writelog(LOG_ERR,"更新收款方账户表错误ret=%d",ret); return E_DB_ACCOUNT_U; } outPack->lvol0=transdtl.cardno; outPack->lvol2=transdtl2.cardno; outPack->lvol1=D4U5(transdtl.amount*100,0); outPack->lvol8=D4U5(transdtl.cardaftbal*100,0); outPack->lsafe_level2=D4U5(transdtl2.cardaftbal*100,0); des2src(outPack->sdate3,trans.accdate); des2src(outPack->stime3,trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=transdtl.termid; outPack->lserial1=transdtl.termseqno; des2src(outPack->sphone3,transdtl.refno); des2src(outPack->vsmess,trans.remark); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F240003(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; #if 0 T_t_tif_tradeserial tradeserial; T_t_card card; int iSeqno=0; memset(&tradeserial,0,sizeof(T_t_tif_tradeserial)); //清空流水结构体 memset(&card,0,sizeof card); ret=getNewUniqNo(KEYTYPE_TRADESERIAL, &iSeqno); //流水号 if(ret) { writelog(LOG_ERR,"Create serial_no error,error code=[%d]",ret); *pRetCode=E_TRANS_UNKNOW_ERROR; goto L_RETU; } ret=DB_t_card_read_by_cardno(atoi(rPack->sserial0),&card); if(ret) { *pRetCode=E_TRANS_SCHACC_NOEXIT; writelog(LOG_ERR,"Create serial_no error,error code=[%d]",ret); goto L_RETU; } tradeserial.cardno=atoi(rPack->sserial0); tradeserial.custid=card.custid; tradeserial.purseno=0; tradeserial.serial_no=iSeqno; tradeserial.serial_type=TXCODE_BANK_DETRANS; //交易代码 tradeserial.serial_state=SERISTAT_NONEEDDEBT; //流水状态 ret=get_datetime_from_db(tradeserial.operate_date,tradeserial.operate_time); if(ret) { writelog(LOG_ERR,"get_datetime_from_db error,error code=[%d]",ret); des2src(tradeserial.operate_date,getsysdate(NULL)); //交易日期 des2src(tradeserial.operate_time,getsystime(NULL)); //交易时间 } des2src(tradeserial.collect_date,tradeserial.operate_date);//采集日期 des2src(tradeserial.collect_time,tradeserial.operate_time);//采集时间 tradeserial.maindeviceid=GetTransferSystemId(); //子系统号码 tradeserial.deviceid=atoi(rPack->sorder2); //终端ID tradeserial.trade_fee=rPack->lvol5/100.0; //转帐金额 tradeserial.cardbefbal=rPack->lvol6/100.0; //入卡金额 tradeserial.cardaftbal=tradeserial.cardbefbal; //出卡金额 des2src(tradeserial.b_act_id,rPack->scust_auth); //银行卡号 tradeserial.sysid=rPack->lvol2; //外部系统标识,此处为配置文件中读取参数 tradeserial.condition_id=SELF_TRANS; //自动/自助转帐标识 des2src(tradeserial.opercode,OPER_SYSTEM_KEY); //操作员代码 tradeserial.reviseserial_no=rPack->lvol0; //原始流水号 tradeserial.trade_count=rPack->lvol1+1; //交易次数 tradeserial.tmark=0; ret=DB_t_tif_tradeserial_add(&tradeserial); if(ret) { writelog(LOG_ERR,"Insert t_tif_tradeserial table error,error code=[%d]",ret); *pRetCode=E_TRANS_UNKNOW_ERROR; goto L_RETU; } #endif return 0; }
int F847107(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]=""; int cardno=0; char sMsg[256]=""; char cardphyid[41]=""; T_t_tif_tradeserial tradeserial; T_t_card tCard; T_t_tif_savdtl tSavdtl; T_t_customer tCustomer; T_t_spefee tSpeFee; T_t_aif_account tAccount; //帐户表 InAcc IA; double dSerialNo = 0; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); *pRetCode=0; memset(&tCard,0,sizeof(tCard)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&IA,0,sizeof(IA)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tAccount,0,sizeof(tAccount)); memset(&tradeserial,0,sizeof(tradeserial)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_VSMESS,0); cardno=rPack->lvol0; des2src(cardphyid, rPack->sbank_acc); //物理卡号 if(amtcmp(rPack->damt0,0)<=0) { *pRetCode=E_INPUT_AMT; goto L_RETU; } if(amtcmp(rPack->damt1,0)<0) { *pRetCode=E_INPUT_CARD_BALA; goto L_RETU; } if(rPack->lvol10<1) { *pRetCode=E_INPUT_CARD_TXCNT; goto L_RETU; } if(amtcmp(rPack->damt1,rPack->damt0)<0) { writelog(LOG_ERR,"tCard balance[%lf] amount[%lf]",rPack->damt1,rPack->damt0); *pRetCode= E_BALANCE_SHORTAGE; goto L_RETU; } getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *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(strncmp(tCard.cardattr,CARDSTAT_REG,4)!=0) { if('2'==tCard.cardattr[CARDSTAT_TYPE_REG]) *pRetCode = E_CARD_CLOSE; else if('3'==tCard.cardattr[CARDSTAT_TYPE_REG]) *pRetCode = E_CARD_CHANGE; else if(tCard.cardattr[CARDSTAT_TYPE_LOST]==STATE_TRUE) *pRetCode=E_CARD_LOST; else if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]==STATE_TRUE) *pRetCode=E_CARD_FREEZE; else if(tCard.cardattr[CARDSTAT_TYPE_WFAIL]==STATE_TRUE) *pRetCode=E_CARDNO_WFAIL; goto L_RETU; } trim(cardphyid); trim(tCard.cardphyid); if(strcmp(tCard.cardphyid,cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,cardphyid); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } tradeserial.trade_fee = rPack->damt0; //支取金额 ret=DB_t_aif_account_read_by_cardno_and_purseno(cardno,PURSE_NO_ONE,&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_read_by_cardno_and_purseno ret[%d]cardno[%d]purseno[%d]",ret,cardno); if(DB_NOTFOUND==ret) *pRetCode= E_ACTNO_NOT_EXIST; else *pRetCode= E_DB_ACCOUNT_R; goto L_RETU; } if(amtcmp(tradeserial.trade_fee,tAccount.cur_freebala)>0) { writelog(LOG_ERR,"tradeserial.trade_fee[%lf]tAccount.cur_freebala[%lf]",tradeserial.trade_fee,tAccount.cur_freebala); *pRetCode= E_BALANCE_SHORTAGE; goto L_RETU; } //查询支票经费本有无充值记录 ret=ChkSavdtl(cardno,&tSavdtl); if(ret) { writelog(LOG_ERR,"ChkSavdtl ret[%d]",ret); *pRetCode=ret; goto L_RETU; } IA.dArrInAmt[0]=tradeserial.trade_fee; switch(tSavdtl.billtype) { case TYPE_CASH: //现金 IA.iArrInFeeSwitch[1]=1; break; case TYPE_BILL: //支票 IA.iArrInFeeSwitch[2]=1; break; case TYPE_FUNDBOOK: //经费本 IA.iArrInFeeSwitch[3]=1; break; default: writelog(LOG_ERR,"type[%d]",tSavdtl.billtype); IA.iArrInFeeSwitch[1]=1; break; } ret=DB_t_customer_read_lock_by_cur_and_custid(tCard.custid, &tCustomer); if(ret) { writelog(LOG_ERR,"custid[%d]",tCard.custid); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(tCustomer.feetype<1) { ret=DB_t_spefee_read_by_deptcode_and_custtype(tCustomer.deptcode, tCustomer.custtype,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.feetype=tCustomer.custtype; } else { DB_t_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.feetype=tSpeFee.feetype; } //更新客户表的收费类别字段 ret=DB_t_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_customer_free_lock_cur(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo); //获得流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR," ERRCODE = [%d]",ret); goto L_RETU; } tradeserial.serial_no = D2I(dSerialNo); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type = TXCODE_DRAW_DEPOSIT_LOG; //交易代码 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindeviceid = rPack->lvol6; //上传工作站标 tradeserial.deviceid = rPack->lvol7; //采集设备标识 tradeserial.cardno = rPack->lvol0; //卡号 tradeserial.purseno = rPack->lvol1; //钱包号 tradeserial.custid = rPack->lvol2; //客户标识 tradeserial.in_balance=rPack->damt1; //入卡值 tradeserial.trade_count=rPack->lvol10+1; //交易次数 des2src(tradeserial.opercode , rPack->scust_limit); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 IA.iCardNo=tCard.cardno; IA.iFeeType=tCustomer.feetype; strcpy(IA.sArrInActno[0],tAccount.account_id); IA.dArrInAmt[0]=tradeserial.trade_fee; //账号 IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[5]=rPack->lvol5; IA.iArrInFeeSwitch[6]=rPack->lvol6; IA.iArrInFeeSwitch[7]=rPack->lvol7; IA.iArrInFeeSwitch[8]=rPack->lvol8; IA.iArrInFeeSwitch[9]=rPack->lvol9; IA.iArrInFeeSwitch[10]=rPack->lvol10; T_t_cardbitmap tCardBitmap; memset(&tCardBitmap,0,sizeof(tCardBitmap)); ret=DB_t_cardbitmap_read_lock_by_cur_and_cardno(cardno,&tCardBitmap); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_DB_CARD_N; else *pRetCode= E_DB_CARD_R; goto L_RETU; } if(tradeserial.trade_count-tCardBitmap.base_no%2000>2000) { memcpy(tCardBitmap.bitmap,tCardBitmap.bitmap+1000,1000); memset(tCardBitmap.bitmap+1000,'0',1000); tCardBitmap.base_no+=1000; } tCardBitmap.bitmap[tradeserial.trade_count-tCardBitmap.base_no-1]='1'; ret=DB_t_cardbitmap_update_lock_by_cur(&tCardBitmap); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_DB_CARD_N; else *pRetCode= E_DB_CARD_U; goto L_RETU; } DB_t_cardbitmap_free_lock_cur(); // 调用入账子模块 ret=process(&IA,&tradeserial); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode=ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_TOLL_DEPOSIT_BILL: case TXTYPE_TOLL_DEPOSIT_FUNDBOOK: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tradeserial.depositfee=IA.dArrOutAmt[i]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_PRE_TOLL_BOARD_BILL: case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: case TXTYPE_RETURN_BOARD_BILL: case TXTYPE_RETURN_BOARD_FUNDBOOK: tradeserial.managefee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: case TXTYPE_TOLL_CHARGE_BILL: case TXTYPE_TOLL_CHARGE_FUNDBOOK: tradeserial.in_fee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CARDCOST: case TXTYPE_TOLL_CARDCOST_BILL: case TXTYPE_TOLL_CARDCOST_FUNDBOOK: tradeserial.cost_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); } } sprintf(sMsg,"支取前卡余额:%.2lf元 卡当前余额:%.2lf元",tradeserial.in_balance,tradeserial.out_balance); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); // 插入卡操作流水表 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; } if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } out_pack->damt2=tradeserial.out_balance; //出卡值 out_pack->lserial1=tradeserial.serial_no; //流水号 PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F240001(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); pAccTrans->trans.transcode=TC_BANKTRANS; TRANS& trans=pAccTrans->trans; trans.termid=atoi(rPack->sorder2); int i=0; char sMsg[255]=""; char sDebugMsg[255]=""; T_t_account tAccount; //帐户表 T_t_transdtl transdtl; //卡操作流水表 T_t_card card; memset(&tAccount,0,sizeof(tAccount)); memset(&transdtl,0,sizeof(transdtl)); memset(&card,0,sizeof(card)); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_DAMT0,F_DAMT1,F_DAMT2,F_LVOL1,F_LVOL2,F_SDATE0,0); //判断是否处于日终结算状态 /* ret=GetSysParaVal(GLOBE_FLAG_BALANCE,buffer); if(ret) { writelog(LOG_ERR,"GetSysParaVal error,errcode=[%d]",ret); return E_TRANS_UNKNOW_ERROR; } else if(strncmp(buffer,"0",1)!=0) { writelog(LOG_ERR,"System is balance now!"); return E_TRANS_BANK_SERVICE_NOEXIT; } */ trans.cardno=atoi(rPack->sserial0); ret=DB_t_card_read_by_cardno(trans.cardno,&card); if(ret) { writelog(LOG_ERR,"Create serial_no error,error code=[%d]",ret); return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if(card.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==card.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==card.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==card.badflag[0]) { return ERRINFO(E_CARD_BADRECORD,trans.cardno); } if('1'==card.lockflag[0]) { return ERRINFO(E_CARDNO_LOCKED,trans.cardno); } trans.inputamt = rPack->lvol5/100.0; trans.unusedamt=trans.inputamt; //开始填充流水数据 //流水号 //模式修改为,测试入帐产生流水号,记录流水结构,正式入账只修改该 //流水的出卡值以及流水状态 pAccTrans->trans.termseqno=rPack->lvol7; ret=DB_t_transdtl_read_lock_by_c0_and_accdate_and_termid_and_termseqno(pAccTrans->trans.accdate,trans.termid,pAccTrans->trans.termseqno, &transdtl); if(ret) { writelog(LOG_ERR,"DB_t_tif_transdtl_read_lock_by_cur_and_serial_no error,error code=[%d],serial_no=[%d]",ret,rPack->lvol7); if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_R; } ret=pAccTrans->InitTrans(); if(ret) { DB_t_transdtl_free_lock_by_c0(); return ret; } //判断转帐金额是否超出钱包最大限额 ret=DB_t_account_read_by_accno(card.accno,&tAccount); if(ret) { DB_t_transdtl_free_lock_by_c0(); writelog(LOG_ERR,"DB_t_account_read_by_accno ret[%d]cardaccno[%s]",ret,card.accno); if(DB_NOTFOUND==ret) { return ERRINFO(E_NOTEXIST_CARDACCNO,card.accno); } else { return E_DB_ACCOUNT_R; } } // if(amtcmp(tAccount.availbal+trans.inputamt,tAccount.cardmaxbal)>0) // { // DB_t_transdtl_free_lock_by_c0(); // return E_TRANS_TRANSMONEY_OUTRANGE; // } des2src(trans.cardaccno,tAccount.accno); //贷方帐户,持卡人账户 des2src(trans.draccno,rPack->sstation0); //借方帐号,由前置机上传 trans.cardflag=1; trans.usecardflag=1; trans.feetype=card.feetype; trans.cardtype=card.cardtype; trans.cardbefbal=transdtl.cardbefbal; trans.dpscnt=transdtl.cardcnt; trans.cardaftbal=trans.cardbefbal; ret=pAccTrans->doFeeTrans(); if(ret) { DB_t_transdtl_free_lock_by_c0(); return ret; } ret=pAccTrans->doMainTrans(); if(ret) { DB_t_transdtl_free_lock_by_c0(); return ret; } ret=pAccTrans->doTransEnd(); if(ret) { DB_t_transdtl_free_lock_by_c0(); return ret; } //结束填充流水数据 transdtl.cardaftbal=trans.cardaftbal; transdtl.status[0]=DTLSTATUS_SUCCESS; ret=DB_t_transdtl_update_lock_by_c0(&transdtl); if(ret) { writelog(LOG_ERR,"DB_t_transdtl_update_lock_by_c0 error,error code=[%d]",ret); return E_TRANS_UNKNOW_ERROR; } writelog(LOG_INFO,"转账金额%.2lf 转账前卡余额%.2lf 转帐后卡余额%.2lf ",transdtl.amount,trans.cardbefbal,trans.cardaftbal); out_pack->damt0=transdtl.cardaftbal; out_pack->damt1=transdtl.amount; out_pack->damt2=transdtl.managefee; out_pack->lvol2=D4U5(transdtl.cardaftbal*100,0); out_pack->lvol1=transdtl.termseqno; des2src(out_pack->sdate0,pAccTrans->trans.accdate); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F847301(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { T_t_tif_tradeserial tSerial, tPacketSerial; T_t_aif_account tAccount; T_t_card tCard; T_t_customer tCustomer; T_t_tif_writefailed tWriteFailed; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); int ret = 0; int TxTypeCount = 0; int hi_cardid = 0; //交易卡号 char buf[100 + 1] = ""; char sysdate[11] = ""; char systime[7] = ""; char logicdate[11] = ""; char sMsg[128] = ""; // char temp_account_id[16 + 1] = "2081"; //个人临时帐户 double dUniqNo = 0; //最大流水号 double cardbefbal = 0; double small_packet_balance = 0; //小钱包中的余额 double max_balance = 0; //小钱包余额上限 double transfer_price = 0; //转入金额 memset(&tAccount, 0, sizeof tAccount); memset(&tCard, 0, sizeof tCard); memset(&tCustomer, 0, sizeof tCustomer); memset(&IA, 0, sizeof IA); memset(&tPacketSerial, 0, sizeof tPacketSerial); memset(&tWriteFailed, 0, sizeof tWriteFailed); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack, 0, 1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_DAMT0,F_DAMT2,F_VSMESS,F_LVOL9,F_LVOL5,0); hi_cardid = rPack->lvol0; if (hi_cardid <= 0) { *pRetCode = E_INPUT_CARDNO; goto L_RETU; } //判断小钱包中的余额 small_packet_balance = rPack->damt3; //读取小钱包余额上限 ret = GetSysParaVal(GLB_PACKET_LIMITS,buf); if (ret) { *pRetCode = ret; goto L_RETU; } max_balance = atof(buf); if (amtcmp(max_balance,0) <= 0) { *pRetCode = E_GLOBAL_PARAM_ERROR; goto L_RETU; } //判断充值到小钱包的金额 transfer_price = rPack->damt4; //钱包转入金额 writelog(LOG_DEBUG,"tranfser_price=[%d]",transfer_price); writelog(LOG_DEBUG,"small_packet_balance=[%d]",small_packet_balance); if (amtcmp(transfer_price, 0) <= 0 || amtcmp(small_packet_balance, 0) < 0) { *pRetCode = E_INPUT_DATA_INVAILD; goto L_RETU; } if (amtcmp(small_packet_balance + transfer_price,max_balance) > 0) { sprintf(sMsg, "钱包余额上限是%f吨", max_balance); *pRetCode = E_PACKET_LIMIT_EXCEED; goto L_RETU; } cardbefbal = rPack->damt1; if (amtcmp(cardbefbal,0.0) < 0) { *pRetCode = E_BALANCE_SHORTAGE; goto L_RETU; } ret = DB_t_card_read_by_cardno(hi_cardid,&tCard); if(ret) { if(DB_NOTFOUND == ret) { *pRetCode = E_DB_CARD_N; } else { *pRetCode = E_DB_CARD_R; } goto L_RETU; } //判断卡密码是否正确 /* if (CheckUserPswd(rPack->semp_pwd,tCard.password)) { writelog(LOG_ERR,"Card password error"); *pRetCode = E_TRANS_SCHCARD_PWDERR; goto L_RETU; } */ if (strncmp(tCard.cardstatus, TYPE_YES, 1) != 0) { writelog(LOG_ERR,"card_state=[%s]",tCard.cardstatus); *pRetCode = E_TRANS_SCHACC_DESTORY; goto L_RETU; } if (STATE_TRUE == tCard.cardstatus[CARDSTAT_TYPE_LOST]) { writelog(LOG_ERR,"card_state=[%s]",tCard.cardstatus); *pRetCode = E_TRANS_SCHCARD_LOSTING; goto L_RETU; } if (STATE_TRUE == tCard.cardstatus[CARDSTAT_TYPE_FREEZE]) { writelog(LOG_ERR,"card_state=[%s]",tCard.cardstatus); *pRetCode = E_TRANS_SCHCARD_FREEZE; goto L_RETU; } if (STATE_TRUE == tCard.cardstatus[CARDSTAT_TYPE_WFAIL]) { *pRetCode = E_CARDNO_WFAIL; goto L_RETU; } ret = DB_t_customer_read_by_custid(tCard.custid,&tCustomer); if (ret) { if (DB_NOTFOUND == ret) { *pRetCode = E_DB_CUSTOMER_N; } else { *pRetCode = E_DB_CUSTOMER_R; } goto L_RETU; } //读取个人帐户 ret = DB_t_aif_account_read_by_cardno_and_purseno(tCard.cardno,PURSE_NO_ONE,&tAccount); if (ret) { if (DB_NOTFOUND == ret) { *pRetCode = E_DB_ACCOUNT_N; } else { *pRetCode = E_DB_ACCOUNT_R; } goto L_RETU; } //个人临时帐户填死掉了, 不需要查询 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqNo); // 获得最大流水号 if (ret) { writelog(LOG_ERR,"ret[%d]",ret); *pRetCode = ret; goto L_RETU; } getsysdate(sysdate); getsystime(systime); GetLogicDate(logicdate); memset(&tSerial, 0, sizeof tSerial); tSerial.serial_no = D2I(dUniqNo); tSerial.other_seri_no = 0; tSerial.serial_state = SERISTAT_DEBT; //流水状态 tSerial.serial_type = TXCODE_CONSUME; //交易类型 des2src(tSerial.operate_date,sysdate); //发生日期 des2src(tSerial.operate_time,systime); //发生时间 des2src(tSerial.collect_date,sysdate); //采集日期 des2src(tSerial.collect_time,systime); //采集时间 des2src(tSerial.enteract_date,logicdate); //处理日期 des2src(tSerial.enteract_time,systime); //处理时间 // tSerial.maindeviceid = rPack->lvol3; //上传工作站标识 tSerial.deviceid = 0; //采集设备标识 tSerial.cardno = hi_cardid; //交易卡号 des2src(tSerial.showid,tCard.showid); //显示卡号 tSerial.purseno = PURSE_NO_ONE; //钱包号 tSerial.custid = tCard.custid; //客户号 des2src(tSerial.opercode, rPack->scust_no); //操作员代码 tSerial.sysid = 0; tSerial.trade_count = rPack->lvol4 + 1; //卡交易次数 tSerial.trade_fee = transfer_price; //转钱金额 tSerial.cardbefbal = cardbefbal; //入卡值 writelog(LOG_DEBUG,"水控转账入卡值[%.2lf]",cardbefbal); des2src(IA.sArrInActno[0],tAccount.account_id); //个人帐户 // des2src(IA.sArrInActno[1],temp_account_id); //个人临时帐户 IA.dArrInAmt[0] = tSerial.trade_fee; //交易金额 IA.iCardNo = tCard.cardno; //交易卡号 IA.iFeeType = tCustomer.feetype; //客户收费类型 //调用入帐子模块 ret = process(&IA,&tSerial); if (ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode = ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(TxTypeCount = 1; TxTypeCount <= IA.iOutTxTypeCnt; TxTypeCount++) { switch(IA.iArrOutTxType[TxTypeCount]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_TOLL_DEPOSIT_BILL: case TXTYPE_TOLL_DEPOSIT_FUNDBOOK: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tSerial.depositfee = IA.dArrOutAmt[TxTypeCount]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_PRE_TOLL_BOARD_BILL: case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: case TXTYPE_RETURN_BOARD_BILL: case TXTYPE_RETURN_BOARD_FUNDBOOK: tSerial.managefee = IA.dArrOutAmt[TxTypeCount]; break; case TXTYPE_TOLL_CHARGE: case TXTYPE_TOLL_CHARGE_BILL: case TXTYPE_TOLL_CHARGE_FUNDBOOK: tSerial.in_fee = IA.dArrOutAmt[TxTypeCount]; break; case TXTYPE_TOLL_CARDCOST: case TXTYPE_TOLL_CARDCOST_BILL: case TXTYPE_TOLL_CARDCOST_FUNDBOOK: tSerial.cost_fee = IA.dArrOutAmt[TxTypeCount]; break; default: break; } if (amtcmp(IA.dArrOutAmt[TxTypeCount], 0) != 0) { sprintf(sMsg,"%s:%.2lf元 ", IA.sArrOutTxName[TxTypeCount], IA.dArrOutAmt[TxTypeCount]); strcat(out_pack->vsmess, sMsg); } } sprintf(sMsg, "卡当前余额:%.2lf元", tSerial.cardaftbal); strcat(out_pack->vsmess, sMsg); writelog(LOG_DEBUG,out_pack->vsmess); //插入交易流水表 ret = DB_t_tif_tradeserial_add(&tSerial); 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; } //保存充值流水 memcpy(&tPacketSerial, &tSerial, sizeof tPacketSerial); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqNo); //获得最大流水号 if(ret) { writelog(LOG_ERR,"ret [%d]",ret); *pRetCode = ret; goto L_RETU; } tPacketSerial.serial_no = D2I(dUniqNo); tPacketSerial.serial_state = SERISTAT_NONEEDDEBT; tPacketSerial.serial_type = TXCODE_SAVING_SMALL_PACKET; tPacketSerial.purseno = PURSE_NO_TWO; tPacketSerial.trade_count = rPack->lvol5 + 1; des2src(tPacketSerial.opercode, rPack->scust_no); tPacketSerial.cardbefbal = small_packet_balance; tPacketSerial.trade_fee = transfer_price; tPacketSerial.cardaftbal = small_packet_balance + tPacketSerial.trade_fee; ret = DB_t_tif_tradeserial_add(&tPacketSerial); if(ret) { if(DB_REPEAT == ret) { *pRetCode = E_DB_TRADESERIAL_E; } else { *pRetCode = E_DB_TRADESERIAL_I; } goto L_RETU; } out_pack->lvol0 = tSerial.serial_no; out_pack->lvol1 = tPacketSerial.serial_no; out_pack->damt2 = tPacketSerial.cardaftbal; out_pack->damt0 = tSerial.cardaftbal; out_pack->lvol9 = tSerial.trade_count; out_pack->lvol5 = tPacketSerial.trade_count; writelog(LOG_DEBUG,"水控钱包金额[%.2lf], 出卡值[%.2lf]",out_pack->damt2,out_pack->damt0); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
static int do_process(T_t_card *tCard, T_t_tif_writefailed *tWriteFailed, ST_PACK *rPack, T_t_tif_tradeserial *tradeserial) { int ret = 0; int free_lock_flag = 1; //0关闭, 1表示打开 char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; char operate_date[11]=""; // char sSerialno[20]=""; char cardphyid[17]=""; char old_physical_no[17]=""; char deal_flag[1 + 1] = ""; int iSerialno=0; int cardno=0; int serial_type=0; int flag=0; double dSerialno=0; double dAmt=0; int cnt_purse_no = 0; int card_use_cnt=0; int seri_use_cnt=0; double seri_in_bala=0; double seri_out_bala=0; double seri_in_bala_next=0; double seri_out_bala_next=0; int amt_flag=0; char tx_date[11]=""; T_t_tif_tradeserial_his tradeserialhis; T_t_tif_tradeserial old_tradeserial; memset(&old_tradeserial,0,sizeof(old_tradeserial)); memset(&tradeserialhis,0,sizeof(tradeserialhis)); des2src(cardphyid,rPack->sbank_acc); cardno=rPack->lvol0; card_use_cnt=rPack->lvol8; cnt_purse_no = rPack->lvol4; getsysdate(sysdate); getsystime(systime); deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_Y; ret=GetLogicDate(logicdate); //业务日期 if(ret) { free_lock_flag = 0; goto L_RETU_INNER; } //判断卡状态是否为写卡未成功状态 ret=DB_t_card_read_by_cardno(cardno, tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) ret = E_CARDNO_NOT_EXIST; else ret = E_DB_CARD_R; free_lock_flag = 0; goto L_RETU_INNER; } if(STATE_FALSE==tCard->state_id[CARDSTAT_TYPE_WFAIL]) { ret = E_CARDSTATE_NOTWRITEFAIL; free_lock_flag = 0; goto L_RETU_INNER; } ret = DB_t_tif_writefailed_read_lock_by_c1_and_cardno_and_purese_no_and_deal_flag(tCard->cardno,cnt_purse_no,&deal_flag[0],tWriteFailed); if (ret) { if (DB_NOTFOUND == ret) // ret = E_DB_WRITEFAILED_N; ret = E_WRITEFAILED_DEAL_FLAG_N; // 没有查到, 就是已经写过了 else ret = E_DB_WRITEFAILED_R; goto L_RETU_INNER; } // writelog(LOG_ERR,"XXX"); iSerialno = tWriteFailed->serial_no; des2src(operate_date,tWriteFailed->tx_date); writelog(LOG_DEBUG,"Serialno[%d]",iSerialno); writelog(LOG_DEBUG,"operate_date[%s]",operate_date); writelog(LOG_DEBUG,"logictime[%s]",logicdate); if(strncmp(logicdate,operate_date,8)==0) { ret=DB_t_tif_tradeserial_read_by_serial_no(iSerialno,&old_tradeserial); if(ret) { writelog(LOG_ERR,"Serialno[%d]",iSerialno); if(DB_NOTFOUND==ret) ret = E_SERIALNO_NOT_EXIST; else ret = E_DB_TRADESERIAL_R; goto L_RETU_INNER; } if(cardno!=old_tradeserial.cardno) { writelog(LOG_ERR,"input cardno [%d],tradeserial cardno[%d]",cardno,old_tradeserial.cardno); ret = E_CARDNO_SERIAL_NE; goto L_RETU_INNER; } serial_type=old_tradeserial.serial_type; flag=TYPE_CUR; } else { // TODO: 需要在数据库上建立索引 ret=DB_t_tif_tradeserial_his_read_by_operate_date_and_serial_no(operate_date,iSerialno,&tradeserialhis); if(ret) { writelog(LOG_ERR,"operate_date[%s]Serialno[%d]",operate_date,iSerialno); if(DB_NOTFOUND==ret) ret = E_SERIALNO_NOT_EXIST; else ret = E_DB_TRADESERIAL_R; goto L_RETU_INNER; } if(cardno!=tradeserialhis.cardno) { writelog(LOG_ERR,"input cardno [%d],tradeserial cardno[%d]",cardno,tradeserialhis.cardno); ret = E_CARDNO_SERIAL_NE; goto L_RETU_INNER; } serial_type=tradeserialhis.serial_type; flag=TYPE_HIS; } if(TYPE_CUR==flag) { seri_in_bala=old_tradeserial.in_balance; seri_out_bala=old_tradeserial.out_balance; strncpy(tx_date,old_tradeserial.operate_date,sizeof(tx_date)); dAmt=D4U5(old_tradeserial.out_balance-old_tradeserial.in_balance,2); //发生额=出卡值-入卡值 seri_use_cnt=old_tradeserial.trade_count; } else { seri_in_bala=tradeserialhis.in_balance; seri_out_bala=tradeserialhis.out_balance; strncpy(tx_date,tradeserialhis.operate_date,sizeof(tx_date)); dAmt=D4U5(tradeserialhis.out_balance-tradeserialhis.in_balance,2); //发生额=出卡值-入卡值 seri_use_cnt=tradeserialhis.trade_count; } des2src(old_physical_no,tCard->cardphyid); trim(cardphyid); trim(old_physical_no); switch(serial_type) { //发行正式卡 case 847101: //补办正式卡 case 847104: //发行过渡临时卡 case 847116: //发行非记名临时卡 case 847124: case 847125: case 847126: if(strcmp(old_physical_no,cardphyid)!=0) { ret=IsExistCardByPhyCardNo(cardphyid); if(ret) { goto L_RETU_INNER; } //修改卡标志,置为正常状态 ret=DB_t_card_read_lock_by_cur_and_cardno(cardno, tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) ret = E_CARDNO_NOT_EXIST; else ret = E_DB_CARD_R; goto L_RETU_INNER; } ret = InsertToCutUpdList(tCard->cardno,CUTUPD_CH_OLDCARD,tCard->cardphyid); if(ret) { DB_t_card_free_lock_by_cur(); goto L_RETU_INNER; } des2src(tCard->cardphyid,cardphyid); //更换物理卡号 ret=DB_t_card_update_lock_by_cur(tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) ret = E_CARDNO_NOT_EXIST; else ret = E_DB_CARD_U; goto L_RETU_INNER; } DB_t_card_free_lock_by_cur(); ret = InsertToCutUpdList(tCard->cardno,CUTUPD_CH_NEWCARD,tCard->cardphyid); if(ret) { goto L_RETU_INNER; } // 宏定义的判断, 0表示成功, 1表示不需要插入 /* if (0 == insert_chcard_blacklist(serial_type)) { ret = InsertToBlkList(tCard->cardno,CHCARD_BLACKLIST); if (ret) { goto L_RETU_INNER; } } */ // add by 汤成 2005-8-10 // 增加向名单表写入记录 /* switch(serial_type) { //补办正式卡 case 847104: //发行过渡临时卡 case 847116: // 记名临时卡 //case 847124: // VIP 卡 case 847126: ret = InsertToBlkList(tCard.cardno,CHCARD_BLACKLIST); if(ret) { goto L_RETU_INNER; } break; default: break; } */ } tradeserial->in_balance=0; //入卡值 des2src(tWriteFailed->comments, "补写卡成功"); break; //补写水控小钱包, 因小钱包扣款失败而起 //水控小钱包补写归类到847119中,不单独编写 case 847300: des2src(tWriteFailed->comments, "小钱包补写卡成功"); tradeserial->in_balance = rPack->damt1; writelog(LOG_ERR,"小钱包入卡值[%f]",tradeserial->in_balance); break; //补写水控大钱包, 因大钱包扣款失败而起 //水控制大钱包补写归类到847119中, 不单独编写 case 847301: des2src(tWriteFailed->comments, "大钱包补写卡成功"); tradeserial->in_balance = rPack->damt1; break; //银行转帐-Added by hhd at 20051225 //考虑到有可能圈存写卡成功,但是提示失败 //避免重复写卡 case 240001: //判断卡中交易次数是否等于发生错误的流水的交易次数 writelog(LOG_ERR,"card_use_cnt=[%d],seri_use_cnt=[%d]",card_use_cnt,seri_use_cnt); if((card_use_cnt+1)==seri_use_cnt) { //判断上传入卡值是否等于发生错误的流水的入卡值 if(amtcmp(rPack->damt1,seri_in_bala)==0) //入卡值等于入卡值,卡没有写上 tradeserial->in_balance=rPack->damt1; else if(amtcmp(rPack->damt1,seri_out_bala)==0) //入卡值等于出卡值,卡已经写上 { tradeserial->in_balance=rPack->damt1; amt_flag=1; } else { writelog(LOG_ERR,"In_balance abnormity,in_bala=[%f]",rPack->damt1); ret = E_ENTER_ACCOUNT; goto L_RETU_INNER; } } else if((card_use_cnt+1)>seri_use_cnt) { //当写卡不成功时,一般不会更新卡的交易次数, //导致下一次的交易次数还是等于失败流水的次数, //所以去下一条流水的时候,如果取不到,就+1 ret=Get_card_next_serial(tCard->cardno,tx_date,seri_use_cnt,&seri_in_bala_next,&seri_out_bala_next); if(ret) { if(DB_NOTFOUND==ret) { ret=Get_card_next_serial(tCard->cardno,tx_date,seri_use_cnt+1,&seri_in_bala_next,&seri_out_bala_next); if(ret) { writelog(LOG_ERR,"Get_card_next_serial(=) error,errcode=[%d]",ret); writelog(LOG_ERR,"没有找到下一笔流水"); goto L_RETU_INNER; } } else { writelog(LOG_ERR,"Get_card_next_serial(+1) error,errcode=[%d]",ret); goto L_RETU_INNER; } } writelog(LOG_INFO,"seri_in_bala_next=[%f],seri_in_bala=[%f],seri_out_bala=[%f]",seri_in_bala_next,seri_in_bala,seri_out_bala); if(amtcmp(seri_in_bala_next/100,seri_in_bala)==0) tradeserial->in_balance=rPack->damt1; else if(amtcmp(seri_in_bala_next/100,seri_out_bala)==0) { tradeserial->in_balance=rPack->damt1; amt_flag=1; } else { tradeserial->in_balance=rPack->damt1; writelog(LOG_ERR,"In_balance abnormity,in_bala=[%f]",rPack->damt1); ret = E_ENTER_ACCOUNT; goto L_RETU_INNER; } } else { writelog(LOG_ERR,"In_total_cnt abnormity,in_total_cnt=[%d]",card_use_cnt); ret = E_ENTER_ACCOUNT; goto L_RETU_INNER; } default: if(strcmp(old_physical_no,cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",old_physical_no,cardphyid); ret = E_CARD_PHYNO_DIFFER; goto L_RETU_INNER; } tradeserial->in_balance=rPack->damt1; //入卡值 break; } if(TYPE_CUR==flag) dAmt=D4U5(old_tradeserial.out_balance-old_tradeserial.in_balance,2); //发生额=出卡值-入卡值 else dAmt=D4U5(tradeserialhis.out_balance-tradeserialhis.in_balance,2); //发生额=出卡值-入卡值 //说明不需要写卡,则发生额置为0 if(amt_flag==1) { tradeserial->trade_fee=0; //补写卡值 } else { tradeserial->trade_fee=dAmt; //补写卡值 } tradeserial->out_balance=tradeserial->in_balance+dAmt; //出卡值 writelog(LOG_ERR,"小钱包出卡值[%f]",tradeserial->out_balance); writelog(LOG_ERR,"小钱包交易金额[%f]",dAmt); if(tradeserial->out_balance<0||tradeserial->out_balance>999) { writelog(LOG_ERR,"tradeserial.out_balance[%lf]",tradeserial->out_balance); ret = E_TX_SERIAL; goto L_RETU_INNER; } writelog(LOG_DEBUG,"写卡失败日期%s,补写流水号%d,交易码%d,卡号%d,补写金额%.2lf,入卡值%lf,出卡值%lf",operate_date,iSerialno,serial_type,cardno,dAmt,tradeserial->in_balance,tradeserial->out_balance); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialno); //获得流水号 if(ret) { writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU_INNER; } tradeserial->serial_no = D2I(dSerialno); //流水号 tradeserial->other_seri_no = 0; //上传端流水号 tradeserial->serial_type = TXCODE_REWRITE_CARD; //交易代码;备注:发卡+充值 用一个交易码,即847101; 发卡(不充值)另用一个交易码,即新的发卡程序文件名,从而区分发卡充值与发卡不充值的卡操作信息。 tradeserial->serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial->operate_date,sysdate); //发生日期 des2src(tradeserial->operate_time,systime); //发生时间 des2src(tradeserial->collect_date,sysdate); //采集日期 des2src(tradeserial->collect_time,systime); //采集时间 des2src(tradeserial->enteract_date,logicdate); //处理日期 des2src(tradeserial->enteract_time,systime); //处理时间 des2src(tradeserial->opercode , rPack->scust_limit); tradeserial->maindeviceid = rPack->lvol6; //上传工作站标识 tradeserial->deviceid = rPack->lvol7; //采集设备标识 tradeserial->cardno = tCard->cardno; //卡号 des2src(tradeserial->showid,tCard->showid); //显示卡号 tradeserial->purseno = cnt_purse_no; //钱包号,根据具体发现需要补写的钱包号决定 tradeserial->custid = tCard->custid; //客户标识 tradeserial->reviseserial_no = iSerialno; //原写卡失败流水号 tradeserial->trade_count = card_use_cnt + 1; //交易次数为卡交易次数+1 // 插入交易流水表 ret = DB_t_tif_tradeserial_add(tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) ret = E_DB_TRADESERIAL_E; else ret = E_DB_TRADESERIAL_I; goto L_RETU_INNER; } /******************************************************************/ //更新写卡失败表 tWriteFailed->deal_serial_no = tradeserial->serial_no; // writelog(LOG_ERR,"流水号[%d]",tWriteFailed->deal_serial_no); tWriteFailed->deal_bala = tradeserial->trade_fee; des2src(tWriteFailed->deal_date,sysdate); des2src(tWriteFailed->deal_time,systime); // tWriteFailed->deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_N; ret = DB_t_tif_writefailed_update_lock_by_c1(tWriteFailed); if (ret) { if (DB_NOTFOUND == ret) { ret = E_DB_WRITEFAILED_N; } else { ret = E_DB_WRITEFAILED_U; } goto L_RETU_INNER; } DB_t_tif_writefailed_free_lock_by_c1(); /******************************************************************/ return 0; L_RETU_INNER: if (free_lock_flag) DB_t_tif_writefailed_free_lock_by_c1(); return ret; }
//取消换卡 static int DoCardInsteadCancel(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL1,F_LSAFE_LEVEL2,F_LVOL4,F_LVOL5, F_SALL_NAME,F_SPAGER,F_SCERT_NO, F_SEMAIL2,F_SMARKET_CODE,F_SDATE0, F_LVOL0,F_STX_PWD,F_LVOL8,F_LVOL6,F_LSAFE_LEVEL,F_SMARKET_CODE2,F_SHOLDER_AC_NO, F_SORDER0,F_SEMP,F_SDATE3,F_STIME3,F_LVOL11,F_LVOL12, F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_SNAME2,0); T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(trans.cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } if('1'==tCard.badflag[0]) { return ERRINFO(E_CARD_BADRECORD,trans.cardno); } T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } T_t_customer customer; memset(&customer,0,sizeof(customer)); if(tCard.custid) { ret=DB_t_customer_read_by_custid(tCard.custid,&customer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,tCard.custid); else return E_DB_CUSTOMER_R; } } char cardpwd[33]=""; char key[17]=""; strcpy(key,STATIC_SEED_KEY); EncodePwd(key,cardpwd,tCard.cardpwd, 1); T_t_cardinsteaddtl cardinsteaddtl; memset(&cardinsteaddtl,0,sizeof(cardinsteaddtl)); ret=DB_t_cardinsteaddtl_read_lock_by_c0_and_cardno(trans.cardno,&cardinsteaddtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_CARDINSTEADDTL_N; else return E_DB_CARDINSTEADDTL_R; } if(cardinsteaddtl.status[0]==STATUS_NORMAL) { T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); des2src(transdtl.accdate,pAccTrans->trans.accdate); des2src(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.cardcnt=cardinsteaddtl.oldcardcnt; transdtl.cardbefbal=cardinsteaddtl.oldcardbal; transdtl.cardaftbal=transdtl.cardbefbal; transdtl.managefee=trans.totalfeeamt; transdtl.amount=trans.totaltransamt; transdtl.custid=tCard.custid; des2src(transdtl.custname,customer.custname); des2src(transdtl.stuempno,customer.stuempno); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl.showcardno,cardinsteaddtl.oldshowcardno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } outPack->lvol1=tCard.custid; outPack->lsafe_level2=customer.custtype; outPack->lvol5=tCard.feetype; des2src(outPack->sall_name,customer.custname); des2src(outPack->spager,customer.stuempno); des2src(outPack->scert_no,customer.deptcode); des2src(outPack->semail2,customer.idno); des2src(outPack->smarket_code,customer.sex); des2src(outPack->sdate0,tCard.expiredate); sprintf(outPack->sholder_ac_no,"%d",10); //发行方标识 des2src(outPack->smarket_code2,customer.idtype); des2src(outPack->sname2,tCard.cardverno); outPack->lsafe_level=tCard.cardtype; outPack->lvol0=tCard.cardno; outPack->lvol8=(int)(cardinsteaddtl.oldcardbal*100); outPack->lvol4=cardinsteaddtl.oldsubsidyno; outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); outPack->lvol6=cardinsteaddtl.oldcardcnt; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; des2src(outPack->stx_pwd,cardpwd); PutRow(handle,outPack,pRetCode,szMsg); return 0; } if(cardinsteaddtl.revflag[0]=='1') { return E_CARDINSTEAD_CANCEL; } T_t_card cardtmp; memset(&cardtmp,0,sizeof(cardtmp)); ret=DB_t_card_read_by_cardphyid_and_status(trans.cardphyid,"1",&cardtmp); if(ret!=DB_NOTFOUND) { if(DB_SUCCESS==ret) return ERRINFO(E_EXIST_CARDPHYID,trans.cardphyid); else return E_DB_CARD_R; } if(pAccTrans->sysPara.bEnableCardMgr) { ret=DB_t_card_read_by_showcardno_and_status(trans.showcardno,"1",&tCard); if(ret!=DB_NOTFOUND) { if(DB_SUCCESS==ret) return ERRINFO(E_EXIST_SHOWCARDNO,trans.showcardno); else return E_DB_CARD_R; } //回收卡 ret=UseShowCardNoBack(trans.opercode,cardinsteaddtl.showcardno); if(ret) { return ret; } T_t_carddtl carddtl; memset(&carddtl,0,sizeof(carddtl)); des2src(carddtl.accdate,pAccTrans->trans.accdate); des2src(carddtl.acctime,trans.acctime); carddtl.termid=trans.termid; carddtl.termseqno=trans.termseqno; des2src(carddtl.opercode,trans.opercode); carddtl.cardtype=trans.cardtype; carddtl.usetype=CARDUSETYPE_REUSE; carddtl.inoutflag=INOUTFLAG_IN; carddtl.transcnt=1; strcpy(carddtl.summary,"换卡撤销(新卡回收)"); des2src(carddtl.cardphyid,cardinsteaddtl.cardphyid); des2src(carddtl.showcardno,cardinsteaddtl.showcardno); ret=DB_t_carddtl_add(&carddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } //使用原卡 int cardtype=0; ret=UseShowCardNo(trans.opercode,cardinsteaddtl.oldshowcardno,cardtype); if(ret) { return ret; } memset(&carddtl,0,sizeof(carddtl)); des2src(carddtl.accdate,pAccTrans->trans.accdate); des2src(carddtl.acctime,trans.acctime); carddtl.termid=trans.termid; carddtl.termseqno=trans.termseqno; des2src(carddtl.opercode,trans.opercode); carddtl.cardtype=cardinsteaddtl.oldcardtype; carddtl.usetype=CARDUSETYPE_USE; carddtl.inoutflag=INOUTFLAG_OUT; carddtl.transcnt=1; strcpy(carddtl.summary,"换卡撤销(重发原卡)"); des2src(carddtl.cardphyid,cardinsteaddtl.oldcardphyid); des2src(carddtl.showcardno,cardinsteaddtl.oldshowcardno); ret=DB_t_carddtl_add(&carddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } } //更新卡信息 memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(trans.cardno,&tCard); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return E_CARD_LOGOUT; } tCard.cardtype=cardinsteaddtl.oldcardtype; des2src(tCard.cardphyid,cardinsteaddtl.oldcardphyid); des2src(tCard.showcardno,cardinsteaddtl.oldshowcardno); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_U; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.cardcnt=cardinsteaddtl.oldcardcnt; transdtl.cardbefbal=cardinsteaddtl.oldcardbal; transdtl.cardaftbal=transdtl.cardbefbal; transdtl.managefee=trans.totalfeeamt; transdtl.amount=trans.totaltransamt; transdtl.custid=tCard.custid; des2src(transdtl.custname,customer.custname); des2src(transdtl.stuempno,customer.stuempno); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl.showcardno,cardinsteaddtl.oldshowcardno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } outPack->lvol1=tCard.custid; outPack->lsafe_level2=customer.custtype; outPack->lvol5=trans.feetype; des2src(outPack->sall_name,customer.custname); des2src(outPack->spager,customer.stuempno); des2src(outPack->scert_no,customer.deptcode); des2src(outPack->semail2,customer.idno); des2src(outPack->smarket_code,customer.sex); des2src(outPack->sdate0,tCard.expiredate); des2src(outPack->smarket_code2,customer.idtype); sprintf(outPack->sholder_ac_no,"%d",10); //发行方标识 des2src(outPack->sname2,tCard.cardverno); outPack->lsafe_level=tCard.cardtype; outPack->lvol0=tCard.cardno; outPack->lvol4=cardinsteaddtl.oldsubsidyno; outPack->lvol8=(int)(cardinsteaddtl.oldcardbal*100); outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); outPack->lvol6=cardinsteaddtl.oldcardcnt; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,trans.opercode); des2src(outPack->stx_pwd,cardpwd); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F240010(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { char key[32+1]=""; char pwd[32+1]=""; char account_pwd[6+1]=""; int ret=0; T_t_card card; int custid=0; char stuempno[20+1]=""; int cardno=0; T_t_card tCard1; memset(&card,0,sizeof(card)); custid=rPack->lvol8; des2src(stuempno,rPack->scust_auth); cardno=atoi(rPack->sserial0); //writelog(LOG_ERR," stuempno=[%s],custid=[%d],cardno=[%s]",rPack->scust_auth,rPack->lvol8,rPack->sserial0); if(cardno<1) { if(custid<1) { //学号,无卡使用 //挂失时使用,其他不使用 if(strlen(stuempno)<1) { return E_TRANS_SCHACC_NOEXIT; } ret=get_custid_by_stuempno(stuempno,&custid); if(ret) { return ret; } } //客户号 memset(&tCard1,0,sizeof(tCard1)); ret=get_cardno_by_custid(custid, &cardno); if(ret) { return ret; } } ret=DB_t_card_read_by_cardno(cardno,&card); if(ret) { writelog(LOG_ERR,"DB_t_card_read_by_cardno error,errcode=[%d],cardno=[%d]",ret,cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,cardno); else return E_DB_CARD_R; } if(card.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,card.cardno); } strcpy(key,STATIC_SEED_KEY); des2src(account_pwd, rPack->semp_pwd); EncodePwd(key,account_pwd,pwd, 0); //判断卡密码是否正确 if(0!=strncmp(pwd,card.cardpwd,sizeof(pwd))) { writelog(LOG_ERR,"Card password error,clear_pwd[%s],input_pwd=[%s],db_pwd=[%s]",account_pwd,pwd,card.cardpwd); return E_TRANS_SCHCARD_PWDERR; } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,F_LVOL0,0); outPack->lvol0=card.cardno; PutRow(handle,outPack,pRetCode,szMsg); return 0; }
static int doReverse(char* oldaccdate,int oldtermid,int oldtermseqno) { //查找操作员流水 int ret=0; T_t_card tCard; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); ret=DB_t_transdtl_read_lock_by_c0_and_accdate_and_termid_and_termseqno(oldaccdate,oldtermid,oldtermseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_R; } if(trans.cardno!=transdtl.cardno) { DB_t_transdtl_free_lock_by_c0(); return E_CARDNO_DIFFER; } if(transdtl.transcode!=TC_POSDEPOSIT&& transdtl.transcode!=TC_POSDEPOSITREV&& transdtl.transcode!=TC_SHOPPOSDEPOSIT&& transdtl.transcode!=TC_SHOPPOSDEPOSITREV&& transdtl.transcode!=TC_CARDDEPOSIT&& transdtl.transcode!=TC_CARDDEPOSITREV) { DB_t_transdtl_free_lock_by_c0(); return E_TRANSCODE_NOT_SAVING; } if(transdtl.revflag[0]=='1') { DB_t_transdtl_free_lock_by_c0(); memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_by_cardno(transdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",transdtl.cardno); if(DB_NOTFOUND==ret) return E_DB_CARD_N; else return E_DB_CARD_R; } //pAccTrans->remark="该交易已冲正"; //strcpy(cardphyid,tCard.cardphyid); return E_TRANS_REVERSED; } transdtl.revflag[0]='1'; ret=DB_t_transdtl_update_lock_by_c0(&transdtl); if(ret) { return E_DB_TRANSDTL_U; } memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(transdtl.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",transdtl.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,transdtl.cardno); else return E_DB_CARD_R; } if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOGOUT,transdtl.cardno); } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_FREEZE,transdtl.cardno); } if('1'==tCard.lossflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOST,transdtl.cardno); } if('1'==tCard.badflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_BADRECORD,transdtl.cardno); } // strcpy(cardphyid,tCard.cardphyid); getfmtsysdatetime(tCard.lastsaved); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,transdtl.cardno); else return E_DB_CARD_U; } ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_INCREV,0); if(ret) return ret; T_t_transdtl transdtlrev; memset(&transdtlrev,0,sizeof(transdtlrev)); des2src(transdtlrev.transdate,trans.transdate); des2src(transdtlrev.transtime,trans.transtime); des2src(transdtlrev.accdate,pAccTrans->trans.sysdate); strcpy(transdtlrev.acctime,trans.systime); transdtlrev.termid=trans.termid; transdtlrev.termseqno=trans.termseqno; transdtlrev.transcode=trans.transcode; transdtlrev.paytype=0; transdtlrev.cardno=transdtl.cardno; transdtlrev.purseno=transdtl.purseno; transdtlrev.cardcnt=trans.cardcnt; transdtlrev.cardbefbal=trans.cardbefbal; transdtlrev.amount = -transdtl.amount; transdtlrev.managefee= -transdtl.managefee; transdtlrev.custid=transdtl.custid; des2src(transdtlrev.custname,transdtl.custname); if(TC_POSDEPOSITREV==transdtl.transcode|| TC_SHOPPOSDEPOSITREV==transdtl.transcode) transdtlrev.cardaftbal=transdtlrev.cardbefbal+(transdtl.cardbefbal-transdtl.cardaftbal); else transdtlrev.cardaftbal=transdtlrev.cardbefbal-(transdtl.cardaftbal-transdtl.cardbefbal); if(amtcmp(transdtlrev.cardaftbal,0)<0) return ERRINFO(E_CARD_BALANCE_SHORTAGE,transdtlrev.cardaftbal); des2src(transdtlrev.opercode,trans.opercode); transdtlrev.status[0]=DTLSTATUS_SUCCESS; transdtlrev.errcode=0; ret=DB_t_transdtl_add(&transdtlrev); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } ret=pAccTrans->doReverseTrans(oldaccdate,oldtermid,oldtermseqno); if(ret) return ret; trans.cardaftbal=transdtlrev.cardaftbal; trans.transamt=transdtlrev.amount; return 0; }
int UpdCardBaseInfo(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans& ats=CAccTrans::GetInst(); TRANS& trans=ats.trans; T_t_card tCard; memset(&tCard,0,sizeof(tCard)); if(trans.cardno<1) { ret=DB_t_card_read_by_cardphyid_and_status(trans.cardphyid,"1",&tCard); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDPHYID,trans.cardphyid); else return E_DB_CARD_R; } trans.cardno=tCard.cardno; } ret=DB_t_card_read_by_cardno(trans.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } trans.custid=tCard.custid; trans.cardtype=tCard.cardtype; trans.feetype=tCard.feetype; if(tCard.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { return ERRINFO(E_CARD_LOST,trans.cardno); } T_t_customer customer; memset(&customer,0,sizeof(customer)); if(tCard.custid) { ret=DB_t_customer_read_by_custid(tCard.custid,&customer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,tCard.custid); else return E_DB_CUSTOMER_R; } } T_t_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_ACCNO,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(rPack->damt11,0)>=0) { tCardAccount.singlemaxamt=rPack->damt11; if(amtcmp(tCardAccount.singlemaxamt,500)>0) { DB_t_account_free_lock_by_c0(); ERRTIP("单次消费限额不能超过500元"); return E_COMMON_ERR; } } if(amtcmp(rPack->damt12,0)>=0) { tCardAccount.daycostmaxamt=rPack->damt12; if(amtcmp(tCardAccount.daycostmaxamt,10000)>0) { DB_t_account_free_lock_by_c0(); ERRTIP("日累计消费限额不能超过10000元"); return E_COMMON_ERR; } } ret=DB_t_account_update_lock_by_c0(&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_CARDNO_PURSENO_NOACCNO,trans.cardno,trans.purseno); else return E_DB_ACCOUNT_U; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.cardbefbal=trans.cardbefbal; // transdtl.cardcnt=trans.cardcnt; transdtl.cardaftbal=trans.cardbefbal; transdtl.managefee=trans.totalfeeamt; transdtl.amount=trans.totaltransamt; transdtl.custid=trans.custid; des2src(transdtl.custname,customer.custname); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl.showcardno,tCard.showcardno); GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL1,F_LSAFE_LEVEL2,F_LVOL4,F_LVOL5,F_LVOL6, F_SALL_NAME,F_SPAGER,F_SCERT_NO,F_SHOLDER_AC_NO, F_SEMAIL2,F_SMARKET_CODE,F_SMARKET_CODE2,F_SDATE0,F_SNOTE, F_SSTAT_TYPE,F_SSTAT_TYPE2,F_SNATION_CODE,F_SBRANCH_CODE0, F_LVOL0,F_STX_PWD,F_LVOL8,F_LVOL11,F_LVOL12, F_SORDER0,F_SORDER1,F_SORDER2,F_SDATE3,F_SEMP, F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_STIME3,0); outPack->lvol1=customer.custid; outPack->lsafe_level2=customer.custtype; outPack->lvol5=tCard.feetype; des2src(outPack->sall_name,customer.custname); des2src(outPack->spager,customer.stuempno); des2src(outPack->smarket_code2,customer.idtype); des2src(outPack->scert_no,customer.deptcode); des2src(outPack->semail2,customer.idno); des2src(outPack->smarket_code,customer.sex); des2src(outPack->sdate0,tCard.expiredate); outPack->lvol0=tCard.cardno; // des2src(outPack->stx_pwd,cardpwd); des2src(outPack->sorder0,tCard.showcardno); strcpy(outPack->snote,CARD_STRUCT_VERSION); //制卡版本号 strcpy(outPack->sorder1,CARD_REGISTER_PUBLISH_CODE); //发卡注册标识号 strcpy(outPack->sorder2,CARD_REGISTER_SERVICE_CODE); //服务注册标识号 outPack->lvol8=D4U5(ats.trans.cardaftbal*100,0); outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); sprintf(outPack->sholder_ac_no,"%d",customer.custid); //客户号 des2src(outPack->sstat_type,customer.idtype); //证件类型 des2src(outPack->snation_code,customer.country); //国籍 des2src(outPack->sstat_type2,customer.nation); //民族 des2src(outPack->sbranch_code0,customer.areacode); //院校代码 des2src(outPack->sdate3,ats.trans.accdate); des2src(outPack->stime3,ats.trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; outPack->lvol0=tCard.cardno; outPack->lvol6=tCardAccount.paycnt; // outPack->lvol4=tCardAccount.subsidyno; des2src(outPack->vsmess,"更新卡信息成功"); PutRow(handle,outPack,pRetCode,szMsg); return 0; }