/// <summary> /// 追号投注 /// </summary> private bool CatchBetting(SysUser user, BettingDTO dto, ref ApiCode errorType, int lotteryid, bool ishtml = false) { var details = dto.BetDetails; //获取用户余额 decimal userAmt = 0; var userbalance = this.mSysUserBalanceService.GetUserBalance(user.Id); if (null != userbalance) { userAmt = userbalance.UserAmt;//获取用户余额 } int index = 0; foreach (var detail in details) { var radioContent = Ytg.Scheduler.Comm.Bets.RadioContentFactory.CreateInstance(detail.PalyRadioCode); if (null == radioContent) { errorType = ApiCode.Exception;//服务器错误 return(false); } if (ishtml) { detail.BetContent = radioContent.HtmlContentFormart(detail.BetContent); } //计算总注数 int betCount = radioContent.TotalBetCount(new BetDetail() { BetContent = detail.BetContent }); if (betCount < 0) //超过指定注数,不允许投注 { errorType = ApiCode.Fail; //服务器错误 return(false); } //验证投注时间和当前投注期数的时间差,不在时间内,不允许投注 var issueInfo = this.mLotteryIssueService.Get(lotteryid, detail.IssueCode); if (issueInfo == null || issueInfo.EndSaleTime.Value < DateTime.Now) { errorType = ApiCode.Empty; return(false); } decimal detailMonery = CalculateMonery(betCount, detail.Model, (int)detail.Multiple, lotteryid); var playRadio = Ytg.Service.Lott.BaseDataCatch.GetPalyTypeRadio().Where(radio => radio.RadioCode == detail.PalyRadioCode).FirstOrDefault(); if (playRadio == null) { errorType = ApiCode.Fail;//服务器错误 return(false); } //追号最大倍数 int maxMulite = dto.CatchDtos.Max(x => x.Multiple); int oldMulite = (int)detail.Multiple; detail.Multiple = maxMulite; //验证可能中奖的最大金额,若超过该限制,则不允许投注 if (WinMoneryHelper.GetAutoWinMonery(detail, this.LoginUser) > WinMoneryHelper.GetMaxReboMonery()) { errorType = ApiCode.NotScope;//超过限额 return(false); } detail.Multiple = oldMulite;//还原初始倍数 //追号 string catchNumCode = "c" + Utils.BuilderNum(); var fstCode = string.Empty; //计算本次追号需用的总金额 decimal sumMonery = CatchIssue(catchNumCode, detailMonery, dto.CatchDtos, lotteryid, ref fstCode); if (userAmt < sumMonery)//余额不够本次 { errorType = ApiCode.NotEnough; return(false); } userAmt -= sumMonery; var bet = new CatchNum() { CatchNumCode = catchNumCode, BetContent = detail.BetContent, Model = detail.Model, PalyRadioCode = detail.PalyRadioCode, PrizeType = detail.PrizeType, BackNum = (decimal)(detail.PrizeType == 0 ? user.Rebate : 0), UserId = user.Id, IsAutoStop = dto.IsAutoStop, Stauts = CatchNumType.Runing, SumAmt = sumMonery, BeginIssueCode = fstCode, CatchIssue = dto.CatchDtos.Count, BonusLevel = LoginUser.PlayType == UserPlayType.P1800 ? 1800 : 1700, LotteryCode = this.LotteryCode, BetCount = betCount, PostionName = detail.PostionName, HasState = betCount <= detail.MaxBetCount ? 1 : 0 }; //插入追号记录 this.mSysCatchNumService.Create(bet); //保存用户余额 // userbalance.UserAmt = userAmt - sumMonery; //投注消费记录s // this.mSysUserBalanceDetailService.Create(CreateUserBalanceDetial(user.Id, -sumMonery, TradeType.追号扣款, userAmt,bet.CatchNumCode)); //返点消费记录 //不计算返点 //if (detail.PrizeType == 1) // this.mRebateHelper.CatchCalculate(userId, sumMonery, bet.CatchNumCode, mRebateHelper.GetRadioMaxRemo(bet.PalyRadioCode, bet.BonusLevel)); this.mSysUserBalanceService.UpdateUserBalance(CreateUserBalanceDetial(user.Id, -sumMonery, TradeType.追号扣款, userAmt, bet.CatchNumCode), -sumMonery); this.mBetDetailService.Save();//保存状态 //修改账变 index++; } return(true); }
/// <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); }