Browse Source

1、优化查询数据瞬时值没有数据的问题。

dev
mh 4 months ago
parent
commit
660b548c77
  1. 23
      user-service/src/main/java/com/mh/user/service/DealDataExceptionService.java
  2. 5
      user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java
  3. 81
      user-service/src/main/java/com/mh/user/service/impl/DealDataExceptionServiceImpl.java

23
user-service/src/main/java/com/mh/user/service/DealDataExceptionService.java

@ -0,0 +1,23 @@
package com.mh.user.service;
import com.mh.user.dto.DataResultDTO;
import com.mh.user.entity.DataResultChEntity;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project mh_esi
* @description 处理数据异常
* @date 2025-01-17 09:41:48
*/
public interface DealDataExceptionService {
// 处理15分钟异常的数据
void dealFifteenInstantaneousExceptionData(List<DataResultDTO> mergedRecords);
// 处理5分钟异常的数据
void dealFiveInstantaneousExceptionData(List<DataResultChEntity> records);
}

5
user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java

@ -6,6 +6,7 @@ import com.mh.user.dto.DataResultDTO;
import com.mh.user.entity.*; import com.mh.user.entity.*;
import com.mh.user.mapper.*; import com.mh.user.mapper.*;
import com.mh.user.service.DataResultService; import com.mh.user.service.DataResultService;
import com.mh.user.service.DealDataExceptionService;
import com.mh.user.service.DeviceInstallService; import com.mh.user.service.DeviceInstallService;
import com.mh.user.service.MeterManageService; import com.mh.user.service.MeterManageService;
import com.mh.user.utils.DateUtil; import com.mh.user.utils.DateUtil;
@ -65,6 +66,9 @@ public class DataResultServiceImpl implements DataResultService {
@Resource @Resource
MeterManageService meterManageService; MeterManageService meterManageService;
@Resource
private DealDataExceptionService dealDataExceptionService;
private final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override @Override
@ -348,6 +352,7 @@ public class DataResultServiceImpl implements DataResultService {
} else { } else {
count = dataResultFiveMiCount(projectId, startDate, curDate, momentCoolingStr, registerAddr); count = dataResultFiveMiCount(projectId, startDate, curDate, momentCoolingStr, registerAddr);
} }
dealDataExceptionService.dealFifteenInstantaneousExceptionData(mergedRecords);
return HttpResult.ok(count, mergedRecords); return HttpResult.ok(count, mergedRecords);
} }
// else if (dateType.equals("12小时")) { // else if (dateType.equals("12小时")) {

81
user-service/src/main/java/com/mh/user/service/impl/DealDataExceptionServiceImpl.java

@ -0,0 +1,81 @@
package com.mh.user.service.impl;
import com.mh.user.dto.DataResultDTO;
import com.mh.user.entity.DataResultChEntity;
import com.mh.user.mapper.chillers.DealDataMapper;
import com.mh.user.service.DealDataExceptionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author LJF
* @version 1.0
* @project mh_esi
* @description 处理异常数据
* @date 2025-01-17 09:47:03
*/
@Slf4j
@Service
public class DealDataExceptionServiceImpl implements DealDataExceptionService {
@Resource
private DealDataMapper dealDataMapper;
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public void dealFifteenInstantaneousExceptionData(List<DataResultDTO> mergedRecords) {
new Thread(() -> {
try {
// 判断当前集合momentCooling,intTemp,outTemp存在小于0的数据少于10就要重新计算
// stream流判断momentCooling的集合中数据小于等于0的数据集合
List<DataResultDTO> momentCoolingList = mergedRecords.stream().filter(dataResultDTO -> {
BigDecimal momentCooling = new BigDecimal(dataResultDTO.getMomentCooling());
return momentCooling.compareTo(BigDecimal.ZERO) <= 0;
}).collect(Collectors.toList());
if (momentCoolingList.size() <= 10 && !momentCoolingList.isEmpty()) {
// 重新计算momentCooling的值
for (DataResultDTO dataResultDTO : momentCoolingList) {
// 将字符串转换为 LocalDateTime
LocalDateTime localDateTime = LocalDateTime.parse(dataResultDTO.getTime(), formatter);
for (int i = 0; i < 5; i++) {
dealDataMapper.proDataResult(localDateTime.format(formatter), dataResultDTO.getProjectId());
localDateTime = localDateTime.plusMinutes(1);
}
}
}
// stream流判断intTemp,outTemp的集合中数据小于等于0的数据集合
List<DataResultDTO> intTempList = mergedRecords.stream().filter(dataResultDTO -> {
BigDecimal intTemp = new BigDecimal(dataResultDTO.getIntTemp());
return intTemp.compareTo(BigDecimal.ZERO) <= 0;
}).collect(Collectors.toList());
if (intTempList.size() <= 10 && !intTempList.isEmpty()) {
// 重新计算intTemp,outTemp的值
for (DataResultDTO dataResultDTO : intTempList) {
// 将字符串转换为 LocalDateTime
LocalDateTime localDateTime = LocalDateTime.parse(dataResultDTO.getTime(), formatter);
for (int i = 0; i < 5; i++) {
dealDataMapper.proDataResult(localDateTime.format(formatter), dataResultDTO.getProjectId());
localDateTime = localDateTime.plusMinutes(1);
}
}
}
} catch (Exception e) {
log.error("处理十五分钟异常数据失败", e);
}
}).start();
}
@Override
public void dealFiveInstantaneousExceptionData(List<DataResultChEntity> records) {
}
}
Loading…
Cancel
Save