|
|
|
|
@ -42,77 +42,185 @@ public class ComprehensiveReportServiceImpl implements IComprehensiveReportServi
|
|
|
|
|
@Override |
|
|
|
|
public List<?> report(EnergyQueryVO vo) { |
|
|
|
|
DateUtils.sysEnergyDateChange(vo); |
|
|
|
|
|
|
|
|
|
// 获取参数
|
|
|
|
|
AtomicReference<String> lastTableName = new AtomicReference<>("data_" + vo.getTimeType()); |
|
|
|
|
AtomicReference<String> curTableName = new AtomicReference<>("data_" + vo.getTimeType()); |
|
|
|
|
String lastTableName = "data_" + vo.getTimeType(); |
|
|
|
|
String curTableName = "data_" + vo.getTimeType(); |
|
|
|
|
String timeType = vo.getTimeType(); |
|
|
|
|
|
|
|
|
|
// 判断是否是单表
|
|
|
|
|
boolean isSingleTable = "month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType); |
|
|
|
|
if (!isSingleTable) { |
|
|
|
|
lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); |
|
|
|
|
curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); |
|
|
|
|
lastTableName = lastTableName + vo.getStartTime().substring(0, 4); |
|
|
|
|
curTableName = curTableName + vo.getEndTime().substring(0, 4); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 查询系统类型数据
|
|
|
|
|
List<SysDictData> sysTypeData = sysDictDataMapper.selectDictDataByType("sys_type"); |
|
|
|
|
// 定义参数类型
|
|
|
|
|
String[] paramTypes = {"16", "17", "18", "19"}; |
|
|
|
|
// 初始化结果列表
|
|
|
|
|
|
|
|
|
|
// 批量查询所有采集参数
|
|
|
|
|
Map<String, List<CollectionParamsManage>> allCollectionParams = batchQueryCollectionParams(paramTypes, sysTypeData); |
|
|
|
|
|
|
|
|
|
// 批量查询能耗数据
|
|
|
|
|
Map<String, List<ColumnFilter>> allEnergyData = batchQueryEnergyData( |
|
|
|
|
allCollectionParams, lastTableName, curTableName, vo, timeType, isSingleTable); |
|
|
|
|
|
|
|
|
|
// 构建结果
|
|
|
|
|
List<OverviewEnergyDTO> result = new ArrayList<>(); |
|
|
|
|
// 使用Map存储不同类型的能源DTO
|
|
|
|
|
Map<String, OverviewEnergyDTO> energyMap = new HashMap<>(); |
|
|
|
|
energyMap.put("16", new OverviewEnergyDTO()); |
|
|
|
|
energyMap.put("17", new OverviewEnergyDTO()); |
|
|
|
|
energyMap.put("18", new OverviewEnergyDTO()); |
|
|
|
|
energyMap.put("19", new OverviewEnergyDTO()); |
|
|
|
|
|
|
|
|
|
// 组合并处理数据
|
|
|
|
|
for (String paramType : paramTypes) { |
|
|
|
|
List<ColumnFilter> dataList = new ArrayList<>(); |
|
|
|
|
List<ColumnFilter> combinedData = new ArrayList<>(); |
|
|
|
|
for (SysDictData sysDictData : sysTypeData) { |
|
|
|
|
String sysType = sysDictData.getDictValue(); |
|
|
|
|
// 查询采集参数
|
|
|
|
|
List<CollectionParamsManage> collectionParamsManages = queryCollectionParams(paramType, sysType, 40, null, false); |
|
|
|
|
// 合并数据
|
|
|
|
|
if (collectionParamsManages != null && !collectionParamsManages.isEmpty()) { |
|
|
|
|
// 判断两个表是否一样
|
|
|
|
|
boolean isSameTable = lastTableName.get().equals(curTableName.get()); |
|
|
|
|
if (isSameTable) { |
|
|
|
|
List<ColumnFilter> columnFilters = comprehensiveReportMapper.energyAnalysisOneTable(collectionParamsManages, |
|
|
|
|
lastTableName.get(), |
|
|
|
|
curTableName.get(), |
|
|
|
|
DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getStartTime()), |
|
|
|
|
DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getEndTime()), |
|
|
|
|
timeType); |
|
|
|
|
dataList.addAll(columnFilters); |
|
|
|
|
String key = paramType + "_" + sysType; |
|
|
|
|
List<ColumnFilter> typeData = allEnergyData.get(key); |
|
|
|
|
if (typeData != null) { |
|
|
|
|
combinedData.addAll(typeData); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
initialEnergyData(combinedData, energyMap.get(paramType), |
|
|
|
|
getEnergyLabel(paramType), getEnergyUnit(paramType), result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 转换为最终结果
|
|
|
|
|
return convertToCompreReportDTO(result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Map<String, List<CollectionParamsManage>> batchQueryCollectionParams( |
|
|
|
|
String[] paramTypes, List<SysDictData> sysTypeData) { |
|
|
|
|
|
|
|
|
|
Map<String, List<CollectionParamsManage>> allCollectionParams = new HashMap<>(); |
|
|
|
|
|
|
|
|
|
// 批量查询所有参数
|
|
|
|
|
List<CollectionParamsManage> allParams = queryAllCollectionParams(paramTypes, sysTypeData); |
|
|
|
|
|
|
|
|
|
// 按参数类型和系统类型分组
|
|
|
|
|
Map<String, List<CollectionParamsManage>> groupedParams = allParams.stream() |
|
|
|
|
.collect(Collectors.groupingBy(param -> |
|
|
|
|
param.getParamType() + "_" + param.getSystemType())); |
|
|
|
|
|
|
|
|
|
// 验证并补充缺失的总表数据
|
|
|
|
|
for (String paramType : paramTypes) { |
|
|
|
|
for (SysDictData sysDictData : sysTypeData) { |
|
|
|
|
String sysType = sysDictData.getDictValue(); |
|
|
|
|
String key = paramType + "_" + sysType; |
|
|
|
|
|
|
|
|
|
List<CollectionParamsManage> params = groupedParams.get(key); |
|
|
|
|
if (params == null || params.isEmpty()) { |
|
|
|
|
// 尝试查询总表
|
|
|
|
|
params = queryCollectionParamsFromSumTable(paramType, sysType, 40); |
|
|
|
|
if (params != null && !params.isEmpty()) { |
|
|
|
|
allCollectionParams.put(key, params); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
allCollectionParams.put(key, params); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return allCollectionParams; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<CollectionParamsManage> queryAllCollectionParams(String[] paramTypes, List<SysDictData> sysTypeData) { |
|
|
|
|
QueryWrapper<CollectionParamsManage> queryWrapper = new QueryWrapper<>(); |
|
|
|
|
queryWrapper.eq("grade", 40); |
|
|
|
|
|
|
|
|
|
// 构建所有条件的组合
|
|
|
|
|
if (paramTypes.length > 0 && sysTypeData.size() > 0) { |
|
|
|
|
boolean firstCondition = true; |
|
|
|
|
for (String paramType : paramTypes) { |
|
|
|
|
for (SysDictData sysDictData : sysTypeData) { |
|
|
|
|
if (firstCondition) { |
|
|
|
|
queryWrapper.nested(nested -> nested.eq("param_type", paramType) |
|
|
|
|
.eq("system_type", sysDictData.getDictValue())); |
|
|
|
|
firstCondition = false; |
|
|
|
|
} else { |
|
|
|
|
// 两个表不一样
|
|
|
|
|
List<ColumnFilter> columnFilters = comprehensiveReportMapper.energyAnalysisManyTable(collectionParamsManages, |
|
|
|
|
lastTableName.get(), |
|
|
|
|
curTableName.get(), |
|
|
|
|
DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getStartTime()), |
|
|
|
|
DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getEndTime()), |
|
|
|
|
timeType); |
|
|
|
|
dataList.addAll(columnFilters); |
|
|
|
|
queryWrapper.or().nested(nested -> nested.eq("param_type", paramType) |
|
|
|
|
.eq("system_type", sysDictData.getDictValue())); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 初始化能源数据
|
|
|
|
|
initialEnergyData(dataList, energyMap.get(paramType), getEnergyLabel(paramType), getEnergyUnit(paramType), result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return collectionParamsManageMapper.selectList(queryWrapper); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<CollectionParamsManage> queryCollectionParamsFromSumTable(String paramType, String sysType, int grade) { |
|
|
|
|
QueryWrapper<CollectionParamsManage> queryWrapper = new QueryWrapper<>(); |
|
|
|
|
queryWrapper.eq("param_type", paramType) |
|
|
|
|
.eq("system_type", sysType) |
|
|
|
|
.eq("grade", grade) |
|
|
|
|
.eq("mt_is_sum", 0); // 查询总表
|
|
|
|
|
|
|
|
|
|
return collectionParamsManageMapper.selectList(queryWrapper); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// private Map<String, List<CollectionParamsManage>> batchQueryCollectionParams(
|
|
|
|
|
// String[] paramTypes, List<SysDictData> sysTypeData) {
|
|
|
|
|
//
|
|
|
|
|
// Map<String, List<CollectionParamsManage>> allCollectionParams = new HashMap<>();
|
|
|
|
|
//
|
|
|
|
|
// // 构建所有需要查询的组合
|
|
|
|
|
// for (String paramType : paramTypes) {
|
|
|
|
|
// for (SysDictData sysDictData : sysTypeData) {
|
|
|
|
|
// String sysType = sysDictData.getDictValue();
|
|
|
|
|
// List<CollectionParamsManage> params = queryCollectionParams(paramType, sysType, 40, null, false);
|
|
|
|
|
// if (params != null && !params.isEmpty()) {
|
|
|
|
|
// String key = paramType + "_" + sysType;
|
|
|
|
|
// allCollectionParams.put(key, params);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// return allCollectionParams;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
private Map<String, List<ColumnFilter>> batchQueryEnergyData( |
|
|
|
|
Map<String, List<CollectionParamsManage>> allCollectionParams, |
|
|
|
|
String lastTableName, String curTableName, EnergyQueryVO vo, |
|
|
|
|
String timeType, boolean isSingleTable) { |
|
|
|
|
|
|
|
|
|
Map<String, List<ColumnFilter>> result = new HashMap<>(); |
|
|
|
|
Date startTime = DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getStartTime()); |
|
|
|
|
Date endTime = DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getEndTime()); |
|
|
|
|
|
|
|
|
|
for (Map.Entry<String, List<CollectionParamsManage>> entry : allCollectionParams.entrySet()) { |
|
|
|
|
String key = entry.getKey(); |
|
|
|
|
List<CollectionParamsManage> params = entry.getValue(); |
|
|
|
|
|
|
|
|
|
List<ColumnFilter> data; |
|
|
|
|
if (isSingleTable) { |
|
|
|
|
data = comprehensiveReportMapper.energyAnalysisOneTable( |
|
|
|
|
params, lastTableName, curTableName, startTime, endTime, timeType); |
|
|
|
|
} else { |
|
|
|
|
data = comprehensiveReportMapper.energyAnalysisManyTable( |
|
|
|
|
params, lastTableName, curTableName, startTime, endTime, timeType); |
|
|
|
|
} |
|
|
|
|
result.put(key, data); |
|
|
|
|
} |
|
|
|
|
// 这里再拆分result数据,根据每个对象的时间进行比较赋值,如果都是相等,然后分别赋值给CompreReportDTO,其中
|
|
|
|
|
// name="总用电量"的对应的data赋值给CompreReportDTO的electValue,
|
|
|
|
|
// name="总热水补水量"的对应的data赋值给CompreReportDTO的hotValue,
|
|
|
|
|
// name="总产冷量"的对应的data赋值给CompreReportDTO的coldValue,
|
|
|
|
|
// name="总蒸汽流量"的对应的data赋值给CompreReportDTO的steamValue,
|
|
|
|
|
// timeStr就赋值给CompreReportDTO的time
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<CompreReportDTO> convertToCompreReportDTO(List<OverviewEnergyDTO> result) { |
|
|
|
|
List<CompreReportDTO> compreReportDTOS = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
if (!result.isEmpty()) { |
|
|
|
|
// 将结果按照名称映射
|
|
|
|
|
Map<String, OverviewEnergyDTO> energyDataMap = result.stream() |
|
|
|
|
.collect(Collectors.toMap(OverviewEnergyDTO::getName, dto -> dto)); |
|
|
|
|
.collect(Collectors.toMap(OverviewEnergyDTO::getName, dto -> dto, (existing, replacement) -> existing)); |
|
|
|
|
|
|
|
|
|
// 获取各种能源类型的数据
|
|
|
|
|
OverviewEnergyDTO electDto = energyDataMap.get("总用电量"); |
|
|
|
|
OverviewEnergyDTO hotDto = energyDataMap.get("总热水补水量"); |
|
|
|
|
OverviewEnergyDTO coldDto = energyDataMap.get("总产冷量"); |
|
|
|
|
@ -138,9 +246,110 @@ public class ComprehensiveReportServiceImpl implements IComprehensiveReportServi
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return compreReportDTOS.isEmpty() ? List.of() : compreReportDTOS; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// @Override
|
|
|
|
|
// public List<?> report(EnergyQueryVO vo) {
|
|
|
|
|
// DateUtils.sysEnergyDateChange(vo);
|
|
|
|
|
// // 获取参数
|
|
|
|
|
// AtomicReference<String> lastTableName = new AtomicReference<>("data_" + vo.getTimeType());
|
|
|
|
|
// AtomicReference<String> curTableName = new AtomicReference<>("data_" + vo.getTimeType());
|
|
|
|
|
// String timeType = vo.getTimeType();
|
|
|
|
|
//
|
|
|
|
|
// // 判断是否是单表
|
|
|
|
|
// boolean isSingleTable = "month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType);
|
|
|
|
|
// if (!isSingleTable) {
|
|
|
|
|
// lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4));
|
|
|
|
|
// curTableName.set(curTableName + vo.getEndTime().substring(0, 4));
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// // 查询系统类型数据
|
|
|
|
|
// List<SysDictData> sysTypeData = sysDictDataMapper.selectDictDataByType("sys_type");
|
|
|
|
|
// // 定义参数类型
|
|
|
|
|
// String[] paramTypes = {"16", "17", "18", "19"};
|
|
|
|
|
// // 初始化结果列表
|
|
|
|
|
// List<OverviewEnergyDTO> result = new ArrayList<>();
|
|
|
|
|
// // 使用Map存储不同类型的能源DTO
|
|
|
|
|
// Map<String, OverviewEnergyDTO> energyMap = new HashMap<>();
|
|
|
|
|
// energyMap.put("16", new OverviewEnergyDTO());
|
|
|
|
|
// energyMap.put("17", new OverviewEnergyDTO());
|
|
|
|
|
// energyMap.put("18", new OverviewEnergyDTO());
|
|
|
|
|
// energyMap.put("19", new OverviewEnergyDTO());
|
|
|
|
|
//
|
|
|
|
|
// for (String paramType : paramTypes) {
|
|
|
|
|
// List<ColumnFilter> dataList = new ArrayList<>();
|
|
|
|
|
// for (SysDictData sysDictData : sysTypeData) {
|
|
|
|
|
// String sysType = sysDictData.getDictValue();
|
|
|
|
|
// // 查询采集参数
|
|
|
|
|
// List<CollectionParamsManage> collectionParamsManages = queryCollectionParams(paramType, sysType, 40, null, false);
|
|
|
|
|
// // 合并数据
|
|
|
|
|
// if (collectionParamsManages != null && !collectionParamsManages.isEmpty()) {
|
|
|
|
|
// // 判断两个表是否一样
|
|
|
|
|
// boolean isSameTable = lastTableName.get().equals(curTableName.get());
|
|
|
|
|
// if (isSameTable) {
|
|
|
|
|
// List<ColumnFilter> columnFilters = comprehensiveReportMapper.energyAnalysisOneTable(collectionParamsManages,
|
|
|
|
|
// lastTableName.get(),
|
|
|
|
|
// curTableName.get(),
|
|
|
|
|
// DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getStartTime()),
|
|
|
|
|
// DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getEndTime()),
|
|
|
|
|
// timeType);
|
|
|
|
|
// dataList.addAll(columnFilters);
|
|
|
|
|
// } else {
|
|
|
|
|
// // 两个表不一样
|
|
|
|
|
// List<ColumnFilter> columnFilters = comprehensiveReportMapper.energyAnalysisManyTable(collectionParamsManages,
|
|
|
|
|
// lastTableName.get(),
|
|
|
|
|
// curTableName.get(),
|
|
|
|
|
// DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getStartTime()),
|
|
|
|
|
// DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getEndTime()),
|
|
|
|
|
// timeType);
|
|
|
|
|
// dataList.addAll(columnFilters);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// // 初始化能源数据
|
|
|
|
|
// initialEnergyData(dataList, energyMap.get(paramType), getEnergyLabel(paramType), getEnergyUnit(paramType), result);
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
// // 这里再拆分result数据,根据每个对象的时间进行比较赋值,如果都是相等,然后分别赋值给CompreReportDTO,其中
|
|
|
|
|
// // name="总用电量"的对应的data赋值给CompreReportDTO的electValue,
|
|
|
|
|
// // name="总热水补水量"的对应的data赋值给CompreReportDTO的hotValue,
|
|
|
|
|
// // name="总产冷量"的对应的data赋值给CompreReportDTO的coldValue,
|
|
|
|
|
// // name="总蒸汽流量"的对应的data赋值给CompreReportDTO的steamValue,
|
|
|
|
|
// // timeStr就赋值给CompreReportDTO的time
|
|
|
|
|
// List<CompreReportDTO> compreReportDTOS = new ArrayList<>();
|
|
|
|
|
//
|
|
|
|
|
// if (!result.isEmpty()) {
|
|
|
|
|
// Map<String, OverviewEnergyDTO> energyDataMap = result.stream()
|
|
|
|
|
// .collect(Collectors.toMap(OverviewEnergyDTO::getName, dto -> dto));
|
|
|
|
|
//
|
|
|
|
|
// OverviewEnergyDTO electDto = energyDataMap.get("总用电量");
|
|
|
|
|
// OverviewEnergyDTO hotDto = energyDataMap.get("总热水补水量");
|
|
|
|
|
// OverviewEnergyDTO coldDto = energyDataMap.get("总产冷量");
|
|
|
|
|
// OverviewEnergyDTO steamDto = energyDataMap.get("总蒸汽流量");
|
|
|
|
|
//
|
|
|
|
|
// if (electDto != null && electDto.getTimeStr() != null) {
|
|
|
|
|
// String[] times = electDto.getTimeStr();
|
|
|
|
|
// String[] electValues = electDto.getData();
|
|
|
|
|
// String[] hotValues = hotDto != null ? hotDto.getData() : new String[times.length];
|
|
|
|
|
// String[] coldValues = coldDto != null ? coldDto.getData() : new String[times.length];
|
|
|
|
|
// String[] steamValues = steamDto != null ? steamDto.getData() : new String[times.length];
|
|
|
|
|
//
|
|
|
|
|
// for (int i = 0; i < times.length; i++) {
|
|
|
|
|
// CompreReportDTO dto = new CompreReportDTO();
|
|
|
|
|
// dto.setTime(times[i]);
|
|
|
|
|
// dto.setElectValue(i < electValues.length ? electValues[i] : "0.00");
|
|
|
|
|
// dto.setHotValue(i < hotValues.length ? hotValues[i] : "0.00");
|
|
|
|
|
// dto.setColdValue(i < coldValues.length ? coldValues[i] : "0.00");
|
|
|
|
|
// dto.setSteamValue(i < steamValues.length ? steamValues[i] : "0.00");
|
|
|
|
|
// compreReportDTOS.add(dto);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// return compreReportDTOS.isEmpty() ? List.of() : compreReportDTOS;
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
private List<CollectionParamsManage> queryCollectionParams(String paramType, String sysType, int grade, String terminalDeviceType, boolean isNow) { |
|
|
|
|
QueryWrapper<CollectionParamsManage> queryWrapper = new QueryWrapper<>(); |
|
|
|
|
LocalDate today = LocalDate.now(); |
|
|
|
|
|