From 29d968d69ee52e7b0f87132467b21940fa9361cb Mon Sep 17 00:00:00 2001 From: xufenglei <xufenglei> Date: Fri, 20 Apr 2018 09:11:08 +0800 Subject: [PATCH] 报警数据 饼图功能 --- src/main/resources/mapper/AlarmMapper.xml | 35 +++++++++++++---- src/main/java/com/moral/service/impl/AlarmServiceImpl.java | 55 ++++++++++++++++++--------- src/main/java/com/moral/controller/ScreenController.java | 30 ++++++++++++++ 3 files changed, 92 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 48892d7..7adfbde 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -40,6 +41,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.moral.common.bean.Constants; import com.moral.common.bean.JsonData; import com.moral.common.bean.PageResult; import com.moral.common.bean.ResultBean; @@ -53,6 +55,7 @@ import com.moral.entity.alarm.AlarmSensorLevel; import com.moral.service.AccountService; import com.moral.service.AlarmConfigService; +import com.moral.service.AlarmService; import com.moral.service.AreaService; import com.moral.service.DeviceService; import com.moral.service.HistoryMinutelyService; @@ -67,6 +70,7 @@ @RestController @RequestMapping("/screen") //@CrossOrigin(origins = "*", maxAge = 3600) +@SuppressWarnings({ "rawtypes", "unchecked", "unused" }) public class ScreenController { public static Logger log = Logger.getLogger(ScreenController.class); @Resource @@ -108,6 +112,8 @@ /** The level key. */ private String levelKey = "alarm_"; + @Resource + private AlarmService alarmService; /** * Screen login. ������������ * @@ -150,7 +156,6 @@ * the request * @return the alarm levels */ - @SuppressWarnings("resource") @GetMapping("alarm-levels") public Object getAlarmLevels(HttpServletRequest request, Integer orgId) { List<Map<String,Object>> sensorAlarmList = null; @@ -445,4 +450,27 @@ } return new ResultBean<List<Map<String, Object>>>(list); } + + @GetMapping("report_alarm_datas") + public ResultBean<List<Map<String, Object>>> getAlarmData(HttpServletRequest request) throws Exception { + Map<String, Object> parameters = getParametersStartingWith(request, null); + parameters.put("type", "month"); + String sensorKey = "list"; + if (!ObjectUtils.isEmpty(parameters.get("sensorKey"))) { + sensorKey = parameters.remove("sensorKey").toString(); + List<String> sensorKeys = new ArrayList<String>(); + sensorKeys.add(sensorKey); + parameters.put("sensors", sensorKeys); + } + if (!ObjectUtils.isEmpty(parameters.get("organizationId"))) { + if (!Constants.isNotSpecialOrgId(Integer.valueOf(parameters.get("organizationId").toString()))) { + parameters.remove("organizationId"); + } + } + Map pieData = alarmService.getPieData(parameters); + + List<Map<String, Object>> list = (List<Map<String, Object>>) pieData.get(sensorKey); + + return new ResultBean<List<Map<String, Object>>>(list); + } } diff --git a/src/main/java/com/moral/service/impl/AlarmServiceImpl.java b/src/main/java/com/moral/service/impl/AlarmServiceImpl.java index 8b2e03c..f04bc52 100644 --- a/src/main/java/com/moral/service/impl/AlarmServiceImpl.java +++ b/src/main/java/com/moral/service/impl/AlarmServiceImpl.java @@ -28,33 +28,52 @@ @Override public Map getPieData(Map<String, Object> parameters) { + Map<String, Object> resultMap = new LinkedHashMap<String, Object>(); 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); + Object dimension = parameters.get("dimension"); + if ("monitorPoint".equals(dimension)) { + 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 = (List) resultMap.get(key); + } + map.put("name", name); + map.put("value", value); + list.add(map); + resultMap.put(key, list); } - map.put("name", name); - map.put("value", value); - list.add(map); - resultMap.put(key, list); } } + } else { + Map<String, Object> alarmData = alarmDatas.get(0); + List<String> sensors = (List<String>) parameters.get("sensors"); + List list = new ArrayList(); + for (String key : alarmData.keySet()) { + for (String sensor : sensors) { + String[] split = sensor.split("-"); + if (key.equals(split[0]) && !"0".equals(alarmData.get(key).toString())) { + Map<String, Object> map = new HashMap<String, Object>(); + map.put("name", split[1]); + map.put("value", alarmData.get(key)); + list.add(map); + } + } + } + resultMap.put("list", list); } return resultMap; } diff --git a/src/main/resources/mapper/AlarmMapper.xml b/src/main/resources/mapper/AlarmMapper.xml index e9abda1..cad7fec 100644 --- a/src/main/resources/mapper/AlarmMapper.xml +++ b/src/main/resources/mapper/AlarmMapper.xml @@ -6,21 +6,35 @@ <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> + <choose> + <when test="sensorKeys.size > 0"> + <foreach collection="sensorKeys" separator="," item="sensorKey"> + SUM( ${sensorKey} ) AS '${sensorKey}' + </foreach> + <foreach collection="sensorKeys" open="," separator="+" close=" AS 'sum' " item="sensorKey"> + SUM( ${sensorKey} ) + </foreach> + </when> + <otherwise> + time + </otherwise> + </choose> 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> + <choose> + <when test="sensorKeys.size > 0"> + <foreach collection="sensorKeys" separator="," item="sensorKey"> + CASE COUNT( json -> '$.${sensorKey}' ) WHEN 0 THEN 0 ELSE 1 END AS '${sensorKey}' + </foreach> + </when> + <otherwise> + DATE_FORMAT( h.time, '%Y-%m-%d' ) AS 'time' + </otherwise> + </choose> FROM alarm h, device d, @@ -41,6 +55,9 @@ <if test="monitorPointId != null"> AND mp.id = #{monitorPointId} </if> + <if test="organizationId != null"> + AND mp.organization_id = #{organizationId} + </if> <if test="mac != null"> AND d.mac = #{mac} </if> -- Gitblit v1.8.0