int F847221(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; double tx_money = 0.0; char ia_buf[1024]=""; char sMsg[256]=""; double dUniNo = 0; T_t_tif_tradeserial serial; T_t_tif_tradeserial old_serial; T_t_group_cash_report group_cash; T_t_groups groups; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); int i; ResetNormalCPack(&aPack,0,1); if(strlen(rPack->scard0) <= 0) { *pRetCode = E_NOTEXIST_OPER; goto L_RETU; } ret = CheckOperatorPwd(rPack->scard0,rPack->semp_pwd); if(ret) { *pRetCode = ret; goto L_RETU; } if(rPack->lvol1 <= 0) { *pRetCode = E_FAN_SERIAL_NOT_EXISTS; goto L_RETU; } // 更新被冲正流水的状态 memset(&old_serial,0,sizeof old_serial); ret = DB_t_tif_tradeserial_read_lock_by_cur_and_serial_no(rPack->lvol1,&old_serial); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_FAN_SERIAL_NOT_EXISTS; else *pRetCode = E_DB_TRADESERIAL_R; goto L_RETU; } if(SERISTAT_RUSH == old_serial.serial_state) { writelog(LOG_ERR,"流水已被冲正,流水号[%d]",old_serial.serial_no); *pRetCode = E_FAN_ALREADY_RUSHED; DB_t_tif_tradeserial_free_lock_cur(); goto L_RETU; } old_serial.serial_state = SERISTAT_RUSH; ret = DB_t_tif_tradeserial_update_lock_by_cur(&old_serial); if(ret) { writelog(LOG_ERR,"更新流水[%d]状态失败",old_serial.serial_no); *pRetCode = E_DB_TRADESERIAL_U; goto L_RETU; } DB_t_tif_tradeserial_free_lock_cur(); tx_money = old_serial.trade_fee; // 生成新的冲正流水 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniNo); if(ret) { *pRetCode = ret; goto L_RETU; } // 查询组可解款余额 memset(&group_cash,0,sizeof group_cash); ret = DB_t_group_cash_report_read_lock_by_c1_and_groupid(old_serial.showid,&group_cash); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_FAN_ACC_NOT_EXISTS; else *pRetCode = E_DB_GRP_CASH_RPT_R; goto L_RETU; } /* if(amtcmp(tx_money,group_cash.cur_money)>0) { *pRetCode = E_FAN_ACC_INSUFFICIENT; DB_t_group_cash_report_free_lock_by_c1(); goto L_RETU; } */ // 生成流水 memset(&serial,0,sizeof serial); serial.serial_no = (int)dUniNo; serial.serial_state = SERISTAT_DEBT; serial.serial_type = TXCODE_FAN_RUSH_PAY; getsysdate(serial.operate_date); getsystime(serial.operate_time); des2src(serial.collect_date,serial.operate_date); des2src(serial.collect_time,serial.operate_time); GetLogicDate(serial.enteract_date); des2src(serial.enteract_time,serial.operate_time); des2src(serial.opercode,rPack->scard0); des2src(serial.reserve_1,rPack->scert_addr); serial.cardbefbal = tx_money; serial.trade_fee = tx_money * -1; // 商户号 des2src(serial.showid,old_serial.showid); // 入账 memset(&IA,0,sizeof IA); IA.dArrInAmt[0] = serial.trade_fee; IA.iCardNo = 0; //收费类别为 1 IA.iFeeType = 1; IA.iTxFlag = ACC_TYPE_RUSH; IA.pVoidPointer = ia_buf; ret = process(&IA,&serial); if(ret) { writelog(LOG_ERR,"account process error [%d]",ret); *pRetCode = ret; DB_t_group_cash_report_free_lock_by_c1(); goto L_RETU; } SetCol(handle,0); SetCol(handle,F_VSMESS,F_LVOL1,F_DAMT1,F_DAMT2,F_SBANK_ACC,0); sprintf(out_pack->vsmess,"流水号:%d ",IA.iSerialNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } strcat(out_pack->vsmess,(char*)IA.pVoidPointer); writelog(LOG_DEBUG,out_pack->vsmess); des2src(group_cash.last_check_date,serial.operate_date); des2src(group_cash.last_check_time,serial.operate_time); group_cash.cur_money = group_cash.cur_money + tx_money; out_pack->lvol1 = serial.serial_no; out_pack->damt1 = serial.trade_fee; out_pack->damt2 = group_cash.cur_money; //更新组未解款金额 ret = DB_t_group_cash_report_update_lock_by_c1(&group_cash); if(ret) { *pRetCode = E_DB_GRP_CASH_RPT_U; goto L_RETU; } // add DB_t_group_cash_report_free_lock_by_c1(); ret = DB_t_groups_read_by_groupid(group_cash.groupid,&groups); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_GROUP_N; else *pRetCode = E_DB_GROUP_R; goto L_RETU; } des2src(out_pack->sbank_acc,groups.group_acc); //保存流水 ret = DB_t_tif_tradeserial_add(&serial); if(ret) { if(DB_REPEAT == ret) return E_DB_TRADESERIAL_E; else return E_DB_TRADESERIAL_I; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847220(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; double tx_money = 0.0; char ia_buf[1024]=""; char sMsg[256]=""; double dUniNo = 0; T_t_tif_tradeserial serial; T_t_group_cash_report group_cash; int groupid; T_t_groups groups; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); int i; ResetNormalCPack(&aPack,0,1); if(strlen(rPack->scard0) <= 0) { *pRetCode = E_NOTEXIST_OPER; goto L_RETU; } ret = CheckOperatorPwd(rPack->scard0,rPack->semp_pwd); if(ret) { writelog(LOG_ERR,"操作员密码错误operator[%s]",rPack->scard0); *pRetCode = ret; goto L_RETU; } if(strlen(rPack->sbank_acc) <= 0) { *pRetCode = E_NOTEXIST_ACCNO; goto L_RETU; } tx_money = rPack->damt1; if(amtcmp(tx_money,0.0)<=0) { *pRetCode = E_INPUT_AMT; goto L_RETU; } memset(&groups,0,sizeof groups); //ret = DB_t_groups_read_by_group_acc(rPack->sbank_acc,&groups); ret = DB_t_groups_read_by_groupid(rPack->sbank_acc,&groups); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_NOTEXIST_ACCNO; else *pRetCode = E_DB_GROUP_R; goto L_RETU; } ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniNo); if(ret) { *pRetCode = ret; goto L_RETU; } // 查询组可解款余额 memset(&group_cash,0,sizeof group_cash); ret = DB_t_group_cash_report_read_lock_by_c1_and_groupid(groups.groupid,&group_cash); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_FAN_ACC_NOT_EXISTS; else *pRetCode = E_DB_GRP_CASH_RPT_R; goto L_RETU; } if(amtcmp(tx_money,group_cash.cur_money)>0) { writelog(LOG_ERR,"操作员组余额[%.2lf], 解款金额[%.2lf]",group_cash.cur_money,tx_money); *pRetCode = E_FAN_ACC_INSUFFICIENT; DB_t_group_cash_report_free_lock_by_c1(); goto L_RETU; } // 生成流水 memset(&serial,0,sizeof serial); serial.serial_no = D2I(dUniNo); serial.serial_state = SERISTAT_DEBT; serial.serial_type = TXCODE_FAN_PAY_MONEY; getsysdate(serial.operate_date); getsystime(serial.operate_time); des2src(serial.collect_date,serial.operate_date); des2src(serial.collect_time,serial.operate_time); GetLogicDate(serial.enteract_date); des2src(serial.enteract_time,serial.operate_time); des2src(serial.opercode,rPack->scard0); des2src(serial.reserve_1,rPack->scert_addr); serial.cardbefbal = tx_money; serial.trade_fee = tx_money; des2src(serial.showid,group_cash.groupid); // 入账 memset(&IA,0,sizeof IA); //IA.dInCardBala = serial.cardbefbal; IA.dArrInAmt[0] = serial.trade_fee; IA.iCardNo = 0; //收费类别为 1 IA.iFeeType = 1; IA.pVoidPointer = ia_buf; ret = process(&IA,&serial); if(ret) { writelog(LOG_ERR,"入账失败ret [%d]",ret); *pRetCode = ret; DB_t_group_cash_report_free_lock_by_c1(); goto L_RETU; } SetCol(handle,0); SetCol(handle,F_VSMESS,F_LVOL1,F_DAMT1,0); sprintf(out_pack->vsmess,"流水号:%d ",IA.iSerialNo); for(i=1; i<=IA.iOutTxTypeCnt; i++) { if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } //serial.cardaftbal = strcat(out_pack->vsmess,(char*)IA.pVoidPointer); writelog(LOG_DEBUG,out_pack->vsmess); out_pack->lvol1 = serial.serial_no; group_cash.cur_money = group_cash.cur_money - serial.trade_fee; des2src(group_cash.last_check_date,serial.operate_date); des2src(group_cash.last_check_time,serial.operate_time); out_pack->damt1 = group_cash.cur_money; //更新组未解款金额 ret = DB_t_group_cash_report_update_lock_by_c1(&group_cash); if(ret) { *pRetCode = E_DB_GRP_CASH_RPT_U; goto L_RETU; } // add DB_t_group_cash_report_free_lock_by_c1(); //保存流水 ret = DB_t_tif_tradeserial_add(&serial); if(ret) { if(DB_REPEAT == ret) return E_DB_TRADESERIAL_E; else return E_DB_TRADESERIAL_I; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }