2024-03-20 17:00:00 建材电窑炉模型接口开发

master
魔神煜修罗皇 1 year ago
parent 622266a467
commit 3595d104dc
  1. 7
      dntd-common/src/main/java/com/dky/utils/enums/DeviceSubType.java
  2. 8
      dntd-model-kitchencooking/src/main/java/com/dky/calculate/KitchenCookScheme.java
  3. 35
      dntd-model-metalkiln/pom.xml
  4. 71
      dntd-model-metalkiln/src/main/java/calculate/MetalKilnScheme.java
  5. 1
      dntd-model-metalkiln/src/main/resources/modelCode.properties
  6. 1
      dntd-tool/src/main/java/com/dky/generate/MaterialKilnScene.java
  7. 1
      pom.xml

@ -7,7 +7,12 @@ public enum DeviceSubType {
Kitchen_Cooking(0102, "电厨炊"),
Cooling_Heating(0201, "供冷/暖"),
Cooling_Heating_Electric_Boiler(0202, "供冷/暖电锅炉"),
Material_Kiln(0203, "建材电窑炉");
Material_Kiln(0203, "建材电窑炉"),
Metal_Kiln(0204, "冶金窑炉"),
Metal_Kiln_Direct_Heat(0205, "直接加热电阻炉"),
Metal_Kiln_Interstitial_Heat(0206, "间接加热电阻炉(钟罩式光亮退火炉)"),
Metal_Kiln_Electric_Arc(0207, "电弧炉(钢包精炼LF炉)"),
Metal_Kiln_Induction(2180, "中/高频感应电炉");
/**

@ -10,7 +10,7 @@ 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());
@ -25,6 +25,8 @@ public class KitchenCookScheme {
}
public static Integer getCookDeviceType(Integer peopleNum, List<SysDeviceHeatScene> sysDeviceHeatSceneList) {
// 使用流对sysDeviceHeatSceneList进行处理,首先收集到一个TreeSet中,TreeSet会根据SysDeviceHeatScene的recomMinPeopleNum属性进行排序,
// 然后将TreeSet转换为ArrayList。这样做的目的是为了确保后续处理时集合中的元素是按照recomMinPeopleNum升序排列的。
ArrayList<SysDeviceHeatScene> collect = sysDeviceHeatSceneList.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SysDeviceHeatScene::getRecomMinPeopleNum))),
@ -32,8 +34,12 @@ public class KitchenCookScheme {
)
);
// 对collect列表中的所有元素的recomMinPeopleNum属性进行统计分析,获取最小值、最大值等统计信息。
IntSummaryStatistics intSummaryStatistics = collect.stream().mapToInt(SysDeviceHeatScene::getRecomMinPeopleNum).summaryStatistics();
// 遍历处理后的列表,找出满足条件的SysDeviceHeatScene的recomMinPeopleNum属性值。
// 首先检查当前元素的recomMinPeopleNum是否大于等于列表中的最大值,如果是,则直接返回该值。
// 如果不是,则判断当前人数是否在该场景建议的最小和最大人数范围内,如果是,则返回该场景建议的最小人数。
for (SysDeviceHeatScene s : collect){
if (s.getRecomMinPeopleNum() >= intSummaryStatistics.getMax()){
return s.getRecomMinPeopleNum();

@ -0,0 +1,35 @@
<?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-metalkiln</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>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,71 @@
package calculate;
import com.dky.utils.ConfigReader;
import com.dky.utils.entity.SysDeviceHeatScene;
import com.dky.utils.result.MatchedDevice;
import java.util.*;
import java.util.stream.Collectors;
public class MetalKilnScheme {
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 (int i = 0; i < sysDeviceHeatSceneList.size(); i++) {
SysDeviceHeatScene deviceHeatScene = sysDeviceHeatSceneList.get(i);
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;
} else {
if (i == sysDeviceHeatSceneList.size() - 1 && remainArea > 0) {
MatchedDevice device = matchedDeviceList.get(matchedDeviceList.size() - 1);
device.setCount(device.getCount() + 1);
}
}
}
return matchedDeviceList;
}
public static void getSchemeList(List<SysDeviceHeatScene> sysDeviceHeatSceneList) {
// 黑色金属矿采选业 行业编码
String property = ConfigReader.getProperty("industry_code");
Map<String, Object> map = new HashMap<>();
ArrayList<SysDeviceHeatScene> ary = sysDeviceHeatSceneList.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SysDeviceHeatScene::getDevTechType))),
ArrayList::new
)
);
ary.forEach((item) -> {
List<SysDeviceHeatScene> list = new ArrayList<>();
sysDeviceHeatSceneList.forEach((device) -> {
if (device.getDevTechType().equals(item.getDevTechType())) {
list.add(device);
}
});
map.put(item.getDevTechType(), list);
});
}
}

@ -24,7 +24,6 @@ public class MaterialKilnScene implements DntdModelI {
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();

@ -16,6 +16,7 @@
<module>dntd-model-buildheating</module>
<module>dntd-model-kitchencooking</module>
<module>dntd-model-materialkiln</module>
<module>dntd-model-metalkiln</module>
</modules>
<properties>

Loading…
Cancel
Save