diff --git a/dntd-common/src/main/java/com/dky/utils/GetThisEnergyEmissions.java b/dntd-common/src/main/java/com/dky/utils/GetThisEnergyEmissions.java new file mode 100644 index 0000000..4404af9 --- /dev/null +++ b/dntd-common/src/main/java/com/dky/utils/GetThisEnergyEmissions.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 co2EmissionFactor = new AtomicReference<>(0.0); + EnumSet 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 price = new AtomicReference<>(0.0); + EnumSet daysSet = EnumSet.allOf(EnergyPriceType.class); + daysSet.forEach(day -> { + if (code.equals(day.getCode())){ + price.set(day.getPrice()); + } + }); + return price.get(); + } + + +} diff --git a/dntd-common/src/main/java/com/dky/utils/enums/EnergyEmissions.java b/dntd-common/src/main/java/com/dky/utils/enums/EnergyEmissions.java index 655a666..e6a9aae 100644 --- a/dntd-common/src/main/java/com/dky/utils/enums/EnergyEmissions.java +++ b/dntd-common/src/main/java/com/dky/utils/enums/EnergyEmissions.java @@ -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; + } } diff --git a/dntd-common/src/main/java/com/dky/utils/enums/EnergyPriceType.java b/dntd-common/src/main/java/com/dky/utils/enums/EnergyPriceType.java index 59d90d1..67a4a20 100644 --- a/dntd-common/src/main/java/com/dky/utils/enums/EnergyPriceType.java +++ b/dntd-common/src/main/java/com/dky/utils/enums/EnergyPriceType.java @@ -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.82, "天然气平均价格/千克"), + 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; + } } diff --git a/dntd-model-heatboiler/src/main/java/com/dky/calculate/Advantage.java b/dntd-model-heatboiler/src/main/java/com/dky/calculate/Advantage.java index 760832e..96a30bf 100644 --- a/dntd-model-heatboiler/src/main/java/com/dky/calculate/Advantage.java +++ b/dntd-model-heatboiler/src/main/java/com/dky/calculate/Advantage.java @@ -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)+"元。"; diff --git a/dntd-model-heatboiler/src/main/java/com/dky/calculate/HeatBoilerModel.java b/dntd-model-heatboiler/src/main/java/com/dky/calculate/HeatBoilerModel.java index 153ff66..4f55dfe 100644 --- a/dntd-model-heatboiler/src/main/java/com/dky/calculate/HeatBoilerModel.java +++ b/dntd-model-heatboiler/src/main/java/com/dky/calculate/HeatBoilerModel.java @@ -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; } diff --git a/dntd-tool/src/main/java/com/dky/generate/BuildHeatingScene.java b/dntd-tool/src/main/java/com/dky/generate/BuildHeatingScene.java index 71cff04..c47d763 100644 --- a/dntd-tool/src/main/java/com/dky/generate/BuildHeatingScene.java +++ b/dntd-tool/src/main/java/com/dky/generate/BuildHeatingScene.java @@ -5,8 +5,10 @@ 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; @@ -50,8 +52,6 @@ public class BuildHeatingScene implements DntdModelI { Double heatingArea = Double.parseDouble(buildInfo.get("heatingArea").toString()); // 年采暖时间(天) Integer days = Integer.parseInt(buildInfo.get("days").toString()); - // 上年运行费用(万元) - Double lastYearFee = Double.parseDouble(buildInfo.get("lastYearFee").toString()); /* 实际可承载容量A = 运行(或合同容量)x0.9[将运行容量或合同容量折算成容量]x85% @@ -180,6 +180,39 @@ public class BuildHeatingScene implements DntdModelI { laborFee1 = laborFee1 + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getLaborCost() / matchedDevice.getDeviceHeatScene().getDevServiceLife()); } + + Double previousYearEnergyUsage = 1.0; + Double lastYearFee = 0.0; + Double energyPrice = 0.0; + try { + energyPrice = Double.parseDouble(buildInfo.get("energyPrice").toString()); + } catch (NullPointerException e){ + energyPrice = GetThisEnergyEmissions.getThisEnergyPrice((Integer) buildInfo.get("energyCode")); + } + + try { + // 上年运行费用(元) + lastYearFee = Double.parseDouble(buildInfo.get("lastYearFee").toString()); + } catch (NullPointerException e) { + // e.printStackTrace(); + System.out.println("计算因子采用默认值"); + previousYearEnergyUsage = Double.parseDouble(buildInfo.get("previousYearEnergyUsage").toString()); + lastYearFee = HeatBoilerModel.calLastYearFee(laborFee1, previousYearEnergyUsage, energyPrice); + } + + try { + // 替代前年能源用量 + previousYearEnergyUsage = Double.parseDouble(buildInfo.get("previousYearEnergyUsage").toString()); + } catch (NullPointerException e){ + lastYearFee = Double.parseDouble(buildInfo.get("lastYearFee").toString()); + previousYearEnergyUsage = lastYearFee / energyPrice; + } + + // 替代前上年原设备碳排放量 + double energyLastYearFactor = HeatBoilerModel.calLastYearFactor(previousYearEnergyUsage, GetThisEnergyEmissions.getThisEnergyEmission((Integer) buildInfo.get("energyCode"))); + // 年减碳量 + calculateAnnualCarbon = HeatBoilerModel.calculateAnnualCarbonReduction(energyLastYearFactor, electric, EnergyEmissions.ELECTRIC.getCo2EmissionFactor()); + //初次投资费用 returnJsonObject.set("startCost", decimalFormat.format(startCost)); // 设备总价 @@ -189,7 +222,6 @@ public class BuildHeatingScene implements DntdModelI { //年总费用 returnJsonObject.set("yearCost", decimalFormat.format(allCost)); //年减碳量 - calculateAnnualCarbon = BuildHeatingModel.calculateAnnualCarbonReduction(lastYearFee, laborFee1, electric); returnJsonObject.set("calculate", decimalFormat.format(calculateAnnualCarbon/1000)); //替代电量 returnJsonObject.set("electric", decimalFormat.format(electric)); @@ -204,8 +236,8 @@ public class BuildHeatingScene implements DntdModelI { returnJsonObject.set("intelligence", BuildHeatingAdvantage.intelligence()); returnJsonObject.set("environment", BuildHeatingAdvantage.environment(Double.valueOf(decimalFormat.format(calculateAnnualCarbon/1000)))); - //封装方案评分 - returnJsonObject.set("matchedDeviceList", maps); + // 封装方案评分 + // returnJsonObject.set("matchedDeviceList", maps); return returnJsonObject; } diff --git a/dntd-tool/src/main/java/com/dky/generate/HeatBoilerScene.java b/dntd-tool/src/main/java/com/dky/generate/HeatBoilerScene.java index d4757ed..ca891fa 100644 --- a/dntd-tool/src/main/java/com/dky/generate/HeatBoilerScene.java +++ b/dntd-tool/src/main/java/com/dky/generate/HeatBoilerScene.java @@ -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> 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> 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,40 @@ 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){ + lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); + previousYearEnergyUsage = lastYearFee / energyPrice; + } + + try { + // 上年运行费用(元) + lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); + } catch (NullPointerException e) { + // e.printStackTrace(); + System.out.println("计算因子采用默认值"); + previousYearEnergyUsage = Double.parseDouble(originalDevInfo.get("previousYearEnergyUsage").toString()); + 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)); @@ -160,8 +187,8 @@ public class HeatBoilerScene implements DntdModelI { returnJsonObject.set("intelligence", BuildHeatingAdvantage.intelligence()); returnJsonObject.set("environment", BuildHeatingAdvantage.environment(Double.valueOf(decimalFormat.format(calculateAnnualCarbon / 1000)))); - //封装方案评分 - returnJsonObject.set("matchedDeviceList", maps); + // 封装方案评分 + // returnJsonObject.set("matchedDeviceList", maps); return returnJsonObject; } diff --git a/dntd-tool/src/main/java/com/dky/generate/KitchenCookScene.java b/dntd-tool/src/main/java/com/dky/generate/KitchenCookScene.java index 0a7156b..edd83fc 100644 --- a/dntd-tool/src/main/java/com/dky/generate/KitchenCookScene.java +++ b/dntd-tool/src/main/java/com/dky/generate/KitchenCookScene.java @@ -1,14 +1,13 @@ package com.dky.generate; import cn.hutool.json.JSONObject; -import com.dky.calculate.Advantage; -import com.dky.calculate.BuildHeatingAdvantage; -import com.dky.calculate.KitchenCookModel; -import com.dky.calculate.KitchenCookScheme; +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; @@ -29,9 +28,11 @@ public class KitchenCookScene implements DntdModelI { List alternateDeviceList = GetTargetDeviceList.main(DeviceSubType.Kitchen_Cooking.getDesc(), sceneList); JSONObject distInfo = new JSONObject(); + JSONObject originalDevInfo = new JSONObject(); try{ distInfo = (JSONObject) jsonObject.get("distInfo"); + originalDevInfo = (JSONObject) jsonObject.get("originalDevInfo"); } catch (Exception e){ e.printStackTrace(); } @@ -40,8 +41,6 @@ public class KitchenCookScene implements DntdModelI { Double runCapacity = Double.parseDouble(distInfo.get("runCapacity").toString()); // 上年最大需量 Double lastYearNeed = Double.parseDouble(distInfo.get("lastYearNeed").toString()); - // 上年运行费用(万元) - Double lastYearFee = Double.parseDouble(jsonObject.get("lastYearFee").toString()); // 人数 Integer peopleNum = Integer.parseInt(jsonObject.get("peopleNum").toString()); @@ -69,7 +68,7 @@ public class KitchenCookScene implements DntdModelI { double D1 = lastYearNeed + C1; String remark = ""; - if ( A < D1){ + if (A < D1){ remark = "本方案存在扩容投资需求,扩容投资不计入初次投资费用"; } @@ -105,6 +104,40 @@ public class KitchenCookScene implements DntdModelI { laborCost = laborCost + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getLaborCost() / matchedDevice.getDeviceHeatScene().getDevServiceLife()); } + + Double previousYearEnergyUsage = 1.0; + Double lastYearFee = 0.0; + Double energyPrice = 0.0; + Integer energyCode = (Integer) originalDevInfo.get("energyCode"); + try { + energyPrice = Double.parseDouble(originalDevInfo.get("energyPrice").toString()); + } catch (NullPointerException e){ + energyPrice = GetThisEnergyEmissions.getThisEnergyPrice(energyCode); + } + + try { + // 上年运行费用(元) + lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); + } catch (NullPointerException e) { + // e.printStackTrace(); + System.out.println("计算因子采用默认值"); + previousYearEnergyUsage = Double.parseDouble(originalDevInfo.get("previousYearEnergyUsage").toString()); + lastYearFee = HeatBoilerModel.calLastYearFee(laborCost, previousYearEnergyUsage, energyPrice); + } + + try { + // 替代前年能源用量 + previousYearEnergyUsage = Double.parseDouble(originalDevInfo.get("previousYearEnergyUsage").toString()); + } catch (NullPointerException e){ + previousYearEnergyUsage = lastYearFee / energyPrice; + } + + // 替代前上年原设备碳排放量 + double energyLastYearFactor = HeatBoilerModel.calLastYearFactor(previousYearEnergyUsage, GetThisEnergyEmissions.getThisEnergyEmission(energyCode)); + // 年减碳量 + calculateAnnualCarbon = HeatBoilerModel.calculateAnnualCarbonReduction(energyLastYearFactor, electric, EnergyEmissions.ELECTRIC.getCo2EmissionFactor()); + + //初次投资费用 returnJsonObject.set("startCost", decimalFormat.format(startCost)); // 设备总价 @@ -114,7 +147,6 @@ public class KitchenCookScene implements DntdModelI { //年总费用 returnJsonObject.set("yearCost", decimalFormat.format(allCost)); //年减碳量 - calculateAnnualCarbon = KitchenCookModel.calculateAnnualCarbonReduction(lastYearFee, laborCost, electric); returnJsonObject.set("calculate", decimalFormat.format(calculateAnnualCarbon/1000)); //替代电量 returnJsonObject.set("electric", decimalFormat.format(electric)); diff --git a/dntd-tool/src/main/java/com/dky/generate/MaterialKilnScene.java b/dntd-tool/src/main/java/com/dky/generate/MaterialKilnScene.java index c4560b7..90a2068 100644 --- a/dntd-tool/src/main/java/com/dky/generate/MaterialKilnScene.java +++ b/dntd-tool/src/main/java/com/dky/generate/MaterialKilnScene.java @@ -4,8 +4,10 @@ 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; @@ -45,8 +47,7 @@ public class MaterialKilnScene implements DntdModelI { Double workArea = Double.parseDouble(heatUseNeedInfo.get("workArea").toString()) / 1000; // 预计年产量(吨) Double yearOutPut = Double.parseDouble(heatUseNeedInfo.get("yearOutPut").toString()); - // 上年运行费用(元) - Double lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); + // 根据供热需量设备功率计算出不同技术类型下所需要不同功率设备数据 List matchedDeviceGroupList = MaterialKilnScheme.calSchemeByTechType(workArea, alternateDeviceList); @@ -98,6 +99,38 @@ public class MaterialKilnScene implements DntdModelI { laborFee1 = laborFee1 + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getLaborCost() / matchedDevice.getDeviceHeatScene().getDevServiceLife()); } + + 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){ + lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); + previousYearEnergyUsage = lastYearFee / energyPrice; + } + + try { + // 上年运行费用(元) + lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); + } catch (NullPointerException e) { + // e.printStackTrace(); + System.out.println("计算因子采用默认值"); + lastYearFee = HeatBoilerModel.calLastYearFee(laborFee1, previousYearEnergyUsage, energyPrice); + } + // 替代前上年原设备碳排放量 + double energyLastYearFactor = HeatBoilerModel.calLastYearFactor(previousYearEnergyUsage, GetThisEnergyEmissions.getThisEnergyEmission((Integer) originalDevInfo.get("energyCode"))); + // 年减碳量 + calculateAnnualCarbon = HeatBoilerModel.calculateAnnualCarbonReduction(energyLastYearFactor, electric, EnergyEmissions.ELECTRIC.getCo2EmissionFactor()); + + //初次投资费用 returnJsonObject.set("startCost", decimalFormat.format(startCost)); // 设备总价 @@ -106,8 +139,7 @@ public class MaterialKilnScene implements DntdModelI { returnJsonObject.set("yearRunCost", decimalFormat.format(runCost)); //年总费用 returnJsonObject.set("yearCost", decimalFormat.format(allCost)); - //年减碳量 - calculateAnnualCarbon = MaterialKilnModel.calculateAnnualCarbonReduction(lastYearFee, laborFee1, electric); + returnJsonObject.set("calculate", decimalFormat.format(calculateAnnualCarbon / 1000)); //替代电量 returnJsonObject.set("electric", decimalFormat.format(electric)); diff --git a/dntd-tool/src/main/java/com/dky/generate/MetalKilnScene.java b/dntd-tool/src/main/java/com/dky/generate/MetalKilnScene.java index 8a3a691..35d7462 100644 --- a/dntd-tool/src/main/java/com/dky/generate/MetalKilnScene.java +++ b/dntd-tool/src/main/java/com/dky/generate/MetalKilnScene.java @@ -5,8 +5,10 @@ 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; @@ -53,8 +55,6 @@ public class MetalKilnScene implements DntdModelI { Double needTemp = Double.parseDouble(heatUseNeedInfo.get("needTemp").toString()); // 用户所属行业编码 String userIndustry = jsonObject.get("userIndustry").toString(); - // 上年运行费用(元) - Double lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); // 根据供热需量设备功率计算出不同技术类型下所需要不同功率设备数据 List schemeList = MetalKilnScheme.getSchemeList(userIndustry, needTemp, alternateDeviceList); @@ -107,6 +107,37 @@ public class MetalKilnScene implements DntdModelI { laborFee1 = laborFee1 + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getLaborCost() / matchedDevice.getDeviceHeatScene().getDevServiceLife()); } + + 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){ + lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); + previousYearEnergyUsage = lastYearFee / energyPrice; + } + + try { + // 上年运行费用(元) + lastYearFee = Double.parseDouble(originalDevInfo.get("lastYearFee").toString()); + } catch (NullPointerException e) { + // e.printStackTrace(); + System.out.println("计算因子采用默认值"); + lastYearFee = HeatBoilerModel.calLastYearFee(laborFee1, previousYearEnergyUsage, energyPrice); + } + // 替代前上年原设备碳排放量 + double energyLastYearFactor = HeatBoilerModel.calLastYearFactor(previousYearEnergyUsage, GetThisEnergyEmissions.getThisEnergyEmission((Integer) originalDevInfo.get("energyCode"))); + // 年减碳量 + calculateAnnualCarbon = HeatBoilerModel.calculateAnnualCarbonReduction(energyLastYearFactor, electric, EnergyEmissions.ELECTRIC.getCo2EmissionFactor()); + //初次投资费用 returnJsonObject.set("startCost", decimalFormat.format(startCost)); // 设备总价 @@ -116,7 +147,6 @@ public class MetalKilnScene implements DntdModelI { //年总费用 returnJsonObject.set("yearCost", decimalFormat.format(allCost)); //年减碳量 - calculateAnnualCarbon = MaterialKilnModel.calculateAnnualCarbonReduction(lastYearFee, laborFee1, electric); returnJsonObject.set("calculate", decimalFormat.format(calculateAnnualCarbon / 1000)); //替代电量 returnJsonObject.set("electric", decimalFormat.format(electric));