From 1c4d65b3e430b428d94724cbb2a7068d0f611b9d Mon Sep 17 00:00:00 2001 From: yyb <1416014977@qq.com> Date: Thu, 29 Jan 2026 16:21:43 +0800 Subject: [PATCH] =?UTF-8?q?update=202miner=20=E7=AD=96=E7=95=A5=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TwoMinersHashrateStrategy.java | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/m2pool/lease/strategy/hashrate/impl/TwoMinersHashrateStrategy.java b/src/main/java/com/m2pool/lease/strategy/hashrate/impl/TwoMinersHashrateStrategy.java index b52aa59..9198c2f 100644 --- a/src/main/java/com/m2pool/lease/strategy/hashrate/impl/TwoMinersHashrateStrategy.java +++ b/src/main/java/com/m2pool/lease/strategy/hashrate/impl/TwoMinersHashrateStrategy.java @@ -1,5 +1,6 @@ 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.RealHashrateInfoDto; import com.m2pool.lease.mapper.LeaseOrderMiningMapper; @@ -48,15 +49,50 @@ public class TwoMinersHashrateStrategy implements HashrateFetchStrategy { dto.setEndTime(queryEndTime); } List recently24HourHashrate = leaseOrderMiningMapper.getRecently24HourHashrate(list, POOL_NAME); + System.out.println("yyb-最近算力 = " + JSONUtil.toJsonPrettyStr(recently24HourHashrate)); - //TODO 根据list中开始时间和结束时间 取recently24HourHashrate中(5分钟一个)值,如开始时间是2026-01-28 17:13:33 - // 那么取第一个值就是 2026-01-28 17:45:00点的数据, - // 第二个就是2026-01-28 18:15:00 - // 第三个就是2026-01-28 18:45:00 以此类推。 + // 根据list中开始时间和结束时间 取recently24HourHashrate中(5分钟一个)值,如开始时间是2026-01-28 17:13:33 + // 那么取第一个值就是 2026-01-28 17:15:00点的数据, + // 第二个就是2026-01-28 17:45:00 + // 第三个就是2026-01-28 18:15:00 以此类推。 + List 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); + } }