package com.dmo.screen.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dmo.screen.dto.Constants;
import com.dmo.screen.dto.out.OCurrentDepartData;
import com.dmo.screen.po.CurrentDepartData;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Component
@Slf4j
public class RedisUtil {
private final StringRedisTemplate stringRedisTemplate;
public RedisUtil(StringRedisTemplate stringRedisTemplate) {
this.stringRedisTemplate = stringRedisTemplate;
}
//判断缓存是否存在
public Boolean hasCache(String key) {
return stringRedisTemplate.hasKey(key);
}
//设置缓存
public void setCache(String key, String value, Long timeout, TimeUnit timeoutType) {
stringRedisTemplate.opsForValue().set(key, value, timeout, timeoutType);
}
//获取缓存
public String getCache(String key) {
return stringRedisTemplate.opsForValue().get(key);
}
//实时发车数据缓存
public void setDepartCache(Integer routeId, List<OCurrentDepartData> currentDepartDataList) {
setCache(Constants.REDIS_CURRENT + "_" + routeId, JSONArray.toJSONString(currentDepartDataList),
10L, TimeUnit.MINUTES);
}
//获取实时发车数据缓存
public List<OCurrentDepartData> getDepartCache(String routeId) {
String currentDepartDataListStr = getCache(Constants.REDIS_CURRENT + "_" + routeId);
JSONArray jsonArray = JSONArray.parseArray(currentDepartDataListStr);
List<OCurrentDepartData> currentDepartDataList = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
currentDepartDataList.add(jsonArray.getJSONObject(i).toJavaObject(OCurrentDepartData.class));
}
return currentDepartDataList;
}
//获取实时发车数据缓存
public List<OCurrentDepartData> getDepartCache() {
List<OCurrentDepartData> currentDepartDataList = new ArrayList<>();
Set<String> keys = stringRedisTemplate.keys(Constants.REDIS_CURRENT + "_*");
for(String key : keys){
String cache = getCache(key);
JSONArray jsonArray = JSONArray.parseArray(cache);
for (int i = 0; i < jsonArray.size(); i++) {
currentDepartDataList.add(jsonArray.getJSONObject(i).toJavaObject(OCurrentDepartData.class));
}
}
return currentDepartDataList;
}
//清除线路实时发车数据缓存
public void clearDepartCache(String routeId) {
stringRedisTemplate.delete(Constants.REDIS_CURRENT + "_" + routeId);
}
}