update 2miner 策略修改

This commit is contained in:
yyb
2026-01-29 16:21:43 +08:00
parent faf75ec870
commit 1c4d65b3e4

View File

@@ -1,5 +1,6 @@
package com.m2pool.lease.strategy.hashrate.impl; package com.m2pool.lease.strategy.hashrate.impl;
import cn.hutool.json.JSONUtil;
import com.m2pool.lease.dto.v2.PurchasedMachineListDto; import com.m2pool.lease.dto.v2.PurchasedMachineListDto;
import com.m2pool.lease.dto.v2.RealHashrateInfoDto; import com.m2pool.lease.dto.v2.RealHashrateInfoDto;
import com.m2pool.lease.mapper.LeaseOrderMiningMapper; import com.m2pool.lease.mapper.LeaseOrderMiningMapper;
@@ -48,15 +49,50 @@ public class TwoMinersHashrateStrategy implements HashrateFetchStrategy {
dto.setEndTime(queryEndTime); dto.setEndTime(queryEndTime);
} }
List<RealHashrateInfoDto> recently24HourHashrate = leaseOrderMiningMapper.getRecently24HourHashrate(list, POOL_NAME); List<RealHashrateInfoDto> recently24HourHashrate = leaseOrderMiningMapper.getRecently24HourHashrate(list, POOL_NAME);
System.out.println("yyb-最近算力 = " + JSONUtil.toJsonPrettyStr(recently24HourHashrate));
//TODO 根据list中开始时间和结束时间 取recently24HourHashrate中5分钟一个值,如开始时间是2026-01-28 17:13:33 // 根据list中开始时间和结束时间 取recently24HourHashrate中5分钟一个值,如开始时间是2026-01-28 17:13:33
// 那么取第一个值就是 2026-01-28 17:45:00点的数据 // 那么取第一个值就是 2026-01-28 17:15:00点的数据
// 第二个就是2026-01-28 18:15:00 // 第二个就是2026-01-28 17:45:00
// 第三个就是2026-01-28 18:45:00 以此类推。 // 第三个就是2026-01-28 18:15:00 以此类推。
List<RealHashrateInfoDto> filteredHashrateList = new ArrayList<>();
return recently24HourHashrate; for (PurchasedMachineListDto dto : list) {
LocalDateTime startTime = dto.getStartTime();
LocalDateTime endTime = dto.getEndTime();
// 将开始时间向上取整到最近的5分钟
LocalDateTime currentQueryTime = roundUpToNext5Minutes(startTime);
while (currentQueryTime.isBefore(endTime) || currentQueryTime.isEqual(endTime)) {
// 在recently24HourHashrate中查找匹配的记录
for (RealHashrateInfoDto hashrateDto : recently24HourHashrate) {
if (hashrateDto.getOrderItemId().equals(dto.getOrderItemId())
&& hashrateDto.getDatetime().isEqual(currentQueryTime)) {
filteredHashrateList.add(hashrateDto);
break;
}
}
// 移动到下一个30分钟间隔
currentQueryTime = currentQueryTime.plusMinutes(DATA_INTERVAL_MINUTES);
}
} }
return filteredHashrateList;
}
/**
* 将时间向上取整到最近的5分钟
* 例如2026-01-28 17:13:33 -> 2026-01-28 17:15:00
* 例如2026-01-28 17:15:00 -> 2026-01-28 17:15:00
* 例如2026-01-28 17:16:30 -> 2026-01-28 17:20:00
*/
private LocalDateTime roundUpToNext5Minutes(LocalDateTime dateTime) {
int minute = dateTime.getMinute();
int remainder = minute % 5;
if (remainder == 0) {
return dateTime;
}
return dateTime.plusMinutes(5 - remainder).withSecond(0).withNano(0);
}
} }