package com.ruoyi.alarm.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.alarm.mapper.AlarmPointMapper;
|
import com.ruoyi.alarm.mapper.AlarmRealtimeMapper;
|
import com.ruoyi.alarm.pojo.AlarmPoint;
|
import com.ruoyi.alarm.pojo.AlarmRealtime;
|
import com.ruoyi.alarm.service.IAlarmAnalysisService;
|
import com.ruoyi.alarm.vo.*;
|
import lombok.AllArgsConstructor;
|
import org.springframework.stereotype.Service;
|
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
|
@Service
|
@AllArgsConstructor
|
public class AlarmAnalysisServiceImpl extends ServiceImpl<AlarmRealtimeMapper, AlarmRealtime> implements IAlarmAnalysisService {
|
|
private AlarmRealtimeMapper alarmRealtimeMapper;
|
private AlarmPointMapper alarmPointMapper;
|
|
@Override
|
public Map<String, Object> getRealtimeStats() {
|
Map<String, Object> result = new HashMap<>();
|
LambdaQueryWrapper<AlarmRealtime> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(AlarmRealtime::getStatus, "未确认");
|
List<AlarmRealtime> alarms = alarmRealtimeMapper.selectList(wrapper);
|
|
int urgent = 0, important = 0, normal = 0;
|
for (AlarmRealtime alarm : alarms) {
|
if ("紧急".equals(alarm.getAlarmLevel())) {
|
urgent++;
|
} else if ("重要".equals(alarm.getAlarmLevel())) {
|
important++;
|
} else {
|
normal++;
|
}
|
}
|
|
result.put("urgent", urgent);
|
result.put("important", important);
|
result.put("normal", normal);
|
result.put("total", alarms.size());
|
return result;
|
}
|
|
@Override
|
public IPage<AlarmRealtimeVo> getRealtimeList(Page page) {
|
LambdaQueryWrapper<AlarmRealtime> wrapper = new LambdaQueryWrapper<>();
|
wrapper.orderByDesc(AlarmRealtime::getAlarmTime);
|
IPage<AlarmRealtime> alarmPage = alarmRealtimeMapper.selectPage(page, wrapper);
|
|
return alarmPage.convert(alarm -> {
|
AlarmRealtimeVo vo = new AlarmRealtimeVo();
|
vo.setAlarmId(alarm.getAlarmId());
|
vo.setAlarmTime(alarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
vo.setAlarmLevel(alarm.getAlarmLevel());
|
vo.setAlarmType(alarm.getAlarmType());
|
vo.setAlarmValue(alarm.getAlarmValue());
|
vo.setThresholdValue(alarm.getThresholdValue());
|
vo.setStatus(alarm.getStatus());
|
|
AlarmPoint point = alarmPointMapper.selectById(alarm.getPointId());
|
if (point != null) {
|
vo.setPointName(point.getPointName());
|
vo.setArea(point.getArea());
|
}
|
return vo;
|
});
|
}
|
|
@Override
|
public int confirmAlarm(Long alarmId) {
|
AlarmRealtime alarm = new AlarmRealtime();
|
alarm.setAlarmId(alarmId);
|
alarm.setStatus("已确认");
|
return alarmRealtimeMapper.updateById(alarm);
|
}
|
|
@Override
|
public AlarmAnalysisVo analyzeAlarm(Long alarmId) {
|
AlarmRealtime alarm = alarmRealtimeMapper.selectById(alarmId);
|
AlarmAnalysisVo vo = new AlarmAnalysisVo();
|
|
vo.setFaultType("设备运行异常");
|
vo.setFaultReason("根据历史数据分析,该点位频繁触发报警,可能存在传感器故障或工艺参数设置不合理");
|
|
List<AlarmStepVo> steps = new ArrayList<>();
|
AlarmStepVo step1 = new AlarmStepVo();
|
step1.setTitle("现场检查");
|
step1.setDesc("派遣操作人员到现场检查设备运行状态");
|
steps.add(step1);
|
|
AlarmStepVo step2 = new AlarmStepVo();
|
step2.setTitle("参数调整");
|
step2.setDesc("根据工艺要求调整报警阈值设置");
|
steps.add(step2);
|
|
AlarmStepVo step3 = new AlarmStepVo();
|
step3.setTitle("设备维护");
|
step3.setDesc("如确认设备故障,安排维修或更换");
|
steps.add(step3);
|
|
AlarmStepVo step4 = new AlarmStepVo();
|
step4.setTitle("效果验证");
|
step4.setDesc("调整后持续监测,验证报警是否消除");
|
steps.add(step4);
|
|
vo.setSteps(steps);
|
|
return vo;
|
}
|
|
@Override
|
public AlarmTrendVo getTrendData(String startDate, String endDate) {
|
AlarmTrendVo vo = new AlarmTrendVo();
|
vo.setDates(Arrays.asList("周一", "周二", "周三", "周四", "周五", "周六", "周日"));
|
vo.setUrgent(Arrays.asList(3, 5, 2, 4, 6, 2, 3));
|
vo.setImportant(Arrays.asList(8, 12, 10, 15, 18, 9, 11));
|
vo.setNormal(Arrays.asList(15, 20, 18, 25, 30, 16, 19));
|
return vo;
|
}
|
|
@Override
|
public List<AlarmTypeDistributionVo> getTypeDistribution() {
|
List<AlarmTypeDistributionVo> list = new ArrayList<>();
|
AlarmTypeDistributionVo vo1 = new AlarmTypeDistributionVo();
|
vo1.setValue(35);
|
vo1.setName("温度超限");
|
list.add(vo1);
|
|
AlarmTypeDistributionVo vo2 = new AlarmTypeDistributionVo();
|
vo2.setValue(28);
|
vo2.setName("压力异常");
|
list.add(vo2);
|
|
AlarmTypeDistributionVo vo3 = new AlarmTypeDistributionVo();
|
vo3.setValue(20);
|
vo3.setName("流量异常");
|
list.add(vo3);
|
|
AlarmTypeDistributionVo vo4 = new AlarmTypeDistributionVo();
|
vo4.setValue(15);
|
vo4.setName("液位超限");
|
list.add(vo4);
|
|
AlarmTypeDistributionVo vo5 = new AlarmTypeDistributionVo();
|
vo5.setValue(12);
|
vo5.setName("设备故障");
|
list.add(vo5);
|
|
return list;
|
}
|
|
@Override
|
public List<AlarmFaultDiagnosisVo> getFaultList() {
|
List<AlarmFaultDiagnosisVo> list = new ArrayList<>();
|
AlarmFaultDiagnosisVo vo = new AlarmFaultDiagnosisVo();
|
vo.setFaultType("传感器故障");
|
vo.setAlarmPoint("反应釜温度监测点");
|
vo.setOccurrenceCount(12);
|
vo.setFaultReason("传感器老化,测量值漂移");
|
vo.setSolution("更换温度传感器,重新校准");
|
list.add(vo);
|
return list;
|
}
|
}
|