|
|
|
|
@ -353,6 +353,74 @@ public class CoolingSystemMonitorServiceImpl implements ICoolingSystemMonitorSer
|
|
|
|
|
sysPerformanceDTO.setYearEER(yearEer); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 查询热平衡率
|
|
|
|
|
// 查询总表的数据
|
|
|
|
|
QueryWrapper<CollectionParamsManage> queryWrapper1 = new QueryWrapper<CollectionParamsManage>() |
|
|
|
|
.eq("system_type", "0") |
|
|
|
|
.in("param_type", Arrays.asList("12", "13", "16", "31")) |
|
|
|
|
.in("other_name", Arrays.asList("总冷量计瞬时流量", |
|
|
|
|
"冷冻供水温度", |
|
|
|
|
"冷冻回水温度", |
|
|
|
|
"总冷却冷量计瞬时流量", |
|
|
|
|
"冷却供水温度", |
|
|
|
|
"冷却回水温度", |
|
|
|
|
"主机3瞬时读数")); |
|
|
|
|
List<CollectionParamsManage> collectionParamsManages1 = collectionParamsManageMapper.selectList(queryWrapper1); |
|
|
|
|
// 流量单位:推断为 m³/h(立方米/小时)。
|
|
|
|
|
//水的比热容Cp:取 4.186 kJ/(kg·℃)。
|
|
|
|
|
//水的密度ρ:取 1000 kg/m³。
|
|
|
|
|
//换算系数:将 m³/h 换算为 kW 的快捷系数为 0.86(因为 1 kW = 1 kJ/s,1小时=3600秒,系数≈ 3600/4186)。
|
|
|
|
|
if (null != collectionParamsManages1 && !collectionParamsManages1.isEmpty()) { |
|
|
|
|
// 蒸发器侧(冷冻水):Qev = (冷冻水流量 × (冷冻回水温度 - 冷冻供水温度)) / 0.86
|
|
|
|
|
BigDecimal freezingFlow = findCurValue(collectionParamsManages1, "总冷量计瞬时流量"); |
|
|
|
|
BigDecimal freezingSupplyTemp = findCurValue(collectionParamsManages1, "冷冻供水温度"); |
|
|
|
|
BigDecimal freezingReturnTemp = findCurValue(collectionParamsManages1, "冷冻回水温度"); |
|
|
|
|
|
|
|
|
|
// 冷凝器侧(冷却水):Qcd = (冷却水流量 × (冷却回水温度 - 冷却供水温度)) / 0.86
|
|
|
|
|
BigDecimal coolingFlow = findCurValue(collectionParamsManages1, "总冷却冷量计瞬时流量"); |
|
|
|
|
BigDecimal coolingSupplyTemp = findCurValue(collectionParamsManages1, "冷却供水温度"); |
|
|
|
|
BigDecimal coolingReturnTemp = findCurValue(collectionParamsManages1, "冷却回水温度"); |
|
|
|
|
|
|
|
|
|
// 主机3瞬时读数(功率)
|
|
|
|
|
BigDecimal chillerPower = findCurValue(collectionParamsManages1, "主机3瞬时读数"); |
|
|
|
|
|
|
|
|
|
BigDecimal qev = null; |
|
|
|
|
BigDecimal qcd = null; |
|
|
|
|
|
|
|
|
|
// 计算蒸发器制冷量 Qev
|
|
|
|
|
if (freezingFlow != null && freezingSupplyTemp != null && freezingReturnTemp != null) { |
|
|
|
|
BigDecimal deltaT = freezingReturnTemp.subtract(freezingSupplyTemp).abs(); |
|
|
|
|
qev = freezingFlow.multiply(deltaT) |
|
|
|
|
.divide(new BigDecimal("0.86"), 2, RoundingMode.HALF_UP); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 计算冷凝器排热量 Qcd
|
|
|
|
|
if (coolingFlow != null && coolingSupplyTemp != null && coolingReturnTemp != null) { |
|
|
|
|
BigDecimal deltaT = coolingReturnTemp.subtract(coolingSupplyTemp).abs(); |
|
|
|
|
qcd = coolingFlow.multiply(deltaT) |
|
|
|
|
.divide(new BigDecimal("0.86"), 2, RoundingMode.HALF_UP); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 计算热平衡率 = Qev / (Qcd - 主机3瞬时读数) × 100%
|
|
|
|
|
if (qev != null && qcd != null && chillerPower != null) { |
|
|
|
|
BigDecimal denominator = qcd.subtract(chillerPower); |
|
|
|
|
if (denominator.compareTo(BigDecimal.ZERO) > 0) { |
|
|
|
|
BigDecimal heatBalance = qev.divide(denominator, 4, RoundingMode.HALF_UP) |
|
|
|
|
.multiply(new BigDecimal("100")).setScale(1, RoundingMode.HALF_UP); |
|
|
|
|
// 这里再增加一个判断,数据有效区间95%~105%。如果高于105%,则设置为105%。如果低于95%,则设置为95%。
|
|
|
|
|
if (heatBalance.compareTo(new BigDecimal("105")) > 0) { |
|
|
|
|
heatBalance = new BigDecimal("105.0"); |
|
|
|
|
} else if (heatBalance.compareTo(new BigDecimal("95")) < 0) { |
|
|
|
|
heatBalance = new BigDecimal("95.0"); |
|
|
|
|
} |
|
|
|
|
sysPerformanceDTO.setHeatBalance(heatBalance); |
|
|
|
|
} else { |
|
|
|
|
log.warn("热平衡率计算:分母(Qcd - 主机功率) <= 0,跳过计算。Qcd={}, chillerPower={}", qcd, chillerPower); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
log.warn("热平衡率计算:部分参数缺失。qev={}, qcd={}, chillerPower={}", qev, qcd, chillerPower); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return sysPerformanceDTO; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -427,4 +495,19 @@ public class CoolingSystemMonitorServiceImpl implements ICoolingSystemMonitorSer
|
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 从列表中根据 otherName 查找对应记录的 curValue |
|
|
|
|
* @param list 数据列表 |
|
|
|
|
* @param otherName 别名 |
|
|
|
|
* @return curValue,未找到或值为null则返回null |
|
|
|
|
*/ |
|
|
|
|
private BigDecimal findCurValue(List<CollectionParamsManage> list, String otherName) { |
|
|
|
|
return list.stream() |
|
|
|
|
.filter(item -> otherName.equals(item.getOtherName())) |
|
|
|
|
.map(CollectionParamsManage::getCurValue) |
|
|
|
|
.filter(Objects::nonNull) |
|
|
|
|
.findFirst() |
|
|
|
|
.orElse(null); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|