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.dto.AlarmNuisanceStrategyDto; import com.ruoyi.alarm.dto.AlarmRemoveApprovalDto; import com.ruoyi.alarm.mapper.AlarmNuisanceStrategyMapper; import com.ruoyi.alarm.mapper.AlarmPointMapper; import com.ruoyi.alarm.mapper.AlarmRemoveApprovalMapper; import com.ruoyi.alarm.pojo.AlarmNuisanceStrategy; import com.ruoyi.alarm.pojo.AlarmPoint; import com.ruoyi.alarm.pojo.AlarmRemoveApproval; import com.ruoyi.alarm.service.IAlarmOptimizationService; import com.ruoyi.alarm.vo.*; import com.ruoyi.common.utils.bean.BeanUtils; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; @Service @AllArgsConstructor public class AlarmOptimizationServiceImpl extends ServiceImpl implements IAlarmOptimizationService { private AlarmNuisanceStrategyMapper alarmNuisanceStrategyMapper; private AlarmRemoveApprovalMapper alarmRemoveApprovalMapper; private AlarmPointMapper alarmPointMapper; @Override public AlarmOptimizationStatisticsVo getStatistics() { AlarmOptimizationStatisticsVo vo = new AlarmOptimizationStatisticsVo(); vo.setFilteredCount(1568); vo.setValidRate(85.6); vo.setResponseTime(12); vo.setScore(92); return vo; } @Override public List getStrategyList() { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.orderByDesc(AlarmNuisanceStrategy::getCreateTime); List strategies = alarmNuisanceStrategyMapper.selectList(wrapper); return strategies.stream().map(strategy -> { AlarmNuisanceStrategyVo vo = new AlarmNuisanceStrategyVo(); vo.setStrategyId(strategy.getStrategyId()); vo.setStrategyName(strategy.getStrategyName()); vo.setStrategyType(strategy.getStrategyType()); vo.setDescription(strategy.getDescription()); vo.setFilteredCount(strategy.getFilteredCount()); vo.setStatus(strategy.getStatus()); return vo; }).collect(java.util.stream.Collectors.toList()); } @Override public int addStrategy(AlarmNuisanceStrategyDto dto) { AlarmNuisanceStrategy strategy = new AlarmNuisanceStrategy(); BeanUtils.copyProperties(dto, strategy); strategy.setFilteredCount(0); strategy.setCreateTime(LocalDateTime.now()); strategy.setUpdateTime(LocalDateTime.now()); return alarmNuisanceStrategyMapper.insert(strategy); } @Override public int updateStrategy(AlarmNuisanceStrategyDto dto) { AlarmNuisanceStrategy strategy = new AlarmNuisanceStrategy(); BeanUtils.copyProperties(dto, strategy); strategy.setUpdateTime(LocalDateTime.now()); return alarmNuisanceStrategyMapper.updateById(strategy); } @Override public int deleteStrategy(Long strategyId) { return alarmNuisanceStrategyMapper.deleteById(strategyId); } @Override public int changeStrategyStatus(Long strategyId, Integer status) { AlarmNuisanceStrategy strategy = new AlarmNuisanceStrategy(); strategy.setStrategyId(strategyId); strategy.setStatus(status); strategy.setUpdateTime(LocalDateTime.now()); return alarmNuisanceStrategyMapper.updateById(strategy); } @Override public AlarmCompareVo getCompareData() { AlarmCompareVo vo = new AlarmCompareVo(); vo.setCategories(Arrays.asList("周一", "周二", "周三", "周四", "周五", "周六", "周日")); vo.setBefore(Arrays.asList(120, 132, 101, 134, 90, 230, 210)); vo.setAfter(Arrays.asList(45, 52, 38, 48, 35, 78, 65)); return vo; } @Override public List getHighFreqList(Integer limit) { List list = new ArrayList<>(); AlarmHighFreqPointVo vo = new AlarmHighFreqPointVo(); vo.setPointName("反应釜温度监测点"); vo.setAlarmCount(156); vo.setTrend("下降"); list.add(vo); return list; } @Override public IPage getApprovalList(Page page, String status) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if (status != null && !status.isEmpty()) { wrapper.eq(AlarmRemoveApproval::getStatus, status); } wrapper.orderByDesc(AlarmRemoveApproval::getApplyTime); IPage approvalPage = alarmRemoveApprovalMapper.selectPage(page, wrapper); return approvalPage.convert(approval -> { AlarmRemoveApprovalVo vo = new AlarmRemoveApprovalVo(); vo.setApplyNo(approval.getApplyNo()); vo.setRemoveReason(approval.getRemoveReason()); vo.setApplicant(approval.getApplicant()); vo.setApplyTime(approval.getApplyTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); vo.setStatus(approval.getStatus()); AlarmPoint point = alarmPointMapper.selectById(approval.getPointId()); if (point != null) { vo.setPointName(point.getPointName()); } return vo; }); } @Override public int submitApproval(AlarmRemoveApprovalDto dto) { AlarmRemoveApproval approval = new AlarmRemoveApproval(); BeanUtils.copyProperties(dto, approval); approval.setApplyNo("AP" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + String.format("%03d", new Random().nextInt(1000))); approval.setApplicant("当前用户"); approval.setApplyTime(LocalDateTime.now()); approval.setStatus("pending"); approval.setCreateTime(LocalDateTime.now()); approval.setUpdateTime(LocalDateTime.now()); return alarmRemoveApprovalMapper.insert(approval); } @Override public int approveApproval(String applyNo) { AlarmRemoveApproval approval = new AlarmRemoveApproval(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(AlarmRemoveApproval::getApplyNo, applyNo); AlarmRemoveApproval existing = alarmRemoveApprovalMapper.selectOne(wrapper); if (existing != null) { approval.setApprovalId(existing.getApprovalId()); approval.setStatus("approved"); approval.setApprover("审批人"); approval.setApproveTime(LocalDateTime.now()); approval.setUpdateTime(LocalDateTime.now()); int result = alarmRemoveApprovalMapper.updateById(approval); // 审批通过后,将对应点位的状态改为停用 AlarmPoint point = new AlarmPoint(); point.setPointId(existing.getPointId()); point.setStatus(0); // 0表示停用 point.setUpdateTime(LocalDateTime.now()); alarmPointMapper.updateById(point); return result; } return 0; } @Override public int rejectApproval(String applyNo) { AlarmRemoveApproval approval = new AlarmRemoveApproval(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(AlarmRemoveApproval::getApplyNo, applyNo); AlarmRemoveApproval existing = alarmRemoveApprovalMapper.selectOne(wrapper); if (existing != null) { approval.setApprovalId(existing.getApprovalId()); approval.setStatus("rejected"); approval.setApprover("审批人"); approval.setApproveTime(LocalDateTime.now()); approval.setUpdateTime(LocalDateTime.now()); return alarmRemoveApprovalMapper.updateById(approval); } return 0; } }