yjt-service/src/main/java/com/whdc/service/impl/WqRRealServiceImp.java

74 lines
2.5 KiB
Java

package com.whdc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.whdc.entity.WqRReal;
import com.whdc.mapper.WqRealMapper;
import com.whdc.service.WqRRealService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
* 水质信息表 服务实现类
* </p>
*
* @author wanyan
* @since 2023-11-01
*/
@Service
public class WqRRealServiceImp extends ServiceImpl<WqRealMapper, WqRReal> implements WqRRealService {
@Value("${offlineThreshold}")
private Integer offlineThreshold;
@Override
public List<WqRReal> getList() {
LambdaQueryWrapper<WqRReal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(WqRReal::getTm).orderByAsc(WqRReal::getMn);
return this.list(queryWrapper);
}
@Override
public Map<Boolean, List<WqRReal>> online() {
List<WqRReal> list = this.list();
if(list != null && !list.isEmpty()) {
return list.stream()
.collect(Collectors.partitioningBy(device -> !isDeviceOffline(device),
// 对分组后的列表按时间倒序排序
Collectors.collectingAndThen(
Collectors.toList(),
des -> des.stream()
.sorted(Comparator.comparing(WqRReal::getTm).reversed())
.collect(Collectors.toList())
)
));
}
return new HashMap<>();
}
public boolean isDeviceOffline(WqRReal device) {
return isDeviceOffline(device, offlineThreshold*3600*1000);
}
public boolean isDeviceOffline(WqRReal device, long threshold) {
return isDeviceOffline(device, LocalDateTime.now(), threshold);
}
private boolean isDeviceOffline(WqRReal device, LocalDateTime currentTime, long threshold) {
if (device == null || device.getTm() == null) {
return true; // 没有时间数据的设备视为离线
}
Duration duration = Duration.between(device.getTm(), currentTime);
long millis = duration.toMillis();
return millis >= threshold;
}
}