예제 #1
0
        private static Dictionary <string, bool> CheckService(PartnerServiceParams param)
        {
            Dictionary <string, bool> serviceDict = null;

            if (DataCache.Partners != null && DataCache.Partners.Count > 0)
            {
                serviceDict = new Dictionary <string, bool>(DataCache.Partners.Count);
                //并行检查活动
                Parallel.ForEach(DataCache.Partners, p => {
                    param.Obj       = p;
                    param.PartnerId = p.Id;
                    var service     = PartnerServiceFactory.CreatePayService(p.ServiceName);

                    if (service != null)
                    {
                        var result = service.IsCanJoin(param);
                        serviceDict.Add(p.Name, result);
                        //
                        if (result)
                        {
                            service.Join(param);
                        }
                    }
                    else
                    {
                        serviceDict.Add(p.Name, false);
                    }
                });
            }

            return(serviceDict);
        }
예제 #2
0
        public void Post()
        {
            var userController = new UserController();
            var users          = userController.Get(new User()).ToList();

            Parallel.ForEach(users, u => {
                u.AreaId   = 1;
                var player = PlayerBiz.GetById(u.Id, 1);
                if (player != null)
                {
                    var param = new PartnerServiceParams()
                    {
                        PartnerId = 1,
                        UserId    = u.Id,
                        AreaId    = 1,
                        PlayerId  = player.Id
                    };
                    param.Obj = DataCache.Partners.Where(p => p.ServiceName == "PlayerReturn").FirstOrDefault();

                    var result = controller.Post(param);
                    if (result.Result)
                    {
                        controller.Put(param);
                    }
                }
            });
        }
예제 #3
0
        public bool Join(PartnerServiceParams param)
        {
            var execResult = PlayerActivityLogBiz.Add(new PlayerActivityLog()
            {
                PartnerId      = param.PartnerId,
                PlayerId       = param.PlayerId,
                TakePartInTime = DateTime.Now
            });

            return(execResult.Id > 0);
        }
예제 #4
0
        // PUT: api/PlayerReturn
        public async Task <bool> Put([FromBody] PartnerServiceParams req)
        {
            if (req == null || req.AreaId == 0 || string.IsNullOrEmpty(req.PlayerId) || string.IsNullOrEmpty(req.UserId))
            {
                return(false);
            }

            var result  = false;
            var service = PartnerServiceFactory.CreatePayService(serverName);

            if (service != null)
            {
                result = service.Join(req);
            }
            return(result);
        }
예제 #5
0
        public static async Task <UserLoginResponse> Login(User req)
        {
            var result      = provider.DB.Login(req);
            var loginResult = new UserLoginResponse();

            if (result != null && result.Id != null)
            {
                //获取所在区
                var player = PlayerBiz.GetById(result.Id, req.AreaId);
                if (player == null || player.Id == null)
                {
                    //该用户在该区没有找到记录,新增加一条
                    player = PlayerBiz.Add(new Player()
                    {
                        Id = Guid.NewGuid().ToString(), UserId = result.Id, AreaId = req.AreaId, CreatedTime = DateTime.Now
                    });
                }
                if (DataCache.Partners.Count > 0)
                {
                    //获取上一次用户登陆,包含区域
                    var lastLogin = UserLoginHistoryBiz.GetById(player.Id);
                    if (lastLogin != null)
                    {
                        DataCache.AddUserLastLoginLog(lastLogin);
                    }
                }
                var param = new PartnerServiceParams()
                {
                    AreaId   = req.AreaId,
                    UserId   = result.Id,
                    PlayerId = player.Id
                };
                loginResult.Id       = result.Id;
                loginResult.Name     = result.Name;
                loginResult.NickName = result.NickName;
                loginResult.AreaId   = req.AreaId;
                // loginResult.Partners = CheckService(param);

                UserLoginHistoryBiz.Add(new UserLoginHistory()
                {
                    UserId = result.Id, PlayerId = player.Id, AreaId = req.AreaId, LoginTime = DateTime.Now
                });
            }
            return(loginResult);
        }
예제 #6
0
        public bool IsCanJoin(PartnerServiceParams param)
        {
            if (string.IsNullOrEmpty(param.PlayerId) || param.Obj == null || param.AreaId <= 0)
            {
                return(false);
            }

            var result = false;

            try
            {
                var partner = param.Obj as Partner;
                if (partner != null)
                {
                    if (partner.BeginTime <= DateTime.Now && partner.EndTime > DateTime.Now)
                    {
                        var condition = JsonConvert.DeserializeObject <PartnerCondition>(partner.ConditionJson);
                        if (condition != null)
                        {
                            var lastLogin = DataCache.GetUserLastLoginLog(param.PlayerId);
                            if (lastLogin != null && DateTime.Now.Subtract(lastLogin.LoginTime).Days >= condition.Day)
                            {
                                var playerResult = PlayerActivityLogBiz.GetById(param.PlayerId, param.PartnerId);
                                if (playerResult == null || playerResult.Id == 0)
                                {
                                    result = true;
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //log
                throw ex;
            }

            return(result);
        }