update 幸运值修改
This commit is contained in:
parent
87a6e09c14
commit
cd57115454
|
@ -10,6 +10,7 @@ import com.m2pool.pool.vo.DateValueVo;
|
|||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -198,4 +199,22 @@ public interface PoolMapper {
|
|||
@DistributionDB
|
||||
public int selectPoolBlock(@Param("reduce")int reduce);
|
||||
|
||||
/**
|
||||
* 查询一段时间内矿池平均算力
|
||||
* @param coin
|
||||
* @param start
|
||||
* @param end
|
||||
* @return
|
||||
*/
|
||||
DateBigDecimalDto getAvgPowerForPool(@Param("coin") String coin, @Param("start")Date start, @Param("end")Date end);
|
||||
|
||||
/**
|
||||
* 查询一段时间段内全网平均算力
|
||||
* @param coin
|
||||
* @param start
|
||||
* @param end
|
||||
* @return
|
||||
*/
|
||||
DateBigDecimalDto getAvgPowerForNet(@Param("coin") String coin, @Param("start")Date start, @Param("end")Date end);
|
||||
|
||||
}
|
||||
|
|
|
@ -399,10 +399,10 @@ public class DataTask {
|
|||
|
||||
}
|
||||
|
||||
//@Scheduled(cron = "30 2,7 0,12 * * ?")
|
||||
|
||||
@Scheduled(cron = "30 2,5 0/12 * * ?")
|
||||
public void NEXALuckyDataToDB(){
|
||||
log.info("nexa幸运值---延时任务开始");
|
||||
log.info("nexa幸运值---定时任务开始");
|
||||
LuckDto dto = new LuckDto();
|
||||
Date end = DateUtils.parseDate(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD));
|
||||
//幸运值 = 矿池实际报块/矿池理论报块
|
||||
|
@ -424,24 +424,27 @@ public class DataTask {
|
|||
//3天矿池实际报块数
|
||||
int actualBlocks = poolMapper.selectPoolBlock(3);
|
||||
//3天幸运值
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
//7天幸运值
|
||||
useAggregated = blockPerDays.size() >= 7;
|
||||
|
||||
blockData = blockDataContext.getBlockData("nexa",start7d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("nexa",PoolUnits.NEXA.gethRate(),start7d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(7);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
//30天幸运值
|
||||
useAggregated = blockPerDays.size() >= 30;
|
||||
|
||||
blockData = blockDataContext.getBlockData("nexa",start30d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("nexa",PoolUnits.NEXA.gethRate(),start30d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(30);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
|
||||
//90天幸运值
|
||||
useAggregated = blockPerDays.size() >= 90;
|
||||
|
@ -449,12 +452,14 @@ public class DataTask {
|
|||
blockData = blockDataContext.getBlockData("nexa",start90d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("nexa",PoolUnits.NEXA.gethRate(),start90d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(90);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
|
||||
redisService.deleteObject("NEXALuck");
|
||||
redisService.setCacheObject("NEXALuck",dto);
|
||||
log.info("nexa幸运值入库完成");
|
||||
log.info("nexa幸运值入库完成---幸运值3天:{},幸运值7天:{},幸运值30天:{},幸运值90天:{},",
|
||||
dto.getLuck3d(),dto.getLuck7d(),dto.getLuck30d(),dto.getLuck90d());
|
||||
}
|
||||
|
||||
|
||||
|
@ -468,47 +473,17 @@ public class DataTask {
|
|||
*/
|
||||
public BigDecimal getTheoreticalBlocks(String coin,int hRate,Date start,Date end,BlockTimeAndNumberDto blockData){
|
||||
|
||||
//得到每一个小时定时任务存储到数据库的全网算力
|
||||
List<DateBigDecimalDto> netPowerList = poolMapper.getDailyNetPower(coin);
|
||||
if(netPowerList.isEmpty()){
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
//得时间段到矿池的算力
|
||||
List<DateBigDecimalDto> poolPowerList = poolMapper.getDailyPoolPower(coin);
|
||||
//A:矿池N天总算力
|
||||
//计算矿池每日实际应出块数 block中算力单位是H/s
|
||||
BigDecimal pPow3d = poolPowerList.stream()
|
||||
.filter(e -> (e.getPDate().before(end)))
|
||||
.filter(e -> (e.getPDate().after(start) || e.getPDate().equals(start)))
|
||||
.map(DateBigDecimalDto::getValue).reduce(BigDecimal.ZERO, BigDecimal::add)
|
||||
.multiply(BigDecimal.valueOf(hRate));
|
||||
//作为A的除数,得到N天内的矿池平均算力
|
||||
long pDay3d = poolPowerList.stream()
|
||||
.filter(e -> (e.getPDate().before(end)))
|
||||
.filter(e -> (e.getPDate().after(start) || e.getPDate().equals(start))).count();
|
||||
//查询一段时间内矿池平均算力
|
||||
DateBigDecimalDto avgPowerForPool = poolMapper.getAvgPowerForPool(coin, start, end);
|
||||
//查询一段时间段内全网平均算力
|
||||
DateBigDecimalDto avgPowerForNet = poolMapper.getAvgPowerForNet(coin, start, end);
|
||||
|
||||
//B:N天全网算力
|
||||
BigDecimal nPow3d = netPowerList.stream()
|
||||
.filter(e -> (e.getPDate().before(end)))
|
||||
.filter(e -> (e.getPDate().after(start) || e.getPDate().equals(start)))
|
||||
.map(DateBigDecimalDto::getValue).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
//作为B的除数,得到3天内的全网平均算力
|
||||
long nDay3d = netPowerList.stream()
|
||||
.filter(e -> (e.getPDate().before(end)))
|
||||
.filter(e -> (e.getPDate().after(start) || e.getPDate().equals(start))).count();
|
||||
|
||||
if(pDay3d == 0 || nDay3d == 0){
|
||||
if(avgPowerForNet.getValue().equals(BigDecimal.ZERO)){
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
return pPow3d
|
||||
.divide(BigDecimal.valueOf(pDay3d),8, RoundingMode.HALF_UP)
|
||||
.divide(nPow3d,8, RoundingMode.HALF_UP)
|
||||
.multiply(BigDecimal.valueOf(nDay3d))
|
||||
.multiply(BigDecimal.valueOf(blockData.getHeight()))
|
||||
.multiply(blockData.getDateLength())
|
||||
.setScale(8, RoundingMode.HALF_UP);
|
||||
return avgPowerForPool.getValue().multiply(BigDecimal.valueOf(hRate)).divide(avgPowerForNet.getValue(),8, RoundingMode.HALF_UP)
|
||||
.multiply(BigDecimal.valueOf(blockData.getHeight())).setScale(8, RoundingMode.HALF_UP);
|
||||
|
||||
}
|
||||
|
||||
|
@ -885,37 +860,42 @@ public class DataTask {
|
|||
//3天矿池实际报块数
|
||||
int actualBlocks = poolMapper.selectPoolBlock(3);
|
||||
//3天幸运值
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
//7天幸运值
|
||||
useAggregated = blockPerDays.size() >= 7;
|
||||
|
||||
blockData = blockDataContext.getBlockData("grs",start7d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("grs",PoolUnits.GRS.gethRate(),start7d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(7);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
//30天幸运值
|
||||
useAggregated = blockPerDays.size() >= 30;
|
||||
|
||||
blockData = blockDataContext.getBlockData("grs",start30d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("grs",PoolUnits.GRS.gethRate(),start30d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(30);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
|
||||
//90天幸运值
|
||||
useAggregated = blockPerDays.size() >= 90;
|
||||
blockData = blockDataContext.getBlockData("grs",start90d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("grs",PoolUnits.GRS.gethRate(),start90d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(90);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
|
||||
|
||||
redisService.deleteObject("GRSLuck");
|
||||
redisService.setCacheObject("GRSLuck",dto);
|
||||
log.info("grs幸运值入库完成");
|
||||
log.info("grs幸运值入库完成---幸运值3天:{},幸运值7天:{},幸运值30天:{},幸运值90天:{},",
|
||||
dto.getLuck3d(),dto.getLuck7d(),dto.getLuck30d(),dto.getLuck90d());;
|
||||
}
|
||||
|
||||
@Scheduled(cron = "12 1,3,12,31,33,42 * * * ?")
|
||||
|
@ -1268,6 +1248,7 @@ public class DataTask {
|
|||
//@Scheduled(cron = "30 2,7 0,12 * * ?")
|
||||
@Scheduled(cron = "32 2,5 0/12 * * ?")
|
||||
public void MONALuckyDataToDB(){
|
||||
log.info("MONA幸运值---定时任务开始");
|
||||
LuckDto dto = new LuckDto();
|
||||
Date end = DateUtils.parseDate(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD));
|
||||
//幸运值 = 矿池实际报块/矿池理论报块
|
||||
|
@ -1293,24 +1274,27 @@ public class DataTask {
|
|||
//3天矿池实际报块数
|
||||
int actualBlocks = poolMapper.selectPoolBlock(3);
|
||||
//3天幸运值
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
//7天幸运值
|
||||
useAggregated = blockPerDays.size() >= 7;
|
||||
|
||||
blockData = blockDataContext.getBlockData("mona",start7d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("mona",PoolUnits.MONA.gethRate(),start7d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(7);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
//30天幸运值
|
||||
useAggregated = blockPerDays.size() >= 30;
|
||||
|
||||
blockData = blockDataContext.getBlockData("mona",start30d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("nexa",PoolUnits.MONA.gethRate(),start30d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(30);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
|
||||
//90天幸运值
|
||||
useAggregated = blockPerDays.size() >= 90;
|
||||
|
@ -1318,10 +1302,13 @@ public class DataTask {
|
|||
blockData = blockDataContext.getBlockData("mona",start90d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("mona",PoolUnits.MONA.gethRate(),start90d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(90);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
redisService.deleteObject("MONALuck");
|
||||
redisService.setCacheObject("MONALuck",dto);
|
||||
log.info("MONA幸运值入库完成---幸运值3天:{},幸运值7天:{},幸运值30天:{},幸运值90天:{},",
|
||||
dto.getLuck3d(),dto.getLuck7d(),dto.getLuck30d(),dto.getLuck90d());
|
||||
}
|
||||
|
||||
@Scheduled(cron = "14 1,3,9,31,33,39 * * * ?")
|
||||
|
@ -3390,7 +3377,7 @@ public class DataTask {
|
|||
//@Scheduled(cron = "30 2,7 0,12 * * ?")
|
||||
@Scheduled(cron = "39 2,5 0/12 * * ?")
|
||||
public void RXDLuckyDataToDB(){
|
||||
log.info("rxd幸运值---定时任务开启");
|
||||
log.info("rxd幸运值---定时任务开始");
|
||||
LuckDto dto = new LuckDto();
|
||||
Date end = DateUtils.parseDate(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD));
|
||||
//幸运值 = 矿池实际报块/矿池理论报块
|
||||
|
@ -3416,24 +3403,27 @@ public class DataTask {
|
|||
//3天矿池实际报块数
|
||||
int actualBlocks = poolMapper.selectPoolBlock(3);
|
||||
//3天幸运值
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck3d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
//7天幸运值
|
||||
useAggregated = blockPerDays.size() >= 7;
|
||||
|
||||
blockData = blockDataContext.getBlockData("rxd",start7d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("rxd",PoolUnits.RXD.gethRate(),start7d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(7);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
//30天幸运值
|
||||
useAggregated = blockPerDays.size() >= 30;
|
||||
|
||||
blockData = blockDataContext.getBlockData("rxd",start30d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("rxd",PoolUnits.RXD.gethRate(),start30d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(30);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
|
||||
//90天幸运值
|
||||
useAggregated = blockPerDays.size() >= 90;
|
||||
|
@ -3441,11 +3431,13 @@ public class DataTask {
|
|||
blockData = blockDataContext.getBlockData("rxd",start90d, end,blockPerDays, useAggregated);
|
||||
throreticalBlocks= getTheoreticalBlocks("rxd",PoolUnits.RXD.gethRate(),start90d, end, blockData);
|
||||
actualBlocks = poolMapper.selectPoolBlock(90);
|
||||
if(!BigDecimal.ZERO.equals(throreticalBlocks)){
|
||||
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
|
||||
|
||||
}
|
||||
redisService.deleteObject("RXDLuck");
|
||||
redisService.setCacheObject("RXDLuck",dto);
|
||||
log.info("rxd幸运值入库完成");
|
||||
log.info("rxd幸运值入库完成---幸运值3天:{},幸运值7天:{},幸运值30天:{},幸运值90天:{},",
|
||||
dto.getLuck3d(),dto.getLuck7d(),dto.getLuck30d(),dto.getLuck90d());
|
||||
}
|
||||
|
||||
@Scheduled(cron = "21 1,3,13,31,33,43 * * * ?")
|
||||
|
|
|
@ -509,6 +509,7 @@ public class NodeTask {
|
|||
try {
|
||||
BlockInfo block = NodeRpc.getBlock(blockName);
|
||||
poolMapper.insertNetBlock(tableName, block.getHeight());
|
||||
log.info("插入币种 {} ,插入的最新高度为{}", blockName,block.getHeight());
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
retryCount++;
|
||||
|
|
|
@ -883,7 +883,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
|
||||
|
||||
<insert id="insertNetBlock">
|
||||
insert into ${tableName} (`date`,`height`) values(#{date},#{height}) ON DUPLICATE KEY UPDATE `height` = VALUES(`height`)
|
||||
insert into ${tableName} (`height`) values(#{height}) ON DUPLICATE KEY UPDATE `height` = VALUES(`height`)
|
||||
</insert>
|
||||
<select id="selectNetBlock" resultType="com.m2pool.pool.dto.BlockInfoDto">
|
||||
SELECT `date`,height FROM ${tableName} WHERE `date` >= DATE_SUB(CURDATE(),INTERVAL 90 DAY) ORDER BY `date` DESC
|
||||
|
@ -891,7 +891,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<select id="selectPoolBlock" resultType="java.lang.Integer">
|
||||
SELECT count(*) FROM nexa_blkreportprofitv2 WHERE `date` >= DATE_SUB(CURDATE(),INTERVAL #{reduce} DAY)
|
||||
</select>
|
||||
|
||||
<select id="getAvgPowerForPool" resultType="com.m2pool.pool.dto.DateBigDecimalDto">
|
||||
select avg(mhs) `value` from ${coin}_pool_30m
|
||||
where `date` >= #{start} and `date` <![CDATA[ <= ]]> #{end}
|
||||
</select>
|
||||
<select id="getAvgPowerForNet" resultType="com.m2pool.pool.dto.DateBigDecimalDto">
|
||||
select avg(`value`) `value` from ${coin}_net_power
|
||||
where `date` >= #{start} and `date` <![CDATA[ <= ]]> #{end}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
|
Loading…
Reference in New Issue