This commit is contained in:
2025-01-13 17:51:26 +08:00
parent 90ba7eff9c
commit 19db286c01
2 changed files with 10 additions and 6 deletions

View File

@@ -2,6 +2,7 @@ package com.sqx.modules.discSpinning.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sqx.common.utils.DateUtils; import com.sqx.common.utils.DateUtils;
@@ -104,13 +105,12 @@ public class DiscSpinningServiceImpl extends ServiceImpl<DiscSpinningDao, DiscSp
recordService.save(record); recordService.save(record);
return record; return record;
} }
Random random = new Random();
BigDecimal maxNumber = prizes.stream() BigDecimal maxNumber = prizes.stream()
.map(DiscSpinning::getNumber) .map(DiscSpinning::getNumber)
.max(BigDecimal::compareTo) .max(BigDecimal::compareTo)
.orElse(null); .orElse(null);
BigDecimal randomNum = new BigDecimal(ThreadLocalRandom.current().nextDouble(0.01, maxNumber.doubleValue())); BigDecimal randomNum = new BigDecimal(RandomUtil.randomDouble(0.01, maxNumber.doubleValue()));
List<DiscSpinningAmount> amounts = new ArrayList<>(); List<DiscSpinningAmount> amounts = new ArrayList<>();
Map<String, List<DiscSpinningAmount>> amountMaps = redisUtils.getMapData(RedisKeys.getDateKey("spinning:amount:") + source, "setDiscSpinningAmounts", DiscSpinningAmount.class); Map<String, List<DiscSpinningAmount>> amountMaps = redisUtils.getMapData(RedisKeys.getDateKey("spinning:amount:") + source, "setDiscSpinningAmounts", DiscSpinningAmount.class);
for (int i = drawCount; i >= 0; i--) { for (int i = drawCount; i >= 0; i--) {
@@ -125,11 +125,11 @@ public class DiscSpinningServiceImpl extends ServiceImpl<DiscSpinningDao, DiscSp
int maxAmount = Integer.parseInt(commonRepository.findOne(900).getValue()); int maxAmount = Integer.parseInt(commonRepository.findOne(900).getValue());
double resultAmount = 0; double resultAmount = 0;
if (prize.getType() == 2) { if (prize.getType() == 2) {
double baseRandom = random.nextDouble(); double baseRandom = RandomUtil.randomDouble(0.01, 1);
double baseAmount = 0; double baseAmount = 0;
for (DiscSpinningAmount amount : amounts) { for (DiscSpinningAmount amount : amounts) {
if (baseRandom < amount.getRandom()) { if (baseRandom < amount.getRandom()) {
resultAmount = baseAmount + random.nextDouble() * (amount.getMaxAmount() - baseAmount); resultAmount = baseAmount + RandomUtil.randomDouble(0.01, 1) * (amount.getMaxAmount() - baseAmount);
break; break;
} }
baseAmount = amount.getMaxAmount(); baseAmount = amount.getMaxAmount();

View File

@@ -43,9 +43,13 @@ public class RedisServiceImpl implements RedisService {
this.redisTemplate = redisTemplate; this.redisTemplate = redisTemplate;
} }
//spinning:amount:3
@Override @Override
public void setDiscSpinningAmounts(String key) { public void setDiscSpinningAmounts(String key) {
List<DiscSpinningAmount> amounts = amountService.list(new QueryWrapper<DiscSpinningAmount>().eq("status", 1).orderByAsc("max_amount")); List<DiscSpinningAmount> amounts = amountService.list(new QueryWrapper<DiscSpinningAmount>()
.eq("status", 1)
.eq("type",key.split(":")[2])
.orderByAsc("max_amount"));
Map<Integer, List<DiscSpinningAmount>> map = Map<Integer, List<DiscSpinningAmount>> map =
amounts.stream().collect(Collectors.groupingBy( amounts.stream().collect(Collectors.groupingBy(
disc -> disc.getNum() == null ? 0 : disc.getNum() disc -> disc.getNum() == null ? 0 : disc.getNum()