|
@@ -4,8 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
-import com.zksy.WaterSupply.MonitorAlarm.dto.out.AlarmMapPointOutDTO;
|
|
|
|
|
import com.zksy.WaterSupply.MonitorAlarm.dto.out.AlarmStatsOutDTO;
|
|
import com.zksy.WaterSupply.MonitorAlarm.dto.out.AlarmStatsOutDTO;
|
|
|
import com.zksy.WaterSupply.MonitorAlarm.dto.out.WaterAlarmOutDTO;
|
|
import com.zksy.WaterSupply.MonitorAlarm.dto.out.WaterAlarmOutDTO;
|
|
|
import com.zksy.WaterSupply.MonitorAlarm.service.IWaterSupplyAlarmService;
|
|
import com.zksy.WaterSupply.MonitorAlarm.service.IWaterSupplyAlarmService;
|
|
@@ -22,9 +20,6 @@ import com.zksy.base.domain.EquipmentStatus;
|
|
|
import com.zksy.base.domain.EquipmentType;
|
|
import com.zksy.base.domain.EquipmentType;
|
|
|
import com.zksy.base.mapper.EquipmentTypeMapper;
|
|
import com.zksy.base.mapper.EquipmentTypeMapper;
|
|
|
import com.zksy.ops.domain.WorkOrder;
|
|
import com.zksy.ops.domain.WorkOrder;
|
|
|
-import com.zksy.base.mapper.EquipmentBaseMapper;
|
|
|
|
|
-import com.zksy.ops.mapper.WorkOrderMapper;
|
|
|
|
|
-import com.zksy.common.exception.ServiceException;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -34,8 +29,6 @@ import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
|
-import java.util.Comparator;
|
|
|
|
|
-import java.util.LinkedHashMap;
|
|
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
@@ -60,14 +53,6 @@ public class WaterSupplyAlarmServiceImpl implements IWaterSupplyAlarmService {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private WaterSupplyQueryService waterSupplyQueryService;
|
|
private WaterSupplyQueryService waterSupplyQueryService;
|
|
|
|
|
|
|
|
- @Autowired
|
|
|
|
|
- private EquipmentBaseMapper equipmentBaseMapper;
|
|
|
|
|
-
|
|
|
|
|
- @Autowired
|
|
|
|
|
- private WorkOrderMapper workOrderMapper;
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private EquipmentTypeMapper equipmentTypeMapper;
|
|
private EquipmentTypeMapper equipmentTypeMapper;
|
|
|
|
|
|
|
@@ -103,7 +88,7 @@ public class WaterSupplyAlarmServiceImpl implements IWaterSupplyAlarmService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 报警ID -> 工单映射(通过 alarm_data.order_id 关联)
|
|
|
|
|
|
|
+ * 报警ID -> 工单映射(通过 alarm_data.work_order_id 关联)
|
|
|
*/
|
|
*/
|
|
|
private Map<String, WorkOrder> loadWorkOrderMapByAlarmIds(List<String> alarmIds) {
|
|
private Map<String, WorkOrder> loadWorkOrderMapByAlarmIds(List<String> alarmIds) {
|
|
|
return waterSupplyQueryService.latestOrdersByAlarmIds(alarmIds);
|
|
return waterSupplyQueryService.latestOrdersByAlarmIds(alarmIds);
|
|
@@ -151,7 +136,7 @@ public class WaterSupplyAlarmServiceImpl implements IWaterSupplyAlarmService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------
|
|
// ------------------------------------------------------------------
|
|
|
- // 实时 / 历史 / 详情
|
|
|
|
|
|
|
+ // 首页实时异常
|
|
|
// ------------------------------------------------------------------
|
|
// ------------------------------------------------------------------
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -172,99 +157,6 @@ public class WaterSupplyAlarmServiceImpl implements IWaterSupplyAlarmService {
|
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @Override
|
|
|
|
|
- public Page<WaterAlarmOutDTO> getHistoryAlarmPage(long pageNum, long pageSize,
|
|
|
|
|
- String deviceCode, String warningType,
|
|
|
|
|
- Integer alarmLevel, Integer alarmStatus,
|
|
|
|
|
- LocalDateTime startTime, LocalDateTime endTime,
|
|
|
|
|
- String keyword) {
|
|
|
|
|
- Page<AlarmData> page = new Page<>(pageNum, pageSize);
|
|
|
|
|
- Set<String> waterCodes = resolveWaterDeviceCodes();
|
|
|
|
|
- LambdaQueryWrapper<AlarmData> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- if (!waterCodes.isEmpty()) {
|
|
|
|
|
- wrapper.in(AlarmData::getDeviceCode, waterCodes);
|
|
|
|
|
- } else {
|
|
|
|
|
- wrapper.eq(AlarmData::getId, "-1");
|
|
|
|
|
- }
|
|
|
|
|
- wrapper.eq(StrUtil.isNotBlank(deviceCode), AlarmData::getDeviceCode, deviceCode)
|
|
|
|
|
- .like(StrUtil.isNotBlank(warningType), AlarmData::getWarningType, warningType)
|
|
|
|
|
- .eq(alarmLevel != null, AlarmData::getAlarmLevel, alarmLevel)
|
|
|
|
|
- .eq(alarmStatus != null, AlarmData::getAlarmStatus, alarmStatus)
|
|
|
|
|
- .ge(startTime != null, AlarmData::getCreateTime, startTime)
|
|
|
|
|
- .le(endTime != null, AlarmData::getCreateTime, endTime)
|
|
|
|
|
- .and(StrUtil.isNotBlank(keyword), w -> w.like(AlarmData::getDeviceCode, keyword)
|
|
|
|
|
- .or().like(AlarmData::getWarningType, keyword)
|
|
|
|
|
- .or().like(AlarmData::getWarningCode, keyword))
|
|
|
|
|
- .orderByDesc(AlarmData::getCreateTime);
|
|
|
|
|
- Page<AlarmData> result = alarmDataService.page(page, wrapper);
|
|
|
|
|
- Page<WaterAlarmOutDTO> outPage = new Page<>(pageNum, pageSize, result.getTotal());
|
|
|
|
|
- outPage.setRecords(convertToVoList(result.getRecords()));
|
|
|
|
|
- return outPage;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public WaterAlarmOutDTO getAlarmDetail(String alarmId) {
|
|
|
|
|
- AlarmData alarm = alarmDataService.getById(alarmId);
|
|
|
|
|
- if (alarm == null) {
|
|
|
|
|
- throw new ServiceException("报警信息不存在");
|
|
|
|
|
- }
|
|
|
|
|
- List<WaterAlarmOutDTO> vos = convertToVoList(Collections.singletonList(alarm));
|
|
|
|
|
- return vos.isEmpty() ? null : vos.get(0);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // ------------------------------------------------------------------
|
|
|
|
|
- // 报警管理只读台账(供水设备 + 后端推导展示状态)
|
|
|
|
|
- // ------------------------------------------------------------------
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public Page<WaterAlarmOutDTO> getAlarmLedgerPage(long pageNum, long pageSize,
|
|
|
|
|
- String deviceCode, String warningType,
|
|
|
|
|
- Integer alarmLevel, Integer displayStatus,
|
|
|
|
|
- Integer deviceAlarmStatus,
|
|
|
|
|
- LocalDateTime startTime, LocalDateTime endTime,
|
|
|
|
|
- String keyword) {
|
|
|
|
|
- List<WaterAlarmOutDTO> rows = getAlarmLedgerExport(deviceCode, warningType, alarmLevel,
|
|
|
|
|
- displayStatus, deviceAlarmStatus, startTime, endTime, keyword);
|
|
|
|
|
- Page<WaterAlarmOutDTO> page = new Page<>(pageNum, pageSize, rows.size());
|
|
|
|
|
- if (pageNum < 1 || pageSize < 1) {
|
|
|
|
|
- page.setRecords(new ArrayList<>());
|
|
|
|
|
- return page;
|
|
|
|
|
- }
|
|
|
|
|
- int from = (int) Math.min((pageNum - 1) * pageSize, rows.size());
|
|
|
|
|
- int to = (int) Math.min(from + pageSize, rows.size());
|
|
|
|
|
- page.setRecords(new ArrayList<>(rows.subList(from, to)));
|
|
|
|
|
- return page;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public List<WaterAlarmOutDTO> getAlarmLedgerExport(String deviceCode, String warningType,
|
|
|
|
|
- Integer alarmLevel, Integer displayStatus,
|
|
|
|
|
- Integer deviceAlarmStatus,
|
|
|
|
|
- LocalDateTime startTime, LocalDateTime endTime,
|
|
|
|
|
- String keyword) {
|
|
|
|
|
- Set<String> waterCodes = resolveWaterDeviceCodes();
|
|
|
|
|
- if (waterCodes.isEmpty()) {
|
|
|
|
|
- return new ArrayList<>();
|
|
|
|
|
- }
|
|
|
|
|
- LambdaQueryWrapper<AlarmData> wrapper = new LambdaQueryWrapper<AlarmData>()
|
|
|
|
|
- .in(AlarmData::getDeviceCode, waterCodes)
|
|
|
|
|
- .eq(StrUtil.isNotBlank(deviceCode), AlarmData::getDeviceCode, deviceCode)
|
|
|
|
|
- .like(StrUtil.isNotBlank(warningType), AlarmData::getWarningType, warningType)
|
|
|
|
|
- .eq(alarmLevel != null, AlarmData::getAlarmLevel, alarmLevel)
|
|
|
|
|
- .ge(startTime != null, AlarmData::getCreateTime, startTime)
|
|
|
|
|
- .le(endTime != null, AlarmData::getCreateTime, endTime)
|
|
|
|
|
- .and(StrUtil.isNotBlank(keyword), w -> w.like(AlarmData::getDeviceCode, keyword)
|
|
|
|
|
- .or().like(AlarmData::getWarningType, keyword)
|
|
|
|
|
- .or().like(AlarmData::getWarningCode, keyword))
|
|
|
|
|
- .orderByDesc(AlarmData::getCreateTime);
|
|
|
|
|
- List<AlarmData> alarms = alarmDataService.list(wrapper);
|
|
|
|
|
- List<WaterAlarmOutDTO> rows = buildLedgerVoList(alarms);
|
|
|
|
|
- return rows.stream()
|
|
|
|
|
- .filter(row -> displayStatus == null || displayStatus.equals(row.getDisplayStatus()))
|
|
|
|
|
- .filter(row -> deviceAlarmStatus == null || deviceAlarmStatus.equals(row.getDeviceAlarmStatus()))
|
|
|
|
|
- .collect(Collectors.toList());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* 报警记录 -> 台账出参:补充设备报警状态与后端推导的报警展示状态。
|
|
* 报警记录 -> 台账出参:补充设备报警状态与后端推导的报警展示状态。
|
|
|
*
|
|
*
|
|
@@ -364,101 +256,8 @@ public class WaterSupplyAlarmServiceImpl implements IWaterSupplyAlarmService {
|
|
|
return waterSupplyQueryService.statusesByDeviceIds(equipmentIds);
|
|
return waterSupplyQueryService.statusesByDeviceIds(equipmentIds);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 报警记录 -> 出参(填充设备名称/位置/经纬度及关联工单)
|
|
|
|
|
- */
|
|
|
|
|
- private List<WaterAlarmOutDTO> convertToVoList(List<AlarmData> alarms) {
|
|
|
|
|
- if (CollUtil.isEmpty(alarms)) {
|
|
|
|
|
- return new ArrayList<>();
|
|
|
|
|
- }
|
|
|
|
|
- Map<String, EquipmentBase> eqMap = loadEquipmentCodeMap(alarms.stream()
|
|
|
|
|
- .map(AlarmData::getDeviceCode).collect(Collectors.toSet()));
|
|
|
|
|
- Map<Integer, String> typeNames = loadDeviceTypeNames(eqMap.values());
|
|
|
|
|
- List<String> alarmIds = alarms.stream().map(AlarmData::getId).collect(Collectors.toList());
|
|
|
|
|
- Map<String, WorkOrder> orderMap = loadWorkOrderMapByAlarmIds(alarmIds);
|
|
|
|
|
- List<WaterAlarmOutDTO> vos = new ArrayList<>();
|
|
|
|
|
- for (AlarmData alarm : alarms) {
|
|
|
|
|
- WaterAlarmOutDTO vo = BeanUtil.copyProperties(alarm, WaterAlarmOutDTO.class);
|
|
|
|
|
- EquipmentBase eq = alarm.getDeviceCode() == null ? null : eqMap.get(alarm.getDeviceCode());
|
|
|
|
|
- if (eq != null) {
|
|
|
|
|
- vo.setEquipmentId(eq.getEquipmentId());
|
|
|
|
|
- vo.setDeviceType(typeNames.get(eq.getEquipmentTypeId()));
|
|
|
|
|
- if (StrUtil.isBlank(vo.getDeviceName())) {
|
|
|
|
|
- vo.setDeviceName(eq.getEquipmentName());
|
|
|
|
|
- }
|
|
|
|
|
- vo.setEquipmentLocation(eq.getEquipmentLocation());
|
|
|
|
|
- if (eq.getLongitude() != null) {
|
|
|
|
|
- vo.setLongitude(eq.getLongitude().toPlainString());
|
|
|
|
|
- }
|
|
|
|
|
- if (eq.getLatitude() != null) {
|
|
|
|
|
- vo.setLatitude(eq.getLatitude().toPlainString());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- vo.setAlarmLevelText(formatAlarmLevel(alarm.getAlarmLevel()));
|
|
|
|
|
- vo.setAlarmStatusText(alarm.getAlarmStatus() != null && alarm.getAlarmStatus() == 0 ? "待处理" : "已处理");
|
|
|
|
|
- WorkOrder order = alarm.getId() == null ? null : orderMap.get(alarm.getId());
|
|
|
|
|
- if (order != null) {
|
|
|
|
|
- vo.setOrderNo(order.getOrderNo());
|
|
|
|
|
- vo.setOrderStatus(order.getOrderStatus());
|
|
|
|
|
- }
|
|
|
|
|
- vos.add(vo);
|
|
|
|
|
- }
|
|
|
|
|
- return vos;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
private String formatAlarmLevel(Integer alarmLevel) {
|
|
private String formatAlarmLevel(Integer alarmLevel) {
|
|
|
AlarmLevelEnum level = AlarmLevelEnum.fromCode(alarmLevel);
|
|
AlarmLevelEnum level = AlarmLevelEnum.fromCode(alarmLevel);
|
|
|
return level == null ? "未知等级" : level.getLabel();
|
|
return level == null ? "未知等级" : level.getLabel();
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // ------------------------------------------------------------------
|
|
|
|
|
- // 监测报警一张图
|
|
|
|
|
- // ------------------------------------------------------------------
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public List<AlarmMapPointOutDTO> getAlarmMapPoints() {
|
|
|
|
|
- Set<String> waterCodes = resolveWaterDeviceCodes();
|
|
|
|
|
- if (waterCodes.isEmpty()) {
|
|
|
|
|
- return new ArrayList<>();
|
|
|
|
|
- }
|
|
|
|
|
- List<AlarmData> pendingAlarms = alarmDataService.list(new LambdaQueryWrapper<AlarmData>()
|
|
|
|
|
- .in(AlarmData::getDeviceCode, waterCodes)
|
|
|
|
|
- .eq(AlarmData::getAlarmStatus, 0)
|
|
|
|
|
- .orderByDesc(AlarmData::getCreateTime));
|
|
|
|
|
- Map<String, EquipmentBase> eqMap = loadEquipmentCodeMap(pendingAlarms.stream()
|
|
|
|
|
- .map(AlarmData::getDeviceCode).collect(Collectors.toSet()));
|
|
|
|
|
- // 同一设备只展示最新一条未处理报警
|
|
|
|
|
- Map<String, AlarmData> latestPerDevice = new LinkedHashMap<>();
|
|
|
|
|
- for (AlarmData alarm : pendingAlarms) {
|
|
|
|
|
- latestPerDevice.putIfAbsent(alarm.getDeviceCode(), alarm);
|
|
|
|
|
- }
|
|
|
|
|
- List<AlarmMapPointOutDTO> points = new ArrayList<>();
|
|
|
|
|
- for (AlarmData alarm : latestPerDevice.values()) {
|
|
|
|
|
- EquipmentBase eq = alarm.getDeviceCode() == null ? null : eqMap.get(alarm.getDeviceCode());
|
|
|
|
|
- if (eq == null || eq.getLongitude() == null || eq.getLatitude() == null) {
|
|
|
|
|
- continue;
|
|
|
|
|
- }
|
|
|
|
|
- AlarmMapPointOutDTO point = new AlarmMapPointOutDTO();
|
|
|
|
|
- point.setAlarmId(alarm.getId());
|
|
|
|
|
- point.setDeviceCode(alarm.getDeviceCode());
|
|
|
|
|
- point.setDeviceName(eq.getEquipmentName());
|
|
|
|
|
- point.setEquipmentLocation(eq.getEquipmentLocation());
|
|
|
|
|
- point.setLongitude(eq.getLongitude().toPlainString());
|
|
|
|
|
- point.setLatitude(eq.getLatitude().toPlainString());
|
|
|
|
|
- point.setWarningType(alarm.getWarningType());
|
|
|
|
|
- point.setActualValue(alarm.getActualValue());
|
|
|
|
|
- point.setAlarmLevel(alarm.getAlarmLevel());
|
|
|
|
|
- point.setAlarmLevelText(formatAlarmLevel(alarm.getAlarmLevel()));
|
|
|
|
|
- point.setCreateTime(alarm.getCreateTime());
|
|
|
|
|
- points.add(point);
|
|
|
|
|
- }
|
|
|
|
|
- points.sort(Comparator.comparing(AlarmMapPointOutDTO::getAlarmLevel, Comparator.nullsLast(Comparator.naturalOrder())));
|
|
|
|
|
- return points;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // ------------------------------------------------------------------
|
|
|
|
|
- // 当前用户
|
|
|
|
|
- // ------------------------------------------------------------------
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|