Browse Source

增加用户自定义有效期的设置

lixing 3 years ago
parent
commit
7803aa2024

+ 11 - 2
src/main/java/com/persagy/controller/HelloWorld.java

@@ -10,6 +10,8 @@ import com.persagy.entity.NettyMessage;
 import com.persagy.entity.ZktAlarmRecordDO;
 import com.persagy.repository.AlarmRecordRepository;
 import com.persagy.service.AlarmHandleService;
+import com.persagy.service.impl.UserDefinePeriod;
+import com.persagy.utils.DateUtils;
 import com.persagy.utils.LockUtil;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
@@ -20,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.transaction.Transactional;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -37,9 +41,14 @@ public class HelloWorld {
 	AlarmInfoCache alarmInfoCache;
 	@Autowired
 	AlarmRecordRepository alarmRecordRepository;
+	@Autowired
+	UserDefinePeriod userDefinePeriod;
+
 	@PostMapping("/")
-	public String world(@RequestBody JSONObject jsonObject) throws Exception {
-		return "hello world!";
+	public String world() throws Exception {
+		LocalDateTime localDateTime = LocalDateTime.parse("20211109070000", DateTimeFormatter.ofPattern(DateUtils.sdfTime));
+		boolean b = userDefinePeriod.inUserDefinePeriod(DateUtils.localDateTime2Date(localDateTime));
+		return String.valueOf(b);
 	}
 	@PostMapping("/testMesage")
 	public String testMesage(@RequestBody JSONObject jsonObject) throws Exception {

+ 8 - 0
src/main/java/com/persagy/service/impl/AlarmHandleServiceImpl.java

@@ -57,6 +57,9 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
     CreatedAlarmIdsCache createdAlarmIdsCache;
     @Autowired
     AlarmLastTimeCache alarmLastTimeCache;
+    @Autowired
+    UserDefinePeriod userDefinePeriod;
+
     /**
      * 集团编码
      */
@@ -80,6 +83,11 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
      */
     @Override
     public void handleIotMsg(String msg) throws Exception {
+        // 判断当前时间是否在定义的时间段内,如果不在则不处理
+        if (!userDefinePeriod.inUserDefinePeriod(new Date())) {
+            return;
+        }
+
         log.info("接收到采集值:[{}]", msg);
         // 校验采集值
         boolean validateIotMsgResult = validateIotMsg(msg);

+ 79 - 0
src/main/java/com/persagy/service/impl/UserDefinePeriod.java

@@ -0,0 +1,79 @@
+package com.persagy.service.impl;
+
+import com.persagy.utils.DateUtils;
+import com.persagy.utils.condition.ConditionUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+
+/**
+ * 用户自定义报警时间段
+ *
+ * @author lixing
+ * @version V1.0 2021/11/9 9:46 上午
+ **/
+@Service
+@Slf4j
+public class UserDefinePeriod {
+    @Value("${user.define.period.start:}")
+    private String userDefineStartTime;
+
+    @Value("${user.define.period.end:}")
+    private String userDefineEndTime;
+
+    /**
+     * 判断是否在用户定义的报警时间段内
+     *
+     * @param date 需要判断的时间
+     * @return 是否在用户定义的报警时间段内
+     * @author lixing
+     * @version V1.0 2021/11/9 9:50 上午
+     */
+    public boolean inUserDefinePeriod(Date date) {
+        if (date == null) {
+            return true;
+        }
+        if (StringUtils.isBlank(userDefineStartTime) || StringUtils.isBlank(userDefineEndTime)) {
+            return true;
+        }
+        if (!ConditionUtils.validateTime(userDefineStartTime) || !ConditionUtils.validateTime(userDefineEndTime)) {
+            log.error("用户自定义报警时间格式错误,此设置不会生效,时间格式应为HHmmss");
+            return true;
+        }
+
+        // 提取要判断的时间的年月日
+        LocalDateTime localDateTime = DateUtils.date2LocalDateTime(date);
+        String dateStr = localDateTime.format(DateTimeFormatter.ofPattern(DateUtils.sdfDay));
+
+        // 将用户定义的时间转换为localDateTime
+        LocalDateTime startTime = LocalDateTime.parse(
+                dateStr + userDefineStartTime, DateTimeFormatter.ofPattern(DateUtils.sdfTime));
+        LocalDateTime endTime = LocalDateTime.parse(
+                dateStr + userDefineEndTime, DateTimeFormatter.ofPattern(DateUtils.sdfTime));
+        // 如果开始时间晚于结束时间(例如用户定义的时间为:22:00 -> 8:00),代表用户自定义的结束时间为第二天的时间点
+        if (startTime.isAfter(endTime)) {
+            endTime = endTime.plusDays(1);
+        }
+
+        /*
+         * 用户自定义时间设置为22:00 -> 8:00
+         * 接收到2号7:00的数据
+         * 期望根据1号22:00 -> 2号8:00进行判断
+         * 接收到2号9:00的数据
+         * 期望根据1号22:00 -> 2号8:00进行判断
+         * 接收到2号21:00的数据
+         * 期望根据2号22:00 -> 3号8:00进行判断
+         * 接收到2号23点的数据
+         * 期望根据2号22:00 -> 3号8:00进行判断
+         * 所以接收到2号的数据,需要判断是否在1号到2号以及2号到3号用户定义的时间段内
+         */
+        boolean inCurrentDayPeriod = localDateTime.isAfter(startTime) && localDateTime.isBefore(endTime);
+        boolean inYesterdayPeriod = localDateTime.isAfter(startTime.plusDays(-1)) && localDateTime.isBefore(endTime.plusDays(-1));
+        return inCurrentDayPeriod || inYesterdayPeriod;
+    }
+}

+ 7 - 0
src/main/java/com/persagy/utils/DateUtils.java

@@ -263,6 +263,13 @@ public class DateUtils {
     }
 
     /**
+     * 获取日期
+     */
+    public static int getDayOfMonth(LocalDateTime ldt) {
+        return ldt.getDayOfMonth();
+    }
+
+    /**
      * 获取月份差 不算满月的月份差(比如7月31号到8月1号仍然算一个月份差)
      */
     public static int getBetweenMonth(LocalDateTime startLdt, LocalDateTime endLdt) {

+ 1 - 1
src/main/java/com/persagy/utils/condition/ConditionUtils.java

@@ -169,7 +169,7 @@ public class ConditionUtils {
      * @since: 2021/1/8 下午3:13
      * @version: V1.0
      */
-    private static boolean validateTime(String time) {
+    public static boolean validateTime(String time) {
         if (StringUtils.isBlank(time)) {
             return false;
         }

+ 6 - 1
src/main/resources/application.yml

@@ -101,4 +101,9 @@ autolog:
     metadata-max-age-ms: 300000
     request-timeout-ms: 30000
     key-serializer: org.apache.kafka.common.serialization.StringSerializer
-    value-serializer: org.apache.kafka.common.serialization.StringSerializer
+    value-serializer: org.apache.kafka.common.serialization.StringSerializer
+user:
+  define:
+    period:
+      start: '220000'
+      end: '080000'