package com.moral.service.impl; import java.text.ParseException; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import com.moral.entity.Sensor; import com.moral.mapper.AlarmDailyMapper; import com.moral.mapper.SensorMapper; import com.moral.service.AlarmDailyService; import com.moral.service.HistoryMinutelyService; @Service @SuppressWarnings({ "rawtypes", "unchecked" }) public class AlarmDailyServiceImpl implements AlarmDailyService { @Resource private AlarmDailyMapper alarmDailyMapper; @Resource private SensorMapper sensorMapper; @Resource private HistoryMinutelyService historyMinutelyService; @Override public Map getPieData(Map parameters) { Map resultMap = new LinkedHashMap(); try { historyMinutelyService.convertQueryParam(parameters); } catch (ParseException e) { e.printStackTrace(); } List> alarmDatas = alarmDailyMapper.getAlarmData(parameters); Object dimension = parameters.get("dimension"); if ("monitorPoint".equals(dimension)) { for (Map alarmData : alarmDatas) { String name = alarmData.remove("name").toString(); alarmData.remove("sum"); for (Map.Entry entry : alarmData.entrySet()) { String key = entry.getKey(); Object value = entry.getValue().toString(); if (!"0".equals(value)) { List list; Map map = new HashMap(); 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); } } } } else { Map alarmData = alarmDatas.get(0); List sensors = (List) parameters.get("sensors"); List list = new ArrayList(); if (!ObjectUtils.isEmpty(alarmData)) { 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 map = new HashMap(); if (parameters.containsKey("description")) { map.put("name", split[3]); } else { map.put("name", split[1]); } map.put("value", alarmData.get(key)); list.add(map); } } } } resultMap.put("list", list); } return resultMap; } @Override public List getAlarmDataByYear(Map parameters) { LocalDate localDate = LocalDate.now(); parameters.put("start", localDate.with(TemporalAdjusters.firstDayOfYear())); parameters.put("end", localDate.with(TemporalAdjusters.firstDayOfNextYear())); parameters.put("sensorKeys", sensorMapper.selectAll().stream().map(sensor -> sensor.getSensorKey()).collect(Collectors.toList())); List> list = alarmDailyMapper.getAlarmDataByYear(parameters); Integer[] result = new Integer[12]; for (int i = 0; i < result.length; i++) { if (ObjectUtils.isEmpty(list)) { break; } for (Map map : list) { Integer month = Integer.valueOf(map.get("time").toString().substring(5)); if (i + 1 < month) { break; } else if (i + 1 == month) { result[i] = Integer.valueOf(map.get("sum").toString()); list.remove(map); break; } } } return Arrays.asList(result); } @Override public List> getAlarmDataByMonth(Map parameters) { LocalDate localDate = LocalDate.now(); List sensors = sensorMapper.selectAll(); // Iterator iterator = sensors.iterator(); // while (iterator.hasNext()) { // if ("warn".equals(iterator.next().getSensorKey())) { // iterator.remove(); // } // } parameters.put("start", localDate.with(TemporalAdjusters.firstDayOfMonth())); parameters.put("end", localDate.with(TemporalAdjusters.firstDayOfNextMonth())); parameters.put("sensors", sensors); Map map = alarmDailyMapper.getAlarmDataByMonth(parameters); List> list = new ArrayList>(map.entrySet()); Collections.sort(list, new Comparator>() { @Override public int compare(Entry o1, Entry o2) { if (o2.getValue().equals(o1.getValue())) { return o1.getKey().compareTo(o2.getKey()); //return Integer.compare(Integer.valueOf(o1.getKey().replace("e", "")),Integer.valueOf(o2.getKey().replace("e", ""))); } else { return Integer.valueOf(o2.getValue().toString()).compareTo(Integer.valueOf(o1.getValue().toString())); } } }); List> resultList = new ArrayList>(); for (Entry entry : list) { for (Sensor sensor : sensors) { if (!entry.getValue().toString().equals("0") && entry.getKey().equals(sensor.getSensorKey())) { Map map2 = new HashMap(); map2.put(sensor.getDescription(), entry.getValue()); resultList.add(map2); sensors.remove(sensor); break; } } } return resultList; } }