package org.sxkj.common.cache; import org.springframework.util.StringUtils; import java.util.*; import java.util.concurrent.ConcurrentHashMap; /** * 缓存设备状态 */ public class DeviceStatusCacheMapUtils { /** * 设备状态值缓存 * Key: 用户ID, Value: 设备状态列表 */ private static final ConcurrentHashMap CACHE_MAP = new ConcurrentHashMap<>(); //最大多少秒刷新数据 private static final Integer MAX_SECONDS = 30; public static void put(String deviceSn, String status) { StatusBo statusBo = new StatusBo(); statusBo.setKey(deviceSn); statusBo.setTime(System.currentTimeMillis()); statusBo.setValue(status); CACHE_MAP.put(deviceSn, statusBo); } /** * @param intervalTime 过期时间 * @return key value */ public static Integer getDeviceStatusCache(String sn, Integer intervalTime) { StatusBo statusBo = CACHE_MAP.get(sn); if (StringUtils.isEmpty(sn) || Objects.isNull(statusBo)) { return 0; } long timeDiff = Math.abs(System.currentTimeMillis() - statusBo.getTime()); boolean timeOut = timeDiff >= Optional.ofNullable(intervalTime).orElse(MAX_SECONDS) * 1000L; if (timeOut) { return 0; } else { return Integer.valueOf(statusBo.getValue()); } } }