From c0d88c1f82394c0374d2d592f4d2bca951d6334e Mon Sep 17 00:00:00 2001 From: xufenglei <xufenglei> Date: Mon, 14 May 2018 15:58:07 +0800 Subject: [PATCH] 报表展示 增加行业筛选 --- src/main/java/com/moral/service/impl/DeviceServiceImpl.java | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 286 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java index 152970a..f6b20ef 100644 --- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java @@ -1,12 +1,23 @@ 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.exception.BusinessException; import com.moral.common.util.ExampleUtil; +import com.moral.common.util.RedisUtils; +import com.moral.mapper.MonitorPointMapper; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; @@ -21,13 +32,31 @@ @Service public class DeviceServiceImpl implements DeviceService { - + Logger log = Logger.getLogger(DeviceServiceImpl.class); + //-----------------------redis key������-������--------------------------------- + private static String AlARM = "alarm";//������������������key������ + private static String ADJUST="adjust";//���������������key������ + private static String DEVICE = "device";//������������������key������ + private static String STATE = "state";//������������������key������ + private static String DATA = "data";//������������������key������ + //-----------------------redis key������-������--------------------------------- + private String keysConnect(String... keys) { + StringBuilder key = new StringBuilder(keys[0]); + for(int i=1;i<keys.length;i++) { + key.append("_"); + key.append(keys[i]); + } + return key.toString().toLowerCase(); + } @Resource private DeviceMapper deviceMapper; - + @Resource + private MonitorPointMapper monitorPointMapper; @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"); @@ -57,11 +86,6 @@ } @Override - public List<Map<String, Object>> getSensorsByDevice(String mac) { - return deviceMapper.getSensorsByDevice(mac); - } - - @Override @Transactional public void saveOrUpdateDevice(Device device) { ValidateUtil.notNull(device, "param.is.null"); @@ -80,6 +104,8 @@ device.setId(queryDevice.getId()); deviceMapper.updateByPrimaryKeySelective(device); } + //������redis������������ + refreshDeviceInRedis(device); } @Override @@ -87,23 +113,199 @@ ValidateUtil.notNull(uid, "param.is.null"); Device device = new Device(); device.setOperateUserId(uid); - PageHelper.startPage(pageIndex, pageSize); + PageHelper.startPage(pageIndex, pageSize,false); List<Device> devices = deviceMapper.select(device); return devices; } + /** + * + * @param mac + * @param fromCache + * @return ������������������ + */ + @Override + public Device getDeviceByMac (String mac ,boolean fromCache){ + if(fromCache){ + Device device = getDeviceFromRedis(mac); + if(device==null) { + device = deviceMapper.selectWithOrgIdsByMac(mac); + if(device!=null){ + setDeviceToRedis(mac,device); + } + } + return device; + }else { + return deviceMapper.selectWithOrgIdsByMac(mac); + } + + } + + /** + * ��������������������� + * @param mac + * @return + */ @Override public Device getDeviceByMac(String mac) { - ValidateUtil.notEmpty(mac, "param.is.null"); - Device device = new Device(); - device.setMac(mac); - device = deviceMapper.selectOne(device); - return device; + + return getDeviceByMac(mac,true); + } + /* + * ���������������������redis������key + */ + private String getDeviceKey(String mac) { + return keysConnect(DEVICE,mac); + } + /* + * ������������������redis��������� ������ + */ + private void setDeviceToRedis(String mac,Device device){ + String key = getDeviceKey(mac); + Device simpleDevice = new Device(); + simpleDevice.setId(device.getId());// id + simpleDevice.setName(device.getName());// name + simpleDevice.setAddress(device.getAddress());// address + simpleDevice.setDeviceVersionId(device.getDeviceVersionId());// version + simpleDevice.setMac(device.getMac()); // mac + simpleDevice.setMonitorPointId(device.getMonitorPointId());// ���������id + simpleDevice.setOrganizationIds(device.getOrganizationIds());// ������������ + redisUtils.set(key,simpleDevice); + } + private Device getDeviceFromRedis(String mac) { + String key = getDeviceKey(mac); + return redisUtils.get(key,Device.class); } + /** + * + * @param map + * map��� ������ ������id���4������������ + * @return + */ @Override - public PageBean queryByPageBean(PageBean pageBean) { + 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 mac = device.getMac(); + if(!StringUtils.isBlank(mac)){ + String state = getSateFromRedis(device.getMonitorPointId(),mac.toLowerCase()); + device.setState(state); + }else{ + device.setState(Constants.DEVICE_STATE_OFFLINE); + } + return device; + }).count(); + } + private String getSateFromRedis(Integer mpId,String mac){ + + Map<String,String> stateMap = getStateMapFromRedis(mpId,mac); + String state = null; + if(stateMap != null){ + state = stateMap.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; + } + /* + ������ redis ��������������� + */ + private void refreshDeviceInRedis(Device device){ + if(!StringUtils.isBlank(device.getMac())){ +// Device simpleDevice = new Device(); +// simpleDevice.setId(device.getId());// id +// simpleDevice.setName(device.getName());// name +// simpleDevice.setAddress(device.getAddress());// address +// simpleDevice.setDeviceVersionId(device.getDeviceVersionId());// version +// simpleDevice.setMac(device.getMac()); // mac +// simpleDevice.setMonitorPointId(device.getMonitorPointId());// ���������id +// simpleDevice.setOrganizationIds(device.getOrganizationIds());// ������������ + if(device.getMonitorPointId()!=null){ + List<Integer> orgIds = monitorPointMapper.selectOrganizationIds(device.getMonitorPointId()); + device.setOrganizationIds(orgIds); + } + String key = "device_"+device.getMac(); + redisUtils.set(key,device); + } + } + @Override + public int countByExample(PageBean pageBean){ Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean); + addDeletesToExample(example); + return deviceMapper.selectCountByExample(example); + } + + /** + * ������������������������ + * @param example + */ + private void addDeletesToExample(Example example){ List<Example.Criteria> criteriaList = example.getOredCriteria(); if(criteriaList!=null&&criteriaList.size()>0){ for(Example.Criteria cri : criteriaList){ @@ -112,6 +314,11 @@ }else { example.or().andNotEqualTo("isDelete",Constants.IS_DELETE_TRUE); } + } + @Override + public PageBean queryByPageBean(PageBean pageBean) { + Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean); + addDeletesToExample(example); if(pageBean.getPageSize()>0){ PageHelper.startPage(pageBean.getPageIndex(),pageBean.getPageSize()); } @@ -139,17 +346,82 @@ @Override public void addOrModify(Device device){ try{ + //mac ��������� + if(!StringUtils.isBlank(device.getMac())){ + device.setMac(device.getMac().toLowerCase()); + } if(device.getId()==null){ + device.setState(Constants.DEVICE_STATE_OFFLINE); device.setIsDelete(Constants.IS_DELETE_FALSE); deviceMapper.insertSelective(device); }else{ deviceMapper.updateByPrimaryKeySelective(device); } + //������redis��������������� + refreshDeviceInRedis(device); } catch (Exception ex){ throw ex; } } + @Override + public List<Map> countByTimes(Date start,Date end,String format){ + if(start==null||end==null||StringUtils.isBlank(format)){ + log.error("some params is null"); + throw new BusinessException("some params is null"); + } + return deviceMapper.countByTimes(start, end, format); + } + @Override + public List<Device> getDevicesByMonitorPointId(Integer monitorPointId) { + Device device = new Device(); + device.setMonitorPointId(monitorPointId); + device.setIsDelete(Constants.IS_DELETE_FALSE); + 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->{ + Map<String,String> resultMap = new HashMap<>(); + if(!StringUtils.isBlank(mac)){ + mac = mac.toLowerCase(); + Device device = getDeviceWithOrgIdsByMac(mac); + Map<String,String> stateMap = getStateMapFromRedis(device.getMonitorPointId(),mac); + if(!MapUtils.isEmpty(stateMap)){ + resultMap.putAll(stateMap); + }else{ + resultMap.put("state",Constants.DEVICE_STATE_OFFLINE); + resultMap.put("mac",mac); + } + //������data + 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); + } + } + } + return resultMap; + }).collect(Collectors.toList()); + return list; + } + + @Override + public Device queryById(Integer id) { + return deviceMapper.selectByPrimaryKey(id); + } + + @Override + public List<Device> getDevicesByProfessionId(Map<String, Object> parameters) { + + return deviceMapper.getDevicesByProfession(parameters); + } } -- Gitblit v1.8.0