update 全网算力优化,幸运值算法优化

This commit is contained in:
yyb 2025-05-07 17:07:10 +08:00
parent 3565396252
commit 589470260c
6 changed files with 96 additions and 92 deletions

View File

@ -22,8 +22,8 @@ public class BlockDataContext {
@Resource @Resource
private DetailedBlockDataV2Strategy detailedBlockDataV2Strategy; private DetailedBlockDataV2Strategy detailedBlockDataV2Strategy;
public BlockTimeAndNumberDto getBlockData(Date start, Date end, List<BlockInfoDto> blockPerDays, boolean useAggregated) { public BlockTimeAndNumberDto getBlockData(String coin,Date start, Date end, List<BlockInfoDto> blockPerDays, boolean useAggregated) {
return useAggregated ? detailedBlockDataV2Strategy.getTotalBlocks(start, end,blockPerDays) return useAggregated ? detailedBlockDataV2Strategy.getTotalBlocks(coin,start, end,blockPerDays)
: detailedBlockDataV1Strategy.getTotalBlocks(start, end,blockPerDays) ; : detailedBlockDataV1Strategy.getTotalBlocks(coin,start, end,blockPerDays) ;
} }
} }

View File

@ -56,4 +56,19 @@ public enum PoolCalParamConfig {
public BigDecimal getPoolFees() { public BigDecimal getPoolFees() {
return poolFees; return poolFees;
} }
/**
* 根据 coin 名称获取对应的全网每日出块数
* @param coin 币种名称 "grs", "nexa"
* @return 对应的全网每日出块数
*/
public static BigDecimal getCoinCount(String coin) {
for (PoolCalParamConfig config : PoolCalParamConfig.values()) {
if (config.getCoin().equalsIgnoreCase(coin)) {
return config.getCount();
}
}
return BigDecimal.ZERO;
}
} }

View File

@ -11,6 +11,8 @@ import java.math.RoundingMode;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import static com.m2pool.pool.enums.PoolCalParamConfig.getCoinCount;
/** /**
* 旧版 * 旧版
* 用于获取矿池实际报块一段时间内总数 * 用于获取矿池实际报块一段时间内总数
@ -24,26 +26,25 @@ public class DetailedBlockDataV1Strategy implements PoolBlockDataStrategy {
@Override @Override
public BlockTimeAndNumberDto getTotalBlocks(Date start, Date end,List<BlockInfoDto> blockPerDays ) { public BlockTimeAndNumberDto getTotalBlocks(String coin,Date start, Date end,List<BlockInfoDto> blockPerDays ) {
if (blockPerDays.isEmpty()){ if (blockPerDays.isEmpty()){
return BlockTimeAndNumberDto.builder().dateLength(BigDecimal.ZERO).height(0).build(); return BlockTimeAndNumberDto.builder().dateLength(BigDecimal.ZERO).height(0).build();
} }
//每日出块数固定的出块数
long count = blockPerDays.stream() BigDecimal nexaCount = getCoinCount(coin);
.filter(e -> (e.getDate().before(end)))
.filter(e -> (e.getDate().after(start) || e.getDate().equals(start)))
.count();
//每日出块数固定的舍弃
// BigDecimal nexaCount = PoolCalParamConfig.NEXA.getCount();
long diffInMillis = end.getTime() - start.getTime(); long diffInMillis = end.getTime() - start.getTime();
BigDecimal dateLength2 = BigDecimal.valueOf(diffInMillis).divide(BigDecimal.valueOf(86400000), 0, RoundingMode.HALF_UP); BigDecimal dateLength2 = BigDecimal.valueOf(diffInMillis).divide(BigDecimal.valueOf(86400000), 0, RoundingMode.HALF_UP);
Date poolStart = blockPerDays.get(blockPerDays.size() - 1).getDate(); Date poolStart = blockPerDays.get(blockPerDays.size() - 1).getDate();
//获取时间段内全网的实际报块数
int height = dateLength2.multiply(nexaCount).intValue();
//天数不足时以实际天数计算 //天数不足时以实际天数计算
if(poolStart.after(start)){ if(poolStart.after(start)){
dateLength2 = dateLength2.subtract(BigDecimal.valueOf(poolStart.getTime() - start.getTime()).divide(BigDecimal.valueOf(86400000), 2, BigDecimal.ROUND_HALF_UP)); dateLength2 = dateLength2
.subtract(BigDecimal.valueOf(poolStart.getTime() - start.getTime())
.divide(BigDecimal.valueOf(86400000), 2, RoundingMode.HALF_UP));
height = dateLength2.multiply(nexaCount).intValue();
} }
return BlockTimeAndNumberDto.builder().dateLength(dateLength2).height((int) count).build(); return BlockTimeAndNumberDto.builder().dateLength(dateLength2).height(height).build();
} }
} }

View File

@ -23,7 +23,7 @@ public class DetailedBlockDataV2Strategy implements PoolBlockDataStrategy {
private PoolMapper poolMapper; private PoolMapper poolMapper;
@Override @Override
public BlockTimeAndNumberDto getTotalBlocks(Date start, Date end, List<BlockInfoDto> blockPerDays) { public BlockTimeAndNumberDto getTotalBlocks(String coin,Date start, Date end, List<BlockInfoDto> blockPerDays) {
List<BlockInfoDto> collect = blockPerDays.stream() List<BlockInfoDto> collect = blockPerDays.stream()
.filter(e -> (e.getDate().before(end))) .filter(e -> (e.getDate().before(end)))
.filter(e -> (e.getDate().after(start) || e.getDate().equals(start))) .filter(e -> (e.getDate().after(start) || e.getDate().equals(start)))

View File

@ -14,9 +14,10 @@ public interface PoolBlockDataStrategy {
/** /**
* 获取矿池区块数 计算幸运值 * 获取矿池区块数 计算幸运值
* @param coin 币种名
* @param start 查询开始时间 * @param start 查询开始时间
* @param end 查询结束时间当前系统时间 * @param end 查询结束时间当前系统时间
* @return * @return
*/ */
BlockTimeAndNumberDto getTotalBlocks(Date start, Date end, List<BlockInfoDto> blockPerDays); BlockTimeAndNumberDto getTotalBlocks(String coin,Date start, Date end, List<BlockInfoDto> blockPerDays);
} }

View File

@ -416,45 +416,40 @@ public class DataTask {
//获取全网实际90天内的报块数(v2) //获取全网实际90天内的报块数(v2)
List<BlockInfoDto> blockPerDays = poolMapper.selectNetBlock("nexa_net_block"); List<BlockInfoDto> blockPerDays = poolMapper.selectNetBlock("nexa_net_block");
//获取矿池实际90天内的报块数(v1)
List<BlockInfoDto> list = poolMapper.getNEXABlockInfoList();
boolean useAggregated = blockPerDays.size() >= 3; boolean useAggregated = blockPerDays.size() >= 3;
//获取3天内全网的实际报块数 //获取3天内全网的实际报块数
blockPerDays = useAggregated ? blockPerDays : list; BlockTimeAndNumberDto blockData = blockDataContext.getBlockData("nexa",start3d, end,blockPerDays, useAggregated);
BlockTimeAndNumberDto blockData = blockDataContext.getBlockData(start3d, end,blockPerDays, useAggregated);
//3天矿池理论报块数 //3天矿池理论报块数
BigDecimal dayChunk = getTheoreticalBlocks("nexa",start3d, end, blockData); BigDecimal throreticalBlocks = getTheoreticalBlocks("nexa",start3d, end, blockData);
//3天矿池实际报块数 //3天矿池实际报块数
int actualBlocks = poolMapper.selectPoolBlock(3); int actualBlocks = poolMapper.selectPoolBlock(3);
//3天幸运值 //3天幸运值
dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//7天幸运值 //7天幸运值
useAggregated = blockPerDays.size() >= 7; useAggregated = blockPerDays.size() >= 7;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start7d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("nexa",start7d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("nexa",start7d, end, blockData); throreticalBlocks= getTheoreticalBlocks("nexa",start7d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(7); actualBlocks = poolMapper.selectPoolBlock(7);
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//30天幸运值 //30天幸运值
useAggregated = blockPerDays.size() >= 30; useAggregated = blockPerDays.size() >= 30;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start30d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("nexa",start30d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("nexa",start30d, end, blockData); throreticalBlocks= getTheoreticalBlocks("nexa",start30d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(30); actualBlocks = poolMapper.selectPoolBlock(30);
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//90天幸运值 //90天幸运值
useAggregated = blockPerDays.size() >= 90; useAggregated = blockPerDays.size() >= 90;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start90d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("nexa",start90d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("nexa",start90d, end, blockData); throreticalBlocks= getTheoreticalBlocks("nexa",start90d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(90); actualBlocks = poolMapper.selectPoolBlock(90);
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
redisService.deleteObject("NEXALuck"); redisService.deleteObject("NEXALuck");
@ -883,45 +878,39 @@ public class DataTask {
//获取全网实际90天内的报块数(v2) //获取全网实际90天内的报块数(v2)
List<BlockInfoDto> blockPerDays = poolMapper.selectNetBlock("grs_net_block"); List<BlockInfoDto> blockPerDays = poolMapper.selectNetBlock("grs_net_block");
//获取矿池实际90天内的报块数(v1)
List<BlockInfoDto> list = poolMapper.getNEXABlockInfoList();
boolean useAggregated = blockPerDays.size() >= 3; boolean useAggregated = blockPerDays.size() >= 3;
//获取3天内全网的实际报块数 //获取3天内全网的实际报块数
blockPerDays = useAggregated ? blockPerDays : list; BlockTimeAndNumberDto blockData = blockDataContext.getBlockData("grs",start3d, end,blockPerDays, useAggregated);
BlockTimeAndNumberDto blockData = blockDataContext.getBlockData(start3d, end,blockPerDays, useAggregated);
//3天矿池理论报块数 //3天矿池理论报块数
BigDecimal dayChunk = getTheoreticalBlocks("grs",start3d, end, blockData); BigDecimal throreticalBlocks= getTheoreticalBlocks("grs",start3d, end, blockData);
//3天矿池实际报块数 //3天矿池实际报块数
int actualBlocks = poolMapper.selectPoolBlock(3); int actualBlocks = poolMapper.selectPoolBlock(3);
//3天幸运值 //3天幸运值
dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//7天幸运值 //7天幸运值
useAggregated = blockPerDays.size() >= 7; useAggregated = blockPerDays.size() >= 7;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start7d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("grs",start7d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("grs",start7d, end, blockData); throreticalBlocks= getTheoreticalBlocks("grs",start7d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(7); actualBlocks = poolMapper.selectPoolBlock(7);
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//30天幸运值 //30天幸运值
useAggregated = blockPerDays.size() >= 30; useAggregated = blockPerDays.size() >= 30;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start30d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("grs",start30d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("grs",start30d, end, blockData); throreticalBlocks= getTheoreticalBlocks("grs",start30d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(30); actualBlocks = poolMapper.selectPoolBlock(30);
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//90天幸运值 //90天幸运值
useAggregated = blockPerDays.size() >= 90; useAggregated = blockPerDays.size() >= 90;
blockPerDays = useAggregated ? blockPerDays : list; blockData = blockDataContext.getBlockData("grs",start90d, end,blockPerDays, useAggregated);
blockData = blockDataContext.getBlockData(start90d, end,blockPerDays, useAggregated); throreticalBlocks= getTheoreticalBlocks("grs",start90d, end, blockData);
dayChunk = getTheoreticalBlocks("grs",start90d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(90); actualBlocks = poolMapper.selectPoolBlock(90);
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -1293,45 +1282,44 @@ public class DataTask {
//获取全网实际90天内的报块数(v2) //获取全网实际90天内的报块数(v2)
List<BlockInfoDto> blockPerDays = poolMapper.selectNetBlock("mona_net_block"); List<BlockInfoDto> blockPerDays = poolMapper.selectNetBlock("mona_net_block");
//获取矿池实际90天内的报块数(v1)
List<BlockInfoDto> list = poolMapper.getNEXABlockInfoList();
boolean useAggregated = blockPerDays.size() >= 3; boolean useAggregated = blockPerDays.size() >= 3;
//获取3天内全网的实际报块数 //获取3天内全网的实际报块数
blockPerDays = useAggregated ? blockPerDays : list;
BlockTimeAndNumberDto blockData = blockDataContext.getBlockData(start3d, end,blockPerDays, useAggregated); BlockTimeAndNumberDto blockData = blockDataContext.getBlockData("mona",start3d, end,blockPerDays, useAggregated);
//3天矿池理论报块数 //3天矿池理论报块数
BigDecimal dayChunk = getTheoreticalBlocks("mona",start3d, end, blockData); BigDecimal throreticalBlocks= getTheoreticalBlocks("mona",start3d, end, blockData);
//3天矿池实际报块数 //3天矿池实际报块数
int actualBlocks = poolMapper.selectPoolBlock(3); int actualBlocks = poolMapper.selectPoolBlock(3);
//3天幸运值 //3天幸运值
dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//7天幸运值 //7天幸运值
useAggregated = blockPerDays.size() >= 7; useAggregated = blockPerDays.size() >= 7;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start7d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("mona",start7d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("mona",start7d, end, blockData); throreticalBlocks= getTheoreticalBlocks("mona",start7d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(7); actualBlocks = poolMapper.selectPoolBlock(7);
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//30天幸运值 //30天幸运值
useAggregated = blockPerDays.size() >= 30; useAggregated = blockPerDays.size() >= 30;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start30d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("mona",start30d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("nexa",start30d, end, blockData); throreticalBlocks= getTheoreticalBlocks("nexa",start30d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(30); actualBlocks = poolMapper.selectPoolBlock(30);
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//90天幸运值 //90天幸运值
useAggregated = blockPerDays.size() >= 90; useAggregated = blockPerDays.size() >= 90;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start90d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("mona",start90d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("mona",start90d, end, blockData); throreticalBlocks= getTheoreticalBlocks("mona",start90d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(90); actualBlocks = poolMapper.selectPoolBlock(90);
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
redisService.deleteObject("MONALuck"); redisService.deleteObject("MONALuck");
redisService.setCacheObject("MONALuck",dto); redisService.setCacheObject("MONALuck",dto);
@ -3417,45 +3405,44 @@ public class DataTask {
//获取全网实际90天内的报块数(v2) //获取全网实际90天内的报块数(v2)
List<BlockInfoDto> blockPerDays = poolMapper.selectNetBlock("rxd_net_block"); List<BlockInfoDto> blockPerDays = poolMapper.selectNetBlock("rxd_net_block");
//获取矿池实际90天内的报块数(v1)
List<BlockInfoDto> list = poolMapper.getNEXABlockInfoList();
boolean useAggregated = blockPerDays.size() >= 3; boolean useAggregated = blockPerDays.size() >= 3;
//获取3天内全网的实际报块数 //获取3天内全网的实际报块数
blockPerDays = useAggregated ? blockPerDays : list;
BlockTimeAndNumberDto blockData = blockDataContext.getBlockData(start3d, end,blockPerDays, useAggregated); BlockTimeAndNumberDto blockData = blockDataContext.getBlockData("rxd",start3d, end,blockPerDays, useAggregated);
//3天矿池理论报块数 //3天矿池理论报块数
BigDecimal dayChunk = getTheoreticalBlocks("rxd",start3d, end, blockData); BigDecimal throreticalBlocks= getTheoreticalBlocks("rxd",start3d, end, blockData);
//3天矿池实际报块数 //3天矿池实际报块数
int actualBlocks = poolMapper.selectPoolBlock(3); int actualBlocks = poolMapper.selectPoolBlock(3);
//3天幸运值 //3天幸运值
dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//7天幸运值 //7天幸运值
useAggregated = blockPerDays.size() >= 7; useAggregated = blockPerDays.size() >= 7;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start7d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("rxd",start7d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("rxd",start7d, end, blockData); throreticalBlocks= getTheoreticalBlocks("rxd",start7d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(7); actualBlocks = poolMapper.selectPoolBlock(7);
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//30天幸运值 //30天幸运值
useAggregated = blockPerDays.size() >= 30; useAggregated = blockPerDays.size() >= 30;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start30d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("rxd",start30d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("rxd",start30d, end, blockData); throreticalBlocks= getTheoreticalBlocks("rxd",start30d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(30); actualBlocks = poolMapper.selectPoolBlock(30);
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
//90天幸运值 //90天幸运值
useAggregated = blockPerDays.size() >= 90; useAggregated = blockPerDays.size() >= 90;
blockPerDays = useAggregated ? blockPerDays : list;
blockData = blockDataContext.getBlockData(start90d, end,blockPerDays, useAggregated); blockData = blockDataContext.getBlockData("rxd",start90d, end,blockPerDays, useAggregated);
dayChunk = getTheoreticalBlocks("rxd",start90d, end, blockData); throreticalBlocks= getTheoreticalBlocks("rxd",start90d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(90); actualBlocks = poolMapper.selectPoolBlock(90);
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(dayChunk,8, RoundingMode.HALF_UP).doubleValue()); dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
redisService.deleteObject("RXDLuck"); redisService.deleteObject("RXDLuck");
redisService.setCacheObject("RXDLuck",dto); redisService.setCacheObject("RXDLuck",dto);