diff --git a/src/main/java/club/joylink/rtss/iscs/convert/TimeProtoConvertor.java b/src/main/java/club/joylink/rtss/iscs/convert/TimeProtoConvertor.java new file mode 100644 index 000000000..4cad138ed --- /dev/null +++ b/src/main/java/club/joylink/rtss/iscs/convert/TimeProtoConvertor.java @@ -0,0 +1,38 @@ +package club.joylink.rtss.iscs.convert; + +import com.google.protobuf.Timestamp; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.util.TimeZone; + +@Component +public class TimeProtoConvertor { + private static TimeZone timeZone; + + //如"GMT+8" + @Value("${spring.jackson.time-zone}") + public void setZoneId(String zoneId) { + TimeProtoConvertor.timeZone = TimeZone.getTimeZone(ZoneId.of(zoneId)); + } + + public static Timestamp.Builder convertFrom(LocalDateTime from) { + final Instant instant = from.toInstant(ZoneOffset.ofTotalSeconds(timeZone.getRawOffset() / 1000)); + return Timestamp.newBuilder().setSeconds(instant.getEpochSecond()).setNanos(instant.getNano()); + } + + public static LocalDateTime convertFrom(Timestamp from) { + return LocalDateTime.ofInstant(Instant.ofEpochSecond(from.getSeconds(), from.getNanos()), timeZone.toZoneId()); + } + + public static void main(String[] args) { + final Timestamp.Builder timestamp = convertFrom(LocalDateTime.now()); + System.out.println(timestamp.build().toString()); + final LocalDateTime now = convertFrom(timestamp.build()); + System.out.println(now.toString()); + } +} diff --git a/src/main/java/club/joylink/rtss/iscs/convert/TimestampConvertor.java b/src/main/java/club/joylink/rtss/iscs/convert/TimestampConvertor.java deleted file mode 100644 index e2004b2ac..000000000 --- a/src/main/java/club/joylink/rtss/iscs/convert/TimestampConvertor.java +++ /dev/null @@ -1,12 +0,0 @@ -package club.joylink.rtss.iscs.convert; - -import com.google.protobuf.Timestamp; - -import java.time.Instant; - -public class TimestampConvertor { - - public static Timestamp.Builder convertFrom(Instant from){ - return Timestamp.newBuilder().setSeconds(from.getEpochSecond()).setNanos(from.getNano()); - } -} diff --git a/src/main/java/club/joylink/rtss/iscs/memory/MemoryManager.java b/src/main/java/club/joylink/rtss/iscs/memory/MemoryManager.java index d93aa3eaa..4c2dc39db 100644 --- a/src/main/java/club/joylink/rtss/iscs/memory/MemoryManager.java +++ b/src/main/java/club/joylink/rtss/iscs/memory/MemoryManager.java @@ -2,14 +2,14 @@ package club.joylink.rtss.iscs.memory; import club.joylink.rtss.iscs.convert.PageDataModelConvertor; +import club.joylink.rtss.iscs.convert.TimeProtoConvertor; import club.joylink.rtss.iscs.entity.IscsModelData; import club.joylink.rtss.iscs.memory.model.ModelMemory; import club.joylink.rtss.iscs.memory.model.ModelMemoryId; import club.joylink.rtss.iscs.proto.model.data.PageDataModelProto; import club.joylink.rtss.iscs.proto.model.status.soe.SoeProto; -import com.google.protobuf.Timestamp; + import java.time.LocalDateTime; -import java.time.ZoneOffset; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; @@ -31,23 +31,29 @@ public class MemoryManager { */ private LinkedList alarmEvents = new LinkedList<>(); //////////////////////////////////////////////////////////////////////////////////////////////////// - /** - * 获取设备产生的动作事件 - *

- * 查询条件:时间、场所、设备名称 - */ - public SoeProto.ActionSoe.Builder getActionSoe(LocalDateTime startTime,LocalDateTime endTime,String place,String deviceName){ - final boolean checkTime = endTime.isAfter(startTime); - final LocalDateTime start = checkTime?startTime:endTime; - final LocalDateTime end = checkTime?endTime:startTime; - final SoeProto.ActionSoe.Builder actSoe = SoeProto.ActionSoe.newBuilder(); - actionEvents.forEach(actEvt->{ - final Timestamp actStamp = actEvt.getCreateTime(); - final LocalDateTime actTime = LocalDateTime.ofEpochSecond(actStamp.getSeconds(),actStamp.getNanos(), ZoneOffset.ofHours(8)); - }); - return actSoe; - } + /** + * 根据条件过滤获取设备产生的动作事件 + *

+ * 查询条件:时间、场所、设备名称; + * 注意当设备名称为null时表示所有设备 + */ + public SoeProto.ActionSoe.Builder getActionSoe(LocalDateTime startTime, LocalDateTime endTime, String place, String deviceName) { + final boolean checkTime = endTime.isAfter(startTime); + final LocalDateTime start = checkTime ? startTime : endTime; + final LocalDateTime end = checkTime ? endTime : startTime; + final SoeProto.ActionSoe.Builder actSoe = SoeProto.ActionSoe.newBuilder(); + actionEvents.forEach(actEvt -> { + final LocalDateTime actTime = TimeProtoConvertor.convertFrom(actEvt.getCreateTime()); + final boolean isTime = start.isEqual(end) ? actTime.isEqual(start) : (actTime.isAfter(start) && actTime.isBefore(end)); + if (isTime && place.equals(actEvt.getPlace())) { + if (null == deviceName || deviceName.equals(actEvt.getDeviceName())) { + actSoe.addActions(actEvt); + } + } + }); + return actSoe; + } ///////////////////////////////////////////////////////////////////////////////////////////////////// /**