bravo-poolItem BigDecimal
This commit is contained in:
@@ -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));
|
||||
|
@@ -14,7 +14,6 @@ public enum BravoPoolTypeEnum {
|
||||
|
||||
NEW_USER_POOL(1, "新人奖池"),
|
||||
NORMAL_POOL(2, "普通奖池"),
|
||||
BLACK_POOL(3, "黑名单奖池"),
|
||||
|
||||
;
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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 中
|
||||
|
Reference in New Issue
Block a user