screen-api/src/main/java/com/moral/api/controller/DeviceController.java
@@ -144,7 +144,7 @@ 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); List<Map<String, Object>> response = deviceService.getTrendChartDataV2(params); return ResultMessage.ok(response); } } screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java
@@ -97,4 +97,21 @@ return ResultMessage.ok(response); } /** *@Description: 监测站点数据显示导出 *@Param: [request] *@return: com.moral.constant.ResultMessage *@Author: lizijie *@Date: 2022-10-10 14:00 **/ @GetMapping("getHourlyDataByMonitorPoint") public ResultMessage getHourlyDataByMonitorPoint(HttpServletRequest request) { Map<String, Object> params = WebUtils.getParametersStartingWith(request, null); if (!params.containsKey("monitorPointId") || !params.containsKey("sensors") || !params.containsKey("startTime") || !params.containsKey("endTime")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } List<Map<String, Object>> resultList = monitorPointService.getHourlyDataByMonitorPoint(params); return ResultMessage.ok(resultList); } } screen-api/src/main/java/com/moral/api/controller/SensorController.java
New file @@ -0,0 +1,45 @@ package com.moral.api.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.moral.api.entity.Group; import com.moral.api.service.GroupService; import com.moral.api.service.SensorService; import com.moral.api.service.UserGroupService; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; import com.moral.util.PageResult; import com.moral.util.WebUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @Slf4j @Api(tags = {"组管理"}) @RestController @RequestMapping("/sensor") public class SensorController { @Resource private SensorService sensorService; @GetMapping(value = "getSensorsByMonitorPointIds") private ResultMessage getSensorsByMonitorPointIds(HttpServletRequest request) { Map<String, Object> params = WebUtils.getParametersStartingWith(request, null); if (ObjectUtils.isEmpty(params.get("monitorPointIds"))){ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } List<Map<String, Object>> sensors = sensorService.getSensorsByMonitorPointIds(params); return ResultMessage.ok(sensors); } } screen-api/src/main/java/com/moral/api/mapper/SensorMapper.java
@@ -3,6 +3,9 @@ import com.moral.api.entity.Sensor; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; import java.util.Map; /** * <p> * Mapper 接口 @@ -13,4 +16,5 @@ */ public interface SensorMapper extends BaseMapper<Sensor> { List<Map<String, Object>> getSensorByVersionIds(List versionIds); } screen-api/src/main/java/com/moral/api/service/MonitorPointService.java
@@ -5,6 +5,7 @@ import com.moral.api.pojo.form.device.MonitorPointQueryForm; import java.util.List; import java.util.Map; /** * <p> @@ -34,6 +35,7 @@ */ List<MonitorPoint> queryAllMonitorPoints(Integer organizationId); List<Map<String, Object>> getHourlyDataByMonitorPoint(Map map); } screen-api/src/main/java/com/moral/api/service/SensorService.java
@@ -3,6 +3,9 @@ import com.moral.api.entity.Sensor; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; import java.util.Map; /** * <p> * 服务类 @@ -13,4 +16,6 @@ */ public interface SensorService extends IService<Sensor> { Sensor getSensorByCode(String code); List<Map<String, Object>> getSensorsByMonitorPointIds(Map map); } screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java
@@ -1,27 +1,30 @@ package com.moral.api.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.Device; import com.moral.api.entity.MonitorPoint; import com.moral.api.entity.Organization; import com.moral.api.entity.*; import com.moral.api.mapper.DeviceMapper; import com.moral.api.mapper.MonitorPointMapper; import com.moral.api.mapper.SensorMapper; import com.moral.api.pojo.form.device.MonitorPointQueryForm; import com.moral.api.service.DeviceService; import com.moral.api.service.HistoryHourlyService; import com.moral.api.service.MonitorPointService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.service.OrganizationService; import com.moral.constant.Constants; import com.moral.util.DateUtils; import com.moral.util.RegionCodeUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.unit.DataUnit; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.*; /** * <p> @@ -40,6 +43,15 @@ OrganizationService organizationService; @Autowired DeviceService deviceService; @Autowired DeviceMapper deviceMapper; @Autowired SensorMapper sensorMapper; @Autowired HistoryHourlyService historyHourlyService; @Override public List<MonitorPoint> queryByOrgIdAndRegionCode(MonitorPointQueryForm form) { @@ -95,6 +107,60 @@ return monitorPoints; } @Override public List<Map<String, Object>> getHourlyDataByMonitorPoint(Map map) { int monitorPointId = Integer.parseInt(map.get("monitorPointId").toString()); QueryWrapper<MonitorPoint> monitorPointQueryWrapper = new QueryWrapper<>(); monitorPointQueryWrapper.eq("is_delete",Constants.NOT_DELETE); monitorPointQueryWrapper.eq("id",monitorPointId); MonitorPoint monitorPoint = monitorPointMapper.selectOne(monitorPointQueryWrapper); QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>(); deviceQueryWrapper.eq("is_delete",Constants.NOT_DELETE); deviceQueryWrapper.eq("monitor_point_id",monitorPointId); List<Device> devices = deviceMapper.selectList(deviceQueryWrapper); if (devices.size()<=0){ return null; } String[] sensors = map.remove("sensors").toString().split(","); List<String> sensorsList = Arrays.asList(sensors); String startTime = map.get("startTime").toString(); String endTime = map.get("endTime").toString(); Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_HH_EN); Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_HH_EN); List<Map<String,Object>> resultList = new ArrayList<>(); for (Device device:devices) { List<HistoryHourly> hourlies = historyHourlyService.getValueByMacAndTime(device.getMac(), DateUtils.getDate(map.get("startTime").toString(), DateUtils.yyyy_MM_dd_HH_EN), DateUtils.getDate(map.get("endTime").toString(), DateUtils.yyyy_MM_dd_HH_EN)); for (String sensor:sensorsList) { Map<String, Object> timeValueMap = new LinkedHashMap<>();//key为time,value为数据的json timeValueMap.put("监测站点",monitorPoint.getName()); timeValueMap.put("name",device.getName()); QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); sensorQueryWrapper.eq("is_delete",Constants.NOT_DELETE); sensorQueryWrapper.eq("code",sensor); Sensor sensorEntity = sensorMapper.selectOne(sensorQueryWrapper); timeValueMap.put("sensor",sensorEntity.getName()); for (HistoryHourly historyHourly : hourlies) { Date time = historyHourly.getTime(); String dateStr = DateUtils.dateToDateString(time, "yyyy-MM-dd HH"); String value = historyHourly.getValue(); JSONObject jsonObject = JSONObject.parseObject(value); if (jsonObject.containsKey(sensor)){ timeValueMap.put(dateStr, jsonObject.get(sensor).toString()); } } //补上无数据时间 Date middleDate = startDate; while (DateUtils.compareDateStr(DateUtils.dateToDateString(endDate,DateUtils.yyyy_MM_dd_HH_EN),DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN),DateUtils.yyyy_MM_dd_HH_EN)<=0){ if (timeValueMap.get(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN)) == null) timeValueMap.put(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN), null); middleDate = DateUtils.addHours(middleDate,1); } resultList.add(timeValueMap); } } return resultList; } } screen-api/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java
@@ -1,7 +1,9 @@ package com.moral.api.service.impl; 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.mapper.SensorMapper; import com.moral.api.service.SensorService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -10,6 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> @@ -27,6 +34,9 @@ @Autowired RedisTemplate redisTemplate; @Autowired private DeviceMapper deviceMapper; @Override public Sensor getSensorByCode(String code) { Sensor sensor = (Sensor) redisTemplate.opsForHash().get(RedisConstants.SENSOR_KEY, code); @@ -35,6 +45,21 @@ return sensor; } @Override public List<Map<String, Object>> getSensorsByMonitorPointIds(Map map) { String monitorPointIdsStr = map.get("monitorPointIds").toString(); String[] monitorPointIdsArr = monitorPointIdsStr.split(","); List<String> monitorPointIdsList = Arrays.asList(monitorPointIdsArr); QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>(); deviceQueryWrapper.eq("is_delete", Constants.NOT_DELETE); deviceQueryWrapper.in("monitor_point_id", monitorPointIdsList); List<Device> devices = deviceMapper.selectList(deviceQueryWrapper); List<Integer> versionIds = devices.stream().map(Device::getDeviceVersionId).collect(Collectors.toList()); versionIds = versionIds.stream().distinct().collect(Collectors.toList()); List<Map<String, Object>> sensors = sensorMapper.getSensorByVersionIds(versionIds); return sensors; } private Sensor getSensorByCodeFromDb(String code) { QueryWrapper<Sensor> wrapper = new QueryWrapper<>(); screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
@@ -74,7 +74,7 @@ orgIds.add(orgId); QueryWrapper<SpecialDeviceHistory> queryWrapper = new QueryWrapper<>(); queryWrapper.select("mac", "name") .eq("special_type", Constants.SPECIAL_DEVICE_CRUISER) //.eq("special_type", Constants.SPECIAL_DEVICE_CRUISER) .eq("is_delete", Constants.NOT_DELETE) .in("organization_id", orgIds); return specialDeviceHistoryService.listMaps(queryWrapper); screen-api/src/main/resources/mapper/SensorMapper.xml
@@ -15,5 +15,14 @@ <result column="update_time" property="updateTime" /> <result column="is_delete" property="isDelete" /> </resultMap> <select id="getSensorByVersionIds" resultType="java.util.Map"> select DISTINCT s.code, s.name from version_sensor_unit vsu, sensor s where s.code = vsu.sensor_code and vsu.version_id in <foreach collection="versionIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </select> </mapper>