/// <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> /// html 版投注处理 /// </summary> private void HtmlAddBetDetails() { /* * loginUserId=63&lotterycode=cqssc&lotteryid=1&play_source=&pmode=2<_project%5b%5d=%7b%27type%27%3a%27digital%27%2c%27methodid%27%3a0%2c%27codes%27%3a%274%7c4%7c4%7c4%7c4%27%2c%27nums%27%3a1%2c%27 * omodel%27%3a2%2c%27times%27%3a1%2c%27money%27%3a2%2c%27mode%27%3a1%2c%27desc%27%3a%27%5b%u4e94%u661f_%u76f4%u9009%u590d%u5f0f%5d+4%2c4%2c4%2c4%2c4%27%7d& * lt_issue_start=20150707010<_total_nums=1<_total_money=2<_trace_if=yes<_trace_stop=yes<_trace_times_margin=1<_trace_margin=50<_trace_times_same=1& * lt_trace_diff=1<_trace_times_diff=2<_trace_count_input=10<_trace_money=20<_trace_issues%5b%5d=20150707011<_trace_issues%5b%5d=20150707012<_trace_issues%5b%5d= * 20150707013<_trace_issues%5b%5d=20150707014<_trace_times_20150707011=1<_trace_times_20150707012=2<_trace_times_20150707013=3<_trace_times_20150707014=4&randomNum=4371 */ int pmode = -1; int.TryParse(Request.Params["pmode"], out pmode); string projects = Request.Params["lt_project[]"]; //投注内容 string issueCode = Request.Params["lt_issue_start"]; //投注期号 bool lt_trace_if = Request.Params["lt_trace_if"] == "yes"; //是否追号 string lt_trace_stop = Request.Params["lt_trace_stop"]; //是否中奖后自动停止 string lt_trace_issues = Request.Params["lt_trace_issues[]"]; //追号期数 string lotteryStr = Request.Params["lotteryid"]; //彩种。。 int lotteryid = -1; if (!int.TryParse(lotteryStr, out lotteryid)) { AppGlobal.RenderResult(ApiCode.ParamEmpty); return; } //追号倍数 lt_trace_times_期号 if (string.IsNullOrEmpty(projects) || string.IsNullOrEmpty(issueCode)) { AppGlobal.RenderResult(ApiCode.ParamEmpty); return; } projects = "[" + projects + "]"; var bettingInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <List <HtmlParamDto> >(projects);//投注内容 if (bettingInfo.Count < 1) { AppGlobal.RenderResult(ApiCode.ParamEmpty); return; } var user = this.mSysUserService.Get(this.LoginUserId);//获取用户返点 if (null == user) { AppGlobal.RenderResult(ApiCode.Fail); return; } BettingDTO betting = new BettingDTO(); betting.BetDetails = new List <BetDetailDTO>(); betting.IsAutoStop = lt_trace_stop == "yes"; //是否自动停止追号 try { foreach (var item in bettingInfo) { if (string.IsNullOrEmpty(item.codes)) { continue; } if (!string.IsNullOrEmpty(item.poschoose)) { item.codes += "_" + item.poschoose; } var details = new BetDetailDTO() { PalyRadioCode = item.methodid, Model = item.mode - 1, Multiple = item.times, PrizeType = item.omodel == 2 ? 0 : 1,//omodel为2则表示舍弃返点的最高奖金 奖金类型 1 为有返点 0为无返点 IssueCode = issueCode, BetContent = item.codes, }; List <BetDetailDTO> appendSource = PostionSplitHelper.Split(details); betting.BetDetails.AddRange(appendSource); } //组织追号数据 if (lt_trace_if && !string.IsNullOrEmpty(lt_trace_issues)) { //追号,组织追号数据 betting.CatchDtos = new List <CatchDto>(); foreach (var item in lt_trace_issues.Split(',')) { int outMultiple = 0; if (!int.TryParse(Request.Params["lt_trace_times_" + item], out outMultiple)) { continue; } betting.CatchDtos.Add(new CatchDto() { IssueCode = item, Multiple = outMultiple }); } } ApiCode errorCode = ApiCode.Success; bool isCompled = false; if (lt_trace_if)//追号 { isCompled = this.CatchBetting(user, betting, ref errorCode, lotteryid, true); } else { isCompled = DefaultDetails(user, betting.BetDetails, ref errorCode, lotteryid, true);//普通投注 } if (isCompled) { AppGlobal.RenderResult(ApiCode.Success); } else { AppGlobal.RenderResult(errorCode); } } catch (Exception ex) { Ytg.Scheduler.Comm.LogManager.Error("HtmlAddBetDetails", ex); AppGlobal.RenderResult(ApiCode.Exception); } }