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<Map<String, Object>> getAlarmData() {
|
LocalDateTime time = LocalDateTime.now();
|
LocalDateTime endTime = time.truncatedTo(ChronoUnit.DAYS);
|
LocalDateTime startTime = endTime.minusDays(1);
|
List<String> 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<String, Object> devices = new HashMap<>();
|
devices.put("sensorKeys", sensorKeys);
|
devices.put("start", startTime);
|
devices.put("end", endTime);
|
devices.put("yearAndMonth", yearAndMonth);
|
|
List<Map<String, Object>> list = alarmMapper.getAlarmData(devices);
|
for (Map<String, Object> map : list) {
|
ArrayList<String> list1 = new ArrayList<>();
|
ArrayList<String> list2 = new ArrayList<>();
|
ArrayList<String> 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<String, Object> map : list) {
|
Iterator<String> 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<String, Object> map1 = list.get(i);
|
Map<String, Object> map2 = list.get(j);
|
if (map1.get("mac").equals(map2.get("mac"))) {
|
List<String> frontList1 = (ArrayList<String>) map1.get("1");
|
List<String> frontList2 = (ArrayList<String>) map1.get("2");
|
List<String> frontList3 = (ArrayList<String>) map1.get("3");
|
List<String> backList1 = (ArrayList<String>) map2.get("1");
|
List<String> backList2 = (ArrayList<String>) map2.get("2");
|
List<String> backList3 = (ArrayList<String>) map2.get("3");
|
backList1.addAll(frontList1);
|
backList2.addAll(frontList2);
|
backList3.addAll(frontList3);
|
list.remove(map1);
|
List<String> list1 = backList1.stream().distinct().collect(Collectors.toList());
|
List<String> list2 = backList2.stream().distinct().collect(Collectors.toList());
|
List<String> list3 = backList3.stream().distinct().collect(Collectors.toList());
|
map2.put("1", list1);
|
map2.put("2", list2);
|
map2.put("3", list3);
|
break;
|
}
|
}
|
}
|
|
for (Map<String, Object> map : list) {
|
List<String> list1 = (ArrayList<String>) map.get("1");
|
List<String> list2 = (ArrayList<String>) map.get("2");
|
List<String> list3 = (ArrayList<String>) 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<Map<String, Object>> resultList = new ArrayList<>();
|
for (Map<String, Object> map : list) {
|
for (String key : map.keySet()) {
|
Map<String, Object> jsonMap = new HashMap<>();
|
if (!"mac".equals(key)) {
|
Map<String, Object> hashMap = new HashMap<>();
|
hashMap.put("mac",map.get("mac"));
|
hashMap.put("time",startTime);
|
hashMap.put("state",key);
|
ArrayList<String> stateList = (ArrayList<String>) 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<Map<String, Object>> list) {
|
return alarmMapper.insertAlarmDaily(list);
|
}
|
|
@Override
|
public void createTable(String yearAndMonth) {
|
alarmMapper.createTable(yearAndMonth);
|
}
|
}
|