diff --git a/user-service/src/main/java/com/mh/user/service/DealDataExceptionService.java b/user-service/src/main/java/com/mh/user/service/DealDataExceptionService.java new file mode 100644 index 0000000..83bbb63 --- /dev/null +++ b/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 mergedRecords); + + // 处理5分钟异常的数据 + void dealFiveInstantaneousExceptionData(List records); + +} diff --git a/user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java index bac0637..b00aa93 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java +++ b/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.mapper.*; import com.mh.user.service.DataResultService; +import com.mh.user.service.DealDataExceptionService; import com.mh.user.service.DeviceInstallService; import com.mh.user.service.MeterManageService; import com.mh.user.utils.DateUtil; @@ -65,6 +66,9 @@ public class DataResultServiceImpl implements DataResultService { @Resource MeterManageService meterManageService; + @Resource + private DealDataExceptionService dealDataExceptionService; + private final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override @@ -348,6 +352,7 @@ public class DataResultServiceImpl implements DataResultService { } else { count = dataResultFiveMiCount(projectId, startDate, curDate, momentCoolingStr, registerAddr); } + dealDataExceptionService.dealFifteenInstantaneousExceptionData(mergedRecords); return HttpResult.ok(count, mergedRecords); } // else if (dateType.equals("12小时")) { diff --git a/user-service/src/main/java/com/mh/user/service/impl/DealDataExceptionServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/DealDataExceptionServiceImpl.java new file mode 100644 index 0000000..3f3f969 --- /dev/null +++ b/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 mergedRecords) { + new Thread(() -> { + try { + // 判断当前集合momentCooling,intTemp,outTemp存在小于0的数据少于10就要重新计算 + // stream流判断momentCooling的集合中数据小于等于0的数据集合 + List 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 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 records) { + } +}