From 133dcf9eec84d1afcafb4799249591699c2856ab Mon Sep 17 00:00:00 2001 From: 25604 Date: Wed, 26 Nov 2025 15:00:18 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=B9=BF=E5=95=86=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E6=B5=B7=E5=B0=94=E7=BA=BF=E6=8E=A7=E7=89=88=E6=9C=AC=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mh/user/constants/Constant.java | 1 + .../impl/DeviceControlServiceImpl.java | 16 ++- .../impl/DeviceInstallServiceImpl.java | 21 ++++ .../mh/user/strategy/HeatPumpStrategy.java | 107 ++++++++++++++++++ .../com/mh/user/utils/GetReadOrder485.java | 34 ++++++ 5 files changed, 178 insertions(+), 1 deletion(-) diff --git a/user-service/src/main/java/com/mh/user/constants/Constant.java b/user-service/src/main/java/com/mh/user/constants/Constant.java index 0583968..7d5e58d 100644 --- a/user-service/src/main/java/com/mh/user/constants/Constant.java +++ b/user-service/src/main/java/com/mh/user/constants/Constant.java @@ -50,6 +50,7 @@ public class Constant { public static final String BRAND_RUI_XING = "瑞星"; public static final String BRAND_HAI_ER = "海尔"; + public static final String BRAND_HAI_ER_TWO = "海尔2"; public static final String BRAND_YUAN_XIANG = "远向"; diff --git a/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java index 73fb674..98f0f25 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java @@ -525,6 +525,9 @@ public class DeviceControlServiceImpl implements DeviceControlService { deviceCodeParam.setRegisterAddr("000A"); //寄存器地址 } else if ("海尔".equals(deviceCodeParam.getBrand())) { deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20003"), 4)); + } else if ("海尔2".equals(deviceCodeParam.getBrand())) { + deviceCodeParam.setFunCode("04"); //功能码读数据 + deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1302"), 4)); } else { deviceCodeParam.setRegisterAddr("0003"); //寄存器地址 } @@ -545,6 +548,9 @@ public class DeviceControlServiceImpl implements DeviceControlService { } else if ("海尔".equals(deviceCodeParam.getBrand())) { deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20003"), 4)); //寄存器地址 deviceCodeParam.setFunCode("06"); //功能码写数据 + } else if ("海尔2".equals(deviceCodeParam.getBrand())) { + deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1302"), 4)); //寄存器地址 + deviceCodeParam.setFunCode("06"); //功能码写数据 } else { deviceCodeParam.setRegisterAddr("0003"); //寄存器地址 deviceCodeParam.setFunCode("06"); //功能码写数据 @@ -610,6 +616,9 @@ public class DeviceControlServiceImpl implements DeviceControlService { deviceCodeParam.setRegisterAddr("0046"); //寄存器地址 } else if ("海尔".equals(deviceCodeParam.getBrand())) { deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20026"), 4)); + } else if ("海尔2".equals(deviceCodeParam.getBrand())) { + deviceCodeParam.setFunCode("04"); //功能码读数据 + deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1057"), 4)); } else { deviceCodeParam.setRegisterAddr("0064"); //寄存器地址 } @@ -627,6 +636,9 @@ public class DeviceControlServiceImpl implements DeviceControlService { deviceCodeParam.setRegisterAddr("0001"); } else if ("海尔".equals(deviceCodeParam.getBrand())) { deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20001"), 4)); + } else if ("海尔2".equals(deviceCodeParam.getBrand())) { + deviceCodeParam.setFunCode("04"); //功能码读数据 + deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1300"), 4)); } else { deviceCodeParam.setRegisterAddr("0BBD"); //寄存器地址 } @@ -645,7 +657,9 @@ public class DeviceControlServiceImpl implements DeviceControlService { if ("瑞星".equals(deviceCodeParam.getBrand())) { deviceCodeParam.setRegisterAddr("0001" + ExchangeStringUtil.addZeroForNum(deviceCodeParam.getDataValue(), 4)); } else if ("海尔".equals(deviceCodeParam.getBrand())) { - deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20001"), 4) + ExchangeStringUtil.addZeroForNum(deviceCodeParam.getDataValue(), 4)); + deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20001"), 4)); + } else if ("海尔2".equals(deviceCodeParam.getBrand())) { + deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1300"), 4)); } } return rtData; diff --git a/user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java index 508973b..24acfb0 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java @@ -192,6 +192,27 @@ public class DeviceInstallServiceImpl implements DeviceInstallService { deviceCodeParamEntity.setFunCode("03"); deviceCodeParamMapper.insertDeviceCodeParamList(Collections.singletonList(deviceCodeParamEntity)); break; + case "海尔2": + // 插入device_code_param表 + deviceCodeParamEntity.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(1057), 4)); //实际水温 + deviceCodeParamEntity.setFunCode("04"); + deviceCodeParamMapper.insertDeviceCodeParamList(Collections.singletonList(deviceCodeParamEntity)); + + // 插入device_code_param1表 + deviceCodeParamEntity.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(1300), 4)); //运行状态 + deviceCodeParamEntity.setFunCode("04"); + deviceCodeParamMapper.insertDeviceCodeParamList2(Collections.singletonList(deviceCodeParamEntity)); + + // 插入device_code_param2表 + deviceCodeParamEntity.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(1302), 4)); //设定温度 + deviceCodeParamEntity.setFunCode("04"); + deviceCodeParamMapper.insertDeviceCodeParamList(Collections.singletonList(deviceCodeParamEntity)); + + // 插入device_code_param2表 + deviceCodeParamEntity.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(1004), 4)); //故障状态 + deviceCodeParamEntity.setFunCode("04"); + deviceCodeParamMapper.insertDeviceCodeParamList(Collections.singletonList(deviceCodeParamEntity)); + break; default: break; } diff --git a/user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java b/user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java index ff20a8f..60db6e6 100644 --- a/user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java +++ b/user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java @@ -185,6 +185,29 @@ public class HeatPumpStrategy implements DeviceStrategy { String dataStr = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); str = str + funCode + registerAddr + dataStr; } + } else if (Constant.BRAND_HAI_ER_TWO.equals(brand)) { + if (StringUtils.isBlank(funCode) || funCode.equals("03") || funCode.equals("04")) { + if (StringUtils.isBlank(registerAddr) + || registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1300"),4))) { // 运行状态 + str = str + funCode +registerAddr+"0001"; + param = "运行状态"; + } else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1057"),4))) { // 水温 + str = str + funCode +registerAddr+"0001"; + param = "实际温度"; + } else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1004"),4))) { // 故障状态,100*N+11 + str = str + funCode + registerAddr+"0001"; + param = "故障状态"; + } else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1302"),4))) { // 读温度设定 + str = str + funCode + registerAddr+"0001"; + param = "设定温度"; + } + } else if ("06".equals(funCode)) { + if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20003"), 4))) { + dataValue = (new BigDecimal(dataValue)).multiply(new BigDecimal("10")).toString(); + } + String dataStr = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); + str = str + funCode + registerAddr + dataStr; + } } String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 str = str + checkWord; @@ -227,6 +250,8 @@ public class HeatPumpStrategy implements DeviceStrategy { rtData = getRuiXing(dateStr, registerAddr, buildingId, buildingName, checkStr, sValue, addr, dataType); } else if (Constant.BRAND_HAI_ER.equals(brand)) { rtData = getHaiEr(dateStr, registerAddr, buildingId, buildingName, checkStr, sValue, addr, dataType); + } else if (Constant.BRAND_HAI_ER_TWO.equals(brand)) { + rtData = getHaiErTwo(dateStr, registerAddr, buildingId, buildingName, checkStr, sValue, addr, dataType); } if (!StringUtils.isBlank(rtData)) { nowDataService.saveNowHistoryData(addr, "热泵", rtData, dataType.toString(), buildingId); @@ -319,6 +344,88 @@ public class HeatPumpStrategy implements DeviceStrategy { return sValue; } + private String getHaiErTwo(String dateStr, String registerAddr, String buildingId, String buildingName, String checkStr, String sValue, String addr, StringBuffer stringBuffer) { + String data; + stringBuffer.setLength(0); + String dataType = ""; + if (checkStr.substring(2, 4).equalsIgnoreCase("03") || checkStr.substring(2, 4).equalsIgnoreCase("04")) {//读 + if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1300"), 4))) { //运行状态 + dataType = "runState"; + data = checkStr.substring(8, 10); + if (data.equalsIgnoreCase("00")) { + sValue = "不运行"; //关机模式 + } else if (data.equalsIgnoreCase("01")) { + sValue = "运行"; // 开机模式 + } + //计算热泵运行时间,按分钟 + nowDataService.proPumpMinutes(buildingId, addr, sValue); + log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); + } else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1302"), 4)) + || registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1057"), 4)) ) { + //20003设定温度,20026水箱水温 + if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1302"), 4))) { + dataType = "tempSet"; + } else { + dataType = "waterTemp"; + } + //读数 + sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); + sValue = String.valueOf(Double.parseDouble(sValue)/10); + if (dataType.equals("waterTemp")) { + String avgTemp = nowDataService.selectAve(buildingId); + NowPublicDataEntity publicData = new NowPublicDataEntity(); + publicData.setBuildingId(buildingId); + publicData.setUseWaterTemp(avgTemp); + publicData.setBackWaterTemp(avgTemp); + String pumpId = nowDataService.selectMinPumpId(buildingId); + // 如果是华夏,则取新增得字段标识为热泵ID + String name = dealDataService.customName(); + if (name.contains(Constant.CUSTOM_NAME_HUAXIA)) { + pumpId = deviceInstallService.selectSinglePumpId(buildingId, addr); + } + log.info("---------------addr:" + addr + ",pumpId:" + pumpId + " ---------------"); + if (addr.equals(pumpId)) { //取ID最小的热泵为单箱温度 + publicData.setSingleTemp(sValue); + log.info("---------------单箱温度:" + sValue + "---------------"); + } + nowPublicDataService.saveNowHistoryPublicData(publicData); + log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr); + } else if (dataType.equals("tempSet")) { + pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 + } + } else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1004"), 4))) { //故障状态 + dataType = "isFault"; + String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); + sData = ExchangeStringUtil.addZeroForNum(sData, 8); + if (sData.substring(7, 8).equalsIgnoreCase("0")) { + sValue = "无故障"; + deviceInstallService.updateDeviceFault("0", addr, "热泵"); + } else if (sData.substring(7, 8).equalsIgnoreCase("1")) { + sValue = "有故障"; + deviceInstallService.updateDeviceFault("1", addr, "热泵"); + } + } + } else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { + if (registerAddr.equalsIgnoreCase("1300")) { //运行状态 + dataType = "runState"; + data = checkStr.substring(10, 12); + if (data.equalsIgnoreCase("00")) { + sValue = "不运行"; //开机模式 + } else if (data.equalsIgnoreCase("01")) { + sValue = "运行"; // 开机模式 + } + //计算热泵运行时间,按分钟 + nowDataService.proPumpMinutes(buildingId, addr, sValue); + log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); + } + } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); + sValue = Constant.SUCCESS; + } + stringBuffer.append(dataType); + return sValue; + } + private String getRuiXing(String dateStr, String registerAddr, String buildingId, String buildingName, String checkStr, String sValue, String addr, StringBuffer stringBuffer) { String data; String dataType = ""; diff --git a/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java b/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java index 4a3095a..d95d3e9 100644 --- a/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java +++ b/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java @@ -702,6 +702,23 @@ public class GetReadOrder485 { // 只获取字符串数字 deviceCodeParamEntity3.setThread(ExchangeStringUtil.getNumFromString(devices.getDataCom())); break; + case "海尔2": + // 线控模式 + registerAddr = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1057"), 4); + deviceCodeParamEntity3.setRegisterAddr(registerAddr);//实际水温 + deviceCodeParamEntity3.setFunCode("04"); + deviceCodeParamEntity3.setDeviceAddr(devices.getDeviceAddr()); + deviceCodeParamEntity3.setDeviceName(devices.getDeviceName()); + deviceCodeParamEntity3.setDeviceType(devices.getDeviceType()); + deviceCodeParamEntity3.setBaudrate(devices.getBaudRate()); + deviceCodeParamEntity3.setBrand(devices.getBrand()); + deviceCodeParamEntity3.setDataCom(devices.getDataCom()); + deviceCodeParamEntity3.setBuildingId(devices.getBuildingId()); + deviceCodeParamEntity3.setParity(devices.getParity()); + deviceCodeParamEntityList.add(deviceCodeParamEntity3); + // 只获取字符串数字 + deviceCodeParamEntity3.setThread(ExchangeStringUtil.getNumFromString(devices.getDataCom())); + break; default: break; } @@ -784,6 +801,23 @@ public class GetReadOrder485 { deviceCodeParamEntity1.setParity(devices.getParity()); deviceCodeParamEntityList.add(deviceCodeParamEntity1);//添加到列表 break; + case "海尔2": + // 线控模式 + registerAddr = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1057"), 4); + deviceCodeParamEntity1.setRegisterAddr(registerAddr);//运行状态 + deviceCodeParamEntity1.setFunCode("04"); + deviceCodeParamEntity1.setDeviceAddr(devices.getDeviceAddr()); + deviceCodeParamEntity1.setDeviceName(devices.getDeviceName()); + deviceCodeParamEntity1.setDeviceType(devices.getDeviceType()); + deviceCodeParamEntity1.setBaudrate(devices.getBaudRate()); + deviceCodeParamEntity1.setBrand(devices.getBrand()); + deviceCodeParamEntity1.setDataCom(devices.getDataCom()); + // 只获取字符串数字 + deviceCodeParamEntity1.setThread(ExchangeStringUtil.getNumFromString(devices.getDataCom())); + deviceCodeParamEntity1.setBuildingId(devices.getBuildingId()); + deviceCodeParamEntity1.setParity(devices.getParity()); + deviceCodeParamEntityList.add(deviceCodeParamEntity1);//添加到列表 + break; default: break;