From 3595d104dce90bed8d6165d257f492ad5f47f621 Mon Sep 17 00:00:00 2001 From: XMnhwj_BackTechnologyDevelopment <3512363680@qq.com> Date: Thu, 21 Mar 2024 09:54:19 +0800 Subject: [PATCH] =?UTF-8?q?2024-03-20=2017:00:00=20=E5=BB=BA=E6=9D=90?= =?UTF-8?q?=E7=94=B5=E7=AA=91=E7=82=89=E6=A8=A1=E5=9E=8B=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dky/utils/enums/DeviceSubType.java | 7 +- .../com/dky/calculate/KitchenCookScheme.java | 8 ++- dntd-model-metalkiln/pom.xml | 35 +++++++++ .../main/java/calculate/MetalKilnScheme.java | 71 +++++++++++++++++++ .../src/main/resources/modelCode.properties | 1 + .../com/dky/generate/MaterialKilnScene.java | 1 - pom.xml | 1 + 7 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 dntd-model-metalkiln/pom.xml create mode 100644 dntd-model-metalkiln/src/main/java/calculate/MetalKilnScheme.java create mode 100644 dntd-model-metalkiln/src/main/resources/modelCode.properties diff --git a/dntd-common/src/main/java/com/dky/utils/enums/DeviceSubType.java b/dntd-common/src/main/java/com/dky/utils/enums/DeviceSubType.java index 3b97724..20a4b5b 100644 --- a/dntd-common/src/main/java/com/dky/utils/enums/DeviceSubType.java +++ b/dntd-common/src/main/java/com/dky/utils/enums/DeviceSubType.java @@ -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, "中/高频感应电炉"); /** diff --git a/dntd-model-kitchencooking/src/main/java/com/dky/calculate/KitchenCookScheme.java b/dntd-model-kitchencooking/src/main/java/com/dky/calculate/KitchenCookScheme.java index 8a68973..a40d41e 100644 --- a/dntd-model-kitchencooking/src/main/java/com/dky/calculate/KitchenCookScheme.java +++ b/dntd-model-kitchencooking/src/main/java/com/dky/calculate/KitchenCookScheme.java @@ -10,7 +10,7 @@ import java.util.stream.Collectors; public class KitchenCookScheme { public static List getCookDevices(Integer peopleNum, List sysDeviceHeatSceneList) { - // 获取烹饪设备类型最少推荐使用人数 + // 根据用餐人数获取烹饪设备类型最少推荐使用人数 Integer cookDeviceType = getCookDeviceType(peopleNum, sysDeviceHeatSceneList); List 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 sysDeviceHeatSceneList) { + // 使用流对sysDeviceHeatSceneList进行处理,首先收集到一个TreeSet中,TreeSet会根据SysDeviceHeatScene的recomMinPeopleNum属性进行排序, + // 然后将TreeSet转换为ArrayList。这样做的目的是为了确保后续处理时集合中的元素是按照recomMinPeopleNum升序排列的。 ArrayList 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(); diff --git a/dntd-model-metalkiln/pom.xml b/dntd-model-metalkiln/pom.xml new file mode 100644 index 0000000..b281ec7 --- /dev/null +++ b/dntd-model-metalkiln/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.dky + dntd-model-tools + 1.1-SNAPSHOT + + + dntd-model-metalkiln + 1.0-SNAPSHOT + + + 8 + 8 + UTF-8 + + + + + com.dky + dntd-modelI + 1.0-SNAPSHOT + + + com.dky + dntd-common + 1.0-SNAPSHOT + compile + + + + \ No newline at end of file diff --git a/dntd-model-metalkiln/src/main/java/calculate/MetalKilnScheme.java b/dntd-model-metalkiln/src/main/java/calculate/MetalKilnScheme.java new file mode 100644 index 0000000..ac8ef69 --- /dev/null +++ b/dntd-model-metalkiln/src/main/java/calculate/MetalKilnScheme.java @@ -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 calSchemeByTechType(Double workArea, List sysDeviceHeatSceneList) { + // 对技术类型下的设备list按照单台设备工作容积进行排序 + sysDeviceHeatSceneList.sort((o1, o2) -> Double.compare(o2.getDevWorkArea(), o1.getDevWorkArea())); + Double remainArea = workArea; + // 遍历设备,根据工作容积进行匹配设备数量 + List 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 sysDeviceHeatSceneList) { + // 黑色金属矿采选业 行业编码 + String property = ConfigReader.getProperty("industry_code"); + Map map = new HashMap<>(); + + ArrayList ary = sysDeviceHeatSceneList.stream().collect( + Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SysDeviceHeatScene::getDevTechType))), + ArrayList::new + ) + ); + + ary.forEach((item) -> { + List list = new ArrayList<>(); + sysDeviceHeatSceneList.forEach((device) -> { + if (device.getDevTechType().equals(item.getDevTechType())) { + list.add(device); + } + }); + map.put(item.getDevTechType(), list); + }); + + } + + + + +} diff --git a/dntd-model-metalkiln/src/main/resources/modelCode.properties b/dntd-model-metalkiln/src/main/resources/modelCode.properties new file mode 100644 index 0000000..e9fc024 --- /dev/null +++ b/dntd-model-metalkiln/src/main/resources/modelCode.properties @@ -0,0 +1 @@ +industry_code=21 \ No newline at end of file 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 a4c0d4a..c4560b7 100644 --- a/dntd-tool/src/main/java/com/dky/generate/MaterialKilnScene.java +++ b/dntd-tool/src/main/java/com/dky/generate/MaterialKilnScene.java @@ -24,7 +24,6 @@ public class MaterialKilnScene implements DntdModelI { public JSONObject createReport(JSONObject jsonObject, List list) { List alternateDeviceList = GetTargetDeviceList.main(DeviceSubType.Material_Kiln.getDesc(), list); - // System.out.println("工业锅炉供热: " + alternateDeviceList + "\n"); JSONObject distInfo = new JSONObject(); JSONObject heatUseNeedInfo = new JSONObject(); diff --git a/pom.xml b/pom.xml index d30c278..c5af4de 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ dntd-model-buildheating dntd-model-kitchencooking dntd-model-materialkiln + dntd-model-metalkiln