|
|
@ -10,24 +10,19 @@ import com.github.pagehelper.PageHelper; |
|
|
import com.xr.device_display.config.common.AjaxResult; |
|
|
import com.xr.device_display.config.common.AjaxResult; |
|
|
import com.xr.device_display.config.utils.StringUtils; |
|
|
import com.xr.device_display.config.utils.StringUtils; |
|
|
import com.xr.device_display.modules.analysis.dto.PresentReadingQueryDto; |
|
|
import com.xr.device_display.modules.analysis.dto.PresentReadingQueryDto; |
|
|
import com.xr.device_display.modules.analysis.entity.Lds5000; |
|
|
import com.xr.device_display.modules.analysis.entity.*; |
|
|
import com.xr.device_display.modules.analysis.entity.MeterAbnormalRecord; |
|
|
|
|
|
import com.xr.device_display.modules.analysis.entity.MeterConfig; |
|
|
|
|
|
import com.xr.device_display.modules.analysis.entity.MeterReadingRecord; |
|
|
|
|
|
import com.xr.device_display.modules.analysis.mapper.MeterAbnormalRecordMapper; |
|
|
import com.xr.device_display.modules.analysis.mapper.MeterAbnormalRecordMapper; |
|
|
|
|
|
import com.xr.device_display.modules.analysis.mapper.MeterConfigMapper; |
|
|
import com.xr.device_display.modules.analysis.mapper.MeterReadingRecordMapper; |
|
|
import com.xr.device_display.modules.analysis.mapper.MeterReadingRecordMapper; |
|
|
import com.xr.device_display.modules.analysis.service.ILds5000Service; |
|
|
import com.xr.device_display.modules.analysis.service.*; |
|
|
import com.xr.device_display.modules.analysis.service.IMeterAbnormalRecordService; |
|
|
|
|
|
import com.xr.device_display.modules.analysis.service.IMeterConfigService; |
|
|
|
|
|
import com.xr.device_display.modules.analysis.service.IMeterReadingRecordService; |
|
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
import com.xr.device_display.modules.analysis.vo.MeterReadingRecordQueryVo; |
|
|
import com.xr.device_display.modules.analysis.vo.MeterReadingRecordQueryVo; |
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
|
import org.springframework.scheduling.annotation.Scheduled; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
|
import java.time.LocalDate; |
|
|
import java.time.*; |
|
|
import java.time.LocalDateTime; |
|
|
|
|
|
import java.time.ZoneId; |
|
|
|
|
|
import java.util.*; |
|
|
import java.util.*; |
|
|
import java.util.stream.Collectors; |
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
@ -58,6 +53,15 @@ public class MeterReadingRecordServiceImpl extends ServiceImpl<MeterReadingRecor |
|
|
@Autowired |
|
|
@Autowired |
|
|
private ILds5000Service lds5000Service; |
|
|
private ILds5000Service lds5000Service; |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
|
private IMeterTypeService meterTypeService; |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
|
private IReferenceDataService referenceDataService; |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
|
private MeterConfigMapper meterConfigMapper; |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public List<MeterReadingRecord> getMeterReadingRecordList(MeterReadingRecordQueryVo vo) { |
|
|
public List<MeterReadingRecord> getMeterReadingRecordList(MeterReadingRecordQueryVo vo) { |
|
|
if (CollUtil.isNotEmpty(vo.getAllTime())) { |
|
|
if (CollUtil.isNotEmpty(vo.getAllTime())) { |
|
|
@ -121,14 +125,12 @@ public class MeterReadingRecordServiceImpl extends ServiceImpl<MeterReadingRecor |
|
|
|
|
|
|
|
|
// 获取当前日期
|
|
|
// 获取当前日期
|
|
|
LocalDate currentDate = LocalDate.now(); |
|
|
LocalDate currentDate = LocalDate.now(); |
|
|
// 获取第二天日期
|
|
|
|
|
|
LocalDate nextDay = currentDate.plusDays(1); |
|
|
|
|
|
|
|
|
|
|
|
// 构建查询条件:在过去7天内的记录
|
|
|
// 构建查询条件:在过去7天内的记录
|
|
|
LocalDate sevenDaysAgo = currentDate.minusDays(days); |
|
|
LocalDate sevenDaysAgo = currentDate.minusDays(days); |
|
|
LambdaQueryWrapper<MeterReadingRecord> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
|
|
LambdaQueryWrapper<MeterReadingRecord> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
|
|
lambdaQueryWrapper.eq(MeterReadingRecord::getMeterCode, meterCode); |
|
|
lambdaQueryWrapper.eq(MeterReadingRecord::getMeterCode, meterCode); |
|
|
lambdaQueryWrapper.between(MeterReadingRecord::getReadingTime, sevenDaysAgo, nextDay); |
|
|
lambdaQueryWrapper.between(MeterReadingRecord::getReadingTime, sevenDaysAgo, currentDate); |
|
|
lambdaQueryWrapper.orderByAsc(MeterReadingRecord::getReadingTime); |
|
|
lambdaQueryWrapper.orderByAsc(MeterReadingRecord::getReadingTime); |
|
|
|
|
|
|
|
|
// 查询记录
|
|
|
// 查询记录
|
|
|
@ -173,6 +175,165 @@ public class MeterReadingRecordServiceImpl extends ServiceImpl<MeterReadingRecor |
|
|
|
|
|
|
|
|
return ajaxResult; |
|
|
return ajaxResult; |
|
|
} |
|
|
} |
|
|
|
|
|
private Map<Integer, List<MeterConfig>> getMeterMessage() { |
|
|
|
|
|
// 从表计类型表获取所有在启用的表计类型
|
|
|
|
|
|
LambdaQueryWrapper<MeterType> queryWrapper = new LambdaQueryWrapper<>(); |
|
|
|
|
|
queryWrapper.eq(MeterType::getStatus, 1); |
|
|
|
|
|
List<MeterType> meterTypeList = meterTypeService.list(queryWrapper); |
|
|
|
|
|
Map<Integer, String> typeMap = meterTypeList.stream().collect(Collectors.toMap(MeterType::getId, MeterType::getTypeAlias)); |
|
|
|
|
|
// List<Integer> typeIdList = meterTypeList.stream().map(MeterType::getId).collect(Collectors.toList());
|
|
|
|
|
|
// 获取表计信息
|
|
|
|
|
|
List<MeterConfig> configList = meterConfigMapper.getMeterMessage(); |
|
|
|
|
|
// 将表计根据类型分组
|
|
|
|
|
|
Map<Integer, List<MeterConfig>> idMeterConfigMap = new HashMap<>(); |
|
|
|
|
|
typeMap.forEach((k, v) -> { |
|
|
|
|
|
List<MeterConfig> typeMeterConfig = new ArrayList<>(); |
|
|
|
|
|
configList.forEach(config -> { |
|
|
|
|
|
if (config.getTypeId().equals(k)) { |
|
|
|
|
|
config.setMeterTypeName(v); |
|
|
|
|
|
typeMeterConfig.add(config); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
idMeterConfigMap.put(k, typeMeterConfig); |
|
|
|
|
|
}); |
|
|
|
|
|
return idMeterConfigMap; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private Map<Integer,String> readingMap(){ |
|
|
|
|
|
List<ReferenceData> referenceDataList = referenceDataService.list(); |
|
|
|
|
|
Map<Integer, String> readingMap = referenceDataList.stream().collect(Collectors.toMap(ReferenceData::getMeterId, ReferenceData::getReadingValue)); |
|
|
|
|
|
return readingMap; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 插入模拟数据 一天一条
|
|
|
|
|
|
@Override |
|
|
|
|
|
@Transactional |
|
|
|
|
|
public void insertAnalogData1() { |
|
|
|
|
|
Map<Integer, List<MeterConfig>> idMeterConfigMap = getMeterMessage(); |
|
|
|
|
|
// Map<Integer,String> readingMap = readingMap();
|
|
|
|
|
|
// 获取所有参考数据
|
|
|
|
|
|
// 设置起始日期为 2023年10月25日
|
|
|
|
|
|
LocalDate startDate = LocalDate.of(2023, 10, 25); |
|
|
|
|
|
// 设置结束日期为 2024年1月14日
|
|
|
|
|
|
LocalDate endDate = LocalDate.of(2024, 1, 14); |
|
|
|
|
|
// 批量插入数据
|
|
|
|
|
|
while (!startDate.isAfter(endDate)) { |
|
|
|
|
|
LocalDate finalStartDate = startDate; |
|
|
|
|
|
List<MeterReadingRecord> records = idMeterConfigMap.values().stream() |
|
|
|
|
|
.filter(Objects::nonNull) |
|
|
|
|
|
.flatMap(List::stream) |
|
|
|
|
|
.map(meterConfig -> { |
|
|
|
|
|
MeterReadingRecord meterReadingRecord = new MeterReadingRecord(); |
|
|
|
|
|
meterReadingRecord.setMeterId(meterConfig.getId()); |
|
|
|
|
|
meterReadingRecord.setMeterCode(meterConfig.getMeterCode()); |
|
|
|
|
|
meterReadingRecord.setMeterTypeId(meterConfig.getTypeId()); |
|
|
|
|
|
meterReadingRecord.setMeterTypeName(meterConfig.getMeterTypeName()); |
|
|
|
|
|
meterReadingRecord.setOwningInterval(meterConfig.getOwningInterval()); |
|
|
|
|
|
meterReadingRecord.setReadingType(2); |
|
|
|
|
|
meterReadingRecord.setCreateUser("SYSTEM"); |
|
|
|
|
|
// 设置每天的日期和时分秒
|
|
|
|
|
|
LocalDateTime createTime = LocalDateTime.of(finalStartDate, LocalTime.of(23, 45, 57)); |
|
|
|
|
|
meterReadingRecord.setCreateTime(createTime); |
|
|
|
|
|
Date readingTime = Date.from(createTime.atZone(ZoneId.systemDefault()).toInstant()); |
|
|
|
|
|
meterReadingRecord.setReadingTime(readingTime); |
|
|
|
|
|
// getLatestReading(meterConfig.getId())
|
|
|
|
|
|
meterReadingRecord.setReadingValue(meterConfig.getReadingValue()); |
|
|
|
|
|
return meterReadingRecord; |
|
|
|
|
|
}) |
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
saveBatch(records); |
|
|
|
|
|
// 递增日期,准备下一轮循环
|
|
|
|
|
|
startDate = startDate.plusDays(1); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 插入模拟数据15分钟一条
|
|
|
|
|
|
@Transactional |
|
|
|
|
|
public void insertAnalogData15() { |
|
|
|
|
|
Map<Integer, List<MeterConfig>> idMeterConfigMap = getMeterMessage(); |
|
|
|
|
|
// Map<Integer,String> readingMap = readingMap();
|
|
|
|
|
|
// 设置起始日期
|
|
|
|
|
|
LocalDate startDate = LocalDate.of(2024, 1, 15); |
|
|
|
|
|
// 设置结束日期
|
|
|
|
|
|
LocalDate endDate = LocalDate.of(2024, 1, 29); |
|
|
|
|
|
// 设置每隔15分钟插入一条记录
|
|
|
|
|
|
Duration duration = Duration.ofMinutes(15); |
|
|
|
|
|
|
|
|
|
|
|
LocalDateTime currentTime = LocalDateTime.of(startDate, LocalTime.of(7, 32, 57)); |
|
|
|
|
|
|
|
|
|
|
|
// 批量插入数据
|
|
|
|
|
|
while (!currentTime.isAfter(LocalDateTime.of(endDate, LocalTime.of(7, 32, 57)))) { |
|
|
|
|
|
LocalDate finalStartDate = startDate; |
|
|
|
|
|
|
|
|
|
|
|
LocalDateTime finalCurrentTime = currentTime; |
|
|
|
|
|
idMeterConfigMap.forEach((key, value) -> { |
|
|
|
|
|
if (value != null) { |
|
|
|
|
|
List<MeterConfig> meterConfigs = value; |
|
|
|
|
|
List<MeterReadingRecord> records = meterConfigs.stream() |
|
|
|
|
|
.map(meterConfig -> { |
|
|
|
|
|
MeterReadingRecord meterReadingRecord = new MeterReadingRecord(); |
|
|
|
|
|
meterReadingRecord.setMeterId(meterConfig.getId()); |
|
|
|
|
|
meterReadingRecord.setMeterCode(meterConfig.getMeterCode()); |
|
|
|
|
|
meterReadingRecord.setMeterTypeId(meterConfig.getTypeId()); |
|
|
|
|
|
meterReadingRecord.setMeterTypeName(meterConfig.getMeterTypeName()); |
|
|
|
|
|
meterReadingRecord.setOwningInterval(meterConfig.getOwningInterval()); |
|
|
|
|
|
meterReadingRecord.setReadingType(2); |
|
|
|
|
|
meterReadingRecord.setCreateUser("SYSTEM"); |
|
|
|
|
|
|
|
|
|
|
|
// 设置每隔15分钟的日期和时分秒
|
|
|
|
|
|
LocalDateTime createTime = finalCurrentTime.plus(duration); |
|
|
|
|
|
|
|
|
|
|
|
meterReadingRecord.setCreateTime(createTime); |
|
|
|
|
|
|
|
|
|
|
|
Date readingTime = Date.from(createTime.atZone(ZoneId.systemDefault()).toInstant()); |
|
|
|
|
|
meterReadingRecord.setReadingTime(readingTime); |
|
|
|
|
|
meterReadingRecord.setReadingValue(meterConfig.getReadingValue()); |
|
|
|
|
|
return meterReadingRecord; |
|
|
|
|
|
}) |
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
// 执行批量插入操作
|
|
|
|
|
|
saveBatch(records); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
// 增加15分钟
|
|
|
|
|
|
currentTime = currentTime.plus(duration); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 定时插入模拟数据15分钟一条
|
|
|
|
|
|
@Scheduled(fixedRate = 900000) |
|
|
|
|
|
public void timedInsertionAnalogData15() { |
|
|
|
|
|
Map<Integer, List<MeterConfig>> idMeterConfigMap = getMeterMessage(); |
|
|
|
|
|
// Map<Integer, String> readingMap = readingMap();
|
|
|
|
|
|
List<MeterReadingRecord> records = new ArrayList<>(); |
|
|
|
|
|
idMeterConfigMap.forEach((key, value) -> { |
|
|
|
|
|
if (value != null) { |
|
|
|
|
|
List<MeterConfig> meterConfigs = value; |
|
|
|
|
|
meterConfigs.forEach(meterConfig -> { |
|
|
|
|
|
MeterReadingRecord meterReadingRecord = new MeterReadingRecord(); |
|
|
|
|
|
meterReadingRecord.setMeterId(meterConfig.getId()); |
|
|
|
|
|
meterReadingRecord.setMeterCode(meterConfig.getMeterCode()); |
|
|
|
|
|
meterReadingRecord.setMeterTypeId(meterConfig.getTypeId()); |
|
|
|
|
|
meterReadingRecord.setMeterTypeName(meterConfig.getMeterTypeName()); |
|
|
|
|
|
meterReadingRecord.setOwningInterval(meterConfig.getOwningInterval()); |
|
|
|
|
|
meterReadingRecord.setReadingType(2); |
|
|
|
|
|
meterReadingRecord.setCreateUser("SYSTEM"); |
|
|
|
|
|
// 设置每隔15分钟的日期和时分秒
|
|
|
|
|
|
LocalDateTime createTime = LocalDateTime.now(); |
|
|
|
|
|
Date readingTime = Date.from(createTime.atZone(ZoneId.systemDefault()).toInstant()); |
|
|
|
|
|
|
|
|
|
|
|
meterReadingRecord.setCreateTime(createTime); |
|
|
|
|
|
meterReadingRecord.setReadingTime(readingTime); |
|
|
|
|
|
meterReadingRecord.setReadingValue(meterConfig.getReadingValue()); |
|
|
|
|
|
// 添加到批量插入的列表
|
|
|
|
|
|
records.add(meterReadingRecord); |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// 执行批量插入操作
|
|
|
|
|
|
saveBatch(records); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private LocalDate dateToLocalDate(Date date) { |
|
|
private LocalDate dateToLocalDate(Date date) { |
|
|
|