2024-03-27 17:31:50 完成锅炉蓄热模型年减碳量、运行收益算法修改。

master
魔神煜修罗皇 1 year ago
parent 11d808a0ba
commit ebffd01048
  1. 36
      dntd-common/src/main/java/com/dky/utils/GetThisEnergyEmissions.java
  2. 32
      dntd-common/src/main/java/com/dky/utils/enums/EnergyEmissions.java
  3. 14
      dntd-common/src/main/java/com/dky/utils/enums/EnergyPriceType.java
  4. 3
      dntd-model-heatboiler/src/main/java/com/dky/calculate/Advantage.java
  5. 47
      dntd-model-heatboiler/src/main/java/com/dky/calculate/HeatBoilerModel.java
  6. 47
      dntd-tool/src/main/java/com/dky/generate/HeatBoilerScene.java

@ -0,0 +1,36 @@
package com.dky.utils;
import com.dky.utils.enums.EnergyEmissions;
import com.dky.utils.enums.EnergyPriceType;
import java.util.EnumSet;
import java.util.concurrent.atomic.AtomicReference;
public class GetThisEnergyEmissions {
public static Double getThisEnergyEmission(Integer code) {
// 二氧化碳排放系数
AtomicReference<Double> co2EmissionFactor = new AtomicReference<>(0.0);
EnumSet<EnergyEmissions> daysSet = EnumSet.allOf(EnergyEmissions.class);
daysSet.forEach(day -> {
if (code.equals(day.getCode())){
co2EmissionFactor.set(day.getCo2EmissionFactor());
}
});
return co2EmissionFactor.get();
}
public static Double getThisEnergyPrice(Integer code) {
// 二氧化碳排放系数
AtomicReference<Double> price = new AtomicReference<>(0.0);
EnumSet<EnergyPriceType> daysSet = EnumSet.allOf(EnergyPriceType.class);
daysSet.forEach(day -> {
if (code.equals(day.getCode())){
price.set(day.getPrice());
}
});
return price.get();
}
}

@ -4,13 +4,15 @@ package com.dky.utils.enums;
public enum EnergyEmissions {
Raw_Coal(101, "原煤", 20934.0, 26.37, 0.94, 1.9003),
COAL(100, "煤炭", 28470.0, 29.5, 0.93, 2.8604),
COAL(1, "焦炭", 28470.0, 29.5, 0.93, 2.8604),
KEROSENE(2, "煤油", 43070.0, 19.6, 0.98, 3.0361),
Natural_Gas(3, "天然气", 35608.5, 15.3, 0.98, 1.97945),
ELECTRIC(4, "电", null, null, null, 0.5942),
Crude_Oil(301, "原油", 41816.0, 20.1, 0.98, 3.0229),
Fuel_Oil(305, "燃料油", 41816.0, 21.1, 0.98, 3.1733),
GASOLINE(302, "汽油", 43070.0, 18.9, 0.98, 2.9277),
KEROSENE(303, "煤油", 43070.0, 19.6, 0.98, 3.0361),
Diesel_Oil(304, "柴油", 42652.0, 20.2, 0.98, 3.0987),
Natural_Gas(204, "天然气", 35608.5, 15.3, 0.98, 1.97945),
Refinery_Gas(207, "炼厂干气", 50242.0, 18.2, 0.98, 3.0119),
Oilfield_Natural_Gas(206, "油田天然气", 46055.0, 15.3, 0.99, 2.1622),
;
@ -49,4 +51,28 @@ public enum EnergyEmissions {
this.coRate = coRate;
this.co2EmissionFactor = co2EmissionFactor;
}
public Integer getCode() {
return code;
}
public String getDesc() {
return desc;
}
public Double getCalorificValue() {
return calorificValue;
}
public Double getCarbonContent() {
return carbonContent;
}
public Double getCoRate() {
return coRate;
}
public Double getCo2EmissionFactor() {
return co2EmissionFactor;
}
}

@ -3,16 +3,17 @@ package com.dky.utils.enums;
public enum EnergyPriceType {
Residential_Electric_Price(98,0.55, "居民电价"),
Industry_Electric_Price(99, 1.2, "工业电价"),
Residential_Electric_Price(4,0.55, "居民电价"),
Industry_Electric_Price(4, 1.2, "工业电价"),
Coal_Price_Per_Kilogram(1, 0.9, "煤炭平均价格/千克"),
Kerosene_Price_Per_Kilogram(2, 8.3, "煤油平均价格/千克"),
Natural_Gas_Price_Per_Kilogram(3, 3.83, "天然气平均价格/千克"),
Raw_Coal_Price_Per_Kilogram(101, 0.788, "原煤平均价格/千克"),
Coal_Price_Per_Kilogram(100, 0.9, "煤炭平均价格/千克"),
Crude_Oil_Price_Per_Kilogram(301,8.0, "原油平均价格/千克"),
Fuel_Oil_Price_Per_Kilogram(305,8.1, "燃料油平均价格/千克"),
Gasoline_Price_Per_Kilogram(302,8.2, "汽油平均价格/千克"),
Kerosene_Price_Per_Kilogram(303, 8.3, "煤油平均价格/千克"),
Diesel_Oil_Price_Per_Kilogram(304, 8.4, "柴油平均价格/千克"),
Natural_Gas_Price_Per_Kilogram(204, 3.83, "天然气平均价格/千克"),
Refinery_Gas_Price_Per_Kilogram(207, 4.3, "炼厂干气平均价格/千克"),
Oilfield_Natural_Gas_Price_Per_Kilogram(206, 1.96, "油田天然气平均价格/千克"),
;
@ -44,4 +45,7 @@ public enum EnergyPriceType {
this.desc = desc;
}
public Integer getCode() {
return code;
}
}

@ -22,6 +22,9 @@ public class Advantage {
public static String economy(Double firstInvestFee ,Double yearRunFee, Double lastYearFee){
// 运行收益 = 上年运行费用(即原设备运行费用)- 今年运行费用
Double hsq = Math.round((lastYearFee - yearRunFee) * 100.0)/100.0;
if (hsq <= 0){
return "本技术方案中替代技术相对于原生产设备在经济性上优势不大,但从环保效益上具有较高的优势";
}
// 投资回收期 = 初次投资费用/运行收益
Double js = Math.round((firstInvestFee / hsq) * 100.0)/100.0;
return "本次改造投资回收期为"+js+"年,本改造方案相比较原技术节省年运行费用成本"+decimalFormat.format(hsq)+"元。";

@ -69,22 +69,17 @@ public class HeatBoilerModel {
/**
* 计算年减碳量
* @param previousYearEnergyUsage 替代前年能源用
* @param previousYearEnergyUsage 替代前原设备碳排放
* @param deviceElectric 电替代耗电量
* @param electricEmission 电替代设备碳排放因子
* @return 年减碳量
*/
public static double calculateAnnualCarbonReduction(Double previousYearEnergyUsage, Double deviceElectric) {
// 计算替代前年能源用量对应的标准煤量
double coalEquivalentFromEnergy = previousYearEnergyUsage * coalConversionFactor;
public static double calculateAnnualCarbonReduction(Double previousYearEnergyUsage, Double deviceElectric, Double electricEmission) {
// 计算电替代设备年耗电量对应的标准煤量
double coalEquivalentFromElectricity = deviceElectric * electricityConversionFactor;
// 计算净减少的标准煤量
double netReductionInCoalEquivalent = coalEquivalentFromEnergy - coalEquivalentFromElectricity;
double coalEquivalentFromElectricity = deviceElectric * electricEmission;
// 计算年减碳量
return netReductionInCoalEquivalent * carbonConversionFactor;
return previousYearEnergyUsage - coalEquivalentFromElectricity;
}
/**
@ -101,30 +96,26 @@ public class HeatBoilerModel {
}
/**
* 计算运行收益
* @param heatboilerSpec 非表中参数
* @param heatboiler 基础入参
* @param originalDevice 原设备参数
* @param currentYearOperatingCost 年运行费用 TODO
* @return 运行收益
* 计算原设备上年运行费用
* @param laborCost 人工成本
* @param lastYearEnergyUse 替代前年能源使用量
* @param energyPrice 平均能源单价
* @return
*/
public static double calculateOperatingIncome(HeatboilerSpec heatboilerSpec, Heatboiler heatboiler , OriginalDevice originalDevice,Double currentYearOperatingCost) {
//运行收益=年运行费用-上年运行费用(即原设备运行费用)
return currentYearOperatingCost - originalDevice.getLastYearFee();
public static double calLastYearFee(Double laborCost, Double lastYearEnergyUse, Double energyPrice) {
// 上年运行费用(即原设备运行费用)= 上年能源使用量 * 平均能源单价 + 上年人工成本
return energyPrice * lastYearEnergyUse + laborCost;
}
/**
* 计算投资回收期
* @param heatboilerSpec 非表中参数
* @param heatboiler 基础入参
* @param originalDevice 原设备参数
* @param d 热效率后期从设备中获取 TODO
* @param currentYearOperatingCost 年运行费用 TODO
* @return 投资回收期
* 计算原设备年减碳量
* @param lastYearEnergyUse 替代前年能源使用量
* @param d 相关能源排放系数
* @return
*/
public static double calculatePaybackPeriod(HeatboilerSpec heatboilerSpec, Heatboiler heatboiler , OriginalDevice originalDevice,Double currentYearOperatingCost,Double d) {
return calculateInitialInvestment( heatboilerSpec, heatboiler , originalDevice,d)/calculateOperatingIncome( heatboilerSpec, heatboiler , originalDevice,currentYearOperatingCost);
public static double calLastYearFactor(Double lastYearEnergyUse , Double d) {
return lastYearEnergyUse * d;
}

@ -4,15 +4,14 @@ import cn.hutool.json.JSONObject;
import com.dky.calculate.*;
import com.dky.modelI.DntdModelI;
import com.dky.utils.GetTargetDeviceList;
import com.dky.utils.GetThisEnergyEmissions;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.enums.DeviceSubType;
import com.dky.utils.enums.EnergyEmissions;
import com.dky.utils.result.MatchedDevice;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
public class HeatBoilerScene implements DntdModelI {
@ -49,10 +48,6 @@ public class HeatBoilerScene implements DntdModelI {
Double heatingNeedPower = Double.parseDouble(heatUseNeedInfo.get("heatingNeedPower").toString()) * 770;
// 出口温度(摄氏度)
Double thermometerValueOut = Double.parseDouble(heatUseNeedInfo.get("thermometerValueOut").toString());
// 替代前年能源用量
Double previousYearEnergyUsage = Double.parseDouble(originalDevInfo.get("previousYearEnergyUsage").toString());
// 上年运行费用(元)
Double lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString());
// 根据供热需量设备功率计算出不同技术类型下所需要不同功率设备数据
List<List<MatchedDevice>> matchedDeviceGroupList = HeatBoilerScheme.calScheme(heatingNeedPower, alternateDeviceList);
@ -113,7 +108,7 @@ public class HeatBoilerScene implements DntdModelI {
Double startCost = 0.0;
Double runCost = 0.0;
Double allCost = 0.0;
Double calculateAnnualCarbon;
Double calculateAnnualCarbon = 0.0;
Double electric = 0.0;
List<HashMap<String, Object>> deviceList = new ArrayList<>();
for (MatchedDevice matchedDevice : matchedDeviceList) {
@ -133,7 +128,6 @@ public class HeatBoilerScene implements DntdModelI {
electric = electric + (HeatBoilerModel.calculateSubstituteElectricity(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime()));
// calculateAnnualCarbon = calculateAnnualCarbon + (HeatBoilerModel.calculateAnnualCarbonReduction(previousYearEnergyUsage, matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime()));
}
//初次投资费用
@ -145,7 +139,38 @@ public class HeatBoilerScene implements DntdModelI {
//年总费用
returnJsonObject.set("yearCost", decimalFormat.format(allCost));
//年减碳量
calculateAnnualCarbon = HeatBoilerModel.calculateAnnualCarbonReduction(previousYearEnergyUsage, electric);
Double previousYearEnergyUsage = 1.0;
Double lastYearFee = 0.0;
Double energyPrice = 0.0;
try {
energyPrice = Double.parseDouble(originalDevInfo.get("energyPrice").toString());
} catch (NullPointerException e){
energyPrice = GetThisEnergyEmissions.getThisEnergyPrice((Integer) originalDevInfo.get("energyCode"));
}
try {
// 替代前年能源用量
previousYearEnergyUsage = Double.parseDouble(originalDevInfo.get("previousYearEnergyUsage").toString());
} catch (NullPointerException e){
previousYearEnergyUsage = lastYearFee / energyPrice;
}
try {
// 上年运行费用(元)
lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString());
} catch (NullPointerException e) {
// e.printStackTrace();
System.out.println("计算因子采用默认值");
lastYearFee = HeatBoilerModel.calLastYearFee(0.0, previousYearEnergyUsage, energyPrice);
}
// 替代前上年原设备碳排放量
double energyLastYearFactor = HeatBoilerModel.calLastYearFactor(previousYearEnergyUsage, GetThisEnergyEmissions.getThisEnergyEmission((Integer) originalDevInfo.get("energyCode")));
// 年减碳量
calculateAnnualCarbon = HeatBoilerModel.calculateAnnualCarbonReduction(energyLastYearFactor, electric, EnergyEmissions.ELECTRIC.getCo2EmissionFactor());
returnJsonObject.set("calculate", decimalFormat.format(calculateAnnualCarbon / 1000));
//替代电量
returnJsonObject.set("electric", decimalFormat.format(electric));

Loading…
Cancel
Save