int F847183(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char tx_date[8+1]=""; //发生日期 char tx_time[6+1]=""; //发生时间 int card_no=0; //卡号 char device_id[8+1]=""; //终端机ID int serial_no=0; //终端机流水号 double dUniqno=0; T_t_tif_tradeserial tTradeserial; //卡操作流水表 T_t_tif_rcvdtl tRcvdtl; char sysdate[11]=""; char systime[9]=""; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); memset(&tRcvdtl,0,sizeof(tRcvdtl)); memset(&tTradeserial,0,sizeof(tTradeserial)); getsysdate(sysdate); getsystime(systime); des2src(tTradeserial.enteract_time,systime); des2src(tx_date,rPack->sbank_pwd); des2src(tx_time,rPack->sbank_code); card_no=rPack->lvol0; des2src(device_id,rPack->sbank_pwd2); serial_no=rPack->lvol1; trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); if(strlen(rPack->scust_limit)==0) { *pRetCode=E_OPER_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scust_limit2)==0) { *pRetCode=E_INPUT_AUTH_OPER_NULL; goto L_RETU; } if(strcmp(rPack->scust_limit,rPack->scust_limit2)==0) { writelog(LOG_ERR,"oper[%s]auth_oper[%s]",rPack->scust_limit,rPack->scust_limit2); *pRetCode=E_OPER_AND_AUTH_OPER_EQ; goto L_RETU; } ret=chk_oper_pwd(rPack->scust_limit2,rPack->semp_pwd); if(ret) { if(E_OPER_NOT_EXIST==ret) *pRetCode=E_AUTH_OPER_NOT_EXIST; else if(E_PASSWORD_WRONG==ret) *pRetCode=E_AUTH_OPER_PWD; else *pRetCode=ret; goto L_RETU; } ret=DB_t_tif_rcvdtl_read_lock_by_c0_and_tx_date_and_tx_time_and_card_no_and_device_id_and_serial_no(tx_date,tx_time,card_no,device_id,serial_no,&tRcvdtl); if(ret) { if(DB_NOTFOUND==ret) { writelog(LOG_ERR,"tx_date[%s],tx_time[%s],card_no[%d],device_id[%s],serial_no[%d]",tx_date,tx_time,card_no,device_id,serial_no); *pRetCode=E_SERIALNO_NOT_EXIST; } else { writelog(LOG_ERR,"read_lock t_tif_rcvdtl err ret[%d]",ret); *pRetCode=E_DB_RCVDTL_R; } goto L_RETU; } if(tRcvdtl.status[0]=='4') { *pRetCode=E_TX_SERIAL_CZ; DB_t_tif_rcvdtl_free_lock_c0(); goto L_RETU; } if(tRcvdtl.status[0]!='3') { *pRetCode=E_TX_SERIAL_CANNOT_CZ; DB_t_tif_rcvdtl_free_lock_c0(); goto L_RETU; } if(tRcvdtl.amount<0) { *pRetCode=E_TX_SERIAL_CANNOT_CZ; DB_t_tif_rcvdtl_free_lock_c0(); goto L_RETU; } tRcvdtl.status[0]='4'; //冲正 des2src(tRcvdtl.oper_no,rPack->scust_limit); des2src(tRcvdtl.deal_date,sysdate); des2src(tRcvdtl.deal_time,systime); ret=DB_t_tif_rcvdtl_update_lock_by_c0(&tRcvdtl); if(ret) { *pRetCode=E_DB_RCVDTL_U; writelog(LOG_ERR,"DB_t_tif_rcvdtl_update_lock_by_c0[%d]",ret); goto L_RETU; } DB_t_tif_rcvdtl_free_lock_c0(); //赋值 ret=getdata(&tTradeserial,&tRcvdtl); if(ret) { *pRetCode=ret; goto L_RETU; } des2src(tTradeserial.operate_date,sysdate); des2src(tTradeserial.operate_time,systime); des2src(tTradeserial.collect_date,sysdate); des2src(tTradeserial.collect_time,systime); ret=GetLogicDate(tTradeserial.enteract_date); //业务日期 if(ret) { *pRetCode=ret; writelog(LOG_ERR,"GetLogicDate err ret[%d]",ret); goto L_RETU; } des2src(tTradeserial.enteract_time,systime); tTradeserial.in_balance =rPack->damt1; tTradeserial.trade_fee = -(tRcvdtl.amount/100.0); //本次消费金额 tTradeserial.out_balance=tTradeserial.in_balance-tTradeserial.trade_fee; tTradeserial.trade_count=rPack->lvol10; tTradeserial.maindevice_id=rPack->lvol6; // tTradeserial.sys_id=rPack->lvol6; des2src(tTradeserial.oper_code,rPack->sdate1); tTradeserial.reviseserial_no=tTradeserial.other_seri_no; //取流水号,从帐处理 ret=getNewUniqNo(KEYTYPE_TRADESERIAL, &dUniqno); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"getNewUniqNo err[%d]",ret); goto L_RETU; } tTradeserial.serial_no=(int)dUniqno; //###################################################### //入账处理 switch(tTradeserial.serial_type) { case 930031: if(0==tRcvdtl.amount) break; tTradeserial.serial_type=TXCODE_TX_REVEAL; ret=process930031(&tTradeserial); if(ret) { //业务处理失败处理 *pRetCode=ret; goto L_RETU; } break; default: *pRetCode=E_TXCODE_NOT_EXIST; //交易码错误 goto L_RETU; } //###################################################### //添加交易流水 tTradeserial.serial_state=SERISTAT_DEBT; ret = DB_t_tif_tradeserial_add(&tTradeserial); if (ret) { writelog(LOG_ERR,"DB_t_tif_tradeserial_add ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode= E_DB_TRADESERIAL_E; else *pRetCode= E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tTradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_DAMT3,F_VSMESS,0); out_pack->lserial1=tTradeserial.serial_no; out_pack->damt2=tTradeserial.out_balance; out_pack->damt3=-tTradeserial.trade_fee; sprintf(out_pack->vsmess,"流水号:%d 冲正金额:%.2lf元 冲正前卡余额:%.2lf元 卡当前余额:%.2lf元",tTradeserial.serial_no,-tTradeserial.trade_fee,tTradeserial.in_balance,tTradeserial.out_balance); writelog(LOG_DEBUG,out_pack->vsmess); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847181(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 shop_id=0; double iSeqNo=0; T_t_tif_tradeserial tTradeserial; //卡操作流水表 T_t_tif_rcvdtl tRcvdtl; char sysdate[11]=""; char systime[9]=""; memset(&tRcvdtl,0,sizeof(tRcvdtl)); memset(&tTradeserial,0,sizeof(tTradeserial)); getsysdate(sysdate); getsystime(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; shop_id=rPack->lvol12; ret=DB_t_tif_rcvdtl_read_lock_by_c0_and_tx_date_and_tx_time_and_cardno_and_deviceid_and_serial_no(tx_date,tx_time,cardno,deviceid,serial_no,&tRcvdtl); if(ret) { if(DB_NOTFOUND==ret) { writelog(LOG_ERR,"tx_date[%s],tx_time[%s],cardno[%d],deviceid[%s],serial_no[%d]",tx_date,tx_time,cardno,deviceid,serial_no); *pRetCode=E_SERIALNO_NOT_EXIST; } else { *pRetCode=E_DB_RCVDTL_R; writelog(LOG_ERR,"read_lock t_tif_rcvdtl err ret[%d]",ret); } goto L_RETU; } if(tRcvdtl.status[0]!='2') { *pRetCode=E_TX_CANNOT_DEAL; DB_t_tif_rcvdtl_free_lock_c0(); goto L_RETU; } des2src(tRcvdtl.oper_no,rPack->sdate1); des2src(tRcvdtl.deal_date,sysdate); des2src(tRcvdtl.deal_time,systime); tRcvdtl.status[0]='3'; //1-未处理2-失败3-成功 ret=DB_t_tif_rcvdtl_update_lock_by_c0(&tRcvdtl); if(ret) { *pRetCode=E_DB_RCVDTL_U; writelog(LOG_ERR,"DB_t_tif_rcvdtl_update_lock_by_c1[%d]",ret); goto L_RETU; } DB_t_tif_rcvdtl_free_lock_c0(); //赋值 ret=getdata(&tTradeserial,&tRcvdtl); if(ret) { *pRetCode=ret; goto L_RETU; } ret=GetLogicDate(tTradeserial.enteract_date); //业务日期 if(ret) { *pRetCode=ret; writelog(LOG_ERR,"GetLogicDate err ret[%d]",ret); goto L_RETU; } des2src(tTradeserial.enteract_time,systime); tTradeserial.maindeviceid=rPack->lvol11; des2src(tTradeserial.opercode,rPack->sdate1); //取流水号,从帐处理 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(0==tRcvdtl.amount) break; tTradeserial.comu_ver=shop_id; ret=process930031(&tTradeserial); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"process930031 err[%d]",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; } return 0; L_RETU: return -1; }