qiangxuan 6 ay önce
ebeveyn
işleme
b3aeebd213

+ 36 - 2
jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -1,6 +1,7 @@
 package org.jeecg.common.util;
 
 import org.jeecg.common.constant.SymbolConstant;
+import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.util.StringUtils;
 
 import java.beans.PropertyEditorSupport;
@@ -12,6 +13,7 @@ import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.Calendar;
 import java.util.Date;
@@ -827,7 +829,39 @@ public class DateUtils extends PropertyEditorSupport {
         return calendar.getTime();
     }
 
-    public static void main(String[] args) {
-        System.out.println(addHours(new Date(), 8));;
+    public static boolean isHour23(Date date) {
+        if (date == null) {
+            return false;
+        }
+        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+        return localDateTime.getHour() == 23;
+    }
+    /**
+     * 判断创建时间是否在开始时间和结束时间范围内
+     * @param createTime
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    public static boolean containsCreateTime(LocalDateTime createTime, String startTime, String endTime) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime start_time = LocalDateTime.parse(startTime, formatter);
+        LocalDateTime end_time = LocalDateTime.parse(endTime, formatter);
+        return createTime!= null && (createTime.isAfter(start_time) || createTime.equals(start_time)) &&
+                (createTime.isBefore(end_time) || createTime.equals(end_time));
+    }
+
+    /**
+     * 辅助方法,用于根据给定的时间范围构建Criteria,并加上8小时
+     * @param timeRange
+     * @return
+     */
+    public static Criteria buildTimeRangeCriteria(Date[] timeRange) {
+        Date startTime = timeRange[0];
+        Date endTime = timeRange[1];
+        // 加8小时
+        Date startTimePlus8Hours = DateUtils.addHours(startTime, 8);
+        Date endTimePlus8Hours = DateUtils.addHours(endTime, 8);
+        return Criteria.where("createTime").gte(startTimePlus8Hours).lte(endTimePlus8Hours);
     }
 }

+ 13 - 7
jeecg-module-gather/src/main/java/org/jeecg/modules/fpgJob/LeanEventTriggerWarnTask.java

@@ -45,7 +45,11 @@ public class LeanEventTriggerWarnTask {
     @Scheduled(cron = "0 */2 * * * *")
     public void leanEventTriggerWarnHandle(){
         LambdaQueryWrapper<FpgGatherData> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.isNull(FpgGatherData::getEventWarnUpdatetime).isNotNull(FpgGatherData::getDeviceInformationId).isNotNull(FpgGatherData::getActivePower).isNotNull(FpgGatherData::getRunCurrent).orderByDesc(FpgGatherData::getCreateTime);
+        queryWrapper.isNull(FpgGatherData::getEventWarnUpdatetime)
+                .isNotNull(FpgGatherData::getDeviceInformationId)
+                .isNotNull(FpgGatherData::getActivePower)
+                .isNotNull(FpgGatherData::getRunCurrent)
+                .orderByDesc(FpgGatherData::getCreateTime);
         List<FpgGatherData> fpgGatherDataList = fpgGatherDataService.list(queryWrapper);
         log.info("{}{}", "FPG采集表数据总数:", fpgGatherDataList.size());
         if (oConvertUtils.listIsNotEmpty(fpgGatherDataList)){
@@ -54,11 +58,11 @@ public class LeanEventTriggerWarnTask {
                 leanEventsHostTriggerWarnHandle(x);
             });
             // 逻辑删除已校验完精益事件告警的采集数据,事件告警使用状态0:使用中1:使用结束
-            List<FpgGatherData> updateFpgGatherDataList = fpgGatherDataList.stream().map(s -> s.setEventWarnUpdatetime(new Date())).collect(Collectors.toList());
-            if (oConvertUtils.listIsNotEmpty(updateFpgGatherDataList)){
-                log.info("{}{}", "FPG采集表数据使用结束总数:", fpgGatherDataList.size());
-                fpgGatherDataService.updateBatchById(updateFpgGatherDataList);
-            }
+//            List<FpgGatherData> updateFpgGatherDataList = fpgGatherDataList.stream().map(s -> s.setEventWarnUpdatetime(new Date())).collect(Collectors.toList());
+//            if (oConvertUtils.listIsNotEmpty(updateFpgGatherDataList)){
+//                log.info("{}{}", "FPG采集表数据使用结束总数:", fpgGatherDataList.size());
+//                fpgGatherDataService.updateBatchById(updateFpgGatherDataList);
+//            }
         }
     }
 
@@ -76,7 +80,9 @@ public class LeanEventTriggerWarnTask {
             boolean exists = deviceInformationIdIds.stream().anyMatch(x -> x.contains(fpgGatherData.getDeviceInformationId()));
             if (exists){
                 // 根据主设备ID查询多条精益事件设备启停信息 处理事件类型为host_open、host_stop
-                LambdaQueryWrapper<LeanEventsHost> queryLeanEventsHost = new LambdaQueryWrapper<LeanEventsHost>().eq(LeanEventsHost::getDeviceInformationId, fpgGatherData.getDeviceInformationId()).isNotNull(LeanEventsHost::getDeviceInformationType);
+                LambdaQueryWrapper<LeanEventsHost> queryLeanEventsHost = new LambdaQueryWrapper<LeanEventsHost>()
+                        .eq(LeanEventsHost::getDeviceInformationId, fpgGatherData.getDeviceInformationId())
+                        .isNotNull(LeanEventsHost::getDeviceInformationType);
                 List<LeanEventsHost> leanEventsHostList =  leanEventsHostService.list(queryLeanEventsHost);
                 if (oConvertUtils.listIsEmpty(leanEventsHostList)){
                     log.info("{}{}", "deviceInformationMainIds精益事件设备启停配置信息为空:", fpgGatherData.getDeviceInformationId());

+ 41 - 42
jeecg-module-gather/src/main/java/org/jeecg/modules/leanEventWarn/service/impl/LeanEventWarnInfoServiceImpl.java

@@ -34,6 +34,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -151,7 +152,7 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
         Instant instant = fpgGatherData.getCreateTime().toInstant();
         LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
 
-        boolean topsIsExit = topsNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
+        boolean topsIsExit = topsNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> DateUtils.containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
         if (topsIsExit && fpgGatherData.getRunCurrent().compareTo(limitCurrent) < 0){
             // 采集到的数据电流小于5A,上报告警信息
             leanEventWarnInfo.setDeviceWarnInfo("FPG_OPEN状态下,尖时段采集到的数据电流小于" + limitCurrent + "A,触发告警!");
@@ -160,7 +161,7 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
             // 更新或者新增逻辑处理
             saveOrUpdateLeanEventWarnInfo(fpgGatherData, leanEventWarnInfo);
         }
-        boolean peaksIsExit = peaksNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
+        boolean peaksIsExit = peaksNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> DateUtils.containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
         if (peaksIsExit && fpgGatherData.getRunCurrent().compareTo(limitCurrent) < 0){
             // 采集到的数据电流小于5A,上报告警信息
             leanEventWarnInfo.setDeviceWarnInfo("FPG_OPEN状态下,峰时段采集到的数据电流小于" + limitCurrent + "A,触发告警!");
@@ -169,7 +170,7 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
             // 更新或者新增逻辑处理
             saveOrUpdateLeanEventWarnInfo(fpgGatherData, leanEventWarnInfo);
         }
-        boolean flatIsExit = flatNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
+        boolean flatIsExit = flatNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> DateUtils.containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
         if (flatIsExit && fpgGatherData.getRunCurrent().compareTo(limitCurrent) < 0){
             // 采集到的数据电流小于5A,上报告警信息
             leanEventWarnInfo.setDeviceWarnInfo("FPG_OPEN状态下,平时段采集到的数据电流小于" + limitCurrent + "A,触发告警!");
@@ -178,7 +179,7 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
             // 更新或者新增逻辑处理
             saveOrUpdateLeanEventWarnInfo(fpgGatherData, leanEventWarnInfo);
         }
-        boolean valleysIsExit = valleysNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
+        boolean valleysIsExit = valleysNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> DateUtils.containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
         if (valleysIsExit && fpgGatherData.getRunCurrent().compareTo(limitCurrent) < 0){
             // 采集到的数据电流小于5A,上报告警信息
             leanEventWarnInfo.setDeviceWarnInfo("FPG_OPEN状态下,谷时段采集到的数据电流小于" + limitCurrent + "A,触发告警!");
@@ -241,7 +242,7 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
 
         Instant instant = fpgGatherData.getCreateTime().toInstant();
         LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
-        boolean topsIsExit = topsNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
+        boolean topsIsExit = topsNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> DateUtils.containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
         if (topsIsExit && fpgGatherData.getRunCurrent().compareTo(limitCurrent) > 0){
             // 采集到的数据电流大于5A,上报告警信息
             leanEventWarnInfo.setDeviceWarnInfo("FPG_CLOSE状态下,尖采集到的数据电流大于" + limitCurrent + "A,触发告警!");
@@ -250,7 +251,7 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
             // 更新或者新增逻辑处理
             saveOrUpdateLeanEventWarnInfo(fpgGatherData, leanEventWarnInfo);
         }
-        boolean peaksIsExit = peaksNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
+        boolean peaksIsExit = peaksNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> DateUtils.containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
         if (peaksIsExit && fpgGatherData.getRunCurrent().compareTo(limitCurrent) > 0){
             // 采集到的数据电流大于5A,上报告警信息
             leanEventWarnInfo.setDeviceWarnInfo("FPG_CLOSE状态下,峰采集到的数据电流大于" + limitCurrent + "A,触发告警!");
@@ -259,7 +260,7 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
             // 更新或者新增逻辑处理
             saveOrUpdateLeanEventWarnInfo(fpgGatherData, leanEventWarnInfo);
         }
-        boolean flatIsExit = flatNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
+        boolean flatIsExit = flatNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> DateUtils.containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
         if (flatIsExit && fpgGatherData.getRunCurrent().compareTo(limitCurrent) > 0){
             // 采集到的数据电流大于5A,上报告警信息
             leanEventWarnInfo.setDeviceWarnInfo("FPG_CLOSE状态下,平采集到的数据电流大于" + limitCurrent + "A,触发告警!");
@@ -268,7 +269,7 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
             // 更新或者新增逻辑处理
             saveOrUpdateLeanEventWarnInfo(fpgGatherData, leanEventWarnInfo);
         }
-        boolean valleysIsExit = valleysNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
+        boolean valleysIsExit = valleysNewPeaksAndValleysTimeConfigList.stream().anyMatch(a -> DateUtils.containsCreateTime(localDateTime, a.getStartTime(), a.getEndTime()));
         if (valleysIsExit && fpgGatherData.getRunCurrent().compareTo(limitCurrent) > 0){
             // 采集到的数据电流大于5A,上报告警信息
             leanEventWarnInfo.setDeviceWarnInfo("FPG_CLOSE状态下,谷采集到的数据电流大于" + limitCurrent + "A,触发告警!");
@@ -463,7 +464,7 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
         // 使用Criteria添加多个时间范围条件
         List<Criteria> criteriaList = new ArrayList<>();
         for (Date[] timeRange : timeRanges) {
-            Criteria criteria = buildTimeRangeCriteria(timeRange);
+            Criteria criteria = DateUtils.buildTimeRangeCriteria(timeRange);
             criteriaList.add(criteria);
         }
         if (criteriaList.size() > 1) {
@@ -519,43 +520,41 @@ public class LeanEventWarnInfoServiceImpl extends ServiceImpl<LeanEventWarnInfoM
         }else if ("valleys".equals(type)){
             List<PeaksAndValleysTimeConfig> valleysPeaksAndValleysTimeConfigList = peaksAndValleysTimeConfigParam.getValleys();
             List<PeaksAndValleysTimeConfig> valleysNewPeaksAndValleysTimeConfigList = valleysPeaksAndValleysTimeConfigList.stream().map(t->{
-                String newStartTime = sdf.format(createTime)+ " " + t.getStartTime();
-                String newEndTime = sdf.format(createTime)+ " " + t.getEndTime();
-                t.setStartTime(newStartTime);
-                t.setEndTime(newEndTime);
+                boolean result = DateUtils.isHour23(createTime);
+                String newStartTime = "";
+                String newEndTime = "";
+                // 定义日期时间格式化器,格式要与输入的字符串格式匹配
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                if (result){
+                    // 结束时间加1天
+                    newStartTime = sdf.format(createTime)+ " " + t.getStartTime();
+                    newEndTime = sdf.format(createTime)+ " " + t.getEndTime();
+                    // 将字符串解析为LocalDateTime对象
+                    LocalDateTime dateTime = LocalDateTime.parse(newEndTime, formatter);
+                    // 给解析后的时间对象加上一天
+                    LocalDateTime newDateTime = dateTime.plusDays(1);
+                    // 将加一天后的时间对象再格式化为字符串输出
+                    String finalEndTimeStr = newDateTime.format(formatter);
+                    t.setStartTime(newStartTime);
+                    t.setEndTime(finalEndTimeStr);
+                }else {
+                    // 开始时间减1天
+                    newStartTime = sdf.format(createTime)+ " " + t.getStartTime();
+                    newEndTime = sdf.format(createTime)+ " " + t.getEndTime();
+                    // 定义日期时间格式化器,格式要与输入的字符串格式匹配
+                    // 将字符串解析为LocalDateTime对象
+                    LocalDateTime dateTime = LocalDateTime.parse(newStartTime, formatter);
+                    // 给解析后的时间对象加上一天
+                    LocalDateTime newDateTime = dateTime.plusDays(-1);
+                    // 将加一天后的时间对象再格式化为字符串输出
+                    String finalStartTimeStr = newDateTime.format(formatter);
+                    t.setStartTime(finalStartTimeStr);
+                    t.setEndTime(newEndTime);
+                }
                 return t;
             }).collect(Collectors.toList());
             return valleysNewPeaksAndValleysTimeConfigList;
         }
         return null;
     }
-
-    /**
-     * 判断创建时间是否在开始时间和结束时间范围内
-     * @param createTime
-     * @param startTime
-     * @param endTime
-     * @return
-     */
-    public static boolean containsCreateTime(LocalDateTime createTime, String startTime, String endTime) {
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        LocalDateTime start_time = LocalDateTime.parse(startTime, formatter);
-        LocalDateTime end_time = LocalDateTime.parse(endTime, formatter);
-        return createTime!= null && (createTime.isAfter(start_time) || createTime.equals(start_time)) &&
-                (createTime.isBefore(end_time) || createTime.equals(end_time));
-    }
-
-    /**
-     * 辅助方法,用于根据给定的时间范围构建Criteria,并加上8小时
-     * @param timeRange
-     * @return
-     */
-    private Criteria buildTimeRangeCriteria(Date[] timeRange) {
-        Date startTime = timeRange[0];
-        Date endTime = timeRange[1];
-        // 加8小时
-        Date startTimePlus8Hours = DateUtils.addHours(startTime, 8);
-        Date endTimePlus8Hours = DateUtils.addHours(endTime, 8);
-        return Criteria.where("createTime").gte(startTimePlus8Hours).lte(endTimePlus8Hours);
-    }
 }