@@ -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天幸运值
dto . setLuck3d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck7d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck30d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck90d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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> net PowerList = 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 avg PowerForPool = 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天幸运值
dto . setLuck3d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck7d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck30d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck90d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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天幸运值
dto . setLuck3d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck7d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck30d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck90d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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天幸运值
dto . setLuck3d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck7d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck30d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 ) ;
dto . setLuck90d ( BigDecimal . valueOf ( actualBlocks ) . divide ( throreticalBlocks , 8 , RoundingMode . HALF_UP ) . doubleValue ( ) ) ;
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 * * * ? " )