Exemplo n.º 1
0
 private async Task <bool> UpdateBonusInDatabase(BonusEntity bonus)
 {
     using (var db = databaseManager.GetWritableDatabase())
     {
         var bonusEntity = new BonusEntity
         {
             UserId       = bonus.UserId,
             GameId       = bonus.GameId,
             Guid         = bonus.Guid,
             Data         = bonus.Data,
             BonusType    = bonus.BonusType,
             Version      = bonus.Version,
             IsOptional   = bonus.IsOptional,
             IsStarted    = bonus.IsStarted,
             RoundId      = bonus.RoundId,
             BetReference = bonus.BetReference,
             BnsClsId     = bonus.BnsClsId,
             ClientId     = bonus.ClientId,
             Order        = bonus.Order,
             IsFreeGame   = bonus.IsFreeGame,
             CampaignId   = bonus.CampaignId
         };
         db.InsertOrUpdate(bonusEntity, bonus.UserId, bonus.GameId);
         return(await db.SaveChangesAsync() > 0);
     }
 }
Exemplo n.º 2
0
        public BonusDTO ToDTO(BonusEntity model)
        {
            BonusDTO dto = new BonusDTO();

            dto.ID         = model.ID;
            dto.UserID     = model.UserID;
            dto.TypeID     = model.TypeID;
            dto.Amount     = model.Amount;
            dto.Sf         = model.Sf;
            dto.Revenue    = model.Revenue;
            dto.AddTime    = model.AddTime;
            dto.IsSettled  = model.IsSettled;
            dto.SttleTime  = model.SttleTime;
            dto.Bonus001   = model.Bonus001;
            dto.Bonus002   = model.Bonus002;
            dto.Bonus003   = model.Bonus003;
            dto.Bonus004   = model.Bonus004;
            dto.Bonus005   = model.Bonus005;
            dto.Bonus006   = model.Bonus006;
            dto.Bonus007   = model.Bonus007;
            dto.UserCode   = model.Users.UserCode;
            dto.TrueName   = model.Users.TrueName;
            dto.TypeName   = model.BonusTypes.TypeName;
            dto.TypeNameEn = model.BonusTypes.TypeNameEn;
            dto.SettleName = model.IsSettled == 0 ? "未结算" : "已结算";
            return(dto);
        }
Exemplo n.º 3
0
        private static SummaryData ExecuteBonus(int level, RequestContext <BonusArgs> requestContext, GeniesLuckResult result)
        {
            var bonus           = module.CreateBonus(result);
            var geniesLuckBonus = bonus.Value as GeniesLuckBonus;
            var entity          = new BonusEntity
            {
                UserId       = -1,
                GameId       = GameId,
                Guid         = geniesLuckBonus.Guid.ToString("N"),
                Data         = Model.Utility.Extension.ToByteArray(geniesLuckBonus),
                BonusType    = bonus.GetType().Name,
                Version      = 3,
                RoundId      = 1,
                BetReference = ""
            };

            var summData = new SummaryData();

            do
            {
                var freeSpinResult = module.ExecuteBonus(level, entity, requestContext).Value as GeniesLuckBonusSpinResult;
                var spinResult     = freeSpinResult.SpinResult;
                switch (freeSpinResult.GameResultType)
                {
                case Model.GameResultType.FreeSpinResult:
                    summData.FSWin += freeSpinResult.Win;
                    summData.FSpinCounter++;
                    break;

                case Model.GameResultType.CollapsingSpinResult:
                    summData.ReSpinWin += freeSpinResult.Win;
                    break;

                case Model.GameResultType.FreeSpinCollapsingSpinResult:
                    summData.ReSpinFSWin += freeSpinResult.Win;
                    break;
                }

                if (spinResult.HasBonus)
                {
                    if (spinResult.Bonus.ClientId == 3)
                    {
                        summData.FgFHit++;
                    }
                    else
                    {
                        summData.FgReHit++;
                    }
                }

                if (freeSpinResult.IsCompleted)
                {
                    break;
                }
                entity.Data = Model.Utility.Extension.ToByteArray(freeSpinResult.Bonus);
            } while (true);
            return(summData);
        }
Exemplo n.º 4
0
        private async Task <bool> UpdateBonusInCache(UserSession userSession, BonusEntity bonus)
        {
            await cache.SetAsync(userSession.SessionKey, bonus, new DistributedCacheEntryOptions
            {
                SlidingExpiration = TimeSpan.FromMinutes(5)
            });

            return(true);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 计算购物奖
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="orderCode"></param>
        /// <param name="profit">支付积分部分</param>
        /// <param name="buyerId"></param>
        /// <returns></returns>
        public async Task <bool> CalcAwardBuy(long orderId, string orderCode, decimal profit, long buyerId)
        {
            if (profit <= 0)
            {
                return(true);
            }
            using (MyDbContext dbc = new MyDbContext())
            {
                int     journalTypeId = 1;
                decimal parm;
                decimal.TryParse(await dbc.GetParameterAsync <SettingEntity>(s => s.Name == "购物奖励", s => s.Param), out parm);
                var user = await dbc.GetAll <UserEntity>().Where(u => u.IsNull == false).SingleOrDefaultAsync(u => u.Id == buyerId);

                decimal bonus = profit * (parm / 100);

                user.FrozenAmount = user.FrozenAmount + bonus;

                BonusEntity entity = new BonusEntity();
                entity.UserId     = user.Id;
                entity.Amount     = bonus;
                entity.Revenue    = 0;
                entity.sf         = bonus;
                entity.TypeID     = 3; //购物奖励
                entity.Source     = "用户(" + user.Mobile + ")购买商品,获得购物奖励";
                entity.FromUserID = user.Id;
                entity.IsSettled  = 1;
                dbc.Bonus.Add(entity);

                JournalEntity journal1 = new JournalEntity();
                journal1.UserId        = user.Id;
                journal1.BalanceAmount = user.FrozenAmount;
                journal1.InAmount      = bonus;
                journal1.Remark        = "用户(" + user.Mobile + ")购买商品,获得购物奖励";
                journal1.JournalTypeId = journalTypeId;
                journal1.OrderCode     = orderCode;
                journal1.GoodsId       = orderId;//来至订单ID
                journal1.CurrencyType  = (int)CurrencyEnums.碳积分;
                dbc.Journals.Add(journal1);
                await dbc.SaveChangesAsync();

                //累计业绩
                int flag = await dbc.Database.ExecuteSqlCommandAsync("exec proc_Sroce @UserId = " + user.Id + ",@sroce = " + bonus);

                log.DebugFormat($"购物奖励 累计业绩 CalcAwardBuy:{flag},orderCode:{orderCode},buyerId:{buyerId}");
                //极差奖
                bool result = await CalcAwardLevelDiff(orderId, orderCode, bonus, buyerId);

                log.DebugFormat($"购物奖励 极差奖 CalcAwardLevelDiff:{result},orderCode:{orderCode},buyerId:{buyerId}");
                //极差奖 平分
                result = await CalcAwardLevelDiffMaxAvg(orderId, orderCode, bonus, buyerId, user.Mobile);

                log.DebugFormat($"购物奖励 极差奖 平分 CalcAwardLevelDiffMaxAvg:{result},orderCode:{orderCode},buyerId:{buyerId}");

                return(true);
            }
        }
Exemplo n.º 6
0
        public Result <BonusResult, ErrorCode> ExecuteBonus(int level, BonusEntity bonus, RequestContext <BonusArgs> requestContext)
        {
            var bns = bonus.Data.FromByteArray <Bonus>();

            if (bns is BullRushFreeSpinBonus fb)
            {
                return(BullRushFreeSpinFeature.Execute(level, requestContext, fb, bonus));
            }
            else if (bns is BullRushJackpotBonus jpb)
            {
                return(BullRushJackPotFeature.Execute(level, requestContext, jpb, bonus));
            }

            return(ErrorCode.NonexistenceBonus);
        }
Exemplo n.º 7
0
        public async Task <bool> DeleteAsync(long id)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                BonusEntity entity = await dbc.GetAll <BonusEntity>().SingleOrDefaultAsync(g => g.Id == id);

                if (entity == null)
                {
                    return(false);
                }
                entity.IsDeleted = true;
                await dbc.SaveChangesAsync();

                return(true);
            }
        }
Exemplo n.º 8
0
 private async Task <bool> RemoveBonusFromDatabase(BonusEntity bonus)
 {
     using (var db = databaseManager.GetWritableDatabase())
     {
         var entity = db.Bonuses
                      .Where(x => x.UserId == bonus.UserId)
                      .Where(x => x.GameId == bonus.GameId)
                      .AsNoTracking()
                      .SingleOrDefault();
         if (entity != null)
         {
             db.Bonuses.Remove(entity);
             return(await db.SaveChangesAsync() > 0);
         }
         return(false);
     }
 }
Exemplo n.º 9
0
        public async Task <bool> ActivateAllAsync(long[] ids)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                //批量激活会员
                foreach (var id in ids)
                {
                    UserEntity entity = await dbc.GetAll <UserEntity>().Where(u => u.IsNull == false).SingleOrDefaultAsync(u => u.Id == id);

                    if (entity == null)
                    {
                        return(false);
                    }
                    decimal givingAmount = await dbc.GetDecimalParamAsync("激活赠送积分数量");

                    entity.IsUpgraded = true;
                    entity.Amount     = entity.Amount + givingAmount;

                    BonusEntity bonus = new BonusEntity();
                    bonus.UserId     = entity.Id;
                    bonus.Amount     = givingAmount;
                    bonus.Revenue    = 0;
                    bonus.sf         = givingAmount;
                    bonus.TypeID     = 1; //购买课程奖励
                    bonus.Source     = "用户(" + entity.Mobile + ")后台激活成功,获赠碳积分";
                    bonus.FromUserID = entity.Id;
                    bonus.IsSettled  = 1;
                    dbc.Bonus.Add(bonus);

                    JournalEntity journal = new JournalEntity();
                    journal.UserId        = entity.Id;
                    journal.BalanceAmount = entity.Amount;
                    journal.InAmount      = givingAmount;
                    journal.Remark        = "用户(" + entity.Mobile + ")后台激活成功,获赠碳积分";
                    journal.JournalTypeId = (int)JournalTypeEnum.会员激活;
                    journal.OrderCode     = "";
                    journal.GoodsId       = 0;//来至订单ID
                    journal.CurrencyType  = (int)CurrencyEnums.碳积分;
                    dbc.Journals.Add(journal);
                }
                await dbc.SaveChangesAsync();

                return(true);
            }
        }
Exemplo n.º 10
0
        public async Task <long> AddAsync(long userId, decimal amount, decimal revenue, decimal sf, string source, long fromUserID, int isSettled)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                BonusEntity entity = new BonusEntity();
                entity.UserId     = userId;
                entity.Amount     = amount;
                entity.Revenue    = revenue;
                entity.sf         = sf;
                entity.Source     = source;
                entity.FromUserID = fromUserID;
                entity.IsSettled  = isSettled;
                dbc.Bonus.Add(entity);
                await dbc.SaveChangesAsync();

                return(entity.Id);
            }
        }
Exemplo n.º 11
0
        public BonusDTO ToDTO(BonusEntity entity)
        {
            BonusDTO dto = new BonusDTO();

            dto.Source     = entity.Source;
            dto.TypeID     = entity.TypeID;
            dto.CreateTime = entity.CreateTime;
            dto.Id         = entity.Id;
            dto.Amount     = entity.Amount;
            dto.Revenue    = entity.Revenue;
            dto.sf         = entity.sf;
            dto.UserId     = entity.UserId;
            dto.IsSettled  = entity.IsSettled;
            dto.SttleTime  = entity.SttleTime;
            dto.FromUserID = entity.FromUserID;
            dto.UserMobile = entity.User.Mobile;
            return(dto);
        }
Exemplo n.º 12
0
        public Bonus ConvertToBonus(BonusEntity bonusEntity)
        {
            Bonus bonus = null;

            if (bonusEntity.Data != null)
            {
                if (bonusEntity.BonusType == nameof(BullRushFreeSpinBonus))
                {
                    bonus = bonusEntity.Data.FromByteArray <BullRushFreeSpinBonus>() ?? new BullRushFreeSpinBonus();
                }
                else if (bonusEntity.BonusType == nameof(BullRushJackpotBonus))
                {
                    bonus = bonusEntity.Data.FromByteArray <BullRushJackpotBonus>() ?? new BullRushJackpotBonus();
                }
            }

            return(bonus);
        }
Exemplo n.º 13
0
 /// <summary>
 /// 添加奖项记录
 /// </summary>
 /// <param name="UserID"></param>
 /// <param name="TypeID"></param>
 /// <param name="Amount"></param>
 /// <param name="Sf"></param>
 /// <param name="Revenue"></param>
 /// <param name="IsSettled"></param>
 /// <param name="Remark"></param>
 /// <param name="RemarkEn"></param>
 /// <returns></returns>
 public long Add(long UserID, int TypeID, decimal Amount, decimal Sf, decimal Revenue, int IsSettled, string Remark, string RemarkEn)
 {
     using (MyDbContext dbcontext = new MyDbContext())
     {
         BonusEntity model = new BonusEntity();
         model.UserID    = UserID;
         model.TypeID    = TypeID;
         model.Amount    = Amount;
         model.Revenue   = Revenue;
         model.Sf        = Sf;
         model.AddTime   = DateTime.Now;
         model.IsSettled = IsSettled;
         model.Source    = Remark;
         model.SourceEn  = RemarkEn;
         dbcontext.Bonus.Add(model);
         dbcontext.SaveChanges();
         return(model.ID);
     }
 }
Exemplo n.º 14
0
        public async Task <ValidateBonusResponseModel> ValidBonus(ValidateBonusRequetsModel validateBonusRequetsModel)
        {
            ValidateBonusRequetsContract  bonusRequest  = _mapper.Map <ValidateBonusRequetsContract>(validateBonusRequetsModel);
            ValidateBonusResponseContract bonusResponse = await _wSValidBonoRepository.ValidBonus(bonusRequest);

            bonusResponse.codigoBono = bonusRequest.codigoBono;

            var bono = _bonusDataRepository.GetByCode(bonusRequest.codigoBono);

            if (bono == null)
            {
                BonusEntity entity = _mapper.Map <BonusEntity>(bonusResponse);
                entity.UserName = validateBonusRequetsModel.UserName;
                _bonusDataRepository.Insert(entity);
            }


            return(_mapper.Map <ValidateBonusResponseModel>(bonusResponse));
        }
Exemplo n.º 15
0
        public BonusNoticeInfo AddBonusNotify(string xml)
        {
            BonusNoticeInfo info = XmlAnalyzer.AnalyseXmlToCommunicationObject <BonusNoticeInfo>(xml);

            try
            {
                BonusEntity bonusEntity = new BonusEntity();
                bonusEntity.GameName      = info._Body._BonusInfo._Issue.GameName;
                bonusEntity.IssuseNumber  = info._Body._BonusInfo._Issue.Number;
                bonusEntity.BonusNumber   = info._Body._BonusInfo.BonusNumber;
                bonusEntity.TotalItems    = info._Body._BonusInfo.TotalItems;
                bonusEntity.TotalMoney    = info._Body._BonusInfo.TotalMoney;
                bonusEntity.NoticeId      = info.Id;
                bonusEntity.IsDistributed = false;
                using (ILHDBTran tran = BeginTran())
                {
                    BonusManager bonusManager = new BonusManager(tran);
                    bonusManager.AddBonus(bonusEntity);
                    List <BonusDetailEntity> bonusDetailList = new List <BonusDetailEntity>();
                    foreach (BonusMappingInfo.BonusItem bonusItem in info._Body._BonusInfo._BonusItemList)
                    {
                        BonusDetailEntity detail = new BonusDetailEntity();
                        detail.TicketId     = bonusItem.TicketId;
                        detail.BonusLevel   = bonusItem.BonusLevel;
                        detail.PlayType     = (int)bonusItem.PlayType;
                        detail.Money        = bonusItem.Money;
                        detail.IsBombBonus  = bonusItem.IsBombBonus;
                        detail.Size         = bonusItem.Size;
                        detail.GameName     = bonusEntity.GameName;
                        detail.IssuseNumber = bonusEntity.IssuseNumber;
                        bonusManager.AddBonusDetail(detail);
                    }
                    tran.Commit();
                }
                return(info);
            }
            catch (Exception ex)
            {
                string errMsg = "添加返奖通知失败!" + xml;
                throw HandleException(LogCategory.Notice, errMsg, ex);
            }
        }
Exemplo n.º 16
0
        private decimal TestPayout(string strwheel, decimal betperline, Func <int, int, int[], Wheel> wheelEncoding)
        {
            var sdt = DateTime.Now;

            var serviceProvider = new ServiceCollection()
                                  .AddLogging()
                                  .BuildServiceProvider();
            var logFactory = serviceProvider.GetService <ILoggerFactory>();
            var logger     = logFactory.CreateLogger <ChessRoyaleModule>();

            var chessRoyaleModule = new ChessRoyaleModule(logger);

            var        totalWin         = 0m;
            List <int> maxIndexPosition = new List <int>();
            RequestContext <SpinArgs> requestContext = new RequestContext <SpinArgs>("", ChessRoyaleConfiguration.GameName, PlatformType.Web);
            var summData = new SummaryData();

            Assert.That(strwheel, Is.Not.Null.Or.Empty);

            string[] arrstr = strwheel.Split(',');
            int[]    arr    = Array.ConvertAll(arrstr, int.Parse);

            UserGameKey ugk = new UserGameKey()
            {
                UserId = -1,
                GameId = ChessRoyaleConfiguration.GameId,
                Level  = 1
            };

            SpinBet sb = new SpinBet(ugk, PlatformType.None)
            {
                LineBet    = 1,
                Credits    = 0,
                Lines      = ChessRoyaleConfiguration.Lines,
                Multiplier = 1
            };

            requestContext.Currency = new Currency()
            {
                Id = sb.CurrencyId
            };
            requestContext.Parameters = new SpinArgs()
            {
                LineBet = sb.LineBet, BettingLines = sb.Lines
            };
            requestContext.GameSetting = new GameSetting()
            {
                GameSettingGroupId = sb.GameSettingGroupId
            };

            ChessRoyaleSpinResult sr = new ChessRoyaleSpinResult(ugk)
            {
                SpinBet = new SpinBet(ugk, PlatformType.None)
                {
                    Lines      = ChessRoyaleConfiguration.Lines,
                    Multiplier = 1,
                    LineBet    = betperline
                },

                Wheel = wheelEncoding(ChessRoyaleConfiguration.Width, ChessRoyaleConfiguration.Height, arr)
            };


            totalWin = ChessRoyaleCommon.CalculateWin(sr, 1);

            if (sr.HasBonus)
            {
                var bonusCreated = chessRoyaleModule.CreateBonus(sr);

                var bonus = bonusCreated.Value;

                bonus.SpinTransactionId = sr.TransactionId;
                bonus.GameResult        = sr;

                RequestContext <BonusArgs> requestBonusContext = new RequestContext <BonusArgs>("", ChessRoyaleConfiguration.GameName, PlatformType.Web);

                requestBonusContext.Currency = new Currency()
                {
                    Id = sb.CurrencyId
                };
                requestBonusContext.Parameters = new BonusArgs()
                {
                    Bonus = "CollapsingSpin"
                };
                requestBonusContext.GameSetting = new GameSetting()
                {
                    GameSettingGroupId = sb.GameSettingGroupId
                };

                BonusResult bonusResult;
                int         step = bonus.CurrentStep;

                do
                {
                    var entity = new BonusEntity
                    {
                        UserId     = ugk.UserId,
                        GameId     = ChessRoyaleConfiguration.GameId,
                        Guid       = bonus.Guid.ToString("N"),
                        Data       = bonus.ToByteArray(),
                        BonusType  = bonus.GetType().Name,
                        Version    = 2,
                        IsOptional = bonus.IsOptional,
                        IsStarted  = bonus.IsStarted,
                        RoundId    = sr.RoundId
                    };

                    bonusResult = chessRoyaleModule.ExecuteBonus(ChessRoyaleConfiguration.LevelOne, entity, requestBonusContext).Value;
                    var chessRoyaleFreeSpinResult = bonusResult as ChessRoyaleFreeSpinResult;

                    var win = chessRoyaleFreeSpinResult.Win;

                    if (win > 0)
                    {
                        totalWin += win;
                    }

                    bonus = bonusResult.Bonus;
                }while (!bonusResult.IsCompleted && bonusResult.Bonus != null);
            }

            Console.WriteLine($"Win            : {totalWin}");
            return(totalWin);
        }
Exemplo n.º 17
0
        public void TestExecuteBonus()
        {
            // Arrange
            var user       = new UserGameKey(-1, 104);
            var spinResult = new Games.DragonRiches.DragonRichesResult();
            var reels      = new List <int[]>
            {
                new[] { 0, 6, 10 },
                new[] { 6, 9, 12 },
                new[] { 6, 9, 13 },
                new[] { 9, 11, 12, },
                new[] { 12, 10, 13 }
            };

            spinResult.Bonus          = new Stake(Guid.NewGuid(), 3);
            spinResult.Bonus.Count    = 6;
            spinResult.Wheel          = new Games.DragonRiches.DragonRichesWheel();
            spinResult.BonusPositions = new List <BonusPosition> {
                new BonusPosition {
                    Line = 1, Multiplier = 1, RowPositions = new List <int> {
                        0, 2, 2, 1, 0
                    }
                }
            };
            spinResult.SpinBet = new SpinBet(user, PlatformType.None)
            {
                Lines   = 30,
                LineBet = 1.0m
            };
            var userSession = new UserSession
            {
                SessionKey = "unittest",
                UserId     = -1
            };
            var requestContext = new RequestContext <SpinArgs>("simulation", "Dragon Riches", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
                Game  = new Game {
                    Id = 104
                }
            };
            var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Dragon Riches", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            requestBonusContext.UserSession = userSession;
            requestBonusContext.UserGameKey = user;
            var bonus = module.CreateBonus(spinResult).Value;

            var entity = new BonusEntity
            {
                UserId       = userSession.UserId,
                GameId       = requestContext.Game.Id,
                Guid         = bonus.Guid.ToString("N"),
                Data         = Model.Utility.Extension.ToByteArray(bonus),
                BonusType    = bonus.GetType().Name,
                Version      = 3,
                IsOptional   = bonus.IsOptional,
                IsStarted    = bonus.IsStarted,
                RoundId      = 1,
                BetReference = ""
            };

            // action
            var result = module.ExecuteBonus(1, entity, requestBonusContext).Value as Games.DragonRiches.DragonRichesBonusSpinResult;

            // assert
            Assert.NotNull(result);
            //Assert.AreEqual(true, ((DragonRichesBonus)result.Bonus).State.IsFreeSpin);
        }
Exemplo n.º 18
0
        private decimal TestCollapsingPayout(string strwheel, decimal betperline, Func <int, int, int[], Wheel> wheelEncoding)
        {
            var alchemyReelsModule = new AlchemyReelsModule(null);
            var maxWin             = 0m;
            var totalWin           = 0m;
            var maxIndexPosition   = new List <int>();
            var requestContext     = new RequestContext <SpinArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web);
            var summData           = new SummaryData();

            AlchemyReelsCommon.CreateWheels(new List <int>()
            {
                3, 3, 3
            });

            Assert.That(strwheel, Is.Not.Null.Or.Empty);

            string[] arrstr = strwheel.Split(',');
            int[]    arr    = Array.ConvertAll(arrstr, int.Parse);

            var ugk = new UserGameKey()
            {
                UserId = -1,
                GameId = AlchemyReelsConfiguration.GameId,
                Level  = 1
            };

            var sb = new SpinBet(ugk, PlatformType.None)
            {
                LineBet    = 1,
                Credits    = 0,
                Lines      = AlchemyReelsConfiguration.BettingLines,
                Multiplier = 1
            };

            requestContext.Currency = new Currency()
            {
                Id = sb.CurrencyId
            };
            requestContext.Parameters = new SpinArgs()
            {
                LineBet = sb.LineBet, BettingLines = sb.Lines
            };
            requestContext.GameSetting = new GameSetting()
            {
                GameSettingGroupId = sb.GameSettingGroupId
            };

            var sr = new AlchemyReelsCollapsingSpinResult()
            {
                SpinBet = new SpinBet(ugk, PlatformType.None)
                {
                    Lines      = AlchemyReelsConfiguration.BettingLines,
                    Multiplier = 1,
                    LineBet    = betperline
                },

                Wheel = wheelEncoding(AlchemyReelsConfiguration.Width, AlchemyReelsConfiguration.Height, arr)
            };

            sr.TopIndices = new List <int>()
            {
                6, 6, 49
            };

            totalWin = AlchemyReelsCommon.CalculateWin(sr);

            Console.WriteLine();
            Console.WriteLine("--- POSITION TABLE ---");
            foreach (AlchemyReelTableWin tw in sr.TableWins)
            {
                Console.WriteLine(String.Format("[WIN:{0} SYM:{1} COUNT:{2}]", tw.Win, tw.Card, tw.Count));
            }

            if (sr.HasBonus)
            {
                var bonusCreated = alchemyReelsModule.CreateBonus(sr);

                var bonus = bonusCreated.Value;

                bonus.SpinTransactionId = sr.TransactionId;
                bonus.GameResult        = sr;

                var requestBonusContext = new RequestContext <BonusArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web);

                requestBonusContext.Currency = new Currency()
                {
                    Id = sb.CurrencyId
                };
                requestBonusContext.Parameters = new BonusArgs()
                {
                    Bonus = "CollapsingSpin"
                };
                requestBonusContext.GameSetting = new GameSetting()
                {
                    GameSettingGroupId = sb.GameSettingGroupId
                };

                BonusResult bonusResult;
                int         step = bonus.CurrentStep;

                do
                {
                    var entity = new BonusEntity
                    {
                        UserId     = ugk.UserId,
                        GameId     = AlchemyReelsConfiguration.GameId,
                        Guid       = bonus.Guid.ToString("N"),
                        Data       = bonus.ToByteArray(),
                        BonusType  = bonus.GetType().Name,
                        Version    = 2,
                        IsOptional = bonus.IsOptional,
                        IsStarted  = bonus.IsStarted,
                        RoundId    = sr.RoundId
                    };

                    bonusResult = alchemyReelsModule.ExecuteBonus(AlchemyReelsConfiguration.LevelOne, entity, requestBonusContext).Value;
                    var alchemyFreeCollapsingSpinResult = bonusResult as AlchemyFreeCollapsingSpinResult;

                    var win = alchemyFreeCollapsingSpinResult.Win;

                    if (win > 0)
                    {
                        totalWin += win;
                    }

                    var maxTopIndices = alchemyFreeCollapsingSpinResult.SpinResult.TopIndices.ToList();

                    if (totalWin > maxWin)
                    {
                        maxWin = totalWin;

                        maxIndexPosition = maxTopIndices;
                    }

                    Console.WriteLine("--- POSITION TABLE ---");
                    foreach (AlchemyReelTableWin tw in alchemyFreeCollapsingSpinResult.SpinResult.TableWins)
                    {
                        Console.WriteLine(String.Format("[WIN:{0} SYM:{1} COUNT:{2}]", tw.Win, tw.Card, tw.Count));
                    }

                    bonus = bonusResult.Bonus;
                }while (!bonusResult.IsCompleted && bonusResult.Bonus != null);
            }

            Console.WriteLine($"Win            : {totalWin}");
            return(totalWin);
        }
Exemplo n.º 19
0
        public void TestAlchemyReels(int gameId, int level, string currencyCode, int numusers, int numItrPerUser, decimal bet, int lines, int mp)
        {
            var sdt = DateTime.Now;

            var serviceProvider = new ServiceCollection()
                                  .AddLogging()
                                  .BuildServiceProvider();
            var logFactory = serviceProvider.GetService <ILoggerFactory>();
            var logger     = logFactory.CreateLogger <AlchemyReelsModule>();

            var alchemyReelsModule = new AlchemyReelsModule(logger);
            var maxWin             = 0m;

            AlchemyReelsCommon.CreateWheels(new List <int>()
            {
                3, 3, 3
            });

            var summData = new SummaryData();
            var users    = GenerateUsers(gameId, numusers, level);
            var sbs      = GenerateUserBets(users, bet, lines, mp);

            var requestContext = new RequestContext <SpinArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web);

            var requestBonusContext = new RequestContext <BonusArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web);

            Parallel.ForEach(users,
                             () => new SummaryData(),
                             (key, state, sdata) =>
            {
                var sb = sbs[key.UserId];
                requestContext.Currency = new Currency()
                {
                    Id = sb.CurrencyId
                };
                requestContext.Parameters = new SpinArgs()
                {
                    LineBet = sb.LineBet, BettingLines = sb.Lines
                };
                requestContext.GameSetting = new GameSetting()
                {
                    GameSettingGroupId = sb.GameSettingGroupId
                };

                for (var i = 0; i < numItrPerUser; ++i)
                {
                    var sr = alchemyReelsModule.ExecuteSpin(level, new UserGameSpinData(), requestContext).Value as AlchemyReelsCollapsingSpinResult;

                    if (sr.Win > maxWin)
                    {
                        maxWin = sr.Win;
                    }

                    UpdateSummaryData(sdata, sr);
                    UpdateAlchemyReelsSummaryData(sdata, sr);

                    if (sr.HasBonus)
                    {
                        var bonusCreated = alchemyReelsModule.CreateBonus(sr);

                        var bonus = bonusCreated.Value;

                        bonus.SpinTransactionId = sr.TransactionId;
                        bonus.GameResult        = sr;

                        requestBonusContext.Currency = new Currency()
                        {
                            Id = sb.CurrencyId
                        };
                        requestBonusContext.Parameters = new BonusArgs()
                        {
                            Bonus = "CollapsingSpin"
                        };
                        requestBonusContext.GameSetting = new GameSetting()
                        {
                            GameSettingGroupId = sb.GameSettingGroupId
                        };

                        BonusResult bonusResult;
                        var step = bonus.CurrentStep;

                        do
                        {
                            var entity = new BonusEntity
                            {
                                UserId     = key.UserId,
                                GameId     = AlchemyReelsConfiguration.GameId,
                                Guid       = bonus.Guid.ToString("N"),
                                Data       = bonus.ToByteArray(),
                                BonusType  = bonus.GetType().Name,
                                Version    = 2,
                                IsOptional = bonus.IsOptional,
                                IsStarted  = bonus.IsStarted,
                                RoundId    = sr.RoundId
                            };

                            bonusResult = alchemyReelsModule.ExecuteBonus(level, entity, requestBonusContext).Value;
                            var alchemyFreeCollapsingSpinResult = bonusResult as AlchemyFreeCollapsingSpinResult;

                            UpdateSummaryDataCollapsing(sdata, alchemyFreeCollapsingSpinResult.SpinResult);
                            UpdateAlchemyReelsSummaryData(sdata, alchemyFreeCollapsingSpinResult.SpinResult);

                            bonus = bonusResult.Bonus;
                        }while (!bonusResult.IsCompleted && bonusResult.Bonus != null);
                    }
                }

                return(sdata);
            },
                             sdata =>
            {
                lock (summData)
                {
                    summData.Sum(sdata);
                }
            });

            DisplayAlchemyReelsSummaryData(level, bet, lines, summData, sdt, maxWin, null);
        }
Exemplo n.º 20
0
        public void TestAlchemyReelsFullCycle(int level, List <int> rows)
        {
            var sdt             = DateTime.Now;
            var serviceProvider = new ServiceCollection()
                                  .AddLogging()
                                  .BuildServiceProvider();
            var logFactory = serviceProvider.GetService <ILoggerFactory>();
            var logger     = logFactory.CreateLogger <AlchemyReelsModule>();

            var alchemyReelsModule = new AlchemyReelsModule(logger);
            var maxWin             = 0m;
            var profile            = new Dictionary <decimal, int>();
            var maxIndexPosition   = new List <int>();

            AlchemyReelsCommon.CreateWheels(rows);

            var summData = new SummaryData();

            for (var reel0 = 0; reel0 < AlchemyReelsConfiguration.Wheels[level].Reels[0].Count; reel0++)
            {
                for (var reel1 = 0; reel1 < AlchemyReelsConfiguration.Wheels[level].Reels[1].Count; reel1++)
                {
                    for (var reel2 = 0; reel2 < AlchemyReelsConfiguration.Wheels[level].Reels[2].Count; reel2++)
                    {
                        var totalWin = (decimal)0;

                        var ugk = new UserGameKey()
                        {
                            UserId = -1,
                            GameId = AlchemyReelsConfiguration.GameId,
                            Level  = 1
                        };

                        var sb = new SpinBet(ugk, PlatformType.None)
                        {
                            LineBet    = 1,
                            Credits    = 0,
                            Lines      = AlchemyReelsConfiguration.BettingLines,
                            Multiplier = 1
                        };

                        var requestContext      = new RequestContext <SpinArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web);
                        var requestBonusContext = new RequestContext <BonusArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web);
                        requestContext.Currency = new Currency()
                        {
                            Id = sb.CurrencyId
                        };
                        requestContext.Parameters = new SpinArgs()
                        {
                            LineBet = sb.LineBet, BettingLines = sb.Lines
                        };
                        requestContext.GameSetting = new GameSetting()
                        {
                            GameSettingGroupId = sb.GameSettingGroupId
                        };

                        var wheel = new Wheel(rows);
                        wheel.Reels[0] = GetRange(AlchemyReelsConfiguration.Wheels[level].Reels[0], reel0, wheel.Rows[0]);
                        wheel.Reels[1] = GetRange(AlchemyReelsConfiguration.Wheels[level].Reels[1], reel1, wheel.Rows[1]);
                        wheel.Reels[2] = GetRange(AlchemyReelsConfiguration.Wheels[level].Reels[2], reel2, wheel.Rows[2]);

                        var sr = new AlchemyReelsCollapsingSpinResult()
                        {
                            SpinBet = new SpinBet(ugk, PlatformType.None)
                            {
                                Lines      = AlchemyReelsConfiguration.BettingLines,
                                Multiplier = 1,
                                LineBet    = 1m
                            },

                            Wheel = wheel
                        };

                        sr.Wheel      = wheel;
                        sr.TopIndices = new List <int>()
                        {
                            reel0, reel1, reel2
                        };

                        AlchemyReelsCommon.CalculateWin(sr);

                        totalWin = sr.Win;

                        UpdateSummaryData(summData, sr);
                        UpdateAlchemyReelsSummaryData(summData, sr);

                        if (sr.HasBonus)
                        {
                            var bonusCreated = alchemyReelsModule.CreateBonus(sr);

                            var bonus = bonusCreated.Value;

                            bonus.SpinTransactionId = sr.TransactionId;
                            bonus.GameResult        = sr;

                            requestBonusContext.Currency = new Currency()
                            {
                                Id = sb.CurrencyId
                            };
                            requestBonusContext.Parameters = new BonusArgs()
                            {
                                Bonus = "CollapsingSpin"
                            };
                            requestBonusContext.GameSetting = new GameSetting()
                            {
                                GameSettingGroupId = sb.GameSettingGroupId
                            };

                            BonusResult bonusResult;
                            var         step = bonus.CurrentStep;

                            do
                            {
                                var entity = new BonusEntity
                                {
                                    UserId     = ugk.UserId,
                                    GameId     = AlchemyReelsConfiguration.GameId,
                                    Guid       = bonus.Guid.ToString("N"),
                                    Data       = bonus.ToByteArray(),
                                    BonusType  = bonus.GetType().Name,
                                    Version    = 2,
                                    IsOptional = bonus.IsOptional,
                                    IsStarted  = bonus.IsStarted,
                                    RoundId    = sr.RoundId
                                };

                                bonusResult = alchemyReelsModule.ExecuteBonus(level, entity, requestBonusContext).Value;
                                var alchemyFreeCollapsingSpinResult = bonusResult as AlchemyFreeCollapsingSpinResult;

                                var win = alchemyFreeCollapsingSpinResult.Win;

                                if (win > 0)
                                {
                                    totalWin += win;
                                }

                                var maxTopIndices = alchemyFreeCollapsingSpinResult.SpinResult.TopIndices.ToList();

                                if (totalWin > maxWin)
                                {
                                    maxWin = totalWin;

                                    maxIndexPosition = maxTopIndices;
                                }

                                UpdateSummaryDataCollapsing(summData, alchemyFreeCollapsingSpinResult.SpinResult);
                                UpdateAlchemyReelsSummaryData(summData, alchemyFreeCollapsingSpinResult.SpinResult);

                                bonus = bonusResult.Bonus;
                            }while (!bonusResult.IsCompleted && bonusResult.Bonus != null);
                        }

                        if (!profile.ContainsKey(totalWin))
                        {
                            profile.Add(totalWin, 1);
                        }
                        else
                        {
                            profile.TryGetValue(totalWin, out int count);
                            profile.Remove(totalWin);
                            profile.Add(totalWin, count + 1);
                        }
                    }
                }
            }

            DisplayAlchemyReelsSummaryData(level, 1, 10, summData, sdt, maxWin, maxIndexPosition);
            if (profile != null)
            {
                foreach (var item in profile.OrderByDescending(p => p.Key))
                {
                    Console.WriteLine($"Win            : {item.Key}; {item.Value}");
                }
            }
        }
Exemplo n.º 21
0
        /// <summary>
        /// 积分购买课程发放奖励
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <bool> IntegralBuyAsync(long id)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                var course = await dbc.GetAll <CourseOrderEntity>().SingleOrDefaultAsync(c => c.Id == id);

                if (course == null)
                {
                    return(false);
                }
                UserEntity user = await dbc.GetAll <UserEntity>().SingleOrDefaultAsync(u => u.Id == course.BuyerId);

                //未激活会员
                if (!user.IsUpgraded)
                {
                    return(true);
                }
                //不是普通会员,无法升级
                if (user.LevelId != (int)LevelEnum.普通会员)
                {
                    return(true);
                }
                else
                {
                    //购买课程成功,会员升级为节点会员
                    user.LevelId = (int)LevelEnum.创客会员;
                    await dbc.SaveChangesAsync();
                }

                if (user.RecommendId <= 0)
                {
                    return(true);
                }

                UserEntity recUser = await dbc.GetAll <UserEntity>().SingleOrDefaultAsync(u => u.Id == user.RecommendId);

                if (!recUser.IsUpgraded)
                {
                    return(true);
                }

                if (recUser.LevelId == (int)LevelEnum.普通会员)
                {
                    return(true);
                }

                //推荐奖
                decimal param  = (await dbc.GetDecimalParamAsync("直接推荐奖励比例")) / 100;
                decimal blance = 100 * param;
                recUser.Amount = recUser.Amount + blance;

                BonusEntity entity1 = new BonusEntity();
                entity1.UserId     = recUser.Id;
                entity1.Amount     = blance;
                entity1.Revenue    = 0;
                entity1.sf         = blance;
                entity1.TypeID     = 2; //直接推荐奖
                entity1.Source     = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得直接推荐奖励";
                entity1.FromUserID = user.Id;
                entity1.IsSettled  = 1;
                dbc.Bonus.Add(entity1);

                JournalEntity journal1 = new JournalEntity();
                journal1.UserId        = recUser.Id;
                journal1.BalanceAmount = recUser.Amount;
                journal1.InAmount      = blance;
                journal1.Remark        = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得直接推荐奖励";
                journal1.JournalTypeId = (int)JournalTypeEnum.直推奖;
                journal1.OrderCode     = course.Code;
                journal1.GoodsId       = course.CourseId;//来至订单ID
                journal1.CurrencyType  = (int)CurrencyEnums.碳积分;
                dbc.Journals.Add(journal1);

                long recommendId = recUser.RecommendId;
                int  count       = 0;
                long recCount    = await dbc.GetAll <UserEntity>().AsNoTracking().LongCountAsync(u => u.RecommendId == recUser.Id && u.LevelId == (int)LevelEnum.创客会员);

                if (recCount >= 10)
                {
                    recUser.LevelId = (int)LevelEnum.贵宾会员;
                    count++;
                }

                decimal param1 = (await dbc.GetDecimalParamAsync("招募创客6到9个奖金比例")) / 100;
                decimal param2 = (await dbc.GetDecimalParamAsync("招募创客大于9个奖金比例")) / 100;
                //领导奖
                while (recommendId > 0 && recCount >= 6)
                {
                    recUser = await dbc.GetAll <UserEntity>().SingleOrDefaultAsync(u => u.Id == recommendId);

                    recCount = await dbc.GetAll <UserEntity>().AsNoTracking()
                               .LongCountAsync(u => u.RecommendId == recUser.Id && (u.LevelId == (int)LevelEnum.贵宾会员 || u.LevelId == (int)LevelEnum.超级会员));

                    recommendId = recUser.RecommendId;

                    if (recCount < 6)
                    {
                        break;
                    }
                    else if (recCount >= 6 & recCount < 10)
                    {
                        blance         = blance * param1 / 100;
                        recUser.Amount = recUser.Amount + blance;
                        count          = 0;

                        BonusEntity entity2 = new BonusEntity();
                        entity2.UserId     = recUser.Id;
                        entity2.Amount     = blance;
                        entity2.Revenue    = 0;
                        entity2.sf         = blance;
                        entity2.TypeID     = 3; //领导奖
                        entity2.Source     = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得领导奖励";
                        entity2.FromUserID = user.Id;
                        entity2.IsSettled  = 1;
                        dbc.Bonus.Add(entity2);

                        JournalEntity journal2 = new JournalEntity();
                        journal2.UserId        = recUser.Id;
                        journal2.BalanceAmount = recUser.Amount;
                        journal2.InAmount      = blance;
                        journal2.Remark        = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得领导奖励";
                        journal2.JournalTypeId = (int)JournalTypeEnum.领导奖;
                        journal2.OrderCode     = course.Code;
                        journal2.GoodsId       = course.CourseId;//来至订单ID
                        journal2.CurrencyType  = (int)CurrencyEnums.碳积分;
                        dbc.Journals.Add(journal1);
                    }
                    else
                    {
                        blance         = blance * param2 / 100;
                        recUser.Amount = recUser.Amount + blance;
                        count++;
                        if (count >= 10 && recUser.LevelId == (int)LevelEnum.贵宾会员)
                        {
                            recUser.LevelId = (int)LevelEnum.超级会员;
                        }

                        BonusEntity entity3 = new BonusEntity();
                        entity3.UserId     = recUser.Id;
                        entity3.Amount     = blance;
                        entity3.Revenue    = 0;
                        entity3.sf         = blance;
                        entity3.TypeID     = 3; //领导奖
                        entity3.Source     = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得领导奖励";
                        entity3.FromUserID = user.Id;
                        entity3.IsSettled  = 1;
                        dbc.Bonus.Add(entity3);

                        JournalEntity journal3 = new JournalEntity();
                        journal3.UserId        = recUser.Id;
                        journal3.BalanceAmount = recUser.Amount;
                        journal3.InAmount      = blance;
                        journal3.Remark        = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得领导奖励";
                        journal3.JournalTypeId = (int)JournalTypeEnum.领导奖;
                        journal3.OrderCode     = course.Code;
                        journal3.GoodsId       = course.CourseId;//来至订单ID
                        journal3.CurrencyType  = (int)CurrencyEnums.碳积分;
                        dbc.Journals.Add(journal3);
                    }
                }

                await dbc.SaveChangesAsync();

                return(true);
            }
        }
Exemplo n.º 22
0
 public Task <bool> RemoveBonus(UserSession userSession, BonusEntity bonus)
 {
     return(bonus.UserId <= 0 ? RemoveBonusFromCache(userSession) : RemoveBonusFromDatabase(bonus));
 }
Exemplo n.º 23
0
        public void TestExecuteBonus()
        {
            // Arrange
            var user    = new UserGameKey(-1, 3);
            var spinBet = new SpinBet(user, PlatformType.None)
            {
                Lines   = 30,
                LineBet = 1.0m
            };
            var result1 = new BikiniBeachResult()
            {
                BonusPositions = new List <BonusPosition> {
                    new BonusPosition {
                        Line = 1, Multiplier = 1, RowPositions = new List <int> {
                            0, 2, 2, 2, 0
                        }
                    }
                },
                Bonus = new Stake(Guid.NewGuid(), 2)
                {
                    Count = 1
                }
            };
            var result2 = new BikiniBeachResult()
            {
                BonusPositions = new List <BonusPosition> {
                    new BonusPosition {
                        Line = 1, Multiplier = 1, RowPositions = new List <int> {
                            0, 2, 2, 2, 0
                        }
                    }
                },
                Bonus = new Stake(Guid.NewGuid(), 3)
                {
                    Count = 1
                }
            };
            var result3 = new BikiniBeachResult()
            {
                BonusPositions = new List <BonusPosition> {
                    new BonusPosition {
                        Line = 1, Multiplier = 1, RowPositions = new List <int> {
                            0, 2, 2, 2, 0
                        }
                    }
                },
                Bonus = new Stake(Guid.NewGuid(), 4)
                {
                    Count = 1
                }
            };

            result1.SpinBet = spinBet;
            result2.SpinBet = spinBet;
            result3.SpinBet = spinBet;
            var userSession = new UserSession
            {
                SessionKey = "unittest",
                UserId     = -1
            };
            var requestContext = new RequestContext <SpinArgs>("simulation", "Bikini Beach", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
                Game  = new Game {
                    Id = 3
                }
            };
            var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Bikini Beach", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            requestBonusContext.UserSession = userSession;
            requestBonusContext.UserGameKey = user;
            var bonus1 = module.CreateBonus(result1).Value;
            var bonus2 = module.CreateBonus(result2).Value;
            var bonus3 = module.CreateBonus(result3).Value;

            var entity1 = new BonusEntity
            {
                UserId       = userSession.UserId,
                GameId       = requestContext.Game.Id,
                Guid         = bonus1.Guid.ToString("N"),
                Data         = Model.Utility.Extension.ToByteArray(bonus1),
                BonusType    = bonus1.GetType().Name,
                Version      = 3,
                IsOptional   = bonus1.IsOptional,
                IsStarted    = bonus1.IsStarted,
                RoundId      = 1,
                BetReference = ""
            };
            var entity2 = new BonusEntity
            {
                UserId       = userSession.UserId,
                GameId       = requestContext.Game.Id,
                Guid         = bonus2.Guid.ToString("N"),
                Data         = Model.Utility.Extension.ToByteArray(bonus2),
                BonusType    = bonus2.GetType().Name,
                Version      = 3,
                IsOptional   = bonus2.IsOptional,
                IsStarted    = bonus2.IsStarted,
                RoundId      = 1,
                BetReference = ""
            };
            var entity3 = new BonusEntity
            {
                UserId       = userSession.UserId,
                GameId       = requestContext.Game.Id,
                Guid         = bonus3.Guid.ToString("N"),
                Data         = Model.Utility.Extension.ToByteArray(bonus3),
                BonusType    = bonus3.GetType().Name,
                Version      = 3,
                IsOptional   = bonus3.IsOptional,
                IsStarted    = bonus3.IsStarted,
                RoundId      = 1,
                BetReference = ""
            };

            // action
            var freeSpinResult1 = module.ExecuteBonus(1, entity1, requestBonusContext).Value as BikiniBeachBonusSpinResult;
            var freeSpinResult2 = module.ExecuteBonus(1, entity2, requestBonusContext).Value as BikiniBeachBonusSpinResult;
            var freeSpinResult3 = module.ExecuteBonus(1, entity3, requestBonusContext).Value as BikiniBeachBonusSpinResult;

            // assert
            Assert.NotNull(freeSpinResult1);
            Assert.NotNull(freeSpinResult2);
            Assert.NotNull(freeSpinResult3);

            Assert.AreEqual(freeSpinResult1.SpinResult.HasBonus == false, ((BikiniBeachBonus)freeSpinResult1.Bonus).State is Finish);
            Assert.AreEqual(freeSpinResult2.SpinResult.HasBonus == false, ((BikiniBeachBonus)freeSpinResult1.Bonus).State is Finish);
            Assert.AreEqual(freeSpinResult3.SpinResult.HasBonus == false, ((BikiniBeachBonus)freeSpinResult1.Bonus).State is Finish);
            Assert.AreEqual(freeSpinResult1.GameResultType, GameResultType.FreeSpinResult);
            Assert.AreEqual(freeSpinResult2.GameResultType, GameResultType.RevealResult);
            Assert.AreEqual(freeSpinResult3.GameResultType, GameResultType.RevealResult);
        }
Exemplo n.º 24
0
        public async Task <bool> CalcShareBonusAsync(decimal totalScore)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                decimal teamScore;
                IQueryable <UserEntity> res;
                string  keyword;
                decimal term;
                int     levelId;
                int     count;
                decimal bonusAmount;
                decimal totalBuyAmount = 0;
                IQueryable <UserEntity> users;
                //皇冠会员
                users = dbc.GetAll <UserEntity>().Where(u => u.LevelId == (int)LevelEnum.皇冠会员);
                count = await users.CountAsync();

                if (count > 0)
                {
                    levelId = 1;
                    decimal.TryParse(await dbc.GetStringPropertyAsync <SettingEntity>(s => s.TypeName == "全国分红" && s.LevelId == levelId, s => s.Param), out term);
                    foreach (UserEntity user in await users.ToListAsync())
                    {
                        if (user.UserCode == "system")
                        {
                            keyword   = (user.Id + "-").ToString();
                            res       = dbc.GetAll <UserEntity>().AsNoTracking().Where(u => u.RecommendPath.Contains(keyword));
                            teamScore = await res.SumAsync(u => u.BuyAmount);

                            user.FrozenAmount = teamScore;
                        }
                        else
                        {
                            keyword   = ("-" + user.Id + "-").ToString();
                            res       = dbc.GetAll <UserEntity>().AsNoTracking().Where(u => u.RecommendPath.Contains(keyword));
                            teamScore = await res.SumAsync(u => u.BuyAmount);

                            user.FrozenAmount = teamScore;
                        }
                        if (user.FrozenAmount >= 100000)
                        {
                            totalBuyAmount = totalBuyAmount + ((int)Math.Truncate(user.FrozenAmount)) / 100000 * 100000;
                        }
                        await dbc.SaveChangesAsync();
                    }
                    if (totalBuyAmount >= 100000)
                    {
                        foreach (UserEntity user in await users.ToListAsync())
                        {
                            if (user.FrozenAmount < 100000)
                            {
                                continue;
                            }
                            bonusAmount      = totalScore * (term / 100) * (((int)Math.Truncate(user.FrozenAmount)) / 100000 * 100000 / totalBuyAmount);
                            user.Amount      = user.Amount + bonusAmount;
                            user.BonusAmount = user.BonusAmount + bonusAmount;

                            BonusEntity bonus = new BonusEntity();
                            bonus.UserId     = user.Id;
                            bonus.Amount     = bonusAmount;
                            bonus.Revenue    = 0;
                            bonus.sf         = bonusAmount;
                            bonus.TypeID     = 5; //5、分红
                            bonus.Source     = "用户(" + user.Mobile + ")获得全国分红";
                            bonus.FromUserID = user.Id;
                            bonus.IsSettled  = 1;
                            dbc.Bonus.Add(bonus);

                            JournalEntity journal = new JournalEntity();
                            journal.UserId        = user.Id;
                            journal.BalanceAmount = user.Amount;
                            journal.InAmount      = bonusAmount;
                            journal.Remark        = "用户(" + user.Mobile + ")获得全国分红";
                            journal.JournalTypeId = (int)JournalTypeEnum.全国分红;
                            //journal.OrderCode = order.Code;
                            //journal.GoodsId = order.Id;//来至订单ID
                            journal.CurrencyType = 1;//币种,只有rmb
                            dbc.Journals.Add(journal);
                        }
                    }
                }
                users = dbc.GetAll <UserEntity>().Where(u => u.LevelId == (int)LevelEnum.董事会员);
                count = await users.CountAsync();

                totalBuyAmount = 0;
                if (count > 0)
                {
                    levelId = 2;
                    decimal.TryParse(await dbc.GetStringPropertyAsync <SettingEntity>(s => s.TypeName == "全国分红" && s.LevelId == levelId, s => s.Param), out term);
                    foreach (UserEntity user in await users.ToListAsync())
                    {
                        if (user.UserCode == "system")
                        {
                            keyword   = (user.Id + "-").ToString();
                            res       = dbc.GetAll <UserEntity>().AsNoTracking().Where(u => u.RecommendPath.Contains(keyword));
                            teamScore = await res.SumAsync(u => u.BuyAmount);

                            user.FrozenAmount = teamScore;
                        }
                        else
                        {
                            keyword   = ("-" + user.Id + "-").ToString();
                            res       = dbc.GetAll <UserEntity>().AsNoTracking().Where(u => u.RecommendPath.Contains(keyword));
                            teamScore = await res.SumAsync(u => u.BuyAmount);

                            user.FrozenAmount = teamScore;
                        }
                        if (user.BuyAmount >= 100000)
                        {
                            totalBuyAmount = totalBuyAmount + ((int)Math.Truncate(user.FrozenAmount)) / 100000 * 100000;
                        }
                        await dbc.SaveChangesAsync();
                    }
                    if (totalBuyAmount >= 100000)
                    {
                        foreach (UserEntity user in await users.ToListAsync())
                        {
                            if (user.FrozenAmount < 100000)
                            {
                                continue;
                            }
                            bonusAmount      = totalScore * (term / 100) * (((int)Math.Truncate(user.FrozenAmount)) / 100000 * 100000 / totalBuyAmount);
                            user.Amount      = user.Amount + bonusAmount;
                            user.BonusAmount = user.BonusAmount + bonusAmount;

                            BonusEntity bonus = new BonusEntity();
                            bonus.UserId     = user.Id;
                            bonus.Amount     = bonusAmount;
                            bonus.Revenue    = 0;
                            bonus.sf         = bonusAmount;
                            bonus.TypeID     = 5; //5、分红
                            bonus.Source     = "用户(" + user.Mobile + ")获得全国分红";
                            bonus.FromUserID = user.Id;
                            bonus.IsSettled  = 1;
                            dbc.Bonus.Add(bonus);

                            JournalEntity journal = new JournalEntity();
                            journal.UserId        = user.Id;
                            journal.BalanceAmount = user.Amount;
                            journal.InAmount      = bonusAmount;
                            journal.Remark        = "用户(" + user.Mobile + ")获得全国分红";
                            journal.JournalTypeId = (int)JournalTypeEnum.全国分红;
                            //journal.OrderCode = order.Code;
                            //journal.GoodsId = order.Id;//来至订单ID
                            journal.CurrencyType = 1;//币种,只有rmb
                            dbc.Journals.Add(journal);
                        }
                    }
                }
                await dbc.SaveChangesAsync();

                return(true);
            }
        }
Exemplo n.º 25
0
        public void TestExecuteBonus()
        {
            // Arrange
            var user    = new UserGameKey(-1, 109);
            var spinBet = new SpinBet(user, PlatformType.None)
            {
                Lines   = 30,
                LineBet = 1.0m
            };
            var wheel = new FortuneChimesWheel
            {
                Reels = new List <int[]>
                {
                    new int[] { 1, 1, 1 },
                    new int[] { 2, 10, 2 },
                    new int[] { 3, 10, 3 },
                    new int[] { 4, 10, 4 },
                    new int[] { 5, 5, 5 },
                },
                Indices = new int[] { 0, 0, 0, 0, 0 }
            };
            var result1 = new FortuneChimesSpinResult(user)
            {
                Wheel          = wheel,
                BonusPositions = new List <BonusPosition> {
                    new BonusPosition {
                        Line = 1, Multiplier = 1, RowPositions = new List <int> {
                            0, 2, 2, 2, 0
                        }
                    }
                },
                Bonus = new Stake(Guid.NewGuid(), 3)
                {
                    Count = 1
                }
            };

            result1.SpinBet = spinBet;
            var userSession = new UserSession
            {
                SessionKey = "unittest",
                UserId     = -1
            };
            var requestContext = new RequestContext <SpinArgs>("simulation", "Cleopatra", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
                Game  = new Game {
                    Id = 109
                }
            };
            var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Cleopatra", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            requestBonusContext.UserSession = userSession;
            requestBonusContext.UserGameKey = user;
            var bonus1 = module.CreateBonus(result1).Value;

            var entity1 = new BonusEntity
            {
                UserId       = userSession.UserId,
                GameId       = requestContext.Game.Id,
                Guid         = bonus1.Guid.ToString("N"),
                Data         = Model.Utility.Extension.ToByteArray(bonus1),
                BonusType    = bonus1.GetType().Name,
                Version      = 3,
                IsOptional   = bonus1.IsOptional,
                IsStarted    = bonus1.IsStarted,
                RoundId      = 1,
                BetReference = ""
            };

            // action
            var freeSpinResult1 = module.ExecuteBonus(1, entity1, requestBonusContext).Value as FortuneChimesBonusSpinResult;

            // assert
            Assert.NotNull(freeSpinResult1);
            Assert.AreEqual(freeSpinResult1.GameResultType, GameResultType.FreeSpinResult);
        }
        public static Result <BonusResult, ErrorCode> Execute(int level, RequestContext <BonusArgs> requestContext, BullRushJackpotBonus bullRushJackpotBonus, BonusEntity bonusEntity)
        {
            if (bullRushJackpotBonus != null)
            {
                return(ExecuteBullRushJackpot(level, requestContext, bullRushJackpotBonus, bonusEntity));
            }

            return(ErrorCode.NonexistenceBonus);
        }
        private static Result <BonusResult, ErrorCode> ExecuteBullRushJackpot(int level, RequestContext <BonusArgs> requestContext, BullRushJackpotBonus bullRushJackpotBonus, BonusEntity bonusEntity)
        {
            bullRushJackpotBonus.IsStarted = true;

            var br = new BullRushJackpotBonusResult(requestContext.UserGameKey)
            {
                SpinTransactionId = bullRushJackpotBonus.SpinTransactionId,
                Level             = level,
                PlatformType      = requestContext.Platform,
                TotalSpin         = bullRushJackpotBonus.NumOfJackpot,
                CumulativeWin     = bullRushJackpotBonus.CumulativeWin,
                SpinResult        = bullRushJackpotBonus.GameResult as BullRushSpinResult,
                Step = bullRushJackpotBonus.CurrentStep,
            };

            if (br.SpinResult == null)
            {
                if (bullRushJackpotBonus.GameResult is BullRushJackpotBonusResult)
                {
                    br.SpinResult = (bullRushJackpotBonus.GameResult as BullRushJackpotBonusResult).SpinResult;
                }
            }

            GenerateJackpotResult(requestContext, br, bullRushJackpotBonus);

            if (br.SpinResult.SelectedInnerWheelValue == BullRushConfiguration.TREASURE3 ||
                br.SpinResult.SelectedInnerWheelValue == BullRushConfiguration.TREASURE4 ||
                br.SpinResult.SelectedInnerWheelValue == BullRushConfiguration.TREASURE5)
            {
                for (int i = 0; i < br.SpinResult.SelectedInnerWheelValue; i++)
                {
                    br.SpinResult.InventoryList.Add(BullRushConfiguration.TREASURE);
                }
            }
            else if (br.SpinResult.SelectedInnerWheelValue == BullRushConfiguration.BONUS)
            {
                var bonusPrize = new Dictionary <double, int>(BullRushConfiguration.BonusRace);
                var prizeList  = new List <decimal>();
                var random     = RandomNumberEngine.NextDouble();

                var selectedCoinValue = bonusPrize.FirstOrDefault(item => random <= item.Key).Value;

                prizeList.Add(selectedCoinValue);

                for (int i = 0; i < BullRushConfiguration.VEHICLES - 1; i++)
                {
                    var randomShowingIndex = RandomNumberEngine.Next(0, bonusPrize.Count - 1);

                    var selectedShowingValue = bonusPrize.Values.ElementAt(randomShowingIndex);
                    var selectedShowingKey   = bonusPrize.Keys.ElementAt(randomShowingIndex);

                    prizeList.Add(selectedShowingValue);
                    bonusPrize.Remove(selectedShowingKey);
                }

                br.SpinResult.BonusRacingPrizesList = prizeList.Shuffle();

                var selectedPrizeIndex = br.SpinResult.BonusRacingPrizesList.IndexOf(selectedCoinValue);

                br.SpinResult.SelectedBonusRacingPrizeIndex = selectedPrizeIndex;

                br.SpinResult.SelectedBonusRacingPrize = selectedCoinValue;

                br.SpinResult.IsBonusRacing = true;
            }

            br.SpinResult.IsRacing = true;

            bullRushJackpotBonus.GameResult = br;

            var variantWheel = new Wheel(new List <int>()
            {
                105, 105, 105, 105
            });
            var numberOfMagnet = br.SpinResult.InventoryList.Count(x => x == BullRushConfiguration.MAGNET);
            var numberOfVacuum = br.SpinResult.InventoryList.Count(x => x == BullRushConfiguration.VACUUM);

            if (numberOfMagnet == 0 && numberOfVacuum == 0)
            {
                variantWheel = BullRushConfiguration.VariantWheelsOne[level];
                br.SpinResult.VariantWheel = 1;
            }
            else if (numberOfMagnet == 0 && numberOfVacuum > 0)
            {
                var randomDouble = RandomNumberEngine.NextDouble();

                var isVariantTwo = (randomDouble <= BullRushConfiguration.VariantTwoWeight) ? true : false;

                if (isVariantTwo)
                {
                    variantWheel = BullRushConfiguration.VariantWheelsTwo[level];
                    br.SpinResult.VariantWheel = 2;
                }
                else
                {
                    variantWheel = BullRushConfiguration.VariantWheelsThree[level];
                    br.SpinResult.VariantWheel = 3;
                }
            }
            else if (numberOfMagnet > 0 && numberOfVacuum == 0)
            {
                variantWheel = BullRushConfiguration.VariantWheelsFour[level];
                br.SpinResult.VariantWheel = 4;
            }
            else if (numberOfMagnet > 0 && numberOfVacuum > 0)
            {
                variantWheel = BullRushConfiguration.VariantWheelsFive[level];
                br.SpinResult.VariantWheel = 5;
            }

            var listOfChestPosition = variantWheel[3].Select((value, index) => new { value, index }).Where(a => a.value > 0).Select(a => a.index).ToList();
            var chosenTreasureItems = new List <int>();

            for (int i = 0; i < BullRushConfiguration.WidthOfRace; i++)
            {
                int index = RandomNumberEngine.Next(0, listOfChestPosition.Count() - 1);
                chosenTreasureItems.Add(listOfChestPosition[index]);

                listOfChestPosition.RemoveAt(index);
            }

            if (br.SpinResult.IsBonusRacing)
            {
                var distributedAllRows = BullRushCommon.GenerateBonusRacing(br.SpinResult.SelectedBonusRacingPrize, br.SpinResult.SpinBet.LineBet, br.SpinResult.SpinBet.FunPlayDemoKey);

                br.SpinResult.DistributedAllRows = distributedAllRows;

                br.SpinResult.CurrentBonusRacingCounter = BullRushConfiguration.HeightBonusRacing;
            }
            else if (br.SpinResult.IsRacing)
            {
                var distributedAllRows = BullRushCommon.GenerateRacing(variantWheel, chosenTreasureItems, br.SpinResult);

                br.SpinResult.DistributedAllRows = distributedAllRows;

                br.SpinResult.CurrentRacingCounter = BullRushConfiguration.HeightOfRacing;
            }

            var freeSpinBonus = BullRushFreeSpinFeature.CreateBonus(br.SpinResult);

            br.SpinResult.BonusElement = new BullRushBonusElement {
                Id = freeSpinBonus.Id, Count = br.SpinResult.CurrentRacingCounter, Value = freeSpinBonus.Guid.ToString("N")
            };

            br.SpinResult.Bonus = new BonusStruct()
            {
                Id    = freeSpinBonus.Id,
                Count = br.SpinResult.CurrentRacingCounter,
            };

            bonusEntity.BonusType = freeSpinBonus.GetType().Name;

            br.Bonus = freeSpinBonus;

            return(br);
        }
Exemplo n.º 28
0
        public async Task <bool> AuditAsync(long id, int stateId, long auditorId)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                var course = await dbc.GetAll <CourseOrderEntity>().SingleOrDefaultAsync(c => c.Id == id);

                if (course == null)
                {
                    return(false);
                }
                //取消课程订单
                if ((int)CourseOrderStateEnum.已取消 == stateId)
                {
                    course.OrderStateId = stateId;
                    course.AuditTime    = DateTime.Now;
                    course.AuditMobile  = await dbc.GetParameterAsync <AdminEntity>(a => a.Id == auditorId, a => a.Mobile);

                    await dbc.SaveChangesAsync();

                    return(true);
                }
                else
                {
                    course.OrderStateId = stateId;
                    course.AuditTime    = DateTime.Now;
                    course.AuditMobile  = await dbc.GetParameterAsync <AdminEntity>(a => a.Id == auditorId, a => a.Mobile);

                    UserEntity user = await dbc.GetAll <UserEntity>().SingleOrDefaultAsync(u => u.Id == course.BuyerId);

                    //未激活会员
                    if (!user.IsUpgraded)
                    {
                        course.OrderStateId = (int)CourseOrderStateEnum.已取消;
                        await dbc.SaveChangesAsync();

                        return(true);
                    }

                    if (user.LevelId != (int)LevelEnum.普通会员)
                    {
                        //购买课程成功,获得100碳积分
                        user.Amount = user.Amount + 100;
                    }
                    else
                    {
                        //购买课程成功,会员升级为节点会员,获得100碳积分
                        user.LevelId = (int)LevelEnum.创客会员;
                        user.Amount  = user.Amount + 100;
                    }

                    BonusEntity entity = new BonusEntity();
                    entity.UserId     = user.Id;
                    entity.Amount     = 100;
                    entity.Revenue    = 0;
                    entity.sf         = 100;
                    entity.TypeID     = 1; //购买课程奖励
                    entity.Source     = "用户(" + user.Mobile + ")购买课程,获得碳积分奖励";
                    entity.FromUserID = user.Id;
                    entity.IsSettled  = 1;
                    dbc.Bonus.Add(entity);

                    JournalEntity journal = new JournalEntity();
                    journal.UserId        = user.Id;
                    journal.BalanceAmount = user.Amount;
                    journal.InAmount      = 100;
                    journal.Remark        = "用户(" + user.Mobile + ")购买课程,获得碳积分奖励";
                    journal.JournalTypeId = (int)JournalTypeEnum.购买课程奖励;
                    journal.OrderCode     = course.Code;
                    journal.GoodsId       = course.CourseId;//来至订单ID
                    journal.CurrencyType  = (int)CurrencyEnums.碳积分;
                    dbc.Journals.Add(journal);

                    if (user.RecommendId <= 0)
                    {
                        await dbc.SaveChangesAsync();

                        return(true);
                    }

                    UserEntity recUser = await dbc.GetAll <UserEntity>().SingleOrDefaultAsync(u => u.Id == user.RecommendId);

                    if (recUser.LevelId == (int)LevelEnum.普通会员)
                    {
                        await dbc.SaveChangesAsync();

                        return(true);
                    }

                    //推荐奖
                    decimal param  = (await dbc.GetDecimalParamAsync("直接推荐奖励比例")) / 100;
                    decimal blance = 100 * param;
                    recUser.Amount = recUser.Amount + blance;

                    BonusEntity entity1 = new BonusEntity();
                    entity1.UserId     = recUser.Id;
                    entity1.Amount     = blance;
                    entity1.Revenue    = 0;
                    entity1.sf         = blance;
                    entity1.TypeID     = 2; //直接推荐奖
                    entity1.Source     = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得直接推荐奖励";
                    entity1.FromUserID = user.Id;
                    entity1.IsSettled  = 1;
                    dbc.Bonus.Add(entity1);

                    JournalEntity journal1 = new JournalEntity();
                    journal1.UserId        = recUser.Id;
                    journal1.BalanceAmount = recUser.Amount;
                    journal1.InAmount      = blance;
                    journal1.Remark        = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得直接推荐奖励";
                    journal1.JournalTypeId = (int)JournalTypeEnum.直推奖;
                    journal1.OrderCode     = course.Code;
                    journal1.GoodsId       = course.CourseId;//来至订单ID
                    journal1.CurrencyType  = (int)CurrencyEnums.碳积分;
                    dbc.Journals.Add(journal1);

                    long recommendId = recUser.RecommendId;
                    int  count       = 0;
                    long recCount    = await dbc.GetAll <UserEntity>().AsNoTracking().LongCountAsync(u => u.RecommendId == recUser.Id && u.LevelId == (int)LevelEnum.创客会员);

                    if (recCount >= 10)
                    {
                        recUser.LevelId = (int)LevelEnum.贵宾会员;
                        count++;
                    }

                    decimal param1 = (await dbc.GetDecimalParamAsync("招募创客6到9个奖金比例")) / 100;
                    decimal param2 = (await dbc.GetDecimalParamAsync("招募创客大于9个奖金比例")) / 100;
                    //领导奖
                    while (recommendId > 0 && recCount >= 6)
                    {
                        recUser = await dbc.GetAll <UserEntity>().SingleOrDefaultAsync(u => u.Id == recommendId);

                        recCount = await dbc.GetAll <UserEntity>().AsNoTracking()
                                   .LongCountAsync(u => u.RecommendId == recUser.Id && (u.LevelId == (int)LevelEnum.贵宾会员 || u.LevelId == (int)LevelEnum.超级会员));

                        recommendId = recUser.RecommendId;

                        if (recCount < 6)
                        {
                            break;
                        }
                        else if (recCount >= 6 & recCount < 10)
                        {
                            blance         = blance * 60 / 100;
                            recUser.Amount = recUser.Amount + blance;
                            count          = 0;

                            BonusEntity entity2 = new BonusEntity();
                            entity2.UserId     = recUser.Id;
                            entity2.Amount     = blance;
                            entity2.Revenue    = 0;
                            entity2.sf         = blance;
                            entity2.TypeID     = 3; //领导奖
                            entity2.Source     = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得领导奖励";
                            entity2.FromUserID = user.Id;
                            entity2.IsSettled  = 1;
                            dbc.Bonus.Add(entity2);

                            JournalEntity journal2 = new JournalEntity();
                            journal2.UserId        = recUser.Id;
                            journal2.BalanceAmount = recUser.Amount;
                            journal2.InAmount      = blance;
                            journal2.Remark        = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得领导奖励";
                            journal2.JournalTypeId = (int)JournalTypeEnum.领导奖;
                            journal2.OrderCode     = course.Code;
                            journal2.GoodsId       = course.CourseId;//来至订单ID
                            journal2.CurrencyType  = (int)CurrencyEnums.碳积分;
                            dbc.Journals.Add(journal1);
                        }
                        else
                        {
                            blance         = blance * 80 / 100;
                            recUser.Amount = recUser.Amount + blance;
                            count++;
                            if (count >= 10 && recUser.LevelId == (int)LevelEnum.贵宾会员)
                            {
                                recUser.LevelId = (int)LevelEnum.超级会员;
                            }

                            BonusEntity entity3 = new BonusEntity();
                            entity3.UserId     = recUser.Id;
                            entity3.Amount     = blance;
                            entity3.Revenue    = 0;
                            entity3.sf         = blance;
                            entity3.TypeID     = 3; //领导奖
                            entity3.Source     = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得领导奖励";
                            entity3.FromUserID = user.Id;
                            entity3.IsSettled  = 1;
                            dbc.Bonus.Add(entity3);

                            JournalEntity journal3 = new JournalEntity();
                            journal3.UserId        = recUser.Id;
                            journal3.BalanceAmount = recUser.Amount;
                            journal3.InAmount      = blance;
                            journal3.Remark        = "用户(" + user.Mobile + ")购买课程,用户(" + recUser.Mobile + ")获得领导奖励";
                            journal3.JournalTypeId = (int)JournalTypeEnum.领导奖;
                            journal3.OrderCode     = course.Code;
                            journal3.GoodsId       = course.CourseId;//来至订单ID
                            journal3.CurrencyType  = (int)CurrencyEnums.碳积分;
                            dbc.Journals.Add(journal3);
                        }
                    }

                    await dbc.SaveChangesAsync();

                    return(true);
                }
            }
        }
Exemplo n.º 29
0
        public void TestExecuteBonus()
        {
            // Arrange
            var user   = new UserGameKey(-1, 80);
            var result = new GeniesLuckResult()
            {
                BonusPositions = new List <BonusPosition> {
                    new BonusPosition {
                        Line = 1, Multiplier = 1, RowPositions = new List <int> {
                            0, 2, 2, 2, 0
                        }
                    }
                },
                Bonus = new Stake(Guid.NewGuid(), 3)
                {
                    Count = 1
                }
            };

            result.SpinBet = new SpinBet(user, PlatformType.None)
            {
                Lines   = 40,
                LineBet = 1.0m
            };
            var userSession = new UserSession
            {
                SessionKey = "unittest",
                UserId     = -1
            };
            var requestContext = new RequestContext <SpinArgs>("simulation", "Genies Luck", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
                Game  = new Game {
                    Id = 80
                }
            };
            var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Genies Luck", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            requestBonusContext.UserSession = userSession;
            requestBonusContext.UserGameKey = user;
            var bonus = module.CreateBonus(result).Value;

            var entity = new BonusEntity
            {
                UserId       = userSession.UserId,
                GameId       = requestContext.Game.Id,
                Guid         = bonus.Guid.ToString("N"),
                Data         = Model.Utility.Extension.ToByteArray(bonus),
                BonusType    = bonus.GetType().Name,
                Version      = 3,
                IsOptional   = bonus.IsOptional,
                IsStarted    = bonus.IsStarted,
                RoundId      = 1,
                BetReference = ""
            };

            // action
            var respinResult = module.ExecuteBonus(1, entity, requestBonusContext).Value as GeniesLuckBonusSpinResult;

            // assert
            Assert.NotNull(respinResult);
            Assert.AreEqual(respinResult.SpinResult.HasBonus == false, ((GeniesLuckBonus)respinResult.Bonus).State is Finish);
            Assert.AreEqual(respinResult.GameResultType, GameResultType.FreeSpinResult);
        }
Exemplo n.º 30
0
 public Task <bool> UpdateBonus(UserSession userSession, BonusEntity bonus)
 {
     return(bonus.UserId <= 0 ? UpdateBonusInCache(userSession, bonus) : UpdateBonusInDatabase(bonus));
 }