From 8dc1a393928b0195bf0b5a6d6f8daec6e4a043b1 Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Wed, 18 Nov 2020 14:18:12 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/main/java/com/moral/controller/DeviceController.java | 9 src/main/java/com/moral/controller/SensorController.java | 6 src/main/java/com/moral/mapper/HistoryMapper.java | 51 src/main/java/com/moral/service/SensorService.java | 2 src/main/java/com/moral/mapper/SensorMapper.java | 2 src/main/java/com/moral/service/impl/DeviceServiceImpl.java | 2264 ++++++++++++++++++++++++------------------------ src/main/java/com/moral/service/impl/SensorServiceImpl.java | 5 src/main/java/com/moral/service/impl/HistoryServiceImpl.java | 112 + src/main/resources/mapper/SensorMapper.xml | 9 src/main/resources/mapper/HistoryMapper.xml | 29 src/main/resources/mapper/HistoryHourlyMapper.xml | 7 src/main/java/com/moral/controller/ScreenController.java | 8 src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java | 216 ++-- 13 files changed, 1,413 insertions(+), 1,307 deletions(-) diff --git a/src/main/java/com/moral/controller/DeviceController.java b/src/main/java/com/moral/controller/DeviceController.java index 5febfa5..d02ddd8 100644 --- a/src/main/java/com/moral/controller/DeviceController.java +++ b/src/main/java/com/moral/controller/DeviceController.java @@ -9,6 +9,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import com.moral.mapper.DeviceMapper; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -30,6 +31,8 @@ public class DeviceController { @Resource DeviceService deviceService; + @Resource + DeviceMapper deviceMapper; @GetMapping("count-by-example") public ResultBean<Integer> countByExample(PageBean pageBean){ return new ResultBean<Integer>(deviceService.countByExample(pageBean)); @@ -68,6 +71,12 @@ List<Device> devices = deviceService.getDevicesByProfessionId(parameters); return new ResultBean<List<Device>>(devices); } + + @GetMapping("getDeviceByMonitorId") + public ResultBean<List<Map<String, Object>>> getDeviceByMonitorId() { + List<Map<String, Object>> devices = deviceMapper.getDevicesByMpId(563); + return new ResultBean<List<Map<String, Object>>>(devices); + } @PostMapping("save-or-update") public ResultBean saveOrUpdate(@RequestBody String jsonString){ diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 3fa1e6e..dd33e5f 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -2072,7 +2072,7 @@ } else { mon = "" + month; } - String table = "history_minutely_" + year + mon; + String table = "history_five_minutely_" + year + mon; List list = deviceService.byMonitorIdGetDeviceAndWind(monitorPointId, table); return list; } @@ -2093,7 +2093,7 @@ } else { mon = "" + month; } - String table = "history_minutely_" + year + mon; + String table = "history_five_minutely_" + year + mon; List list = deviceService.byMonitorIdGetDeviceAndWindSpecial(monitorPointId, table); return list; } @@ -2693,7 +2693,7 @@ @ApiImplicitParams(value = { @ApiImplicitParam(name = "monitorPointIds", value = "������monitorid", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")}) - public List<List<Map>> monitorAVGData(HttpServletRequest request) throws Exception { + public ResultBean<List<List<Map>>> monitorAVGData(HttpServletRequest request) throws Exception { Map<String, Object> parameters = getParametersStartingWith(request, null); String monitorPointIds = (String) parameters.get("monitorPointIds"); String time = (String) parameters.get("time"); @@ -2718,6 +2718,6 @@ lists.add(dataAvbByMIdAndTime); } } - return lists; + return new ResultBean<List<List<Map>>>(lists); } } diff --git a/src/main/java/com/moral/controller/SensorController.java b/src/main/java/com/moral/controller/SensorController.java index 3e6a47c..dd004ca 100644 --- a/src/main/java/com/moral/controller/SensorController.java +++ b/src/main/java/com/moral/controller/SensorController.java @@ -56,6 +56,12 @@ return new ResultBean<List<Sensor>>(sensors); } + @GetMapping("allById") + public ResultBean<List<Map<String, Object>>> getAllSensorsById() { + List<Map<String, Object>> sensors = sensorService.getSensorByDId("1230"); + return new ResultBean<List<Map<String, Object>>>(sensors); + } + @GetMapping("getSenosrsByOrgId") public ResultBean<List<Sensor>> getSenosrsByOrgId(Integer organizationId, String regionCode) { Map<String, Object> parameters = new HashMap<>(); diff --git a/src/main/java/com/moral/mapper/HistoryMapper.java b/src/main/java/com/moral/mapper/HistoryMapper.java index 74c339e..eae009e 100644 --- a/src/main/java/com/moral/mapper/HistoryMapper.java +++ b/src/main/java/com/moral/mapper/HistoryMapper.java @@ -6,43 +6,46 @@ import org.apache.ibatis.annotations.Param; -public interface HistoryMapper{ - String selectValueByMacAndTime(@Param("mac")String mac, @Param("time")Date time); - String getValueByMacAndTime(@Param("mac")String mac, @Param("time")String time,@Param("time1")String time1); - List<Map<String, Object>> getAreaAllDataByAccount(Map<String, Object> parameters); +public interface HistoryMapper { + String selectValueByMacAndTime(@Param("mac") String mac, @Param("time") Date time, @Param("timeUnits") String timeUnits); - List<Map<String, Object>> getRegionRankingData(Map<String, Object> parameters); + String getValueByMacAndTime(@Param("mac") String mac, @Param("time") String time, @Param("time1") String time1, @Param("timeUnits") String timeUnits); - List<String> selectNextLevelRegion(Map<String, Object> parameters); + List<Map<String, Object>> getAreaAllDataByAccount(Map<String, Object> parameters); - List<Map<String, Object>> getDischargeByRegion(Map<String, Object> parameters); - - List<Map<String, Object>> getValueByMacAndSize(Map<String, Object> parameters); + List<Map<String, Object>> getRegionRankingData(Map<String, Object> parameters); - Map<String, Object> getActualDataByRegion(Map<String, Object> parameters); - - Map<String, Object> getAVGValueByMacAndTimeslot(@Param("mac")String mac, @Param("starttime")String starttime, @Param("endtime")String endtime); + List<String> selectNextLevelRegion(Map<String, Object> parameters); + + List<Map<String, Object>> getDischargeByRegion(Map<String, Object> parameters); + + List<Map<String, Object>> getValueByMacAndSize(Map<String, Object> parameters); + + Map<String, Object> getActualDataByRegion(Map<String, Object> parameters); + + Map<String, Object> getAVGValueByMacAndTimeslot(@Param("mac") String mac, @Param("starttime") String starttime, @Param("endtime") String endtime, @Param("timeUnits") String timeUnits); List<Map<String, Object>> getSensorDataToday(Map<String, Object> parameters); - - List<Map<String, Object>> getAVGSensorRankByMonitorPointIdList(@Param("sensor")String sensor, @Param("monitorPointIdList") List<Object> monitorPointIdList, @Param("before5Time")String before5Time, @Param("endTime")String endTime); - - Map<String, Object> getMonitorPointAVGValueByMonitorPointIdAndTimeslot(@Param("monitor_point_id")String monitor_point_id, @Param("starttime")String starttime, @Param("endtime")String endtime); + + List<Map<String, Object>> getAVGSensorRankByMonitorPointIdList(@Param("sensor") String sensor, @Param("monitorPointIdList") List<Object> monitorPointIdList, @Param("before5Time") String before5Time, @Param("endTime") String endTime,@Param("timeUnits") String timeUnits); + + Map<String, Object> getMonitorPointAVGValueByMonitorPointIdAndTimeslot(@Param("monitor_point_id") String monitor_point_id, @Param("starttime") String starttime, @Param("endtime") String endtime, @Param("timeUnits") String timeUnits); List<Map<String, Object>> getCarSensorData(Map<String, Object> parameters); - List<Map<String, Object>> getUavSensorData(Map<String, Object> parameters); + List<Map<String, Object>> getUavSensorData(Map<String, Object> parameters); List<Map<String, Object>> listGetSensorData(Map<String, Object> parameters); - //��������������������������� - List<Map<String, Object>> getO3AVG(Map<String, Object> parameters); + //��������������������������� + List<Map<String, Object>> getO3AVG(Map<String, Object> parameters); - int getNum(@Param("timef") String timef, - @Param("timea") String timea); - String getJsonData(@Param("mac") String mac, - @Param("time") String time, - @Param("table") String table); + int getNum(@Param("timef") String timef, + @Param("timea") String timea); + + String getJsonData(@Param("mac") String mac, + @Param("time") String time, + @Param("table") String table); Map<String,Object> getDailyAvgData(@Param("mId")String mId,@Param("time")String time); } \ No newline at end of file diff --git a/src/main/java/com/moral/mapper/SensorMapper.java b/src/main/java/com/moral/mapper/SensorMapper.java index f221367..638ffe6 100644 --- a/src/main/java/com/moral/mapper/SensorMapper.java +++ b/src/main/java/com/moral/mapper/SensorMapper.java @@ -34,4 +34,6 @@ List<Sensor> selectSenosrsByOrgId(Map<String, Object> parameters); List<String> getSensorKeys(); + + List<Map<String, Object>> getSensorByDId(String id); } \ No newline at end of file diff --git a/src/main/java/com/moral/service/SensorService.java b/src/main/java/com/moral/service/SensorService.java index 0a99483..e9ba5b2 100644 --- a/src/main/java/com/moral/service/SensorService.java +++ b/src/main/java/com/moral/service/SensorService.java @@ -29,6 +29,8 @@ List<Map<String, Object>> getSensorByDeviceId(String id); + List<Map<String, Object>> getSensorByDId(String id); + List<Map<String, Object>> getSensorByMonitorPointId(String monitor_point_id); Map<String, String> getSensorsMap(Map<String, Object> parameters) throws Exception; diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java index 03df587..5e5f1f7 100644 --- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java @@ -1,1131 +1,1133 @@ -package com.moral.service.impl; - -import java.util.*; -import java.util.stream.Collectors; - -import javax.annotation.Resource; -import javax.validation.constraints.NotNull; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.TypeReference; -import com.github.pagehelper.Page; -import com.github.pagehelper.PageHelper; -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.common.util.ValidateUtil; -import com.moral.entity.Device; -import com.moral.entity.DeviceAndWind; -import com.moral.entity.DeviceProperty; -import com.moral.entity.MonitorPoint; -import com.moral.mapper.DeviceMapper; -import com.moral.mapper.DevicePropertyMapper; -import com.moral.mapper.DeviceVersionMapper; -import com.moral.mapper.DictionaryDataMapper; -import com.moral.mapper.MonitorPointMapper; -import com.moral.mapper.OrganizationMapper; -import com.moral.service.AccountService; -import com.moral.service.DeviceService; -import com.moral.service.MonitorPointService; -import com.moral.util.LatLngTransformation; -import com.moral.util.TkMybatisUtils; - -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; - -import tk.mybatis.mapper.entity.Example; - -@Service -public class DeviceServiceImpl implements DeviceService { - private static 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 - OrganizationMapper orgMapper; - @Resource - DeviceVersionMapper deviceVersionMapper; - @Resource - RedisUtils redisUtils; - @Resource - OrganizationMapper organizationMapper; - @Resource - DictionaryDataMapper dictionaryDataMapper; - @Resource - private MonitorPointService monitorPointService ; - - @Override - public Map<String, Object> getDeviceStatesByAccount(Map<String, Object> parameters) { - ValidateUtil.notNull(parameters.get("accountId"), "param.is.null"); - Map<String, Object> result = new HashMap<String, Object>(); - accountService.setOrgIdsByAccount(parameters); - List<Map<String, Object>> list = deviceMapper.getDeviceStatesByAccount(parameters); - Long all = 0L, normal = 0L, abnormal = 0L, stop = 0L; - for (Map<String, Object> map : list) { - Long count = (Long) map.get("count"); - all += count; - switch (Integer.valueOf((String) map.get("state"))) { - case 0: - normal = count; - break; - case 4: - stop = count; - break; - default: - abnormal += count; - } - } - result.put("all", all); - result.put("normal", normal); - result.put("abnormal", abnormal); - result.put("stop", stop); - return result; - } - - @Override - @Transactional - public void saveOrUpdateDevice(Device device) { - ValidateUtil.notNull(device, "param.is.null"); - ValidateUtil.notEmpty(device.getMac(), "param.is.null"); - Device queryDevice = new Device(); - queryDevice.setMac(device.getMac()); - queryDevice = deviceMapper.selectOne(queryDevice); - Date operateDate = new Date(); - device.setInstallTime(operateDate); - if (ObjectUtils.isEmpty(queryDevice)) { - device.setCreateTime(operateDate); - device.setState("4"); - device.setIsDelete(Constants.IS_DELETE_FALSE); - deviceMapper.insertSelective(device); - } else { - device.setId(queryDevice.getId()); - deviceMapper.updateByPrimaryKeySelective(device); - } - //������redis������������ - refreshDeviceInRedis(device.getMac()); - } - - @Override - public List<Device> getInstallDevicesByOperateUser(Integer uid, Integer pageIndex, Integer pageSize) { - ValidateUtil.notNull(uid, "param.is.null"); - Device device = new Device(); - device.setOperateUserId(uid); - 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); - } - return device; - } else { - return deviceMapper.selectWithOrgIdsByMac(mac); - } - - } - - /** - * ��������������������� - * - * @param mac - * @return - */ - @Override - public Device getDeviceByMac(String mac) { - - 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());// ������������ -// simpleDevice.setDeviceVersion(device.getDeviceVersion()); -// redisUtils.set(key,simpleDevice); -// } - private Device getDeviceFromRedis(String mac) { - String key = getDeviceKey(mac); - return redisUtils.get(key, Device.class); - } - - /** - * @param params map��� ������ ������id���4������������ - * @return ������������������������ - */ - @Override - public List<Device> query(Map<String, Object> params) { - List<Integer> dv = deviceMapper.getHasWindDirAndWindSpeedDeviceVersion(); - Object orgIdObj = params.get("orgId"); - String regionCode = params.get("regionCode").toString(); - List<Device> deviceList = null; - if (orgIdObj != null) { - Integer orgId = Integer.parseInt(orgIdObj.toString()); - List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); - //��������������������������������������������� - if (regionCode.startsWith("1309")&&orgIdObj.toString().equals("5")) { - orgIds = new ArrayList<>(); - Collections.addAll(orgIds, 60, 65, 159, 165, 166); - deviceList = deviceMapper.selectByMap(params); - Iterator<Device> iter = deviceList.iterator(); - while (iter.hasNext()) { - Device device = iter.next(); - Integer mpId = device.getMonitorPointId(); - Integer oid = monitorPointService.byIdGetMonitorPoint(mpId).getOrganizationId(); - if (!orgIds.contains(oid)) { - iter.remove(); - } else { - if (orgId == 60) { - if (mpId != 56) { - iter.remove(); - } - } else if (orgId == 65) { - if (mpId != 83 && mpId != 84) { - iter.remove(); - } - } - } - } - }else { - params.put("orgIds", orgIds); - deviceList = deviceMapper.selectByMap(params); - } - // loadDeviceState(deviceList); - } - Example deviceExample = new Example(Device.class);//��������� - Example.Criteria deviceCriteria = deviceExample.createCriteria(); - deviceCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE); - List<Device> devicesInfo = deviceMapper.selectByExample(deviceExample); - Example monitorExample = new Example(MonitorPoint.class);//��������� - Example.Criteria monitorCriteria = monitorExample.createCriteria(); - monitorCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE); - List<MonitorPoint> monitorsInfo = monitorPointMapper.selectByExample(monitorExample); - for (Device d : deviceList) { - if (dv.contains(d.getDeviceVersionId())) { - d.setHasWindInfo(true); - } else { - d.setHasWindInfo(false); - } - for (Device temp : devicesInfo) { - if (d.getId().equals(temp.getId())) { - d.setState(temp.getState()); - } - } - for (MonitorPoint mp : monitorsInfo) { - if (d.getMonitorPointId().equals(mp.getId())) { - d.setMonitorPoint(mp); - } - } - } - return deviceList; - } - - /** - * ������������id��������������� ������������������ - * - * @param orgId - * @param deviceName - * @param pageSize - * @param pageNo - * @return ��������������������� - */ - @Override - public PageResult query(Integer orgId, String deviceName, Integer pageSize, Integer pageNo) { - List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); - if (!ObjectUtils.isEmpty(pageSize) && !ObjectUtils.isEmpty(pageNo)) { - PageHelper.startPage(pageNo, pageSize); - } - String state = null; - switch (deviceName) { - case "������": - state = "0"; - deviceName = null; - break; - case "������": - state = "1"; - deviceName = null; - break; - case "������": - state = "2"; - deviceName = null; - break; - case "������": - state = "3"; - deviceName = null; - break; - case "������": - state = "4"; - deviceName = null; - break; - } - List<Device> list = deviceMapper.selectByOrgIdAndDevName(orgId, orgIds, state, 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) { - List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); - if (!ObjectUtils.isEmpty(pageSize) && !ObjectUtils.isEmpty(pageNo)) { - PageHelper.startPage(pageNo, pageSize); - } - List<Device> list = deviceMapper.selectByOrgIdAndMpId(orgId, orgIds, 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 ���������������,���������������������������������������������task������ - * - * @param mac - */ - private void refreshDeviceInRedis(String mac) { - if (!StringUtils.isBlank(mac)) { - String key = getDeviceKey(mac); - redisUtils.remove(key); - } else { - log.warn("param mac is null in method [refreshDeviceInRedis]"); - } - } - - @Override - public int countByExample(PageBean pageBean) { - Example example = ExampleUtil.generateExample(ENTITY_CLASS, pageBean); - TkMybatisUtils.addDeletesToExample(example); - return deviceMapper.selectCountByExample(example); - } - - @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()); - } - List<Device> deviceList = deviceMapper.selectWithRelationData(example); - return new PageBean(deviceList); - } - - @Override - public void deleteByIds(Integer[] ids) { - Device device = new Device(); - device.setIsDelete(Constants.IS_DELETE_TRUE); - if (ids != null && ids.length > 0) { - Example example = new Example(ENTITY_CLASS); - example.or().andIn("id", Arrays.asList(ids)); - if (ids.length == 1) { - device.setId(ids[0]); - deviceMapper.updateByPrimaryKeySelective(device); - } else { - deviceMapper.updateByExampleSelective(device, example); - } - List<Device> deviceList = deviceMapper.selectByExample(example); - List<String> adjustAndDeviceKeys = deviceList.stream().collect( - ArrayList<String>::new, - (list, dev) -> { - if (!StringUtils.isBlank(dev.getMac())) { - list.add("device_" + dev.getMac()); - list.add("adjust_" + dev.getMac()); - } - }, - (oList, nList) -> { - oList.addAll(nList); - } - ); - redisUtils.remove(adjustAndDeviceKeys.toArray(new String[adjustAndDeviceKeys.size()])); - } - } - - @Override - @Transactional - public void addOrModify(Device device) { - try { - //mac ��������� - if (!StringUtils.isBlank(device.getMac())) { - device.setMac(device.getMac().toLowerCase()); - } - if (device.getId() != null) { - deviceMapper.updateByPrimaryKeySelective(device); - } else { - Device deviceQuery = new Device(); - deviceQuery.setMac(device.getMac()); - Device deviceResult = deviceMapper.selectOne(deviceQuery); - if (deviceResult != null) { - device.setId(deviceResult.getId()); - deviceMapper.updateByPrimaryKeySelective(device); - } else { - device.setState(Constants.DEVICE_STATE_OFFLINE); - device.setIsDelete(Constants.IS_DELETE_FALSE); - deviceMapper.insertSelective(device); - } - } - //������redis��������������� - refreshDeviceInRedis(device.getMac()); - } 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); - List<Device> devices = deviceMapper.select(device); - for (Device device2 : devices) { - DeviceProperty deviceProperty = devicePropertyMapper.selectByPrimaryKey(device2.getId()); - device2.setDeviceProperty(deviceProperty); - } - return devices; - } - - /** - * ������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); - } - - @Override - public List<Device> getDevicesByOrganizationId(Map<String, Object> parameters) { - ValidateUtil.notNull(parameters.get("organizationId"), "param.is.null"); - return deviceMapper.getDevicesByOrganizationId(parameters); - } - - @Override - public Map<String, Long> queryDeviceStateSummary(@NotNull Integer orgId) { - Map<String, Object> params = new HashMap<>(); - if (!dictionaryDataMapper.isSupperOrgId(orgId)) { - List<Integer> orgIds = organizationMapper.selectLowerOrgIds(orgId); - params.put("orgIds", orgIds); - } - List<Map<String, Object>> list = deviceMapper.getDeviceStatesByAccount(params); - Long all = 0L, normal = 0L, abnormal = 0L, stop = 0L; - for (Map<String, Object> map : list) { - Long count = (Long) map.get("count"); - all += count; - switch (Integer.valueOf((String) map.get("state"))) { - case 0: - normal = count; - break; - case 4: - stop = count; - break; - default: - abnormal += count; - } - } - Map<String, Long> result = new HashMap<>(); - result.put("all", all); - result.put("normal", normal); - result.put("abnormal", abnormal); - result.put("stop", stop); - return result; - } - - @Resource - private DevicePropertyMapper devicePropertyMapper; - - @Override - @Transactional - public void saveOrUpdate(Device device, DeviceProperty deviceProperty) { - device.setMac(device.getMac().toLowerCase()); - if (ObjectUtils.isEmpty(device.getId())) { - device.setState(Constants.DEVICE_STATE_OFFLINE); - device.setIsDelete(Constants.IS_DELETE_FALSE); - deviceMapper.insertSelective(device); - deviceProperty.setId(device.getId()); - } else { - deviceMapper.updateByPrimaryKeySelective(device); - devicePropertyMapper.deleteByPrimaryKey(deviceProperty); - } - devicePropertyMapper.insertSelective(deviceProperty); - refreshDeviceInRedis(device.getMac()); - - } - - @Override - public PageBean getDeviceList(PageBean pageBean) { - Example example = ExampleUtil.generateExample(ENTITY_CLASS, pageBean); - if (pageBean.getPageSize() > 0) { - PageHelper.startPage(pageBean.getPageIndex(), pageBean.getPageSize()); - } - List<Device> deviceList = deviceMapper.getDeviceList(example); - return new PageBean(deviceList); - } - - @Override - public void offLinToMaintenance(Map<String, Object> parameters) { - ValidateUtil.notNull(parameters.get("id"), "param.is.null"); - ValidateUtil.notNull(parameters.get("old_state"), "param.is.null"); - ValidateUtil.notNull(parameters.get("new_state"), "param.is.null"); - int count = 0; - if (Constants.DEVICE_STATE_OFFLINE.equals(parameters.get("old_state")) && Constants.DEVICE_STATE_MAINTENANCE.equals(parameters.get("new_state"))) { - Device device = new Device(); - Example example = new Example(ENTITY_CLASS); - example.and().andEqualTo("id", new Integer(parameters.get("id").toString())).andEqualTo("state", Constants.DEVICE_STATE_OFFLINE); - device.setState(Constants.DEVICE_STATE_MAINTENANCE); - count = deviceMapper.updateByExampleSelective(device, example); - } - if (count == 0) { - throw new BusinessException("������������������"); - } - } - - @Override - public void saveOrUpdate4Mobile(Device device, DeviceProperty deviceProperty) { - device.setMac(device.getMac().toLowerCase()); - Device selectDevice = new Device(); - selectDevice.setMac(device.getMac()); - selectDevice = deviceMapper.selectOne(selectDevice); - if (ObjectUtils.isEmpty(selectDevice)) { - device.setState(Constants.DEVICE_STATE_OFFLINE); - device.setIsDelete(Constants.IS_DELETE_FALSE); - deviceMapper.insertSelective(device); - deviceProperty.setId(device.getId()); - devicePropertyMapper.insertSelective(deviceProperty); - } else { - device.setId(selectDevice.getId()); - deviceMapper.updateByPrimaryKeySelective(device); - deviceProperty.setId(selectDevice.getId()); - devicePropertyMapper.selectByPrimaryKey(selectDevice.getId()); - if (ObjectUtils.isEmpty(devicePropertyMapper.selectByPrimaryKey(deviceProperty.getId()))) { - devicePropertyMapper.insertSelective(deviceProperty); - } else { - devicePropertyMapper.updateByPrimaryKeySelective(deviceProperty); - } - - } - refreshDeviceInRedis(device.getMac()); - - - } - - @Override - public String getLimitDataByDevice(Map<String, Object> parameters) { - // TODO Auto-generated method stub - return deviceMapper.getLimitDataByDevice(parameters); - } - - //������������������������������mac��������������������������������������������� - @Override - public Device getDeviceByLongitudeAsc(String mac) { - Example example = new Example(Device.class); - example.setOrderByClause("longitude ASC"); - List<Device> deviceList = deviceMapper.selectByExample(example); - for (int i = 0; i < deviceList.size(); i++) { - if (mac.equals(deviceList.get(i).getMac())) { - Device deviceSecond = deviceList.get(i + 1); - return deviceSecond; - } - } - return null; - } - - @Override - public List<String> getMacsByOrganizationId(List<Object> organizationIdList) { - return deviceMapper.getMacsByOrganizationId(organizationIdList); - } - - @Override - public List<Device> getDeviceById1(int id) { - return deviceMapper.getDeviceById1(id); - } - - @Override - public List<Device> getDeviceById2(int id) { - return deviceMapper.getDeviceById2(id); - } - - @Override - public List<Device> getDeviceById3(int id) { - return deviceMapper.getDeviceById3(id); - } - - @Override - public List<Device> queryDevice(Map<String, Object> params) { - List<Integer> dv = deviceMapper.getHasWindDirAndWindSpeedDeviceVersion(); - Object orgIdObj = params.get("orgId"); - List<Device> deviceList = null; - if (orgIdObj != null) { - Integer orgId = Integer.parseInt(orgIdObj.toString()); - List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); - params.put("orgIds", orgIds); - deviceList = deviceMapper.selectDevicesAll(params); - } - List<Device> deviceListHasWind = new ArrayList<>(); - for (Device d : deviceList) { - if (dv.contains(d.getDeviceVersionId())) { - deviceListHasWind.add(d); - } - } - return deviceListHasWind; - } - - @Override - public Map<String, Object> getAllFieldByMac(Map<String, Object> parameters) { - Map<String, Object> deviceMap = deviceMapper.selectAllFieldByMac(parameters); - return deviceMap; - } - - @Override - public List<DeviceAndWind> getAllDevice() { - return deviceMapper.getAllDevice(); - } - - @Override - public List<String> getAllMac() { - return deviceMapper.getAllMac(); - } - - @Override - public Device byMacGetDevice(String mac) { - return deviceMapper.byMacGetDevice(mac); - } - - @Override - public List byMonitorIdGetDeviceAndWind(String id, String tab) { - List<DeviceAndWind> deviceAndWinds = deviceMapper.byMonitorIdGetDeviceAndWind(Integer.parseInt(id), tab); - List loList = new ArrayList(); - List laList = new ArrayList(); - Double U = 0.0; - Double V = 0.0; - List list = new ArrayList(); - for (DeviceAndWind andWind : deviceAndWinds) { - Double lo = andWind.getLongitude(); - Double la = andWind.getLatitude(); - List tranlist = LatLngTransformation.Convert_BD09_To_GCJ02(la, lo); - Double transLo = (Double) tranlist.get(0); - Double transLa = (Double) tranlist.get(1); - loList.add(transLo); - laList.add(transLa); - } - Double loma = 0.0; - Double lomi = 0.0; - Double lama = 0.0; - Double lami = 0.0; - if (loList.size() > 0) { - loma = (Double) Collections.max(loList); - lomi = (Double) Collections.min(loList); - } - if (laList.size() > 0) { - lama = (Double) Collections.max(laList); - lami = (Double) Collections.min(laList); - } - Map laLaMap = new HashMap(); - laLaMap.put("maxLo", loma); - laLaMap.put("minLo", lomi); - laLaMap.put("maxLa", lama); - laLaMap.put("minLa", lami); - - Double lo1 = lomi - 250 * 0.00001141; - Double lo2 = loma + 250 * 0.00001141; - Double la2 = lami - 250 * 0.00000899; - Double la1 = lama + 250 * 0.00000899; - - Double dx = 0.00001141 * 20; - Double dy = 0.00000899 * 20; - int nx = (int) Math.floor((lo2 - lo1) / dx); - int ny = (int) Math.floor((la1 - la2) / dy); - String header1 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 2 + - ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + - ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + - ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + - ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; - - String header2 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 3 + - ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + - ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + - ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + - ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; - - List<Double> uList = new ArrayList<Double>(); - List<Double> vList = new ArrayList<Double>(); - int x = 0; - int y = 0; - List<Map> mapList = new ArrayList<Map>(); - - for (int j = 0; j < deviceAndWinds.size(); j++) { - Map<String, Double> map = new HashMap<String, Double>(); - Double windDir = deviceAndWinds.get(j).getWindDir(); - - Double windSpeed = deviceAndWinds.get(j).getWindSpeed(); - if (windDir == null) { - windDir = 0.0; - windSpeed = 0.0; - } - Double tvoc = deviceAndWinds.get(j).getTVoc(); - - List tranlist = LatLngTransformation.Convert_BD09_To_GCJ02(deviceAndWinds.get(j).getLatitude(), deviceAndWinds.get(j).getLongitude()); - Double transLo = (Double) tranlist.get(0); - Double transLa = (Double) tranlist.get(1); - if (tvoc == null) { - tvoc = 0.0; - } - Double dir = (270.0 - windDir * Math.PI / 180.0); - - U = windSpeed * Math.cos(dir); - V = windSpeed * Math.sin(dir); - map.put("lo", transLo); - map.put("la", transLa); - map.put("U", U); - map.put("V", V); - mapList.add(map); - } - for (int i = 0; i < mapList.size(); i++) { - Double lo = (Double) mapList.get(i).get("lo"); - Double la = (Double) mapList.get(i).get("la"); - x = (int) Math.floor((lo - lo1) / dx); - y = Math.abs((int) Math.floor((la - la1) / dy)); - //y=Math.floor(Math.abs(la-la1)/dy); - U = (Double) mapList.get(i).get("U"); - V = (Double) mapList.get(i).get("V"); - if (i == 0) { - for (int j = 0; j < nx * ny; j++) { - uList.add(0.0); - vList.add(0.0); - } - } - for (int j = 0; j < nx * ny; j++) { - if (i == 0) { - if ((y >= 2 && j == (y) * nx + x)) { - int k; - for (k = j - 2 * nx; k <= j + 2 * nx; k = k + nx) { - uList.set(k, U); - uList.set(k - 1, U); - uList.set(k - 2, U); - uList.set(k + 1, U); - uList.set(k + 2, U); - vList.set(k, V); - vList.set(k - 1, V); - vList.set(k - 2, V); - vList.set(k + 1, V); - vList.set(k + 2, V); - } - } - } else { - if (y >= 1 && j == y * nx + x) { - int k; - for (k = j - 2 * nx; k <= j + 2 * nx; ) { - uList.set(k - 1, U); - uList.set(k - 2, U); - uList.set(k + 1, U); - uList.set(k + 2, U); - vList.set(k - 1, V); - vList.set(k - 2, V); - vList.set(k + 1, V); - vList.set(k + 2, V); - k = k + nx; - } - uList.set(j, U); - vList.set(j, V); - } - } - } - } - String uData = "\"" + "data" + "\"" + ": " + uList; - String vData = "\"" + "data" + "\"" + ": " + vList; - String s1 = "[" + "{" + header1 + ", " + uData + "}" + ", " + "{" + header2 + ", " + vData + "}" + "]"; - JSONArray jsonArray = JSONArray.parseArray(s1); - MonitorPoint monitorPoint = monitorPointMapper.byIdGetMonitorPoint(Integer.parseInt(id)); - Double monitorLo = monitorPoint.getLongitude(); - Double monitorLa = monitorPoint.getLatitude(); - List transList = LatLngTransformation.Convert_BD09_To_GCJ02(monitorLa, monitorLo); - Double transLo = (Double) transList.get(0); - Double transLa = (Double) transList.get(1); - list.add(jsonArray); - list.add(transLo); - list.add(transLa); - list.add(laLaMap); - return list; - } - - @Override - public List byMonitorIdGetDeviceAndWindSpecial(String id, String tab) { - MonitorPoint monitorPoint = monitorPointMapper.byIdGetMonitorPoint(Integer.parseInt(id)); - Integer areaCode = monitorPoint.getAreaCode(); - String townCode = monitorPoint.getTownCode() + ""; - int monitorPointId = monitorPoint.getId(); - Map<String, Object> parm = new HashMap<>(); - List<DeviceAndWind> deviceAndWinds = new ArrayList<>(); - Double loma = 0.0; - Double lomi = 0.0; - Double lama = 0.0; - Double lami = 0.0; - - int length = 1; - int perdlen = 1; - if (areaCode == 320581) { - parm.put("areaCode", areaCode); - List<Device> deviceList = deviceMapper.getDeviceByCode(parm); - for (Device d : deviceList) { - String mac = d.getMac(); - DeviceAndWind deviceAndWind = deviceMapper.byMacGetDeviceAndWind(mac, tab); - if (deviceAndWind != null) { - deviceAndWinds.add(deviceAndWind); - } - } - length = 8000; - perdlen = 2200; - } else if ((areaCode == 320583) && (townCode.equals("320583108000"))) { - parm.put("townCode", townCode); - List<Device> deviceList = deviceMapper.getDeviceByCode(parm); - for (Device d : deviceList) { - String mac = d.getMac(); - DeviceAndWind deviceAndWind = deviceMapper.byMacGetDeviceAndWind(mac, tab); - if (deviceAndWind != null) { - deviceAndWinds.add(deviceAndWind); - } - } - length = 2000; - perdlen = 280; - } else if (monitorPointId == 35) { - DeviceAndWind deviceAndWind = deviceMapper.getDeviceAndWindByMac("898607b0101730392253", tab); - DeviceAndWind deviceAndWind1 = deviceMapper.getDeviceAndWindByMac("p5dnd7a0392083", tab); - deviceAndWinds.add(deviceAndWind); - deviceAndWinds.add(deviceAndWind1); - length = 2000; - perdlen = 50; - - } else { - deviceAndWinds = deviceMapper.byMonitorIdGetDeviceAndWind(Integer.parseInt(id), tab); - length = 2000; - perdlen = 80; - } - List loList = new ArrayList(); - List laList = new ArrayList(); - Double U = 0.0; - Double V = 0.0; - List list = new ArrayList(); - for (DeviceAndWind andWind : deviceAndWinds) { - Double lo = andWind.getLongitude(); - Double la = andWind.getLatitude(); - List tranlist = LatLngTransformation.Convert_BD09_To_GCJ02(la, lo); - Double transLo = (Double) tranlist.get(0); - Double transLa = (Double) tranlist.get(1); - loList.add(transLo); - laList.add(transLa); - } - - if (loList.size() > 0) { - loma = (Double) Collections.max(loList); - lomi = (Double) Collections.min(loList); - } - if (laList.size() > 0) { - lama = (Double) Collections.max(laList); - lami = (Double) Collections.min(laList); - } - Map laLaMap = new HashMap(); - laLaMap.put("maxLo", loma); - laLaMap.put("minLo", lomi); - laLaMap.put("maxLa", lama); - laLaMap.put("minLa", lami); - - Double lo1 = lomi - length * 0.00001141; - Double lo2 = loma + length * 0.00001141; - Double la2 = lami - length * 0.00000899; - Double la1 = lama + length * 0.00000899; - - Double dx = 0.00001141 * perdlen; - Double dy = 0.00000899 * perdlen; - int nx = (int) Math.floor((lo2 - lo1) / dx); - int ny = (int) Math.floor((la1 - la2) / dy); - String header1 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 2 + - ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + - ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + - ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + - ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; - - String header2 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 3 + - ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + - ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + - ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + - ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; - - List<Double> uList = new ArrayList<Double>(); - List<Double> vList = new ArrayList<Double>(); - int x = 0; - int y = 0; - List<Map> mapList = new ArrayList<Map>(); - - for (int j = 0; j < deviceAndWinds.size(); j++) { - Map<String, Double> map = new HashMap<String, Double>(); - Double windDir = deviceAndWinds.get(j).getWindDir(); - Double windSpeed = deviceAndWinds.get(j).getWindSpeed(); - if (windDir == null) { - windDir = 0.0; - windSpeed = 0.0; - } - Double tvoc = deviceAndWinds.get(j).getTVoc(); - - List tranlist = LatLngTransformation.Convert_BD09_To_GCJ02(deviceAndWinds.get(j).getLatitude(), deviceAndWinds.get(j).getLongitude()); - Double transLo = (Double) tranlist.get(0); - Double transLa = (Double) tranlist.get(1); - if (tvoc == null) { - tvoc = 0.0; - } - Double dir = (270.0 - windDir * Math.PI / 180.0); - - U = windSpeed * Math.cos(dir); - V = windSpeed * Math.sin(dir); - map.put("lo", transLo); - map.put("la", transLa); - map.put("U", U); - map.put("V", V); - mapList.add(map); - } - for (int i = 0; i < mapList.size(); i++) { - Double lo = (Double) mapList.get(i).get("lo"); - Double la = (Double) mapList.get(i).get("la"); - x = (int) Math.floor((lo - lo1) / dx); - y = Math.abs((int) Math.floor((la - la1) / dy)); - //y=Math.floor(Math.abs(la-la1)/dy); - U = (Double) mapList.get(i).get("U"); - V = (Double) mapList.get(i).get("V"); - if (i == 0) { - for (int j = 0; j < nx * ny; j++) { - uList.add(0.0); - vList.add(0.0); - } - } - for (int j = 0; j < nx * ny; j++) { - if (i == 0) { - if ((y >= 2 && j == (y) * nx + x)) { - int k; - for (k = j - 2 * nx; k <= j + 2 * nx; k = k + nx) { - uList.set(k, U); - uList.set(k - 1, U); - uList.set(k - 2, U); - uList.set(k + 1, U); - uList.set(k + 2, U); - vList.set(k, V); - vList.set(k - 1, V); - vList.set(k - 2, V); - vList.set(k + 1, V); - vList.set(k + 2, V); - } - } - } else { - if (y >= 1 && j == y * nx + x) { - int k; - for (k = j - 2 * nx; k <= j + 2 * nx; ) { - uList.set(k - 1, U); - uList.set(k - 2, U); - uList.set(k + 1, U); - uList.set(k + 2, U); - vList.set(k - 1, V); - vList.set(k - 2, V); - vList.set(k + 1, V); - vList.set(k + 2, V); - k = k + nx; - } - uList.set(j, U); - vList.set(j, V); - } - } - } - } - String uData = "\"" + "data" + "\"" + ": " + uList; - String vData = "\"" + "data" + "\"" + ": " + vList; - String s1 = "[" + "{" + header1 + ", " + uData + "}" + ", " + "{" + header2 + ", " + vData + "}" + "]"; - JSONArray jsonArray = JSONArray.parseArray(s1); - - Double monitorLo = monitorPoint.getLongitude(); - Double monitorLa = monitorPoint.getLatitude(); - List transList = LatLngTransformation.Convert_BD09_To_GCJ02(monitorLa, monitorLo); - Double transLo = (Double) transList.get(0); - Double transLa = (Double) transList.get(1); - - list.add(jsonArray); - list.add(transLo); - list.add(transLa); - list.add(laLaMap); - return list; - } - - @Override - public List<Device> getDeviceByCodeAndId(String code, String id) { - return deviceMapper.getDeviceByCodeAndId(code, id); - } - - @Override - public String byMacGetOrgId(String mac) { - return deviceMapper.byMacGetOrgId(mac); - } - - @Override - public List<Device> getDevice(String macOrName) { - return deviceMapper.getDevice(macOrName); - } - - @Override - public List<Device> getDeviceByCode() { - return deviceMapper.getDeviceByCityCode(); - } - -} +package com.moral.service.impl; + +import java.util.*; +import java.util.stream.Collectors; + +import javax.annotation.Resource; +import javax.validation.constraints.NotNull; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.TypeReference; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +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.common.util.ValidateUtil; +import com.moral.entity.Device; +import com.moral.entity.DeviceAndWind; +import com.moral.entity.DeviceProperty; +import com.moral.entity.MonitorPoint; +import com.moral.mapper.DeviceMapper; +import com.moral.mapper.DevicePropertyMapper; +import com.moral.mapper.DeviceVersionMapper; +import com.moral.mapper.DictionaryDataMapper; +import com.moral.mapper.MonitorPointMapper; +import com.moral.mapper.OrganizationMapper; +import com.moral.service.AccountService; +import com.moral.service.DeviceService; +import com.moral.service.MonitorPointService; +import com.moral.util.LatLngTransformation; +import com.moral.util.TkMybatisUtils; + +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; + +import tk.mybatis.mapper.entity.Example; + +@Service +public class DeviceServiceImpl implements DeviceService { + private static 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 + OrganizationMapper orgMapper; + @Resource + DeviceVersionMapper deviceVersionMapper; + @Resource + RedisUtils redisUtils; + @Resource + OrganizationMapper organizationMapper; + @Resource + DictionaryDataMapper dictionaryDataMapper; + @Resource + private MonitorPointService monitorPointService ; + + @Override + public Map<String, Object> getDeviceStatesByAccount(Map<String, Object> parameters) { + ValidateUtil.notNull(parameters.get("accountId"), "param.is.null"); + Map<String, Object> result = new HashMap<String, Object>(); + accountService.setOrgIdsByAccount(parameters); + List<Map<String, Object>> list = deviceMapper.getDeviceStatesByAccount(parameters); + Long all = 0L, normal = 0L, abnormal = 0L, stop = 0L; + for (Map<String, Object> map : list) { + Long count = (Long) map.get("count"); + all += count; + switch (Integer.valueOf((String) map.get("state"))) { + case 0: + normal = count; + break; + case 4: + stop = count; + break; + default: + abnormal += count; + } + } + result.put("all", all); + result.put("normal", normal); + result.put("abnormal", abnormal); + result.put("stop", stop); + return result; + } + + @Override + @Transactional + public void saveOrUpdateDevice(Device device) { + ValidateUtil.notNull(device, "param.is.null"); + ValidateUtil.notEmpty(device.getMac(), "param.is.null"); + Device queryDevice = new Device(); + queryDevice.setMac(device.getMac()); + queryDevice = deviceMapper.selectOne(queryDevice); + Date operateDate = new Date(); + device.setInstallTime(operateDate); + if (ObjectUtils.isEmpty(queryDevice)) { + device.setCreateTime(operateDate); + device.setState("4"); + device.setIsDelete(Constants.IS_DELETE_FALSE); + deviceMapper.insertSelective(device); + } else { + device.setId(queryDevice.getId()); + deviceMapper.updateByPrimaryKeySelective(device); + } + //������redis������������ + refreshDeviceInRedis(device.getMac()); + } + + @Override + public List<Device> getInstallDevicesByOperateUser(Integer uid, Integer pageIndex, Integer pageSize) { + ValidateUtil.notNull(uid, "param.is.null"); + Device device = new Device(); + device.setOperateUserId(uid); + 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); + } + return device; + } else { + return deviceMapper.selectWithOrgIdsByMac(mac); + } + + } + + /** + * ��������������������� + * + * @param mac + * @return + */ + @Override + public Device getDeviceByMac(String mac) { + + 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());// ������������ +// simpleDevice.setDeviceVersion(device.getDeviceVersion()); +// redisUtils.set(key,simpleDevice); +// } + private Device getDeviceFromRedis(String mac) { + String key = getDeviceKey(mac); + return redisUtils.get(key, Device.class); + } + + /** + * @param params map��� ������ ������id���4������������ + * @return ������������������������ + */ + @Override + public List<Device> query(Map<String, Object> params) { + List<Integer> dv = deviceMapper.getHasWindDirAndWindSpeedDeviceVersion(); + Object orgIdObj = params.get("orgId"); + String regionCode = params.get("regionCode").toString(); + List<Device> deviceList = null; + if (orgIdObj != null) { + Integer orgId = Integer.parseInt(orgIdObj.toString()); + List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); + //��������������������������������������������� + if (regionCode.startsWith("1309")&&orgIdObj.toString().equals("5")) { + orgIds = new ArrayList<>(); + Collections.addAll(orgIds, 60, 65, 159, 165, 166); + deviceList = deviceMapper.selectByMap(params); + Iterator<Device> iter = deviceList.iterator(); + while (iter.hasNext()) { + Device device = iter.next(); + Integer mpId = device.getMonitorPointId(); + Integer oid = monitorPointService.byIdGetMonitorPoint(mpId).getOrganizationId(); + if (!orgIds.contains(oid)) { + iter.remove(); + } else { + if (orgId == 60) { + if (mpId != 56) { + iter.remove(); + } + } else if (orgId == 65) { + if (mpId != 83 && mpId != 84) { + iter.remove(); + } + } + } + } + }else { + params.put("orgIds", orgIds); + deviceList = deviceMapper.selectByMap(params); + } + // loadDeviceState(deviceList); + } + Example deviceExample = new Example(Device.class);//��������� + Example.Criteria deviceCriteria = deviceExample.createCriteria(); + deviceCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE); + List<Device> devicesInfo = deviceMapper.selectByExample(deviceExample); + Example monitorExample = new Example(MonitorPoint.class);//��������� + Example.Criteria monitorCriteria = monitorExample.createCriteria(); + monitorCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE); + List<MonitorPoint> monitorsInfo = monitorPointMapper.selectByExample(monitorExample); + for (Device d : deviceList) { + if (dv.contains(d.getDeviceVersionId())) { + d.setHasWindInfo(true); + } else { + d.setHasWindInfo(false); + } + for (Device temp : devicesInfo) { + if (d.getId().equals(temp.getId())) { + d.setState(temp.getState()); + } + } + for (MonitorPoint mp : monitorsInfo) { + if (d.getMonitorPointId().equals(mp.getId())) { + d.setMonitorPoint(mp); + } + } + } + return deviceList; + } + + /** + * ������������id��������������� ������������������ + * + * @param orgId + * @param deviceName + * @param pageSize + * @param pageNo + * @return ��������������������� + */ + @Override + public PageResult query(Integer orgId, String deviceName, Integer pageSize, Integer pageNo) { + List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); + if (!ObjectUtils.isEmpty(pageSize) && !ObjectUtils.isEmpty(pageNo)) { + PageHelper.startPage(pageNo, pageSize); + } + String state = null; + switch (deviceName) { + case "������": + state = "0"; + deviceName = null; + break; + case "������": + state = "1"; + deviceName = null; + break; + case "������": + state = "2"; + deviceName = null; + break; + case "������": + state = "3"; + deviceName = null; + break; + case "������": + state = "4"; + deviceName = null; + break; + } + List<Device> list = deviceMapper.selectByOrgIdAndDevName(orgId, orgIds, state, 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) { + List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); + if (!ObjectUtils.isEmpty(pageSize) && !ObjectUtils.isEmpty(pageNo)) { + PageHelper.startPage(pageNo, pageSize); + } + List<Device> list = deviceMapper.selectByOrgIdAndMpId(orgId, orgIds, 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 ���������������,���������������������������������������������task������ + * + * @param mac + */ + private void refreshDeviceInRedis(String mac) { + if (!StringUtils.isBlank(mac)) { + String key = getDeviceKey(mac); + redisUtils.remove(key); + } else { + log.warn("param mac is null in method [refreshDeviceInRedis]"); + } + } + + @Override + public int countByExample(PageBean pageBean) { + Example example = ExampleUtil.generateExample(ENTITY_CLASS, pageBean); + TkMybatisUtils.addDeletesToExample(example); + return deviceMapper.selectCountByExample(example); + } + + @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()); + } + List<Device> deviceList = deviceMapper.selectWithRelationData(example); + return new PageBean(deviceList); + } + + @Override + public void deleteByIds(Integer[] ids) { + Device device = new Device(); + device.setIsDelete(Constants.IS_DELETE_TRUE); + if (ids != null && ids.length > 0) { + Example example = new Example(ENTITY_CLASS); + example.or().andIn("id", Arrays.asList(ids)); + if (ids.length == 1) { + device.setId(ids[0]); + deviceMapper.updateByPrimaryKeySelective(device); + } else { + deviceMapper.updateByExampleSelective(device, example); + } + List<Device> deviceList = deviceMapper.selectByExample(example); + List<String> adjustAndDeviceKeys = deviceList.stream().collect( + ArrayList<String>::new, + (list, dev) -> { + if (!StringUtils.isBlank(dev.getMac())) { + list.add("device_" + dev.getMac()); + list.add("adjust_" + dev.getMac()); + } + }, + (oList, nList) -> { + oList.addAll(nList); + } + ); + redisUtils.remove(adjustAndDeviceKeys.toArray(new String[adjustAndDeviceKeys.size()])); + } + } + + @Override + @Transactional + public void addOrModify(Device device) { + try { + //mac ��������� + if (!StringUtils.isBlank(device.getMac())) { + device.setMac(device.getMac().toLowerCase()); + } + if (device.getId() != null) { + deviceMapper.updateByPrimaryKeySelective(device); + } else { + Device deviceQuery = new Device(); + deviceQuery.setMac(device.getMac()); + Device deviceResult = deviceMapper.selectOne(deviceQuery); + if (deviceResult != null) { + device.setId(deviceResult.getId()); + deviceMapper.updateByPrimaryKeySelective(device); + } else { + device.setState(Constants.DEVICE_STATE_OFFLINE); + device.setIsDelete(Constants.IS_DELETE_FALSE); + deviceMapper.insertSelective(device); + } + } + //������redis��������������� + refreshDeviceInRedis(device.getMac()); + } 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); + List<Device> devices = deviceMapper.select(device); + for (Device device2 : devices) { + DeviceProperty deviceProperty = devicePropertyMapper.selectByPrimaryKey(device2.getId()); + device2.setDeviceProperty(deviceProperty); + } + return devices; + } + + /** + * ������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); + } + + @Override + public List<Device> getDevicesByOrganizationId(Map<String, Object> parameters) { + ValidateUtil.notNull(parameters.get("organizationId"), "param.is.null"); + return deviceMapper.getDevicesByOrganizationId(parameters); + } + + @Override + public Map<String, Long> queryDeviceStateSummary(@NotNull Integer orgId) { + Map<String, Object> params = new HashMap<>(); + if (!dictionaryDataMapper.isSupperOrgId(orgId)) { + List<Integer> orgIds = organizationMapper.selectLowerOrgIds(orgId); + params.put("orgIds", orgIds); + } + List<Map<String, Object>> list = deviceMapper.getDeviceStatesByAccount(params); + Long all = 0L, normal = 0L, abnormal = 0L, stop = 0L; + for (Map<String, Object> map : list) { + Long count = (Long) map.get("count"); + all += count; + switch (Integer.valueOf((String) map.get("state"))) { + case 0: + normal = count; + break; + case 4: + stop = count; + break; + default: + abnormal += count; + } + } + Map<String, Long> result = new HashMap<>(); + result.put("all", all); + result.put("normal", normal); + result.put("abnormal", abnormal); + result.put("stop", stop); + return result; + } + + @Resource + private DevicePropertyMapper devicePropertyMapper; + + @Override + @Transactional + public void saveOrUpdate(Device device, DeviceProperty deviceProperty) { + device.setMac(device.getMac().toLowerCase()); + if (ObjectUtils.isEmpty(device.getId())) { + device.setState(Constants.DEVICE_STATE_OFFLINE); + device.setIsDelete(Constants.IS_DELETE_FALSE); + deviceMapper.insertSelective(device); + deviceProperty.setId(device.getId()); + } else { + deviceMapper.updateByPrimaryKeySelective(device); + devicePropertyMapper.deleteByPrimaryKey(deviceProperty); + } + devicePropertyMapper.insertSelective(deviceProperty); + refreshDeviceInRedis(device.getMac()); + + } + + @Override + public PageBean getDeviceList(PageBean pageBean) { + Example example = ExampleUtil.generateExample(ENTITY_CLASS, pageBean); + if (pageBean.getPageSize() > 0) { + PageHelper.startPage(pageBean.getPageIndex(), pageBean.getPageSize()); + } + List<Device> deviceList = deviceMapper.getDeviceList(example); + return new PageBean(deviceList); + } + + @Override + public void offLinToMaintenance(Map<String, Object> parameters) { + ValidateUtil.notNull(parameters.get("id"), "param.is.null"); + ValidateUtil.notNull(parameters.get("old_state"), "param.is.null"); + ValidateUtil.notNull(parameters.get("new_state"), "param.is.null"); + int count = 0; + if (Constants.DEVICE_STATE_OFFLINE.equals(parameters.get("old_state")) && Constants.DEVICE_STATE_MAINTENANCE.equals(parameters.get("new_state"))) { + Device device = new Device(); + Example example = new Example(ENTITY_CLASS); + example.and().andEqualTo("id", new Integer(parameters.get("id").toString())).andEqualTo("state", Constants.DEVICE_STATE_OFFLINE); + device.setState(Constants.DEVICE_STATE_MAINTENANCE); + count = deviceMapper.updateByExampleSelective(device, example); + } + if (count == 0) { + throw new BusinessException("������������������"); + } + } + + @Override + public void saveOrUpdate4Mobile(Device device, DeviceProperty deviceProperty) { + device.setMac(device.getMac().toLowerCase()); + Device selectDevice = new Device(); + selectDevice.setMac(device.getMac()); + selectDevice = deviceMapper.selectOne(selectDevice); + if (ObjectUtils.isEmpty(selectDevice)) { + device.setState(Constants.DEVICE_STATE_OFFLINE); + device.setIsDelete(Constants.IS_DELETE_FALSE); + deviceMapper.insertSelective(device); + deviceProperty.setId(device.getId()); + devicePropertyMapper.insertSelective(deviceProperty); + } else { + device.setId(selectDevice.getId()); + deviceMapper.updateByPrimaryKeySelective(device); + deviceProperty.setId(selectDevice.getId()); + devicePropertyMapper.selectByPrimaryKey(selectDevice.getId()); + if (ObjectUtils.isEmpty(devicePropertyMapper.selectByPrimaryKey(deviceProperty.getId()))) { + devicePropertyMapper.insertSelective(deviceProperty); + } else { + devicePropertyMapper.updateByPrimaryKeySelective(deviceProperty); + } + + } + refreshDeviceInRedis(device.getMac()); + + + } + + @Override + public String getLimitDataByDevice(Map<String, Object> parameters) { + // TODO Auto-generated method stub + return deviceMapper.getLimitDataByDevice(parameters); + } + + //������������������������������mac��������������������������������������������� + @Override + public Device getDeviceByLongitudeAsc(String mac) { + Example example = new Example(Device.class); + example.setOrderByClause("longitude ASC"); + List<Device> deviceList = deviceMapper.selectByExample(example); + for (int i = 0; i < deviceList.size(); i++) { + if (mac.equals(deviceList.get(i).getMac())) { + Device deviceSecond = deviceList.get(i + 1); + return deviceSecond; + } + } + return null; + } + + @Override + public List<String> getMacsByOrganizationId(List<Object> organizationIdList) { + return deviceMapper.getMacsByOrganizationId(organizationIdList); + } + + @Override + public List<Device> getDeviceById1(int id) { + return deviceMapper.getDeviceById1(id); + } + + @Override + public List<Device> getDeviceById2(int id) { + return deviceMapper.getDeviceById2(id); + } + + @Override + public List<Device> getDeviceById3(int id) { + return deviceMapper.getDeviceById3(id); + } + + @Override + public List<Device> queryDevice(Map<String, Object> params) { + List<Integer> dv = deviceMapper.getHasWindDirAndWindSpeedDeviceVersion(); + Object orgIdObj = params.get("orgId"); + List<Device> deviceList = null; + if (orgIdObj != null) { + Integer orgId = Integer.parseInt(orgIdObj.toString()); + List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId); + params.put("orgIds", orgIds); + deviceList = deviceMapper.selectDevicesAll(params); + } + List<Device> deviceListHasWind = new ArrayList<>(); + for (Device d : deviceList) { + if (dv.contains(d.getDeviceVersionId())) { + deviceListHasWind.add(d); + } + } + return deviceListHasWind; + } + + @Override + public Map<String, Object> getAllFieldByMac(Map<String, Object> parameters) { + Map<String, Object> deviceMap = deviceMapper.selectAllFieldByMac(parameters); + return deviceMap; + } + + @Override + public List<DeviceAndWind> getAllDevice() { + return deviceMapper.getAllDevice(); + } + + @Override + public List<String> getAllMac() { + return deviceMapper.getAllMac(); + } + + @Override + public Device byMacGetDevice(String mac) { + return deviceMapper.byMacGetDevice(mac); + } + + @Override + public List byMonitorIdGetDeviceAndWind(String id, String tab) { + List<DeviceAndWind> deviceAndWinds = deviceMapper.byMonitorIdGetDeviceAndWind(Integer.parseInt(id), tab); + System.out.println(deviceAndWinds); + System.out.println(deviceAndWinds); + List loList = new ArrayList(); + List laList = new ArrayList(); + Double U = 0.0; + Double V = 0.0; + List list = new ArrayList(); + for (DeviceAndWind andWind : deviceAndWinds) { + Double lo = andWind.getLongitude(); + Double la = andWind.getLatitude(); + List tranlist = LatLngTransformation.Convert_BD09_To_GCJ02(la, lo); + Double transLo = (Double) tranlist.get(0); + Double transLa = (Double) tranlist.get(1); + loList.add(transLo); + laList.add(transLa); + } + Double loma = 0.0; + Double lomi = 0.0; + Double lama = 0.0; + Double lami = 0.0; + if (loList.size() > 0) { + loma = (Double) Collections.max(loList); + lomi = (Double) Collections.min(loList); + } + if (laList.size() > 0) { + lama = (Double) Collections.max(laList); + lami = (Double) Collections.min(laList); + } + Map laLaMap = new HashMap(); + laLaMap.put("maxLo", loma); + laLaMap.put("minLo", lomi); + laLaMap.put("maxLa", lama); + laLaMap.put("minLa", lami); + + Double lo1 = lomi - 250 * 0.00001141; + Double lo2 = loma + 250 * 0.00001141; + Double la2 = lami - 250 * 0.00000899; + Double la1 = lama + 250 * 0.00000899; + + Double dx = 0.00001141 * 20; + Double dy = 0.00000899 * 20; + int nx = (int) Math.floor((lo2 - lo1) / dx); + int ny = (int) Math.floor((la1 - la2) / dy); + String header1 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 2 + + ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + + ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + + ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + + ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; + + String header2 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 3 + + ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + + ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + + ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + + ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; + + List<Double> uList = new ArrayList<Double>(); + List<Double> vList = new ArrayList<Double>(); + int x = 0; + int y = 0; + List<Map> mapList = new ArrayList<Map>(); + + for (int j = 0; j < deviceAndWinds.size(); j++) { + Map<String, Double> map = new HashMap<String, Double>(); + Double windDir = deviceAndWinds.get(j).getWindDir(); + + Double windSpeed = deviceAndWinds.get(j).getWindSpeed(); + if (windDir == null) { + windDir = 0.0; + windSpeed = 0.0; + } + Double tvoc = deviceAndWinds.get(j).getTVoc(); + + List tranlist = LatLngTransformation.Convert_BD09_To_GCJ02(deviceAndWinds.get(j).getLatitude(), deviceAndWinds.get(j).getLongitude()); + Double transLo = (Double) tranlist.get(0); + Double transLa = (Double) tranlist.get(1); + if (tvoc == null) { + tvoc = 0.0; + } + Double dir = (270.0 - (windDir+180.0) * Math.PI / 180.0); + + U = windSpeed * Math.cos(dir); + V = windSpeed * Math.sin(dir); + map.put("lo", transLo); + map.put("la", transLa); + map.put("U", U); + map.put("V", V); + mapList.add(map); + } + for (int i = 0; i < mapList.size(); i++) { + Double lo = (Double) mapList.get(i).get("lo"); + Double la = (Double) mapList.get(i).get("la"); + x = (int) Math.floor((lo - lo1) / dx); + y = Math.abs((int) Math.floor((la - la1) / dy)); + //y=Math.floor(Math.abs(la-la1)/dy); + U = (Double) mapList.get(i).get("U"); + V = (Double) mapList.get(i).get("V"); + if (i == 0) { + for (int j = 0; j < nx * ny; j++) { + uList.add(0.0); + vList.add(0.0); + } + } + for (int j = 0; j < nx * ny; j++) { + if (i == 0) { + if ((y >= 2 && j == (y) * nx + x)) { + int k; + for (k = j - 2 * nx; k <= j + 2 * nx; k = k + nx) { + uList.set(k, U); + uList.set(k - 1, U); + uList.set(k - 2, U); + uList.set(k + 1, U); + uList.set(k + 2, U); + vList.set(k, V); + vList.set(k - 1, V); + vList.set(k - 2, V); + vList.set(k + 1, V); + vList.set(k + 2, V); + } + } + } else { + if (y >= 1 && j == y * nx + x) { + int k; + for (k = j - 2 * nx; k <= j + 2 * nx; ) { + uList.set(k - 1, U); + uList.set(k - 2, U); + uList.set(k + 1, U); + uList.set(k + 2, U); + vList.set(k - 1, V); + vList.set(k - 2, V); + vList.set(k + 1, V); + vList.set(k + 2, V); + k = k + nx; + } + uList.set(j, U); + vList.set(j, V); + } + } + } + } + String uData = "\"" + "data" + "\"" + ": " + uList; + String vData = "\"" + "data" + "\"" + ": " + vList; + String s1 = "[" + "{" + header1 + ", " + uData + "}" + ", " + "{" + header2 + ", " + vData + "}" + "]"; + JSONArray jsonArray = JSONArray.parseArray(s1); + MonitorPoint monitorPoint = monitorPointMapper.byIdGetMonitorPoint(Integer.parseInt(id)); + Double monitorLo = monitorPoint.getLongitude(); + Double monitorLa = monitorPoint.getLatitude(); + List transList = LatLngTransformation.Convert_BD09_To_GCJ02(monitorLa, monitorLo); + Double transLo = (Double) transList.get(0); + Double transLa = (Double) transList.get(1); + list.add(jsonArray); + list.add(transLo); + list.add(transLa); + list.add(laLaMap); + return list; + } + + @Override + public List byMonitorIdGetDeviceAndWindSpecial(String id, String tab) { + MonitorPoint monitorPoint = monitorPointMapper.byIdGetMonitorPoint(Integer.parseInt(id)); + Integer areaCode = monitorPoint.getAreaCode(); + String townCode = monitorPoint.getTownCode() + ""; + int monitorPointId = monitorPoint.getId(); + Map<String, Object> parm = new HashMap<>(); + List<DeviceAndWind> deviceAndWinds = new ArrayList<>(); + Double loma = 0.0; + Double lomi = 0.0; + Double lama = 0.0; + Double lami = 0.0; + + int length = 1; + int perdlen = 1; + if (areaCode == 320581) { + parm.put("areaCode", areaCode); + List<Device> deviceList = deviceMapper.getDeviceByCode(parm); + for (Device d : deviceList) { + String mac = d.getMac(); + DeviceAndWind deviceAndWind = deviceMapper.byMacGetDeviceAndWind(mac, tab); + if (deviceAndWind != null) { + deviceAndWinds.add(deviceAndWind); + } + } + length = 8000; + perdlen = 2200; + } else if ((areaCode == 320583) && (townCode.equals("320583108000"))) { + parm.put("townCode", townCode); + List<Device> deviceList = deviceMapper.getDeviceByCode(parm); + for (Device d : deviceList) { + String mac = d.getMac(); + DeviceAndWind deviceAndWind = deviceMapper.byMacGetDeviceAndWind(mac, tab); + if (deviceAndWind != null) { + deviceAndWinds.add(deviceAndWind); + } + } + length = 2000; + perdlen = 280; + } else if (monitorPointId == 35) { + DeviceAndWind deviceAndWind = deviceMapper.getDeviceAndWindByMac("898607b0101730392253", tab); + DeviceAndWind deviceAndWind1 = deviceMapper.getDeviceAndWindByMac("p5dnd7a0392083", tab); + deviceAndWinds.add(deviceAndWind); + deviceAndWinds.add(deviceAndWind1); + length = 2000; + perdlen = 50; + + } else { + deviceAndWinds = deviceMapper.byMonitorIdGetDeviceAndWind(Integer.parseInt(id), tab); + length = 2000; + perdlen = 80; + } + List loList = new ArrayList(); + List laList = new ArrayList(); + Double U = 0.0; + Double V = 0.0; + List list = new ArrayList(); + for (DeviceAndWind andWind : deviceAndWinds) { + Double lo = andWind.getLongitude(); + Double la = andWind.getLatitude(); + List tranlist = LatLngTransformation.Convert_BD09_To_GCJ02(la, lo); + Double transLo = (Double) tranlist.get(0); + Double transLa = (Double) tranlist.get(1); + loList.add(transLo); + laList.add(transLa); + } + + if (loList.size() > 0) { + loma = (Double) Collections.max(loList); + lomi = (Double) Collections.min(loList); + } + if (laList.size() > 0) { + lama = (Double) Collections.max(laList); + lami = (Double) Collections.min(laList); + } + Map laLaMap = new HashMap(); + laLaMap.put("maxLo", loma); + laLaMap.put("minLo", lomi); + laLaMap.put("maxLa", lama); + laLaMap.put("minLa", lami); + + Double lo1 = lomi - length * 0.00001141; + Double lo2 = loma + length * 0.00001141; + Double la2 = lami - length * 0.00000899; + Double la1 = lama + length * 0.00000899; + + Double dx = 0.00001141 * perdlen; + Double dy = 0.00000899 * perdlen; + int nx = (int) Math.floor((lo2 - lo1) / dx); + int ny = (int) Math.floor((la1 - la2) / dy); + String header1 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 2 + + ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + + ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + + ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + + ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; + + String header2 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 3 + + ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + + ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + + ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + + ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; + + List<Double> uList = new ArrayList<Double>(); + List<Double> vList = new ArrayList<Double>(); + int x = 0; + int y = 0; + List<Map> mapList = new ArrayList<Map>(); + + for (int j = 0; j < deviceAndWinds.size(); j++) { + Map<String, Double> map = new HashMap<String, Double>(); + Double windDir = deviceAndWinds.get(j).getWindDir(); + Double windSpeed = deviceAndWinds.get(j).getWindSpeed(); + if (windDir == null) { + windDir = 0.0; + windSpeed = 0.0; + } + Double tvoc = deviceAndWinds.get(j).getTVoc(); + + List tranlist = LatLngTransformation.Convert_BD09_To_GCJ02(deviceAndWinds.get(j).getLatitude(), deviceAndWinds.get(j).getLongitude()); + Double transLo = (Double) tranlist.get(0); + Double transLa = (Double) tranlist.get(1); + if (tvoc == null) { + tvoc = 0.0; + } + Double dir = (270.0 + (windDir+180.0) * Math.PI / 180.0); + + U = windSpeed * Math.cos(dir); + V = windSpeed * Math.sin(dir); + map.put("lo", transLo); + map.put("la", transLa); + map.put("U", U); + map.put("V", V); + mapList.add(map); + } + for (int i = 0; i < mapList.size(); i++) { + Double lo = (Double) mapList.get(i).get("lo"); + Double la = (Double) mapList.get(i).get("la"); + x = (int) Math.floor((lo - lo1) / dx); + y = Math.abs((int) Math.floor((la - la1) / dy)); + //y=Math.floor(Math.abs(la-la1)/dy); + U = (Double) mapList.get(i).get("U"); + V = (Double) mapList.get(i).get("V"); + if (i == 0) { + for (int j = 0; j < nx * ny; j++) { + uList.add(0.0); + vList.add(0.0); + } + } + for (int j = 0; j < nx * ny; j++) { + if (i == 0) { + if ((y >= 2 && j == (y) * nx + x)) { + int k; + for (k = j - 2 * nx; k <= j + 2 * nx; k = k + nx) { + uList.set(k, U); + uList.set(k - 1, U); + uList.set(k - 2, U); + uList.set(k + 1, U); + uList.set(k + 2, U); + vList.set(k, V); + vList.set(k - 1, V); + vList.set(k - 2, V); + vList.set(k + 1, V); + vList.set(k + 2, V); + } + } + } else { + if (y >= 1 && j == y * nx + x) { + int k; + for (k = j - 2 * nx; k <= j + 2 * nx; ) { + uList.set(k - 1, U); + uList.set(k - 2, U); + uList.set(k + 1, U); + uList.set(k + 2, U); + vList.set(k - 1, V); + vList.set(k - 2, V); + vList.set(k + 1, V); + vList.set(k + 2, V); + k = k + nx; + } + uList.set(j, U); + vList.set(j, V); + } + } + } + } + String uData = "\"" + "data" + "\"" + ": " + uList; + String vData = "\"" + "data" + "\"" + ": " + vList; + String s1 = "[" + "{" + header1 + ", " + uData + "}" + ", " + "{" + header2 + ", " + vData + "}" + "]"; + JSONArray jsonArray = JSONArray.parseArray(s1); + + Double monitorLo = monitorPoint.getLongitude(); + Double monitorLa = monitorPoint.getLatitude(); + List transList = LatLngTransformation.Convert_BD09_To_GCJ02(monitorLa, monitorLo); + Double transLo = (Double) transList.get(0); + Double transLa = (Double) transList.get(1); + + list.add(jsonArray); + list.add(transLo); + list.add(transLa); + list.add(laLaMap); + return list; + } + + @Override + public List<Device> getDeviceByCodeAndId(String code, String id) { + return deviceMapper.getDeviceByCodeAndId(code, id); + } + + @Override + public String byMacGetOrgId(String mac) { + return deviceMapper.byMacGetOrgId(mac); + } + + @Override + public List<Device> getDevice(String macOrName) { + return deviceMapper.getDevice(macOrName); + } + + @Override + public List<Device> getDeviceByCode() { + return deviceMapper.getDeviceByCityCode(); + } + +} diff --git a/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java index b9d2711..a0c6711 100644 --- a/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java @@ -117,23 +117,23 @@ } @Override - public String getTVOCByMac(String mac, String time, String sensor) { - return historyHourlyMapper.getTVOCByMac(mac, time, sensor); + public String getTVOCByMac(String mac,String time,String sensor) { + return historyHourlyMapper.getTVOCByMac(mac,time,sensor); } @Override public String getPressureByMac(String mac, String time) { - return historyHourlyMapper.getPressureByMac(mac, time); + return historyHourlyMapper.getPressureByMac(mac,time); } @Override - public Map<String, Object> getDataByMac(String mac, String time) { - return historyHourlyMapper.getDataByMac(mac, time); + public Map<String,Object> getDataByMac(String mac, String time) { + return historyHourlyMapper.getDataByMac(mac,time); } @Override public List<Map<String, Object>> getDataByTimeSlot(String mac, String startTime, String endTime) throws Exception { - List<Map<String, Object>> resultMap = historyHourlyMapper.getDataByTimeSlot(mac, startTime, endTime); + List<Map<String, Object>> resultMap = historyHourlyMapper.getDataByTimeSlot(mac,startTime,endTime); return resultMap; } @@ -144,10 +144,10 @@ String time = param.get("time").toString(); String[] times = time.split("���"); - String time1 = times[0].substring(0, 8); - for (int i = 0; i < times.length; i++) { - if (i != 0) { - times[i] = time1 + "" + times[i]; + String time1=times[0].substring(0,8); + for (int i = 0; i <times.length ; i++) { + if (i!=0){ + times[i]=time1+""+times[i]; } } List<List> lists = new ArrayList<List>(); @@ -165,7 +165,7 @@ list.remove(0); /*������1-2���������������������������������1���������������������������2���������������������1-24��� - * ���24���������������������������������������������������������������*/ + * ���24���������������������������������������������������������������*/ /*������������start----------------------------------------------------------------*/ if (list.size() == 23) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -180,10 +180,10 @@ //������������2020-11-16���������������������������17���0������������������������������������������2020-11-17---2020-11-18 List<Map> nextDayList = historyHourlyMapper.getDataByMacAndTime(mac, sensor, startTime, endTime); - if (!ObjectUtils.isEmpty(nextDayList)) { - perTime = perTime.replaceAll(" 00:00:00", " 24"); + if(!ObjectUtils.isEmpty(nextDayList)){ + perTime=perTime.replaceAll(" 00:00:00"," 24"); Map<String, Object> datas = nextDayList.get(0); - datas.put("time", perTime); + datas.put("time",perTime); list.add(datas); } } @@ -191,23 +191,23 @@ List<Map> newList = new ArrayList<Map>(); for (int i = 0; i <= 24; i++) { - Map map = new HashMap(); + Map map=new HashMap(); if (i < 10) { - map.put("time", "0" + i); - map.put(sensor, ""); + map.put("time","0"+i); + map.put(sensor,""); newList.add(map); - } else { - map.put("time", "" + i); - map.put(sensor, ""); + }else { + map.put("time",""+i); + map.put(sensor,""); newList.add(map); } } if (list.size() <= 24 && list.size() >= 0) { - for (int i = 0; i < list.size(); i++) { + for (int i = 0; i <list.size() ; i++) { String timeS = list.get(i).get("time").toString().substring(11, 13); for (Map map : newList) { - if (timeS.equals(map.get("time"))) { - map.replace(sensor, "", list.get(i).get(sensor)); + if (timeS.equals(map.get("time"))){ + map.replace(sensor,"",list.get(i).get(sensor)); } } } @@ -245,13 +245,13 @@ /*for (int i = 0; i <perList.size() ; i++) { perList.get(i).replace("time",perList.get(i).get("time"),(Integer) perList.get(i).get("time")+1); }*/ - int j = 0; - for (int i = 0; i < perList.size(); i++) { - if (!((List) perList.get(i).get("values")).get(0).equals("")) { - j = 1; + int j=0; + for (int i = 0; i <perList.size() ; i++) { + if (!((List)perList.get(i).get("values")).get(0).equals("")){ + j=1; } } - if (j == 0) { + if (j==0){ perList.clear(); } return perList; @@ -261,58 +261,58 @@ public List<Map> getDataAvbByMIdAndTime(String mId, String startTime, String endTime) { List<Device> devicesByMonitorPointId = deviceService.getDevicesByMonitorPointId(Integer.valueOf(mId)); List<List> lists = new ArrayList<>(); - List<List<Map<String, String>>> listArrayList = new ArrayList<>(); + List<List<Map<String,String>>> listArrayList = new ArrayList<>(); List<Map<String, Object>> dataAvbByMIdAndTime = historyHourlyMapper.getDataAvbByMIdAndTime(mId, startTime, endTime); List<Map> mapList = new ArrayList<>(); for (Map<String, Object> stringStringMap : dataAvbByMIdAndTime) { - Map<String, String> map = new HashMap(); + Map<String,String> map = new HashMap(); String s = stringStringMap.get("O3").toString(); Object time = stringStringMap.get("time"); - map.put("O3", s); - map.put("time", time.toString()); + map.put("O3",s); + map.put("time",time.toString()); mapList.add(map); } - if (mapList.size() >= 8) { - List<Map<String, String>> mapList1 = new ArrayList<>(); - for (int i = 7; i <= mapList.size() - 1; i++) { - if (mapList.get(i).get("O3") != null) { - List<Integer> numList = new ArrayList(); - Map<String, String> O3_8 = new HashMap<>(); - for (int j = i; j <= mapList.size(); j--) { - if (j < 0) { - break; - } - numList.add(j); - if (numList.size() == 8) { - List e15 = new ArrayList(); - for (int k = 0; k < numList.size(); k++) { - String value = mapList.get(Integer.valueOf(numList.get(k))).get("O3").toString(); - e15.add(value); - } - double sum = 0; - for (Object o : e15) { - sum = sum + Double.parseDouble(o.toString()); - } - Double avg1 = sum / e15.size(); - int timeOfHour = numList.get(0); - if (timeOfHour == 23) { - timeOfHour = 0; - } else { - timeOfHour = timeOfHour + 1; - } - O3_8.put("time", String.valueOf(timeOfHour)); - O3_8.put("O3-8h", String.valueOf(avg1)); - mapList1.add(O3_8); - } else { - continue; - } + if (mapList.size()>=8){ + List<Map<String,String>> mapList1 = new ArrayList<>(); + for (int i = 7; i <=mapList.size()-1 ; i++) { + if (mapList.get(i).get("O3")!=null){ + List<Integer> numList = new ArrayList(); + Map<String,String> O3_8 = new HashMap<>(); + for (int j =i; j<= mapList.size(); j--) { + if (j<0){ + break; } - } - listArrayList.add(mapList1); + numList.add(j); + if (numList.size()==8){ + List e15 = new ArrayList(); + for (int k = 0; k <numList.size() ; k++) { + String value = mapList.get(Integer.valueOf(numList.get(k))).get("O3").toString(); + e15.add(value); + } + double sum =0; + for (Object o : e15) { + sum=sum+Double.parseDouble(o.toString()); + } + Double avg1 = sum/e15.size(); + int timeOfHour = numList.get(0); + if (timeOfHour==23){ + timeOfHour=0; + }else { + timeOfHour=timeOfHour+1; + } + O3_8.put("time", String.valueOf(timeOfHour)); + O3_8.put("O3-8h", String.valueOf(avg1)); + mapList1.add(O3_8); + }else { + continue; + } } + } + listArrayList.add(mapList1); } - Double maxO3 = 0.0; - if (listArrayList.size() > 0) { + } + Double maxO3=0.0; + if(listArrayList.size()>0){ List<Map<String, String>> mapList1 = listArrayList.get(0); List<Double> O3List = new ArrayList(); for (Map<String, String> stringStringMap : mapList1) { @@ -320,67 +320,67 @@ } maxO3 = Collections.max(O3List); - for (int i = 0; i < dataAvbByMIdAndTime.size(); i++) { - dataAvbByMIdAndTime.get(i).put("O3-8h", null); - int time = Integer.parseInt(((Object) dataAvbByMIdAndTime.get(i).get("time")).toString().substring(11, 13)); - for (int j = 0; j < mapList1.size(); j++) { - int time1 = Integer.parseInt(mapList1.get(j).get("time").toString()); - if (time == time1) { + for (int i = 0; i <dataAvbByMIdAndTime.size() ; i++) { + dataAvbByMIdAndTime.get(i).put("O3-8h",null); + int time = Integer.parseInt(((Object)dataAvbByMIdAndTime.get(i).get("time")).toString().substring(11,13)) ; + for (int j = 0; j <mapList1.size() ; j++) { + int time1 = Integer.parseInt(mapList1.get(j).get("time").toString()) ; + if (time==time1){ Double O3_8h = Double.parseDouble(mapList1.get(j).get("O3-8h").toString()); - dataAvbByMIdAndTime.get(i).put("O3-8h", new BigDecimal(O3_8h).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue()); + dataAvbByMIdAndTime.get(i).put("O3-8h",new BigDecimal(O3_8h).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); } } } } Map<String, Object> dailyAvgData = historyMapper.getDailyAvgData(mId, startTime); - if (dailyAvgData != null) { - dailyAvgData.put("maxO3-8h", new BigDecimal(maxO3).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue()); - dailyAvgData.put("time", startTime); + if (dailyAvgData!=null){ + dailyAvgData.put("maxO3-8h",new BigDecimal(maxO3).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); + dailyAvgData.put("time",startTime); } - if (dataAvbByMIdAndTime.size() > 24) { - for (int i = 0; i < dataAvbByMIdAndTime.size() - 1; i++) { - Map<String, Object> map = dataAvbByMIdAndTime.get(i); + if (dataAvbByMIdAndTime.size()>24){ + for (int i = 0; i <dataAvbByMIdAndTime.size()-1 ; i++) { + Map<String, Object> map =dataAvbByMIdAndTime.get(i); Map<String, Object> map1 = AQICalculation2.hourlyAQI(map); - dataAvbByMIdAndTime.get(i).put("AQI", Double.parseDouble(map1.get("AQI").toString())); - if (Double.parseDouble(map1.get("AQI").toString()) >= 50) { + dataAvbByMIdAndTime.get(i).put("AQI",Double.parseDouble(map1.get("AQI").toString())); + if (Double.parseDouble(map1.get("AQI").toString())>=50){ String name = map1.get("maxSensor").toString(); - dataAvbByMIdAndTime.get(i).put("���������������", name); - } else { - dataAvbByMIdAndTime.get(i).put("���������������", "-"); + dataAvbByMIdAndTime.get(i).put("���������������",name); + }else { + dataAvbByMIdAndTime.get(i).put("���������������","-"); } } - } else { - for (int i = 0; i < dataAvbByMIdAndTime.size(); i++) { - Map<String, Object> map = dataAvbByMIdAndTime.get(i); + }else { + for (int i = 0; i <dataAvbByMIdAndTime.size() ; i++) { + Map<String, Object> map =dataAvbByMIdAndTime.get(i); Map<String, Object> map1 = AQICalculation2.hourlyAQI(map); - dataAvbByMIdAndTime.get(i).put("AQI", Double.parseDouble(map1.get("AQI").toString())); - if (Double.parseDouble(map1.get("AQI").toString()) >= 50) { + dataAvbByMIdAndTime.get(i).put("AQI",Double.parseDouble(map1.get("AQI").toString())); + if (Double.parseDouble(map1.get("AQI").toString())>=50){ String name = map1.get("maxSensor").toString(); - dataAvbByMIdAndTime.get(i).put("���������������", name); - } else { - dataAvbByMIdAndTime.get(i).put("���������������", "-"); + dataAvbByMIdAndTime.get(i).put("���������������",name); + }else { + dataAvbByMIdAndTime.get(i).put("���������������","-"); } } } Map<String, Object> dayAQI = AQICalculation2.dayAQI(dailyAvgData); - dailyAvgData.put("���������������", dayAQI.get("maxSensor")); - dailyAvgData.put("AQI", dayAQI.get("AQI")); - dataAvbByMIdAndTime.add(dataAvbByMIdAndTime.size(), dailyAvgData); + dailyAvgData.put("���������������",dayAQI.get("maxSensor")); + dailyAvgData.put("AQI",dayAQI.get("AQI")); + dataAvbByMIdAndTime.add(dataAvbByMIdAndTime.size(),dailyAvgData); List<Map> finalList = new ArrayList<>(); - for (int i = 0; i < dataAvbByMIdAndTime.size(); i++) { + for (int i = 0; i <dataAvbByMIdAndTime.size() ; i++) { Map timeAndDate = new HashMap(); - if (i != dataAvbByMIdAndTime.size() - 1) { - String time = dataAvbByMIdAndTime.get(i).get("time").toString().substring(11, 13); + if (i!=dataAvbByMIdAndTime.size()-1){ + String time = dataAvbByMIdAndTime.get(i).get("time").toString().substring(11,13); dataAvbByMIdAndTime.get(i).remove("time"); - timeAndDate.put("time", time); - timeAndDate.put("data", dataAvbByMIdAndTime.get(i)); + timeAndDate.put("time",time); + timeAndDate.put("data",dataAvbByMIdAndTime.get(i)); finalList.add(timeAndDate); - } else { - String time = dataAvbByMIdAndTime.get(i).get("time").toString().substring(0, 11); + }else { + String time = dataAvbByMIdAndTime.get(i).get("time").toString().substring(0,11); dataAvbByMIdAndTime.get(i).remove("time"); - timeAndDate.put("time", time); - timeAndDate.put("data", dataAvbByMIdAndTime.get(i)); + timeAndDate.put("time",time); + timeAndDate.put("data",dataAvbByMIdAndTime.get(i)); finalList.add(timeAndDate); } } diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java index 343cdd3..3f5d6d6 100644 --- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java @@ -75,15 +75,19 @@ accountService.setOrgIdsByAccount(parameters); LocalDateTime time = LocalDateTime.now(); // ������������ -10������ - parameters.put("start", time.minusMinutes(10)); + LocalDateTime start = time.minusMinutes(10); + parameters.put("start", start); // ������������ -5������ - parameters.put("end", time.minusMinutes(5)); + LocalDateTime end = time.minusMinutes(5); + parameters.put("end", end); List<Sensor> Sensors = sensorMapper.getSensorsByCriteria(parameters); List<String> sensorKeys = new ArrayList<String>(); for (Sensor sensor : Sensors) { sensorKeys.add(sensor.getSensorKey()); } parameters.put("sensorKeys", sensorKeys); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMM"); + parameters.put("timeUnits", "minutely_" + df.format(start)); List<Map<String, Object>> list = historyMapper.getAreaAllDataByAccount(parameters); resultMap.putAll(list.get(0)); return resultMap; @@ -105,6 +109,7 @@ List<String> sensorKeys = new ArrayList<String>(); sensorKeys.add(macKey.toString()); parameters.put("sensorKeys", sensorKeys); + parameters.put("timeUnits", "hourly"); List<Map<String, Object>> list = historyMapper.getAreaAllDataByAccount(parameters); for (Map<String, Object> map : list) { @@ -115,11 +120,16 @@ @Override public String queryValueByMacAndTime(String mac, Date time) { - return historyMapper.selectValueByMacAndTime(mac, time); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String timeUnits = sdf.format(time); + return historyMapper.selectValueByMacAndTime(mac, time, timeUnits); } - public String getValueByMacAndTime(String mac, String time,String time1) { - return historyMapper.getValueByMacAndTime(mac, time,time1); + + public String getValueByMacAndTime(String mac, String time, String time1) { + String timeUnits = time1.substring(0, 10).replace("-", ""); + return historyMapper.getValueByMacAndTime(mac, time, time1, timeUnits); } + @Override public List<Map<String, Object>> getRegionRankingData(Map<String, Object> parameters) { ValidateUtil.notNull(parameters.get("regionCode"), "param.is.null"); @@ -152,10 +162,12 @@ parameters.put("nextLevel", nextLevel); LocalDate localDate = LocalDate.now(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMM"); Object timeType = parameters.get("timeType"); + String table = "history"; - String column = "value"; - if ("month".equals(timeType)) { + String column = "json"; + /*if ("month".equals(timeType)) { if (1 != localDate.getDayOfMonth()) { table = "history_daily"; column = "json"; @@ -167,7 +179,19 @@ parameters.put("start", LocalDateTime.now().truncatedTo(ChronoUnit.HOURS)); } else { parameters.put("start", LocalDateTime.now().minusMinutes(5)); + }*/ + + if ("month".equals(timeType)) { + table = "history_daily"; + parameters.put("start", localDate.with(TemporalAdjusters.firstDayOfMonth())); + } else if ("day".equals(timeType)) { + table = "history_hourly"; + parameters.put("start", localDate); + } else if ("hour".equals(timeType)) { + table = "history_minutely_" + df.format(localDate); + parameters.put("start", LocalDateTime.now().truncatedTo(ChronoUnit.HOURS)); } + parameters.put("table", table); parameters.put("column", column); @@ -178,7 +202,6 @@ } accountService.setOrgIdsByAccount(parameters); - List<Map<String, Object>> result = historyMapper.getRegionRankingData(parameters); for (Map<String, Object> map : result) { if (ObjectUtils.isEmpty(map.get("avg"))) { @@ -252,6 +275,10 @@ ValidateUtil.notNull(parameters.get("deviceId"), "param.is.null"); List<Map<String, Object>> sensors = sensorMapper.getSensorsByDeviceVersionId(parameters); parameters.put("size", 1); + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String timeUnits = sdf.format(date); + parameters.put("timeUnits", timeUnits); List<Map<String, Object>> values = historyMapper.getValueByMacAndSize(parameters); JSONObject map = null; if (!ObjectUtils.isEmpty(values)) { @@ -291,6 +318,10 @@ ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); ValidateUtil.notNull(parameters.get("size"), "param.is.null"); parameters.put("size", Integer.valueOf(parameters.remove("size").toString())); + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String timeUnits = sdf.format(date); + parameters.put("timeUnits", timeUnits); List<Map<String, Object>> values = historyMapper.getValueByMacAndSize(parameters); Map<String, Object> sensorUnits = getSensorUnitByDeviceMac(parameters); for (Map<String, Object> value : values) { @@ -333,6 +364,9 @@ parameters.put("end", end); parameters.put("sensorKeys", Arrays.asList(((String) sensorKey).split(","))); accountService.setOrgIdsByAccount(parameters); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMdd"); + //���history������������������ + parameters.put("timeUnits", df.format(start)); Map<String, Object> result = historyMapper.getActualDataByRegion(parameters); if (ObjectUtils.isEmpty(result)) { result = new HashMap<String, Object>(); @@ -372,7 +406,9 @@ int startHour = endHour - 1; startTime = localDate + " " + startHour + ":00:00"; } - Map<String, Object> map = historyMapper.getAVGValueByMacAndTimeslot(mac, startTime, endTime); + //���������history������������������ + String timeUnits = startTime.substring(0, 10).replace("-", ""); + Map<String, Object> map = historyMapper.getAVGValueByMacAndTimeslot(mac, startTime, endTime, timeUnits); Map<String, Object> returnMap = new HashMap<>(); if (map.isEmpty()) { returnMap.put("AQI", "N/V"); @@ -386,7 +422,7 @@ returnMap = AQICalculation.hourlyAQI(AQIMap); } long aqi = Math.round(Double.valueOf(returnMap.get("AQI").toString())); - returnMap.put("AQI",aqi); + returnMap.put("AQI", aqi); return returnMap; } @@ -436,10 +472,31 @@ Date end = rightNow.getTime(); String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(end); String before5Time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(beforeD); // ������������������ - String sensor = parameters.get("sensor").toString(); - List<Map<String, Object>> result = historyMapper.getAVGSensorRankByMonitorPointIdList(sensor, monitorPointIdList, before5Time, endTime); - return result; + String timeUnits1 = before5Time.substring(0, 10).replace("-", ""); + List<Map<String, Object>> result1 = historyMapper.getAVGSensorRankByMonitorPointIdList(sensor, monitorPointIdList, before5Time, endTime, timeUnits1); + String timeUnits2 = before5Time.substring(0, 10).replace("-", ""); + List<Map<String, Object>> result2 = historyMapper.getAVGSensorRankByMonitorPointIdList(sensor, monitorPointIdList, before5Time, endTime, timeUnits2); + if (result1.isEmpty()) { + return result2; + } else if (result2.isEmpty()) { + return result1; + } else { + for (Map<String, Object> map1 : result1) { + Object name1 = map1.get("name"); + double value1 = Double.parseDouble(map1.get("sensor").toString()); + double avg = 0.0; + for (Map<String, Object> map2 : result2) { + Object name2 = map2.get("name"); + double value2 = Double.parseDouble(map2.get("sensor").toString()); + if (name1.equals(name2)) { + avg = (value1 + value2) / 2; + map1.put("sensor", avg); + } + } + } + } + return result1; } @Override @@ -459,7 +516,10 @@ int startHour = endHour - 1; startTime = localDate + " " + startHour + ":00:00"; } - Map<String, Object> map = historyMapper.getMonitorPointAVGValueByMonitorPointIdAndTimeslot(monitor_point_id, startTime, endTime); + //���������history������������������ + String timeUnits = startTime.substring(0, 10).replace("-", ""); + + Map<String, Object> map = historyMapper.getMonitorPointAVGValueByMonitorPointIdAndTimeslot(monitor_point_id, startTime, endTime, timeUnits); Map<String, Object> returnMap = new HashMap<>(); if (map.isEmpty()) { returnMap.put("AQI", "N/V"); @@ -494,20 +554,20 @@ } parameters.put("sensorKeys", sensorKeys); List<Map<String, Object>> listMap = null; - if (today.compareTo(startTimeDay) == 0) { + /*if (today.compareTo(startTimeDay) == 0) { listMap = historyMapper.listGetSensorData(parameters); - } + }*/ + //if (CollectionUtils.isEmpty(listMap)) { + listMap = historyMapper.getCarSensorData(parameters); if (CollectionUtils.isEmpty(listMap)) { - listMap = historyMapper.getCarSensorData(parameters); - if (CollectionUtils.isEmpty(listMap)) { - if (year <= 2019) { - listMap = historyMinutelyMapper.getSensorData(parameters); - } else { - parameters.put("yearAndMonth", yearAndMonth); - listMap = historyMinutelyMapper.getSensorData2020(parameters); - } + if (year <= 2019) { + listMap = historyMinutelyMapper.getSensorData(parameters); + } else { + parameters.put("yearAndMonth", yearAndMonth); + listMap = historyMinutelyMapper.getSensorData2020(parameters); } } + //} List<List<Map<String, Object>>> listMaps = new ArrayList<>(); List<Map<String, Object>> listMapAvg = new ArrayList<>(); List<Map<String, Object>> listMapMin = new ArrayList<>(); @@ -651,8 +711,8 @@ } @Override - public String getJsonData(String mac, String time,String table) { - return historyMapper.getJsonData(mac,time,table); + public String getJsonData(String mac, String time, String table) { + return historyMapper.getJsonData(mac, time, table); } } diff --git a/src/main/java/com/moral/service/impl/SensorServiceImpl.java b/src/main/java/com/moral/service/impl/SensorServiceImpl.java index 85e0fd8..f56f048 100644 --- a/src/main/java/com/moral/service/impl/SensorServiceImpl.java +++ b/src/main/java/com/moral/service/impl/SensorServiceImpl.java @@ -118,6 +118,11 @@ } @Override + public List<Map<String, Object>> getSensorByDId(String id) { + List<Map<String, Object>> list = sensorMapper.getSensorByDId(id); + return list; + } + @Override public List<Map<String, Object>> getSensorByMonitorPointId(String monitor_point_id) { List<Map<String, Object>> list = sensorMapper.getSensorByMonitorPointId(monitor_point_id); return list; diff --git a/src/main/resources/mapper/HistoryHourlyMapper.xml b/src/main/resources/mapper/HistoryHourlyMapper.xml index b1896e9..3d5ca95 100644 --- a/src/main/resources/mapper/HistoryHourlyMapper.xml +++ b/src/main/resources/mapper/HistoryHourlyMapper.xml @@ -100,7 +100,12 @@ </select> <select id="getDataByMacAndTime" resultType="java.util.Map"> - SELECT DATE_FORMAT(`time`,'%Y-%m-%d %H:%i:%s') as `time`,json->'$.${sensor}[0]' as ${sensor} FROM `history_hourly` where `mac`=#{mac} and `time`>=#{startTime} and `time`<#{endTime} + SELECT DATE_FORMAT(`time`,'%Y-%m-%d %H:%i:%s') as `time`, + json->'$.${sensor}[0]' as ${sensor} + FROM `history_hourly` + where `mac`=#{mac} + and `time`>=#{startTime} + and `time`<#{endTime} </select> <select id="getDataByMacAndTime1" resultType="java.util.Map"> SELECT DATE_FORMAT(`time`,'%Y-%m-%d %H:%i:%s') as `time`,json->'$.${sensor}[0]' as ${sensor} FROM `history_hourly` where `mac`=#{mac} and `time`>=#{startTime} and `time`<![CDATA[<]]>#{endTime} diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml index 47b11ab..0fd5fcf 100644 --- a/src/main/resources/mapper/HistoryMapper.xml +++ b/src/main/resources/mapper/HistoryMapper.xml @@ -2,7 +2,7 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.moral.mapper.HistoryMapper"> <select id="selectValueByMacAndTime" resultType="java.lang.String"> - select `value` from history + select `value` from history_${timeUnits} where time = #{time} and mac = #{mac} limit 0,1 </select> @@ -13,10 +13,10 @@ d.`name`, </if> <foreach collection="sensorKeys" separator="," item="sensorKey"> - AVG(h.`value` ->'$.${sensorKey}[0]') AS '${sensorKey}' + AVG(h.`value` ->'$.${sensorKey}') AS '${sensorKey}' </foreach> FROM - history h, + history_${timeUnits} h, device d, monitor_point mp WHERE @@ -132,7 +132,7 @@ value, time FROM - history + history_${timeUnits} WHERE mac = #{mac} ORDER BY @@ -143,10 +143,10 @@ <select id="getActualDataByRegion" resultType="java.util.Map"> SELECT <foreach collection="sensorKeys" separator="," item="sensorKey"> - MAX( `value` ->> '$.${sensorKey}' ) * 1 AS '${sensorKey}' + MAX( `value` -> '$.${sensorKey}' ) * 1 AS '${sensorKey}' </foreach> FROM - history h , + history_${timeUnits} h , device d, monitor_point mp <where> @@ -165,9 +165,10 @@ <select id="getAVGValueByMacAndTimeslot" resultType="java.util.Map"> SELECT AVG(JSON_EXTRACT(value,'$.e1[0]')) e1,AVG(JSON_EXTRACT(value,'$.e2[0]')) e2,AVG(JSON_EXTRACT(value,'$.e10[0]')) e10,AVG(JSON_EXTRACT(value,'$.e11[0]')) e11,AVG(JSON_EXTRACT(value,'$.e16[0]')) e16,AVG(JSON_EXTRACT(value,'$.e15[0]')) e15 - FROM history + FROM history_${timeUnits} WHERE mac = #{mac} - AND time BETWEEN #{starttime} AND #{endtime} + AND time >= #{starttime} + AND time <![CDATA[<]]> #{endtime} </select> <!-- ���������sensor������������ --> @@ -196,7 +197,7 @@ <select id="getAVGSensorRankByMonitorPointIdList" resultType="java.util.Map"> SELECT mp.name, AVG(JSON_EXTRACT(h.value,'$.${sensor}[0]')) sensor - FROM device d, history h, monitor_point mp + FROM device d, history_${timeUnits} h, monitor_point mp WHERE d.mac=h.mac And mp.id=d.monitor_point_id AND d.monitor_point_id IN @@ -210,10 +211,11 @@ <select id="getMonitorPointAVGValueByMonitorPointIdAndTimeslot" resultType="java.util.Map"> SELECT AVG(JSON_EXTRACT(value,'$.e1[0]')) e1,AVG(JSON_EXTRACT(value,'$.e2[0]')) e2,AVG(JSON_EXTRACT(value,'$.e10[0]')) e10,AVG(JSON_EXTRACT(value,'$.e11[0]')) e11,AVG(JSON_EXTRACT(value,'$.e16[0]')) e16,AVG(JSON_EXTRACT(value,'$.e15[0]')) e15 - FROM device d,history h + FROM device d,history_${timeUnits} h WHERE d.monitor_point_id = #{monitor_point_id} AND d.mac = h.mac - AND h.time BETWEEN #{starttime} AND #{endtime} + AND h.time >= #{starttime} + AND h.time <![CDATA[<]]> #{endtime} </select> <!-- ���������sensor������ --> @@ -292,14 +294,15 @@ select `json` from ${table} where time = #{time} and mac = #{mac} </select> + <select id="getValueByMacAndTime" resultType="java.lang.String"> - select `value` from history + select `value` from history_${timeUnits} where mac = #{mac} and time >= #{time1} and time <=#{time} limit 0,1 </select> <select id="getDailyAvgData" resultType="java.util.Map"> SELECT AVG(hd.json->"$.e1[0]") as `PM2_5`,AVG(hd.json->"$.e2[0]") as 'PM10',AVG(hd.json->"$.e10[0]") as 'CO', - AVG(hd.json->"$.e11[0]") as 'SO2',AVG(hd.json->"$.e16[0]") as 'NO2',AVG(hd.json->"$.e15[0]") as 'O3-day' + AVG(hd.json->"$.e11[0]") as 'SO2',AVG(hd.json->"$.e16[0]") as 'NO2',AVG(hd.json->"$.e15[0]") as 'O3_day' FROM `history_daily` hd,monitor_point mt,device d where mt.id=d.monitor_point_id and d.mac=hd.mac and mt.id=#{mId} and time=#{time} </select> diff --git a/src/main/resources/mapper/SensorMapper.xml b/src/main/resources/mapper/SensorMapper.xml index be66b3f..74a078e 100644 --- a/src/main/resources/mapper/SensorMapper.xml +++ b/src/main/resources/mapper/SensorMapper.xml @@ -137,6 +137,15 @@ AND d.id = #{id} </select> + <select id="getSensorByDId" resultType="java.util.Map"> + SELECT DISTINCT d.monitor_point_id,s.* + FROM device d,device_version dv,device_version_sensor dvs,sensor s + WHERE d.device_version_id = dvs.device_version_id + AND dvs.sensor_id = s.id + AND d.id = #{id} + </select> + + <select id="getSensorByMonitorPointId" resultType="java.util.Map"> SELECT DISTINCT s.sensor_key sensorKey,s.unit,s.name,s.description,s.id FROM device d,device_version dv,device_version_sensor dvs,sensor s -- Gitblit v1.8.0