|
|
@@ -40,42 +40,18 @@ public class AlarmDataServiceImpl extends ServiceImpl<AlarmDataMapper, AlarmData
|
|
|
Integer alarmStatus, String equipmentType,
|
|
|
String startTime, String endTime) {
|
|
|
Page<AlarmData> page = new Page<>(pageNum, pageSize);
|
|
|
- LambdaQueryWrapper<AlarmData> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
|
// 当传入 equipmentType='drainage' 时,通过设备类型树关联查询排水类设备编码列表。
|
|
|
// 不能再写死历史类型 ID:当前排水根类型为 2,子类型由 equipment_type.parent_id 维护。
|
|
|
- if ("drainage".equals(equipmentType)) {
|
|
|
- List<String> drainageTypeIds = findDrainageTypeIds();
|
|
|
- if (drainageTypeIds.isEmpty()) {
|
|
|
- return new Page<>(pageNum, pageSize);
|
|
|
- }
|
|
|
- LambdaQueryWrapper<EquipmentBase> eqQuery = new LambdaQueryWrapper<>();
|
|
|
- eqQuery.in(EquipmentBase::getEquipmentTypeId, drainageTypeIds)
|
|
|
- .select(EquipmentBase::getEquipmentCode);
|
|
|
- List<EquipmentBase> devices = equipmentBaseMapper.selectList(eqQuery);
|
|
|
- List<String> deviceCodes = devices.stream()
|
|
|
- .map(EquipmentBase::getEquipmentCode)
|
|
|
- .filter(code -> code != null && !code.isEmpty())
|
|
|
- .collect(Collectors.toList());
|
|
|
- if (deviceCodes.isEmpty()) {
|
|
|
- // 没有排水类设备,直接返回空结果
|
|
|
+ List<String> deviceCodes = deviceCodesForQuery(equipmentType);
|
|
|
+ if ("drainage".equals(equipmentType) && (deviceCodes == null || deviceCodes.isEmpty())) {
|
|
|
return new Page<>(pageNum, pageSize);
|
|
|
- }
|
|
|
- queryWrapper.in(AlarmData::getDeviceCode, deviceCodes);
|
|
|
}
|
|
|
|
|
|
- queryWrapper.like(deviceCode != null, AlarmData::getDeviceCode, deviceCode)
|
|
|
- .like(warningType != null, AlarmData::getWarningType, warningType)
|
|
|
- .like(warningCode != null, AlarmData::getWarningCode, warningCode)
|
|
|
- .eq(alarmStatus != null, AlarmData::getAlarmStatus, alarmStatus);
|
|
|
- if (startTime != null && !startTime.isEmpty()) {
|
|
|
- queryWrapper.ge(AlarmData::getAlarmTime, parseDateTime(startTime));
|
|
|
- }
|
|
|
- if (endTime != null && !endTime.isEmpty()) {
|
|
|
- queryWrapper.le(AlarmData::getAlarmTime, parseDateTime(endTime));
|
|
|
- }
|
|
|
- queryWrapper.orderByDesc(AlarmData::getAlarmTime);
|
|
|
- Page<AlarmData> result = this.page(page, queryWrapper);
|
|
|
+ // 数据库先按设备编码保留最新一条,再执行分页,避免内存去重造成分页漏数据。
|
|
|
+ Page<AlarmData> result = (Page<AlarmData>) baseMapper.selectLatestPage(
|
|
|
+ page, deviceCodes, deviceCode, warningType,
|
|
|
+ warningCode, alarmStatus, parseStartTime(startTime), parseEndTime(endTime));
|
|
|
|
|
|
// 填充 deviceName/longitude/latitude:通过 device_code 从 equipment_base 表关联查询
|
|
|
fillDeviceInfo(result.getRecords());
|
|
|
@@ -85,6 +61,24 @@ public class AlarmDataServiceImpl extends ServiceImpl<AlarmDataMapper, AlarmData
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ private List<String> deviceCodesForQuery(String equipmentType) {
|
|
|
+ if (!"drainage".equals(equipmentType)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<String> drainageTypeIds = findDrainageTypeIds();
|
|
|
+ if (drainageTypeIds.isEmpty()) {
|
|
|
+ return List.of();
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<EquipmentBase> eqQuery = new LambdaQueryWrapper<>();
|
|
|
+ eqQuery.in(EquipmentBase::getEquipmentTypeId, drainageTypeIds)
|
|
|
+ .select(EquipmentBase::getEquipmentCode);
|
|
|
+ return equipmentBaseMapper.selectList(eqQuery).stream()
|
|
|
+ .map(EquipmentBase::getEquipmentCode)
|
|
|
+ .filter(code -> code != null && !code.isEmpty())
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 读取排水设备根类型及其全部后代类型,避免设备类型调整后报警列表被错误过滤为空。
|
|
|
*/
|
|
|
@@ -160,6 +154,25 @@ public class AlarmDataServiceImpl extends ServiceImpl<AlarmDataMapper, AlarmData
|
|
|
return LocalDateTime.parse(value, java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
}
|
|
|
|
|
|
+ private LocalDateTime parseStartTime(String value) {
|
|
|
+ return parseDateTime(value, " 00:00:00");
|
|
|
+ }
|
|
|
+
|
|
|
+ private LocalDateTime parseEndTime(String value) {
|
|
|
+ return parseDateTime(value, " 23:59:59");
|
|
|
+ }
|
|
|
+
|
|
|
+ private LocalDateTime parseDateTime(String value, String dateSuffix) {
|
|
|
+ if (value == null || value.trim().isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String normalized = value.trim();
|
|
|
+ if (normalized.length() == 10) {
|
|
|
+ normalized += dateSuffix;
|
|
|
+ }
|
|
|
+ return parseDateTime(normalized);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据 deviceCode 从 equipment_base 表批量填充 deviceName、longitude、latitude
|
|
|
*/
|