From 8bb914874ef1ebcda2a9c606224bf3e3db2f46f8 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Mon, 23 Nov 2020 09:51:55 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/main/java/com/moral/service/DeviceService.java | 4 src/main/java/com/moral/strategy/RepairDataContext.java | 24 ++ src/main/java/com/moral/strategy/RepairStrategyFactory.java | 29 ++ src/main/java/com/moral/strategy/RepairHourlyData.java | 103 ++++++++ src/main/java/com/moral/task/RepairDataTask.java | 66 +++++ src/main/java/com/moral/util/RedisUtils.java | 195 ++++++++++++++++ src/main/java/com/moral/task/DeviceAdjustValueTimingTask.java | 26 ++ src/main/java/com/moral/service/impl/DeviceServiceImpl.java | 7 src/main/java/com/moral/strategy/RepairDataStrategy.java | 10 src/main/java/com/moral/strategy/RepairFiveMinutelyData.java | 110 +++++++++ src/main/java/com/moral/strategy/RepairMinutelyData.java | 97 ++++++++ 11 files changed, 671 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/moral/service/DeviceService.java b/src/main/java/com/moral/service/DeviceService.java index 786bbb1..7c76d7f 100644 --- a/src/main/java/com/moral/service/DeviceService.java +++ b/src/main/java/com/moral/service/DeviceService.java @@ -1,5 +1,7 @@ package com.moral.service; +import com.moral.entity.Device; + import java.util.List; import java.util.Map; @@ -20,4 +22,6 @@ List<Map<String, Object>> macAndOrganizationIdMap(List<String> macs); List<Map<String, Object>> getAllByMacList(List<String> macList); + + Device getDeviceByID(int id); } diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java index 2d97264..e3dfd63 100644 --- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Map; +import com.moral.entity.Device; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -61,4 +62,10 @@ public List<Map<String, Object>> getAllByMacList(List<String> macList) { return deviceMapper.getAllByMacList(macList); } + + @Override + public Device getDeviceByID(int id) { + Device result = deviceMapper.selectByPrimaryKey(id); + return result; + } } diff --git a/src/main/java/com/moral/strategy/RepairDataContext.java b/src/main/java/com/moral/strategy/RepairDataContext.java new file mode 100644 index 0000000..138ebf6 --- /dev/null +++ b/src/main/java/com/moral/strategy/RepairDataContext.java @@ -0,0 +1,24 @@ +package com.moral.strategy; + +import lombok.Data; +import org.springframework.util.MultiValueMap; + +import java.util.Map; + +/** +* @Description: ��������������� + * @Param: + * @return: + * @Author: ������������ + * @Date: 2020/11/11 + */ +@Data +public class RepairDataContext { + //��������������� + private RepairDataStrategy repairDataStrategy; + + //��������������������� + public void executeStrategy(String time,MultiValueMap<String,String> result){ + repairDataStrategy.repairData(time,result); + } +} diff --git a/src/main/java/com/moral/strategy/RepairDataStrategy.java b/src/main/java/com/moral/strategy/RepairDataStrategy.java new file mode 100644 index 0000000..8389d5f --- /dev/null +++ b/src/main/java/com/moral/strategy/RepairDataStrategy.java @@ -0,0 +1,10 @@ +package com.moral.strategy; + +import org.springframework.util.MultiValueMap; + +import java.util.Map; + +//������������������������������������������������������������������������������������������������ +public interface RepairDataStrategy { + void repairData(String time,MultiValueMap<String,String> result); +} diff --git a/src/main/java/com/moral/strategy/RepairFiveMinutelyData.java b/src/main/java/com/moral/strategy/RepairFiveMinutelyData.java new file mode 100644 index 0000000..5db7751 --- /dev/null +++ b/src/main/java/com/moral/strategy/RepairFiveMinutelyData.java @@ -0,0 +1,110 @@ +package com.moral.strategy; + +import com.alibaba.fastjson.JSON; +import com.moral.entity.History; +import com.moral.service.HistoryFiveMinutelyService; +import com.moral.service.SensorService; +import com.moral.util.DateUtil; +import com.xxl.job.core.biz.model.ReturnT; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class RepairFiveMinutelyData implements RepairDataStrategy { + @Resource + SensorService sensorService; + @Resource + HistoryFiveMinutelyService historyFiveMinutelyService; + @Resource + RedisTemplate redisTemplate; + @Override + public void repairData(String time,MultiValueMap<String,String> result) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String repairTime = sdf.format(new Date(Long.parseLong(time) * 1000)); + /*������������������������������������������������������������������*/ + Map<String, Object> params = getStartAndEndTime(time); + List<String> sensorKeys = sensorService.getSensorKeys(); + params.put("sensorKeys", sensorKeys); + List<Map<String, Object>> fiveMinutesSensorDatas; + /*������������������������������*/ + List<Map<String, Object>> insertDatas; + try { + fiveMinutesSensorDatas = historyFiveMinutelyService.getFiveMinutesSensorData(params); + insertDatas = new ArrayList<>(); + for (Map<String, Object> data : fiveMinutesSensorDatas) { + String mac = (String) data.get("mac"); + data.remove("mac"); + Map<String, Object> keyAndValueMap = new LinkedHashMap<>(); + Map<String, Object> insertDataMap = new LinkedHashMap<>(); + data.forEach((key, value) -> { + key = key.substring(3); + List<Object> list = null; + if (ObjectUtils.isEmpty(keyAndValueMap.get(key))) { + list = new ArrayList<>(); + } else { + list = (List<Object>) keyAndValueMap.get(key); + } + if (value instanceof Double) { + value = String.valueOf(value); + value = value.equals("0.0") ? 0 : Double.valueOf((String) value); + } + list.add(value); + keyAndValueMap.put(key, list); + }); + String keyAndValueJson = JSON.toJSONString(keyAndValueMap); + insertDataMap.put("mac", mac); + insertDataMap.put("time", params.get("end")); + insertDataMap.put("json", keyAndValueJson); + insertDatas.add(insertDataMap); + } + /*������������������������*/ + historyFiveMinutelyService.insertHistoryFiveMinutely(insertDatas, (String) params.get("yearAndMonth")); + } catch (Exception e) { + result.add("500","���������������������������-"+repairTime); + redisTemplate.opsForList().leftPush("unSuccessRepair_data","fiveMinutely_"+repairTime); + return; + } + result.add("200","���������������������������-"+repairTime); + } + + + private Map<String, Object> getStartAndEndTime(String paramTime) { + Map<String, Object> map = new HashMap<>(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(Long.parseLong(paramTime) * 1000); + String minute = DateUtil.getMinute(date); + String year = ""; + String month = ""; + String yearAndMonth = ""; + String startTime = ""; + String endTime = ""; + Integer endMinute = Integer.parseInt(String.valueOf(minute.charAt(minute.length() - 1))); + if (endMinute >= 5) { + StringBuilder time = new StringBuilder(sdf.format(date)); + startTime = time.replace(15, 19, "0:00").toString(); + endTime = time.replace(15, 19, "5:00").toString(); + } else { + StringBuilder endTimesb = new StringBuilder(sdf.format(date)); + endTime = endTimesb.replace(15, 19, "0:00").toString(); + date = DateUtil.rollMinute(date, -5); + StringBuilder startTimesb = new StringBuilder(sdf.format(date)); + startTime = startTimesb.replace(15, 19, "5:00").toString(); + + } + + year = DateUtil.getYear(date); + month = DateUtil.getMonth(date); + yearAndMonth = year + month; + map.put("start", startTime); + map.put("end", endTime); + map.put("yearAndMonth", yearAndMonth); + return map; + } +} diff --git a/src/main/java/com/moral/strategy/RepairHourlyData.java b/src/main/java/com/moral/strategy/RepairHourlyData.java new file mode 100644 index 0000000..727abef --- /dev/null +++ b/src/main/java/com/moral/strategy/RepairHourlyData.java @@ -0,0 +1,103 @@ +package com.moral.strategy; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.moral.service.DeviceService; +import com.moral.service.HistoryHourlyService; +import com.moral.service.HistoryMinutelyService; +import com.moral.service.SensorService; +import com.moral.util.DateUtil; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.log.XxlJobLogger; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class RepairHourlyData implements RepairDataStrategy { + @Resource + SensorService sensorService; + @Resource + DeviceService deviceService; + @Resource + HistoryMinutelyService historyMinutelyService; + @Resource + RedisTemplate redisTemplate; + @Resource + HistoryHourlyService historyHourlyService; + + + @Override + public void repairData(String time,MultiValueMap<String,String> result) { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date endTimeDate = new Date(Long.parseLong(time) * 1000); + Date startTimeDate = DateUtil.rollHour(endTimeDate, -1); + StringBuilder endTime = new StringBuilder(sdf.format(endTimeDate)); + StringBuilder startTime = new StringBuilder(sdf.format(startTimeDate)); + endTime.replace(14, 19, "00:00"); + startTime.replace(14, 19, "00:00"); + String yearAndMonth = DateUtil.getYear(startTimeDate) + DateUtil.getMonth(startTimeDate); + + List<String> sensorKeys = sensorService.getSensorKeys(); + List<String> macs = deviceService.getMacs(); + Map<String, Object> devices = new HashMap<>(); + devices.put("sensorKeys", sensorKeys); + devices.put("start", startTime.toString()); + devices.put("end", endTime.toString()); + devices.put("macs", macs); + devices.put("yearAndMonth", yearAndMonth); + + try { + List<Map<String, Object>> hourlyData = historyMinutelyService.getMinutelySensorData(devices); + XxlJobLogger.log("historyHourlyData:" + hourlyData.size()); + List<Map<String, Object>> hourlyDataList = new ArrayList<>(); + for (Map<String, Object> deviceData : hourlyData) { + if (!ObjectUtils.isEmpty(deviceData)) { + Map<String, Object> hourlyDataMap = new LinkedHashMap<>(); + JSONObject jo = new JSONObject(true); + hourlyDataMap.put("mac", deviceData.get("mac")); + hourlyDataMap.put("time", endTime.toString()); + JSONArray jsonArray = new JSONArray(); + for (String key : deviceData.keySet()) { + if (!key.equals("mac") && !key.startsWith("M")) { + List<Object> date = new ArrayList<>(); + date.add(deviceData.get(key)); + if (deviceData.get("MIN" + key) instanceof String) { + date.add(new BigDecimal(deviceData.get("MIN" + key).toString())); + date.add(new BigDecimal(deviceData.get("MAX" + key).toString())); + } else if (deviceData.get("MIN" + key) instanceof byte[]) { + date.add(new BigDecimal(new String((byte[]) (deviceData.get("MIN" + key))))); + date.add(new BigDecimal(new String((byte[]) (deviceData.get("MAX" + key))))); + } + jo.put(key, date); + } + } + jsonArray.add(jo); + hourlyDataMap.put("json", jsonArray.get(0).toString()); + hourlyDataList.add(hourlyDataMap); + } + } + if (!CollectionUtils.isEmpty(hourlyDataList)) { + historyHourlyService.insertHistoryHourly(hourlyDataList); + result.add("200", "������������������������-"+endTime); + return; + } + } catch (Exception e) { + XxlJobLogger.log("historyHourlyException:" + e.getMessage()); + result.add("500", "������������������������-"+endTime); + redisTemplate.opsForList().leftPush("unSuccessRepair_data","hourly_"+endTime); + return; + } + result.add("500", "������������������������-"+endTime); + redisTemplate.opsForList().leftPush("unSuccessRepair_data","hourly_"+endTime); + } +} diff --git a/src/main/java/com/moral/strategy/RepairMinutelyData.java b/src/main/java/com/moral/strategy/RepairMinutelyData.java new file mode 100644 index 0000000..972cb20 --- /dev/null +++ b/src/main/java/com/moral/strategy/RepairMinutelyData.java @@ -0,0 +1,97 @@ +package com.moral.strategy; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.moral.service.DeviceService; +import com.moral.service.HistoryMinutelyService; +import com.moral.service.SensorService; +import com.moral.util.DateUtil; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.log.XxlJobLogger; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class RepairMinutelyData implements RepairDataStrategy { + + @Resource + SensorService sensorService; + @Resource + DeviceService deviceService; + @Resource + HistoryMinutelyService historyMinutelyService; + @Resource + RedisTemplate redisTemplate; + + @Override + public void repairData(String time, MultiValueMap<String, String> result) { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date endTimeDate = new Date(Long.parseLong(time) * 1000); + Date startTimeDate = DateUtil.rollMinute(endTimeDate, -1); + StringBuilder endTime = new StringBuilder(sdf.format(endTimeDate)); + StringBuilder startTime = new StringBuilder(sdf.format(startTimeDate)); + endTime.replace(17, 19, "00"); + startTime.replace(17, 19, "00"); + String queryYearAndMonthDay = DateUtil.getYear(startTimeDate) + DateUtil.getMonth(startTimeDate) + DateUtil.getDay(startTimeDate); + + + Map<String, Object> devices = new HashMap<>(); + List<String> sensorKeys = sensorService.getSensorKeys(); + devices.put("sensorKeys", sensorKeys); + devices.put("start", startTime.toString()); + devices.put("end", endTime.toString()); + devices.put("yearAndMonthDay", queryYearAndMonthDay); + + try { + List<Map<String, Object>> minutelyData = deviceService.getSensorData(devices); + XxlJobLogger.log("historyMinutelyData:" + minutelyData.size()); + List<Map<String, Object>> minutelyDataList = new ArrayList<>(); + for (Map<String, Object> deviceData : minutelyData) { + if (!ObjectUtils.isEmpty(deviceData)) { + Map<String, Object> minutelyDataMap = new LinkedHashMap<>(); + JSONObject jo = new JSONObject(true); + minutelyDataMap.put("mac", deviceData.get("mac")); + minutelyDataMap.put("time", endTime.toString()); + JSONArray jsonArray = new JSONArray(); + for (String key : deviceData.keySet()) { + if (!key.equals("mac") && !key.startsWith("M")) { + List<Object> date = new ArrayList<>(); + date.add(deviceData.get(key)); + date.add(deviceData.get("MIN" + key)); + date.add(deviceData.get("MAX" + key)); + jo.put(key, date); + } + } + jsonArray.add(jo); + minutelyDataMap.put("json", jsonArray.get(0).toString()); + minutelyDataList.add(minutelyDataMap); + } + } + if (!CollectionUtils.isEmpty(minutelyDataList)) { + String insertYearAndMonth = DateUtil.getYear(endTimeDate) + DateUtil.getMonth(endTimeDate); + historyMinutelyService.insertHistoryMinutely(minutelyDataList, insertYearAndMonth); + result.add("200", "������������������������-"+endTime); + return; + } + } catch (Exception e) { + XxlJobLogger.log("repairHistoryMinutelyException:" + e.getMessage()); + result.add("500", "������������������������-"+endTime); + redisTemplate.opsForList().leftPush("unSuccessRepair_data","minutely_"+endTime); + return; + } + result.add("500", "������������������������-"+endTime); + redisTemplate.opsForList().leftPush("unSuccessRepair_data","minutely_"+endTime); + } + +} + diff --git a/src/main/java/com/moral/strategy/RepairStrategyFactory.java b/src/main/java/com/moral/strategy/RepairStrategyFactory.java new file mode 100644 index 0000000..071c2e5 --- /dev/null +++ b/src/main/java/com/moral/strategy/RepairStrategyFactory.java @@ -0,0 +1,29 @@ +package com.moral.strategy; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** +* @Description: ������������ + * @Param: + * @return: + * @Author: ������������ + * @Date: 2020/11/11 + */ +@Component +public class RepairStrategyFactory { + + @Resource + Map<String,RepairDataStrategy> strategys = new ConcurrentHashMap<>(); + + public RepairDataStrategy getInstance(String type){ + String[] types = type.split("_"); + return strategys.get(types[0]); + } + +} diff --git a/src/main/java/com/moral/task/DeviceAdjustValueTimingTask.java b/src/main/java/com/moral/task/DeviceAdjustValueTimingTask.java index f8ea0d4..0d47fa1 100644 --- a/src/main/java/com/moral/task/DeviceAdjustValueTimingTask.java +++ b/src/main/java/com/moral/task/DeviceAdjustValueTimingTask.java @@ -1,9 +1,13 @@ package com.moral.task; +import com.alibaba.fastjson.JSON; +import com.moral.entity.Device; import com.moral.service.DeviceAdjustValueService; import com.moral.service.DeviceAdjustValueTimingService; +import com.moral.service.DeviceService; import com.moral.util.AlarmUtils_2; import com.moral.util.LengthOfTimeUtils; +import com.moral.util.RedisUtils; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.log.XxlJobLogger; @@ -27,6 +31,12 @@ @Resource private DeviceAdjustValueService deviceAdjustValueService; + + @Resource + private DeviceService deviceService; + + @Resource + RedisUtils redisUtils; @XxlJob("DeviceAdjustValueTiming") public ReturnT DeviceAdjustValueTiming(String params) { @@ -70,6 +80,22 @@ }else { deviceAdjustValueService.updateValueByDeviceID(device_id,value); } + try { + // ���������redis + //Map<String,String> adjustMap = new HashMap<>(); + if(value!=null&&!value.isEmpty()){ + Map<String, Object> valueMap = JSON.parseObject(value); + System.out.println("valueMap:"+valueMap); + if(!valueMap.isEmpty()){ + Device device = deviceService.getDeviceByID(device_id); + String key = RedisUtils.getAdjustKey(device.getMac()); + redisUtils.set(key,valueMap); + } + } + }catch (Exception e){ + ReturnT returnT = new ReturnT(500, "������redis���������������"); + return returnT; + } ReturnT returnT = new ReturnT(200, "������������������������"); return returnT; } diff --git a/src/main/java/com/moral/task/RepairDataTask.java b/src/main/java/com/moral/task/RepairDataTask.java new file mode 100644 index 0000000..409d1b5 --- /dev/null +++ b/src/main/java/com/moral/task/RepairDataTask.java @@ -0,0 +1,66 @@ +package com.moral.task; + +import com.moral.strategy.RepairDataContext; +import com.moral.strategy.RepairDataStrategy; +import com.moral.strategy.RepairStrategyFactory; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.ObjectUtils; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.text.ParseException; +import java.util.*; + +@Component +public class RepairDataTask { + @Resource + RedisTemplate redisTemplate; + @Resource + RepairStrategyFactory factory; + + private Map<String,Integer> sortMap = new HashMap<>(); + + @PostConstruct + public void init(){ + this.sortMap.put("repairHourlyData",3); + this.sortMap.put("repairFiveMinutelyData",2); + this.sortMap.put("repairMinutelyData",1); + } + + @XxlJob("repairData") + public ReturnT repairData(String param) throws ParseException { + //��������������������������������������� + List<String> records = redisTemplate.opsForList().range("unrepair_data", 0, -1); + if(ObjectUtils.isEmpty(records)) + return new ReturnT(200,"���������������������"); + //��������������������������� + sorRecords(records); + redisTemplate.delete("unrepair_data"); + MultiValueMap<String, String> results = new LinkedMultiValueMap<>(); + RepairDataContext context = new RepairDataContext(); + for (String record : records) { + RepairDataStrategy instance = factory.getInstance(record); + context.setRepairDataStrategy(instance); + context.executeStrategy(record.split("_")[1], results); + } + return new ReturnT(200,results.toString()); + } + + + public void sorRecords(List<String> records){ + Collections.sort(records, new Comparator<String>() { + @Override + public int compare(String o1, String o2) { + Integer integer = sortMap.get(o1.split("_")[0]); + Integer integer1 = sortMap.get(o2.split("_")[0]); + return integer>integer1?1:-1; + } + }); + } + +} diff --git a/src/main/java/com/moral/util/RedisUtils.java b/src/main/java/com/moral/util/RedisUtils.java new file mode 100644 index 0000000..43122d4 --- /dev/null +++ b/src/main/java/com/moral/util/RedisUtils.java @@ -0,0 +1,195 @@ +package com.moral.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.moral.common.BooleanValueFilter; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +@Component +public class RedisUtils { + private static final String AlarmPrefix = "alarm_"; + public static String getAlarmKey(int organizationId){ + return AlarmPrefix+organizationId; + } + private static final String Adjust = "adjust_"; + public static String getAdjustKey(String mac){ + return Adjust + mac; + } + @Resource + private RedisTemplate redisTemplate; + @Resource + private BooleanValueFilter javaTypePatchValueFilter; + /** + * ���������������������value + * + * @param keys + */ + public void remove(final String... keys) { + for (String key : keys) { + remove(key); + } + } + + /** + * ������������key + * + * @param pattern + */ + public void removePattern(final String pattern) { + Set<Serializable> keys = redisTemplate.keys(pattern); + if (keys.size() > 0) + redisTemplate.delete(keys); + } + + /** + * ���������������value + * + * @param key + */ + public void remove(final String key) { + if (exists(key)) { + redisTemplate.delete(key); + } + } + + /** + * ���������������������������������value + * + * @param key + * @return + */ + public boolean exists(final String key) { + return redisTemplate.hasKey(key); + } + + /** + * ������������ + * + * @param key + * @return + */ + public Object get(final String key) { + Object result = null; + ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); + result = operations.get(key); + return result; + } + /** + * ������������,������������������ + * + * @param key + * @return + */ + public <T>T get(String key,Class<T> clazz) { + Object obj = get(key); + String json = obj!=null?obj.toString():null; + if(json!=null) { + return (T) parseObject(json,clazz); + } + return null; + } + /** + * ������������,������������������ + * + * @param key + * @return + */ + public <T>T get(String key,TypeReference typeReference) { + Object obj = get(key); + String json = obj!=null?obj.toString():null; + if(json!=null) { + return (T) parseObject(json,typeReference); + } + return null; + } + private static <T>T parseObject(String key,Class<T> clazz) { + return (T) JSON.parseObject(key,clazz); + } + private static <T>T parseObject(String key,TypeReference typeReference) { + return (T) JSON.parseObject(key,typeReference); + } + public <T> List<T> getList(String pattern,TypeReference typeReference){ + List<String> jsonList = getList(pattern); + List<T> list = new ArrayList<T>(); + for(String json:jsonList) { + list.add((T)parseObject(json,typeReference)); + } + return list; + } + public <T> List<T> getList(String pattern,Class<T> clazz){ + List<String> jsonList = getList(pattern); + List<T> list = new ArrayList<>(); + for(String json:jsonList) { + list.add(parseObject(json,clazz)); + } + return list; + } + public List<String> getList(String pattern){ + Set<String> keys = keys(pattern); + List<String> list = new ArrayList<String>(); + for(String key:keys) { + Object obj = get(key); + String json = obj!=null?obj.toString():null; + if(json!=null) { + list.add(json); + } + } + return list; + } + public Set<String> keys(String pattern) { + return redisTemplate.keys(pattern); + } + /** + * ������������ + * + * @param key + * @param value + * @return + */ + public boolean set(final String key, Object value) { + boolean result = false; + try { + if(value!=null&&!(value instanceof String)) { + value = JSON.toJSONString(value,new BooleanValueFilter()); + } + ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); + operations.set(key, value); + result = true; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * ������������ + * + * @param key + * @param value + * @return + */ + public boolean set(final String key, Object value, Long expireTime) { + boolean result = false; + try { + if(value!=null&&!(value instanceof String)) { + value = JSON.toJSONString(value, javaTypePatchValueFilter); + } + ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); + operations.set(key, value); + redisTemplate.expire(key, expireTime, TimeUnit.SECONDS); + result = true; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } +} -- Gitblit v1.8.0