From f28149d8183a62f87fa9c8df9ae589070d83f612 Mon Sep 17 00:00:00 2001 From: 于紫祥_1901 <email@yuzixiang_1910> Date: Thu, 24 Dec 2020 13:47:50 +0800 Subject: [PATCH] 波动补偿 --- src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java | 906 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 803 insertions(+), 103 deletions(-) diff --git a/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java b/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java index 200db4e..54b5e3b 100644 --- a/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java +++ b/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java @@ -1,30 +1,48 @@ package com.moral.service.impl; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Resource; +import javax.validation.constraints.NotNull; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.stereotype.Service; - +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; 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.ParameterUtils; 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.DeviceProperty; import com.moral.entity.MonitorPoint; import com.moral.mapper.DeviceMapper; +import com.moral.mapper.DevicePropertyMapper; +import com.moral.mapper.DictionaryDataMapper; import com.moral.mapper.MonitorPointMapper; +import com.moral.mapper.OrganizationMapper; +import com.moral.service.DeviceService; +import com.moral.service.HistoryHourlyService; import com.moral.service.MonitorPointService; +import com.moral.service.OrganizationService; +import com.moral.util.MyLatLng; +import com.moral.util.mapUtils; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example.Criteria; @@ -35,96 +53,119 @@ @Resource private DeviceMapper deviceMapper; @Resource + private OrganizationMapper orgMapper; + @Resource RedisUtils redisUtils; + @Resource + DictionaryDataMapper dictionaryDataMapper; + + @Resource + private DeviceService deviceService; + + @Resource + private OrganizationService organizationService; + + @Resource + private HistoryHourlyService historyHourlyService; + + @Resource + DevicePropertyMapper devicePropertyMapper; + 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){ - params.put("isDelete",Constants.IS_DELETE_FALSE); - List<MonitorPoint> monitorPointList = monitorPointMapper.selectByMap(params); - for(MonitorPoint monitorPoint:monitorPointList){ - Integer state = getStateFromRedis(monitorPoint.getId()); - monitorPoint.setState(state); + public List<MonitorPoint> queryWithStateByMap(Map<String, Object> params) { + params.put("isDelete", Constants.IS_DELETE_FALSE); + Object orgIdObj = params.get("orgId"); + List<MonitorPoint> monitorPointList = null; + if (orgIdObj != null) { + Integer orgId = Integer.parseInt(orgIdObj.toString()); + List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); + params.put("orgIds", orgIds); + monitorPointList = monitorPointMapper.selectByMap(params); +// for(MonitorPoint monitorPoint:monitorPointList){ +// Integer state = getStateFromRedis(monitorPoint.getId()); +// monitorPoint.setState(state); +// } } - return monitorPointList; + return monitorPointList == null ? new ArrayList<>() : monitorPointList; } - private Integer getStateFromRedis(Integer monitorPointId){ + + private Integer getStateFromRedis(Integer monitorPointId) { StringBuilder key = new StringBuilder(); key.append("state_").append(monitorPointId).append("_*"); - List<Map> stateList = redisUtils.getList(key.toString(),Map.class); + 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; + 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; + state = state == -1 ? 4 : state; return state; } + @Override public PageBean queryByPageBean(PageBean pageBean) { - Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean); + Example example = ExampleUtil.generateExample(ENTITY_CLASS, pageBean); List<Example.Criteria> criteriaList = example.getOredCriteria(); - if(criteriaList!=null&&criteriaList.size()>0){ - for(Example.Criteria cri : criteriaList){ - cri.andNotEqualTo("isDelete", Constants.IS_DELETE_TRUE); - } - }else { - example.or().andNotEqualTo("isDelete",Constants.IS_DELETE_TRUE); - } - PageHelper.startPage(pageBean.getPageIndex(),pageBean.getPageSize()); + PageHelper.startPage(pageBean.getPageIndex(), pageBean.getPageSize()); List<MonitorPoint> monitorPointList = monitorPointMapper.selectWithAreaNameByExample(example); return new PageBean(monitorPointList); } + @Override - public MonitorPoint queryWithRelationById(Integer id){ - Example example = new Example(ENTITY_CLASS); - example.or().andEqualTo("id",id); - List<MonitorPoint> monitorPointList = monitorPointMapper.selectWithAreaNameByExample(example); - return monitorPointList!=null&&monitorPointList.size()>0?monitorPointList.get(0):null; + public MonitorPoint queryWithRelationById(Integer id) { + Example example = new Example(ENTITY_CLASS); + example.or().andEqualTo("id", id); + List<MonitorPoint> monitorPointList = monitorPointMapper.selectWithAreaNameByExample(example); + return monitorPointList != null && monitorPointList.size() > 0 ? monitorPointList.get(0) : null; } + @Override public void addOrModify(MonitorPoint monitorPoint) { - try{ - if(monitorPoint.getId()==null){ + try { + if (monitorPoint.getId() == null) { monitorPoint.setIsDelete(Constants.IS_DELETE_FALSE); monitorPointMapper.insertSelective(monitorPoint); - }else{ + } else { MonitorPoint queryMonitorPoint = new MonitorPoint(); queryMonitorPoint.setId(monitorPoint.getId()); queryMonitorPoint.setOrganizationId(monitorPoint.getOrganizationId()); // num = 1,���������������,������������������������ - Integer num = monitorPointMapper.selectCount(queryMonitorPoint); - boolean needRefreshCach = (num!=1); + Integer num = monitorPointMapper.selectCount(queryMonitorPoint); + boolean needRefreshCach = (num != 1); monitorPointMapper.updateByPrimaryKeySelective(monitorPoint); - if(needRefreshCach){ + if (needRefreshCach) { // ������������������������������ ���redis��������������� refreshDevicesInRedis(monitorPoint.getId()); } } - } - catch (Exception ex){ - throw ex; + } catch (Exception ex) { + throw ex; } } + /* ������������������������������ ���redis��������������� */ - private void refreshDevicesInRedis(int monitorPointId){ + private void refreshDevicesInRedis(int monitorPointId) { Device queryDevice = new Device(); queryDevice.setMonitorPointId(monitorPointId); List<Device> deviceList = deviceMapper.select(queryDevice); - if (!CollectionUtils.isEmpty(deviceList)){ + 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(); + 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()); @@ -133,97 +174,756 @@ // simpleDevice.setMonitorPointId(dev.getMonitorPointId()); // ������������������������������������������������������������������ dev.setOrganizationIds(orgIds); - redisUtils.set(key,dev); + redisUtils.set(key, dev); } }); } } } + @Override public void deleteByIds(Integer... ids) { MonitorPoint monitorPoint = new MonitorPoint(); monitorPoint.setIsDelete(Constants.IS_DELETE_TRUE); - if(ids!=null&&ids.length>0){ - if(ids.length==1){ + if (ids != null && ids.length > 0) { + if (ids.length == 1) { monitorPoint.setId(ids[0]); monitorPointMapper.updateByPrimaryKeySelective(monitorPoint); - }else{ + } else { Example example = new Example(ENTITY_CLASS); example.or().andIn("id", Arrays.asList(ids)); - monitorPointMapper.updateByExampleSelective(monitorPoint,example); + monitorPointMapper.updateByExampleSelective(monitorPoint, example); } } } - @Override - public List<MonitorPoint> getMonitorPointsByName(String name) { - Example example = new Example(MonitorPoint.class); - Criteria criteria = example.createCriteria(); + @Override + public List<MonitorPoint> getMonitorPointsByName(String name) { + Example example = new Example(MonitorPoint.class); + Criteria criteria = example.createCriteria(); - criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andLike("name", "%" + name + "%"); - example.or().andEqualTo("isDelete", Constants.IS_DELETE_FALSE) - .andCondition("getPY(" + getReplaceStr("name") + ") like ", "%" + name + "%"); + criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andLike("name", "%" + name + "%"); + example.or().andEqualTo("isDelete", Constants.IS_DELETE_FALSE) + .andCondition("getPY(" + getReplaceStr("name") + ") like ", "%" + name + "%"); - List<MonitorPoint> monitorPoints = monitorPointMapper.selectByExample(example); - return monitorPoints; - } + List<MonitorPoint> monitorPoints = monitorPointMapper.selectByExample(example); + return monitorPoints; + } - private String getReplaceStr(String name){ + private String getReplaceStr(String name) { List<String[]> list = new ArrayList<String[]>(); - list.add(new String[]{"���",""}); - list.add(new 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 + "')"; - } + name = replace(name, string[0], string[1]); + } + return name; + } + + private String replace(String name, String fromStr, String toStr) { + return "REPLACE (" + name + ",'" + fromStr + "','" + toStr + "')"; + } /** - * * @param idList - * @return {id:,state:} + * @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; + 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; } + /** + * ������������������������������������ + * + * @param orgId + * @return + */ @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); + public Integer countOfSubOrgs(@NotNull Integer orgId) { + Example example = new Example(ENTITY_CLASS); + //��������������������������� + if (!dictionaryDataMapper.isSupperOrgId(orgId)) { + List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); + example.or().andIn("organizationId", orgIds); + } + return monitorPointMapper.selectCountByExample(example); } + + @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); + Set<Integer> organizationIds = organizationService.getChildOrganizationIds(orgId); + criteria.andIn("organizationId", organizationIds); + + } + example.orderBy("name").asc(); + return monitorPointMapper.selectByExample(example); + } + + @Override + public List<MonitorPoint> getMonitorPointsByOrganizationIds(Set<Integer> orgIds) { + return monitorPointMapper.getMonitorPointsByOrganizationIds(orgIds); + } + + @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); + } + + @Override + public MonitorPoint queryMonitorPointById(Integer mpointId) { + return this.monitorPointMapper.selectByPrimaryKey(mpointId); + } + + /** + * @Description: ������������������������������������������������ + * @Param: [parameters] + * @return: java.util.List<com.moral.entity.MonitorPoint> + * @Author: ������������ + * @Date: 2020/12/2 + */ + @Override + public List<MonitorPoint> getMonitorPointsAndDevicesByRegion(Map<String, Object> parameters) { + //������������ + Object organizationId = parameters.remove("organizationId"); + //���������������������null������������null���������������������������msgKey��������������� + ValidateUtil.notNull(organizationId, "param.is.null"); + ValidateUtil.notNull(parameters.get("regionCode"), "param.is.null"); + + //������������������ + ParameterUtils.getRegionType4RegionCode(parameters); + + //������������code��������������� + Example example = new Example(MonitorPoint.class); + Criteria criteria = example.createCriteria(); + criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE); + + //������������������������������������������������������������orgid������������������������ + if (Constants.isNotSpecialOrgId(Integer.valueOf(organizationId.toString()))) { + Set<Integer> organizationIds = organizationService.getChildOrganizationIds(Integer.valueOf(organizationId.toString())); + criteria.andIn("organizationId", organizationIds); + } + criteria.andEqualTo(parameters.get("regionType") + "Code", parameters.remove("regionCode")); + List<MonitorPoint> monitorPoints = monitorPointMapper.selectByExample(example); + + //������������������������ + Example deviceExample = new Example(Device.class); + Criteria deviceCriteria = deviceExample.createCriteria(); + deviceCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE); + List<Device> devicesInfo = deviceMapper.selectByExample(deviceExample); + + //������������������������ + Example monitorExample = new Example(MonitorPoint.class); + Criteria monitorCriteria = monitorExample.createCriteria(); + monitorCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE); + List<MonitorPoint> monitorPointInfo = monitorPointMapper.selectByExample(monitorExample); + + //������������������������������ + List<DeviceProperty> devicePropertyList = devicePropertyMapper.selectAll(); + + //������������������������������������������ + for (Device d : devicesInfo) { + for (DeviceProperty dp : devicePropertyList) { + if (dp.getId().equals(d.getId())) { + d.setDeviceProperty(dp); + } + } + } + + //������������������������������������������ + Map<Integer, List<Device>> monitorDeviceMap = new HashMap(); + for (MonitorPoint m : monitorPointInfo) { + List<Device> monitorDevices = new ArrayList<>(); + for (Device d : devicesInfo) { + if (m.getId().equals(d.getMonitorPointId())) { + monitorDevices.add(d); + } + } + monitorDeviceMap.put(m.getId(), monitorDevices); + } + + //������������Code��������������������������������������������� + Iterator<MonitorPoint> iterator = monitorPoints.iterator(); + while (iterator.hasNext()) { + MonitorPoint monitorPoint = iterator.next(); + for (Map.Entry<Integer, List<Device>> entry : monitorDeviceMap.entrySet()) { + if (monitorPoint.getId().equals(entry.getKey())) { + if (!CollectionUtils.isEmpty(entry.getValue())) { + monitorPoint.setDevices(entry.getValue()); + } else { + iterator.remove(); + } + } + } + } + return monitorPoints; + } + + /** + * @Description: ��������������������������������������������� + * @Param: [parameters] + * @return: java.util.List<com.moral.entity.MonitorPoint> + * @Author: ������������ + * @Date: 2020/12/2 + */ + @Override + public List<MonitorPoint> getMonitorPointsAndDevicesByRegionNew(Map<String, Object> parameters) { + //������������ + Object organizationId = parameters.remove("organizationId"); + //���������������������null������������null���������������������������msgKey��������������� + ValidateUtil.notNull(organizationId, "param.is.null"); + ValidateUtil.notNull(parameters.get("regionCode"), "param.is.null"); + + //������������������ + ParameterUtils.getRegionType4RegionCode(parameters); + + //������������code��������������� + Example example = new Example(MonitorPoint.class); + Criteria criteria = example.createCriteria(); + criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE); + + //������������������������������������������������������������orgid������������������������ + if (Constants.isNotSpecialOrgId(Integer.valueOf(organizationId.toString()))) { + Set<Integer> organizationIds = organizationService.getChildOrganizationIds(Integer.valueOf(organizationId.toString())); + criteria.andIn("organizationId", organizationIds); + } + criteria.andEqualTo(parameters.get("regionType") + "Code", parameters.remove("regionCode")); + List<MonitorPoint> monitorPoints = monitorPointMapper.selectByExample(example); + + //������������������������ + Example deviceExample = new Example(Device.class); + Criteria deviceCriteria = deviceExample.createCriteria(); + deviceCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE); + List<Device> devicesInfo = deviceMapper.selectByExample(deviceExample); + + //������������������������ + Example monitorExample = new Example(MonitorPoint.class); + Criteria monitorCriteria = monitorExample.createCriteria(); + monitorCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE); + List<MonitorPoint> monitorPointInfo = monitorPointMapper.selectByExample(monitorExample); + + //������������������������������ + List<DeviceProperty> devicePropertyList = devicePropertyMapper.selectAll(); + + //������������������������������������������ + for (Device d : devicesInfo) { + for (DeviceProperty dp : devicePropertyList) { + if (dp.getId().equals(d.getId())) { + d.setDeviceProperty(dp); + } + } + } + + //������������������������������������������ + Map<Integer, List<Device>> monitorDeviceMap = new HashMap(); + for (MonitorPoint m : monitorPointInfo) { + List<Device> monitorDevices = new ArrayList<>(); + for (Device d : devicesInfo) { + if (m.getId().equals(d.getMonitorPointId())) { + monitorDevices.add(d); + } + } + monitorDeviceMap.put(m.getId(), monitorDevices); + } + + //������������Code��������������������������������������������� + Iterator<MonitorPoint> iterator = monitorPoints.iterator(); + while (iterator.hasNext()) { + MonitorPoint monitorPoint = iterator.next(); + for (Map.Entry<Integer, List<Device>> entry : monitorDeviceMap.entrySet()) { + if (monitorPoint.getId().equals(entry.getKey())) { + if (!CollectionUtils.isEmpty(entry.getValue())) { + monitorPoint.setDevices(entry.getValue()); + } + } + } + } + return monitorPoints; + } + + + @SuppressWarnings("unchecked") + @Override + public Collection<Object> getDevicesStateByRegion(Map<String, Object> parameters) { + //������������ + Object organizationId = parameters.remove("organizationId"); + ValidateUtil.notNull(organizationId, "param.is.null"); + ValidateUtil.notNull(parameters.get("regionCode"), "param.is.null"); + + //������������������ + ParameterUtils.getRegionType4RegionCode(parameters); + + if (Constants.isNotSpecialOrgId(Integer.valueOf(organizationId.toString()))) { + Set<Integer> organizationIds = organizationService.getChildOrganizationIds(Integer.valueOf(organizationId.toString())); + parameters.put("orgIds", organizationIds); + } + List<Map<String, Object>> monitorPoints = deviceMapper.getDevicesStateByRegion(parameters); + Map<String, Object> result = new HashMap<String, Object>(); + Map<String, Object> device; + List<Map<String, Object>> devices; + for (Map<String, Object> map : monitorPoints) { + String id = map.get("id").toString(); + + device = new HashMap<String, Object>(); + device.put("id", map.remove("deviceId")); + device.put("name", map.remove("deviceName")); + device.put("state", map.remove("state")); + device.put("mac", map.remove("mac")); + + if (result.containsKey(id)) { + Map<String, Object> monitorPoint = (Map<String, Object>) result.get(id); + devices = (List<Map<String, Object>>) monitorPoint.get("devices"); + } else { + devices = new ArrayList<Map<String, Object>>(); + result.put(id, map); + } + devices.add(device); + map.put("devices", devices); + result.put(id, map); + } + + return result.values(); + } + + @Override + public void isCompensateCalculation(Map<String, Object> parameters) { + MonitorPoint monitorPoint = monitorPointMapper.selectByPrimaryKey(Integer.valueOf(parameters.get("monitorPointId").toString())); + if (Integer.valueOf(320581).equals(monitorPoint.getAreaCode())) { + parameters.put("compensate", true); + } + + } + + @Override + public Map<String, Object> selectAllById(String id) { + int id2 = Integer.parseInt(id); + Map<String, Object> map = monitorPointMapper.selectAllById(id2); + return map; + } + + @Override + public List<Device> getDeviceList(int id) { + return monitorPointMapper.getDeviceList(id); + } + + @Override + public JSONObject getMonitorPointById(int id, String Time, int i, String sensor) { + JSONObject params = new JSONObject(); + MonitorPoint monitorPoint = monitorPointMapper.getMonitorPointById(id); + if (i == 1) { + Double longitude = monitorPoint.getLongitude(); + Double latitude = monitorPoint.getLatitude(); + + Double workshop = 0.0; + + Double flue = 0.0; + //������������ + List<Device> device1 = deviceService.getDeviceById1(id); + + //������������ + List<Device> device2 = deviceService.getDeviceById2(id); + + //������������ + List<Device> device3 = deviceService.getDeviceById3(id); + + + String purificationRate = null;//��������� + + if (device3.size() == 0) { + purificationRate = "���������������������������������������������"; + params.put("device2", device2); + params.put("device1", device1); + } else { + params.put("device1", device1); + params.put("device2", device2); + params.put("device3", device3); + for (Device device33 : device3) { + String mac3 = device33.getMac(); + String tvoc = historyHourlyService.getTVOCByMac(mac3, Time, sensor); + if (tvoc != null) { + workshop = Double.parseDouble(tvoc); + } else { + workshop = 0.0; + } + } + if (device1.size() == 0) { + purificationRate = "���������������������������������������������"; + } else { + for (Device device11 : device1) { + String mac1 = device11.getMac(); + flue = Double.parseDouble(historyHourlyService.getTVOCByMac(mac1, Time, sensor)); + if (workshop == 0.0) { + purificationRate = "���������������������������������������������������"; + } else { + if (flue == 0.0) { + purificationRate = "���������������������������������������������������"; + } else { + BigDecimal b = new BigDecimal(((workshop - flue) / workshop) * 100); + double purity2 = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); + purificationRate = (purity2) + "%"; + } + } + } + } + } + params.put("latitude", latitude); + params.put("longitude", longitude); + params.put("purificationRate", purificationRate); + } + if (i == 2) { + Double longitude = monitorPoint.getLongitude(); + Double latitude = monitorPoint.getLatitude(); + //������������ + List<Device> device1 = deviceService.getDeviceById1(id); + //������������ + List<Device> device2 = deviceService.getDeviceById2(id); + //������������ + List<Device> device3 = deviceService.getDeviceById3(id); + String collectionRate = null;//��������� + Double pressure = 0.0;//������������ + List<Double> list1 = new ArrayList(); + if (device3.size() == 0) { + collectionRate = "������������������������������������������������"; + params.put("device1", device1); + params.put("device2", device2); + } else { + params.put("device3", device3); + if (device2.size() == 0) { + collectionRate = "������������������������������������������������"; + params.put("device1", device1); + } else { + params.put("device2", device2); + params.put("device1", device1); + Double sum = 0.0; + for (Device device22 : device2) { + String mac2 = device22.getMac(); + String pressure2 = historyHourlyService.getPressureByMac(mac2, Time); + if (pressure2 != null) { + pressure = Double.parseDouble(pressure2); + list1.add(pressure); + } else { + collectionRate = "������������������������������������������������������������"; + } + + } + for (Double d : list1) { + sum = sum + d; + } + if (list1.size() != 0) { + pressure = sum / list1.size(); + } else { + collectionRate = "������������������������������������������������������������"; + } + Double pressure33 = 0.0; + for (Device device33 : device3) { + String mac3 = device33.getMac(); + String pressure3 = historyHourlyService.getPressureByMac(mac3, Time); + if (pressure3 != null) { + pressure33 = Double.parseDouble(pressure3); + BigDecimal b = new BigDecimal((pressure - pressure33 + 3.5) * 20);//���������2.5��������������������������������� + double collection = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); + collectionRate = collection + "%"; + } + } + } + } + params.put("latitude", latitude); + params.put("longitude", longitude); + params.put("collectionRate", collectionRate); + } + + if (i == 3) { + Double longitudeCompany = monitorPoint.getLongitude(); + Double latitudeCompany = monitorPoint.getLatitude(); + Double longitude = 0.0;//������������������������ + Double latitude = 0.0;//������������������������ + List<Device> deviceList = deviceService.getDeviceById2(id); + //List<Device> deviceList = monitorPointService.getDeviceList(id); + List<Map> list = new ArrayList<Map>();//������historyHourly���json������ + String smac = "";//������������������Mac��� + List<Map> windList = new ArrayList<Map>();//��������������������������������������� + Map<String, Object> jsonMap = new HashMap<String, Object>();//��������������������� + Map<String, Object> deviceMap = null; + if (deviceList.size() > 1) { + for (Device device : deviceList) { + deviceMap = new HashMap<String, Object>(); + smac = device.getMac(); + latitude = device.getLatitude(); + longitude = device.getLongitude(); + + jsonMap = historyHourlyService.getDataByMac(smac, Time); + deviceMap.put("longitude", longitude); + deviceMap.put("latitude", latitude); + if (jsonMap != null) { + deviceMap.put("jsonMap", jsonMap); + } else { + deviceMap.put("jsonMap", "������������������������������"); + } + + list.add(deviceMap); + } + Map<String, Object> mapData = new HashMap<String, Object>(); + Map<String, Object> mapDevice; + JSONArray windDir; + for (Map<String, Object> objectMap : list) { + mapDevice = new HashMap<String, Object>(); + Map<String, Object> map = null; + if (!(objectMap.get("jsonMap") instanceof String)) { + mapData = (Map<String, Object>) objectMap.get("jsonMap"); + map = (Map) JSON.parseObject((String) mapData.get("json")); + windDir = (JSONArray) JSONArray.toJSON(map.get("e23")); + JSONArray concentration = (JSONArray) JSONArray.toJSON(map.get(sensor)); + + BigDecimal bigDecimal1 = new BigDecimal(0); + BigDecimal bigDecimal = new BigDecimal(0); + if (concentration != null) { + if (concentration.get(0) instanceof Integer) { + bigDecimal1 = new BigDecimal(concentration.get(0).toString()); + } else { + bigDecimal1 = (BigDecimal) concentration.get(0); + } + if (windDir != null) { + if (windDir.get(0) instanceof Integer) { + bigDecimal = new BigDecimal(windDir.get(0).toString()); + } else { + bigDecimal = (BigDecimal) windDir.get(0); + } + mapDevice.put("e23", bigDecimal.doubleValue()); + mapDevice.put("sensor", bigDecimal1.doubleValue()); + mapDevice.put("longitude", objectMap.get("longitude")); + mapDevice.put("latitude", objectMap.get("latitude")); + } else { + mapDevice.put("noSensor", "���������������"); + mapDevice.put("longitude", objectMap.get("longitude")); + mapDevice.put("latitude", objectMap.get("latitude")); + } + } + } else { + mapDevice.put("info", objectMap.get("jsonMap")); + mapDevice.put("longitude", objectMap.get("longitude")); + mapDevice.put("latitude", objectMap.get("latitude")); + } + windList.add(mapDevice); + } + // if (windDir!=null){} + Double differenceNum = 0.0; + Map<String, Object> indexMap; + List<Map> mapList = new ArrayList<>(); + for (int j = 0; j < windList.size(); j++) { + for (int k = 0; k < windList.size(); k++) { + if (k != j) { + indexMap = new HashMap<String, Object>(); + if (windList.get(k).containsKey("e23") && windList.get(j).containsKey("e23")) { + Double e23Numk = (Double) windList.get(k).get("e23"); + Double e23Numj = (Double) windList.get(j).get("e23"); + Double diff = e23Numk - e23Numj; + BigDecimal b = new BigDecimal(Math.abs(diff)); + + differenceNum = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); + if (differenceNum > 180) { + differenceNum = 360 - differenceNum; + } + indexMap.put("k", k); + indexMap.put("j", j); + indexMap.put("diff", differenceNum); + } else { + indexMap.put("k", k); + indexMap.put("j", j); + indexMap.put("info", "���������������"); + } + +// indexMap.put("longitude",windList.get(k).get("longitude")); +// indexMap.put("latitude",windList.get(k).get("latitude")); + mapList.add(indexMap); + } else { + continue; + } + + } + } + Double min = 0.0; + int indexMin = 0; + if (mapList.size() > 0) { + if (mapList.get(0).containsKey("diff")) { + min = (Double) mapList.get(0).get("diff"); + for (int q = 1; q < mapList.size(); q++) { + if (mapList.get(q).containsKey("diff")) { + if (min > (Double) mapList.get(q).get("diff")) { + min = (Double) mapList.get(q).get("diff"); + indexMin = q; + } + } else { + indexMin = q; + } + } + } + } + + Map twoDeviceMap = mapList.get(indexMin); + List<Map> list1 = new ArrayList<Map>(); //��������������������������������������������������� + list1.add(windList.get((Integer) twoDeviceMap.get("k"))); + list1.add(windList.get((Integer) twoDeviceMap.get("j"))); + + Double wind = 0.0; + Double sum = 0.0; + if (list1.get(0).containsKey("e23")) { + if (Math.abs((Double) list1.get(0).get("e23") - (Double) list1.get(1).get("e23")) > 180) { + sum = (Double) list1.get(0).get("e23") + (Double) list1.get(1).get("e23"); + wind = sum / 2 + 180; + if (wind > 360) { + wind = wind - 360; + } + } else { + for (Map map : list1) { + sum += (Double) map.get("e23"); + } + wind = sum / 2; + } + } else { + wind = 0.0; + } + Map<String, Object> longAndLatiMap; + List<Map> longAndLatiList = new ArrayList<>();//������������������������������������windList������������������������������������������������������������������ + List<Map> preAngleDeviceList = new ArrayList<Map>(); //��������������������������������������� + if (wind != 0.0) { + for (int f = 0; f < windList.size(); f++) { + for (int h = 0; h < windList.size(); h++) { + if (f != h) { + longAndLatiMap = new HashMap<String, Object>(); + longAndLatiMap.put("h", h); + longAndLatiMap.put("f", f); + Double angle = mapUtils.getAngle( + new MyLatLng((Double) windList.get(h).get("longitude"), + (Double) windList.get(h).get("latitude")), + new MyLatLng((Double) windList.get(f).get("longitude"), + (Double) windList.get(f).get("latitude"))); + Double angleDiff = Math.abs(angle - wind); + longAndLatiMap.put("angle", angleDiff); + longAndLatiList.add(longAndLatiMap); + } + } + } + Double minAngle = (Double) longAndLatiList.get(0).get("angle"); + int indexAngle = 0; + for (int j = 0; j < longAndLatiList.size(); j++) { + if (minAngle > (Double) longAndLatiList.get(j).get("angle")) { + minAngle = (Double) longAndLatiList.get(j).get("angle"); + indexAngle = j; + } + } + //windList.get((Integer) longAndLatiList.get(indexAngle).get("f"))������������������������ + preAngleDeviceList.add(windList.get((Integer) longAndLatiList.get(indexAngle).get("h"))); + preAngleDeviceList.add(windList.get((Integer) longAndLatiList.get(indexAngle).get("f"))); + + Double length = mapUtils.getDistance((Double) preAngleDeviceList.get(0).get("longitude"), (Double) preAngleDeviceList.get(0).get("latitude"), + (Double) preAngleDeviceList.get(1).get("longitude"), (Double) preAngleDeviceList.get(1).get("latitude")); + Double subLength = length / 5; + Double subLength1 = length / 6.1; + Double angle = mapUtils.getAngle( + new MyLatLng((Double) preAngleDeviceList.get(0).get("longitude"), + (Double) preAngleDeviceList.get(0).get("latitude")), + new MyLatLng((Double) preAngleDeviceList.get(1).get("longitude"), + (Double) preAngleDeviceList.get(1).get("latitude"))); + + params.put("preAngleDeviceList", preAngleDeviceList); + params.put("angle", angle); + List locationList = new ArrayList(); + String[] firstLocation = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, (Double) preAngleDeviceList.get(0).get("longitude"), + (Double) preAngleDeviceList.get(0).get("latitude"), subLength); + String[] secondLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(firstLocation[0]), + Double.parseDouble(firstLocation[1]), subLength); + String[] thirdLocation = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(secondLoction[0]), + Double.parseDouble(secondLoction[1]), subLength); + String[] fourthLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(thirdLocation[0]), + Double.parseDouble(thirdLocation[1]), subLength); + String[] fivethLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(fourthLoction[0]), + Double.parseDouble(fourthLoction[1]), subLength1); + locationList.add(firstLocation); + locationList.add(secondLoction); + locationList.add(thirdLocation); + locationList.add(fourthLoction); + locationList.add(fivethLoction); + params.put("locationList", locationList); + + String preAngleDeviceString = JSON.toJSON(preAngleDeviceList).toString(); + params.put("preAngleDeviceString", preAngleDeviceString);//��������������������������� + } else { + params.put("preAngleDeviceString", 0); + } + params.put("wind", wind); + //String preAngleDeviceString=preAngleDeviceList. + params.put("deviceList", deviceList); + } else { + if (deviceList.size() != 0) { + params.put("deviceList", deviceList.get(0)); + } else { + params.put("deviceList", ""); + } + params.put("preAngleDeviceString", 1); + params.put("locationList", ""); + } + + params.put("latitudeCompany", latitudeCompany); + params.put("longitudeCompany", longitudeCompany); + } + return params; + } + + @Override + public JSONObject getMacList(int monitPointId) { + JSONObject params = new JSONObject(); + MonitorPoint monitorPoint = monitorPointMapper.getMonitorPointById(monitPointId); + + //������������������������ + List<Device> deviceList = deviceService.getDeviceById2(monitPointId); + + params.put("longitudeCompany", monitorPoint.getLongitude()); + params.put("latitudeCompany", monitorPoint.getLatitude()); + params.put("latitudeCompany", monitorPoint.getLatitude()); + params.put("monitPointId", monitPointId); + params.put("deviceList", deviceList); + return params; + } + + @Override + public List<MonitorPoint> getMonitorPointListByAccountId(int id) { + return monitorPointMapper.getMonitorPointListByAccountId(id); + } + + @Override + public MonitorPoint byIdGetMonitorPoint(int id) { + return monitorPointMapper.byIdGetMonitorPoint(id); + } + + @Override + public String getOrgIdByMac(String mac) { + return monitorPointMapper.getOrgIdByMac(mac); + } + + } -- Gitblit v1.8.0