From 7014fd76c199e676159ac30da6f4dbb91e3a137e Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Tue, 06 Feb 2018 16:50:31 +0800 Subject: [PATCH] 地图相关 --- src/main/java/com/moral/service/impl/DeviceServiceImpl.java | 135 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 130 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java index 78cbbd7..e8c755f 100644 --- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java @@ -1,12 +1,19 @@ package com.moral.service.impl; import java.util.*; +import java.util.stream.Collectors; import javax.annotation.Resource; +import com.alibaba.fastjson.TypeReference; +import com.github.pagehelper.Page; import com.moral.common.bean.Constants; import com.moral.common.bean.PageBean; +import com.moral.common.bean.PageResult; import com.moral.common.util.ExampleUtil; +import com.moral.common.util.RedisUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.BooleanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; @@ -28,6 +35,8 @@ @Resource private AccountService accountService; private Class ENTITY_CLASS = Device.class; + @Resource + RedisUtils redisUtils; @Override public Map<String, Object> getDeviceStatesByAccount(Map<String, Object> parameters) { ValidateUtil.notNull(parameters.get("accountId"), "param.is.null"); @@ -56,11 +65,6 @@ return result; } - @Override - public List<Map<String, Object>> getSensorsByDevice(String mac) { - return deviceMapper.getSensorsByDevice(mac); - } - @Override @Transactional public void saveOrUpdateDevice(Device device) { @@ -98,6 +102,98 @@ Device device = new Device(); device.setMac(mac); device = deviceMapper.selectOne(device); + return device; + } + + /** + * + * @param map + * map��� ������ ������id���4������������ + * @return + */ + @Override + public List<Device> query(Map<String, Object> map) { + List <Device> list = deviceMapper.selectByMap(map); + loadDeviceState(list); + return list; + } + + /** + * ������������id��������������� ������������������ + * @param orgId + * @param deviceName + * @param pageSize + * @param pageNo + * @return + */ + @Override + public PageResult query(Integer orgId, String deviceName, Integer pageSize, Integer pageNo) { + if(!ObjectUtils.isEmpty(pageSize)&&!ObjectUtils.isEmpty(pageNo)){ + PageHelper.startPage(pageNo,pageSize); + } + List<Device> list = deviceMapper.selectByOrgIdAndDevName(orgId,deviceName); + //���redis������������ + loadDeviceState(list); + if(list instanceof Page){ + return new PageResult(((Page) list).getTotal(),list); + } + return new PageResult(null,list); + } + + /** + * ������������id������������id ������������������ + * @param orgId + * @param mpId + * @param pageSize + * @param pageNo + * @return + */ + @Override + public PageResult query(Integer orgId, Integer mpId, Integer pageSize, Integer pageNo) { + if(!ObjectUtils.isEmpty(pageSize)&&!ObjectUtils.isEmpty(pageNo)){ + PageHelper.startPage(pageNo,pageSize); + } + List<Device> list = deviceMapper.selectByOrgIdAndMpId(orgId,mpId); + //���redis������������ + loadDeviceState(list); + if(list instanceof Page){ + return new PageResult(((Page) list).getTotal(),list); + } + return new PageResult(null,list); + } + private void loadDeviceState(List<Device> list){ + //���redis������������ + list.stream().map( device -> { + String state = getSateFromRedis(device.getMonitorPointId(),device.getMac()); + device.setState(state); + return device; + }).count(); + } + private String getSateFromRedis(Integer mpId,String mac){ + + Map<String,String> states = getStateMapFromRedis(mpId,mac); + String state = null; + if(states != null){ + state = states.get("state"); + } + state = state == null ?Constants.DEVICE_STATE_OFFLINE:state; + return state; + } + public Map<String,String> getStateMapFromRedis(Integer mpId,String mac){ + StringBuilder key = new StringBuilder(); + //������key + key.append("state_").append(mpId).append("_").append(mac); + return redisUtils.get(key.toString(),new TypeReference<Map<String,String>>(){}); + } + private Device getDeviceWithOrgIdsByMac(String mac) { + String key = "device_"+mac; + Device device = redisUtils.get(key,Device.class); + if(device==null) { + device = deviceMapper.selectWithOrgIdsByMac(mac); + if(device!=null){ + redisUtils.set(key,device); + } + } return device; } @@ -159,4 +255,33 @@ return deviceMapper.select(device); } + /** + * ������map{mac������state���} + * @param macList + * @return + */ + @Override + public List<Map<String,String>> queryDevicesState(List<String> macList,Boolean withData) { + List<Map<String,String>> list = macList.stream().map(mac->{ + Device device = getDeviceWithOrgIdsByMac(mac); + Map<String,String> resultMap = new HashMap<>(); + Map<String,String> stateMap = getStateMapFromRedis(device.getMonitorPointId(),mac); + if(!MapUtils.isEmpty(stateMap)){ + resultMap.putAll(stateMap); + }else{ + resultMap.put("state",Constants.DEVICE_STATE_OFFLINE); + } + if(BooleanUtils.isTrue(withData)){ + String dataKey = "data_"+mac; + Map<String,String> dataMap = redisUtils.get(dataKey,new TypeReference<Map<String,String>>(){}); + if(!MapUtils.isEmpty(dataMap)){ + resultMap.putAll(dataMap); + } + }else{ + resultMap.put("mac",mac); + } + return resultMap; + }).collect(Collectors.toList()); + return list; + } } -- Gitblit v1.8.0