Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <summary>
        /// html 版投注处理
        /// </summary>
        private void HtmlAddBetDetails()
        {
            /*
             * loginUserId=63&lotterycode=cqssc&lotteryid=1&play_source=&pmode=2&lt_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&lt_total_nums=1&lt_total_money=2&lt_trace_if=yes&lt_trace_stop=yes&lt_trace_times_margin=1&lt_trace_margin=50&lt_trace_times_same=1&
             * lt_trace_diff=1&lt_trace_times_diff=2&lt_trace_count_input=10&lt_trace_money=20&lt_trace_issues%5b%5d=20150707011&lt_trace_issues%5b%5d=20150707012&lt_trace_issues%5b%5d=
             * 20150707013&lt_trace_issues%5b%5d=20150707014&lt_trace_times_20150707011=1&lt_trace_times_20150707012=2&lt_trace_times_20150707013=3&lt_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);
            }
        }