int F847222(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char ia_buf[1024]=""; char sMsg[256]=""; double dUniNo; InAcc IA; T_t_tif_tradeserial serial; T_t_aif_account account; T_t_cif_shop shop; trade_param_t param; int shop_id; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); int i; ResetNormalCPack(&aPack,0,1); shop_id = atoi(rPack->sbank_acc); if(shop_id <= 0) { *pRetCode = E_SHOP_ACTNO_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scard0) <= 0) { *pRetCode = E_OPER_NOT_EXIST; goto L_RETU; } ret = CheckOperatorPwd(rPack->scard0,rPack->semp_pwd); if(ret) { *pRetCode = ret; goto L_RETU; } memset(&account,0,sizeof account); memset(&shop,0,sizeof shop); ret = DB_t_cif_shop_read_by_shop_id(shop_id,&shop); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_SHOP_ACTNO_NOT_EXIST; else *pRetCode = E_DB_SHOP_R; goto L_RETU; } if(strcmp(shop.is_indep, TYPE_YES)) { *pRetCode = E_FAN_SHOP_NOT_INDEP; goto L_RETU; } memset(&IA,0,sizeof IA); memset(¶m,0,sizeof param); param.pIA = &IA; IA.pVoidPointer = ia_buf; param.shop_id = shop.shop_id; param.remain_balance = rPack->damt1; ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniNo); if(ret) { *pRetCode = ret; goto L_RETU; } param.serial_no = D2I(dUniNo); //初始化流水记录 memset(&serial,0,sizeof serial); serial.serial_no = param.serial_no; serial.serial_state = SERISTAT_DEBT; serial.serial_type = TXCODE_FAN_BALANCE; // 借用显示卡号字段保存商户号 sprintf(serial.showid,"%d",param.shop_id); getsysdate(serial.operate_date); getsystime(serial.operate_time); des2src(serial.collect_date,serial.operate_date); des2src(serial.collect_time,serial.operate_time); des2src(serial.enteract_date,serial.operate_date); des2src(serial.enteract_time,serial.operate_time); des2src(serial.oper_code,rPack->scard0); des2src(serial.reserve_1,rPack->scert_addr); serial.in_balance = param.remain_balance; serial.trade_fee = param.remain_balance; des2src(param.tx_date,serial.operate_date); des2src(param.tx_time,serial.operate_time); des2src(param.oper_code,rPack->scard0); ret = do_parse_shop(¶m); if(ret) { writelog(LOG_ERR,"商户解款失败shop[%d] ret [%d]",param.shop_id,ret); *pRetCode = ret; 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); writelog(LOG_INFO,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); } } out_pack->lvol1 = IA.iSerialNo; out_pack->damt1 = param.free_balance; //strcat(out_pack->vsmess,IA.pVoidPointer); writelog(LOG_DEBUG,out_pack->vsmess); //保存流水 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 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; }
int F847224(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; T_t_shop shop; int shop_id; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); writelog(LOG_DEBUG,"操作员[%s]",rPack->scard0); shop_id = atoi(rPack->sbank_acc); if(shop_id <= 0) { *pRetCode = E_SHOP_ACTNO_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scard0) <= 0) { *pRetCode = E_OPER_NOT_EXIST; goto L_RETU; } ret = CheckOperatorPwd(rPack->scard0,rPack->semp_pwd); if(ret) { writelog(LOG_DEBUG,"检查操作员密码错误[%s]",rPack->scard0); *pRetCode = ret; goto L_RETU; } writelog(LOG_DEBUG,"计算商户余额shopid[%d]",shop_id); shop_id = strtoul(rPack->sbank_acc,NULL,10); memset(&shop,0,sizeof shop); ret =DB_t_shop_read_by_shop_id(shop_id,&shop); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_SHOP_N; else *pRetCode = E_DB_SHOP_R; goto L_RETU; } if(strcmp(shop.is_indep,TYPE_YES)) { *pRetCode = E_FAN_SHOP_NOT_INDEP; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_DAMT1,0); ret = do_calc_shop_balance(shop.shop_id,&(out_pack->damt1)); if(ret) { writelog(LOG_DEBUG,"计算商户余额错误shopid[%d]",shop.shop_id); *pRetCode = ret; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847223(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char ia_buf[1024]=""; char sMsg[256]=""; int rows; double dUniNo; InAcc IA; T_t_tif_tradelog tradelog; T_t_tif_tradeserial serial; T_t_tif_tradeserial old_serial; int shop_id; int i; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); if(strlen(rPack->scard0) <= 0) { *pRetCode = E_OPER_NOT_EXIST; goto L_RETU; } ret = CheckOperatorPwd(rPack->scard0,rPack->semp_pwd); if(ret) { *pRetCode = ret; goto L_RETU; } memset(&old_serial,0,sizeof old_serial); writelog(LOG_DEBUG,"rush log serial no[%d]",rPack->lvol1); 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_N; goto L_RETU; } if(SERISTAT_RUSH == old_serial.serial_state) { DB_t_tif_tradeserial_free_lock_cur(); writelog(LOG_ERR,"流水重复冲正,serial[%d] operator[%s]" ,old_serial.serial_no,rPack->scard0); *pRetCode = E_FAN_ALREADY_RUSHED; 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,"流水状态更新失败"); *pRetCode = E_DB_TRADESERIAL_U; goto L_RETU; } DB_t_tif_tradeserial_free_lock_cur(); ////////////////////////////////////////////////////////////////////////////////// ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniNo); if(ret) { *pRetCode = ret; goto L_RETU; } //初始化流水记录 memset(&serial,0,sizeof serial); serial.serial_no = D2I(dUniNo); serial.serial_state = SERISTAT_DEBT; serial.serial_type = TXCODE_FAN_RUSH_BALANCE; GetLogicDate(serial.operate_date); getsystime(serial.operate_time); getsysdate(serial.collect_date); des2src(serial.collect_time,serial.operate_time); des2src(serial.enteract_date,serial.collect_date); des2src(serial.enteract_time,serial.operate_time); des2src(serial.oper_code,rPack->scard0); des2src(serial.reserve_1,rPack->scert_addr); serial.in_balance = serial.trade_fee; des2src(serial.showid,old_serial.showid); // 查询流水明细 ret = DB_t_tif_tradelog_open_select_by_c2_and_serino_and_seri_type_and_outorin( old_serial.serial_no,old_serial.serial_type,DBCR_DEBIT); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_FAN_SERIAL_NOT_EXISTS; else *pRetCode = E_DB_TRADELOG_R; goto L_RETU; } rows= 0; memset(&IA,0,sizeof IA); while(1) { memset(&tradelog,0,sizeof tradelog); ret = DB_t_tif_tradelog_fetch_select_by_c2(&tradelog); if(ret) { if(DB_NOTFOUND == ret) { if(rows > 0) break; else *pRetCode = E_FAN_SERIAL_NOT_EXISTS; } else *pRetCode = E_DB_TRADELOG_R; goto L_RETU; } rows++; ret = do_rush_balance(&tradelog,&IA,&serial); if(ret) { DB_t_tif_tradelog_close_select_by_c2(); *pRetCode = ret; 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); writelog(LOG_INFO,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); } } out_pack->lvol1 = serial.serial_no; // 冲正金额 out_pack->damt1 = serial.trade_fee; des2src(out_pack->sbank_acc,old_serial.showid); // 计算商户余额 shop_id = strtoul(old_serial.showid,NULL,10); ret = do_calc_shop_balance(shop_id,&(out_pack->damt2)); if(ret) { writelog(LOG_ERR,"计算商户余额失败ret[%d]",ret); *pRetCode = ret; goto L_RETU; } //strcat(out_pack->vsmess,IA.pVoidPointer); writelog(LOG_DEBUG,out_pack->vsmess); serial.trade_fee *= -1; //保存流水 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; }