Ver código fonte

判断2个时间相差多久 不再使用直接的毫秒数计算 分钟和秒不参与计算

王苗苗 3 semanas atrás
pai
commit
7656eff285

+ 1 - 1
slibra-admin/src/main/java/com/slibra/web/controller/business/FrontController.java

@@ -294,7 +294,7 @@ public class FrontController extends BaseController {
                     log.error("xxxxxxxxx:之前处理告警结束的逻辑异常,没有更新截止时间");
                     endDate = DateUtils.getNowDate();
                 }
-                int counts = DateUtils.differentHoursByMillisecond(tXinyiWarningRecord.getCreateTime(), endDate) + 1;
+                long counts = DateUtils.differentHoursByLocalDateTime(tXinyiWarningRecord.getCreateTime(), endDate) + 1;
                 tXinyiWarningRecord.setCounts(counts > MAX_COUNT ? MAX_COUNT_STR : String.valueOf(counts));
 
                 //2024年7月11日13:36:41 新增处理,返回带单位的报警值(目前只处理生化报警的)

+ 1 - 1
slibra-admin/src/main/java/com/slibra/web/controller/business/TXinyiWarningRecordController.java

@@ -131,7 +131,7 @@ public class TXinyiWarningRecordController extends BaseController
                     log.error("xxxxxxxxx:之前处理告警结束的逻辑异常,没有更新截止时间");
                     endDate = DateUtils.getNowDate();
                 }
-                int counts = DateUtils.differentHoursByMillisecond(tXinyiWarningRecord.getCreateTime(), endDate) + 1;
+                long counts = DateUtils.differentHoursByLocalDateTime(tXinyiWarningRecord.getCreateTime(), endDate) + 1;
                 tXinyiWarningRecord.setCounts(counts > MAX_COUNT ? MAX_COUNT_STR : String.valueOf(counts));
             }
         }

+ 1 - 1
slibra-common/src/main/java/com/slibra/common/constant/MyConstants.java

@@ -179,7 +179,7 @@ public class MyConstants {
 //    public static final String SS = "ss";//ss
 //    public static final String NH3 = "nh3";//nh3
 //    public static final String TP = "tp";//tp
-    public static final int MAX_COUNT = 30;
+    public static final long MAX_COUNT = 30L;
     public static final String MAX_COUNT_STR = "30+";
 
     public static final int INDEX_1 = 1;

+ 29 - 8
slibra-common/src/main/java/com/slibra/common/utils/DateUtils.java

@@ -3,11 +3,7 @@ package com.slibra.common.utils;
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -168,6 +164,25 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600)));
     }
 
+
+    /**
+     * 计算相差小时数
+     */
+    public static long differentHoursByLocalDateTime(Date date1, Date date2)
+    {
+        return Math.abs(Duration.between(toLocalDateTimeIgnoringMinutesAndSeconds(date1), toLocalDateTimeIgnoringMinutesAndSeconds(date2)).toHours());
+    }
+
+    /**
+     * 将 Date 转换为 LocalDateTime,并将分钟和秒设置为 0
+     */
+    private static LocalDateTime toLocalDateTimeIgnoringMinutesAndSeconds(Date date) {
+        LocalDateTime localDateTime = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDateTime();
+        return localDateTime.withMinute(0).withSecond(0); // 将分钟和秒设置为 0
+    }
+
     /**
      * 计算时间差
      *
@@ -266,13 +281,13 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     }
 
 
-    public static void main(String[] args) {
+    public static void main(String[] args) throws ParseException {
         /*Date nowDate = DateUtils.getNowDate();
         Date date = plusDate(1, nowDate);
         Date date1 = plusDate(-1, nowDate);
         System.out.println(date);
         System.out.println(date1);
-        System.out.println(getMonthsBefore("2024-02", 2));*/
+        System.out.println(getMonthsBefore("2024-02", 2));
         System.out.println(plusHour(-1, getNowDate()));
 
         Date nowDate = DateUtils.getNowDate();
@@ -283,6 +298,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
             throw new RuntimeException(e.getMessage());
         }
         int hours = DateUtils.differentHoursByMillisecond(nowDate, warningDate);
-        System.out.println("hours = " + hours);
+        System.out.println("hours = " + hours);*/
+
+        Date date1 = DateUtils.parseDate("2025-03-06 09:15:46", DateUtils.YYYY_MM_DD_HH_MM_SS);
+        Date date2 = DateUtils.parseDate("2025-03-06 11:25:46", DateUtils.YYYY_MM_DD_HH_MM_SS);
+        Date date3 = DateUtils.parseDate("2025-03-06 11:09:46", DateUtils.YYYY_MM_DD_HH_MM_SS);
+        System.out.println(differentHoursByLocalDateTime(date1, date2));
+        System.out.println(differentHoursByLocalDateTime(date1, date3));
     }
 }

+ 20 - 8
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -120,8 +120,8 @@ public class AsyncTask {
             //查询工业库同步任务失败的报警正在进行的数据
             /*TXinyiWarningRecord warningRecord = TXinyiWarningRecord.builder().symbol(BusinessEnum.WarningSymbolEnum.INDUSTRY_SYNC_ERROR.getCode()).status(0).build();
             List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecord);*/
-            int hours = DateUtils.differentHoursByMillisecond(nowDate, warningDate);
-            if(hours == 0){
+            long hours = DateUtils.differentHoursByLocalDateTime(nowDate, warningDate);
+            if(hours == 0L){
                 //查看是否有正在进行的同步任务失败的报警
                 /*if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
                     closeWarning(tXinyiWarningRecords.get(0));
@@ -131,7 +131,7 @@ public class AsyncTask {
                 //2025年02月20日10:52:31 在具体的报警类型中增加新的判断 仪表故障 数据异常等
                 this.handleSZWarning(tXinyiIndustry, normConfig);
                 //2024年5月28日14:14:26  下面是新增的 生化报警处理
-//                this.handleSHWarning(tXinyiIndustry, normConfig, xinyiCalculate);
+                this.handleSHWarning(tXinyiIndustry, normConfig, xinyiCalculate);
             }else{
                 log.info("同步工业库任务获取最新的数据失败,无法处理报警信息。");
                 log.error("同步工业库任务获取最新的数据失败,无法处理报警信息。");
@@ -1571,9 +1571,9 @@ public class AsyncTask {
             noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
+        Date nowDate = DateUtils.getNowDate();
         //下面是处理多个指标的 【断点】和 连续不变的报警
         //断点
-        Date nowDate = DateUtils.getNowDate();
         //2025年02月28日13:45:49 逻辑调整:多指标断点/联系不变 也要记录对应的化验类型 所以下面可以查询出来多个
         TXinyiWarningRecord warningRecord = TXinyiWarningRecord.builder().symbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode()).status(0).build();
         List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecord);
@@ -1599,6 +1599,18 @@ public class AsyncTask {
                 addChatRecordByBreakPointsSingle(warningRecordBreakPointOne, tXinyiIndustry, normConfig, category);
             }else{
                 log.info("工业库报警的时候,发现存在仪表故障(断点不变单个指标)的报警,并且已经有该类型报警了,不做任何处理");
+                //2025年03月05日17:49:14 逻辑调整:更新一直报警的那条记录的显示值
+                TXinyiWarningRecord xinyiWarningRecord = tXinyiBreakPointSingleWarningRecords.get(0);
+                xinyiWarningRecord.setWarningVal(warningRecordBreakPointOne.getWarningVal());
+                xinyiWarningRecord.setTime(warningRecordBreakPointOne.getTime());
+                xinyiWarningRecord.setUpdateTime(nowDate);
+                xinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
+                //2024年7月31日09:20:47 报警的原因(超标还是超管控也需要更新)
+                xinyiWarningRecord.setReason(warningRecordBreakPointOne.getReason());
+                //更新数据库
+                this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(xinyiWarningRecord);
+                //继续调用决策【本地模拟的决策】
+                addChatRecordByBreakPointsSingle(xinyiWarningRecord, tXinyiIndustry, normConfig, category);
             }
             //额外判断当前的异常是哪个指标,并处理标识
             if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
@@ -2304,7 +2316,7 @@ public class AsyncTask {
             endDate = DateUtils.getNowDate();
         else
             endDate = tXinyiWarningRecord.getOffTime();
-        int count = DateUtils.differentHoursByMillisecond(warningTime, endDate) + 1;
+        long count = DateUtils.differentHoursByLocalDateTime(warningTime, endDate) + 1;
         ShowValueSHBasic showValueSHBasic = new ShowValueSHBasic();
         /*if("0".equals(remark)){//水质报警
             showValueSHBasic.setH(ZAIXIANYIBIAO);
@@ -2357,7 +2369,7 @@ public class AsyncTask {
             endDate = DateUtils.getNowDate();
         else
             endDate = tXinyiWarningRecord.getOffTime();
-        int count = DateUtils.differentHoursByMillisecond(warningTime, endDate) + 1;
+        long count = DateUtils.differentHoursByLocalDateTime(warningTime, endDate) + 1;
         String category = tXinyiWarningRecord.getCategory();
         /*basic.put("title", tXinyiWarningRecord.getReason());
         basic.put("报警时间", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM ,warningTime));
@@ -4238,8 +4250,8 @@ public class AsyncTask {
         //2025年03月03日15:05:21 同步任务的报警不需要展示  后期考虑短信或者其他方式报警
         /*TXinyiWarningRecord warningRecord = TXinyiWarningRecord.builder().symbol(BusinessEnum.WarningSymbolEnum.ROBOT_SYNC_ERROR.getCode()).status(0).build();
         List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecord);*/
-        int hours = DateUtils.differentHoursByMillisecond(nowDate, warningDate);
-        if(hours == 0){
+        long hours = DateUtils.differentHoursByLocalDateTime(nowDate, warningDate);
+        if(hours == 0L){
             //查看是否有正在进行的同步任务失败的报警
             /*if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
                 closeWarning(tXinyiWarningRecords.get(0));

+ 1 - 1
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask.java

@@ -477,7 +477,7 @@ public class RyTask
             endDate = DateUtils.getNowDate();
         else
             endDate = tXinyiWarningRecord.getOffTime();
-        int count = DateUtils.differentHoursByMillisecond(warningTime, endDate) + 1;
+        long count = DateUtils.differentHoursByLocalDateTime(warningTime, endDate) + 1;
         basic.put("title", tXinyiWarningRecord.getReason());
         basic.put("报警时间", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM ,tXinyiWarningRecord.getTime()));
         basic.put("报警值", DecimalUtils.getAbsAndScale(tXinyiWarningRecord.getWarningVal(), INT_2));