src/main/java/com/moral/controller/WebController.java
@@ -5,10 +5,7 @@ import com.moral.common.exception.WebAuthException; import com.moral.common.util.*; import com.moral.common.webAnno.UserLoginToken; import com.moral.entity.AreaNames; import com.moral.entity.Device; import com.moral.entity.MonitorPoint; import com.moral.entity.Organization; import com.moral.entity.*; import com.moral.service.*; import com.moral.util.DateUtil; import com.moral.util.LatLngTransformation; @@ -19,6 +16,7 @@ import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -34,6 +32,18 @@ @CrossOrigin(origins = "*", maxAge = 3600) @SuppressWarnings({"rawtypes", "unchecked", "unused"}) public class WebController { private static Map<String, Sensor> sensors; @PostConstruct public void init() { sensors = new HashMap<>(); List<Sensor> allSensors = sensorService.getAllSensors(); for (Sensor sensor : allSensors) { sensors.put(sensor.getSensorKey(), sensor); } } @Resource AccountService accountService; @Resource @@ -49,6 +59,12 @@ MonitorPointService monitorPointService; @Resource DeviceService deviceService; @Resource HistoryFiveMinutelyService historyFiveMinutelyService; @Resource SensorService sensorService; @Resource OrganizationSensorsService organizationSensorsService; @UserLoginToken @@ -256,26 +272,89 @@ parameters.put("time",time); parameters.put("yearAndMonth",yearAndMonth); parameters.put("macs",macs); List<Map<String, Object>> datas = historyMinutelyService.getFiveMinutesDataByMacsAndTime(parameters); List<Map<String, Object>> datas = historyFiveMinutelyService.getFiveMinutesDataByMacsAndTime(parameters); //如果当前五分钟数据还没有插入,则提取前五分钟数据返回 if(ObjectUtils.isEmpty(datas)){ try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(time); date = DateUtil.rollMinute(date, -5); time = sdf.format(date); time = getFiveMinuteAgoTime(time); parameters.put("time",time); datas = historyMinutelyService.getFiveMinutesDataByMacsAndTime(parameters); } catch (ParseException e) { e.printStackTrace(); datas = historyFiveMinutelyService.getFiveMinutesDataByMacsAndTime(parameters); } } datas = insertDeviceInfo(datas,devices); return new ResultBean<List<Map<String, Object>>>(datas); } @GetMapping("fiveMinuteAvgDataByMac") public ResultBean<Map<String, Object>> fiveMinuteAvgDataByMac(HttpServletRequest request) { //获取参数,mac号 Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null); if ((!parameters.containsKey("mac"))) return ResultBean.fail("参数为null"); String mac = (String) parameters.get("mac"); //根据mac获取orgId String orgId = monitorPointService.getOrgIdByMac(mac); //判断是否特殊定制客户,如果为特殊定制客户则选取特定参数 Map<String, Object> specialSensors = organizationSensorsService.getSensorsByOrgId(orgId); if (ObjectUtils.isEmpty(specialSensors)) { List<String> sensorKeys = sensorService.getSensorKeys(); parameters.put("sensorKeys", sensorKeys); } else { String sensorKeys = (String) specialSensors.get("sensors"); sensorKeys.trim(); sensorKeys = sensorKeys.substring(1, sensorKeys.length() - 1); parameters.put("sensorKeys", Arrays.asList(sensorKeys.split(","))); } //设置查询参数 Map<String, Object> timeAndYearMonth = getTimeAndYearMonthForFiveMinuteData(); String time = (String) timeAndYearMonth.get("time"); String yearAndMonth = (String) timeAndYearMonth.get("yearAndMonth"); parameters.put("time", time); parameters.put("yearAndMonth", yearAndMonth); parameters.put("mac", mac); Map<String, Object> datas = historyFiveMinutelyService.getFiveMinutesDataByMac(parameters); //如果当前五分钟数据还没有插入,则提取前五分钟数据返回 if (ObjectUtils.isEmpty(datas)) { time = getFiveMinuteAgoTime(time); parameters.put("time", time); datas = historyFiveMinutelyService.getFiveMinutesDataByMac(parameters); } //去除无效参数 datas.values().removeIf((value) -> { return ObjectUtils.isEmpty(value) || value.equals("[0, 0, 0]"); }); //添加设备名称 Map<String, Object> sortDatas = new LinkedHashMap<>(); Device device = deviceService.getDeviceByMac(mac, true); sortDatas.put("名称", device.getName()); //参数转换中文 datas.forEach((key, value) -> { Sensor sensor = sensors.get(key); if (!ObjectUtils.isEmpty(sensor)) { String unit = ObjectUtils.isEmpty(sensor.getUnit()) ? "" : (String) sensor.getUnit(); String str = (String) value; str.trim(); str = str.substring(1, str.length() - 1); sortDatas.put(sensor.getName(), Arrays.asList(str.split(",")).get(0) + unit); } }); sortDatas.put("时间", time); return new ResultBean<Map<String, Object>>(sortDatas); } /** * @Description: 返回结果添加设备经纬度以及state @@ -321,11 +400,10 @@ if (endMinute >= 6||endMinute==0) {//分钟结尾如果是 6 7 8 9 0 比如12:16,12:20进入, 则获取12:10-12:15的数据 date = DateUtil.rollMinute(date, -1); StringBuilder time = new StringBuilder(sdf.format(date)); startTime = time.replace(15, 19, "0:00").toString(); }else {// 分钟结尾如果是1 2 3 4 5 则获取上个五分钟数据 比如12:11分钟进入 则获取12:05-12:10的数据 date = DateUtil.rollMinute(date, -9); StringBuilder time = new StringBuilder(sdf.format(date)); startTime = time.replace(15, 19, "5:00").toString(); } else {// 分钟结尾如果是1 2 3 4 5 则获取上个五分钟数据 比如12:11分钟进入 则获取12:05-12:10的数据 StringBuilder time = new StringBuilder(sdf.format(date)); startTime = time.replace(15, 19, "0:00").toString(); } year = DateUtil.getYear(date); @@ -337,5 +415,24 @@ } /** * @Description: 根据传入时间获取五分钟前的数据并且格式化 * @Param: [time] * @return: java.lang.String * @Author: 下雨听风 * @Date: 2020/10/20 */ public String getFiveMinuteAgoTime(String time) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(time); date = DateUtil.rollMinute(date, -5); time = sdf.format(date); return time; } catch (ParseException e) { return null; } } } src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java
@@ -1,8 +1,12 @@ package com.moral.mapper; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public interface HistoryFiveMinutelyMapper { List<Map<String,Object>> getFiveMinutesDataByMacsAndTime(Map<String,Object> parameters); Map<String,Object> getFiveMinutesDataByMac(Map<String,Object> parameters); } src/main/java/com/moral/mapper/MonitorPointMapper.java
@@ -46,4 +46,6 @@ List<Integer> getMonitorPointIds(Map<String, Object> params); List<MonitorPoint> byCodeGetMonitor(Map<String, Object> params); String getOrgIdByMac(String mac); } src/main/java/com/moral/mapper/OrganizationSensorsMapper.java
New file @@ -0,0 +1,7 @@ package com.moral.mapper; import java.util.Map; public interface OrganizationSensorsMapper { Map<String,Object> getSensorsByOrgId(String orgId); } src/main/java/com/moral/mapper/SensorMapper.java
@@ -32,4 +32,6 @@ List<Sensor> getSensorsInfoByMac(@Param("mac") String mac); List<Sensor> selectSenosrsByOrgId(Map<String, Object> parameters); List<String> getSensorKeys(); } src/main/java/com/moral/service/HistoryFiveMinutelyService.java
New file @@ -0,0 +1,10 @@ package com.moral.service; import java.util.List; import java.util.Map; public interface HistoryFiveMinutelyService { List<Map<String, Object>> getFiveMinutesDataByMacsAndTime(Map<String, Object> parameters); Map<String,Object> getFiveMinutesDataByMac(Map<String, Object> parameters); } src/main/java/com/moral/service/HistoryMinutelyService.java
@@ -38,7 +38,6 @@ List<Map<String, Object>> getMultiDeviceSensorData(Map<String, Object> parameters) throws Exception; List<Map<String, Object>> getFiveMinutesDataByMacsAndTime(Map<String, Object> parameters); List<Map<String, Object>> getDevicesSensorsToExcel(Map<String, Object> parameters); src/main/java/com/moral/service/MonitorPointService.java
@@ -56,4 +56,6 @@ List<MonitorPoint> getMonitorPointListByAccountId(int id); MonitorPoint byIdGetMonitorPoint(int id); String getOrgIdByMac(String mac); } src/main/java/com/moral/service/OrganizationSensorsService.java
New file @@ -0,0 +1,7 @@ package com.moral.service; import java.util.Map; public interface OrganizationSensorsService { Map<String,Object> getSensorsByOrgId(String orgId); } src/main/java/com/moral/service/SensorService.java
@@ -43,4 +43,7 @@ List<List<Map<String, Object>>> listExcelDatas(List<List<String>> sensorInfos, List<Map<String, Object>> list); List<String> getSensorKeys(); } src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java
New file @@ -0,0 +1,30 @@ package com.moral.service.impl; import com.moral.common.util.ValidateUtil; import com.moral.mapper.HistoryFiveMinutelyMapper; import com.moral.service.HistoryFiveMinutelyService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Map; @Service public class HistoryFiveMinutelyServiceImpl implements HistoryFiveMinutelyService { @Resource HistoryFiveMinutelyMapper historyFiveMinutelyMapper; @Override public List<Map<String, Object>> getFiveMinutesDataByMacsAndTime(Map<String, Object> parameters) { ValidateUtil.notNull(parameters,"查询五分钟数据参数为空"); return historyFiveMinutelyMapper.getFiveMinutesDataByMacsAndTime(parameters); } @Override public Map<String, Object> getFiveMinutesDataByMac(Map<String, Object> parameters) { ValidateUtil.notNull(parameters,"查询五分钟数据参数为空"); return historyFiveMinutelyMapper.getFiveMinutesDataByMac(parameters); } } src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -105,14 +105,7 @@ @Resource private MonitorPointMapper monitorPointMapper; @Resource HistoryFiveMinutelyMapper historyFiveMinutelyMapper; @Override public List<Map<String, Object>> getFiveMinutesDataByMacsAndTime(Map<String, Object> parameters) { ValidateUtil.notNull(parameters,"查询五分钟数据参数为空"); return historyFiveMinutelyMapper.getFiveMinutesDataByMacsAndTime(parameters); } @Override public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) { src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
@@ -824,5 +824,10 @@ return monitorPointMapper.byIdGetMonitorPoint(id); } @Override public String getOrgIdByMac(String mac) { return monitorPointMapper.getOrgIdByMac(mac); } } src/main/java/com/moral/service/impl/OrganizationSensorsServiceImpl.java
New file @@ -0,0 +1,19 @@ package com.moral.service.impl; import com.moral.mapper.OrganizationSensorsMapper; import com.moral.service.OrganizationSensorsService; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.util.Map; @Service public class OrganizationSensorsServiceImpl implements OrganizationSensorsService { @Resource OrganizationSensorsMapper organizationSensorsMapper; @Override public Map<String, Object> getSensorsByOrgId(String orgId) { return ObjectUtils.isEmpty(orgId)?null:organizationSensorsMapper.getSensorsByOrgId(orgId); } } src/main/java/com/moral/service/impl/SensorServiceImpl.java
@@ -245,4 +245,9 @@ return sheets; } @Override public List<String> getSensorKeys() { return sensorMapper.getSensorKeys(); } } src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
@@ -9,4 +9,15 @@ #{mac} </foreach> </select> <select id="getFiveMinutesDataByMac" resultType="java.util.LinkedHashMap"> select <foreach collection="sensorKeys" separator="," item="sensorKey"> json->'$.${sensorKey}' AS '${sensorKey}' </foreach> FROM history_five_minutely_${yearAndMonth} h where h.time = #{time} and h.mac = #{mac} </select> </mapper> src/main/resources/mapper/MonitorPointMapper.xml
@@ -219,4 +219,10 @@ province_code = #{provinceCode} </if> </select> <select id="getOrgIdByMac" resultType="String"> SELECT m.`organization_id` orgId FROM monitor_point m JOIN device d ON d.`monitor_point_id` = m.`id` AND d.`mac`= #{mac} </select> </mapper> src/main/resources/mapper/OrganizationSensorsMapper.xml
New file @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.moral.mapper.OrganizationSensorsMapper"> <select id="getSensorsByOrgId" resultType="java.util.Map"> SELECT organization_id orgId,sensors FROM organization_sensors WHERE organization_id = #{orgId} </select> </mapper> src/main/resources/mapper/SensorMapper.xml
@@ -198,4 +198,11 @@ ) and dvs.sensor_id=s.id </select> <select id="getSensorKeys" resultType="java.lang.String"> select sensor_key from sensor </select> </mapper>