| | |
| | | |
| | | 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 com.whyc.util.MessageUtils; |
| | | 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.*; |
| | | import java.util.concurrent.atomic.AtomicLong; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static org.assertj.core.util.Maps.format; |
| | | |
| | | /** |
| | | * 告警:电池/设备/电源告警的统一接口 |
| | |
| | | @Lazy |
| | | private MSTTSSpeechService service; |
| | | |
| | | @Autowired |
| | | private AlarmVoiceSetService alarmVoiceSetService; |
| | | |
| | | |
| | | 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())); |
| | | 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)); |
| | | } |
| | | |
| | | List<DevalarmData> devAlarmList = devAlarmDataService.getList(userId); |
| | | 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); |
| | | 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() + "路")); |
| | | 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 Map<String, Object> getAlarmLevel1ListMap4Socket(Long userId, HttpSession httpSession) { |
| | | //Long userId = ActionUtil.getUser().getUId(); |
| | | String lang = ActionUtil.getLang4Socket(httpSession); |
| | | 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() + "")); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 监控用户的告警,包含生成,内存信息更新 |
| | | * @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 |
| | | * @param httpSession |
| | | */ |
| | | public void monitorAlarm4Socket(String readDirPath, Long uId, ServletContext application, HttpSession httpSession) { |
| | | //获取ServletContext |
| | | |
| | | |
| | | //用户 |
| | | Map<String,Object> alarmMap = (Map<String, Object>) application.getAttribute("alarmMap_" + uId); |
| | | Map<String, Object> alarmMapNow = getAlarmLevel1ListMap4Socket(uId,httpSession); |
| | | |
| | | 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); |
| | | } |
| | | |
| | | formatResultAndSaveToWav4Socket(readDirPath,battAlarmListAdded, devAlarmListAdded, powerAlarmListAdded,uId); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 分为 |
| | | * 电池告警信息: xx机房xx电池组xx单体在xx时间发生xx告警 |
| | | * 设备告警信息: xx机房xx设备在xx时间发生xx告警 |
| | |
| | | * @param powerAlarmList |
| | | * @return |
| | | */ |
| | | private void formatResultAndSaveToWav(String unreadDirPath, |
| | | private void formatResultAndSaveToWav(String dirPath, |
| | | 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()); |
| | | String stationName = alarm.getStationName(); |
| | | String district = stationName.split("-")[2]; |
| | | String stationNameUnion = stationName.substring(stationName.indexOf(district)); |
| | | 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()); |
| | | |
| | | //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("告警;"); |
| | | } |
| | | for (DevalarmData alarm : devAlarmList) { |
| | | String alarmName = AlarmDaoFactory.getAllAlarmName(alarm.getAlmType()); |
| | | String alarmStartTime = format.format(alarm.getAlmStartTime()); |
| | | String stationName = alarm.getStationName(); |
| | | String district = stationName.split("-")[2]; |
| | | String stationNameUnion = stationName.substring(stationName.indexOf(district)); |
| | | //alarmMsgBuilder.append(stationNameUnion).append(",设备编号为").append(alarm.getDevId()).append(",在").append(alarmStartTime).append("发生了").append(alarmName).append("告警;"); |
| | | alarmMsgBuilder.append(stationNameUnion).append("发生了").append(alarmName).append("告警;"); |
| | | } |
| | | for (PwrdevAlarm alarm : powerAlarmList) { |
| | | String alarmName = AlarmDaoFactory.getAllAlarmName(alarm.getAlmType()); |
| | | String alarmStartTime = format.format(alarm.getAlmStartTime()); |
| | | String stationName = alarm.getStationName(); |
| | | String district = stationName.split("-")[2]; |
| | | String stationNameUnion = stationName.substring(stationName.indexOf(district)); |
| | | //alarmMsgBuilder.append(stationNameUnion).append(",电源编号为").append(alarm.getPowerDeviceId()).append(",在").append(alarmStartTime).append("发生了").append(alarmName).append("告警;"); |
| | | alarmMsgBuilder.append(stationNameUnion).append("发生了").append(alarmName).append("告警;"); |
| | | } |
| | | |
| | | File file = new File(unreadDirPath); |
| | | 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; |
| | | |
| | | String alarmMsg = alarmMsgBuilder.toString(); |
| | | if(!alarmMsg.isEmpty()) { |
| | | //查询是否存在 设备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, unreadDirPath + File.separator + System.currentTimeMillis() + ".wav"); |
| | | service.saveToWav(alarmMsg, dirPath + File.separator + System.currentTimeMillis() + ".wav"); |
| | | }*/ |
| | | } |
| | | |
| | | private void formatResultAndSaveToWav4Socket(String dirPath, |
| | | List<BattalarmData> battAlarmList, |
| | | List<DevalarmData> devAlarmList, |
| | | List<PwrdevAlarm> powerAlarmList,Long userId) { |
| | | |
| | | 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, HttpSession httpSession) { |
| | | //获取绝对文件夹路径 |
| | | 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,httpSession); |
| | | 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); |
| | | } |
| | | } |
| | | } |