| | |
| | | package com.moral.service.impl;
|
| | |
|
| | | import java.util.Arrays;
|
| | | import java.util.HashMap;
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | | import java.util.stream.Collectors;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import com.github.pagehelper.PageHelper;
|
| | | import com.moral.common.bean.Constants;
|
| | | import com.moral.common.bean.PageBean;
|
| | | import com.moral.common.util.ExampleUtil;
|
| | | import com.moral.common.util.MyBatisBaseMapUtil;
|
| | | import com.moral.common.util.*;
|
| | | import com.moral.entity.Device;
|
| | | import com.moral.mapper.DeviceMapper;
|
| | | import org.apache.commons.collections.CollectionUtils;
|
| | | import org.springframework.stereotype.Service;
|
| | |
|
| | | import com.moral.common.util.ValidateUtil;
|
| | | import com.moral.entity.MonitorPoint;
|
| | | import com.moral.mapper.MonitorPointMapper;
|
| | | import com.moral.service.MonitorPointService;
|
| | |
| | | public class MonitorPointServiceImpl implements MonitorPointService {
|
| | | @Resource
|
| | | private MonitorPointMapper monitorPointMapper;
|
| | | @Resource
|
| | | private DeviceMapper deviceMapper;
|
| | | @Resource
|
| | | RedisUtils redisUtils;
|
| | | private static Class ENTITY_CLASS = MonitorPoint.class;
|
| | | @Override
|
| | | public List<MonitorPoint> getMonitorPointsByAreaName(Map<String, Object> parameters) {
|
| | | ValidateUtil.notNull(parameters.get("areaName"), "param.is.null");
|
| | | return monitorPointMapper.getMonitorPointsByAreaName(parameters);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public List<MonitorPoint> queryWithStateByMap(Map<String, Object> params){
|
| | | List<MonitorPoint> monitorPointList = monitorPointMapper.selectByMap(params);
|
| | | for(MonitorPoint monitorPoint:monitorPointList){
|
| | | Integer state = getStateFromRedis(monitorPoint.getId());
|
| | | monitorPoint.setState(state);
|
| | | }
|
| | | return monitorPointList;
|
| | | }
|
| | | private Integer getStateFromRedis(Integer monitorPointId){
|
| | | StringBuilder key = new StringBuilder();
|
| | | key.append("state_").append(monitorPointId).append("_*");
|
| | | List<Map> stateList = redisUtils.getList(key.toString(),Map.class);
|
| | | int state = -1;
|
| | | if(stateList!=null){
|
| | | for (Map deviceState:stateList){
|
| | | int s = Integer.parseInt(deviceState.get("state").toString());
|
| | | state = s>state&&s<4?s:state;
|
| | | }
|
| | | }
|
| | | state = state==-1?4:state;
|
| | | return state;
|
| | | }
|
| | | @Override
|
| | | public PageBean queryByPageBean(PageBean pageBean) {
|
| | | Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean);
|
| | |
| | | return new PageBean(monitorPointList);
|
| | | }
|
| | | @Override
|
| | | public MonitorPoint selectWithRelationById(Integer id){
|
| | | public MonitorPoint queryWithRelationById(Integer id){
|
| | | Example example = new Example(ENTITY_CLASS);
|
| | | example.or().andEqualTo("id",id);
|
| | | List<MonitorPoint> monitorPointList = monitorPointMapper.selectWithAreaNameByExample(example);
|
| | |
| | | public void addOrModify(MonitorPoint monitorPoint) {
|
| | | try{
|
| | | if(monitorPoint.getId()==null){
|
| | | monitorPoint.setIsDelete(Constants.IS_DELETE_FALSE);
|
| | | monitorPointMapper.insertSelective(monitorPoint);
|
| | | }else{
|
| | | monitorPointMapper.updateByPrimaryKeySelective(monitorPoint);
|
| | | // 刷新当前监控点下设备 在redis里设备信息
|
| | | refreshDevicesInRedis(monitorPoint.getId());
|
| | | }
|
| | | }
|
| | | catch (Exception ex){
|
| | | throw ex;
|
| | | }
|
| | | }
|
| | | /*
|
| | | 刷新当前监控点下设备 在redis里设备信息
|
| | | */
|
| | | private void refreshDevicesInRedis(int monitorPointId){
|
| | | Device device = new Device();
|
| | | device.setMonitorPointId(monitorPointId);
|
| | | List<Device> deviceList = deviceMapper.select(device);
|
| | | if (!CollectionUtils.isEmpty(deviceList)){
|
| | | List<Integer> orgIds = monitorPointMapper.selectOrganizationIds(monitorPointId);
|
| | | if (!CollectionUtils.isEmpty(orgIds)){
|
| | | deviceList.stream().forEach(dev ->{
|
| | | if(!StringUtils.isNullOrEmpty(dev.getMac())){
|
| | | String key = "device_"+dev.getMac();
|
| | | // 简化的设备信息 用以缓存redis
|
| | | Device simpleDevice = new Device();
|
| | | simpleDevice.setId(dev.getId());
|
| | | simpleDevice.setDeviceVersion(dev.getDeviceVersion());
|
| | | simpleDevice.setMac(dev.getMac());
|
| | | simpleDevice.setMonitorPointId(dev.getMonitorPointId());
|
| | | // 设置新组织关系,防止读写分离时数据库同步延迟
|
| | | simpleDevice.setOrganizationIds(orgIds);
|
| | | redisUtils.set(key,simpleDevice);
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | |
|
| | | }
|
| | | @Override
|
| | | public void deleteByIds(Integer... ids) {
|
| | | MonitorPoint monitorPoint = new MonitorPoint();
|
| | |
| | | List<MonitorPoint> monitorPoints = monitorPointMapper.selectByExample(example);
|
| | | return monitorPoints;
|
| | | }
|
| | |
|
| | | /**
|
| | | *
|
| | | * @param idList
|
| | | * @return {id:,state:}
|
| | | */
|
| | | @Override
|
| | | public List<Map<String, String>> queryMonitroPointsState(List<Integer> idList) {
|
| | | List<Map<String, String>> list = idList.stream().map( id -> {
|
| | | Integer state = getStateFromRedis(id);
|
| | | Map<String,String> stateMap = new HashMap<>();
|
| | | stateMap.put("id",id.toString());
|
| | | stateMap.put("state",state.toString());
|
| | | return stateMap;
|
| | | }).collect(Collectors.toList());
|
| | | return list;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public List<MonitorPoint> getMonitorPointsByOrganizationId(Integer orgId) {
|
| | | MonitorPoint monitorPoint = new MonitorPoint();
|
| | | monitorPoint.setIsDelete(Constants.IS_DELETE_FALSE);
|
| | | if (Constants.isNotSpecialOrgId(orgId)) {
|
| | | monitorPoint.setOrganizationId(orgId);
|
| | | }
|
| | | return monitorPointMapper.select(monitorPoint);
|
| | | }
|
| | | }
|