/// <summary> /// 检查配置,判断是否需要更新当前配置并清空红包池 /// </summary> /// <param name="newestConfig">当前最新的实时配置信息</param> private static void CheckRedPackageConfig(RedPacketConfig newestConfig) { //当前配置为空或者本地配置中红包已经发放完毕则更新配置并重置红包池 if (redPacketConfig == null || redPacketConfig.CurrentPackageCount >= redPacketConfig.PacketCount || redPacketConfig.CurrentAmount >= redPacketConfig.Amount) { redPacketConfig = newestConfig; packagePool = null; return; } //活动标识不一致 说明配置信息需要更新了 if (newestConfig.RedPacketIdentity != redPacketConfig.RedPacketIdentity) { redPacketConfig = newestConfig; packagePool = null; return; } //处理如果在活动进行中修改了活动配置中的总金额、红包总数、红包浮动上限、红包浮动下限 //这里更新配置并清空红包池 等待重新生成红包池 if (redPacketConfig.Amount != newestConfig.Amount || redPacketConfig.PacketCount != newestConfig.PacketCount || redPacketConfig.Ceiling != newestConfig.Ceiling || redPacketConfig.Floor != newestConfig.Floor) { redPacketConfig = newestConfig; packagePool = null; return; } }
/// <summary> /// 获取红包配置 /// </summary> /// <returns></returns> static RedPacketConfig GetRedPacketConfig() { //总金额 decimal amount = 300 * 300 + 100; //100 * 81 + 17 有3.32 小于最小值3.33 //总红包数 int packageCount = 250; //上限 decimal ceiling = 20; //下限 decimal floor = 30; //均分红包 decimal avgPkg = Math.Round(amount / packageCount, 2); //最大红包 decimal maxPkg = Math.Round(avgPkg * (100 + ceiling) / 100, 2); //最小红包 decimal minPkg = Math.Round(avgPkg * (100 - floor) / 100, 2); RedPacketConfig config = new RedPacketConfig() { Amount = amount, PacketCount = packageCount, CurrentAmount = currentAmount, CurrentPackageCount = currentPackageCount, Ceiling = ceiling, Floor = floor, StartTime = DateTime.Now.AddMinutes(-10), EndTime = DateTime.Now.AddMinutes(10), RedPacketIdentity = redPacketIdentity }; return config; }
/// <summary> /// 获取红包配置 /// </summary> /// <returns></returns> static RedPacketConfig GetRedPacketConfig() { //总金额 decimal amount = 300 * 300 + 100; //100 * 81 + 17 有3.32 小于最小值3.33 //总红包数 int packageCount = 250; //上限 decimal ceiling = 20; //下限 decimal floor = 30; //模拟活动进行时配置更改 if (currentPackageCount >= 200) { amount += 200; packageCount += 6; ceiling = 5; //floor = 0; } RedPacketConfig config = new RedPacketConfig() { Amount = amount, PacketCount = packageCount, CurrentAmount = currentAmount, CurrentPackageCount = currentPackageCount, Ceiling = ceiling, Floor = floor, StartTime = DateTime.Now.AddMinutes(-10), EndTime = DateTime.Now.AddMinutes(10), RedPacketIdentity = redPacketIdentity }; return config; }
/// <summary> /// 重置红包池 /// </summary> public static void Reset() { packagePool = null; redPacketConfig = null; }