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 implements IAlarmAnalysisService { private AlarmRealtimeMapper alarmRealtimeMapper; private AlarmPointMapper alarmPointMapper; @Override public Map getRealtimeStats() { Map result = new HashMap<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(AlarmRealtime::getStatus, "未确认"); List 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 getRealtimeList(Page page) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.orderByDesc(AlarmRealtime::getAlarmTime); IPage 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 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 getTypeDistribution() { List 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 getFaultList() { List list = new ArrayList<>(); AlarmFaultDiagnosisVo vo = new AlarmFaultDiagnosisVo(); vo.setFaultType("传感器故障"); vo.setAlarmPoint("反应釜温度监测点"); vo.setOccurrenceCount(12); vo.setFaultReason("传感器老化,测量值漂移"); vo.setSolution("更换温度传感器,重新校准"); list.add(vo); return list; } }