Эх сурвалжийг харах

重构燃气监测报警一张图

zengy 3 өдөр өмнө
parent
commit
9176bd4998

+ 0 - 79
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/manhole/ManholeDeviceController.java

@@ -1,22 +1,16 @@
 package com.zksy.web.controller.manhole;
 
 
-import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.zksy.base.alarm.domain.WarningThreshold;
-import com.zksy.base.warning.service.WarningThresholdService;
 import com.zksy.base.domain.EquipmentBase;
-import com.zksy.base.domain.EquipmentStatus;
 import com.zksy.base.domain.EquipmentType;
 import com.zksy.base.domain.ManholeDeviceRel;
 import com.zksy.base.environment.domain.ERealTimeData;
 import com.zksy.base.environment.mapper.ERealTimeDataMapper;
-import com.zksy.base.manhole.domain.ManholeData;
 import com.zksy.base.radar.domain.RadarData;
 import com.zksy.base.radar.mapper.RadarDataMapper;
-import com.zksy.base.manhole.service.ManholeDataService;
 import com.zksy.base.mapper.EquipmentBaseMapper;
 import com.zksy.base.mapper.ManholeDeviceRelMapper;
 import com.zksy.base.service.EquipmentBaseService;
@@ -64,12 +58,6 @@ public class ManholeDeviceController extends BaseController
     @Autowired
     private EquipmentTypeService equipmentTypeService;
 
-    @Autowired
-    private ManholeDataService manholeDataService;
-
-    @Autowired
-    private WarningThresholdService warningThresholdService;
-
     @Autowired
     private ManholeDeviceRelMapper manholeDeviceRelMapper;
 
@@ -104,26 +92,6 @@ public class ManholeDeviceController extends BaseController
         return AjaxResult2.success(equipmentBaseService.getManholeDeviceStatistics(inDTO));
     }
 
-    /**
-     * 【态势图层专用】查询井盖监测设备列表(返回全量设备,前端按状态筛选)
-     * 【重要注释】本接口仅查询窨井类型设备:
-     *   - 排水窨井 (equipment_type_id = 9)
-     *   - 供水窨井 (equipment_type_id = 10)
-     * 不包含窨井下面的子设备,仅查询顶级窨井设备
-     * 【报警级别映射】alarmLevel: 0-有报警,1-严重报警,2-一般报警,不传则返回全部
-     * 【告警判断】通过 alarm_data 表 alarm_level 字段:
-     *   - alarm_level = 1 → 严重报警
-     *   - alarm_level > 1 → 一般报警
-     * 【查询内容】运维状态(currentStatus)、报警状态(alarmStatus)、在线状态(onlineStatus)均从设备状态表关联查询
-     */
-    @Anonymous
-    @PostMapping(value = "/getManholeDataList")
-    @ApiOperation(value = "查询井盖监测设备列表")
-    public AjaxResult2<Page<EquipmentBaseOutDTO>> getManholeDataList(@RequestBody ManholeDeviceListInDTO listInDTO)
-    {
-        return AjaxResult2.success(equipmentBaseService.getManholeDataList(listInDTO));
-    }
-
     /**
      * 窨井盖实时监测-设备报警监控列表
      * 查询所有窨井类型设备(排水=9/供水=10)的 jg_device_data 最新一条记录
@@ -138,53 +106,6 @@ public class ManholeDeviceController extends BaseController
         return AjaxResult2.success(equipmentBaseService.getAlarmMonitorList(inDTO));
     }
 
-    /**
-     * 获取监测设备台账详情
-     */
-    @Anonymous
-    @GetMapping(value = "/getById/{id}")
-    @ApiOperation(value = "获取监测设备台账详情")
-    public AjaxResult2<EquipmentBaseOutDTO> getById(@PathVariable("id") String id)
-    {
-        EquipmentBase equipmentBase = equipmentBaseService.getById(id);
-        if(equipmentBase == null){
-            return AjaxResult2.error("设备ID不存在");
-        }
-        EquipmentBaseOutDTO outDTO = BeanUtil.copyProperties(equipmentBase, EquipmentBaseOutDTO.class);
-        // 查询设备状态
-        EquipmentStatus equipmentStatus = equipmentStatusService.lambdaQuery()
-                .eq(EquipmentStatus::getEquipmentId, outDTO.getEquipmentId())
-                .one();
-        if(equipmentStatus != null){
-            EquipmentStatusOutDTO equipmentStatusOutDTO = BeanUtil.copyProperties(equipmentStatus, EquipmentStatusOutDTO.class);
-            outDTO.setEquipmentStatus(equipmentStatusOutDTO);
-        }
-        // 查询设备类别名称
-        EquipmentType equipmentType = equipmentTypeService.getById(outDTO.getEquipmentTypeId());
-        if(equipmentType != null){
-            outDTO.setEquipmentTypeName(equipmentType.getTypeName());
-        }
-        // 查询设备监测状态
-        List<ManholeData> manholeDataList = manholeDataService.list(new LambdaQueryWrapper<ManholeData>()
-                .eq(ManholeData::getImeiCardNumber, outDTO.getEquipmentCode())
-                .orderByDesc(ManholeData::getCreateTime));
-        if(CollUtil.isNotEmpty(manholeDataList)){
-            ManholeData manholeData = manholeDataList.get(0);
-            ManholeDataOutDTO manholeDataOutDTO = BeanUtil.copyProperties(manholeData, ManholeDataOutDTO.class);
-            outDTO.setManholeData(manholeDataOutDTO);
-        }
-        // 窨井设备仅支持倾斜角度阈值,支持多个设备编号,用逗号分隔
-        List<WarningThreshold> warningThresholdList = warningThresholdService.list(new LambdaQueryWrapper<WarningThreshold>()
-                .eq(WarningThreshold::getDeviceCode, outDTO.getEquipmentCode())
-                .eq(WarningThreshold::getWarningCode, "WARN-TILT")
-                .orderByDesc(WarningThreshold::getCreateTime));
-        if(CollUtil.isNotEmpty(warningThresholdList)){
-            List<WarningThresholdOutDTO> warningThresholdOutDTOList = BeanUtil.copyToList(warningThresholdList, WarningThresholdOutDTO.class);
-            outDTO.setWarningThresholdList(warningThresholdOutDTOList);
-        }
-        return AjaxResult2.success(outDTO);
-    }
-
     /**
      * 修改设备状态
      * @param inDTO

+ 0 - 8
pipe-network-service/zksy-system/src/main/java/com/zksy/base/alarm/service/AlarmOperationsService.java

@@ -7,7 +7,6 @@ import com.zksy.base.alarm.enums.*;
 import com.zksy.base.alarm.mapper.AlarmLogMapper;
 import com.zksy.base.alarm.mapper.AlarmOperationsMapper;
 import com.zksy.base.enums.AlarmStatusEnum;
-import com.zksy.base.enums.EquipmentTypeEnum;
 import com.zksy.common.core.domain.entity.SysDictData;
 import com.zksy.common.exception.ServiceException;
 import com.zksy.ops.enums.WorkOrderStatusEnum;
@@ -132,7 +131,6 @@ public class AlarmOperationsService {
         return result;
     }
     public List<AlarmVO> map(AlarmQuery query) {
-        if (query.getRootTypeId() != null) requireWaterSubsystem(query);
         query.setAlarmStatus(AlarmRecordStatusEnum.UNHANDLED.getCode());
         validate(query);
         List<AlarmVO> result = mapper.selectMap(query, scope.resolveOperations(query));
@@ -141,7 +139,6 @@ public class AlarmOperationsService {
         return result;
     }
     public Map<String, Object> analysis(String id, AlarmQuery query, AlarmSeriesPeriod period) {
-        if (query.getRootTypeId() != null) requireWaterSubsystem(query);
         AlarmVO alarm = detail(id, query);
         AlarmMetricSource source = AlarmMetricSource.fromCode(alarm.getWarningCode());
         Map<String, Object> result = new LinkedHashMap<>();
@@ -196,11 +193,6 @@ public class AlarmOperationsService {
     private Map<String, Object> option(int value, String label) {
         Map<String,Object> result = new LinkedHashMap<>(); result.put("value",value); result.put("label",label); return result;
     }
-    private void requireWaterSubsystem(AlarmQuery query) {
-        if (!EquipmentTypeEnum.ROOT_WATER_SUPPLY_DEVICE.getId().equals(query.getRootTypeId())
-                && !EquipmentTypeEnum.ROOT_DRAINAGE_DEVICE.getId().equals(query.getRootTypeId()))
-            throw new ServiceException("该功能仅适用于供水或排水子系统");
-    }
     private void validate(AlarmQuery query) {
         if (query.getPageNum() < 1 || query.getPageSize() < 1 || query.getPageSize() > 100) throw new ServiceException("分页参数无效");
         if (StringUtils.hasText(query.getAlarmLevel()) && alarmLevels().stream().noneMatch(v -> v.getDictValue().equals(query.getAlarmLevel()))) throw new ServiceException("报警等级无效");

+ 0 - 8
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/EquipmentBaseService.java

@@ -8,7 +8,6 @@ import com.zksy.base.domain.vo.EquipmentBaseVO;
 import com.zksy.manhole.dto.in.AlarmMonitorListInDTO;
 import com.zksy.manhole.dto.in.EquipmentCountByTypeInDTO;
 import com.zksy.manhole.dto.in.EquipmentExportInDTO;
-import com.zksy.manhole.dto.in.ManholeDeviceListInDTO;
 import com.zksy.manhole.dto.in.ManholeDevicePageInDTO;
 import com.zksy.manhole.dto.in.ManholeDeviceStatisticsInDTO;
 import com.zksy.manhole.dto.out.AlarmMonitorListOutDTO;
@@ -79,13 +78,6 @@ public interface EquipmentBaseService extends IService<EquipmentBase> {
      */
     Page<EquipmentBaseOutDTO> findManholeDeviceByPage(ManholeDevicePageInDTO pageInDTO);
 
-    /**
-     * 查询井盖监测设备列表(仅查窨井类型设备:排水窨井=9/供水窨井=10),支持分页与报警级别过滤
-     * @param listInDTO
-     * @return
-     */
-    Page<EquipmentBaseOutDTO> getManholeDataList(ManholeDeviceListInDTO listInDTO);
-
     /**
      * 窨井设备统计:区域分布(数量/占比)+ 类型分布(数量/占比)
      * @param inDTO 筛选条件(区域/设备类型)

+ 0 - 176
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/impl/EquipmentBaseServiceImpl.java

@@ -28,7 +28,6 @@ import com.zksy.common.exception.ServiceException;
 import com.zksy.manhole.dto.in.AlarmMonitorListInDTO;
 import com.zksy.manhole.dto.in.EquipmentCountByTypeInDTO;
 import com.zksy.manhole.dto.in.EquipmentExportInDTO;
-import com.zksy.manhole.dto.in.ManholeDeviceListInDTO;
 import com.zksy.manhole.dto.in.ManholeDevicePageInDTO;
 import com.zksy.manhole.dto.in.ManholeDeviceStatisticsInDTO;
 import com.zksy.manhole.dto.out.*;
@@ -649,181 +648,6 @@ public class EquipmentBaseServiceImpl extends ServiceImpl<EquipmentBaseMapper, E
         return new BigDecimal(count * 100.0 / total).setScale(1, RoundingMode.HALF_UP);
     }
 
-    /**
-     * 查询井盖监测设备列表
-     * @param listInDTO
-     * @return
-     */
-    @Override
-    public Page<EquipmentBaseOutDTO> getManholeDataList(ManholeDeviceListInDTO listInDTO) {
-        log.info("查询井盖监测设备列表-入参:{}", listInDTO);
-        List<String> equipmentIds = null;
-        if(listInDTO.getCurrentStatus() != null || listInDTO.getAlarmStatus() != null || listInDTO.getOnlineStatus() != null){
-            List<EquipmentStatus> equipmentStatusList = equipmentStatusMapper.selectList(new LambdaQueryWrapper<EquipmentStatus>()
-                    .eq(listInDTO.getCurrentStatus() != null, EquipmentStatus::getCurrentStatus, listInDTO.getCurrentStatus())
-                    .eq(listInDTO.getAlarmStatus() != null, EquipmentStatus::getAlarmStatus, listInDTO.getAlarmStatus())
-                    .eq(listInDTO.getOnlineStatus() != null, EquipmentStatus::getOnlineStatus, listInDTO.getOnlineStatus()));
-            if(CollUtil.isEmpty(equipmentStatusList)){
-                return new Page<>(1, 10, 0);
-            }
-            equipmentIds = equipmentStatusList.stream().map(EquipmentStatus::getEquipmentId).distinct().collect(Collectors.toList());
-        }
-        // 仅查询窨井类型设备:排水窨井(equipment_type_id=9)/供水窨井(equipment_type_id=10)
-        List<String> manholeTypeIds = Arrays.asList("5", "9", "10");
-        // 按报警级别过滤时需要 manholeData 参与判定,须全量查出后内存过滤+内存分页
-        boolean needLevelFilter = listInDTO.getAlarmLevel() != null;
-        boolean needManholeData = Boolean.TRUE.equals(listInDTO.getIsQueryManholeData()) || needLevelFilter;
-        LambdaQueryWrapper<EquipmentBase> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.in(EquipmentBase::getEquipmentTypeId, manholeTypeIds)
-                .in(CollUtil.isNotEmpty(equipmentIds), EquipmentBase::getEquipmentId, equipmentIds)
-                .and(StringUtils.isNotBlank(listInDTO.getKeyword()), wrapper -> wrapper
-                        .like(EquipmentBase::getEquipmentCode, listInDTO.getKeyword())
-                        .or()
-                        .like(EquipmentBase::getEquipmentName, listInDTO.getKeyword())
-                        .or()
-                        .like(EquipmentBase::getEquipmentLocation, listInDTO.getKeyword()))
-                .orderByDesc(EquipmentBase::getUpdateTime);
-
-        Page<EquipmentBase> rs;
-        if (needLevelFilter) {
-            // 报警级别需基于最新监测数据判定,先全量查询再内存过滤/分页
-            List<EquipmentBase> allList = this.list(queryWrapper);
-            rs = new Page<>(1, Math.max(allList.size(), 1), allList.size());
-            rs.setRecords(allList);
-        } else if (listInDTO.getPageNum() != null && listInDTO.getPageSize() != null) {
-            Page<EquipmentBase> page = new Page<>(listInDTO.getPageNum(), listInDTO.getPageSize());
-            rs = this.page(page, queryWrapper);
-        } else {
-            List<EquipmentBase> allList = this.list(queryWrapper);
-            rs = new Page<>(1, Math.max(allList.size(), 1), allList.size());
-            rs.setRecords(allList);
-        }
-        List<EquipmentBaseOutDTO> outDTOList = BeanUtil.copyToList(rs.getRecords(), EquipmentBaseOutDTO.class);
-        if (CollUtil.isNotEmpty(outDTOList)) {
-            //查询设备类型
-            List<Integer> equipmentTypeIdList = outDTOList.stream().map(EquipmentBaseOutDTO::getEquipmentTypeId).distinct().collect(Collectors.toList());
-            LambdaQueryWrapper<EquipmentType> batchQw = new LambdaQueryWrapper<>();
-            batchQw.in(EquipmentType::getId, equipmentTypeIdList);
-            List<EquipmentType> equipmentTypeList = equipmentTypeMapper.selectList(batchQw);
-            Map<Integer, EquipmentType> equipmentTypeMap = new HashMap<>();
-            if(CollUtil.isNotEmpty(equipmentTypeList)){
-                equipmentTypeMap.putAll(equipmentTypeList.stream().collect(
-                    Collectors.toMap(EquipmentType::getId, Function.identity(), (key1, key2) -> key2)));
-            }
-            //查询设备状态
-            List<String> equipmentIdList = outDTOList.stream().map(EquipmentBaseOutDTO::getEquipmentId).distinct().collect(Collectors.toList());
-            List<EquipmentStatus> equipmentStatusList = equipmentStatusMapper.selectList(new LambdaQueryWrapper<EquipmentStatus>()
-                    .in(EquipmentStatus::getEquipmentId, equipmentIdList));
-            Map<String, EquipmentStatus> equipmentStatusMap = new HashMap<>();
-            if(CollUtil.isNotEmpty(equipmentStatusList)){
-                equipmentStatusMap.putAll(equipmentStatusList.stream().collect(Collectors.toMap(EquipmentStatus::getEquipmentId, Function.identity(), (key1, key2) -> key2)));
-            }
-            //查询设备监测状态
-            Map<String, List<ManholeData>> imeiCardNumberMapList = new HashMap<>();
-            if(needManholeData){
-                List<String> equipmentCodeList = outDTOList.stream().map(EquipmentBaseOutDTO::getEquipmentCode).distinct().collect(Collectors.toList());
-                List<ManholeData> manholeDataList = manholeDataMapper.selectList(new LambdaQueryWrapper<ManholeData>()
-                        .in(ManholeData::getImeiCardNumber, equipmentCodeList)
-                        .orderByDesc(ManholeData::getCreateTime));
-                imeiCardNumberMapList.putAll(manholeDataList.stream().collect(Collectors.groupingBy(ManholeData::getImeiCardNumber)));
-            }
-            List<ManholeData> manholeDataList = null;
-            for(EquipmentBaseOutDTO outDTO : outDTOList) {
-                EquipmentType equipmentType = equipmentTypeMap.get(outDTO.getEquipmentTypeId());
-                if(equipmentType != null){
-                    outDTO.setEquipmentTypeName(equipmentType.getTypeName());
-                }
-                EquipmentStatus equipmentStatus = equipmentStatusMap.get(outDTO.getEquipmentId());
-                if(equipmentStatus != null){
-                    EquipmentStatusOutDTO equipmentStatusOutDTO = BeanUtil.copyProperties(equipmentStatus, EquipmentStatusOutDTO.class);
-                    outDTO.setEquipmentStatus(equipmentStatusOutDTO);
-                }
-                if(needManholeData){
-                    manholeDataList = imeiCardNumberMapList.get(outDTO.getEquipmentCode());
-                    if(CollUtil.isNotEmpty(manholeDataList)){
-                        ManholeData manholeData = manholeDataList.get(0);
-                        ManholeDataOutDTO manholeDataOutDTO = BeanUtil.copyProperties(manholeData, ManholeDataOutDTO.class);
-                        outDTO.setManholeData(manholeDataOutDTO);
-                    }
-                }
-            }
-        }
-
-        long total;
-        List<EquipmentBaseOutDTO> pageRecords;
-        if (needLevelFilter) {
-            // 内存过滤报警级别
-            List<EquipmentBaseOutDTO> filteredList = outDTOList.stream()
-                    .filter(dto -> matchAlarmLevel(dto, listInDTO.getAlarmLevel()))
-                    .collect(Collectors.toList());
-            total = filteredList.size();
-            pageRecords = applyPage(filteredList, listInDTO.getPageNum(), listInDTO.getPageSize());
-        } else {
-            total = rs.getTotal();
-            pageRecords = outDTOList;
-        }
-        long pageSize = listInDTO.getPageSize() != null ? listInDTO.getPageSize()
-                : (total > 0 ? total : 1);
-        Page<EquipmentBaseOutDTO> outPage = new Page<>(listInDTO.getPageNum() != null ? listInDTO.getPageNum() : 1, pageSize, total);
-        outPage.setRecords(pageRecords);
-        return outPage;
-    }
-
-    /**
-     * 报警级别判定(与前端 buildAlertInfo 保持一致):
-     * 严重报警(1):设备报警状态=1 或 水位/水浸报警;
-     * 一般报警(2):非严重报警且 低电量(<=20%)或 弱信号(<=20%);
-     * 有报警(0):严重报警或一般报警的并集;不传则不过滤。
-     */
-    private boolean matchAlarmLevel(EquipmentBaseOutDTO dto, Integer alarmLevel) {
-        if (alarmLevel == null) {
-            return true;
-        }
-        boolean isCritical = (dto.getEquipmentStatus() != null
-                && Integer.valueOf(1).equals(dto.getEquipmentStatus().getAlarmStatus()))
-                || (dto.getManholeData() != null
-                && ("1".equals(dto.getManholeData().getWaterLevelAlarmStatus())
-                || "1".equals(dto.getManholeData().getWaterInfiltrationAlarmStatus())));
-        if (Integer.valueOf(1).equals(alarmLevel)) {
-            return isCritical;
-        }
-        if (dto.getManholeData() == null) {
-            return Integer.valueOf(0).equals(alarmLevel) && isCritical;
-        }
-        boolean lowBattery = dto.getManholeData().getBatteryLevel() != null
-                && toInt(dto.getManholeData().getBatteryLevel()) <= 20;
-        boolean weakSignal = dto.getManholeData().getSignalStrength() != null
-                && toInt(dto.getManholeData().getSignalStrength()) <= 20;
-        boolean hasAlarm = isCritical || lowBattery || weakSignal;
-        if (Integer.valueOf(0).equals(alarmLevel)) {
-            return hasAlarm;
-        }
-        // alarmLevel = 2:一般报警
-        return hasAlarm && !isCritical;
-    }
-
-    private int toInt(String value) {
-        try {
-            return (int) Double.parseDouble(value.trim());
-        } catch (Exception e) {
-            return Integer.MAX_VALUE;
-        }
-    }
-
-    /**
-     * 内存分页(报警级别过滤后使用)
-     */
-    private List<EquipmentBaseOutDTO> applyPage(List<EquipmentBaseOutDTO> list, Long pageNum, Long pageSize) {
-        if (pageNum == null || pageSize == null) {
-            return list;
-        }
-        int start = (int) ((pageNum - 1) * pageSize);
-        if (start >= list.size()) {
-            return new ArrayList<>();
-        }
-        int end = (int) Math.min(start + pageSize, list.size());
-        return new ArrayList<>(list.subList(start, end));
-    }
 
     /**
      * 窨井盖实时监测-设备报警监控列表