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