Пример #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);
        }
Пример #2
0
        /// <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);
        }