package com.whyc.service;
|
|
import com.whyc.dto.AlarmDaoFactory;
|
import com.whyc.dto.Response;
|
import com.whyc.pojo.*;
|
import com.whyc.util.ActionUtil;
|
import com.whyc.util.CommonUtil;
|
import com.whyc.util.MessageUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
|
import javax.servlet.ServletContext;
|
import java.io.File;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.stream.Collectors;
|
|
/**
|
* 告警:电池/设备/电源告警的统一接口
|
*/
|
@Service
|
public class AlarmDataService {
|
|
@Autowired
|
private BattalarmDataService battAlarmDataService;
|
|
@Autowired
|
private DeviceAlarmDataService deviceAlarmDataService;
|
|
@Autowired
|
private DevalarmDataService devAlarmDataService;
|
|
@Autowired
|
private PwrdevAlarmService pwrdevAlarmService;
|
|
@Autowired
|
@Lazy
|
private MSTTSSpeechService service;
|
|
@Autowired
|
private AlarmVoiceSetService alarmVoiceSetService;
|
|
|
public Map<String, Object> getAlarmLevel1ListMap() {
|
Long userId = ActionUtil.getUser().getUId();
|
String lang = ActionUtil.getLang();
|
List<BattalarmData> battAlarmList = battAlarmDataService.getList(userId, 1);
|
battAlarmList = battAlarmList.stream().filter(alarm -> alarm.getAlmLevel().equals(1)).collect(Collectors.toList());
|
//相同设备id+告警类型的语音,只保留一条
|
Map<String, List<BattalarmData>> battAlarmListMap = battAlarmList.stream().collect(Collectors.groupingBy(a -> a.getBattGroupId() + "_" + a.getAlmSignalId()));
|
Set<String> keySet = battAlarmListMap.keySet();
|
battAlarmList.clear();
|
for (String key : keySet) {
|
battAlarmList.add(battAlarmListMap.get(key).get(0));
|
}
|
|
for (BattalarmData adata : battAlarmList) {
|
adata.setAlmSignalIdName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmName(adata.getAlmSignalId()), lang));
|
adata.setAlmLevelName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmType(adata.getAlmLevel()), lang));
|
}
|
|
List<DevalarmData> devAlarmList = devAlarmDataService.getList(userId,1);
|
devAlarmList = devAlarmList.stream().filter(alarm->alarm.getAlmLevel().equals(1)).collect(Collectors.toList());
|
//相同设备id+告警类型的语音,只保留一条
|
Map<String, List<DevalarmData>> devAlarmListMap = devAlarmList.stream().collect(Collectors.groupingBy(a -> a.getDevId() + "_" + a.getAlmType()));
|
Set<String> keySet2 = devAlarmListMap.keySet();
|
devAlarmList.clear();
|
for (String key:keySet2){
|
devAlarmList.add(devAlarmListMap.get(key).get(0));
|
}
|
|
List<PwrdevAlarm> powerAlarmList = pwrdevAlarmService.getList(userId,1);
|
powerAlarmList = powerAlarmList.stream().filter(alarm->alarm.getAlmLevel().equals(1)).collect(Collectors.toList());
|
//相同设备id+告警类型的语音,只保留一条
|
Map<String, List<PwrdevAlarm>> powerAlarmListMap = powerAlarmList.stream().collect(Collectors.groupingBy(a -> a.getPowerDeviceId() + "_" + a.getAlmType()));
|
Set<String> keySet3 = powerAlarmListMap.keySet();
|
powerAlarmList.clear();
|
for (String key:keySet3){
|
powerAlarmList.add(powerAlarmListMap.get(key).get(0));
|
}
|
for (PwrdevAlarm p : powerAlarmList) {
|
p.setAlarmName(AlarmDaoFactory.getAllAlarmName(p.getAlmType()));
|
if (p.getAlmIndex() != 0) {
|
p.setAlarmName(p.getAlarmName().replace("N", "第" + p.getAlmIndex() + "路"));
|
}
|
}
|
|
Map<String, Object> map = new HashMap<>();
|
map.put("battAlarmList", battAlarmList);
|
map.put("devAlarmList", devAlarmList);
|
map.put("powerAlarmList", powerAlarmList);
|
return map;
|
}
|
|
public List<WorkflowAlarm> getAlarmList() {
|
List<WorkflowAlarm> battAlarmList =battAlarmDataService.getAlarmList();
|
List<WorkflowAlarm> deviceAlarmList =deviceAlarmDataService.getAlarmList();
|
battAlarmList.addAll(deviceAlarmList);
|
return battAlarmList;
|
}
|
|
public void updateWorkFlag(List<WorkflowAlarm> deviceAlarmList) {
|
|
}
|
|
public void saveToWav(String unreadDirPath) {
|
Long uId = ActionUtil.getUser().getUId();
|
ServletContext application = ActionUtil.getApplication();
|
//用户
|
Map<String,Object> alarmMap = (Map<String, Object>) application.getAttribute("alarmMap_" + uId);
|
Map<String, Object> alarmMapNow = getAlarmLevel1ListMap();
|
|
List<BattalarmData> battAlarmListNow = (List<BattalarmData>) alarmMapNow.get("battAlarmList");
|
List<DevalarmData> devAlarmListNow = (List<DevalarmData>) alarmMapNow.get("devAlarmList");
|
List<PwrdevAlarm> powerAlarmListNow = (List<PwrdevAlarm>) alarmMapNow.get("powerAlarmList");
|
if(alarmMap==null){
|
//不存在,插入应用内存
|
application.setAttribute("alarmMap_" + uId,alarmMapNow);
|
//返回内容格式处理,并存为语音
|
formatResultAndSaveToWav(unreadDirPath,battAlarmListNow,devAlarmListNow,powerAlarmListNow);
|
}else {
|
//获取新增的
|
List<BattalarmData> battAlarmList = (List<BattalarmData>) alarmMap.get("battAlarmList");
|
List<DevalarmData> devAlarmList = (List<DevalarmData>) alarmMap.get("devAlarmList");
|
List<PwrdevAlarm> powerAlarmList = (List<PwrdevAlarm>) alarmMap.get("powerAlarmList");
|
|
List<BattalarmData> battAlarmListAdded = new LinkedList<>();
|
|
List<DevalarmData> devAlarmListAdded = new LinkedList<>();
|
|
List<PwrdevAlarm> powerAlarmListAdded = new LinkedList<>();
|
//电池组告警增加
|
for (BattalarmData now : battAlarmListNow) {
|
long num = now.getNum();
|
boolean exist = false;
|
for (BattalarmData old : battAlarmList) {
|
if (old.getNum() == num) {
|
exist = true;
|
break;
|
}
|
}
|
if (!exist) {
|
battAlarmListAdded.add(now);
|
}
|
|
}
|
//设备告警增加
|
for (DevalarmData now : devAlarmListNow) {
|
long num = now.getNum();
|
boolean exist = false;
|
for (DevalarmData old : devAlarmList) {
|
if (old.getNum() == num) {
|
exist = true;
|
break;
|
}
|
}
|
if (!exist) {
|
devAlarmListAdded.add(now);
|
}
|
|
}
|
//电源告警增加
|
for (PwrdevAlarm now : powerAlarmListNow) {
|
long num = now.getNum();
|
boolean exist = false;
|
for (PwrdevAlarm old : powerAlarmList) {
|
if (old.getNum() == num) {
|
exist = true;
|
break;
|
}
|
}
|
if (!exist) {
|
powerAlarmListAdded.add(now);
|
}
|
|
}
|
|
if (battAlarmListAdded.size() != 0
|
|| devAlarmListAdded.size() != 0
|
|| powerAlarmListAdded.size() != 0
|
) {
|
//有任何变动,更新旧的告警列表
|
application.setAttribute("alarmMap_" + uId, alarmMapNow);
|
}
|
|
formatResultAndSaveToWav(unreadDirPath,battAlarmListAdded, devAlarmListAdded, powerAlarmListAdded);
|
}
|
}
|
|
/**
|
* 监控用户的告警,包含生成,内存信息更新
|
* @param readDirPath
|
*/
|
public void monitorAlarm(String readDirPath) {
|
Long uId = ActionUtil.getUser().getUId();
|
ServletContext application = ActionUtil.getApplication();
|
//用户
|
Map<String,Object> alarmMap = (Map<String, Object>) application.getAttribute("alarmMap_" + uId);
|
Map<String, Object> alarmMapNow = getAlarmLevel1ListMap();
|
|
List<BattalarmData> battAlarmListNow = (List<BattalarmData>) alarmMapNow.get("battAlarmList");
|
List<DevalarmData> devAlarmListNow = (List<DevalarmData>) alarmMapNow.get("devAlarmList");
|
List<PwrdevAlarm> powerAlarmListNow = (List<PwrdevAlarm>) alarmMapNow.get("powerAlarmList");
|
//语音生成
|
if(alarmMap==null){
|
//不存在,插入应用内存
|
application.setAttribute("alarmMap_" + uId,alarmMapNow);
|
//返回内容格式处理,并存为语音
|
formatResultAndSaveToWav(readDirPath,battAlarmListNow,devAlarmListNow,powerAlarmListNow);
|
}else {
|
//获取新增的
|
List<BattalarmData> battAlarmList = (List<BattalarmData>) alarmMap.get("battAlarmList");
|
List<DevalarmData> devAlarmList = (List<DevalarmData>) alarmMap.get("devAlarmList");
|
List<PwrdevAlarm> powerAlarmList = (List<PwrdevAlarm>) alarmMap.get("powerAlarmList");
|
|
List<BattalarmData> battAlarmListAdded = new LinkedList<>();
|
|
List<DevalarmData> devAlarmListAdded = new LinkedList<>();
|
|
List<PwrdevAlarm> powerAlarmListAdded = new LinkedList<>();
|
//电池组告警增加 (电池组id+告警类型)
|
for (BattalarmData now : battAlarmListNow) {
|
long battGroupId = now.getBattGroupId();
|
Integer almSignalId = now.getAlmSignalId();
|
boolean exist = false;
|
for (BattalarmData old : battAlarmList) {
|
if (old.getBattGroupId() == battGroupId && old.getAlmSignalId().equals(almSignalId)) {
|
exist = true;
|
break;
|
}
|
}
|
if (!exist) {
|
battAlarmListAdded.add(now);
|
}
|
|
}
|
//设备告警增加 (设备id+告警类型)
|
for (DevalarmData now : devAlarmListNow) {
|
Integer devId = now.getDevId();
|
Integer almType = now.getAlmType();
|
boolean exist = false;
|
for (DevalarmData old : devAlarmList) {
|
if (old.getDevId().equals(devId) && old.getAlmType().equals(almType)) {
|
exist = true;
|
break;
|
}
|
}
|
if (!exist) {
|
devAlarmListAdded.add(now);
|
}
|
|
}
|
//电源告警增加 (电源设备id+告警类型)
|
for (PwrdevAlarm now : powerAlarmListNow) {
|
Long powerDeviceId = now.getPowerDeviceId();
|
Integer almType = now.getAlmType();
|
boolean exist = false;
|
for (PwrdevAlarm old : powerAlarmList) {
|
if (old.getPowerDeviceId().equals(powerDeviceId) && old.getAlmType().equals(almType)) {
|
exist = true;
|
break;
|
}
|
}
|
if (!exist) {
|
powerAlarmListAdded.add(now);
|
}
|
|
}
|
|
if (battAlarmListAdded.size() != 0
|
|| devAlarmListAdded.size() != 0
|
|| powerAlarmListAdded.size() != 0
|
) {
|
//有任何变动,更新旧的告警列表
|
application.setAttribute("alarmMap_" + uId, alarmMapNow);
|
}
|
|
formatResultAndSaveToWav(readDirPath,battAlarmListAdded, devAlarmListAdded, powerAlarmListAdded);
|
}
|
}
|
|
/**
|
* 监控用户的告警,包含生成,内存信息更新
|
*
|
* @param readDirPath
|
* @param application
|
*/
|
public void monitorAlarm4Socket(String readDirPath, Long uId, ServletContext application) {
|
//获取ServletContext
|
|
|
//用户
|
Map<String,Object> alarmMap = (Map<String, Object>) application.getAttribute("alarmMap_" + uId);
|
Map<String, Object> alarmMapNow = getAlarmLevel1ListMap();
|
|
List<BattalarmData> battAlarmListNow = (List<BattalarmData>) alarmMapNow.get("battAlarmList");
|
List<DevalarmData> devAlarmListNow = (List<DevalarmData>) alarmMapNow.get("devAlarmList");
|
List<PwrdevAlarm> powerAlarmListNow = (List<PwrdevAlarm>) alarmMapNow.get("powerAlarmList");
|
//语音生成
|
if(alarmMap==null){
|
//不存在,插入应用内存
|
application.setAttribute("alarmMap_" + uId,alarmMapNow);
|
//返回内容格式处理,并存为语音
|
formatResultAndSaveToWav(readDirPath,battAlarmListNow,devAlarmListNow,powerAlarmListNow);
|
}else {
|
//获取新增的
|
List<BattalarmData> battAlarmList = (List<BattalarmData>) alarmMap.get("battAlarmList");
|
List<DevalarmData> devAlarmList = (List<DevalarmData>) alarmMap.get("devAlarmList");
|
List<PwrdevAlarm> powerAlarmList = (List<PwrdevAlarm>) alarmMap.get("powerAlarmList");
|
|
List<BattalarmData> battAlarmListAdded = new LinkedList<>();
|
|
List<DevalarmData> devAlarmListAdded = new LinkedList<>();
|
|
List<PwrdevAlarm> powerAlarmListAdded = new LinkedList<>();
|
//电池组告警增加 (电池组id+告警类型)
|
for (BattalarmData now : battAlarmListNow) {
|
long battGroupId = now.getBattGroupId();
|
Integer almSignalId = now.getAlmSignalId();
|
boolean exist = false;
|
for (BattalarmData old : battAlarmList) {
|
if (old.getBattGroupId() == battGroupId && old.getAlmSignalId().equals(almSignalId)) {
|
exist = true;
|
break;
|
}
|
}
|
if (!exist) {
|
battAlarmListAdded.add(now);
|
}
|
|
}
|
//设备告警增加 (设备id+告警类型)
|
for (DevalarmData now : devAlarmListNow) {
|
Integer devId = now.getDevId();
|
Integer almType = now.getAlmType();
|
boolean exist = false;
|
for (DevalarmData old : devAlarmList) {
|
if (old.getDevId().equals(devId) && old.getAlmType().equals(almType)) {
|
exist = true;
|
break;
|
}
|
}
|
if (!exist) {
|
devAlarmListAdded.add(now);
|
}
|
|
}
|
//电源告警增加 (电源设备id+告警类型)
|
for (PwrdevAlarm now : powerAlarmListNow) {
|
Long powerDeviceId = now.getPowerDeviceId();
|
Integer almType = now.getAlmType();
|
boolean exist = false;
|
for (PwrdevAlarm old : powerAlarmList) {
|
if (old.getPowerDeviceId().equals(powerDeviceId) && old.getAlmType().equals(almType)) {
|
exist = true;
|
break;
|
}
|
}
|
if (!exist) {
|
powerAlarmListAdded.add(now);
|
}
|
|
}
|
|
if (battAlarmListAdded.size() != 0
|
|| devAlarmListAdded.size() != 0
|
|| powerAlarmListAdded.size() != 0
|
) {
|
//有任何变动,更新旧的告警列表
|
application.setAttribute("alarmMap_" + uId, alarmMapNow);
|
}
|
|
formatResultAndSaveToWav(readDirPath,battAlarmListAdded, devAlarmListAdded, powerAlarmListAdded);
|
}
|
}
|
|
/**
|
* 分为
|
* 电池告警信息: xx机房xx电池组xx单体在xx时间发生xx告警
|
* 设备告警信息: xx机房xx设备在xx时间发生xx告警
|
* 电源告警信息: xx机房xx电源在xx时间发生xx告警
|
*
|
* @param battAlarmList
|
* @param devAlarmList
|
* @param powerAlarmList
|
* @return
|
*/
|
private void formatResultAndSaveToWav(String dirPath,
|
List<BattalarmData> battAlarmList,
|
List<DevalarmData> devAlarmList,
|
List<PwrdevAlarm> powerAlarmList) {
|
|
SimpleDateFormat format = new SimpleDateFormat(ActionUtil.time_yyyyMMddHHmmss);
|
long currentTimeMillis = System.currentTimeMillis();
|
//查询告警语音设置表的所有记录,并更新下次时间戳到到相关的语音文件中
|
Long userId = ActionUtil.getUser().getUId();
|
List<AlarmVoiceSet> setList = alarmVoiceSetService.getAllByUserId(userId);
|
List<AlarmVoiceSet> setListBatt = setList.stream().filter(set->set.getBattGroupId()!=null).collect(Collectors.toList());
|
List<AlarmVoiceSet> setListDevice = setList.stream().filter(set->set.getDeviceId()!=null).collect(Collectors.toList());
|
List<AlarmVoiceSet> setListPowerDevice = setList.stream().filter(set->set.getPowerDeviceId()!=null).collect(Collectors.toList());
|
|
File file = new File(dirPath);
|
if(!file.exists()){
|
file.mkdirs();
|
}
|
for (BattalarmData alarm : battAlarmList) {
|
StringBuilder alarmMsgBuilder = new StringBuilder();
|
Integer almSignalId = alarm.getAlmSignalId();
|
String alarmName = AlarmDaoFactory.getAllAlarmName(almSignalId);
|
String alarmStartTime = format.format(alarm.getAlmStartTime());
|
String stationName = alarm.getStationName();
|
String district = stationName.split("-")[2];
|
String station = stationName.split("-")[3];
|
String stationNameUnion = district+"-"+station;
|
|
//查询是否存在 设备id+告警类型 相同的记录
|
Integer battGroupId = alarm.getBattGroupId();
|
AtomicLong nextTimestamp = new AtomicLong(currentTimeMillis);
|
setListBatt.forEach(set->{
|
if(set.getBattGroupId().equals(battGroupId) && set.getAlarmType().equals(almSignalId)){
|
nextTimestamp.set(set.getNextTimestamp());
|
}
|
});
|
|
//alarmMsgBuilder.append(stationNameUnion).append(",电池组编号为").append(alarm.getBattgroupname()).append(",单体为").append(alarm.getMonNum()).append(",在").append(alarmStartTime).append("发生了").append(alarmName).append("告警;");
|
alarmMsgBuilder.append(stationNameUnion).append("发生了").append(alarmName).append("告警;");
|
//生成语音文件,命名规则 {alarmStartTime}_batt_{num}_{battGroupId}_{almSignalId}_{userId}_{nextTimeInterval}_{voiceTime} ->更改为
|
//生成语音文件,命名规则 {alarmStartTime}_batt_{num}_{battGroupId}_{almSignalId}_{readableVoiceTime}
|
service.saveToWav(alarmMsgBuilder.toString(), dirPath + File.separator
|
+ alarm.getAlmStartTime().getTime()+"_batt_"+alarm.getNum()+"_"+ battGroupId +"_"+ almSignalId +"_"+nextTimestamp.get()+".wav");
|
|
}
|
for (DevalarmData alarm : devAlarmList) {
|
StringBuilder alarmMsgBuilder = new StringBuilder();
|
Integer almType = alarm.getAlmType();
|
String alarmName = AlarmDaoFactory.getAllAlarmName(almType);
|
String alarmStartTime = format.format(alarm.getAlmStartTime());
|
String stationName = alarm.getStationName();
|
String district = stationName.split("-")[2];
|
String station = stationName.split("-")[3];
|
String stationNameUnion = district+"-"+station;
|
|
//查询是否存在 设备id+告警类型 相同的记录
|
Integer devId = alarm.getDevId();
|
AtomicLong nextTimestamp = new AtomicLong(currentTimeMillis);
|
setListDevice.forEach(set->{
|
if(set.getDeviceId().intValue() == devId && set.getAlarmType().equals(almType)){
|
nextTimestamp.set(set.getNextTimestamp());
|
}
|
});
|
//alarmMsgBuilder.append(stationNameUnion).append(",设备编号为").append(alarm.getDevId()).append(",在").append(alarmStartTime).append("发生了").append(alarmName).append("告警;");
|
alarmMsgBuilder.append(stationNameUnion).append("发生了").append(alarmName).append("告警;");
|
//生成语音文件,命名规则 {alarmStartTime}_device_{num}_{deviceId}_{almType}_{readableVoiceTime}
|
service.saveToWav(alarmMsgBuilder.toString(), dirPath + File.separator
|
+ alarm.getAlmStartTime().getTime()+"_device_"+alarm.getNum()+"_"+alarm.getDevId()+"_"+ almType +"_"+nextTimestamp.get()+".wav");
|
|
}
|
for (PwrdevAlarm alarm : powerAlarmList) {
|
StringBuilder alarmMsgBuilder = new StringBuilder();
|
Integer almType = alarm.getAlmType();
|
String alarmName = AlarmDaoFactory.getAllAlarmName(almType);
|
String alarmStartTime = format.format(alarm.getAlmStartTime());
|
String stationName = alarm.getStationName();
|
String district = stationName.split("-")[2];
|
String station = stationName.split("-")[3];
|
String stationNameUnion = district+"-"+station;
|
|
//查询是否存在 设备id+告警类型 相同的记录
|
Long powerDeviceId = alarm.getPowerDeviceId();
|
AtomicLong nextTimestamp = new AtomicLong(currentTimeMillis);
|
setListPowerDevice.forEach(set->{
|
if(set.getPowerDeviceId().equals(powerDeviceId) && set.getAlarmType().equals(almType)){
|
nextTimestamp.set(set.getNextTimestamp());
|
}
|
});
|
//alarmMsgBuilder.append(stationNameUnion).append(",电源编号为").append(alarm.getPowerDeviceId()).append(",在").append(alarmStartTime).append("发生了").append(alarmName).append("告警;");
|
alarmMsgBuilder.append(stationNameUnion).append("发生了").append(alarmName).append("告警;");
|
//生成语音文件,命名规则 {alarmStartTime}_device_{num}_{deviceId}_{almType}_{readableVoiceTime}
|
service.saveToWav(alarmMsgBuilder.toString(), dirPath + File.separator
|
+ alarm.getAlmStartTime().getTime()+"_power_"+alarm.getNum()+"_"+alarm.getPowerDeviceId()+"_"+ almType +"_"+nextTimestamp.get()+".wav");
|
|
}
|
|
/*if(!alarmMsg.isEmpty()) {
|
service.setRate(1);
|
service.saveToWav(alarmMsg, dirPath + File.separator + System.currentTimeMillis() + ".wav");
|
}*/
|
}
|
|
public Response getWavRead() {
|
UserInf user = ActionUtil.getUser();
|
//获取绝对文件夹路径
|
String readSuffixPath = "wav" + File.separator + "alarm" + File.separator + user.getUId() + File.separator;
|
String readDirPath = CommonUtil.getRootFile() + readSuffixPath;
|
File readDir = new File(readDirPath);
|
//监控用户的告警,包含生成,内存信息更新
|
monitorAlarm(readDirPath);
|
if(!readDir.exists()){
|
return new Response().set(1,false,"无未读告警语音");
|
}else{
|
String[] arr = readDir.list();
|
if(arr.length==0){
|
return new Response().set(1,false,"无未读告警语音");
|
}
|
//检查这种告警是否消除,消除则删除告警语音
|
List<String> battGroupFileNameList = new LinkedList<>();
|
List<String> deviceFileNameList = new LinkedList<>();
|
List<String> powerDeviceFileNameList = new LinkedList<>();
|
for (String fileName : arr) {
|
if(fileName.contains("batt")){
|
battGroupFileNameList.add(fileName);
|
}else if(fileName.contains("device")){
|
deviceFileNameList.add(fileName);
|
}else{
|
powerDeviceFileNameList.add(fileName);
|
}
|
}
|
ServletContext application = ActionUtil.getApplication();
|
Map<String,Object> alarmMapNew = new HashMap<>();
|
Map<String,Object> alarmMap = (Map<String, Object>) application.getAttribute("alarmMap_" + user.getUId());
|
List<BattalarmData> battAlarmList = (List<BattalarmData>) alarmMap.get("battAlarmList");
|
List<DevalarmData> devAlarmList = (List<DevalarmData>) alarmMap.get("devAlarmList");
|
List<PwrdevAlarm> powerAlarmList = (List<PwrdevAlarm>) alarmMap.get("powerAlarmList");
|
|
if(battGroupFileNameList.size()!=0){
|
//查询电池告警是否消除
|
List<BattalarmData> list = battAlarmDataService.getList(user.getUId(), 0);
|
for (String battGroupFileName : battGroupFileNameList){
|
boolean exist = false;
|
String[] fileNameSplit = battGroupFileName.split("_");
|
long battGroupId = Long.parseLong(fileNameSplit[3]);
|
long alarmType = Long.parseLong(fileNameSplit[4]);
|
for(BattalarmData temp : list){
|
if(battGroupId == temp.getBattGroupId() && alarmType == temp.getAlmSignalId()){
|
exist = true;
|
break;
|
}
|
}
|
//如果存在,说明告警未消除
|
if(!exist){ //不存在,告警消除,删除告警文件,同时消除内存中的记录
|
File deleteFile = new File(readDirPath + battGroupFileName);
|
deleteFile.delete();
|
|
battAlarmList = battAlarmList.stream().filter(
|
data->!(data.getBattGroupId() == battGroupId && data.getAlmSignalId() == alarmType)
|
).collect(Collectors.toList());
|
}
|
}
|
}
|
|
if(deviceFileNameList.size()!=0){
|
//查询告警是否消除
|
List<DevalarmData> list = devAlarmDataService.getList(user.getUId(), 0);
|
for (String deviceFileName : deviceFileNameList){
|
boolean exist = false;
|
String[] fileNameSplit = deviceFileName.split("_");
|
long deviceId = Long.parseLong(fileNameSplit[3]);
|
long alarmType = Long.parseLong(fileNameSplit[4]);
|
for(DevalarmData temp : list){
|
if(deviceId == temp.getDevId() && alarmType == temp.getAlmType()){
|
exist = true;
|
break;
|
}
|
}
|
//如果存在,说明告警未消除
|
if(!exist){ //不存在,告警消除,删除告警文件
|
File deleteFile = new File(readDirPath + deviceFileName);
|
deleteFile.delete();
|
|
devAlarmList = devAlarmList.stream().filter(
|
data->!(data.getDevId() == deviceId && data.getAlmType() == alarmType)
|
).collect(Collectors.toList());
|
}
|
}
|
}
|
|
if(powerDeviceFileNameList.size()!=0){
|
//查询告警是否消除
|
List<PwrdevAlarm> list = pwrdevAlarmService.getList(user.getUId(), 0);
|
for (String powerDeviceFileName : powerDeviceFileNameList){
|
boolean exist = false;
|
String[] fileNameSplit = powerDeviceFileName.split("_");
|
long powerDeviceId = Long.parseLong(fileNameSplit[3]);
|
long alarmType = Long.parseLong(fileNameSplit[4]);
|
for(PwrdevAlarm temp : list){
|
if(powerDeviceId == temp.getPowerDeviceId() && alarmType == temp.getAlmType()){
|
exist = true;
|
break;
|
}
|
}
|
//如果存在,说明告警未消除
|
if(!exist){ //不存在,告警消除,删除告警文件
|
File deleteFile = new File(readDirPath + powerDeviceFileName);
|
deleteFile.delete();
|
|
powerAlarmList = powerAlarmList.stream().filter(
|
data->!(data.getPowerDeviceId() == powerDeviceId && data.getAlmType() == alarmType)
|
).collect(Collectors.toList());
|
}
|
}
|
}
|
//更新内存
|
alarmMapNew.put("battAlarmList",battAlarmList);
|
alarmMapNew.put("devAlarmList",devAlarmList);
|
alarmMapNew.put("powerAlarmList",powerAlarmList);
|
application.setAttribute("alarmMap_"+user.getUId(),alarmMapNew);
|
|
List<String> fileNameList = new LinkedList<>();
|
for (String fileName : arr) {
|
long currentTimeMillis = System.currentTimeMillis();
|
long readableVoiceTime = Long.parseLong(fileName.substring(fileName.lastIndexOf("_") + 1, fileName.lastIndexOf(".")));
|
//可播放时间<当前时间,输出播放
|
if(readableVoiceTime<currentTimeMillis) {
|
fileName = "fg_file" + File.separator + readSuffixPath + File.separator + fileName;
|
fileNameList.add(fileName);
|
}
|
}
|
if(fileNameList.size()==0){
|
return new Response().set(1,false,"无未读告警语音");
|
}
|
return new Response().setII(1,true,fileNameList,null);
|
}
|
}
|
|
public Response getWavRead4Socket(UserInf user, ServletContext application) {
|
//获取绝对文件夹路径
|
String readSuffixPath = "wav" + File.separator + "alarm" + File.separator + user.getUId() + File.separator;
|
String readDirPath = CommonUtil.getRootFile() + readSuffixPath;
|
File readDir = new File(readDirPath);
|
//监控用户的告警,包含生成,内存信息更新
|
monitorAlarm4Socket(readDirPath,user.getUId(),application);
|
if(!readDir.exists()){
|
return new Response().set(1,false,"无未读告警语音");
|
}else{
|
String[] arr = readDir.list();
|
if(arr.length==0){
|
return new Response().set(1,false,"无未读告警语音");
|
}
|
//检查这种告警是否消除,消除则删除告警语音
|
List<String> battGroupFileNameList = new LinkedList<>();
|
List<String> deviceFileNameList = new LinkedList<>();
|
List<String> powerDeviceFileNameList = new LinkedList<>();
|
for (String fileName : arr) {
|
if(fileName.contains("batt")){
|
battGroupFileNameList.add(fileName);
|
}else if(fileName.contains("device")){
|
deviceFileNameList.add(fileName);
|
}else{
|
powerDeviceFileNameList.add(fileName);
|
}
|
}
|
//ServletContext application = ActionUtil.getApplication();
|
Map<String,Object> alarmMapNew = new HashMap<>();
|
Map<String,Object> alarmMap = (Map<String, Object>) application.getAttribute("alarmMap_" + user.getUId());
|
List<BattalarmData> battAlarmList = (List<BattalarmData>) alarmMap.get("battAlarmList");
|
List<DevalarmData> devAlarmList = (List<DevalarmData>) alarmMap.get("devAlarmList");
|
List<PwrdevAlarm> powerAlarmList = (List<PwrdevAlarm>) alarmMap.get("powerAlarmList");
|
|
if(battGroupFileNameList.size()!=0){
|
//查询电池告警是否消除
|
List<BattalarmData> list = battAlarmDataService.getList(user.getUId(), 0);
|
for (String battGroupFileName : battGroupFileNameList){
|
boolean exist = false;
|
String[] fileNameSplit = battGroupFileName.split("_");
|
long battGroupId = Long.parseLong(fileNameSplit[3]);
|
long alarmType = Long.parseLong(fileNameSplit[4]);
|
for(BattalarmData temp : list){
|
if(battGroupId == temp.getBattGroupId() && alarmType == temp.getAlmSignalId()){
|
exist = true;
|
break;
|
}
|
}
|
//如果存在,说明告警未消除
|
if(!exist){ //不存在,告警消除,删除告警文件,同时消除内存中的记录
|
File deleteFile = new File(readDirPath + battGroupFileName);
|
deleteFile.delete();
|
|
battAlarmList = battAlarmList.stream().filter(
|
data->!(data.getBattGroupId() == battGroupId && data.getAlmSignalId() == alarmType)
|
).collect(Collectors.toList());
|
}
|
}
|
}
|
|
if(deviceFileNameList.size()!=0){
|
//查询告警是否消除
|
List<DevalarmData> list = devAlarmDataService.getList(user.getUId(), 0);
|
for (String deviceFileName : deviceFileNameList){
|
boolean exist = false;
|
String[] fileNameSplit = deviceFileName.split("_");
|
long deviceId = Long.parseLong(fileNameSplit[3]);
|
long alarmType = Long.parseLong(fileNameSplit[4]);
|
for(DevalarmData temp : list){
|
if(deviceId == temp.getDevId() && alarmType == temp.getAlmType()){
|
exist = true;
|
break;
|
}
|
}
|
//如果存在,说明告警未消除
|
if(!exist){ //不存在,告警消除,删除告警文件
|
File deleteFile = new File(readDirPath + deviceFileName);
|
deleteFile.delete();
|
|
devAlarmList = devAlarmList.stream().filter(
|
data->!(data.getDevId() == deviceId && data.getAlmType() == alarmType)
|
).collect(Collectors.toList());
|
}
|
}
|
}
|
|
if(powerDeviceFileNameList.size()!=0){
|
//查询告警是否消除
|
List<PwrdevAlarm> list = pwrdevAlarmService.getList(user.getUId(), 0);
|
for (String powerDeviceFileName : powerDeviceFileNameList){
|
boolean exist = false;
|
String[] fileNameSplit = powerDeviceFileName.split("_");
|
long powerDeviceId = Long.parseLong(fileNameSplit[3]);
|
long alarmType = Long.parseLong(fileNameSplit[4]);
|
for(PwrdevAlarm temp : list){
|
if(powerDeviceId == temp.getPowerDeviceId() && alarmType == temp.getAlmType()){
|
exist = true;
|
break;
|
}
|
}
|
//如果存在,说明告警未消除
|
if(!exist){ //不存在,告警消除,删除告警文件
|
File deleteFile = new File(readDirPath + powerDeviceFileName);
|
deleteFile.delete();
|
|
powerAlarmList = powerAlarmList.stream().filter(
|
data->!(data.getPowerDeviceId() == powerDeviceId && data.getAlmType() == alarmType)
|
).collect(Collectors.toList());
|
}
|
}
|
}
|
//更新内存
|
alarmMapNew.put("battAlarmList",battAlarmList);
|
alarmMapNew.put("devAlarmList",devAlarmList);
|
alarmMapNew.put("powerAlarmList",powerAlarmList);
|
application.setAttribute("alarmMap_"+user.getUId(),alarmMapNew);
|
|
List<String> fileNameList = new LinkedList<>();
|
for (String fileName : arr) {
|
long currentTimeMillis = System.currentTimeMillis();
|
long readableVoiceTime = Long.parseLong(fileName.substring(fileName.lastIndexOf("_") + 1, fileName.lastIndexOf(".")));
|
//可播放时间<当前时间,输出播放
|
if(readableVoiceTime<currentTimeMillis) {
|
fileName = "fg_file" + File.separator + readSuffixPath + File.separator + fileName;
|
fileNameList.add(fileName);
|
}
|
}
|
if(fileNameList.size()==0){
|
return new Response().set(1,false,"无未读告警语音");
|
}
|
return new Response().setII(1,true,fileNameList,null);
|
}
|
}
|
}
|