package com.whyc.service;
|
|
import com.whyc.dto.AlarmDaoFactory;
|
import com.whyc.dto.Response;
|
import com.whyc.mapper.BattalarmDataMapper;
|
import com.whyc.mapper.DevalarmDataMapper;
|
import com.whyc.pojo.*;
|
import com.whyc.util.ActionUtil;
|
import com.whyc.util.CommonUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import javax.servlet.ServletContext;
|
import javax.servlet.http.HttpSession;
|
import java.io.File;
|
import java.text.SimpleDateFormat;
|
import java.util.HashMap;
|
import java.util.LinkedList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
import static org.assertj.core.util.Maps.format;
|
|
/**
|
* 告警:电池/设备/电源告警的统一接口
|
*/
|
@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;
|
|
|
public Map<String, Object> getAlarmLevel1ListMap() {
|
Long userId = ActionUtil.getUser().getUId();
|
List<BattalarmData> battAlarmList = battAlarmDataService.getList(userId);
|
battAlarmList = battAlarmList.stream().filter(alarm->alarm.getAlmLevel().equals(1)).collect(Collectors.toList());
|
|
for (BattalarmData adata : battAlarmList) {
|
adata.setAlmSignalIdName(AlarmDaoFactory.getAlarmName(adata.getAlmSignalId()));
|
adata.setAlmLevelName(AlarmDaoFactory.getAlarmType(adata.getAlmLevel()));
|
}
|
|
List<DevalarmData> devAlarmList = devAlarmDataService.getList(userId);
|
devAlarmList = devAlarmList.stream().filter(alarm->alarm.getAlmLevel().equals(1)).collect(Collectors.toList());
|
|
|
List<PwrdevAlarm> powerAlarmList = pwrdevAlarmService.getList(userId);
|
powerAlarmList = powerAlarmList.stream().filter(alarm->alarm.getAlmLevel().equals(1)).collect(Collectors.toList());
|
|
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);
|
}
|
}
|
|
/**
|
* 分为
|
* 电池告警信息: xx机房xx电池组xx单体在xx时间发生xx告警
|
* 设备告警信息: xx机房xx设备在xx时间发生xx告警
|
* 电源告警信息: xx机房xx电源在xx时间发生xx告警
|
*
|
* @param battAlarmList
|
* @param devAlarmList
|
* @param powerAlarmList
|
* @return
|
*/
|
private void formatResultAndSaveToWav(String unreadDirPath,
|
List<BattalarmData> battAlarmList,
|
List<DevalarmData> devAlarmList,
|
List<PwrdevAlarm> powerAlarmList) {
|
|
StringBuilder alarmMsgBuilder = new StringBuilder();
|
SimpleDateFormat format = new SimpleDateFormat(ActionUtil.time_yyyyMMddHHmmss);
|
for (BattalarmData alarm : battAlarmList) {
|
String alarmName = AlarmDaoFactory.getAllAlarmName(alarm.getAlmSignalId());
|
String alarmStartTime = format.format(alarm.getAlmStartTime());
|
alarmMsgBuilder.append(alarm.getStationName()).append(",电池组编号为").append(alarm.getBattgroupname()).append(",单体为").append(alarm.getMonNum()).append(",在").append(alarmStartTime).append("发生了").append(alarmName).append("告警;");
|
}
|
for (DevalarmData alarm : devAlarmList) {
|
String alarmName = AlarmDaoFactory.getAllAlarmName(alarm.getAlmType());
|
String alarmStartTime = format.format(alarm.getAlmStartTime());
|
alarmMsgBuilder.append(alarm.getStationName()).append(",设备编号为").append(alarm.getDevId()).append(",在").append(alarmStartTime).append("发生了").append(alarmName).append("告警;");
|
}
|
for (PwrdevAlarm alarm : powerAlarmList) {
|
String alarmName = AlarmDaoFactory.getAllAlarmName(alarm.getAlmType());
|
String alarmStartTime = format.format(alarm.getAlmStartTime());
|
alarmMsgBuilder.append(alarm.getStationName()).append(",电源编号为").append(alarm.getPowerDeviceId()).append(",在").append(alarmStartTime).append("发生了").append(alarmName).append("告警;");
|
}
|
|
File file = new File(unreadDirPath);
|
if(!file.exists()){
|
file.mkdirs();
|
}
|
|
String alarmMsg = alarmMsgBuilder.toString();
|
if(!alarmMsg.isEmpty()) {
|
service.setRate(1);
|
service.saveToWav(alarmMsg, unreadDirPath + File.separator + System.currentTimeMillis() + ".wav");
|
}
|
}
|
}
|