|  |  | 
 |  |  | package com.moral.service.impl;
 | 
 |  |  | 
 | 
 |  |  | import java.util.ArrayList;
 | 
 |  |  | import java.util.Arrays;
 | 
 |  |  | import java.util.HashMap;
 | 
 |  |  | import java.util.List;
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 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.*;
 | 
 |  |  | import com.moral.entity.Device;
 | 
 |  |  | import com.moral.mapper.DeviceMapper;
 | 
 |  |  | import org.apache.commons.collections.CollectionUtils;
 | 
 |  |  | import org.springframework.stereotype.Service;
 | 
 |  |  | 
 | 
 |  |  | 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.RedisUtils;
 | 
 |  |  | import com.moral.common.util.StringUtils;
 | 
 |  |  | import com.moral.common.util.ValidateUtil;
 | 
 |  |  | import com.moral.entity.Device;
 | 
 |  |  | import com.moral.entity.MonitorPoint;
 | 
 |  |  | import com.moral.mapper.DeviceMapper;
 | 
 |  |  | import com.moral.mapper.MonitorPointMapper;
 | 
 |  |  | import com.moral.service.MonitorPointService;
 | 
 |  |  | 
 | 
 |  |  | import tk.mybatis.mapper.entity.Example;
 | 
 |  |  | import tk.mybatis.mapper.entity.Example.Criteria;
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     }
 | 
 |  |  |     @Override
 | 
 |  |  |     public List<MonitorPoint> queryWithStateByMap(Map<String, Object> params){
 | 
 |  |  |         params.put("isDelete",Constants.IS_DELETE_FALSE);
 | 
 |  |  |         List<MonitorPoint> monitorPointList = monitorPointMapper.selectByMap(params);
 | 
 |  |  |         for(MonitorPoint monitorPoint:monitorPointList){
 | 
 |  |  |             Integer state = getStateFromRedis(monitorPoint.getId());
 | 
 |  |  | 
 |  |  |                 monitorPoint.setIsDelete(Constants.IS_DELETE_FALSE);
 | 
 |  |  |                 monitorPointMapper.insertSelective(monitorPoint);
 | 
 |  |  |             }else{
 | 
 |  |  |                 MonitorPoint queryMonitorPoint = new MonitorPoint();
 | 
 |  |  |                 queryMonitorPoint.setId(monitorPoint.getId());
 | 
 |  |  |                 queryMonitorPoint.setOrganizationId(monitorPoint.getOrganizationId());
 | 
 |  |  |                 // num = 1,说明未改变,此查询在更新之前
 | 
 |  |  |                 Integer num =  monitorPointMapper.selectCount(queryMonitorPoint);
 | 
 |  |  |                 boolean needRefreshCach = (num!=1);
 | 
 |  |  |                 monitorPointMapper.updateByPrimaryKeySelective(monitorPoint);
 | 
 |  |  |                 // 刷新当前监控点下设备 在redis里设备信息
 | 
 |  |  |                 refreshDevicesInRedis(monitorPoint.getId());
 | 
 |  |  |                 if(needRefreshCach){
 | 
 |  |  |                     // 刷新当前监控点下设备 在redis里设备信息
 | 
 |  |  |                     refreshDevicesInRedis(monitorPoint.getId());
 | 
 |  |  |                 }
 | 
 |  |  |             }
 | 
 |  |  |         }
 | 
 |  |  |         catch (Exception ex){
 | 
 |  |  | 
 |  |  |       刷新当前监控点下设备 在redis里设备信息
 | 
 |  |  |      */
 | 
 |  |  |     private void  refreshDevicesInRedis(int monitorPointId){
 | 
 |  |  |         Device device = new Device();
 | 
 |  |  |         device.setMonitorPointId(monitorPointId);
 | 
 |  |  |         List<Device> deviceList = deviceMapper.select(device);
 | 
 |  |  |         Device queryDevice = new Device();
 | 
 |  |  |         queryDevice.setMonitorPointId(monitorPointId);
 | 
 |  |  |         List<Device> deviceList = deviceMapper.select(queryDevice);
 | 
 |  |  |         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());
 | 
 |  |  | //                        // 简化的设备信息 用以缓存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);
 | 
 |  |  |                         dev.setOrganizationIds(orgIds);
 | 
 |  |  |                         redisUtils.set(key,dev);
 | 
 |  |  |                     }
 | 
 |  |  |                 });
 | 
 |  |  |             }
 | 
 |  |  | 
 |  |  |       Criteria criteria = example.createCriteria();
 | 
 |  |  | 
 | 
 |  |  |       criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andLike("name", "%" + name + "%");
 | 
 |  |  |       example.or().andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andCondition("getPY(name) like ", "%" + name + "%");
 | 
 |  |  |       example.or().andEqualTo("isDelete", Constants.IS_DELETE_FALSE)
 | 
 |  |  |             .andCondition("getPY(" + getReplaceStr("name") + ") like ", "%" + name + "%");
 | 
 |  |  | 
 | 
 |  |  |       List<MonitorPoint> monitorPoints = monitorPointMapper.selectByExample(example);
 | 
 |  |  |       return monitorPoints;
 | 
 |  |  |    }
 | 
 |  |  | 
 | 
 |  |  |    private String getReplaceStr(String name){
 | 
 |  |  |         List<String[]> list = new ArrayList<String[]>();
 | 
 |  |  |         list.add(new String[]{"(",""});
 | 
 |  |  |         list.add(new String[]{")",""});
 | 
 |  |  |         for (String[] string : list) {
 | 
 |  |  |            name = replace(name,string[0],string[1]);
 | 
 |  |  |       }
 | 
 |  |  |       return name;
 | 
 |  |  |    }
 | 
 |  |  | 	 | 
 |  |  |    private  String replace(String name,String fromStr,String toStr){
 | 
 |  |  |       return "REPLACE (" + name + ",'" + fromStr + "','" + toStr + "')";
 | 
 |  |  |    }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  | 
 |  |  |         }).collect(Collectors.toList());
 | 
 |  |  |         return list;
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     @Override
 | 
 |  |  |    public List<MonitorPoint> getMonitorPointsByOrganizationId(Integer orgId) {
 | 
 |  |  |       Example example = new Example(MonitorPoint.class);
 | 
 |  |  |       Criteria criteria = example.createCriteria();
 | 
 |  |  | 		 | 
 |  |  |       criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE);
 | 
 |  |  |       if (Constants.isNotSpecialOrgId(orgId)) {
 | 
 |  |  |          criteria.andEqualTo("organizationId", orgId);
 | 
 |  |  |       }
 | 
 |  |  |       example.orderBy("name").asc();
 | 
 |  |  |       return monitorPointMapper.selectByExample(example);
 | 
 |  |  |    }
 | 
 |  |  |    @Override
 | 
 |  |  |    public List<MonitorPoint> getMonitorPointsByRegion(Map<String, Object> parameters) {
 | 
 |  |  |       Example example = new Example(MonitorPoint.class);
 | 
 |  |  |       Criteria criteria = example.createCriteria();
 | 
 |  |  | 		 | 
 |  |  |       criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE);
 | 
 |  |  |       criteria.andEqualTo(parameters.get("name").toString(), parameters.get("value"));
 | 
 |  |  |       return monitorPointMapper.selectByExample(example);
 | 
 |  |  |    }
 | 
 |  |  |    @Override
 | 
 |  |  |     public List<Integer> queryVersionsById(Integer id){
 | 
 |  |  |         return  monitorPointMapper.selectVersionsById(id);
 | 
 |  |  |     }
 | 
 |  |  | }
 |