bravo-poolItem BigDecimal

This commit is contained in:
khalil
2025-03-24 16:01:17 +08:00
parent d141758f85
commit 64d0cab232
4 changed files with 14 additions and 21 deletions

View File

@@ -91,9 +91,9 @@ public class BravoPoolAdminService {
List<BravoPool> updateList = new ArrayList<>();
for (BravoPool vo: poolList) {
int production = vo.getItemList().stream().filter(item->Objects.nonNull(item.getMulti()) && Objects.nonNull(item.getNum()))
.mapToInt(item->item.getMulti() * item.getNum()).sum();
vo.setExpect(BigDecimal.valueOf(production).divide(BigDecimal.valueOf(config.getPoolSize()), 2, RoundingMode.HALF_UP));
BigDecimal production = vo.getItemList().stream().filter(item->Objects.nonNull(item.getMulti()) && Objects.nonNull(item.getNum()))
.map(item->item.getMulti().multiply(BigDecimal.valueOf(item.getNum()))).reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setExpect(production.divide(BigDecimal.valueOf(config.getPoolSize()), 2, RoundingMode.HALF_UP));
int winNum = vo.getItemList().stream().map(BravoPool.BravoPoolItem::getNum)
.filter(Objects::nonNull).mapToInt(Integer::intValue).sum();
vo.setWinRate(BigDecimal.valueOf(winNum).divide(BigDecimal.valueOf(config.getPoolSize()), 4, RoundingMode.HALF_UP));

View File

@@ -14,7 +14,6 @@ public enum BravoPoolTypeEnum {
NEW_USER_POOL(1, "新人奖池"),
NORMAL_POOL(2, "普通奖池"),
BLACK_POOL(3, "黑名单奖池"),
;

View File

@@ -1,5 +1,6 @@
package com.accompany.business.model.lucky;
import com.accompany.business.mybatis.typehandler.BravoPoolItemListTypeHandler;
import com.accompany.business.mybatis.typehandler.Lucky24PoolItemListTypeHandler;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
@@ -29,14 +30,14 @@ public class BravoPool {
@ApiModelProperty("更新时间")
private Date updateTime;
@ApiModelProperty("池子列表")
@TableField(typeHandler = Lucky24PoolItemListTypeHandler.class)
@TableField(typeHandler = BravoPoolItemListTypeHandler.class)
private List<BravoPoolItem> itemList;
@ApiModel
@Data
public static class BravoPoolItem {
@ApiModelProperty("倍率")
private Integer multi;
private BigDecimal multi;
@ApiModelProperty("数量")
private Integer num;
}

View File

@@ -1,19 +1,13 @@
package com.accompany.business.service.lucky;
import com.accompany.business.constant.BravoPoolTypeEnum;
import com.accompany.business.constant.Lucky24PoolTypeEnum;
import com.accompany.business.dto.lucky.BravoGiftConfig;
import com.accompany.business.dto.lucky.Lucky24GiftConfig;
import com.accompany.business.dto.lucky.BravoResult;
import com.accompany.business.model.lucky.BravoPool;
import com.accompany.business.model.lucky.Lucky24Pool;
import com.accompany.business.mybatismapper.lucky.BravoPoolMapper;
import com.accompany.business.mybatismapper.lucky.Lucky24PoolMapper;
import com.accompany.common.redis.RedisKey;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.common.utils.RandomUtil;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -24,7 +18,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.*;
@@ -106,10 +99,10 @@ public class BravoPoolService {
private void buildPool(BravoGiftConfig config, Long uid, RQueue<BravoResult> userPool, BravoPool pool) {
List<BravoPool.BravoPoolItem> poolItemList = pool.getItemList().stream().filter(item->item.getNum()>0).collect(Collectors.toList());
List<Integer> winList = buildWinList(poolItemList);
int[] poolArray = new int[config.getPoolSize()];
List<BigDecimal> winList = buildWinList(poolItemList);
BigDecimal[] poolArray = new BigDecimal[config.getPoolSize()];
for (int i = 0; i < config.getPoolSize(); i++) {
poolArray[i] = 0;
poolArray[i] = BigDecimal.ZERO;
}
if (!winList.isEmpty()){
@@ -126,20 +119,20 @@ public class BravoPoolService {
log.info("[bravo] genPool buildPool uid {}, winIndexList {}", uid, JSON.toJSONString(winIndexList));
}
List<BravoResult> poolList = Arrays.stream(poolArray).boxed().map(output->{
List<BravoResult> poolList = Arrays.stream(poolArray).map(output->{
BravoResult result = new BravoResult();
result.setPoolId(pool.getId());
result.setOutput(BigDecimal.valueOf(output));
result.setOutput(output);
return result;
}).collect(Collectors.toList());
userPool.addAll(poolList);
}
private List<Integer> buildWinList(List<BravoPool.BravoPoolItem> poolItemList) {
List<Integer> resultList = new ArrayList<>();
private List<BigDecimal> buildWinList(List<BravoPool.BravoPoolItem> poolItemList) {
List<BigDecimal> resultList = new ArrayList<>();
for (BravoPool.BravoPoolItem item : poolItemList) {
int multi = item.getMulti();
BigDecimal multi = item.getMulti();
int num = item.getNum();
// 使用循环生成 num 个 multi 值,并添加到 resultList 中