# Conflicts:
#	dntd-tool/src/main/java/com/dky/security/SM4Utils.java
master
林颖晨 2 years ago
commit b5b15fe541
  1. 21
      dntd-common/src/main/java/com/dky/utils/GetTargetDeviceList.java
  2. 73
      dntd-common/src/main/java/com/dky/utils/entity/SysDeviceHeatScene.java
  3. 3
      dntd-common/src/main/java/com/dky/utils/enums/Code.java
  4. 35
      dntd-common/src/main/java/com/dky/utils/enums/DeviceSubType.java
  5. 33
      dntd-common/src/main/java/com/dky/utils/enums/EnergyPriceType.java
  6. 20
      dntd-model-buildheating/src/main/java/com/dky/calculate/BuildHeatingModel.java
  7. 1
      dntd-model-buildheating/src/main/java/com/dky/calculate/Scheme.java
  8. 9
      dntd-model-buildheating/src/main/java/com/dky/calculate/SchemeRating.java
  9. 6
      dntd-model-heatboiler/pom.xml
  10. 27
      dntd-model-heatboiler/src/main/java/com/dky/calculate/Advantage.java
  11. 84
      dntd-model-heatboiler/src/main/java/com/dky/calculate/HeatBoilerModel.java
  12. 59
      dntd-model-heatboiler/src/main/java/com/dky/calculate/HeatBoilerScheme.java
  13. 39
      dntd-model-kitchencooking/pom.xml
  14. 70
      dntd-model-kitchencooking/src/main/java/com/dky/calculate/KitchenCookModel.java
  15. 54
      dntd-model-kitchencooking/src/main/java/com/dky/calculate/KitchenCookScheme.java
  16. 40
      dntd-model-materialkiln/pom.xml
  17. 126
      dntd-model-materialkiln/src/main/java/com/dky/calculate/MaterialKilnModel.java
  18. 37
      dntd-model-materialkiln/src/main/java/com/dky/calculate/MaterialKilnScheme.java
  19. 24
      dntd-tool/pom.xml
  20. 23
      dntd-tool/src/main/java/com/dky/generate/BuildHeatingScene.java
  21. 169
      dntd-tool/src/main/java/com/dky/generate/HeatBoilerScene.java
  22. 82
      dntd-tool/src/main/java/com/dky/generate/HeatBoilerSence.java
  23. 133
      dntd-tool/src/main/java/com/dky/generate/KitchenCookScene.java
  24. 131
      dntd-tool/src/main/java/com/dky/generate/MaterialKilnScene.java
  25. 5
      dntd-tool/src/main/java/com/dky/security/SM4Utils.java
  26. 211
      dntd-tool/src/main/java/com/dky/test/TestMain.java
  27. 4
      dntd-tool/src/main/resources/modelCode.properties
  28. 2
      pom.xml

@ -0,0 +1,21 @@
package com.dky.utils;
import com.dky.utils.entity.SysDeviceHeatScene;
import java.util.ArrayList;
import java.util.List;
public class GetTargetDeviceList {
public static List<SysDeviceHeatScene> main(String args, List<SysDeviceHeatScene> alternateDeviceList) {
List<SysDeviceHeatScene> ary = new ArrayList<>();
alternateDeviceList.forEach((device) -> {
if (device.getDevSubType().equals(args)) {
ary.add(device);
}
});
return ary;
}
}

@ -13,6 +13,10 @@ public class SysDeviceHeatScene {
private Double heatEfficiency;
//设备功率
private Double devPower;
/** 最少推荐使用人数 */
private Integer recomMinPeopleNum ;
/** 最多推荐使用人数 */
private Integer recomMaxPeopleNum ;
//设备单价
private Double devPrice;
// 电替代设备年人工费用
@ -21,6 +25,14 @@ public class SysDeviceHeatScene {
private Double laborCost ;
//单台设备可参考供暖面积
private Double devReferenceArea;
/** 单台电设备参考的工作容积(立方米) */
private Double devWorkArea ;
/** 产品密度(千克/立方米) */
private Double productDensity ;
/** 单台电设备制造一批产品的产量(kg) */
private Double manufactProduct ;
/** 单台电设备制造一批产品的周期(小时) */
private Double manufactCycle ;
//设备使用年限
private Integer devServiceLife;
//设备年运行时长
@ -28,7 +40,59 @@ public class SysDeviceHeatScene {
//备注
private String remark;
public SysDeviceHeatScene(Integer id, String devType, String devSubType, String devTechType, Double heatEfficiency, Double devPower, Double devPrice, Double devSubstituteLaborCost, Double laborCost, Double devReferenceArea, Integer devServiceLife, Integer devAnnualOperationTime, String remark) {
public Integer getRecomMinPeopleNum() {
return recomMinPeopleNum;
}
public void setRecomMinPeopleNum(Integer recomMinPeopleNum) {
this.recomMinPeopleNum = recomMinPeopleNum;
}
public Integer getRecomMaxPeopleNum() {
return recomMaxPeopleNum;
}
public void setRecomMaxPeopleNum(Integer recomMaxPeopleNum) {
this.recomMaxPeopleNum = recomMaxPeopleNum;
}
public Double getDevWorkArea() {
return devWorkArea;
}
public void setDevWorkArea(Double devWorkArea) {
this.devWorkArea = devWorkArea;
}
public Double getProductDensity() {
return productDensity;
}
public void setProductDensity(Double productDensity) {
this.productDensity = productDensity;
}
public Double getManufactProduct() {
return manufactProduct;
}
public void setManufactProduct(Double manufactProduct) {
this.manufactProduct = manufactProduct;
}
public Double getManufactCycle() {
return manufactCycle;
}
public void setManufactCycle(Double manufactCycle) {
this.manufactCycle = manufactCycle;
}
public SysDeviceHeatScene(Integer id, String devType, String devSubType, String devTechType, Double heatEfficiency, Double devPower,
Double devPrice, Double devSubstituteLaborCost, Double laborCost, Double devReferenceArea, Integer devServiceLife,
Integer devAnnualOperationTime, Integer minPeople, Integer maxPeople,
Double devWorkArea, Double productDensity, Double manufactProduct, Double manufactCycle,
String remark) {
this.id = String.valueOf(id);
this.devType = devType;
this.devSubType = devSubType;
@ -41,6 +105,12 @@ public class SysDeviceHeatScene {
this.devReferenceArea = devReferenceArea;
this.devServiceLife = devServiceLife;
this.devAnnualOperationTime = devAnnualOperationTime;
this.recomMinPeopleNum = minPeople;
this.recomMaxPeopleNum = maxPeople;
this.devWorkArea = devWorkArea;
this.productDensity = productDensity;
this.manufactProduct = manufactProduct;
this.manufactCycle = manufactCycle;
this.remark = remark;
}
@ -66,6 +136,7 @@ public class SysDeviceHeatScene {
",原设备的人工费用:" + laborCost +
",单台设备可参考供暖面积 = " + devReferenceArea +
",设备使用年限 = " + devServiceLife +
",设备年运行时长 = " + devAnnualOperationTime +
'}';
}

@ -7,7 +7,8 @@ public enum Code {
SUCCESS(1001, "成功"),
KEY_EXPIRATION(1002, "密钥已过期"),
KEY_UNAUTHORIZED(1003, "密钥未在本机授权"),
KEY_CONTEXT_ERROR(1004, "密钥错误");
KEY_CONTEXT_ERROR(1004, "密钥错误"),
KEY_PRIVATE_ERROR(1005, "私钥异常");
/**

@ -0,0 +1,35 @@
package com.dky.utils.enums;
public enum DeviceSubType {
Boiler_Heating(0101, "工业供热电锅炉"),
Kitchen_Cooking(0102, "电厨炊"),
Cooling_Heating(0201, "供冷/暖"),
Cooling_Heating_Electric_Boiler(0202, "供冷/暖电锅炉"),
Material_Kiln(0203, "建材电窑炉");
/**
* 编码
*/
private final Integer code;
/**
* 中文描述
*/
private final String desc;
public Integer getCode() {
return code;
}
public String getDesc() {
return desc;
}
DeviceSubType(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
}

@ -0,0 +1,33 @@
package com.dky.utils.enums;
public enum EnergyPriceType {
Residential_Electric_Price(0.55, "居民电价"),
Industry_Electric_Price(1.2, "工业电价"),
COAL_PRICE_PER_KILOGRAM(0.9, "煤炭平均价格/千克");
/**
* 能源价格
*/
private final Double price;
/**
* 描述
*/
private final String desc;
public Double getPrice() {
return price;
}
public String getDesc() {
return desc;
}
EnergyPriceType(Double price, String desc) {
this.price = price;
this.desc = desc;
}
}

@ -1,6 +1,8 @@
package com.dky.calculate;
import com.dky.utils.enums.EnergyPriceType;
public class BuildHeatingModel {
// 定义常量
@ -24,7 +26,7 @@ public class BuildHeatingModel {
}
/**
* 年运行费用
* 年运行费用
* @param deviceNum 电锅炉设备台数
* @param devicePower 单台电锅炉的功率
* @param days 年采暖供冷时间()
@ -35,11 +37,11 @@ public class BuildHeatingModel {
Double devicePower,
Integer days,
Double laborCost){
return (deviceNum * devicePower * days * 24 * 0.5) + (laborCost );
return (deviceNum * devicePower * days * 24 * EnergyPriceType.Residential_Electric_Price.getPrice()) + (laborCost * deviceNum);
}
/**
* 年总费用
* 年总费用
* @param deviceNum 电锅炉设备台数
* @param devicePrice 单台电设备价格 非表中参数
* @param useYears 使用年限 非表中参数
@ -54,7 +56,7 @@ public class BuildHeatingModel {
Double devicePower,
Integer days,
Double laborCost){
double run = (deviceNum * devicePower * days * 24 * 0.5) + (laborCost );
double run = (deviceNum * devicePower * days * 24 * EnergyPriceType.Residential_Electric_Price.getPrice()) + (laborCost * deviceNum);
return ((deviceNum * devicePrice) / useYears) + run;
}
@ -62,21 +64,17 @@ public class BuildHeatingModel {
* 年减碳
* @param lastYearFee 上年运行费用
* @param oldLaborCost 原设备的人工费用
* @param deviceNum 电锅炉设备台数
* @param devicePower 单台电锅炉的功率
* @param days 年采暖供冷时间()
* @param electricCost 电替代设备年耗电量
* @return
*/
public static Double calculateAnnualCarbonReduction(Double lastYearFee,
Double oldLaborCost,
Integer deviceNum,
Double devicePower,
Integer days){
Double electricCost){
// 计算煤炭减少的碳排放量
double coalReduction = (lastYearFee - oldLaborCost) / COAL_PRICE_PER_KILOGRAM * STANDARD_COAL_CONVERSION_FACTOR;
// 计算电替代设备增加的碳排放量
double electricityIncrease = getElectric(deviceNum, devicePower, days) * ELECTRICITY_SUBSTITUTION_CONVERSION_FACTOR;
double electricityIncrease = electricCost * ELECTRICITY_SUBSTITUTION_CONVERSION_FACTOR;
// 计算总的年减碳量
return (coalReduction - electricityIncrease) * CO2_CONVERSION_FACTOR;

@ -16,7 +16,6 @@ public class Scheme {
*
* @param buildArea 建筑面积
* @param sysDeviceHeatSceneList 替代设备列表
* @return
*/
public static List<List<MatchedDevice>> calScheme(Double buildArea, List<SysDeviceHeatScene> sysDeviceHeatSceneList) {
// 根据设备细类筛选出一个以设备细类为键,该细类下设备列表为值的Map

@ -35,6 +35,13 @@ public class SchemeRating {
// 3、(1-(选择对应设备细类的效率最大的效率值(效率最大值)-当前设备的效率值值)/效率最大值)*100*系数 +(1-(当前成本值-对应设备细类的成本最小值)/对应设备细类的成本最小值)*100*0.2。取最高得分。
rating.set(((1 - v1) * 100 * effRatio) + ((1 - v) * 100 * costRatio));
System.out.println("当前方案成本 = " + cost + ",方案详情 = ");
for (MatchedDevice matchedDevice : plan){
System.out.println(matchedDevice);
}
System.out.println("当前方案评分: " + rating.get() + "\n");
// 方案评分结果
SchemeRatingRes schemeRatingRes = new SchemeRatingRes(plan, rating.get(), devTechType);
optimalMap.put(devTechType, schemeRatingRes);
@ -67,7 +74,7 @@ public class SchemeRating {
* @param alternateDeviceList 可替代设备列表
* @return 不同设备细类下的效率最大值map
*/
public static Map<String,Double> getMaxEfficiencyGroupByDevSubType( List<SysDeviceHeatScene> alternateDeviceList){
public static Map<String,Double> getMaxEfficiencyGroupByDevSubType(List<SysDeviceHeatScene> alternateDeviceList){
Map<String,Double> map = new HashMap<>();
alternateDeviceList.forEach(alternateDevice ->{
String devSubType = alternateDevice.getDevSubType();

@ -29,6 +29,12 @@
<artifactId>dntd-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dky</groupId>
<artifactId>dntd-common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>

@ -1,15 +1,30 @@
package com.dky.calculate;
import java.text.DecimalFormat;
//方案优势
public class Advantage {
//安全性
static DecimalFormat decimalFormat = new DecimalFormat("#.00");
//安全性
public String safety(){
return "无";
}
//经济性
public static String economy(Double firstInvestFee,Double yearTotalFee,Double yearRunFee,Double lastYearFee){
Double hsq = Math.round(firstInvestFee/yearTotalFee*100.0)/100.0;
double js = Math.round((lastYearFee - yearRunFee)*100.0)/100.0;
return "本次改造投资回收期为"+hsq+"年,本改造方案相比较原技术节省年运行费用成本"+js+"元。";
/**
* 经济性
* @param firstInvestFee 初始投资金额
* @param yearRunFee 年运行费用
* @param lastYearFee 替代前上年运行费用
* @return
*/
public static String economy(Double firstInvestFee ,Double yearRunFee, Double lastYearFee){
// 运行收益 = 上年运行费用(即原设备运行费用)- 今年运行费用
Double hsq = Math.round((lastYearFee - yearRunFee) * 100.0)/100.0;
// 投资回收期 = 初次投资费用/运行收益
Double js = Math.round((firstInvestFee / hsq) * 100.0)/100.0;
return "本次改造投资回收期为"+js+"年,本改造方案相比较原技术节省年运行费用成本"+decimalFormat.format(hsq)+"元。";
}
// 智能性
public static String intelligence() {

@ -3,9 +3,16 @@ package com.dky.calculate;
import com.dky.entity.Heatboiler;
import com.dky.entity.HeatboilerSpec;
import com.dky.entity.OriginalDevice;
import com.dky.utils.enums.EnergyPriceType;
public class HeatBoilerModel {
// 标准煤转换系数:千克标准煤/千克
private static final double coalConversionFactor = 0.7143;
// 电能转换到标准煤的系数:千克标准煤/千瓦时
private static final double electricityConversionFactor = 0.1229;
// 标准煤转换到二氧化碳的系数:千克二氧化碳/千克标准煤
private static final double carbonConversionFactor = 1.9003;
/**
* 计算初次投资费用
@ -28,67 +35,68 @@ public class HeatBoilerModel {
/**
* 计算年运行费用
* @param heatboilerSpec 非表中参数
* @param heatboiler 基础入参
* @param originalDevice 原设备参数
* @param count 电替代设备台数 TODO
* @param devicePower 电替代设备功率
* @param deviceCount 电替代设备台数
* @param deviceSubstituteLaborCost 电替代设备人工费用
* @param deviceAnnualOperationTime 电替代设备年运行时间
* @return 年运行费用
*/
public static double calculateAnnualOperatingCost(HeatboilerSpec heatboilerSpec, Heatboiler heatboiler , OriginalDevice originalDevice ,Integer count) {
public static double calculateAnnualOperatingCost(Double devicePower, Integer deviceCount, Double deviceSubstituteLaborCost, Integer deviceAnnualOperationTime) {
// 电替代设备年耗电量=单台电替代设备的功率<A>*电替代设备台数*电设备年运行时间<B>
double annualElectricityConsumption = heatboilerSpec.getSubstitutePower() * count * heatboilerSpec.getAnnualOperationTime();
// 年运行费用=电替代设备年耗电量*平均电价(0.5元/千瓦时)+电替代设备人工费用成本<A>
return annualElectricityConsumption * 0.5 + heatboilerSpec.getSubstituteLaborCost();
double annualElectricityConsumption = devicePower * deviceCount * deviceAnnualOperationTime;
// 年运行费用=电替代设备年耗电量*平均电价(0.5元/千瓦时) + 单台电替代设备人工费用成本<A> * 台数
return annualElectricityConsumption * EnergyPriceType.Industry_Electric_Price.getPrice() + deviceSubstituteLaborCost * deviceCount;
}
/**
* 计算年总费用
* @param heatboilerSpec 非表中参数
* @param heatboiler 基础入参
* @param originalDevice 原设备参数
* @param count 电替代设备台数 TODO
* @return 年总费用
* @param devicePower 电替代设备功率
* @param deviceCount 电替代设备台数
* @param deviceSubstituteLaborCost 电替代设备人工费用
* @param deviceAnnualOperationTime 电替代设备年运行时间
* @param devicePrice 设备价格
* @param deviceServiceLife 设备使用年限
* @return
*/
public static double calculateAnnualTotalCost(HeatboilerSpec heatboilerSpec, Heatboiler heatboiler , OriginalDevice originalDevice ,Integer count) {
//(电替代设备台数*单台电设备价格<A>)/电替代设备的使用年限<A>+年运行费用
return (count * 1) / heatboilerSpec.getServiceLife() + calculateAnnualOperatingCost( heatboilerSpec, heatboiler , originalDevice,count);
public static double calculateAnnualTotalCost(Double devicePower, Integer deviceCount, Double deviceSubstituteLaborCost, Integer deviceAnnualOperationTime, Double devicePrice, Integer deviceServiceLife) {
//(电替代设备台数*单台电设备价格<A>)/电替代设备的使用年限<A>
double v = ((devicePrice * deviceCount) / deviceServiceLife);
// 年总费用=(电替代设备台数*单台电设备价格<A>)/电替代设备的使用年限<A> + 年运行费用
return v + calculateAnnualOperatingCost(devicePower, deviceCount, deviceSubstituteLaborCost, deviceAnnualOperationTime);
}
/**
* 计算年减碳量
* @param heatboilerSpec 非表中参数
* @param heatboiler 基础入参
* @param originalDevice 原设备参数
* @param previousYearEnergyUsage 替代前年能源用量
* @param deviceElectric 电替代耗电量
* @return 年减碳量
*/
public static double calculateAnnualCarbonReduction(HeatboilerSpec heatboilerSpec, Heatboiler heatboiler , OriginalDevice originalDevice) {
public static double calculateAnnualCarbonReduction(Double previousYearEnergyUsage, Double deviceElectric) {
//年减碳量=(替代前年能源用量*0.7143千克标准煤/千克-电替代设备年耗电量*0.1229千克标准煤/千瓦时)*1.9003千克二氧化碳/千克
final double standardCoalCoefficient = 0.7143; // 千克标准煤/千克
final double electricityConsumptionCoefficient = 0.1229; // 千克标准煤/千瓦时
final double carbonDioxideCoefficient = 1.9003; // 千克二氧化碳/千克
// 计算替代前年能源用量对应的标准煤量
double coalEquivalentFromEnergy = previousYearEnergyUsage * coalConversionFactor;
// 计算电替代设备年耗电量对应的标准煤量
double coalEquivalentFromElectricity = deviceElectric * electricityConversionFactor;
//单台电替代设备年耗电量 = 电替代设备年运行时间 * 电替代设备功率
double electricSubstitutionEquipmentYearlyElectricityConsumption = heatboilerSpec.getAnnualOperationTime() * heatboilerSpec.getSubstitutePower();
// 计算净减少的标准煤量
double netReductionInCoalEquivalent = coalEquivalentFromEnergy - coalEquivalentFromElectricity;
return (originalDevice.getSubstituteBeforeEnergyConsumption() * standardCoalCoefficient
- electricSubstitutionEquipmentYearlyElectricityConsumption * electricityConsumptionCoefficient)
* carbonDioxideCoefficient;
// 计算年减碳量
return netReductionInCoalEquivalent * carbonConversionFactor;
}
/**
* 计算替代电量
* @param heatboilerSpec 非表中参数
* @param heatboiler 基础入参
* @param originalDevice 原设备参数
* @param count 电替代设备台数 TODO
* @return 替代电量
* 计算电替代设备年耗电量
* @param devicePower 设备功率
* @param deviceCount 设备台数
* @param deviceAnnualOperationTime 单台电设备年运行时间
* @return
*/
public static double calculateSubstituteElectricity(HeatboilerSpec heatboilerSpec, Heatboiler heatboiler , OriginalDevice originalDevice,Integer count) {
// 电替代设备年耗电量=电替代设备的功率<A>*电替代设备台数*电设备年运行时间<B>
return heatboilerSpec.getSubstitutePower() * count * heatboilerSpec.getAnnualOperationTime();
public static double calculateSubstituteElectricity(Double devicePower, Integer deviceCount, Integer deviceAnnualOperationTime) {
// 电替代设备年耗电量 = 电替代设备的功率<A> * 电替代设备台数 * 电设备年运行时间<B>
return devicePower * deviceCount * deviceAnnualOperationTime;
}

@ -0,0 +1,59 @@
package com.dky.calculate;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.result.MatchedDevice;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class HeatBoilerScheme {
public static List<List<MatchedDevice>> calScheme(Double heatEfficiency, List<SysDeviceHeatScene> sysDeviceHeatSceneList) {
// 根据设备细类筛选出一个以设备细类为键,该细类下设备列表为值的Map
Map<String, List<SysDeviceHeatScene>> groupByDevSubTypeMap = sysDeviceHeatSceneList.stream()
.collect(Collectors.groupingBy(SysDeviceHeatScene::getDevSubType));
// 区分技术类型
List<List<MatchedDevice>> planList = new ArrayList<>();
groupByDevSubTypeMap.forEach((devSubType, v) -> {
// 该细类下的设备根据技术类型筛选出一个以技术类型为键,该技术类型下设备列表为值的Map
Map<String, List<SysDeviceHeatScene>> groupByDevTechTypeMap = v.stream().collect(Collectors.groupingBy(SysDeviceHeatScene::getDevTechType));
groupByDevTechTypeMap.forEach((devTechType, devList) -> {
List<MatchedDevice> matchedDevices = calSchemeByTechType(heatEfficiency, devList);
planList.add(matchedDevices);
});
});
return planList;
}
public static List<MatchedDevice> calSchemeByTechType(Double heatEfficiency, List<SysDeviceHeatScene> sysDeviceHeatSceneList) {
// 对技术类型下的设备list按照单台设备功率进行排序
sysDeviceHeatSceneList.sort((o1, o2) -> Double.compare(o2.getDevPower(), o1.getDevPower()));
Double remainArea = heatEfficiency;
// 遍历设备,根据建筑面积进行匹配设备数量
List<MatchedDevice> matchedDeviceList = new ArrayList<>();
for (SysDeviceHeatScene deviceHeatScene : sysDeviceHeatSceneList) {
double v = remainArea / deviceHeatScene.getDevPower();
int count = (int) (v);
if (v < 1) {
count = count + 1;
}
remainArea = remainArea - count * deviceHeatScene.getDevPower();
matchedDeviceList.add(new MatchedDevice(count, deviceHeatScene));
if (remainArea <= 0) {
// 当总供暖面积已经满足需求时,跳出循环,不再选择其他设备
break;
}
}
return matchedDeviceList;
}
}

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.dky</groupId>
<artifactId>dntd-model-tools</artifactId>
<version>1.1-SNAPSHOT</version>
</parent>
<artifactId>dntd-model-kitchencooking</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.5</version>
</dependency>
<dependency>
<groupId>com.dky</groupId>
<artifactId>dntd-modelI</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dky</groupId>
<artifactId>dntd-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

@ -0,0 +1,70 @@
package com.dky.calculate;
import com.dky.utils.enums.EnergyPriceType;
public class KitchenCookModel {
private static final double ELECTIRC_PRICE_KILOWATT_HOUR = EnergyPriceType.Residential_Electric_Price.getPrice(); // 居民平均电价(0.55元/千瓦时)
private static final double COAL_PRICE_PER_KILOGRAM = 0.9; // 煤炭的平均价格,单位:元/千克
private static final double STANDARD_COAL_CONVERSION_FACTOR = 0.7143; // 千克标准煤/千克
private static final double CO2_CONVERSION_FACTOR = 1.9003; // 千克二氧化碳/千克
private static final double ELECTRICITY_SUBSTITUTION_CONVERSION_FACTOR = 0.1229; // 千克标准煤/千瓦时
/**
* 计算电厨炊年耗电量
* @param powerPerUnit 设备功率
* @param numberOfUnits 设备台数
* @param annualOperatingHours 电设备年运行时间
* @return 单台电厨炊的功率<A> * 电厨炊设备台数 * 电设备年运行时间<B>
*/
public static double calculateAnnualElectricityConsumption(double powerPerUnit, int numberOfUnits, int annualOperatingHours) {
return powerPerUnit * numberOfUnits * annualOperatingHours;
}
/**
* 计算年运行费用
* @param powerPerUnit 设备功率
* @param numberOfUnits 设备台数
* @param annualOperatingHours 电设备年运行时间
* @param laborCostForReplacement 电替代设备人工费用成本
* @return 电厨炊年耗电量 *平均电价(0.55元/千瓦时) + 电替代设备人工费用成本<A>
*/
public static double calculateAnnualOperatingCost(double powerPerUnit, int numberOfUnits, int annualOperatingHours, double laborCostForReplacement) {
return calculateAnnualElectricityConsumption(powerPerUnit, numberOfUnits, annualOperatingHours) * ELECTIRC_PRICE_KILOWATT_HOUR + laborCostForReplacement;
}
/**
* 计算总年费用
* @param numberOfUnits 电厨炊设备台数
* @param pricePerUnit 单台电设备价格
* @param usefulLifeYears 电厨炊的使用年限
* @param powerPerUnit 设备功率
* @param annualOperatingHours 电设备年运行时间
* @param laborCostForReplacement 电替代设备人工费用成本
* @return (电厨炊设备台数 *单台电设备价格<A>/电厨炊的使用年限<A> + 年运行费用
*/
public static double calculateTotalAnnualCost(int numberOfUnits, double pricePerUnit, int usefulLifeYears, double powerPerUnit, int annualOperatingHours, double laborCostForReplacement) {
double initialCost = numberOfUnits * pricePerUnit;
double depreciationCost = initialCost / usefulLifeYears;
return depreciationCost + calculateAnnualOperatingCost(powerPerUnit, numberOfUnits, annualOperatingHours, laborCostForReplacement);
}
/**
* 计算年减碳量
* @param lastYearFee 上年运行费用
* @param laborCostForOriginalDevice 原设备人工费用
* @param annualElectricityConsumption 电替代设备年耗电量
* @return 年减碳量=[上年运行费用-原设备的人工费用/煤炭平均价格(0.9元/千克)*0.7143千克标准煤/千克-电替代设备年耗电量*0.1229千克标准煤/千瓦时]*1.9003千克二氧化碳/千克
*/
public static double calculateAnnualCarbonReduction(double lastYearFee, double laborCostForOriginalDevice, double annualElectricityConsumption) {
// (上年运行费用-原设备的人工费用)/煤炭平均价格(0.9元/千克)*0.7143千克标准煤/千克
double coalEquivalentFromPreviousYear = (lastYearFee - laborCostForOriginalDevice) / COAL_PRICE_PER_KILOGRAM * STANDARD_COAL_CONVERSION_FACTOR;
// 电替代设备年耗电量 * 0.1229千克标准煤
double electricityEquivalent = annualElectricityConsumption * ELECTRICITY_SUBSTITUTION_CONVERSION_FACTOR;
// (上年运行费用-原设备的人工费用)/煤炭平均价格(0.9元/千克)*0.7143千克标准煤/千克-电替代设备年耗电量*0.1229千克标准煤/千瓦时
double netReductionInCoalEquivalent = coalEquivalentFromPreviousYear - electricityEquivalent;
return netReductionInCoalEquivalent * CO2_CONVERSION_FACTOR;
}
}

@ -0,0 +1,54 @@
package com.dky.calculate;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.result.MatchedDevice;
import java.util.*;
import java.util.stream.Collectors;
public class KitchenCookScheme {
public static List<MatchedDevice> getCookDevices(Integer peopleNum, List<SysDeviceHeatScene> sysDeviceHeatSceneList) {
// 获取烹饪设备类型最少推荐使用人数
Integer cookDeviceType = getCookDeviceType(peopleNum, sysDeviceHeatSceneList);
List<SysDeviceHeatScene> collect = sysDeviceHeatSceneList.stream().filter(SysDeviceHeatScene -> Objects.equals(SysDeviceHeatScene.getRecomMinPeopleNum(), cookDeviceType)).collect(Collectors.toList());
List<MatchedDevice> list = new ArrayList<>();
collect.forEach((device) ->{
list.add(new MatchedDevice(1, device));
});
return list;
}
public static Integer getCookDeviceType(Integer peopleNum, List<SysDeviceHeatScene> sysDeviceHeatSceneList) {
ArrayList<SysDeviceHeatScene> collect = sysDeviceHeatSceneList.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SysDeviceHeatScene::getRecomMinPeopleNum))),
ArrayList::new
)
);
IntSummaryStatistics intSummaryStatistics = collect.stream().mapToInt(SysDeviceHeatScene::getRecomMinPeopleNum).summaryStatistics();
for (SysDeviceHeatScene s : collect){
if (s.getRecomMinPeopleNum() >= intSummaryStatistics.getMax()){
return s.getRecomMinPeopleNum();
} else {
boolean f1 = peopleNum >= s.getRecomMinPeopleNum();
boolean f2 = peopleNum <= s.getRecomMaxPeopleNum();
if (f1 && f2){
return s.getRecomMinPeopleNum();
}
}
}
return 1;
}
}

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.dky</groupId>
<artifactId>dntd-model-tools</artifactId>
<version>1.1-SNAPSHOT</version>
</parent>
<artifactId>dntd-model-materialkiln</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.5</version>
</dependency>
<dependency>
<groupId>com.dky</groupId>
<artifactId>dntd-modelI</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dky</groupId>
<artifactId>dntd-common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

@ -0,0 +1,126 @@
package com.dky.calculate;
import com.dky.utils.enums.EnergyPriceType;
public class MaterialKilnModel {
// 标准煤转换系数:千克标准煤/千克
private static final double coalConversionFactor = 0.7143;
// 电能转换到标准煤的系数:千克标准煤/千瓦时
private static final double electricityConversionFactor = 0.1229;
// 标准煤转换到二氧化碳的系数:千克二氧化碳/千克标准煤
private static final double carbonConversionFactor = 1.9003;
/**
* 计算初次投资费用
*
* @param productDensity 产品的密度
* @param furnaceWorkingVolume 电窑炉的工作容积
* @param expectedAnnualOutput 预计年产量
* @param batchProductionHours 单台电设备制造一批产品的周期小时
* @param equipmentAnnualHours 单台设备年运行时间
* @param singleEquipmentPrice 单台电设备价格
* @return 包含计算结果的对象
*/
public static Double calculateProduction(
Double productDensity,
Double furnaceWorkingVolume,
Double expectedAnnualOutput,
Double batchProductionHours,
Double equipmentAnnualHours,
Double singleEquipmentPrice
) {
// 单台电设备制造一批产品的产量 = 产品的密度*电窑炉的工作容积
double singleBatchProduction = productDensity * furnaceWorkingVolume;
// 电替代设备台数 = (预计年产量*单台电设备制造一批产品的周期小时<A>)/(单台电设备制造一批产品的产量<A>*单台设备年运行时间<B>)
double equipmentCount = (expectedAnnualOutput * batchProductionHours) /
(singleBatchProduction * equipmentAnnualHours);
// 初次投资费用 = 电替代设备台数*单台电设备价格<A>
return equipmentCount * singleEquipmentPrice;
}
/**
* 计算年运行费用
*
* @param devicePower 电替代设备功率
* @param deviceCount 电替代设备台数
* @param deviceSubstituteLaborCost 电替代设备人工费用
* @param deviceAnnualOperationTime 电替代设备年运行时间
* @return 年运行费用
*/
public static double calculateAnnualOperatingCost(Double devicePower, Integer deviceCount, Double deviceSubstituteLaborCost, Integer deviceAnnualOperationTime) {
// 电替代设备年耗电量=单台电替代设备的功率<A>*电替代设备台数*电设备年运行时间<B>
double annualElectricityConsumption = devicePower * deviceCount * deviceAnnualOperationTime;
// 年运行费用=电替代设备年耗电量*工业平均电价(1.2元/千瓦时) + 单台电替代设备人工费用成本<A> * 台数
return annualElectricityConsumption * EnergyPriceType.Industry_Electric_Price.getPrice() + deviceSubstituteLaborCost * deviceCount;
}
/**
* 计算年总费用
*
* @param devicePower 电替代设备功率
* @param deviceCount 电替代设备台数
* @param deviceSubstituteLaborCost 电替代设备人工费用
* @param deviceAnnualOperationTime 电替代设备年运行时间
* @param devicePrice 设备价格
* @param deviceServiceLife 设备使用年限
* @return
*/
public static double calculateAnnualTotalCost(Double devicePower, Integer deviceCount, Double deviceSubstituteLaborCost, Integer deviceAnnualOperationTime, Double devicePrice, Integer deviceServiceLife) {
//(电替代设备台数*单台电设备价格<A>)/电替代设备的使用年限<A>
double v = ((devicePrice * deviceCount) / deviceServiceLife);
// 年总费用 =(电替代设备台数*单台电设备价格<A>)/电替代设备的使用年限<A> + 年运行费用
return v + calculateAnnualOperatingCost(devicePower, deviceCount, deviceSubstituteLaborCost, deviceAnnualOperationTime);
}
/**
* 计算年减碳量
*
* @param previousYearOperatingCost 上年运行费用
* @param originalEquipmentLaborCost 原设备的人工费用
* @param electricitySubstitutionAnnualConsumption 电替代设备年耗电量
* @return 年减碳量
*/
public static double calculateAnnualCarbonReduction(
Double previousYearOperatingCost,
Double originalEquipmentLaborCost,
Double electricitySubstitutionAnnualConsumption
) {
// 计算节约的煤炭量(转换为标准煤)=(上年运行费用-原设备的人工费用)/煤炭平均价格(0.9元/千克)*0.7143千克标准煤/千克
double savedCoalInStandardCoal = (previousYearOperatingCost - originalEquipmentLaborCost) /
EnergyPriceType.COAL_PRICE_PER_KILOGRAM.getPrice() * coalConversionFactor;
// 计算电替代设备消耗的电量转换为标准煤的量
double electricityInStandardCoal = electricitySubstitutionAnnualConsumption * electricityConversionFactor;
// 计算总的节约的标准煤量
double totalSavedStandardCoal = savedCoalInStandardCoal - electricityInStandardCoal;
// 计算年减碳量
return totalSavedStandardCoal * carbonConversionFactor;
}
/**
* 计算电替代设备年耗电量
*
* @param devicePower 设备功率
* @param deviceCount 设备台数
* @param deviceAnnualOperationTime 单台电设备年运行时间
* @return
*/
public static double calculateSubstituteElectricity(Double devicePower, Integer deviceCount, Integer deviceAnnualOperationTime) {
// 电替代设备年耗电量 = 电替代设备的功率<A> * 电替代设备台数 * 电设备年运行时间<B>
return devicePower * deviceCount * deviceAnnualOperationTime;
}
}

@ -0,0 +1,37 @@
package com.dky.calculate;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.result.MatchedDevice;
import java.util.ArrayList;
import java.util.List;
public class MaterialKilnScheme {
public static List<MatchedDevice> calSchemeByTechType(Double workArea, List<SysDeviceHeatScene> sysDeviceHeatSceneList) {
// 对技术类型下的设备list按照单台设备工作容积进行排序
sysDeviceHeatSceneList.sort((o1, o2) -> Double.compare(o2.getDevWorkArea(), o1.getDevWorkArea()));
Double remainArea = workArea;
// 遍历设备,根据工作容积进行匹配设备数量
List<MatchedDevice> matchedDeviceList = new ArrayList<>();
for (SysDeviceHeatScene deviceHeatScene : sysDeviceHeatSceneList) {
double v = remainArea / deviceHeatScene.getDevWorkArea();
int count = (int) (v);
if (v < 1) {
count = count + 1;
}
remainArea = remainArea - count * deviceHeatScene.getDevWorkArea();
matchedDeviceList.add(new MatchedDevice(count, deviceHeatScene));
if (remainArea <= 0) {
// 当总供暖面积已经满足需求时,跳出循环,不再选择其他设备
break;
}
}
return matchedDeviceList;
}
}

@ -44,6 +44,30 @@
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.dky</groupId>
<artifactId>dntd-common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.dky</groupId>
<artifactId>dntd-model-heatboiler</artifactId>
<version>1.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.dky</groupId>
<artifactId>dntd-model-kitchencooking</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.dky</groupId>
<artifactId>dntd-model-materialkiln</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<resources>

@ -4,7 +4,9 @@ package com.dky.generate;
import cn.hutool.json.JSONObject;
import com.dky.calculate.*;
import com.dky.modelI.DntdModelI;
import com.dky.utils.GetTargetDeviceList;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.enums.DeviceSubType;
import com.dky.utils.result.MatchedDevice;
import java.text.DecimalFormat;
@ -22,7 +24,11 @@ public class BuildHeatingScene implements DntdModelI {
static final Double COEFFICIENT_2 = 0.85;
@Override
public JSONObject createReport(JSONObject jsonObject,List<SysDeviceHeatScene> alternateDeviceList) {
public JSONObject createReport(JSONObject jsonObject,List<SysDeviceHeatScene> sceneList) {
List<SysDeviceHeatScene> list1 = GetTargetDeviceList.main(DeviceSubType.Cooling_Heating.getDesc(), sceneList);
List<SysDeviceHeatScene> list2 = GetTargetDeviceList.main(DeviceSubType.Cooling_Heating_Electric_Boiler.getDesc(), sceneList);
List<SysDeviceHeatScene> alternateDeviceList = new ArrayList<>(list1);
alternateDeviceList.addAll(list2);
JSONObject distInfo = new JSONObject();
JSONObject buildInfo = new JSONObject();
@ -118,7 +124,8 @@ public class BuildHeatingScene implements DntdModelI {
List<List<MatchedDevice>> heatPumpDevList = new ArrayList<>();
matchedDeviceGroupList.forEach((matchedDevices -> {
MatchedDevice matchedDevice = matchedDevices.get(0);
if (!"供冷/暖电锅炉".equals(matchedDevice.getDeviceHeatScene().getDevSubType())){
String s = DeviceSubType.Cooling_Heating_Electric_Boiler.getDesc();
if (!s.equals(matchedDevice.getDeviceHeatScene().getDevSubType())){
heatPumpDevList.add(matchedDevices);
}
}));
@ -152,6 +159,7 @@ public class BuildHeatingScene implements DntdModelI {
Double runCost = 0.0;
Double allCost = 0.0;
Double calculateAnnualCarbon = 0.0;
Double laborFee1 = 0.0;
Double electric = 0.0;
List<HashMap<String,Object>> deviceList = new ArrayList<>();
for (MatchedDevice matchedDevice : matchedDeviceList){
@ -162,10 +170,14 @@ public class BuildHeatingScene implements DntdModelI {
map.put("devPrice",matchedDevice.getDeviceHeatScene().getDevPrice());
deviceList.add(map);
startCost = startCost + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getDevPrice());
runCost = runCost + (BuildHeatingModel.getRunCost(matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevPower(), days, matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost()));
allCost = allCost + (BuildHeatingModel.getYearCost(matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevPrice(), matchedDevice.getDeviceHeatScene().getDevServiceLife(), matchedDevice.getDeviceHeatScene().getDevPower(), days, matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost()));
electric = electric + (BuildHeatingModel.getElectric(matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevPower(), days));
calculateAnnualCarbon = calculateAnnualCarbon + (BuildHeatingModel.calculateAnnualCarbonReduction(lastYearFee, matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getLaborCost(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevPower(), days));
laborFee1 = laborFee1 + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getDevPrice() / matchedDevice.getDeviceHeatScene().getDevServiceLife());
}
//初次投资费用
@ -177,6 +189,7 @@ 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));
@ -187,9 +200,9 @@ public class BuildHeatingScene implements DntdModelI {
//封装方案优势
returnJsonObject.set("safety", BuildHeatingAdvantage.safety());
returnJsonObject.set("economy", BuildHeatingAdvantage.economy(startCost, allCost, runCost, lastYearFee));
returnJsonObject.set("economy", Advantage.economy(startCost, runCost, lastYearFee));
returnJsonObject.set("intelligence", BuildHeatingAdvantage.intelligence());
returnJsonObject.set("environment", BuildHeatingAdvantage.environment(Double.valueOf(decimalFormat.format(calculateAnnualCarbon))));
returnJsonObject.set("environment", BuildHeatingAdvantage.environment(Double.valueOf(decimalFormat.format(calculateAnnualCarbon/1000))));
//封装方案评分
returnJsonObject.set("matchedDeviceList", maps);

@ -0,0 +1,169 @@
package com.dky.generate;
import cn.hutool.json.JSONObject;
import com.dky.calculate.*;
import com.dky.modelI.DntdModelI;
import com.dky.utils.GetTargetDeviceList;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.enums.DeviceSubType;
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;
public class HeatBoilerScene implements DntdModelI {
DecimalFormat decimalFormat = new DecimalFormat("#.00");
// 首先A=由运行/合同容量折合成kW(x0.9)x85%,
static final Double COEFFICIENT_1 = 0.9;
static final Double COEFFICIENT_2 = 0.85;
@Override
public JSONObject createReport(JSONObject jsonObject, List<SysDeviceHeatScene> list) {
List<SysDeviceHeatScene> alternateDeviceList = GetTargetDeviceList.main(DeviceSubType.Boiler_Heating.getDesc(), list);
// System.out.println("工业锅炉供热: " + alternateDeviceList + "\n");
JSONObject distInfo = new JSONObject();
JSONObject heatUseNeedInfo = new JSONObject();
JSONObject originalDevInfo = new JSONObject();
try {
distInfo = (JSONObject) jsonObject.get("distInfo");
heatUseNeedInfo = (JSONObject) jsonObject.get("heatUseNeedInfo");
originalDevInfo = (JSONObject) jsonObject.get("originalDevInfo");
} catch (Exception e) {
e.printStackTrace();
}
// 运行容量
Double runCapacity = Double.parseDouble(distInfo.get("runCapacity").toString());
// 上年最大需量
Double lastYearNeed = Double.parseDouble(distInfo.get("lastYearNeed").toString());
// 供热需量设备功率(单位: kW)【 1蒸吨等于770KW 】
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);
// 实际可承载容量A = 运行(或合同容量)x0.9 [将运行容量或合同容量折算成容量] x85%
double A = runCapacity * COEFFICIENT_1 * COEFFICIENT_2;
// 根据供热需量设备功率计算每个技术类型下需要的不同功率的设备的数量,然后将不同功率及对应的数量进行计算得出总功率C1,取最大
Double C1 = CalC.getC1(matchedDeviceGroupList);
// 改造后最大需量
double D1 = lastYearNeed + C1;
double costRatio = 0.2;
double effRatio = 0.8;
try {
double costRatio1 = Double.parseDouble(jsonObject.get("costRatio").toString());
double effRatio1 = Double.parseDouble(jsonObject.get("effRatio").toString());
if (costRatio1 < 1 && costRatio1 + costRatio1 == 1) {
costRatio = costRatio1;
effRatio = effRatio1;
}
} catch (Exception e) {
e.printStackTrace();
}
List<MatchedDevice> matchedDeviceList;
Map<String, SchemeRatingRes> listMap;
// 根据具体容量与需量判断可使用的技术并计算评分
// 计算不同细类下成本最小值与效率最大值
Map<String, Double> maxEffMap = SchemeRating.getMaxEfficiencyGroupByDevSubType(alternateDeviceList);
Map<String, Double> minPrice = SchemeRating.getMinPriceGroupByDevSubType(matchedDeviceGroupList);
String remark = "";
// 同时考虑热泵和电锅炉
if (A < D1) {
remark = "本方案存在扩容投资需求,扩容投资不计入初次投资费用";
}
listMap = SchemeRating.getOptimalList(matchedDeviceGroupList, costRatio, effRatio, maxEffMap, minPrice);
matchedDeviceList = SchemeRating.getOptimalScheme(listMap);
List<Map<String, Object>> maps = new ArrayList<>();
listMap.forEach((k, v) -> {
Map<String, Object> map = new HashMap<>();
map.put("rating", decimalFormat.format(v.getSchemeRating()));
map.put("plan", v.getList());
map.put("planName", v.getPlanName());
maps.add(map);
});
/*
封装返回
*/
JSONObject returnJsonObject = new JSONObject();
Double startCost = 0.0;
Double runCost = 0.0;
Double allCost = 0.0;
Double calculateAnnualCarbon = 0.0;
Double electric = 0.0;
List<HashMap<String, Object>> deviceList = new ArrayList<>();
for (MatchedDevice matchedDevice : matchedDeviceList) {
HashMap<String, Object> map = new HashMap<>();
map.put("devSubType", matchedDevice.getDeviceHeatScene().getDevSubType());
map.put("devTechType", matchedDevice.getDeviceHeatScene().getDevTechType());
map.put("devCount", matchedDevice.getCount());
map.put("devPrice", matchedDevice.getDeviceHeatScene().getDevPrice());
deviceList.add(map);
startCost = startCost + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getDevPrice());
runCost = runCost + (HeatBoilerModel.calculateAnnualOperatingCost(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime()));
allCost = allCost + (HeatBoilerModel.calculateAnnualTotalCost(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost(),
matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime(), matchedDevice.getDeviceHeatScene().getDevPrice(), matchedDevice.getDeviceHeatScene().getDevServiceLife()));
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()));
}
//初次投资费用
returnJsonObject.set("startCost", decimalFormat.format(startCost));
// 设备总价
returnJsonObject.set("devCost", decimalFormat.format(startCost));
//年运行费用
returnJsonObject.set("yearRunCost", decimalFormat.format(runCost));
//年总费用
returnJsonObject.set("yearCost", decimalFormat.format(allCost));
//年减碳量
calculateAnnualCarbon = HeatBoilerModel.calculateAnnualCarbonReduction(previousYearEnergyUsage, electric);
returnJsonObject.set("calculate", decimalFormat.format(calculateAnnualCarbon / 1000));
//替代电量
returnJsonObject.set("electric", decimalFormat.format(electric));
//备注
returnJsonObject.set("remark", remark);
//封装需配置设备情况
returnJsonObject.set("deviceList", deviceList);
//封装方案优势
returnJsonObject.set("safety", BuildHeatingAdvantage.safety());
returnJsonObject.set("economy", Advantage.economy(startCost, runCost, lastYearFee));
returnJsonObject.set("intelligence", BuildHeatingAdvantage.intelligence());
returnJsonObject.set("environment", BuildHeatingAdvantage.environment(Double.valueOf(decimalFormat.format(calculateAnnualCarbon / 1000))));
//封装方案评分
returnJsonObject.set("matchedDeviceList", maps);
return returnJsonObject;
}
}

@ -1,82 +0,0 @@
package com.dky.generate;
import cn.hutool.json.JSONObject;
import com.dky.calculate.Advantage;
import com.dky.calculate.Overall;
import com.dky.entity.Heatboiler;
import com.dky.modelI.DntdModelI;
import com.dky.utils.entity.SysDeviceHeatScene;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class HeatBoilerSence implements DntdModelI {
@Override
public JSONObject createReport(JSONObject jsonObject, List<SysDeviceHeatScene> alternateDeviceList) {
JSONObject jsonReport = new JSONObject();
Heatboiler heatboiler = jsonObject.toBean(Heatboiler.class);
// 生成报告
// List<DevSpec> specList = ModelTool.specList;
// List<DevPrice> priceList = ModelTool.priceList;
// MatchedDeviceResult matchedDeviceResult = RequireDevice.matchDevices(heatboiler.getHotDevicePower(), specList, priceList);
Overall overall = new Overall();
//初次投资费用(万元)
// Double firstInvestFee = Math.round(matchedDeviceResult.getTotalPriceInTenThousand()*100.0)/100.0;
//年运行费用(万元)
Double yearRunFee = Math.round(overall.yearRunFee(heatboiler.getYearEnergy(), heatboiler.getElectricityPrice())*100.0)/100.0;
//年总费用(万元)
Double yearTotalFee = Math.round(overall.yearTotalFee(yearRunFee)*100.0)/100.0;
//年减碳(吨)
Double yearReduceCarbon = Math.round(overall.yearReduceCarbon(heatboiler.getYearEnergy())*100.0)/100.0;
//替代电量
Double replaceEnergy = Math.round(overall.replaceEnergy(heatboiler.getYearEnergy())*100.0)/100.0;
// List<MatchedDevice> devices = matchedDeviceResult.getMatchedDevices();
//需配置设备情况
//方案详情
String reportDetail = "用直热式电锅炉替代原设备";
/*//设备类型
String deviceType = "";
//设备规格
String deviceSpec = "";
//设备数量
String deviceNum = "";*/
//单位(元/台、元/套)
String unit = "";
Set<String> devTypeSet = new HashSet<>();
/* for (MatchedDevice : matchedDeviceResult.getMatchedDevices()) {
devTypeSet.add(matchedDevice.getDevSpec().getDevType());
deviceSpec = deviceSpec + matchedDevice.getDevSpec().getDevType() + ":"+matchedDevicematchedDevice.getDevSpec().getCapacity()+"蒸吨、";
deviceNum = deviceNum + matchedDevice.getCount() + "台/"+matchedDevice.getDevSpec().getDevType()+";";
int devId = matchedDevice.getDevSpec().getId();
for (DevPrice devPrice : priceList) {
if (devId == devPrice.getId()) {
unit = unit+devPrice.getDevPrice()+"元/台;";
break;
}
}
}*/
/* for (String s : devTypeSet) {
deviceType = deviceType + s + "、";
}*/
Advantage advantage = new Advantage();
//总价
// String totalPrice = matchedDeviceResult.getTotalPriceInTenThousand()+"万元";
// jsonReport.put("firstInvestFee", firstInvestFee);
jsonReport.put("yearRunFee", yearRunFee);
jsonReport.put("yearTotalFee", yearTotalFee);
jsonReport.put("yearReduceCarbon", yearReduceCarbon);
jsonReport.put("replaceEnergy", replaceEnergy);
jsonReport.put("reportDetail", reportDetail);
/*jsonReport.put("deviceType", deviceType);
jsonReport.put("deviceSpec", deviceSpec);*/
// jsonReport.put("devices", devices);
jsonReport.put("unit", unit);
// jsonReport.put("totalPrice", totalPrice);
jsonReport.put("safety", advantage.safety());
// jsonReport.put("economy", advantage.economy(firstInvestFee,yearTotalFee,yearRunFee,heatboiler.getOriginalDevice().getLastYearFee()));
jsonReport.put("intelligence", advantage.intelligence());
jsonReport.put("environment", advantage.environment(yearReduceCarbon));
return jsonReport;
}
}

@ -0,0 +1,133 @@
package com.dky.generate;
import cn.hutool.json.JSONObject;
import com.dky.calculate.*;
import com.dky.modelI.DntdModelI;
import com.dky.utils.GetTargetDeviceList;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.enums.DeviceSubType;
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;
public class KitchenCookScene implements DntdModelI {
DecimalFormat decimalFormat = new DecimalFormat("#.00");
// 首先A=由运行/合同容量折合成kW(x0.9)x85%,
static final Double COEFFICIENT_1 = 0.9;
static final Double COEFFICIENT_2 = 0.85;
@Override
public JSONObject createReport(JSONObject jsonObject, List<SysDeviceHeatScene> sceneList) {
List<SysDeviceHeatScene> alternateDeviceList = GetTargetDeviceList.main(DeviceSubType.Kitchen_Cooking.getDesc(), sceneList);
JSONObject distInfo = new JSONObject();
try{
distInfo = (JSONObject) jsonObject.get("distInfo");
} catch (Exception e){
e.printStackTrace();
}
// 运行容量
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());
/*
实际可承载容量A = 运行或合同容量x0.9[将运行容量或合同容量折算成容量]x85%
*/
double A = runCapacity * COEFFICIENT_1 * COEFFICIENT_2;
/*
根据人数计算出不同技术类型下所需要不同功率设备数据
*/
List<MatchedDevice> cookDevices = KitchenCookScheme.getCookDevices(peopleNum, alternateDeviceList);
/*
替代后设备总功率C1
*/
double C1 = 0.0;
for (MatchedDevice matchedDevice : cookDevices){
C1 = C1 + matchedDevice.getDeviceHeatScene().getDevPower() * matchedDevice.getCount();
}
/*
改造后最大需量D1
*/
double D1 = lastYearNeed + C1;
String remark = "";
if ( A < D1){
remark = "本方案存在扩容投资需求,扩容投资不计入初次投资费用";
}
/*
封装返回
*/
JSONObject returnJsonObject = new JSONObject();
Double startCost = 0.0;
Double runCost = 0.0;
Double allCost = 0.0;
Double calculateAnnualCarbon = 0.0;
Double laborCost = 0.0;
Double electric = 0.0;
List<HashMap<String,Object>> deviceList = new ArrayList<>();
for (MatchedDevice matchedDevice : cookDevices){
HashMap<String, Object> map = new HashMap<>();
map.put("devSubType",matchedDevice.getDeviceHeatScene().getDevSubType());
map.put("devTechType",matchedDevice.getDeviceHeatScene().getDevTechType());
map.put("devCount",matchedDevice.getCount());
map.put("devPrice",matchedDevice.getDeviceHeatScene().getDevPrice());
deviceList.add(map);
startCost = startCost + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getDevPrice());
runCost = runCost + (KitchenCookModel.calculateAnnualOperatingCost(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime(), matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost()));
allCost = allCost + (KitchenCookModel.calculateTotalAnnualCost(matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevPrice(), matchedDevice.getDeviceHeatScene().getDevServiceLife(),
matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime(), matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost()));
electric = electric + (KitchenCookModel.calculateAnnualElectricityConsumption(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime()));
laborCost = laborCost + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getLaborCost() / matchedDevice.getDeviceHeatScene().getDevServiceLife());
}
//初次投资费用
returnJsonObject.set("startCost", decimalFormat.format(startCost));
// 设备总价
returnJsonObject.set("devCost", decimalFormat.format(startCost));
//年运行费用
returnJsonObject.set("yearRunCost", decimalFormat.format(runCost));
//年总费用
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));
//备注
returnJsonObject.set("remark",remark);
//封装需配置设备情况
returnJsonObject.set("deviceList",deviceList);
//封装方案优势
returnJsonObject.set("safety", BuildHeatingAdvantage.safety());
returnJsonObject.set("economy", Advantage.economy(startCost, runCost, lastYearFee));
returnJsonObject.set("intelligence", BuildHeatingAdvantage.intelligence());
returnJsonObject.set("environment", BuildHeatingAdvantage.environment(Double.valueOf(decimalFormat.format(calculateAnnualCarbon/1000))));
return returnJsonObject;
}
}

@ -0,0 +1,131 @@
package com.dky.generate;
import cn.hutool.json.JSONObject;
import com.dky.calculate.*;
import com.dky.modelI.DntdModelI;
import com.dky.utils.GetTargetDeviceList;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.enums.DeviceSubType;
import com.dky.utils.result.MatchedDevice;
import java.text.DecimalFormat;
import java.util.*;
public class MaterialKilnScene implements DntdModelI {
DecimalFormat decimalFormat = new DecimalFormat("#.00");
// 首先A=由运行/合同容量折合成kW(x0.9)x85%,
static final Double COEFFICIENT_1 = 0.9;
static final Double COEFFICIENT_2 = 0.85;
@Override
public JSONObject createReport(JSONObject jsonObject, List<SysDeviceHeatScene> list) {
List<SysDeviceHeatScene> alternateDeviceList = GetTargetDeviceList.main(DeviceSubType.Material_Kiln.getDesc(), list);
// System.out.println("工业锅炉供热: " + alternateDeviceList + "\n");
JSONObject distInfo = new JSONObject();
JSONObject heatUseNeedInfo = new JSONObject();
JSONObject originalDevInfo = new JSONObject();
try {
distInfo = (JSONObject) jsonObject.get("distInfo");
heatUseNeedInfo = (JSONObject) jsonObject.get("heatUseNeedInfo");
originalDevInfo = (JSONObject) jsonObject.get("originalDevInfo");
} catch (Exception e) {
e.printStackTrace();
}
// 运行容量
Double runCapacity = Double.parseDouble(distInfo.get("runCapacity").toString());
// 上年最大需量
Double lastYearNeed = Double.parseDouble(distInfo.get("lastYearNeed").toString());
// 工作容积(单位: m³)【 1 立方米=1000 升 】
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<MatchedDevice> matchedDeviceGroupList = MaterialKilnScheme.calSchemeByTechType(workArea, alternateDeviceList);
// 实际可承载容量A = 运行(或合同容量)x0.9 [将运行容量或合同容量折算成容量] x85%
double A = runCapacity * COEFFICIENT_1 * COEFFICIENT_2;
// 根据供热需量设备功率计算每个技术类型下需要的不同功率的设备的数量,然后将不同功率及对应的数量进行计算得出总功率C1,取最大
Double C1 = CalC.getC1(Collections.singletonList(matchedDeviceGroupList));
// 改造后最大需量
double D1 = lastYearNeed + C1;
String remark = "";
// 同时考虑热泵和电锅炉
if (A < D1) {
remark = "本方案存在扩容投资需求,扩容投资不计入初次投资费用";
}
/*
封装返回
*/
JSONObject returnJsonObject = new JSONObject();
Double startCost = 0.0;
Double runCost = 0.0;
Double allCost = 0.0;
Double calculateAnnualCarbon = 0.0;
Double laborFee1 = 0.0;
Double electric = 0.0;
List<HashMap<String, Object>> deviceList = new ArrayList<>();
for (MatchedDevice matchedDevice : matchedDeviceGroupList) {
HashMap<String, Object> map = new HashMap<>();
map.put("devSubType", matchedDevice.getDeviceHeatScene().getDevSubType());
map.put("devTechType", matchedDevice.getDeviceHeatScene().getDevTechType());
map.put("devCount", matchedDevice.getCount());
map.put("devPrice", matchedDevice.getDeviceHeatScene().getDevPrice());
deviceList.add(map);
startCost = startCost + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getDevPrice());
runCost = runCost + (MaterialKilnModel.calculateAnnualOperatingCost(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime()));
allCost = allCost + (MaterialKilnModel.calculateAnnualTotalCost(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevSubstituteLaborCost(),
matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime(), matchedDevice.getDeviceHeatScene().getDevPrice(), matchedDevice.getDeviceHeatScene().getDevServiceLife()));
electric = electric + (MaterialKilnModel.calculateSubstituteElectricity(matchedDevice.getDeviceHeatScene().getDevPower(), matchedDevice.getCount(), matchedDevice.getDeviceHeatScene().getDevAnnualOperationTime()));
laborFee1 = laborFee1 + (matchedDevice.getCount() * matchedDevice.getDeviceHeatScene().getDevPrice() / matchedDevice.getDeviceHeatScene().getDevServiceLife());
}
//初次投资费用
returnJsonObject.set("startCost", decimalFormat.format(startCost));
// 设备总价
returnJsonObject.set("devCost", decimalFormat.format(startCost));
//年运行费用
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));
//备注
returnJsonObject.set("remark", remark);
//封装需配置设备情况
returnJsonObject.set("deviceList", deviceList);
//封装方案优势
returnJsonObject.set("safety", BuildHeatingAdvantage.safety());
returnJsonObject.set("economy", Advantage.economy(startCost, runCost, lastYearFee));
returnJsonObject.set("intelligence", BuildHeatingAdvantage.intelligence());
returnJsonObject.set("environment", BuildHeatingAdvantage.environment(Double.valueOf(decimalFormat.format(calculateAnnualCarbon / 1000))));
return returnJsonObject;
}
}

@ -77,6 +77,11 @@ public class SM4Utils {
return map;
}
public static void main(String[] args) throws Exception {
String s =
"ELjXfd24Nl0LrqAIgE5pDAolhmR0ARb5qJpGuoQHMO4q8zq8F84zVFJC+WoUMgVUCUroZHemAUp06HUO2iYGBavkllg/tp1+dum7FSZilOkBJhFQqRsgHftdznSXX02l7iqX+vPZyNKyLubVgDoPjYj7GyhXZ/pOm6AthNcRV2E=";
List<Map<String, String>> decryptList = decrypt(s);
decryptList.forEach(System.out::println);
/**
* SM2私钥解密

@ -10,102 +10,128 @@ package com.dky.test;
*/
import com.dky.calculate.Scheme;
import com.dky.calculate.SchemeRating;
import cn.hutool.json.JSONObject;
import com.dky.tool.ModelTool;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.result.MatchedDevice;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class TestMain {
public static void main(String[] args) {
List<SysDeviceHeatScene> alternateDeviceList = createDevList();
// List<List<MatchedDevice>> alternateDeviceList = calSchemeMethodTest(14000.0, devList);
// getMaxEfficiencyGroupByDevSubTypeTest(alternateDeviceList);
// getMinPriceGroupByDevSubTypeTest(alternateDeviceList);
/*
根据建筑面积计算出不同技术类型下所需要不同功率设备数据
*/
List<List<MatchedDevice>> matchedDeviceGroupList = Scheme.calScheme(44000.0, alternateDeviceList);
/*
判断计算占比默认效率0.8成本0.2
*/
double costRatio = 0.2;
double effRatio = 0.8;
List<MatchedDevice> matchedDeviceList ;
Map<Double, List<MatchedDevice>> listMap ;
/*
根据具体容量与需量判断可使用的技术并计算评分
*/
//计算不同细类下成本最小值与效率最大值
Map<String, Double> maxEffMap = SchemeRating.getMaxEfficiencyGroupByDevSubType(alternateDeviceList);
//Map<String, Double> minPriceMap = SchemeRating.getMinPriceGroupByDevSubType(alternateDeviceList);
//listMap = SchemeRating.getOptimalList(matchedDeviceGroupList,costRatio,effRatio,maxEffMap,minPriceMap);
//matchedDeviceList = SchemeRating.getOptimalScheme(listMap);
}
public static List<List<MatchedDevice>> calSchemeMethodTest(Double buildArea, List<SysDeviceHeatScene> SysDeviceHeatSceneList) {
return Scheme.calScheme(buildArea, SysDeviceHeatSceneList);
JSONObject param = new JSONObject();
param.put("type", "0104");
/*param.put("lastYearFee", 500000.2);
param.put("peopleNum", 88);*/
param.put("distInfo", new JSONObject()
.put("runCapacity", 2400.0)
.put("lastYearNeed", 1600.0));
param.put("heatUseNeedInfo", new JSONObject()
.put("workArea", 33)
.put("yearOutPut", 1000000.0));
param.put("originalDevInfo", new JSONObject()
.put("previousYearEnergyUsage", 24090000)
.put("lastYearFee", 3150000));
/*param.put("buildInfo", new JSONObject()
.put("days", 185)
.put("heatingArea", 48000)
.put("lastYearFee", 3000000));*/
/*param.put("heatUseNeedInfo", new JSONObject()
.put("heatingNeedPower", 33)
.put("thermometerValueOut", 112.45));
param.put("originalDevInfo", new JSONObject()
.put("previousYearEnergyUsage", 24090000)
.put("lastYearFee", 3000000));*/
String key = "GWnQ4RqqTc8n1Uj59xLoUtv975fmQsRWuvsk1zRmQu9TwIvlc6FTekndKMh+vMuRbI2bxdmuIxyZndYcg9u5xVa+HaiBZRP8OZFYIAo+66vDVlkBf47Nh2srjFyIXlLH";
// 构建JSONObject对象
JSONObject list = new JSONObject();
// 将设备列表放入JSONObject对象当中并且键为“devSpecList”(键名必须为“devSpecList”)
list.put("devSpecList", createDevList());
// 将这个JSONObject对象list作为入参调用ModelTool的create方法实现产品库初始化。
ModelTool modelTool = ModelTool.create(list);
// 调用ModelTool的唯一入口函数exeModel2Report,将场景参数param和密钥key作为入参传进去,得到输出结果电能替代报告。
System.out.println(modelTool.exeModel2Report(param, key));
}
public static void getMaxEfficiencyGroupByDevSubTypeTest(List<SysDeviceHeatScene> sysDeviceHeatSceneList){
SchemeRating.getMaxEfficiencyGroupByDevSubType(sysDeviceHeatSceneList);
}
public static List<SysDeviceHeatScene>createDevList(){
public static List<SysDeviceHeatScene> createDevList() {
List<SysDeviceHeatScene> deviceList = new ArrayList<>();
// 模拟从数据库中检索数据
Object[][] data =
{
{19, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电阻类)", 0.95, 360.00, 80000.00, 60000.00, 180000.00, 3000.00, 15, null, null},
{20, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电阻类)", 0.95, 720.00, 100000.00, 60000.00, 180000.00, 6000.00, 15, null, null},
{21, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电阻类)", 0.95, 1440.00, 160000.00, 60000.00, 180000.00, 12000.00, 15, null, null},
{22, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电极类)", 0.97, 360.00, 280000.00, 60000.00, 180000.00, 3000.00, 15, null, null},
{23, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电极类)", 0.97, 720.00, 460000.00, 60000.00, 180000.00, 6000.00, 15, null, null},
{24, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电极类)", 0.97, 1440.00, 900000.00, 60000.00, 180000.00, 12000.00, 15, null, null},
{25, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电磁涡流类)", 0.98, 360.00, 150000.00, 60000.00, 180000.00, 3000.00, 15, null, null},
{26, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电磁涡流类)", 0.98, 720.00, 180000.00, 60000.00, 180000.00, 6000.00, 15, null, null},
{27, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电磁涡流类)", 0.98, 1440.00, 300000.00, 60000.00, 180000.00, 12000.00, 15, null, null},
{28, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(固体蓄热)", 0.95, 360.00, 360000.00, 60000.00, 180000.00, 3000.00, 15, null, null},
{29, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(固体蓄热)", 0.95, 720.00, 720000.00, 60000.00, 180000.00, 6000.00, 15, null, null},
{30, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(固体蓄热)", 0.95, 1440.00, 1440000.00, 60000.00, 180000.00, 12000.00, 15, null, null},
{31, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(相变蓄热)", 0.98, 360.00, 120000.00, 60000.00, 180000.00, 3000.00, 15, null, null},
{32, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(相变蓄热)", 0.98, 720.00, 160000.00, 60000.00, 180000.00, 6000.00, 15, null, null},
{33, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(相变蓄热)", 0.98, 1440.00, 280000.00, 60000.00, 180000.00, 12000.00, 15, null, null},
{34, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(水蓄)", 0.97, 360.00, 110000.00, 60000.00, 180000.00, 3000.00, 15, null, null},
{35, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(水蓄)", 0.97, 720.00, 150000.00, 60000.00, 180000.00, 6000.00, 15, null, null},
{36, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(水蓄)", 0.97, 1440.00, 260000.00, 60000.00, 180000.00, 12000.00, 15, null, null},
{37, "热泵", "供冷/暖", "水源热泵", 4.00, 25.00, 45000.00, 60000.00, 180000.00, 500.00, 15, null, null},
{38, "热泵", "供冷/暖", "水源热泵", 4.00, 45.00, 75000.00, 60000.00, 180000.00, 1000.00, 15, null, null},
{39, "热泵", "供冷/暖", "水源热泵", 4.00, 90.00, 140000.00, 60000.00, 180000.00, 2000.00, 15, null, null},
{40, "热泵", "供冷/暖", "土壤源热泵", 4.00, 25.00, 45000.00, 60000.00, 180000.00, 500.00, 15, null, null},
{41, "热泵", "供冷/暖", "土壤源热泵", 4.00, 45.00, 75000.00, 60000.00, 180000.00, 1000.00, 15, null, null},
{42, "热泵", "供冷/暖", "土壤源热泵", 4.00, 90.00, 140000.00, 60000.00, 180000.00, 2000.00, 15, null, null},
{43, "热泵", "供冷/暖", "空气源热泵", 4.00, 25.00, 45000.00, 60000.00, 180000.00, 500.00, 15, null, null},
{44, "热泵", "供冷/暖", "空气源热泵", 4.00, 45.00, 75000.00, 60000.00, 180000.00, 1000.00, 15, null, null},
{45, "热泵", "供冷/暖", "空气源热泵", 4.00, 90.00, 140000.00, 60000.00, 180000.00, 2000.00, 15, null, null},
{46, "热泵", "供冷/暖", "低品位余热源(如电厂低温循环水)热泵", 4.00, 25.00, 45000.00, 60000.00, 180000.00, 500.00, 15, null, null},
{47, "热泵", "供冷/暖", "低品位余热源(如电厂低温循环水)热泵", 4.00, 45.00, 75000.00, 60000.00, 180000.00, 1000.00, 15, null, null},
{48, "热泵", "供冷/暖", "低品位余热源(如电厂低温循环水)热泵", 4.00, 90.00, 140000.00, 60000.00, 180000.00, 2000.00, 15, null, null},
{49, "热泵", "供冷/暖", "高温蒸汽热泵", 3.00, 45.00, 380000.00, 60000.00, 180000.00, 1000.00, 15, null, null},
{50, "热泵", "供冷/暖", "高温蒸汽热泵", 3.00, 120.00, 550000.00, 60000.00, 180000.00, 2000.00, 15, null, null},
{1, "电锅炉", "工业供热电锅炉", "直热式电锅炉(电阻类)", 0.95, 360.00, 80000.00, 60000.00, 180000.00, 3000.00, 15, 4500, null, null,null,null,null,null},
{2, "电锅炉", "工业供热电锅炉", "直热式电锅炉(电阻类)", 0.95, 720.00, 100000.00, 60000.00, 180000.00, 6000.00, 15, 4500, null, null,null,null,null,null},
{3, "电锅炉", "工业供热电锅炉", "直热式电锅炉(电阻类)", 0.95, 1440.00, 160000.00, 60000.00, 180000.00, 12000.00, 15, 4500, null, null,null,null,null,null},
{4, "电锅炉", "工业供热电锅炉", "直热式电锅炉(电极类)", 0.97, 360.00, 280000.00, 60000.00, 180000.00, 3000.00, 15, 4500, null, null,null,null,null,null},
{5, "电锅炉", "工业供热电锅炉", "直热式电锅炉(电极类)", 0.97, 720.00, 460000.00, 60000.00, 180000.00, 6000.00, 15, 4500, null, null,null,null,null,null},
{6, "电锅炉", "工业供热电锅炉", "直热式电锅炉(电极类)", 0.97, 1440.00, 900000.00, 60000.00, 180000.00, 12000.00, 15, 4500, null, null,null,null,null,null},
{7, "电锅炉", "工业供热电锅炉", "直热式电锅炉(电磁涡流类)", 0.98, 360.00, 150000.00, 60000.00, 180000.00, 3000.00, 15, 4500, null, null,null,null,null,null},
{8, "电锅炉", "工业供热电锅炉", "直热式电锅炉(电磁涡流类)", 0.98, 720.00, 180000.00, 60000.00, 180000.00, 6000.00, 15, 4500, null, null,null,null,null,null},
{9, "电锅炉", "工业供热电锅炉", "直热式电锅炉(电磁涡流类)", 0.98, 1440.00, 300000.00, 60000.00, 180000.00, 12000.00, 15, 4500, null, null,null,null,null,null},
{10, "电锅炉", "工业供热电锅炉", "蓄热式电锅炉(固体蓄热)", 0.95, 360.00, 360000.00, 60000.00, 180000.00, 3000.00, 15, 4500, null, null,null,null,null,null},
{11, "电锅炉", "工业供热电锅炉", "蓄热式电锅炉(固体蓄热)", 0.95, 720.00, 720000.00, 60000.00, 180000.00, 6000.00, 15, 4500, null, null,null,null,null,null},
{12, "电锅炉", "工业供热电锅炉", "蓄热式电锅炉(固体蓄热)", 0.95, 1440.00, 1440000.00, 60000.00, 180000.00, 12000.00, 15, 4500, null, null,null,null,null,null},
{13, "电锅炉", "工业供热电锅炉", "蓄热式电锅炉(相变蓄热)", 0.98, 360.00, 120000.00, 60000.00, 180000.00, 3000.00, 15, 4500, null, null,null,null,null,null},
{14, "电锅炉", "工业供热电锅炉", "蓄热式电锅炉(相变蓄热)", 0.98, 720.00, 160000.00, 60000.00, 180000.00, 6000.00, 15, 4500, null, null,null,null,null,null},
{15, "电锅炉", "工业供热电锅炉", "蓄热式电锅炉(相变蓄热)", 0.98, 1440.00, 280000.00, 60000.00, 180000.00, 12000.00, 15, 4500, null, null,null,null,null,null},
{16, "电锅炉", "工业供热电锅炉", "蓄热式电锅炉(水蓄)", 0.97, 360.00, 110000.00, 60000.00, 180000.00, 3000.00, 15, 4500, null, null,null,null,null,null},
{17, "电锅炉", "工业供热电锅炉", "蓄热式电锅炉(水蓄)", 0.97, 720.00, 150000.00, 60000.00, 180000.00, 6000.00, 15, 4500, null, null,null,null,null,null},
{18, "电锅炉", "工业供热电锅炉", "蓄热式电锅炉(水蓄)", 0.97, 1440.00, 260000.00, 60000.00, 180000.00, 12000.00, 15, 4500, null, null,null,null,null,null},
{19, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电阻类)", 0.95, 360.00, 80000.00, 60000.00, 180000.00, 3000.00, 15, null, null, null,null,null,null,null},
{20, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电阻类)", 0.95, 720.00, 100000.00, 60000.00, 180000.00, 6000.00, 15, null, null, null,null,null,null,null},
{21, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电阻类)", 0.95, 1440.00, 160000.00, 60000.00, 180000.00, 12000.00, 15, null, null, null,null,null,null,null},
{22, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电极类)", 0.97, 360.00, 280000.00, 60000.00, 180000.00, 3000.00, 15, null, null, null,null,null,null,null},
{23, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电极类)", 0.97, 720.00, 460000.00, 60000.00, 180000.00, 6000.00, 15, null, null, null,null,null,null,null},
{24, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电极类)", 0.97, 1440.00, 900000.00, 60000.00, 180000.00, 12000.00, 15, null, null, null,null,null,null,null},
{25, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电磁涡流类)", 0.98, 360.00, 150000.00, 60000.00, 180000.00, 3000.00, 15, null, null, null,null,null,null,null},
{26, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电磁涡流类)", 0.98, 720.00, 180000.00, 60000.00, 180000.00, 6000.00, 15, null, null, null,null,null,null,null},
{27, "电锅炉", "供冷/暖电锅炉", "直热式电锅炉(电磁涡流类)", 0.98, 1440.00, 300000.00, 60000.00, 180000.00, 12000.00, 15, null, null, null,null,null,null,null},
{28, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(固体蓄热)", 0.95, 360.00, 360000.00, 60000.00, 180000.00, 3000.00, 15, null, null, null,null,null,null,null},
{29, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(固体蓄热)", 0.95, 720.00, 720000.00, 60000.00, 180000.00, 6000.00, 15, null, null, null,null,null,null,null},
{30, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(固体蓄热)", 0.95, 1440.00, 1440000.00, 60000.00, 180000.00, 12000.00, 15, null, null, null,null,null,null,null},
{31, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(相变蓄热)", 0.98, 360.00, 120000.00, 60000.00, 180000.00, 3000.00, 15, null, null, null,null,null,null,null},
{32, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(相变蓄热)", 0.98, 720.00, 160000.00, 60000.00, 180000.00, 6000.00, 15, null, null, null,null,null,null,null},
{33, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(相变蓄热)", 0.98, 1440.00, 280000.00, 60000.00, 180000.00, 12000.00, 15, null, null, null,null,null,null,null},
{34, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(水蓄)", 0.97, 360.00, 110000.00, 60000.00, 180000.00, 3000.00, 15, null, null, null,null,null,null,null},
{35, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(水蓄)", 0.97, 720.00, 150000.00, 60000.00, 180000.00, 6000.00, 15, null, null, null,null,null,null,null},
{36, "电锅炉", "供冷/暖电锅炉", "蓄热式电锅炉(水蓄)", 0.97, 1440.00, 260000.00, 60000.00, 180000.00, 12000.00, 15, null, null, null,null,null,null,null},
{37, "热泵", "供冷/暖", "水源热泵", 4.00, 25.00, 45000.00, 60000.00, 180000.00, 500.00, 15, null, null, null,null,null,null,null},
{38, "热泵", "供冷/暖", "水源热泵", 4.00, 45.00, 75000.00, 60000.00, 180000.00, 1000.00, 15, null, null, null,null,null,null,null},
{39, "热泵", "供冷/暖", "水源热泵", 4.00, 90.00, 140000.00, 60000.00, 180000.00, 2000.00, 15, null, null, null,null,null,null,null},
{40, "热泵", "供冷/暖", "土壤源热泵", 4.00, 25.00, 45000.00, 60000.00, 180000.00, 500.00, 15, null, null, null,null,null,null,null},
{41, "热泵", "供冷/暖", "土壤源热泵", 4.00, 45.00, 75000.00, 60000.00, 180000.00, 1000.00, 15, null, null, null,null,null,null,null},
{42, "热泵", "供冷/暖", "土壤源热泵", 4.00, 90.00, 140000.00, 60000.00, 180000.00, 2000.00, 15, null, null, null,null,null,null,null},
{43, "热泵", "供冷/暖", "空气源热泵", 4.00, 25.00, 45000.00, 60000.00, 180000.00, 500.00, 15, null, null, null,null,null,null,null},
{44, "热泵", "供冷/暖", "空气源热泵", 4.00, 45.00, 75000.00, 60000.00, 180000.00, 1000.00, 15, null, null, null,null,null,null,null},
{45, "热泵", "供冷/暖", "空气源热泵", 4.00, 90.00, 140000.00, 60000.00, 180000.00, 2000.00, 15, null, null, null,null,null,null,null},
{46, "热泵", "供冷/暖", "低品位余热源(如电厂低温循环水)热泵", 4.00, 25.00, 45000.00, 60000.00, 180000.00, 500.00, 15, null, null, null,null,null,null,null},
{47, "热泵", "供冷/暖", "低品位余热源(如电厂低温循环水)热泵", 4.00, 45.00, 75000.00, 60000.00, 180000.00, 1000.00, 15, null, null, null,null,null,null,null},
{48, "热泵", "供冷/暖", "低品位余热源(如电厂低温循环水)热泵", 4.00, 90.00, 140000.00, 60000.00, 180000.00, 2000.00, 15, null, null, null,null,null,null,null},
{49, "热泵", "供冷/暖", "高温蒸汽热泵", 3.00, 45.00, 380000.00, 60000.00, 180000.00, 1000.00, 15, null, null, null,null,null,null,null},
{50, "热泵", "供冷/暖", "高温蒸汽热泵", 3.00, 120.00, 550000.00, 60000.00, 180000.00, 2000.00, 15, 1250, null, null,null,null,null,null},
{51, "电厨炊", "电厨炊", "电磁灶", null, 12, 3500.00, 60000.00, 180000.00, null, 15, 1250, 1, 50,null,null,null,null},
{52, "电厨炊", "电厨炊", "蒸锅", null, 9, 2200.00, 60000.00, 180000.00, null, 15, 1250, 1, 50,null,null,null,null},
{53, "电厨炊", "电厨炊", "汤炉", null, 6, 1500.00, 60000.00, 180000.00, null, 15, 1250, 1, 50,null,null,null,null},
{54, "电厨炊", "电厨炊", "煮炉", null, 8, 2100.00, 60000.00, 180000.00, null, 15, 1250, 1, 50,null,null,null,null},
{55, "电厨炊", "电厨炊", "饼铛", null, 4, 1600.00, 60000.00, 180000.00, null, 15, 1250, 1, 50,null,null,null,null},
{56, "电厨炊", "电厨炊", "电磁灶", null, 20, 4500.00, 60000.00, 180000.00, null, 15, 1250, 51, 100,null,null,null,null},
{57, "电厨炊", "电厨炊", "蒸锅", null, 12, 2500.00, 60000.00, 180000.00, null, 15, 1250, 51, 100,null,null,null,null},
{58, "电厨炊", "电厨炊", "汤炉", null, 9, 2500.00, 60000.00, 180000.00, null, 15, 1250, 51, 100,null,null,null,null},
{59, "电厨炊", "电厨炊", "煮炉", null, 12, 2900.00, 60000.00, 180000.00, null, 15, 1250, 51, 100,null,null,null,null},
{60, "电厨炊", "电厨炊", "饼铛", null, 5, 1700.00, 60000.00, 180000.00, null, 15, 1250, 51, 100,null,null,null,null},
{61, "电厨炊", "电厨炊", "电磁灶", null, 30, 5900.00, 60000.00, 180000.00, null, 15, 1250, 101, null,null,null,null,null},
{62, "电厨炊", "电厨炊", "蒸锅", null, 12, 3900.00, 60000.00, 180000.00, null, 15, 1250, 101, null,null,null,null,null},
{63, "电厨炊", "电厨炊", "汤炉", null, 12, 2900.00, 60000.00, 180000.00, null, 15, 1250, 101, null,null,null,null,null},
{64, "电厨炊", "电厨炊", "煮炉", null, 18, 3200.00, 60000.00, 180000.00, null, 15, 1250, 101, null,null,null,null,null},
{65, "电厨炊", "电厨炊", "饼铛", null, 5, 1700.00, 60000.00, 180000.00, null, 15, 1250, 101, null,null,null,null,null},
{66, "电窑炉", "建材电窑炉", "建材电窑炉", null, 25, 26000.00, 60000.00, 180000.00, null, 15, 4500, null, null,0.20,2500.00,500.00,4.00},
{67, "电窑炉", "建材电窑炉", "建材电窑炉", null, 145, 140000.00, 60000.00, 180000.00, null, 15, 4500, null, null,1.50,2500.00,3750.00,4.00},
{68, "电窑炉", "建材电窑炉", "建材电窑炉", null, 300, 250000.00, 60000.00, 180000.00, null, 15, 4500, null, null,3.00,2500.00,7500.00,4.00},
};
// 创建对象并添加到列表
@ -114,22 +140,39 @@ public class TestMain {
String devType = (String) row[1];
String devSubType = (String) row[2];
String devTechType = (String) row[3];
double heatEfficiency = (double) row[4];
double devPower = (double) row[5];
double devPrice = (double) row[6];
double devSubstituteLaborCost = (double) row[7];
double laborCost = (double) row[8];
double devReferenceArea = (double) row[9];
int devServiceLife = (int) row[10];
SysDeviceHeatScene device = new SysDeviceHeatScene(
id, devType, devSubType, devTechType, heatEfficiency, devPower, devPrice,
devSubstituteLaborCost, laborCost, devReferenceArea, devServiceLife, null, null);
id, devType, devSubType, devTechType, isHave2(row[4]), isHave2(row[5]), devPrice,
devSubstituteLaborCost, laborCost, isHave2(row[9]), isHave(row[10]), isHave(row[11]),
isHave(row[12]), isHave(row[13]),
isHave2(row[14]), isHave2(row[15]),
isHave2(row[16]), isHave2(row[17]),null);
deviceList.add(device);
}
return deviceList;
}
public static Integer isHave(Object args) {
if (null != args) {
return Integer.parseInt(args.toString());
} else {
return null;
}
}
public static Double isHave2(Object args) {
if (null != args) {
return Double.parseDouble(args.toString());
} else {
return null;
}
}
}

@ -1,2 +1,4 @@
0101=generate.BuildHeatingScene
0102=generate.HeatBoilerSence
0102=generate.HeatBoilerScene
0103=generate.KitchenCookScene
0104=generate.MaterialKilnScene

@ -14,6 +14,8 @@
<module>dntd-modelI</module>
<module>dntd-common</module>
<module>dntd-model-buildheating</module>
<module>dntd-model-kitchencooking</module>
<module>dntd-model-materialkiln</module>
</modules>
<properties>

Loading…
Cancel
Save