From b5e1bceabb36fe1d1e5e88397280d12e7044c6dd Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期五, 06 十一月 2026 15:32:31 +0800
Subject: [PATCH] 完善设备采集、安全管理及采购业务
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/collect/MesCollectQueryService.java | 37 +++++++++++++++++++++++++++++++++++++
1 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/collect/MesCollectQueryService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/collect/MesCollectQueryService.java
index a99818e..c3229b5 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/collect/MesCollectQueryService.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/collect/MesCollectQueryService.java
@@ -17,6 +17,11 @@
import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.mes.framework.collect.config.MesCollectProperties;
+import java.time.Duration;
+import java.util.ArrayList;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.invalidParamException;
import java.time.LocalDateTime;
import java.util.List;
@@ -60,6 +65,38 @@
private MesCollectTaskResolver taskResolver;
@Resource
private MesMdWorkstationService workstationService;
+ @Resource
+ private MesCollectProperties collectProperties;
+
+ /** 鍩轰簬淇濈暀鐨勬暟閲囧巻鍙茶绠楃绾垮尯闂达紝棣栨閲囨牱涔嬪墠涓嶄綔鎺ㄦ柇銆� */
+ public MesCollectOfflineResultRespVO getOfflineIntervals(String deviceCode, LocalDateTime start, LocalDateTime end) {
+ LocalDateTime now = LocalDateTime.now();
+ if (deviceCode == null || deviceCode.isBlank() || start == null || end == null || !start.isBefore(end)
+ || end.isAfter(now) || Duration.between(start, end).compareTo(Duration.ofDays(7)) > 0) {
+ throw invalidParamException("璇烽�夋嫨鏈夋晥鐨勮澶囧拰鏃堕棿鑼冨洿锛屽崟娆℃渶澶氭煡璇竷澶╋紝缁撴潫鏃堕棿涓嶈兘鏅氫簬褰撳墠鏃堕棿");
+ }
+ if (start.isBefore(now.minusDays(collectProperties.getRetention().getRealtimeDays()))) {
+ throw invalidParamException("鏌ヨ鏃堕棿瓒呭嚭鏁伴噰鍘嗗彶淇濈暀鏈燂紝鏃犳硶鍙潬璁$畻鍋滄満璁板綍");
+ }
+ var prior = realtimeHistoryMapper.selectOne(new LambdaQueryWrapperX<MesCollectRealtimeHistoryDO>()
+ .eq(MesCollectRealtimeHistoryDO::getDeviceCode, deviceCode)
+ .ge(MesCollectRealtimeHistoryDO::getCollectTime, now.minusDays(collectProperties.getRetention().getRealtimeDays()))
+ .le(MesCollectRealtimeHistoryDO::getCollectTime, start)
+ .orderByDesc(MesCollectRealtimeHistoryDO::getCollectTime).last("LIMIT 1"));
+ var history = realtimeHistoryMapper.selectList(new LambdaQueryWrapperX<MesCollectRealtimeHistoryDO>()
+ .eq(MesCollectRealtimeHistoryDO::getDeviceCode, deviceCode)
+ .gt(MesCollectRealtimeHistoryDO::getCollectTime, start)
+ .le(MesCollectRealtimeHistoryDO::getCollectTime, end)
+ .orderByAsc(MesCollectRealtimeHistoryDO::getCollectTime).last("LIMIT 100001"));
+ if (history.size() > 100000) throw invalidParamException("閲囨牱鏁版嵁杩囧锛岃缂╃煭鏌ヨ鏃堕棿鑼冨洿");
+ List<LocalDateTime> samples = new ArrayList<>();
+ if (prior != null) samples.add(prior.getCollectTime());
+ history.forEach(item -> samples.add(item.getCollectTime()));
+ var intervals = CollectOfflinePolicy.calculate(samples, start, end, Duration.ofMinutes(ONLINE_TIMEOUT_MINUTES)).stream()
+ .map(item -> new MesCollectOfflineIntervalRespVO(item.start(), item.end(), Duration.between(item.start(), item.end()).getSeconds()))
+ .toList();
+ return new MesCollectOfflineResultRespVO(samples.isEmpty() ? null : samples.getFirst(), intervals);
+ }
/**
* 鑾峰彇宸查厤缃暟閲囩紪鐮佺殑璁惧瀹炴椂鐘舵�佸垪琛�
--
Gitblit v1.9.3