Example #1
0
        public async Task <WrappedResponse <RewardInfoVm> > Handle(GetLoginRewardCommand request, CancellationToken cancellationToken)
        {
            DateTime tnow      = DateTime.Now;
            int      dayOfWeek = (int)tnow.DayOfWeek;

            using var locker = _redis.Locker(KeyGenTool.GenUserWeekKey(tnow, request.Id, nameof(LoginRewardInfo)));

            var rewardInfo = await _redis.GetLoginReward(tnow, request.Id);

            long rewardCoins = 0;

            if (rewardInfo == null || !rewardInfo.GettedDays.Contains(dayOfWeek))
            {
                rewardCoins = RewardManager.LoginRewardConf.DayRewards[dayOfWeek];
                if (rewardInfo == null)
                {
                    rewardInfo = new LoginRewardInfo(request.Id, new List <int>());
                }
                rewardInfo.GettedDays.Add(dayOfWeek);
                await _redis.SetUserLoginReward(tnow, rewardInfo);

                _ = _mqBus.Publish(new AddMoneyMqCmd(request.Id, rewardCoins, 0, AddReason.LoginReward));
            }
            else
            {
                return(new WrappedResponse <RewardInfoVm>(ResponseStatus.RewardGetted));
            }

            return(new WrappedResponse <RewardInfoVm>(ResponseStatus.Success, null, new RewardInfoVm(rewardCoins)));
        }
        public async Task <BodyResponse <RewardInfoVM> > Handle(GetLoginRewardCommand request, CancellationToken cancellationToken)
        {
            DateTime tnow      = DateTime.Now;
            int      dayOfWeek = (int)tnow.DayOfWeek;

            using (var locker = _redis.Locker(KeyGenHelper.GenUserWeekKey(tnow, request.Id, LoginRewardInfo.className)))
            {
                var rewardInfo = await _redis.GetLoginReward(tnow, request.Id);

                long rewardCoins = 0;
                if (rewardInfo == null || !rewardInfo.GettedDays.Contains(dayOfWeek))
                {
                    rewardCoins = _loginConfig.DayRewards[dayOfWeek];
                    if (rewardInfo == null)
                    {
                        rewardInfo = new LoginRewardInfo(request.Id, new List <int>());
                    }
                    rewardInfo.GettedDays.Add(dayOfWeek);
                    await _redis.SetUserLoginReward(tnow, rewardInfo);

                    _ = _mqBus.Publish(new AddMoneyMqCommand(request.Id, rewardCoins, 0, AddReason.LoginReward));
                }
                else
                {
                    return(new BodyResponse <RewardInfoVM>(StatusCodeDefines.RewardGetted));
                }

                return(new BodyResponse <RewardInfoVM>(StatusCodeDefines.Success, null, new RewardInfoVM(rewardCoins)));
            }
        }
 public Task SetUserLoginReward(DateTime date, LoginRewardInfo info)
 {
     return(RedisOpt.SetStringAsync(KeyGenTool.GenUserWeekKey(date, info.Id, nameof(LoginRewardInfo)), info, TimeSpan.FromDays(8)));
 }
        public List <LoginRewardVM.OneReward> GenReward(DateTime time, LoginRewardInfo reward)
        {
            List <LoginRewardVM.OneReward> daysReward = new List <LoginRewardVM.OneReward>();
            int dayOfWeek = (int)time.DayOfWeek;

            for (int i = 0; i < _loginConfig.DayRewards.Count; ++i)
            {
                LoginRewardVM.OneReward oneReward;
                if (dayOfWeek > i)
                {
                    if (reward == null || !reward.GettedDays.Contains(i))
                    {
                        oneReward = new LoginRewardVM.OneReward
                        {
                            DayIndex    = i,
                            RewardCoins = _loginConfig.DayRewards[i],
                            state       = LoginRewardVM.OneRewardState.NotGetted
                        };
                    }
                    else
                    {
                        oneReward = new LoginRewardVM.OneReward
                        {
                            DayIndex    = i,
                            RewardCoins = _loginConfig.DayRewards[i],
                            state       = LoginRewardVM.OneRewardState.Getted
                        };
                    }
                }

                else if (dayOfWeek < i)
                {
                    oneReward = new LoginRewardVM.OneReward
                    {
                        DayIndex    = i,
                        RewardCoins = _loginConfig.DayRewards[i],
                        state       = LoginRewardVM.OneRewardState.Waitting
                    };
                }
                else
                {
                    if (reward == null || !reward.GettedDays.Contains(i))
                    {
                        oneReward = new LoginRewardVM.OneReward
                        {
                            DayIndex    = i,
                            RewardCoins = _loginConfig.DayRewards[i],
                            state       = LoginRewardVM.OneRewardState.Available
                        };
                    }
                    else
                    {
                        oneReward = new LoginRewardVM.OneReward
                        {
                            DayIndex    = i,
                            RewardCoins = _loginConfig.DayRewards[i],
                            state       = LoginRewardVM.OneRewardState.Getted
                        };
                    }
                }
                daysReward.Add(oneReward);
            }
            return(daysReward);
        }
 public Task SetUserLoginReward(DateTime date, LoginRewardInfo info)
 {
     return(_redis.SetStringAsync(KeyGenHelper.GenUserWeekKey(date, info.Id, LoginRewardInfo.className), info, TimeSpan.FromDays(8)));
 }