/// <summary> /// 撤销投注 /// </summary> /// <param name="betcode"></param> private void CannelBettNum(string betcode) { if (string.IsNullOrEmpty(betcode)) { AppGlobal.RenderResult(ApiCode.Fail); return; } IBetDetailService betDetailService = IoC.Resolve <IBetDetailService>(); //验证请求参数是否正确 var fs = betDetailService.Where(item => item.BetCode == betcode).FirstOrDefault(); if (null == fs) { AppGlobal.RenderResult(ApiCode.Fail); return; } //撤单处理 fs.Stauts = BetResultType.SysCancel; betDetailService.Save(); //返还金额 ISysUserBalanceService sysUserBalanceService = IoC.Resolve <ISysUserBalanceService>(); var details = new SysUserBalanceDetail() { RelevanceNo = fs.BetCode, SerialNo = "b" + Utils.BuilderNum(), Status = 0, TradeAmt = fs.TotalAmt, TradeType = TradeType.撤单返款, UserId = fs.UserId }; sysUserBalanceService.UpdateUserBalance(details, fs.TotalAmt); }
/// <summary> /// 终止追号 /// </summary> private void CannelCatchNum(string catchNum, string catchNumIssueCode) { ISysCatchNumService sysCatchNumService = IoC.Resolve <ISysCatchNumService>(); ISysCatchNumIssueService sysCatchNumIssueService = IoC.Resolve <ISysCatchNumIssueService>(); //验证当前单号是否正在进行 var fs = sysCatchNumService.Where(item => item.CatchNumCode == catchNum).FirstOrDefault(); if (fs == null) { //非法撤单 AppGlobal.RenderResult(ApiCode.Fail); return; } //获取注单详情 var source = sysCatchNumIssueService.GetCatchIssue(catchNum); //获取用户余额 CatchNumIssue catchNumIssue = null; int noCannelCount = 0; foreach (var item in source) { //未开奖的状态才允许撤单 if (catchNumIssueCode == item.CatchNumIssueCode) { fs.UserCannelIssue++; fs.UserCannelMonery += item.TotalAmt; item.Stauts = BetResultType.SysCancel; //对本注进行撤单 catchNumIssue = item; } if (item.Stauts == BetResultType.NotOpen) { noCannelCount++; } } //撤单 sysCatchNumIssueService.Save(); if (noCannelCount <= 0) //全部撤销 { sysCatchNumService.CannelCatch(catchNum); } sysCatchNumService.Save(); //返还金额 if (catchNumIssue != null) { ISysUserBalanceService sysUserBalanceService = IoC.Resolve <ISysUserBalanceService>(); var details = new SysUserBalanceDetail() { RelevanceNo = catchNumIssue.CatchNumIssueCode, SerialNo = "b" + Utils.BuilderNum(), Status = 0, TradeAmt = catchNumIssue.TotalAmt, TradeType = TradeType.追号返款, UserId = fs.UserId }; sysUserBalanceService.UpdateUserBalance(details, catchNumIssue.TotalAmt); } }
/// <summary> /// 修改用户余额 /// </summary> /// <param name="uid"></param> /// <param name="amt"></param> public void UpdateUserBanance(int uid, decimal amt, TradeType tp, string relevanceNo, int moneryType) { //修改当前用户余额 var item = new SysUserBalanceDetail() { OpUserId = uid, SerialNo = "d" + Ytg.Comm.Utils.BuilderNum(), Status = 0, TradeType = tp, UserId = uid, RelevanceNo = relevanceNo }; mSysUserBalanceService.UpdateUserBalance(item, moneryType == 0 ? amt : -amt); }
/// <summary> /// 通过存储过程修改用户余额 /// </summary> /// <param name="balanceDetails"></param> /// <returns></returns> public int UpdateUserBalance(SysUserBalanceDetail balanceDetails, decimal changeMonery) { int rowCount = 0; try { rowCount = PrivateUpdateUserBalance(balanceDetails, changeMonery); //throw new Exception(); } catch (Exception ex) { //一旦发生事务错误,重新提交 int whileCount = 0; while (true) { string msg = balanceDetails.RelevanceNo + " 第" + whileCount + "次执行事务"; Console.WriteLine(msg); try { rowCount = PrivateUpdateUserBalance(balanceDetails, changeMonery); break; } catch (Exception ex1) { Console.WriteLine("事务提交失败,尝试重新提交 " + ex1.Message); } System.Threading.Thread.Sleep(1000);//一秒后重新提交 whileCount++; if (whileCount > 10) { break; } } Console.WriteLine(balanceDetails.RelevanceNo + "事务提交Exception " + ex.Message); } return(rowCount); }
/// <summary> /// 通过存储过程修改用户余额信息 /// </summary> /// <param name="balanceDetails"></param> /// <param name="changeMonery"></param> /// <returns></returns> private int PrivateUpdateUserBalance(SysUserBalanceDetail balanceDetails, decimal changeMonery) { string procName = "sp_ChangeUserBalances"; var p = new System.Data.SqlClient.SqlParameter("@uid", System.Data.DbType.Int32); p.Value = balanceDetails.UserId; var p2 = new System.Data.SqlClient.SqlParameter("@TradeType", System.Data.DbType.Int32); p2.Value = balanceDetails.TradeType; var p3 = new System.Data.SqlClient.SqlParameter("@SerialNo", System.Data.DbType.String); p3.Value = balanceDetails.SerialNo; var p4 = new System.Data.SqlClient.SqlParameter("@relevanceNo", System.Data.DbType.String); p4.Value = balanceDetails.RelevanceNo; var p5 = new System.Data.SqlClient.SqlParameter("@BankId", System.Data.DbType.Int32); p5.Value = balanceDetails.BankId == null ? -1 : balanceDetails.BankId; var p6 = new System.Data.SqlClient.SqlParameter("@sumMonery", System.Data.DbType.Decimal); p6.Value = changeMonery; //变化金额 var amt = this.ExProc <System.Int32?>(procName, p, p2, p3, p4, p5, p6); if (amt.FirstOrDefault() == null) { return(-1); } return(amt.FirstOrDefault().Value); }
/// <summary> /// 投注 存储过程 /// </summary> /// <param name="detail"></param> /// <param name="balanceDetail"></param> /// <returns></returns> public decimal?AddBetting(BetDetail detail, SysUserBalanceDetail balanceDetail, int lotteryid, ref int state) { string spName = "sp_addBetting"; DbParameter[] pramers = new DbParameter[] { new System.Data.SqlClient.SqlParameter("@BetCode", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@IssueCode", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@BetContent", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@Model", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@Multiple", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@PalyRadioCode", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@PrizeType", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@UserId", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@TotalAmt", SqlDbType.Decimal), new System.Data.SqlClient.SqlParameter("@LotteryCode", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@BetCount", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@BackNum", SqlDbType.Decimal), new System.Data.SqlClient.SqlParameter("@BonusLevel", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@PostionName", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@HasState", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@lotteryid", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@TradeType", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@SerialNo", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@nowDate", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@IsBuyTogether", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@Subscription", SqlDbType.Decimal), new System.Data.SqlClient.SqlParameter("@SurplusMonery", SqlDbType.Decimal), new System.Data.SqlClient.SqlParameter("@Bili", SqlDbType.Float), new System.Data.SqlClient.SqlParameter("@Secrecy", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@state", SqlDbType.Int) }; pramers[0].Value = detail.BetCode; pramers[1].Value = detail.IssueCode; pramers[2].Value = detail.BetContent; pramers[3].Value = detail.Model; pramers[4].Value = detail.Multiple; pramers[5].Value = detail.PalyRadioCode; pramers[6].Value = detail.PrizeType; pramers[7].Value = detail.UserId; pramers[8].Value = detail.TotalAmt; pramers[9].Value = detail.LotteryCode; pramers[10].Value = detail.BetCount; pramers[11].Value = detail.BackNum; pramers[12].Value = detail.BonusLevel; pramers[13].Value = string.IsNullOrEmpty(detail.PostionName) ? "" : detail.PostionName; pramers[14].Value = detail.HasState; pramers[15].Value = lotteryid; pramers[16].Value = balanceDetail.TradeType; pramers[17].Value = balanceDetail.SerialNo; pramers[18].Value = DateTime.Now; pramers[19].Value = detail.IsBuyTogether; pramers[20].Value = detail.Subscription; pramers[21].Value = detail.SurplusMonery; pramers[22].Value = detail.Bili; pramers[23].Value = detail.Secrecy; pramers[24].Direction = ParameterDirection.Output; this.ExProcNoReader(spName, pramers); object parenter = pramers[24].Value; if (parenter != null) { state = Convert.ToInt32(parenter); } else { state = -1; } return(0); }
protected void btnSave_Click(object sender, EventArgs e) { decimal changeMonery = 0m; if (!decimal.TryParse(this.txtinMonery.Text.Trim(), out changeMonery) || changeMonery <= 0) { JsAlert("充值金额格式错误!"); return; } var details = new SysUserBalanceDetail() { RelevanceNo = "system.recharge", SerialNo = "q" + Utils.BuilderNum(), Status = 0, TradeAmt = changeMonery, TradeType = radDefault.Checked?TradeType.系统充值:TradeType.分红, UserId = Convert.ToInt32(Request.QueryString["id"]) }; if (radKouk.Checked) { details.TradeType = TradeType.其他; details.TradeAmt = 0 - details.TradeAmt; changeMonery = 0 - changeMonery; } var userBalance = IoC.Resolve <ISysUserBalanceService>(); if (userBalance.UpdateUserBalance(details, changeMonery) > 0) { if (radDefault.Checked) { //普通充值,需增加提款限额 double bili = 5; ISysSettingService settingService = IoC.Resolve <ISysSettingService>(); var fs = settingService.GetAll().Where(x => x.Key == "chongzhiBili").FirstOrDefault(); if (null != fs) { if (!double.TryParse(fs.Value, out bili)) { bili = 5; } } ISysUserService userServices = IoC.Resolve <ISysUserService>(); var minOutMonery = (changeMonery * (decimal)(bili / 100)); if (userServices.UpdateUserMinMinBettingMoney(details.UserId, minOutMonery) > 0) { //更新用户提款流水要求 } } if (Request.Params["tp"] == "1")//分红 { JsAlert("分红成功", true); } else if (Request.Params["tp"] == "0") { JsAlert("充值成功", true); } else { JsAlert("扣减成功", true); } } else { JsAlert("充值失败,请关闭后重试", false); } }
private void Recharge() { string inUserCode = Request.Params["incode"]; //充值用户账号 string password = Request.Params["pwd"]; //充值用户账号 string czpq = Request.Params["czpq"]; //充值类型 1为分红充值 decimal inMonery = 0m; //充值金额 if (!decimal.TryParse(Request.Params["inmonery"], out inMonery) || inMonery < 10 || // 充值金额必须大于10 小于等于10000 string.IsNullOrEmpty(password)) { AppGlobal.RenderResult(ApiCode.ParamEmpty); return; } if (!this.mSysUserBalanceService.VdUserBalancePwd(this.LoginUserId, password)) { //验证资金密码失败 AppGlobal.RenderResult(ApiCode.Security); return; } //根据用户账号获取用户信息 var inUserInfo = this.mSysUserService.Get(inUserCode); if (null == inUserInfo)//|| inUserInfo.ParentId != this.LoginUserId { AppGlobal.RenderResult(ApiCode.Fail); return; } var baseUser = this.mSysUserService.Get(this.LoginUserId); int maxMonery = 10000; if (baseUser.UserType == UserType.Main || baseUser.UserType == UserType.BasicProy) { maxMonery = 100000; } if (inMonery > maxMonery) { AppGlobal.RenderResult(ApiCode.ParamEmpty); return; } //获取当前登录用户信息 var loginUserBalance = this.mSysUserBalanceService.GetUserBalance(this.LoginUserId); if (loginUserBalance.Status == 1) { AppGlobal.RenderResult(ApiCode.DisabledMonery); return; } if (null == loginUserBalance ||//金额是否禁用 并且充值的金额不能大于余额 loginUserBalance.UserAmt < inMonery) { AppGlobal.RenderResult(ApiCode.Security); return; } var dailiDetails = new SysUserBalanceDetail() { OccDate = DateTime.Now, OpUserId = LoginUserId, RelevanceNo = inUserCode, SerialNo = "d" + Utils.BuilderNum(), Status = 0, TradeAmt = inMonery, TradeType = czpq == "1" ? TradeType.分红 : TradeType.级充值, UserAmt = loginUserBalance.UserAmt, UserId = inUserInfo.Id, }; if (this.mSysUserBalanceService.UpdateUserBalance(dailiDetails, inMonery) > 0) { var removeDetails = new SysUserBalanceDetail() { OccDate = DateTime.Now, OpUserId = this.LoginUserId, RelevanceNo = inUserCode, SerialNo = "d" + Utils.BuilderNum(), Status = 0, TradeAmt = -inMonery, TradeType = TradeType.充值扣费, UserAmt = loginUserBalance.UserAmt, UserId = this.LoginUserId, }; if (czpq == "1") { //算分红扣款 removeDetails.TradeType = TradeType.分红扣款; } //充值成功,减少当前用户余额 if (this.mSysUserBalanceService.UpdateUserBalance(removeDetails, -inMonery) > 0) { //若未上级普通充值,需处理充值流水逻辑 if (czpq != "1") { if (!Ytg.ServerWeb.Page.PageCode.UserComm.ManagerRecharge(inMonery, dailiDetails.UserId, this.LoginUser.Id)) { AppGlobal.RenderResult(ApiCode.Empty);//充值成功,但流水限制错误 return; } //减少自身流水 } AppGlobal.RenderResult(ApiCode.Success);//充值成功 return; } else { //充值失败,撤销 dailiDetails.TradeAmt = -inMonery; this.mSysUserBalanceService.UpdateUserBalance(dailiDetails, inMonery); } } }
/// <summary> /// 追号 存储过程 /// </summary> /// <param name="detail"></param> /// <param name="balanceDetail"></param> /// <returns></returns> public decimal?AddCatchBetting(CatchNum detail, SysUserBalanceDetail balanceDetail, int lotteryid, string issueStr, decimal detailMonery, ref int state) { string spName = "sp_catchBetting"; DbParameter[] pramers = new DbParameter[] { new System.Data.SqlClient.SqlParameter("@catchNumCode", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@BetContent", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@Model", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@PalyRadioCode", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@PrizeType", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@BackNum", SqlDbType.Decimal), new System.Data.SqlClient.SqlParameter("@UserId", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@IsAutoStop", SqlDbType.Bit), new System.Data.SqlClient.SqlParameter("@SumAmt", SqlDbType.Decimal), new System.Data.SqlClient.SqlParameter("@BeginIssueCode", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@CatchIssue", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@BonusLevel", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@LotteryCode", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@BetCount", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@PostionName", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@HasState", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@detailMonery", SqlDbType.Decimal), new System.Data.SqlClient.SqlParameter("@lotteryid", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@TradeType", SqlDbType.Int), new System.Data.SqlClient.SqlParameter("@SerialNo", SqlDbType.VarChar), new System.Data.SqlClient.SqlParameter("@catchIssueContent", SqlDbType.NVarChar), new System.Data.SqlClient.SqlParameter("@state", SqlDbType.Int) }; pramers[0].Value = detail.CatchNumCode; pramers[1].Value = detail.BetContent; pramers[2].Value = detail.Model; pramers[3].Value = detail.PalyRadioCode; pramers[4].Value = detail.PrizeType; pramers[5].Value = detail.BackNum; pramers[6].Value = detail.UserId; pramers[7].Value = detail.IsAutoStop; pramers[8].Value = detail.SumAmt; pramers[9].Value = detail.BeginIssueCode; pramers[10].Value = detail.CatchIssue; pramers[11].Value = detail.BonusLevel; pramers[12].Value = detail.LotteryCode; pramers[13].Value = detail.BetCount; pramers[14].Value = string.IsNullOrEmpty(detail.PostionName) ? "" : detail.PostionName; pramers[15].Value = detail.HasState; pramers[16].Value = detailMonery; pramers[17].Value = lotteryid; pramers[18].Value = balanceDetail.TradeType; pramers[19].Value = balanceDetail.SerialNo; pramers[20].Value = issueStr; pramers[21].Direction = ParameterDirection.Output; this.ExProcNoReader(spName, pramers); object parenter = pramers[21].Value; if (parenter != null) { state = Convert.ToInt32(parenter); } else { state = -1; } return(0); }