package com.moral.service.impl; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.alibaba.druid.support.json.JSONUtils; import com.moral.mapper.AlarmMapper; import com.moral.service.AlarmService; import com.moral.service.DeviceService; import com.moral.service.SensorService; @Service public class AlarmServiceImpl implements AlarmService { @Resource private AlarmMapper alarmMapper; @Resource private SensorService sensorService; @Override public List> getAlarmData() { LocalDateTime time = LocalDateTime.now(); LocalDateTime endTime = time.truncatedTo(ChronoUnit.DAYS); LocalDateTime startTime = endTime.minusDays(1); List sensorKeys = sensorService.getSensorKeys(); String year = startTime.getYear() + ""; String month = null; int monthValue = startTime.getMonthValue(); if (monthValue < 10) { month = "0" + monthValue; } else { month = monthValue + ""; } String yearAndMonth = year + month; Map devices = new HashMap<>(); devices.put("sensorKeys", sensorKeys); devices.put("start", startTime); devices.put("end", endTime); devices.put("yearAndMonth", yearAndMonth); List> list = alarmMapper.getAlarmData(devices); for (Map map : list) { ArrayList list1 = new ArrayList<>(); ArrayList list2 = new ArrayList<>(); ArrayList list3 = new ArrayList<>(); for (String key : map.keySet()) { if (!key.equals("mac")) { String value = map.get(key).toString().substring(1, 2); if (value.equals("1")) { list1.add(key); } else if (value.equals("2")) { list2.add(key); } else if (value.equals("3")) { list3.add(key); } } } map.put("1", list1); map.put("2", list2); map.put("3", list3); } for (Map map : list) { Iterator iter = map.keySet().iterator(); while (iter.hasNext()) { String next = iter.next(); if (!(next.equals("mac")) && !(next.equals("1")) && !(next.equals("2")) && !(next.equals("3"))) { iter.remove(); } } } for (int i = list.size() - 1; i >= 0; i--) { for (int j = i - 1; j >= 0; j--) { Map map1 = list.get(i); Map map2 = list.get(j); if (map1.get("mac").equals(map2.get("mac"))) { List frontList1 = (ArrayList) map1.get("1"); List frontList2 = (ArrayList) map1.get("2"); List frontList3 = (ArrayList) map1.get("3"); List backList1 = (ArrayList) map2.get("1"); List backList2 = (ArrayList) map2.get("2"); List backList3 = (ArrayList) map2.get("3"); backList1.addAll(frontList1); backList2.addAll(frontList2); backList3.addAll(frontList3); list.remove(map1); List list1 = backList1.stream().distinct().collect(Collectors.toList()); List list2 = backList2.stream().distinct().collect(Collectors.toList()); List list3 = backList3.stream().distinct().collect(Collectors.toList()); map2.put("1", list1); map2.put("2", list2); map2.put("3", list3); break; } } } for (Map map : list) { List list1 = (ArrayList) map.get("1"); List list2 = (ArrayList) map.get("2"); List list3 = (ArrayList) map.get("3"); if (list1.size() == 0) { map.remove("1"); } if (list2.size() == 0) { map.remove("2"); } if (list3.size() == 0) { map.remove("3"); } } List> resultList = new ArrayList<>(); for (Map map : list) { for (String key : map.keySet()) { Map jsonMap = new HashMap<>(); if (!"mac".equals(key)) { Map hashMap = new HashMap<>(); hashMap.put("mac",map.get("mac")); hashMap.put("time",startTime); hashMap.put("state",key); ArrayList stateList = (ArrayList) map.get(key); for (String state : stateList) { jsonMap.put(state,1); } hashMap.put("json", JSONUtils.toJSONString(jsonMap)); resultList.add(hashMap); } } } return resultList; } @Override public int insertAlarmDaily(List> list) { return alarmMapper.insertAlarmDaily(list); } @Override public void createTable(String yearAndMonth) { alarmMapper.createTable(yearAndMonth); } }