src/main/java/com/moral/controller/ReportController.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/entity/Alarm.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/mapper/AlarmMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/AlarmService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/HistoryMinutelyService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/impl/AlarmServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/AlarmMapper.xml | ●●●●● patch | view | raw | blame | history |
src/main/java/com/moral/controller/ReportController.java
@@ -4,10 +4,9 @@ import static com.moral.common.util.WebUtils.getParametersStartingWith; import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -23,9 +22,10 @@ import com.moral.common.bean.ResultBean; import com.moral.entity.charts.LineChartCriteria; import com.moral.service.AlarmService; import com.moral.service.HistoryMinutelyService; @SuppressWarnings("unchecked") @SuppressWarnings({ "unchecked", "rawtypes" }) @RestController @RequestMapping("report") @CrossOrigin(origins = "*", maxAge = 3600) @@ -34,11 +34,14 @@ @Resource private HistoryMinutelyService historyMinutelyService; @Resource private AlarmService alarmService; @GetMapping("compare") public ResultBean<Map<String, List<Object>>> getCompareReport(HttpServletRequest request) throws Exception { public ResultBean<Map<String, List>> getCompareReport(HttpServletRequest request) throws Exception { Map<String, Object> parameters = getParametersStartingWith(request, null); Map<String, List<Object>> demo = historyMinutelyService.getCompareReport(parameters); return new ResultBean<Map<String, List<Object>>>(demo); Map<String, List> demo = historyMinutelyService.getCompareReport(parameters); return new ResultBean<Map<String, List>>(demo); } @PostMapping("line-chart") @@ -50,7 +53,7 @@ public ResultBean<Boolean> getExcelReport(HttpServletRequest request, HttpServletResponse response) throws Exception { Map<String, Object> parameters = getParametersStartingWith(request, null); List<Map<String, Object>> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); List<String> sensors= (List<String>) parameters.get("sensors"); List<String> sensors = (List<String>) parameters.get("sensors"); String[][] exportColumn = new String[sensors.size() + 1][]; exportColumn[0] = new String[] { "时间", "20", "time" }; for (int index = 0; index < sensors.size(); index++) { @@ -58,14 +61,23 @@ String name = split[1]; String key = split[0]; String unit = split[2]; if (!ObjectUtils.isEmpty(unit) && !"null".equals(unit) ) { if (!ObjectUtils.isEmpty(unit) && !"null".equals(unit)) { name += "-" + unit; } exportColumn[index + 1] = new String[] { name , "10", key }; } exportColumn[index + 1] = new String[] { name, "10", key }; } OutputStream outputStream = exportData(response, "Excel数据", list, exportColumn); outputStream.flush(); outputStream.close(); return new ResultBean<Boolean>(true); } @GetMapping("pie") public ResultBean<Map<String, Object>> getPieData(HttpServletRequest request) throws Exception { Map<String, Object> parameters = getParametersStartingWith(request, null); Map pieData = alarmService.getPieData(parameters); return new ResultBean<Map<String, Object>>(pieData); } } src/main/java/com/moral/entity/Alarm.java
New file @@ -0,0 +1,35 @@ package com.moral.entity; import java.util.Date; import lombok.Data; @Data public class Alarm { /** * * This field was generated by MyBatis Generator. * This field corresponds to the database column alarm.mac * * @mbg.generated Mon Apr 16 09:27:36 CST 2018 */ private String mac; /** * * This field was generated by MyBatis Generator. * This field corresponds to the database column alarm.json * * @mbg.generated Mon Apr 16 09:27:36 CST 2018 */ private String json; /** * * This field was generated by MyBatis Generator. * This field corresponds to the database column alarm.time * * @mbg.generated Mon Apr 16 09:27:36 CST 2018 */ private Date time; } src/main/java/com/moral/mapper/AlarmMapper.java
New file @@ -0,0 +1,13 @@ package com.moral.mapper; import java.util.List; import java.util.Map; import com.moral.common.mapper.BaseMapper; import com.moral.entity.Alarm; public interface AlarmMapper extends BaseMapper<Alarm> { List<Map<String, Object>> getAlarmData(Map<String, Object> parameters); } src/main/java/com/moral/service/AlarmService.java
New file @@ -0,0 +1,10 @@ package com.moral.service; import java.util.Map; @SuppressWarnings("rawtypes") public interface AlarmService { Map getPieData(Map<String, Object> parameters); } src/main/java/com/moral/service/HistoryMinutelyService.java
@@ -1,16 +1,17 @@ package com.moral.service; import com.moral.entity.charts.LineChartCriteria; import com.moral.entity.charts.PairData; import java.text.ParseException; import java.util.List; import java.util.Map; import com.moral.entity.charts.LineChartCriteria; @SuppressWarnings("rawtypes") public interface HistoryMinutelyService { Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters); Map<String, List<Object>> getCompareReport(Map<String, Object> parameters) throws Exception; Map<String, List> getCompareReport(Map<String, Object> parameters) throws Exception; List<Map<String, Object>> getMonitorPointOrDeviceAvgData(Map<String, Object> parameters) throws Exception; @@ -18,4 +19,6 @@ Map<String, List<List<Double>>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria); void convertQueryParam(Map<String, Object> parameters) throws ParseException; } src/main/java/com/moral/service/impl/AlarmServiceImpl.java
New file @@ -0,0 +1,62 @@ package com.moral.service.impl; import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import com.moral.mapper.AlarmMapper; import com.moral.service.AlarmService; import com.moral.service.HistoryMinutelyService; @Service @SuppressWarnings({ "rawtypes", "unchecked" }) public class AlarmServiceImpl implements AlarmService { @Resource private AlarmMapper alarmMapper; @Resource private HistoryMinutelyService historyMinutelyService; @Override public Map getPieData(Map<String, Object> parameters) { try { historyMinutelyService.convertQueryParam(parameters); } catch (ParseException e) { e.printStackTrace(); } List<Map<String, Object>> alarmDatas = alarmMapper.getAlarmData(parameters); Map<String, List> resultMap = new LinkedHashMap<String, List>(); for (Map<String, Object> alarmData : alarmDatas) { String name = alarmData.remove("name").toString(); alarmData.remove("sum"); for (Map.Entry<String, Object> entry : alarmData.entrySet()) { String key = entry.getKey(); Object value = entry.getValue().toString(); if (!"0".equals(value)) { List list; Map<String, Object> map = new HashMap<String, Object>(); if (ObjectUtils.isEmpty(resultMap.get(key))) { list = new ArrayList(); } else { list = resultMap.get(key); } map.put("name", name); map.put("value", value); list.add(map); resultMap.put(key, list); } } } return resultMap; } } src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -4,7 +4,7 @@ import static org.springframework.util.ObjectUtils.isEmpty; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; @@ -15,7 +15,6 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -31,11 +30,6 @@ import javax.annotation.Resource; import com.moral.common.util.ReportTimeFormat; import com.moral.entity.charts.DataCondition; import com.moral.entity.charts.LineChartCriteria; import com.moral.entity.charts.PairData; import com.moral.entity.charts.TimePeriod; import org.apache.commons.lang3.time.DateUtils; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; @@ -43,17 +37,21 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.moral.common.util.CalculateUtils; import com.moral.common.util.ReportTimeFormat; import com.moral.common.util.ResourceUtil; import com.moral.common.util.ValidateUtil; import com.moral.entity.Device; import com.moral.entity.Sensor; import com.moral.entity.charts.DataCondition; import com.moral.entity.charts.LineChartCriteria; import com.moral.entity.charts.TimePeriod; import com.moral.mapper.AlarmMapper; import com.moral.mapper.DeviceMapper; import com.moral.mapper.HistoryMinutelyMapper; import com.moral.mapper.SensorMapper; import com.moral.service.HistoryMinutelyService; @Service @SuppressWarnings({ "unchecked", "unused" }) @SuppressWarnings({ "unchecked", "unused", "rawtypes" }) public class HistoryMinutelyServiceImpl implements HistoryMinutelyService { @Resource @@ -65,7 +63,8 @@ @Resource private SensorMapper sensorMapper; // volatile @Resource private AlarmMapper alarmMapper; @Override public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) { @@ -76,8 +75,7 @@ // 今日00:00:00 parameters.put("end", localDate); String[] macKeys = { "e1", "e2", "e10", "e11", "e15", "e16" }; parameters.put("sensorKeys", Arrays.asList(macKeys)); parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); Map<String, Double> average = historyMinutelyMapper.getSersionAvgByDevice(parameters); return getAQIByDataMap(average); } @@ -135,8 +133,8 @@ } @Override public Map<String, List<Object>> getCompareReport(Map<String, Object> parameters) throws Exception { Map<String, List<Object>> resultMap = new HashMap<String, List<Object>>(); public Map<String, List> getCompareReport(Map<String, Object> parameters) throws Exception { Map<String, List> resultMap = new HashMap<String, List>(); List<Map<String, Object>> list = JSON.parseObject((String)parameters.remove("items"), new TypeReference<List<Map<String, Object>>>() {}); String type = (String) parameters.get("type"); @@ -183,32 +181,58 @@ } Object[] datas = new Object[list.size()]; Object[] deviceCounts = new Object[list.size()]; Object[] alarmDatas = new Object[list.size()]; Set<String> sensors = new TreeSet<String>(new Comparator<String>() { @Override public int compare(String o1, String o2) { return Integer.compare(Integer.valueOf(o1.split("-")[0].replace("e", "")), Integer.valueOf(o2.split("-")[0].replace("e", ""))); } }); Map<String, Double> sortMap = new HashMap<String, Double>(); for (Object object : dataList) { Map<String, Object> map = (Map<String, Object>)object; for (String key : map.keySet()) { if (key.startsWith("data")) { int index = Integer.valueOf(key.replace("data", "")); datas[index] = map.get(key); } if (key.startsWith("deviceCount")) { int index = Integer.valueOf(key.replace("deviceCount", "")); deviceCounts[index] = map.get(key); } if (key.startsWith("sensors")) { sensors.addAll((List<String>) map.get(key)); int index = Integer.valueOf(key.substring(key.length() - 1)); String actual = key.substring(0, key.length() - 1); Object obj = map.get(key); switch (actual) { case "data": datas[index] = obj; break; case "deviceCount": deviceCounts[index] = obj; break; case "alarmData": alarmDatas[index] = obj; if (!ObjectUtils.isEmpty(obj)) { Map<String, BigDecimal> mapData = (Map<String, BigDecimal>) obj; BigDecimal sum = mapData.remove("sum"); for (Entry<String, BigDecimal> entry : mapData.entrySet()) { sortMap.put(entry.getKey() + "-" + index, new BigDecimal(100).multiply(entry.getValue()) .divide(sum, 2, BigDecimal.ROUND_HALF_UP).doubleValue()); } } break; case "sensors": sensors.addAll((List<String>) obj); break; } } } List<Map.Entry<String, Double>> sortList = new ArrayList<Map.Entry<String,Double>>(sortMap.entrySet()); Collections.sort(sortList,new Comparator<Map.Entry<String,Double>>(){ @Override public int compare(Entry<String, Double> o1, Entry<String, Double> o2) { return o1.getValue().compareTo(o2.getValue()); } }); resultMap.put("times", timeList); resultMap.put("datas", Arrays.asList(datas)); resultMap.put("deviceCounts", Arrays.asList(deviceCounts)); resultMap.put("alarmDatas", Arrays.asList(alarmDatas)); resultMap.put("sensors", new ArrayList<Object>(sensors)); resultMap.put("sortList", sortList); return resultMap; } @@ -250,11 +274,23 @@ resultMap.put("deviceCount" + part, deviceCount); resultMap.put("data" + part, doubleMap); resultMap.put("sensors" + part, sensors); Object type = parameters.get("type"); if ("year".equals(type) || "month".equals(type)) { parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); resultMap.put("alarmData" + part, alarmMapper.getAlarmData(parameters).get(0)); } return resultMap; } @Override public List<Map<String, Object>> getMonitorPointOrDeviceAvgData(Map<String, Object> parameters) throws Exception { convertQueryParam(parameters); return historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters); } @Override public void convertQueryParam(Map<String, Object> parameters) throws ParseException { String type = (String) parameters.get("type"); if (!parameters.containsKey("field")) { parameters.putAll(getElementByType(type)); @@ -294,8 +330,6 @@ } parameters.put("sensorKeys", sensorKeys); parameters.put("sensors", sensors); return historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters); } @Override src/main/resources/mapper/AlarmMapper.xml
New file @@ -0,0 +1,59 @@ <?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.AlarmMapper"> <select id="getAlarmData" resultType="java.util.LinkedHashMap"> SELECT <if test="dimension=='monitorPoint'"> `name`, </if> <foreach collection="sensorKeys" item="sensorKey" separator=","> SUM( ${sensorKey} ) AS '${sensorKey}' </foreach> <foreach close=" AS 'sum' " collection="sensorKeys" item="sensorKey" open="," separator="+"> SUM( ${sensorKey} ) </foreach> FROM ( SELECT <if test="dimension=='monitorPoint'"> mp.`name`, </if> <foreach collection="sensorKeys" item="sensorKey" separator=","> CASE COUNT( json -> '$.${sensorKey}' ) WHEN 0 THEN 0 ELSE 1 END AS '${sensorKey}' </foreach> FROM alarm h, device d, monitor_point mp WHERE d.monitor_point_id = mp.id AND h.mac = d.mac AND h.time >= #{start} AND h.time <![CDATA[<]]> #{end} <if test="provinceCode != null"> AND mp.province_code = #{provinceCode} </if> <if test="cityCode != null"> AND mp.city_code = #{cityCode} </if> <if test="areaCode != null"> AND mp.area_code = #{areaCode} </if> <if test="monitorPointId != null"> AND mp.id = #{monitorPointId} </if> <if test="mac != null"> AND d.mac = #{mac} </if> GROUP BY <if test="dimension=='monitorPoint'"> mp.id, </if> DATE_FORMAT( h.time, '%Y-%m-%d' ) ) a <if test="dimension=='monitorPoint'"> GROUP BY name </if> </select> </mapper>