/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }
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); }