bravo-pool-batchGen-第一个用对比值选出的数组,其余的在新手pool里随机

This commit is contained in:
khalil
2025-03-26 14:20:33 +08:00
parent c9bebe35c5
commit 03ab5038e4

View File

@@ -87,7 +87,21 @@ public class BravoPoolService {
BravoGiftConfig partitionConfig = config.getRatioByPartitionId(partitionId);
BravoPool pool = selectPool(config, partitionConfig, uid, poolType, poolList);
buildPool(config, uid, userPool, pool, poolNum);
List<BravoPool> batchPoolList = new ArrayList<>();
if (poolNum > 1){
int extraPoolNum = poolNum - 1;
List<BravoPool> extraPoolList = poolType.getType() == BravoPoolTypeEnum.NEW_USER_POOL.getType()? poolList:
bravoPoolMapper.selectList(Wrappers.<BravoPool>lambdaQuery()
.eq(BravoPool::getType, BravoPoolTypeEnum.NEW_USER_POOL.getType()));
Collections.shuffle(extraPoolList);
extraPoolList = extraPoolList.stream().limit(extraPoolNum).collect(Collectors.toList());
batchPoolList.addAll(extraPoolList);
}
batchPoolList.add(0, pool);
List<BravoResult> batchResultList = batchPoolList.stream().map(p->buildPool(config, uid, p))
.flatMap(List::stream).collect(Collectors.toList());
userPool.addAll(batchResultList);
} catch (InterruptedException e) {
throw new RuntimeException(e);
@@ -98,7 +112,7 @@ public class BravoPoolService {
}
}
private void buildPool(BravoGiftConfig config, Long uid, RQueue<BravoResult> userPool, BravoPool pool, int poolNum) {
private List<BravoResult> buildPool(BravoGiftConfig config, Long uid, BravoPool pool) {
List<BravoPool.BravoPoolItem> poolItemList = pool.getItemList().stream().filter(item->item.getNum()>0).collect(Collectors.toList());
List<BigDecimal> winList = buildWinList(poolItemList);
BigDecimal[] poolArray = new BigDecimal[config.getPoolSize()];
@@ -120,20 +134,12 @@ public class BravoPoolService {
log.info("[bravo] genPool buildPool uid {}, winIndexList {}", uid, JSON.toJSONString(winIndexList));
}
List<BravoResult> poolList = Arrays.stream(poolArray).map(output->{
return Arrays.stream(poolArray).map(output->{
BravoResult result = new BravoResult();
result.setPoolId(pool.getId());
result.setOutput(output);
return result;
}).collect(Collectors.toList());
List<BravoResult> batchPoolList = new ArrayList<>();
for (int i = 0; i < poolNum; i++) {
Collections.shuffle(poolList);
batchPoolList.addAll(poolList);
log.info("[bravo] genPool buildPool uid {}, batch {} poolList {}", uid, i, JSON.toJSONString(poolList));
}
userPool.addAll(batchPoolList);
}
private List<BigDecimal> buildWinList(List<BravoPool.BravoPoolItem> poolItemList) {