package com.whyc.service; import com.whyc.dto.AlarmDaoFactory; import com.whyc.dto.Response; import com.whyc.mapper.CommonMapper; import com.whyc.mapper.CustomMapper; import com.whyc.pojo.BattalarmDataHistory; import com.whyc.pojo.DevalarmDataHistory; import com.whyc.pojo.PwrdevAlarmHistory; import com.whyc.util.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.ParseException; import java.util.*; import java.util.stream.Collectors; @Service public class AlarmHistoryService { @Autowired private BattalarmDataHistoryService battAlarmService; @Autowired private DevalarmDataHistoryService deviceAlarmService; @Autowired private PwrdevAlarmHistoryService powerAlarmService; @Resource private CommonMapper commonMapper; public Response getAlarmStatistics(Date startTime, Date endTime, String stationId) throws ParseException { Map resMap = new HashMap<>(); //电池/设备专用-按月分表 Map> tableMap = DateUtil.getQueryTimeForSubTablesByMonthDesc(startTime, endTime); Set monthSet = tableMap.keySet(); //电源专用-按年分表 Map> powerTableMap = DateUtil.getQueryTimeForSubTablesDesc(startTime, endTime); Set powerYearSet = powerTableMap.keySet(); List battList = new LinkedList<>(); List deviceList = new LinkedList<>(); List powerList = new LinkedList<>(); //电池/设备 for (String month : monthSet) { String battTableName; String deviceTableName; if(month.equals("default")){ battTableName = "tb_battalarm_data_history"; deviceTableName = "tb_devalarm_data_history"; }else{ battTableName = "tb_battalarm_data_history_"+month; deviceTableName = "tb_devalarm_data_history_"+month; } List dates = tableMap.get(month); String existTableNameBatt = commonMapper.existTable("db_alarm", battTableName); if(existTableNameBatt != null){ List battTemp = battAlarmService.getListByStationId(dates.get(0),dates.get(1),stationId,battTableName); battList.addAll(battTemp); } String existTableNameDevice = commonMapper.existTable("db_alarm", deviceTableName); if(existTableNameDevice != null){ List deviceTemp = deviceAlarmService.getListByStationId(dates.get(0),dates.get(1),stationId,deviceTableName); deviceList.addAll(deviceTemp); } } //电源 for (String year : powerYearSet) { String powerTableName; if(year.equals("default")){ powerTableName = "tb_pwrdev_alarm_history"; }else{ powerTableName = "tb_pwrdev_alarm_history_"+year; } List dates = powerTableMap.get(year); String existTableNamePower= commonMapper.existTable("db_pwrdev_alarm", powerTableName); if(existTableNamePower != null){ List powerTemp = powerAlarmService.getListByStationId(dates.get(0),dates.get(1),stationId,powerTableName); powerList.addAll(powerTemp); } } if(battList.size()!=0) { Map> battResMap = new HashMap<>(); battList.forEach(t->{ if(t.getAlmSeverity()==null){ //查询为空,默认为0-重要 t.setAlmSeverity(0); } }); Map> battMap = battList.stream().collect(Collectors.groupingBy(BattalarmDataHistory::getAlmSignalId)); Set battAlarmSignalIdSet = battMap.keySet(); //电池告警id for (Integer battAlarmSignalId : battAlarmSignalIdSet) { //告警紧急程度 List battAlarmList = battMap.get(battAlarmSignalId); Map> battListMap = battAlarmList.stream().collect(Collectors.groupingBy(BattalarmDataHistory::getAlmSeverity)); Set severitySet = battListMap.keySet(); Map batt2Map = new HashMap<>(); for (Integer severity : severitySet) { List temp = battListMap.get(severity); int size = temp.size(); Integer almLevel = temp.get(0).getAlmLevel(); Integer almSeverity = temp.get(0).getAlmSeverity(); BattalarmDataHistory history = new BattalarmDataHistory(); history.setAlmLevel(almLevel); history.setAlmSeverity(almSeverity); history.setNum((long) size); batt2Map.put(severity,history); } battResMap.put(AlarmDaoFactory.getAllAlarmName(battAlarmSignalId), batt2Map); } resMap.put("batt", battResMap); }else{ resMap.put("batt",null); } if(deviceList.size()!=0) { Map> deviceResMap = new HashMap<>(); deviceList.forEach(t->{ if(t.getAlmSeverity()==null){ //查询为空,默认为0-重要 t.setAlmSeverity(0); } }); Map> deviceMap = deviceList.stream().collect(Collectors.groupingBy(DevalarmDataHistory::getAlmType)); Set deviceAlarmTypeSet = deviceMap.keySet(); //告警type for (Integer deviceAlarmType : deviceAlarmTypeSet) { List deviceAlarmList = deviceMap.get(deviceAlarmType); Map> deviceListMap = deviceAlarmList.stream().collect(Collectors.groupingBy(DevalarmDataHistory::getAlmSeverity)); Set severitySet = deviceListMap.keySet(); Map deviceMap2 = new HashMap<>(); for (Integer severity : severitySet) { List temp = deviceListMap.get(severity); int size = temp.size(); Integer almLevel = temp.get(0).getAlmLevel(); Integer almSeverity = temp.get(0).getAlmSeverity(); DevalarmDataHistory history = new DevalarmDataHistory(); history.setAlmLevel(almLevel); history.setAlmSeverity(almSeverity); history.setNum((long) size); deviceMap2.put(severity,history); } deviceResMap.put(AlarmDaoFactory.getAllAlarmName(deviceAlarmType), deviceMap2); } resMap.put("device", deviceResMap); }else{ resMap.put("device",null); } if(powerList.size()!=0) { Map> powerResMap = new HashMap<>(); powerList.forEach(t->{ if(t.getAlmSeverity()==null){ //查询为空,默认为0-重要 t.setAlmSeverity(0); } }); Map> powerMap = powerList.stream().collect(Collectors.groupingBy(PwrdevAlarmHistory::getAlmType)); Set powerAlarmTypeSet = powerMap.keySet(); for (Integer powerAlarmType : powerAlarmTypeSet) { List powerAlarmList = powerMap.get(powerAlarmType); Map> powerListMap = powerAlarmList.stream().collect(Collectors.groupingBy(PwrdevAlarmHistory::getAlmSeverity)); Set severityMap = powerListMap.keySet(); Map powerMap2 = new HashMap<>(); for (Integer severity : severityMap) { List temp = powerListMap.get(severity); int size = temp.size(); Integer almLevel = temp.get(0).getAlmLevel(); Integer almSeverity = temp.get(0).getAlmSeverity(); PwrdevAlarmHistory history = new PwrdevAlarmHistory(); history.setAlmLevel(almLevel); history.setAlmSeverity(almSeverity); history.setNum((long) size); powerMap2.put(severity,history); } powerResMap.put(AlarmDaoFactory.getAllAlarmName(powerAlarmType), powerMap2); } resMap.put("power", powerResMap); }else{ resMap.put("power",null); } return new Response().set(1,resMap); } }