From dce0021131e955bac968cb2a7e24ce3673eb1a3b Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Mon, 02 Aug 2021 17:22:15 +0800 Subject: [PATCH] 监测因子趋势图 --- screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 134 +++++++++++++++++++++++++-------- screen-api/src/main/java/com/moral/api/pojo/form/device/MonitorPointQueryForm.java | 2 screen-api/src/main/java/com/moral/api/service/DeviceService.java | 4 screen-api/src/main/java/com/moral/api/controller/WebController.java | 37 +++++---- screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java | 23 ++++- screen-common/src/main/java/com/moral/constant/Constants.java | 5 + screen-api/src/main/resources/mapper/DeviceMapper.xml | 7 + 7 files changed, 150 insertions(+), 62 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/controller/WebController.java b/screen-api/src/main/java/com/moral/api/controller/WebController.java index 6a3caac..0345043 100644 --- a/screen-api/src/main/java/com/moral/api/controller/WebController.java +++ b/screen-api/src/main/java/com/moral/api/controller/WebController.java @@ -10,6 +10,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -26,9 +28,10 @@ /** * web��������� - * @author moral - * @version v1.0 - * */ + * + * @author moral + * @version v1.0 + */ @Slf4j @Api(tags = {"web���������"}) @RestController @@ -53,7 +56,7 @@ /** * @param request ������������ * @return ������������������������������������ - * */ + */ @GetMapping("getHourlyAqi") @ApiOperation(value = "���������������AQI", notes = "���������������AQI") @ApiImplicitParams(value = { @@ -72,7 +75,7 @@ /** * @param request ������������ * @return ������������������������������������ - * */ + */ @GetMapping("getMonthAvg") @ApiOperation(value = "������������������������������������", notes = "������������������������������������") @ApiImplicitParams(value = { @@ -92,7 +95,7 @@ /** * @param request ������������ * @return ������������������������������������ - * */ + */ @GetMapping("getWindData") @ApiOperation(value = "������������������", notes = "������������������") @ApiImplicitParams(value = { @@ -113,38 +116,38 @@ /** * @param request ������������ * @return ������������������������������������ - * */ + */ @GetMapping("getMacSensors") - @ApiOperation(value = "������mac������������������������", notes = "������mac������������������������") + @ApiOperation(value = "������������mac������������������", notes = "������������mac������������������") @ApiImplicitParams(value = { @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"), - @ApiImplicitParam(name = "mac", value = "������mac", required = true, paramType = "query", dataType = "String") + @ApiImplicitParam(name = "macs", value = "������mac���������������������", required = true, paramType = "query", dataType = "String") }) public ResultMessage getMacSensors(HttpServletRequest request) { Map<String, Object> params = WebUtils.getParametersStartingWith(request, null); - if (!params.containsKey("mac")) { + if (!params.containsKey("macs")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } - Map<String, Object> response = deviceService.getSensorsByMac(params.get("mac").toString()); + Map<String, Object> response = deviceService.getSensorsByMac(params); return ResultMessage.ok(response); } /** * @param request ������������ * @return ������������������������������������ - * */ + */ @GetMapping("getTrendChartData") - @ApiOperation(value = "���������������������������������", notes = "���������������������������������") + @ApiOperation(value = "���������������������������������", notes = "���������������������������������.") @ApiImplicitParams(value = { @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"), - @ApiImplicitParam(name = "mac", value = "������mac", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "macs", value = "������mac���������������������", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sensorCode", value = "������code", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "type", value = "���������������������day���,������month���,������year���", required = true, paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "time", value = "������������", required = true, paramType = "query", dataType = "String") + @ApiImplicitParam(name = "times", value = "���������������������2021-07-29������������2021-07������������2021������������������������", required = true, paramType = "query", dataType = "String") }) public ResultMessage getTrendChartData(HttpServletRequest request) { Map<String, Object> params = WebUtils.getParametersStartingWith(request, null); - if (!params.containsKey("mac") || !params.containsKey("sensorCode") || !params.containsKey("type") || !params.containsKey("time")) { + if (!params.containsKey("macs") || !params.containsKey("sensorCode") || !params.containsKey("type") || !params.containsKey("times")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } List<Map<String, Object>> response = deviceService.getTrendChartData(params); @@ -154,7 +157,7 @@ /** * @param request ������������ * @return ������������������������������������ - * */ + */ @GetMapping("getMapPath") @ApiOperation(value = "������������������������������", notes = "������������������������������") @ApiImplicitParams(value = { diff --git a/screen-api/src/main/java/com/moral/api/pojo/form/device/MonitorPointQueryForm.java b/screen-api/src/main/java/com/moral/api/pojo/form/device/MonitorPointQueryForm.java index 0214317..30e163c 100644 --- a/screen-api/src/main/java/com/moral/api/pojo/form/device/MonitorPointQueryForm.java +++ b/screen-api/src/main/java/com/moral/api/pojo/form/device/MonitorPointQueryForm.java @@ -25,7 +25,7 @@ Integer regionCode; public boolean valid(){ - if(ObjectUtils.isEmpty(organizationId)||ObjectUtils.isEmpty(regionCode)) + if(ObjectUtils.isEmpty(organizationId)) return false; return true; } diff --git a/screen-api/src/main/java/com/moral/api/service/DeviceService.java b/screen-api/src/main/java/com/moral/api/service/DeviceService.java index bcdb8e4..0e18dd2 100644 --- a/screen-api/src/main/java/com/moral/api/service/DeviceService.java +++ b/screen-api/src/main/java/com/moral/api/service/DeviceService.java @@ -19,8 +19,8 @@ //������������id������������������ List<Device> getDevicesByMonitorPointId(Integer monitorPointId); - //������mac������������������ - Map<String, Object> getSensorsByMac(String mac); + //������macs������������������������ + Map<String, Object> getSensorsByMac(Map<String,Object> params); //��������������������������������� List<Map<String, Object>> getTrendChartData(Map<String,Object> params); diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java index 2995c31..a67255f 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java @@ -1,12 +1,13 @@ package com.moral.api.service.impl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.Device; import com.moral.api.entity.Sensor; import com.moral.api.mapper.DeviceMapper; import com.moral.api.service.DeviceService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.moral.api.service.HistoryHourlyService; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.util.DateUtils; @@ -16,9 +17,18 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.TreeMap; +import java.util.stream.Collectors; /** * <p> @@ -42,49 +52,107 @@ QueryWrapper<Device> wrapper = new QueryWrapper(); wrapper.eq("monitor_point_id",monitorPointId); wrapper.eq("is_delete", Constants.NOT_DELETE); - List<Device> devices = deviceMapper.selectList(wrapper); - return devices; + return deviceMapper.selectList(wrapper); } @Override - public Map<String, Object> getSensorsByMac(String mac) { - //���redis��������������������������� - Device device = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac); - List<Sensor> sensors = device.getVersion().getSensors(); - Map<String, Object> result = new HashMap<>(); - for (Sensor sensor : sensors) { - String sensorCode = sensor.getCode(); - String name = sensor.getName(); - result.put(sensorCode, name); + public Map<String, Object> getSensorsByMac(Map<String, Object> params) { + String[] macs = params.get("macs").toString().split(","); + List<Map<String, Object>> elementLists = new ArrayList<>(); + + for (String mac : macs) { + //���redis��������������������������� + Device device = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac); + List<Sensor> sensors = device.getVersion().getSensors(); + Map<String, Object> map = new HashMap<>(); + for (Sensor sensor : sensors) { + String sensorCode = sensor.getCode(); + String name = sensor.getName(); + map.put(sensorCode, name); + } + elementLists.add(map); } - return result; + + Map<String, Object> map = elementLists.parallelStream() + .filter(elementList -> elementList.size() != 0) + .reduce((a, b) -> { + a.keySet().retainAll(b.keySet()); + return a; + }).orElse(new HashMap<>()); + return map; } @Override public List<Map<String, Object>> getTrendChartData(Map<String, Object> params) { Object type = params.get("type"); - String start = params.remove("time").toString(); + //������mac + String[] macs = params.remove("macs").toString().split(","); + //������������ + String[] times = params.remove("times").toString().split(","); + //������code + String sensorCode = params.get("sensorCode").toString(); String end; String timeUnits; String dateFormat; - if ("day".equals(type)) { - end = DateUtils.getDateAddDay(start, 1); - timeUnits = "hourly"; - dateFormat = "%H"; - } else if ("month".equals(type)) { - end = DateUtils.getDateAddMonth(start, 1); - timeUnits = "daily"; - dateFormat = "%d"; - } else { - end = DateUtils.getDateAddYear(start, 1); - timeUnits = "monthly"; - dateFormat = "%m"; - } - params.put("dateFormat", dateFormat); - params.put("timeUnits", timeUnits); - params.put("start", start); - params.put("end", end); - return deviceMapper.getTrendChartData(params); - } + //���������������,time=data + List<Map<String, Object>> result = new ArrayList<>(); + + for (String start : times) { + Map<String, Object> resultMap = new HashMap<>(); + + if ("day".equals(type)) { + end = DateUtils.getDateAddDay(start, 1); + timeUnits = "hourly"; + dateFormat = "%k"; + } else if ("month".equals(type)) { + end = DateUtils.getDateAddMonth(start, 1); + timeUnits = "daily"; + dateFormat = "%e"; + } else { + end = DateUtils.getDateAddYear(start, 1); + timeUnits = "monthly"; + dateFormat = "%c"; + } + params.put("timeUnits", timeUnits); + params.put("dateFormat", dateFormat); + params.put("start", start); + params.put("end", end); + params.put("macs", macs); + //��������������������������������� + List<Map<String, Object>> list = deviceMapper.getTrendChartData(params); + + //���time������ + Map<String, List<Map<String, Object>>> data = list.parallelStream() + .collect(Collectors.groupingBy(o -> o.get("time").toString())); + + //TreeMap<String, List<Map<String, Object>>> data = new TreeMap<>(listMap); + + for (Map.Entry<String, List<Map<String, Object>>> entry : data.entrySet()) { + List<Object> values = new ArrayList<>(); + String time = entry.getKey(); + List<Map<String, Object>> value = entry.getValue(); + if (value.isEmpty()) { + continue; + } + for (String mac : macs) { + boolean flag = false; + for (Map<String, Object> map : value) { + if (mac.equals(map.get("mac"))) { + Object o = map.get(sensorCode); + values.add(o); + flag = true; + break; + } + } + if (!flag) { + values.add(""); + } + } + resultMap.put(time, values); + } + result.add(resultMap); + } + return result; + } } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java index 9c85cc5..0837c4a 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java @@ -12,6 +12,7 @@ import com.moral.api.service.OrganizationService; import com.moral.constant.Constants; import com.moral.util.RegionCodeUtils; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,7 +21,7 @@ /** * <p> - * ��������������� + * ��������������� * </p> * * @author moral @@ -41,7 +42,11 @@ //������ Integer organizationId = form.getOrganizationId(); Integer regionCode = form.getRegionCode(); - String region = RegionCodeUtils.regionCodeConvertToName(regionCode); + String region = null; + if (regionCode != null) { + region = RegionCodeUtils.regionCodeConvertToName(regionCode); + } + //��������������� List<Organization> childrenOrganization = organizationService.getChildrenOrganizationsById(organizationId); List<Integer> organizationIds = new ArrayList<>(); @@ -51,8 +56,12 @@ organizationIds.add(organizationId); //������������ QueryWrapper<MonitorPoint> queryMonitorPointsWrapper = new QueryWrapper<>(); - queryMonitorPointsWrapper.eq(region,regionCode); - queryMonitorPointsWrapper.in("organization_id",organizationIds); + + //������region������������������������������������������������������������������������������ + if (region != null){ + queryMonitorPointsWrapper.eq(region, regionCode); + } + queryMonitorPointsWrapper.in("organization_id", organizationIds); queryMonitorPointsWrapper.eq("is_delete", Constants.NOT_DELETE); List<MonitorPoint> monitorPoints = monitorPointMapper.selectList(queryMonitorPointsWrapper); //��������������������������� @@ -69,9 +78,9 @@ Organization stateControlStationOrganization = organizationService.getStateControlStation(); //��������������������������������������� QueryWrapper<MonitorPoint> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("is_delete",Constants.NOT_DELETE); - queryWrapper.eq("organization_id",stateControlStationOrganization.getId()); - queryWrapper.eq(RegionCodeUtils.regionCodeConvertToName(regionCode),regionCode); + queryWrapper.eq("is_delete", Constants.NOT_DELETE); + queryWrapper.eq("organization_id", stateControlStationOrganization.getId()); + queryWrapper.eq(RegionCodeUtils.regionCodeConvertToName(regionCode), regionCode); return monitorPointMapper.selectList(queryWrapper); } } diff --git a/screen-api/src/main/resources/mapper/DeviceMapper.xml b/screen-api/src/main/resources/mapper/DeviceMapper.xml index 94cde21..5c54941 100644 --- a/screen-api/src/main/resources/mapper/DeviceMapper.xml +++ b/screen-api/src/main/resources/mapper/DeviceMapper.xml @@ -28,11 +28,14 @@ <!--���������������������������--> <select id="getTrendChartData" resultType="java.util.Map"> - SELECT + SELECT mac, DATE_FORMAT(`time`,#{dateFormat}) AS `time`, `value`->'$.${sensorCode}' AS '${sensorCode}' FROM history_${timeUnits} - WHERE mac = #{mac} + WHERE mac IN + <foreach collection="macs" item="mac" index="index" open="(" close=")" separator=","> + #{mac} + </foreach> AND `time` <![CDATA[>=]]> #{start} AND `time` <![CDATA[<]]> #{end} ORDER BY `time` diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java index 246e402..00a8cc3 100644 --- a/screen-common/src/main/java/com/moral/constant/Constants.java +++ b/screen-common/src/main/java/com/moral/constant/Constants.java @@ -120,6 +120,11 @@ public static final String UN_ADJUST = "unadjust"; /* + * ��������������� + * */ + public static final String TRANSITION = "transition"; + + /* * ��������������������� * */ public static final String DEVICE_STATE_OFFLINE = "0"; -- Gitblit v1.8.0