示例#1
0
        /// <summary>
        /// 保存庄家的投注
        /// </summary>
        /// <param name="amount">庄家的投注总悦豆</param>
        /// <param name="guess"></param>
        /// <returns></returns>
        private void SaveDeclarerBet(string betType, int amount, Guess guess)
        {
            Response rsp = ResultHelper.CreateResponse();

            //扣除庄家的悦豆
            rsp = GuessHelper.Instance.AddOrSubYueDou(-amount, guess.CreatorId);
            SystemHelper.CheckResponseIfError(rsp);

            // 插入庄家的投注记录
            GuessBet          obj     = new GuessBet();
            List <EntityBase> entites = new List <EntityBase>();

            entites.Add(obj);
            obj.RowState = RowState.Added;
            obj.Amount   = amount;
            obj.GuessId  = guess.Id;
            obj.UserId   = guess.CreatorId;
            obj.BetType  = betType;
            obj.TrySetNewEntity();

            rsp = DbContext.GetInstance().Execute(CommandHelper.CreateSave(entites));
            SystemHelper.CheckResponseIfError(rsp);

            //插入悦豆消费账单
            var yueDouFlow = new YueDouFlow();

            yueDouFlow.Amount   = -amount;
            yueDouFlow.UserId   = guess.CreatorId;
            yueDouFlow.FlowType = GuessDic.GuessCost;
            yueDouFlow.GuessId  = guess.Id;
            rsp = GuessHelper.Instance.AddYueDouFlow(yueDouFlow);
            SystemHelper.CheckResponseIfError(rsp);
        }
示例#2
0
        /// <summary>
        /// 添加悦豆消费充值账单记录
        /// </summary>
        /// <returns></returns>
        public Response AddYueDouFlow(YueDouFlow obj)
        {
            List <EntityBase> entites = new List <EntityBase>();

            entites.Add(obj);
            obj.RowState = RowState.Added;
            obj.TrySetNewEntity();
            var result = DbContext.GetInstance().Execute(CommandHelper.CreateSave(entites));

            return(result);
        }
示例#3
0
        /// <summary>
        /// 增减庄家的悦豆
        /// 业务逻辑:
        /// 如果输的一方全部陪给赢的一方, 钱还不够, 就从庄家哪里扣.
        /// 如果输的一方赔完了,输的那方还有剩, 就把这剩的钱给庄家.
        /// </summary>
        /// <param name="guess"></param>
        /// <param name="totalYuedou"></param>
        /// <param name="bingoTotalYueDou"></param>
        /// <param name="declarerDeposit">庄家的钱</param>
        /// <returns></returns>
        public Response AddOrSubDeclarerYueDou(Guess guess, int totalYuedou
                                               , int bingoTotalYueDou, int declarerDeposit, string betType)
        {
            Response rsp = ResultHelper.CreateResponse();
            //悦豆账单实体
            var yueDouFlow = new YueDouFlow();

            yueDouFlow.UserId       = guess.CreatorId;
            yueDouFlow.FlowType     = GuessDic.GuessEarn;
            yueDouFlow.GameId       = guess.GuessVSDetail.GameId;
            yueDouFlow.GuessId      = guess.Id;
            yueDouFlow.GuessBetType = betType;

            var defeatTotal     = totalYuedou - bingoTotalYueDou;                //输方总悦豆
            var differenceValue = defeatTotal - guess.NeedPayToBingoTotalYueDou; //用输方的钱来支付, 看是余还是差

            if (differenceValue == 0)                                            //刚好够,庄家的钱不扣, 本金原路返回到他的账户
            {
                //返还悦豆
                rsp = GuessHelper.Instance.AddOrSubYueDou(declarerDeposit, guess.CreatorId);
                //记录账单
                yueDouFlow.Amount = declarerDeposit;
                rsp = GuessHelper.Instance.AddYueDouFlow(yueDouFlow);
            }
            else if (differenceValue > 0)//有余, 就将余下的钱返给庄家(含本金), 返前扣除手续费
            {
                //返还悦豆
                var serviceCharge    = differenceValue * (UserHelper.GetConfig().GuessServiceCharge / 100);//手续费
                var earnValueDecimal = differenceValue - serviceCharge;
                var earnYueDou       = Convert.ToInt32(earnValueDecimal);
                var amount           = declarerDeposit + earnYueDou;//本金+赚得的
                rsp = GuessHelper.Instance.AddOrSubYueDou(amount, guess.CreatorId);
                //记录账单
                yueDouFlow.Amount        = amount;
                yueDouFlow.ServiceCharge = serviceCharge;
                rsp = GuessHelper.Instance.AddYueDouFlow(yueDouFlow);
            }
            else if (differenceValue < 0)//不够,就从庄家押金里面扣, 将剩余的再返给庄家账户
            {
                var restOfValueDecimal = declarerDeposit + differenceValue;
                if (restOfValueDecimal > 0)
                {
                    var restOfValue = Convert.ToInt32(restOfValueDecimal);
                    rsp = GuessHelper.Instance.AddOrSubYueDou(restOfValue, guess.CreatorId);
                    //记录账单
                    yueDouFlow.Amount = restOfValue;
                    rsp = GuessHelper.Instance.AddYueDouFlow(yueDouFlow);
                }
            }

            SystemHelper.CheckResponseIfError(rsp);
            return(rsp);
        }
示例#4
0
        public Response Execute(User currentUser, string request)
        {
            var      req = JsonConvert.DeserializeObject <Request <VipPayInfo> >(request);
            var      obj = req.FirstEntity();
            Response rsp = ResultHelper.CreateResponse();

            //判断余额是否够
            if (!GuessHelper.Instance.IsBalanceSufficient(obj.CurrentUserId, obj.YueDouAmount))
            {
                return(ResultHelper.Fail("没有足够的悦豆余额, 请充值"));
            }

            //扣除悦豆
            rsp = GuessHelper.Instance.AddOrSubYueDou(-obj.YueDouAmount, obj.CurrentUserId);
            //插入悦豆账单
            if (rsp.IsSuccess)
            {
                var yueDouFlow = new YueDouFlow();
                yueDouFlow.Amount   = -obj.YueDouAmount;
                yueDouFlow.UserId   = obj.CurrentUserId;
                yueDouFlow.FlowType = GuessDic.VenueCost;
                rsp = GuessHelper.Instance.AddYueDouFlow(yueDouFlow);
            }

            //增加场馆创建者的悦豆数
            Venue venue = VenueHelper.Instance.GetVenueById(obj.VenueId);

            if (rsp.IsSuccess)
            {
                rsp = GuessHelper.Instance.AddOrSubYueDou(obj.YueDouAmount, venue.CreatorId);
                //插入悦豆账单
                var yueDouFlow = new YueDouFlow();
                yueDouFlow.Amount   = obj.YueDouAmount;
                yueDouFlow.UserId   = venue.CreatorId;
                yueDouFlow.FlowType = GuessDic.VenueEarn;
                rsp = GuessHelper.Instance.AddYueDouFlow(yueDouFlow);
            }

            //返回成功支付的信息
            VipUse vipUse = new VipUse();

            vipUse.OrderNo    = SystemHelper.GetSerialNo(SerialNoType.VipUse);
            vipUse.Amount     = obj.YueDouAmount;
            vipUse.Remark     = "";
            vipUse.PayDate    = DateTime.Now;
            vipUse.MasterName = venue.Name;
            rsp.Entities.Add(vipUse);
            return(rsp);
        }
示例#5
0
        /// <summary>
        /// 撤销庄家的投注
        /// </summary>
        /// <param name="amount">庄家之前的投注总悦豆</param>
        /// <param name="guess"></param>
        /// <returns></returns>
        private Response UndoDeclarerBet(string betType, int amount, Guess guess)
        {
            Response rsp = ResultHelper.CreateResponse();

            if (amount > 0)
            {
                //返回庄家的悦豆
                rsp = GuessHelper.Instance.AddOrSubYueDou(amount, guess.CreatorId);
                SystemHelper.CheckResponseIfError(rsp);
                //插入悦豆返回账单
                var yueDouFlow = new YueDouFlow();
                yueDouFlow.Amount   = amount;
                yueDouFlow.UserId   = guess.CreatorId;
                yueDouFlow.FlowType = GuessDic.DepositReturn;
                yueDouFlow.GuessId  = guess.Id;
                rsp = GuessHelper.Instance.AddYueDouFlow(yueDouFlow);
                SystemHelper.CheckResponseIfError(rsp);
            }

            //删除庄家的投注记录
            var sql = @"
 DELETE FROM dbo.GuessBet 
 WHERE
		GuessId=@GuessId
		AND UserId=@UserId
		AND BetType=@BetType

";
            var cmd = CommandHelper.CreateText <ClubUser>(FetchType.Execute, sql);

            cmd.Params.Add("@GuessId", guess.Id);
            cmd.Params.Add("@UserId", guess.CreatorId);
            cmd.Params.Add("@BetType", betType);
            rsp = DbContext.GetInstance().Execute(cmd);
            SystemHelper.CheckResponseIfError(rsp);

            return(rsp);
        }
示例#6
0
        /// <summary>
        /// 返悦豆给用户
        /// </summary>
        /// <param name="bingoBetList"></param>
        /// <param name="guess"></param>
        /// <param name="odds">赔率</param>
        /// <returns></returns>
        public Response BackYueDouToUser(List <GuessBet> bingoBetList, Guess guess, decimal odds)
        {
            Response rsp = ResultHelper.CreateResponse();
            int      NeedPayToBingoTotalYueDou = 0;

            foreach (var item in bingoBetList)
            {
                var     earnYueDou               = item.Amount * (odds - 1);                                       //赚得的悦豆
                var     serviceChargeDecimal     = earnYueDou * (UserHelper.GetConfig().GuessServiceCharge / 100); //手续费
                int     serviceCharge            = Convert.ToInt32(serviceChargeDecimal);                          //舍弃小数位,少收点手续费
                decimal finalEarn                = earnYueDou - serviceCharge;                                     //最后赚的
                var     returnYuedouTotalDecimal = item.Amount + finalEarn;                                        //返回的总悦豆=本金+最后赚得
                int     returnYuedouTotal        = Convert.ToInt32(returnYuedouTotalDecimal);                      //返回的总悦豆,舍弃小数位
                //返还悦豆给此用户
                rsp = GuessHelper.Instance.AddOrSubYueDou(returnYuedouTotal, item.UserId);
                SystemHelper.CheckResponseIfError(rsp);

                //保存此用户的悦豆账单(含手续费数据)
                var yueDouFlow = new YueDouFlow();
                yueDouFlow.Amount        = returnYuedouTotal;//返回的总悦豆-本金=赚的
                yueDouFlow.UserId        = item.UserId;
                yueDouFlow.FlowType      = GuessDic.GuessEarn;
                yueDouFlow.ServiceCharge = serviceCharge;
                yueDouFlow.GameId        = guess.GuessVSDetail.GameId;
                yueDouFlow.GuessId       = guess.Id;
                rsp = GuessHelper.Instance.AddYueDouFlow(yueDouFlow);
                SystemHelper.CheckResponseIfError(rsp);

                //累计需要支付的总悦豆
                NeedPayToBingoTotalYueDou += Convert.ToInt32(earnYueDou);
            }
            rsp.IsSuccess = true;
            guess.NeedPayToBingoTotalYueDou = NeedPayToBingoTotalYueDou;

            return(rsp);
        }
示例#7
0
        public Response Execute(User currentUser, string request)
        {
            var      req      = JsonConvert.DeserializeObject <Request <GuessBet> >(request);
            var      guessBet = req.FirstEntity();
            Response rsp      = ResultHelper.CreateResponse();

            //检查数据,避免脏数据(BetVSId 和 LeftScore,RightScore 互斥,只存在一种数据)
            if (!string.IsNullOrEmpty(guessBet.BetVSId))
            {
                guessBet.LeftScore  = 0;
                guessBet.RightScore = 0;
                guessBet.BetType    = GuessDic.VictoryDefeat; //胜负投注
            }
            if (guessBet.LeftScore != 0 && guessBet.RightScore != 0)
            {
                guessBet.BetVSId = "";
                guessBet.BetType = GuessDic.Score; //比分投注
            }

            //判断余额是否够
            if (!GuessHelper.Instance.IsBalanceSufficient(guessBet.UserId, guessBet.Amount))
            {
                return(ResultHelper.Fail(ErrorCode.YUEDOU_INSUFFICIENT, ""));
            }
            //设置对阵信息(后面好用)
            var guess = GuessHelper.Instance.GetGuess(guessBet.GuessId);

            guess.GuessVSDetail = GuessHelper.Instance.GetVSDetail(guess);
            //检查能否投注
            string errorMsg = CheckCanBetInPool(guess, guessBet);

            if (!string.IsNullOrEmpty(errorMsg))
            {
                return(ResultHelper.Fail(errorMsg));
            }

            //扣除余额
            rsp = GuessHelper.Instance.AddOrSubYueDou(-guessBet.Amount, guessBet.UserId);
            if (!rsp.IsSuccess)
            {
                return(rsp);
            }
            //插入投注记录
            List <EntityBase> entites = new List <EntityBase>();

            entites.Add(guessBet);

            if (guessBet.RowState == RowState.Added)
            {
                if (!string.IsNullOrEmpty(guessBet.BetVSId))
                {
                    guessBet.BetType = GuessDic.VictoryDefeat;
                }
                else
                {
                    guessBet.BetType = GuessDic.Score;
                }

                guessBet.TrySetNewEntity();
            }

            var result = DbContext.GetInstance().Execute(CommandHelper.CreateSave(entites));

            //插入悦豆消费账单
            if (result.IsSuccess)
            {
                var yueDouFlow = new YueDouFlow();
                yueDouFlow.Amount   = -guessBet.Amount;
                yueDouFlow.UserId   = guessBet.UserId;
                yueDouFlow.FlowType = GuessDic.GuessCost;
                yueDouFlow.GuessId  = guessBet.GuessId;
                result = GuessHelper.Instance.AddYueDouFlow(yueDouFlow);
            }
            return(result);
        }