feat(client): 家属端设备列表返回在线状态与最后心跳时间
- 批量查询 Redis 心跳状态,避免逐台查询 - 修正心跳时间 Redis 序列化格式,防止读取时解析失败导致状态恒为离线
This commit is contained in:
1 parent
0f99abb876
commit
3f2b07ddd0
4 files changed
+68
No files matched your search
@@ -0,0 +1,45 @@
|
||||
package com.youlai.boot.device;
|
||||
|
||||
import com.youlai.boot.config.JacksonConfig;
|
||||
import com.youlai.boot.device.model.vo.DeviceOnlineVO;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.data.redis.serializer.JacksonJsonRedisSerializer;
|
||||
import tools.jackson.databind.cfg.DateTimeFeature;
|
||||
import tools.jackson.databind.json.JsonMapper;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
/**
|
||||
* 设备在线状态在 Redis 写入与全局 ObjectMapper 读取之间的格式一致性校验
|
||||
* <p>
|
||||
* RedisConfig 的序列化器与 JacksonConfig 的全局时间格式不一致时,
|
||||
* convertValue 会抛 DateTimeParseException,导致在线状态永远读成离线。
|
||||
*/
|
||||
class DeviceOnlineRedisRoundTripTest {
|
||||
|
||||
@Test
|
||||
void redisValueCanBeConvertedByGlobalObjectMapper() {
|
||||
JsonMapper redisMapper = JsonMapper.builder()
|
||||
.disable(DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS)
|
||||
.build();
|
||||
JacksonJsonRedisSerializer<Object> serializer = new JacksonJsonRedisSerializer<>(redisMapper, Object.class);
|
||||
|
||||
LocalDateTime heartbeat = LocalDateTime.of(2026, 11, 7, 10, 37, 22);
|
||||
|
||||
DeviceOnlineVO vo = new DeviceOnlineVO();
|
||||
vo.setSerialno("895Y044WC");
|
||||
vo.setOnline(1);
|
||||
vo.setIp("192.168.100.141");
|
||||
vo.setScreenState(0);
|
||||
vo.setLastHeartbeatTime(heartbeat);
|
||||
|
||||
Object cached = serializer.deserialize(serializer.serialize(vo));
|
||||
DeviceOnlineVO converted = new JacksonConfig().objectMapper().convertValue(cached, DeviceOnlineVO.class);
|
||||
|
||||
assertEquals("895Y044WC", converted.getSerialno());
|
||||
assertEquals(1, converted.getOnline());
|
||||
assertEquals(heartbeat, converted.getLastHeartbeatTime());
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user