From 99a1ad074c7720b157fbb8d7e9417c3ef09dd22c Mon Sep 17 00:00:00 2001 From: XMnhwj_BackTechnologyDevelopment <3512363680@qq.com> Date: Fri, 15 Mar 2024 17:13:09 +0800 Subject: [PATCH] =?UTF-8?q?2024-03-15=2017:12:56=20=E5=BB=BA=E7=AD=91?= =?UTF-8?q?=E4=BE=9B=E6=9A=96=E6=A8=A1=E5=9E=8B=E6=8E=A5=E5=8F=A3=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dky/calculate/SchemeRating.java | 10 +- dntd-tool/pom.xml | 2 +- .../com/dky/generate/BuildHeatingScene.java | 2 + .../java/com/dky/security/GetCpuInfo.java | 43 +++--- .../main/java/com/dky/security/SM4Utils.java | 60 ++++++-- .../src/main/java/com/dky/test/TestMain.java | 135 ++++++++++++++++++ .../src/main/java/com/dky/tool/ModelTool.java | 37 +++-- file.txt | 3 + 8 files changed, 237 insertions(+), 55 deletions(-) create mode 100644 dntd-tool/src/main/java/com/dky/test/TestMain.java create mode 100644 file.txt diff --git a/dntd-model-buildheating/src/main/java/com/dky/calculate/SchemeRating.java b/dntd-model-buildheating/src/main/java/com/dky/calculate/SchemeRating.java index 978676f..484ae14 100644 --- a/dntd-model-buildheating/src/main/java/com/dky/calculate/SchemeRating.java +++ b/dntd-model-buildheating/src/main/java/com/dky/calculate/SchemeRating.java @@ -30,23 +30,15 @@ public class SchemeRating { cost = cost + ((device.getCount() * device.getDeviceHeatScene().getDevPrice()) + (device.getCount()) * device.getDeviceHeatScene().getDevSubstituteLaborCost() * device.getDeviceHeatScene().getDevServiceLife()); } - double v1 = (maxEff.get(devSubType) - eff) / maxEff.get(devSubType); // 热效率占比计算 double v = (cost - minPrice.get(devSubType)) / minPrice.get(devSubType); // 成本占比计算 - System.out.println("当前方案成本: " + cost + ",当前方案热效率: " + eff + ",技术选型: " + devSubType + ",最小成本Map: " + minPrice + ",最大热效率Map: " + maxEff); - // System.out.println("成本除法运算 = " + v + ",减法运算 = " + (1 - v) + ",乘法运算 = " + (1 -v) * 20 + "。"); - // System.out.println("热效率除法运算 = " + v1 + ",减法运算 = " + (1 - v1) + ",乘法运算 = " + (1 -v1) * 80 + "。\n"); + // 3、(1-(选择对应设备细类的效率最大的效率值(效率最大值)-当前设备的效率值值)/效率最大值)*100*系数 +(1-(当前成本值-对应设备细类的成本最小值)/对应设备细类的成本最小值)*100*0.2。取最高得分。 rating.set(((1 - v1) * 100 * effRatio) + ((1 - v) * 100 * costRatio)); // 方案评分结果 SchemeRatingRes schemeRatingRes = new SchemeRatingRes(plan, rating.get(), devTechType); optimalMap.put(devTechType, schemeRatingRes); - System.out.println("方案详情 = "); - for (MatchedDevice matchedDevice : plan){ - System.out.println(matchedDevice); - } - System.out.println("当前方案评分: " + rating.get() + "\n"); }); return optimalMap; } diff --git a/dntd-tool/pom.xml b/dntd-tool/pom.xml index 3212419..fe2bd98 100644 --- a/dntd-tool/pom.xml +++ b/dntd-tool/pom.xml @@ -10,7 +10,7 @@ dntd-tool - 1.1-SNAPSHOT + 1.2-SNAPSHOT 8 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 d14e012..c093d5d 100644 --- a/dntd-tool/src/main/java/com/dky/generate/BuildHeatingScene.java +++ b/dntd-tool/src/main/java/com/dky/generate/BuildHeatingScene.java @@ -91,6 +91,7 @@ public class BuildHeatingScene implements DntdModelI { */ 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()); @@ -101,6 +102,7 @@ public class BuildHeatingScene implements DntdModelI { }catch (Exception e){ e.printStackTrace(); } + */ List matchedDeviceList ; Map listMap ; diff --git a/dntd-tool/src/main/java/com/dky/security/GetCpuInfo.java b/dntd-tool/src/main/java/com/dky/security/GetCpuInfo.java index 92f0f23..bd0730d 100644 --- a/dntd-tool/src/main/java/com/dky/security/GetCpuInfo.java +++ b/dntd-tool/src/main/java/com/dky/security/GetCpuInfo.java @@ -16,7 +16,7 @@ public class GetCpuInfo { // 获取当前操作系统名称 String os = System.getProperty("os.name"); os = os.toUpperCase(); - System.out.println("当前操作系统:"+os); + System.out.println("当前操作系统:" + os); // linux系统用Runtime.getRuntime().exec()执行 dmidecode -t processor 查询cpu序列 // windows系统用 wmic cpu get ProcessorId 查看cpu序列 if ("LINUX".equals(os)) { @@ -24,12 +24,18 @@ public class GetCpuInfo { } else { cpuId = getWindowsCpuId(); } + // String macK = cpuId.toUpperCase().replace(" ", ""); + // macK.replace(":", ""); + System.out.println("本机mac地址:" + cpuId.toUpperCase().replace(" ", "").replace(":", "")); + return getString(cpuId); + } + + /** + * 解析本地:将获取得到的CPU—Id 格式化 + */ + public static String getString(String cpuId) { String macK = cpuId.toUpperCase().replace(" ", ""); - macK.replace(":",""); - System.out.println( - "本机mac地址:"+macK.replace(":","") - ); - return macK.replace(":",""); + return macK.replace(":", ""); } /** @@ -37,38 +43,35 @@ public class GetCpuInfo { */ public static String getLinuxCpuId() { String mac = ""; - try - { + try { Process p = new ProcessBuilder("ifconfig").start(); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; - while ((line = br.readLine()) != null) - { + while ((line = br.readLine()) != null) { Pattern pat = Pattern.compile("\\b\\w+:\\w+:\\w+:\\w+:\\w+:\\w+\\b"); - Matcher mat= pat.matcher(line); - if(mat.find()) - { - mac=mat.group(0); + Matcher mat = pat.matcher(line); + if (mat.find()) { + mac = mat.group(0); } } br.close(); - }catch (IOException e) { + } catch (IOException e) { e.printStackTrace(); } - System.out.println("本机mac地址:"+mac); + System.out.println("本机mac地址:" + mac); return mac; } - public static String executeLinuxCmd(String cmd){ + public static String executeLinuxCmd(String cmd) { try { Runtime run = Runtime.getRuntime(); Process process = null; process = run.exec(cmd); System.out.println(process.toString()); - if (process == null){ + if (process == null) { System.out.println("未获取到执行结果"); - }else { + } else { System.out.println("读取执行结果"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; @@ -81,7 +84,7 @@ public class GetCpuInfo { return line; } - }catch (Exception e) { + } catch (Exception e) { e.printStackTrace(); } return null; diff --git a/dntd-tool/src/main/java/com/dky/security/SM4Utils.java b/dntd-tool/src/main/java/com/dky/security/SM4Utils.java index 6bd5b63..72f9d69 100644 --- a/dntd-tool/src/main/java/com/dky/security/SM4Utils.java +++ b/dntd-tool/src/main/java/com/dky/security/SM4Utils.java @@ -4,12 +4,12 @@ import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; import java.nio.charset.StandardCharsets; import java.security.Security; -import java.util.ArrayList; -import java.util.Base64; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class SM4Utils { static { @@ -28,13 +28,27 @@ public class SM4Utils { return Base64.getEncoder().encodeToString(encrypted); } - public static Map decrypt(String encrypted) throws Exception { - Cipher cipher = Cipher.getInstance(ALGORITHM, "BC"); - SecretKeySpec secretKey = new SecretKeySpec(SM4_KEY.getBytes(StandardCharsets.UTF_8), "AES"); - cipher.init(Cipher.DECRYPT_MODE, secretKey); - byte[] decoded = Base64.getDecoder().decode(encrypted); - byte[] decrypted = cipher.doFinal(decoded); - return stringToMap(new String(decrypted, StandardCharsets.UTF_8)); + public static List> decrypt(String encrypted) throws Exception { + List> ary = new ArrayList<>(); + + File file = new File("file.txt"); + FileReader fileReader = new FileReader(file); + BufferedReader reader = new BufferedReader(fileReader); + String line; + while ((line = reader.readLine()) != null) { + Cipher cipher = Cipher.getInstance(ALGORITHM, "BC"); + SecretKeySpec secretKey = new SecretKeySpec(line.getBytes(StandardCharsets.UTF_8), "AES"); + cipher.init(Cipher.DECRYPT_MODE, secretKey); + byte[] decoded = Base64.getDecoder().decode(encrypted); + try { + byte[] decrypted = cipher.doFinal(decoded); + ary.add(stringToMap(new String(decrypted, StandardCharsets.UTF_8))); + } catch (Exception e) { + // e.printStackTrace(); + } + } + + return ary; } private static String mapToString(Map map) { @@ -58,7 +72,27 @@ public class SM4Utils { } public static void main(String[] args) throws Exception { - Map decrypt = decrypt("GLFIphzZ2SnR6kVx0gz2JBenxKHv3OrkbBPgTEeUcH8dP1vewChAxuWBZI+YsQS3H+Sb5/YEiJ0ub3p0QjXaSgbwTTqD4puEE/UZ7Yd4H8MPXFrtL0VVXoAArSbOj7JH"); - System.out.println(decrypt.toString()); + String s = + "GWnQ4RqqTc8n1Uj59xLoUtv975fmQsRWuvsk1zRmQu9TwIvlc6FTekndKMh+vMuRbI2bxdmuIxyZndYcg9u5xVa+HaiBZRP8OZFYIAo+66vDVlkBf47Nh2srjFyIXlLH"; + List> decryptList = decrypt(s); + decryptList.forEach(System.out::println); + + /* + File file = new File("file.txt"); + try { + FileReader fileReader = new FileReader(file); + BufferedReader reader = new BufferedReader(fileReader); + String line; + while ((line = reader.readLine()) != null) { + // 处理每一行的数据 + System.out.println(line); + } + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + }*/ + + + } } \ No newline at end of file diff --git a/dntd-tool/src/main/java/com/dky/test/TestMain.java b/dntd-tool/src/main/java/com/dky/test/TestMain.java new file mode 100644 index 0000000..7ebd77b --- /dev/null +++ b/dntd-tool/src/main/java/com/dky/test/TestMain.java @@ -0,0 +1,135 @@ +package com.dky.test; + +/** + * @Author:戴仕崑 + * @Project:dntd-model-tools + * @Filename:Test + * @Slogan 致敬大师,致敬未来的你 + * @Date:2024/3/7 16:14 + * @Version 1.0 + */ + + +import com.dky.calculate.Scheme; +import com.dky.calculate.SchemeRating; +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 alternateDeviceList = createDevList(); + + // List> alternateDeviceList = calSchemeMethodTest(14000.0, devList); + + // getMaxEfficiencyGroupByDevSubTypeTest(alternateDeviceList); + // getMinPriceGroupByDevSubTypeTest(alternateDeviceList); + + /* + 根据建筑面积计算出不同技术类型下所需要不同功率设备数据 + */ + List> matchedDeviceGroupList = Scheme.calScheme(44000.0, alternateDeviceList); + + + /* + 判断计算占比,默认效率0.8,成本0.2 + */ + double costRatio = 0.2; + double effRatio = 0.8; + + + List matchedDeviceList ; + Map> listMap ; + /* + 根据具体容量与需量判断可使用的技术并计算评分 + */ + //计算不同细类下成本最小值与效率最大值 + Map maxEffMap = SchemeRating.getMaxEfficiencyGroupByDevSubType(alternateDeviceList); + //Map minPriceMap = SchemeRating.getMinPriceGroupByDevSubType(alternateDeviceList); + //listMap = SchemeRating.getOptimalList(matchedDeviceGroupList,costRatio,effRatio,maxEffMap,minPriceMap); + //matchedDeviceList = SchemeRating.getOptimalScheme(listMap); + + } + + + public static List> calSchemeMethodTest(Double buildArea, List SysDeviceHeatSceneList) { + return Scheme.calScheme(buildArea, SysDeviceHeatSceneList); + + } + + public static void getMaxEfficiencyGroupByDevSubTypeTest(List sysDeviceHeatSceneList){ + SchemeRating.getMaxEfficiencyGroupByDevSubType(sysDeviceHeatSceneList); + } + + + + public static ListcreateDevList(){ + List 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}, + }; + + // 创建对象并添加到列表 + for (Object[] row : data) { + int id = (int) row[0]; + 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); + + deviceList.add(device); + } + return deviceList; + } + +} + diff --git a/dntd-tool/src/main/java/com/dky/tool/ModelTool.java b/dntd-tool/src/main/java/com/dky/tool/ModelTool.java index a3c65f1..960052d 100644 --- a/dntd-tool/src/main/java/com/dky/tool/ModelTool.java +++ b/dntd-tool/src/main/java/com/dky/tool/ModelTool.java @@ -43,22 +43,37 @@ public class ModelTool { public JSONObject exeModel2Report(JSONObject jsonObject, String key) { JSONObject jsonObjectResult = new JSONObject(); + // 判断CpuId是否包含本机地址 + Boolean thisCpuIdIn = false; + // 判断是否过期 + Boolean expired = false; + try { + //获取本地的cpuid. + String localCpuId = GetCpuInfo.getCpuId(); // 根据给定的类名初始化类 加密不需要反实例化new Class sm4UtilsClass = Class.forName("com.dky.security.SM4Utils"); // 实例化这个类 Object obj = sm4UtilsClass.newInstance(); // 调用指定方法 - Map map = (Map) sm4UtilsClass.getMethod("decrypt", String.class).invoke(obj, key); - String cpuIds = (String) map.get("cpuIds"); - String expireTime = (String) map.get("expireTime"); - // 定义日期时间格式 - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = formatter.parse(expireTime); - //拿到解析后的cpuid。获取本地的cpuid. - String localCpuId = GetCpuInfo.getCpuId(); - if (cpuIds.contains(localCpuId)){ + List maps = (List) sm4UtilsClass.getMethod("decrypt", String.class).invoke(obj, key); + for (Map map : maps){ + String cpuIds = (String) map.get("cpuIds"); + String expireTime = (String) map.get("expireTime"); + // 定义日期时间格式 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = formatter.parse(expireTime); + if (cpuIds.contains(localCpuId)){ + thisCpuIdIn = true; + } if (new Date().before(date)){ + expired = true; + } + } + + + if (thisCpuIdIn){ + if (expired){ // 判断模型使用权限 // 根据给定的类名初始化类 加密不需要反实例化new Class buildHeatingScene = Class.forName("com.dky"+"."+ ConfigReader.getProperty(jsonObject.getStr("type"))); @@ -72,7 +87,7 @@ public class ModelTool { }else { jsonObjectResult = ResponseUtil.createResponse(Code.KEY_UNAUTHORIZED.getCode(), Code.KEY_UNAUTHORIZED.getDesc(), null); } - } catch (ClassNotFoundException e) { + } catch (ClassNotFoundException | NoSuchMethodException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); @@ -81,8 +96,6 @@ public class ModelTool { } catch (InvocationTargetException e) { jsonObjectResult = ResponseUtil.createResponse(Code.KEY_CONTEXT_ERROR.getCode(), Code.KEY_CONTEXT_ERROR.getDesc(), null); e.printStackTrace(); - } catch (NoSuchMethodException e) { - e.printStackTrace(); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/file.txt b/file.txt new file mode 100644 index 0000000..0e39b16 --- /dev/null +++ b/file.txt @@ -0,0 +1,3 @@ +mxhXSDiPYFjYgzRb +sm4demo123456789 +myhXSDiPUFjYgzRa \ No newline at end of file