From 5d6b9c58b26054659f65cfcf1a3d19ef73aa9a56 Mon Sep 17 00:00:00 2001 From: mh Date: Fri, 17 Nov 2023 14:22:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=87=87=E9=9B=86=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mh/user/constants/Constant.java | 5 +- .../user/controller/SerialPortController.java | 104 +- .../java/com/mh/user/job/DealDataJob.java | 14 +- .../com/mh/user/model/SerialPortModel.java | 20 + .../serialport/SerialPortSendReceive.java | 2 +- .../serialport/SerialPortSendReceive2.java | 6 - .../mh/user/serialport/SerialPortSingle2.java | 7 +- .../user/service/impl/NowDataServiceImpl.java | 1 - .../user/utils/AnalysisReceiveOrder485.java | 3121 ++++++++--------- .../src/main/resources/application.yml | 2 +- 热水新增脚本.sql | 5 + 11 files changed, 1645 insertions(+), 1642 deletions(-) create mode 100644 热水新增脚本.sql 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 7fa833a..2a71699 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 @@ -11,7 +11,8 @@ public class Constant { public static boolean CONTROL_WEB_FLAG = false; public static boolean SEND_STATUS = false; // 指令发送状态 - public static boolean FLAG = false; - public static boolean WEB_FLAG = false; // 判断是否有前端指令下发 + public static volatile boolean FLAG = false; + + public static volatile boolean WEB_FLAG = false; // 判断是否有前端指令下发 } diff --git a/user-service/src/main/java/com/mh/user/controller/SerialPortController.java b/user-service/src/main/java/com/mh/user/controller/SerialPortController.java index 7a23a8d..99bd4e5 100644 --- a/user-service/src/main/java/com/mh/user/controller/SerialPortController.java +++ b/user-service/src/main/java/com/mh/user/controller/SerialPortController.java @@ -2,6 +2,7 @@ package com.mh.user.controller; import com.alibaba.fastjson2.JSONObject; import com.mh.common.http.HttpResult; +import com.mh.common.utils.StringUtils; import com.mh.user.annotation.SysLogger; import com.mh.user.constants.Constant; import com.mh.user.entity.ControlSetEntity; @@ -167,14 +168,14 @@ public class SerialPortController { if (!serialPortModel.getDataValue().equals("100%")) { deviceCodeParam.setDataValue("100%"); serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 - Thread.sleep(1500); + Thread.sleep(1000); } } else if (brand.equals("远向")) { deviceCodeParam.setFunCode("06"); //功能码写数据 if (!serialPortModel.getDataValue().equals("100%")) { deviceCodeParam.setDataValue("100%"); serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 - Thread.sleep(1500); + Thread.sleep(1000); } } else if (brand.equals("顶威")) { deviceCodeParam.setFunCode("0407"); //功能码写数据 @@ -184,7 +185,10 @@ public class SerialPortController { //controlSetService.saveControlSet(controlData); nowDataService.upLevelSet(buildingId, serialPortModel.getDataValue());//更新实时状态表 } - serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 + String returnStr = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 + if (!StringUtils.isBlank(returnStr) && "fail".equals(returnStr)) { + return HttpResult.error(500, "fail"); + } } Constant.WEB_FLAG = false; //单抄,恢复采集 return HttpResult.ok(); @@ -212,11 +216,11 @@ public class SerialPortController { String deviceType = serialPortModel.getDeviceType();//设备类型 String buildingId = serialPortModel.getBuildingId();//楼栋 String param = serialPortModel.getParam();//操作参数 - if (deviceAddr == null || deviceAddr == "") { + if (StringUtils.isBlank(deviceAddr)) { List list = deviceInstallService.selectDevices(buildingId, deviceType); deviceAddr = list.get(0).getDeviceAddr(); } - if (deviceAddr == null || deviceAddr.length() == 0) { + if (StringUtils.isBlank(deviceAddr)) { Constant.WEB_FLAG = false; return HttpResult.error("通讯ID为空!"); } @@ -234,12 +238,12 @@ public class SerialPortController { //设置设备实体对象 ControlSetEntity controlData = new ControlSetEntity(); controlData.setBuildingId(deviceInstallEntity.getBuildingId()); - if (deviceType == null || deviceType.equals("") || deviceType.equals("热泵")) { + if (StringUtils.isBlank(deviceType) || deviceType.equals("热泵")) { //设置热泵实体对象 PumpSetEntity pumpData = new PumpSetEntity(); pumpData.setBuildingId(deviceInstallEntity.getBuildingId()); pumpData.setPumpId(deviceAddr); - if (param == null || param.equals("") || param.equals("读温度设定")) { + if (StringUtils.isBlank(param) || param.equals("读温度设定")) { deviceCodeParam.setFunCode("03"); //功能码读数据 if (brand.equals("美的")) { deviceCodeParam.setRegisterAddr("0642"); //寄存器地址 @@ -247,7 +251,7 @@ public class SerialPortController { deviceCodeParam.setRegisterAddr("0003"); //寄存器地址 } rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 - if (!rtData.equals("")) { + if (!rtData.equals("fail")) { pumpData.setTempSet(rtData); pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库 } @@ -259,7 +263,7 @@ public class SerialPortController { deviceCodeParam.setRegisterAddr("0064"); //寄存器地址 } rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 - if (!rtData.equals("")) { + if (!rtData.equals("fail")) { pumpData.setWaterTemp(rtData); pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库 } @@ -280,14 +284,15 @@ public class SerialPortController { deviceCodeParam.setFunCode("03"); //功能码读数据 //保存数据 rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 - String time = rtData; - if (time.length() == 8) { - String statTime = time.substring(0, 2) + ":" + time.substring(2, 4); - String closeTime = time.substring(4, 6) + ":" + time.substring(6, 8); - pumpData.setStartTime1(statTime); - pumpData.setCloseTime1(closeTime); + if (!rtData.equals("fail")) { + if (rtData.length() == 8) { + String statTime = rtData.substring(0, 2) + ":" + rtData.substring(2, 4); + String closeTime = rtData.substring(4, 6) + ":" + rtData.substring(6, 8); + pumpData.setStartTime1(statTime); + pumpData.setCloseTime1(closeTime); + } + pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库 } - pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库 } } else if (param.equals("时段2")) { if (brand.equals("美的")) { @@ -296,14 +301,15 @@ public class SerialPortController { deviceCodeParam.setFunCode("03"); //功能码读数据 //保存数据 rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 - String time = rtData; - if (time.length() == 8) { - String statTime = time.substring(0, 2) + ":" + time.substring(2, 4); - String closeTime = time.substring(4, 6) + ":" + time.substring(6, 8); - pumpData.setStartTime2(statTime); - pumpData.setCloseTime2(closeTime); + if (!rtData.equals("fail")) { + if (rtData.length() == 8) { + String statTime = rtData.substring(0, 2) + ":" + rtData.substring(2, 4); + String closeTime = rtData.substring(4, 6) + ":" + rtData.substring(6, 8); + pumpData.setStartTime2(statTime); + pumpData.setCloseTime2(closeTime); + } + pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库 } - pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库 } } } else if (deviceType.equals("时控")) { @@ -316,34 +322,34 @@ public class SerialPortController { } deviceCodeParam.setFunCode("03"); //功能码读数据 rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 + if (!rtData.equals("fail")) { + if (rtData.length() == 16) { + //时段1 + String statTime1 = rtData.substring(0, 2) + ":" + rtData.substring(2, 4); + String closeTime1 = rtData.substring(4, 6) + ":" + rtData.substring(6, 8); + //时段2 + String statTime2 = rtData.substring(8, 10) + ":" + rtData.substring(10, 12); + String closeTime2 = rtData.substring(12, 14) + ":" + rtData.substring(14, 16); - String time = rtData; - if (time.length() == 16) { - //时段1 - String statTime1 = time.substring(0, 2) + ":" + time.substring(2, 4); - String closeTime1 = time.substring(4, 6) + ":" + time.substring(6, 8); - //时段2 - String statTime2 = time.substring(8, 10) + ":" + time.substring(10, 12); - String closeTime2 = time.substring(12, 14) + ":" + time.substring(14, 16); - - if (param.equals("L1")) { - controlData.setUseStartTime1(statTime1); - controlData.setUseCloseTime1(closeTime1); - controlData.setUseStartTime2(statTime2); - controlData.setUseCloseTime2(closeTime2); - } else if (param.equals("L2")) { - controlData.setUseStartTime3(statTime1); - controlData.setUseCloseTime3(closeTime1); - controlData.setUseStartTime4(statTime2); - controlData.setUseCloseTime4(closeTime2); - } else { - controlData.setUseStartTime5(statTime1); - controlData.setUseCloseTime5(closeTime1); - controlData.setUseStartTime6(statTime2); - controlData.setUseCloseTime6(closeTime2); + if (param.equals("L1")) { + controlData.setUseStartTime1(statTime1); + controlData.setUseCloseTime1(closeTime1); + controlData.setUseStartTime2(statTime2); + controlData.setUseCloseTime2(closeTime2); + } else if (param.equals("L2")) { + controlData.setUseStartTime3(statTime1); + controlData.setUseCloseTime3(closeTime1); + controlData.setUseStartTime4(statTime2); + controlData.setUseCloseTime4(closeTime2); + } else { + controlData.setUseStartTime5(statTime1); + controlData.setUseCloseTime5(closeTime1); + controlData.setUseStartTime6(statTime2); + controlData.setUseCloseTime6(closeTime2); + } } + controlSetService.saveControlSet(controlData); //保存设置内容 } - controlSetService.saveControlSet(controlData); //保存设置内容 } else if (deviceType.equals("水位开关") && !param.equals("状态")) { if (brand == null || brand.equals("") || brand.equals("中凯")) {//品牌 deviceCodeParam.setFunCode("17"); //功能码读 @@ -356,7 +362,7 @@ public class SerialPortController { deviceCodeParam.setRegisterAddr("0102"); } rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 - deviceCodeParam.setDataValue(rtData); + //deviceCodeParam.setDataValue(rtData); //controlData.setLevelSet(serialPortModel.getDataValue()); //controlSetService.saveControlSet(controlData); log.info("--------------读取返回数据:" + rtData + "------------------"); diff --git a/user-service/src/main/java/com/mh/user/job/DealDataJob.java b/user-service/src/main/java/com/mh/user/job/DealDataJob.java index f575d19..7b197b2 100644 --- a/user-service/src/main/java/com/mh/user/job/DealDataJob.java +++ b/user-service/src/main/java/com/mh/user/job/DealDataJob.java @@ -52,7 +52,7 @@ public class DealDataJob { Date date = new Date(); String curDate = sdf1.format(date); String name = dealDataService.customName(); - if (name != null && name.length() > 0 && name.contains("华夏学院")) { + if (name != null && name.contains("华夏学院")) { dealDataService.proEnergy2(curDate); } else { dealDataService.proEnergy(curDate); //yyyy-MM-dd HH:00:00 @@ -60,9 +60,7 @@ public class DealDataJob { dealDataService.proGatewayState(); //判断网关在线状态:在线或离线 log.info("进入定时调试数据库过程汇总数据!yyyy-MM-dd HH:00:00"); } catch (Exception e) { - e.printStackTrace(); - //Constant.FLAG=false; - //Constant.WEB_FLAG=false; + log.error("定时处理数据汇总异常==>", e); } } @@ -98,7 +96,10 @@ public class DealDataJob { Thread thread = new Thread(myThread); comThreadPool.execute(thread); } + // 等待执行完成 countDownLatch.await(); + // 释放资源 + countDownLatch = null; } } } @@ -106,6 +107,7 @@ public class DealDataJob { log.error("定时采集异常==>", e); } finally { Constant.FLAG = false; + log.info("------定时采集结束>>>>Constant.FLAG==" + Constant.FLAG + "------"); } } @@ -133,9 +135,7 @@ public class DealDataJob { dealDataService.proTotalPumpMinutes(curDate); //统计周\月热泵运行时长 log.info("进入定时调试数据库过程汇总数据!yyyy-MM-dd"); } catch (Exception e) { - e.printStackTrace(); - //Constant.FLAG=false; - //Constant.WEB_FLAG=false; + log.error("定时处理数据异常==>", e); } } diff --git a/user-service/src/main/java/com/mh/user/model/SerialPortModel.java b/user-service/src/main/java/com/mh/user/model/SerialPortModel.java index ada73c2..8c3327b 100644 --- a/user-service/src/main/java/com/mh/user/model/SerialPortModel.java +++ b/user-service/src/main/java/com/mh/user/model/SerialPortModel.java @@ -5,9 +5,29 @@ import lombok.Data; @Data public class SerialPortModel { + /** + * 楼栋id + */ private String buildingId; + + /** + * 设备地址 + */ private String deviceAddr; + + /** + * 设备类型 + */ private String deviceType; + + /** + * 操作类型 + */ private String param; + + /** + * 操作值 + */ private String dataValue; + } diff --git a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java index b5641ac..1bb1db6 100644 --- a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java +++ b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java @@ -107,11 +107,11 @@ public class SerialPortSendReceive { continue; //continue时,跳出本次循环,继续执行下次循环。Break时,跳出循环(结束循环),执行下面的语句。 } }catch (Exception e){ -// e.printStackTrace(); Constant.WEB_FLAG=false;//可以采集的状态 if(i==size-1){ Constant.FLAG=false; } + log.error("发送指令异常==>", e); } receiveStr=""; //从串口读取数据 diff --git a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java index 11d964c..fc4ba62 100644 --- a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java +++ b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java @@ -59,7 +59,6 @@ public class SerialPortSendReceive2 { for (int i = 0; i < deviceManageEntityList.size(); i++) { //判断网页端是否有操作设备的 if (Constant.WEB_FLAG) { - Constant.FLAG = false; SerialTool.closePort(serialPort); log.info("有指令下发退出定时采集"); break; @@ -110,7 +109,6 @@ public class SerialPortSendReceive2 { byte[] bytes = SerialTool.readFromPort(serialPort); if (bytes == null) { SerialTool.closePort(serialPort); - Thread.sleep(1000); log.info("串口" + serialPort + "没有数据返回!" + i); log.info("----------------" + deviceType + "离线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); Constant.WEB_FLAG = false;//可以采集的状态 @@ -133,11 +131,8 @@ public class SerialPortSendReceive2 { // 处理返回来的数据报文 dealReceiveData(dateStr, serialPort, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, bytes); } - Constant.FLAG = false; - log.info("-------------一轮采集完,采集标志Constant.Flag=false-------------"); } catch (Exception e) { Constant.WEB_FLAG = false;//可以采集的状态 - Constant.FLAG = false; log.error("-------------串口采集异常!----------->>", e); } } @@ -204,7 +199,6 @@ public class SerialPortSendReceive2 { Constant.WEB_FLAG = false;//可以采集的状态 log.error(deviceManageEntityList.get(i).getDeviceType() + "保存数据库失败!" + i,e); } - Thread.sleep(1000); } static void analysisReceiveData(String dateStr, diff --git a/user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java b/user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java index 8b7a8a8..2a84bea 100644 --- a/user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java +++ b/user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java @@ -35,7 +35,7 @@ public class SerialPortSingle2 { public String serialPortSend(DeviceCodeParamEntity deviceCodeParamEntity) { SerialPort serialPort = null; - String rtData = ""; + String rtData = "fail"; String comName = deviceCodeParamEntity.getDataCom().toUpperCase(); try { try { @@ -51,10 +51,11 @@ public class SerialPortSingle2 { if (serialPort != null) { String sendStr = SendOrderUtils.getSendStr(deviceCodeParamEntity); SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceCodeParamEntity.getDeviceType()); - Thread.sleep(1500); + Thread.sleep(2000); } } catch (Exception e) { - e.printStackTrace(); + log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口", e); + return "fail"; } //对返回数据进行相关解析处理 byte[] bytes = SerialTool.readFromPort(serialPort); //读取串口数据 diff --git a/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java index 3cb7b49..62a88c0 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java @@ -449,7 +449,6 @@ public class NowDataServiceImpl implements NowDataService { @Override public void updateRunState(String buildingId, String pumpId,String strState, String buildingName) { DeviceInstallEntity deviceInstallEntity=deviceInstallMapper.selectDevice(pumpId,"热泵",buildingId); -// String buildingName=buildingService.queryBuildingName(buildingId); NowDataEntity data=new NowDataEntity(); int r1 = nowDataMapper.selectNowDataCount(buildingId,pumpId);//判断now_data表是否存在记录 if(r1==0){ diff --git a/user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java b/user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java index 7b39d43..ba73850 100644 --- a/user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java +++ b/user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java @@ -1,10 +1,12 @@ package com.mh.user.utils; import com.alibaba.fastjson2.JSON; +import com.mh.common.utils.StringUtils; import com.mh.user.entity.*; import com.mh.user.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; + import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -21,1667 +23,1642 @@ import java.util.concurrent.ThreadPoolExecutor; @Slf4j public class AnalysisReceiveOrder485 { - // 调用service - ApplicationContext context = SpringBeanUtil.getApplicationContext(); - ThreadPoolExecutor threadPoolService = ThreadPoolService.getInstance(); - DataResultService dataResultService=context.getBean(DataResultService.class); - NowDataService nowDataService=context.getBean(NowDataService.class); - NowPublicDataService nowPublicDataService=context.getBean(NowPublicDataService.class); - PumpSetService pumpSetService=context.getBean(PumpSetService.class); - DeviceInstallService deviceInstallService=context.getBean(DeviceInstallService.class); - BuildingService buildingService=context.getBean(BuildingService.class); - /** - * 解析电表返回的数据 - * @param dataStr - */ - public void analysisMeterOrder485(final String dataStr,final String registerAddr,final String brand,String buildingId, String buildingName) { + // 调用service + ApplicationContext context = SpringBeanUtil.getApplicationContext(); + ThreadPoolExecutor threadPoolService = ThreadPoolService.getInstance(); + DataResultService dataResultService = context.getBean(DataResultService.class); + NowDataService nowDataService = context.getBean(NowDataService.class); + NowPublicDataService nowPublicDataService = context.getBean(NowPublicDataService.class); + PumpSetService pumpSetService = context.getBean(PumpSetService.class); + DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class); + BuildingService buildingService = context.getBean(BuildingService.class); + + /** + * 解析电表返回的数据 + * + * @param dataStr + */ + public void analysisMeterOrder485(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) { // threadPoolService.execute(() -> { - if (dataStr.length() == 36 || dataStr.length() == 40 || dataStr.length() == 44 || dataStr.length() == 50) { - String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码 - String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 - //返回的校验码与重新生成的校验码进行校验 - if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { - //表号,12位 - String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) - + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); - meterId = String.format("%012d", Long.parseLong(meterId)); - String data = ""; - StringBuilder stringBuilder = new StringBuilder(); - if (dataStr.length() == 36){ - for (int i = 0; i < 4; i++) { - String data1 = checkStr.substring(32 - 2 * (i + 1), 32 - 2 * i); - stringBuilder.append(data1); - } - }else { - for (int i = 0; i < 4; i++) { - String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); - stringBuilder.append(data1); - } - } - data = stringBuilder.toString(); - data = ExchangeStringUtil.cutThree(data); - // 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 - data = String.format("%08d", Long.parseLong(data)); - data = data.substring(0, 6) + "." + data.substring(6, 8); - log.info("电表表号:" + meterId+",电表读数:" + data); -// String buildingName=buildingService.queryBuildingName(buildingId); //查询楼栋名称 - try { - DataResultEntity dataResultEntity = new DataResultEntity(); - dataResultEntity.setDeviceAddr(meterId);//通讯编号 - dataResultEntity.setDeviceType("电表"); - dataResultEntity.setBuildingId(buildingId); - dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 - Date date = new Date(); - dataResultEntity.setCurDate(date); //当前日期 - dataResultService.saveDataResult(dataResultEntity); - log.info("电表数据保存数据库成功! 楼栋名称:"+buildingName); - } catch (Exception e) { - log.error("电表数据保存数据库失败!楼栋名称:"+buildingName, e); - } - }else { - log.info("电表报文检验失败: " + dataStr); - } - } + if (dataStr.length() == 36 || dataStr.length() == 40 || dataStr.length() == 44 || dataStr.length() == 50) { + String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码 + String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 + //返回的校验码与重新生成的校验码进行校验 + if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { + //表号,12位 + String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) + + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); + meterId = String.format("%012d", Long.parseLong(meterId)); + String data = ""; + StringBuilder stringBuilder = new StringBuilder(); + if (dataStr.length() == 36) { + for (int i = 0; i < 4; i++) { + String data1 = checkStr.substring(32 - 2 * (i + 1), 32 - 2 * i); + stringBuilder.append(data1); + } + } else { + for (int i = 0; i < 4; i++) { + String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); + stringBuilder.append(data1); + } + } + data = stringBuilder.toString(); + data = ExchangeStringUtil.cutThree(data); + // 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 + data = String.format("%08d", Long.parseLong(data)); + data = data.substring(0, 6) + "." + data.substring(6, 8); + log.info("电表表号:" + meterId + ",电表读数:" + data); + try { + DataResultEntity dataResultEntity = new DataResultEntity(); + dataResultEntity.setDeviceAddr(meterId);//通讯编号 + dataResultEntity.setDeviceType("电表"); + dataResultEntity.setBuildingId(buildingId); + dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 + Date date = new Date(); + dataResultEntity.setCurDate(date); //当前日期 + dataResultService.saveDataResult(dataResultEntity); + log.info("电表数据保存数据库成功! 楼栋名称:" + buildingName); + } catch (Exception e) { + log.error("电表数据保存数据库失败!楼栋名称:" + buildingName, e); + } + } else { + log.info("电表报文检验失败: " + dataStr); + } + } // }); - } + } - public String analysisMeterOrder4852(final String dataStr,final String registerAddr,final String brand,String buildingId, final String buildingName) { - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - String data = ""; - if (dataStr.length() == 36 || dataStr.length() == 40 || dataStr.length() == 44 || dataStr.length() == 50) { - String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码 - String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 - //返回的校验码与重新生成的校验码进行校验 - if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { - log.info("电表报文检验成功: " + dataStr); - //表号,12位 - String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) - + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); - meterId = String.format("%012d", Long.parseLong(meterId)); - StringBuilder stringBuilder = new StringBuilder(); - if (dataStr.length() == 36){ - for (int i = 0; i < 4; i++) { - String data1 = checkStr.substring(32 - 2 * (i + 1), 32 - 2 * i); - stringBuilder.append(data1); - } - }else { - for (int i = 0; i < 4; i++) { - String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); - stringBuilder.append(data1); - } - } - data = stringBuilder.toString(); - data = ExchangeStringUtil.cutThree(data); - // 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 - data = String.format("%08d", Long.parseLong(data)); - data = data.substring(0, 6) + "." + data.substring(6, 8); - log.info("电表表号:" + meterId+",电表读数:" + data); - try { - DataResultEntity dataResultEntity = new DataResultEntity(); - dataResultEntity.setDeviceAddr(meterId);//通讯编号 - dataResultEntity.setDeviceType("电表"); - dataResultEntity.setBuildingId(buildingId); - dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 - dataResultEntity.setCurDate(sdf1.parse(dateStr)); //当前日期 - dataResultService.saveDataResult(dataResultEntity); - log.info("电表数据保存数据库成功! 楼栋名称:"+buildingName); - } catch (Exception e) { -// e.printStackTrace(); - log.error("电表数据保存数据库失败!楼栋名称:"+buildingName); - } - }else { - log.info("电表报文检验失败: " + dataStr); - } - } - if (!data.equals("")){ - data=String.valueOf(Double.valueOf(data)); //00010.76,去除读数前面带0的情况 - } - return data; - } + public String analysisMeterOrder4852(final String dataStr, final String registerAddr, final String brand, String buildingId, final String buildingName) { + Date date = new Date(); + String data = ""; + if (dataStr.length() == 36 || dataStr.length() == 40 || dataStr.length() == 44 || dataStr.length() == 50) { + String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码 + String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 + //返回的校验码与重新生成的校验码进行校验 + if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { + log.info("电表报文检验成功: " + dataStr); + //表号,12位 + String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) + + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); + meterId = String.format("%012d", Long.parseLong(meterId)); + StringBuilder stringBuilder = new StringBuilder(); + if (dataStr.length() == 36) { + for (int i = 0; i < 4; i++) { + String data1 = checkStr.substring(32 - 2 * (i + 1), 32 - 2 * i); + stringBuilder.append(data1); + } + } else { + for (int i = 0; i < 4; i++) { + String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); + stringBuilder.append(data1); + } + } + data = stringBuilder.toString(); + data = ExchangeStringUtil.cutThree(data); + // 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 + data = String.format("%08d", Long.parseLong(data)); + data = data.substring(0, 6) + "." + data.substring(6, 8); + log.info("电表表号:" + meterId + ",电表读数:" + data); + try { + DataResultEntity dataResultEntity = new DataResultEntity(); + dataResultEntity.setDeviceAddr(meterId);//通讯编号 + dataResultEntity.setDeviceType("电表"); + dataResultEntity.setBuildingId(buildingId); + dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 + dataResultEntity.setCurDate(date); //当前日期 + dataResultService.saveDataResult(dataResultEntity); + log.info("电表数据保存数据库成功! 楼栋名称:" + buildingName); + } catch (Exception e) { + log.error("电表数据保存数据库失败!楼栋名称:" + buildingName, e); + } + } else { + log.info("电表报文检验失败: " + dataStr); + } + } + if (!data.equals("")) { + data = String.valueOf(Double.valueOf(data)); //00010.76,去除读数前面带0的情况 + } + return data; + } - // 水表 - public void analysisWtMeterOrder485(final String dataStr,final String registerAddr,final String brand,String buildingId, String buildingName) { + // 水表 + public void analysisWtMeterOrder485(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) { // threadPoolService.execute(() -> { - String data = ""; - String meterId=""; - if (dataStr.length() == 44 || dataStr.length() == 70) { - String checkStr = dataStr.substring(0, dataStr.length() - 4);//减去校验码 - String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 - if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { - meterId =checkStr.substring(16, 18)+checkStr.substring(14, 16)+ checkStr.substring(12, 14) + checkStr.substring(10, 12)// 表号 - + checkStr.substring(8, 10)+ checkStr.substring(6, 8) + checkStr.substring(4, 6); - meterId = String.format("%014d", Long.parseLong(meterId)); - StringBuilder stringBuilder = new StringBuilder(); - for (int i = 0; i < 4; i++) { - //String data1 = checkStr.substring(checkStr.length() - 2 * (i + 1), checkStr.length() - 2 * i); - String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); - stringBuilder.append(data1); - } - data = stringBuilder.toString(); - // 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 - data = String.format("%08d", Long.parseLong(data)); - data = data.substring(0, 6) + "." + data.substring(6, 8); - }else{ - log.info("水表报文检验失败: " + dataStr); - } - } else if(dataStr.length() == 18){ - String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 - byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); - int checkNum = CRC16.CRC16_MODBUS(strOrder); - String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); - checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); - String sValue=null; - if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { - meterId = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { - data=String.valueOf(Integer.parseInt(ExchangeStringUtil.hexToDec(checkStr.substring(6, 14)))/10); //读数 - } - }else { - log.info("水表报文检验失败: " + dataStr); - } - } - log.info("水表表号: " + meterId+",水表读数:" + data); - try { - DataResultEntity dataResultEntity = new DataResultEntity(); - dataResultEntity.setDeviceAddr(meterId);//通讯编号 - dataResultEntity.setDeviceType("水表"); - dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 - Date date = new Date(); - dataResultEntity.setCurDate(date); //当前日期 - dataResultEntity.setBuildingId(buildingId); - dataResultService.saveDataResult(dataResultEntity); - log.info("水表数据保存数据库成功!楼栋名称:"+buildingName); - } catch (Exception e) { - e.printStackTrace(); - log.error("水表数据保存数据库失败!楼栋名称:"+buildingName); - } + String data = ""; + String meterId = ""; + if (dataStr.length() == 44 || dataStr.length() == 70) { + String checkStr = dataStr.substring(0, dataStr.length() - 4);//减去校验码 + String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 + if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { + meterId = checkStr.substring(16, 18) + checkStr.substring(14, 16) + checkStr.substring(12, 14) + checkStr.substring(10, 12)// 表号 + + checkStr.substring(8, 10) + checkStr.substring(6, 8) + checkStr.substring(4, 6); + meterId = String.format("%014d", Long.parseLong(meterId)); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < 4; i++) { + //String data1 = checkStr.substring(checkStr.length() - 2 * (i + 1), checkStr.length() - 2 * i); + String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); + stringBuilder.append(data1); + } + data = stringBuilder.toString(); + // 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 + data = String.format("%08d", Long.parseLong(data)); + data = data.substring(0, 6) + "." + data.substring(6, 8); + } else { + log.info("水表报文检验失败: " + dataStr); + } + } else if (dataStr.length() == 18) { + String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + String sValue = null; + if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { + meterId = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { + data = String.valueOf(Integer.parseInt(ExchangeStringUtil.hexToDec(checkStr.substring(6, 14))) / 10); //读数 + } + } else { + log.info("水表报文检验失败: " + dataStr); + } + } + log.info("水表表号: " + meterId + ",水表读数:" + data); + try { + DataResultEntity dataResultEntity = new DataResultEntity(); + dataResultEntity.setDeviceAddr(meterId);//通讯编号 + dataResultEntity.setDeviceType("水表"); + dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 + Date date = new Date(); + dataResultEntity.setCurDate(date); //当前日期 + dataResultEntity.setBuildingId(buildingId); + dataResultService.saveDataResult(dataResultEntity); + log.info("水表数据保存数据库成功!楼栋名称:" + buildingName); + } catch (Exception e) { + e.printStackTrace(); + log.error("水表数据保存数据库失败!楼栋名称:" + buildingName); + } // }); - } + } - // 水表 - public String analysisWtMeterOrder4852(final String dataStr,final String registerAddr,final String brand,String buildingId, String buildingName) { - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - String data = ""; - String meterId=""; - if (dataStr.length() == 44 || dataStr.length() == 70) { - String checkStr = dataStr.substring(0, dataStr.length() - 4);//减去校验码 - String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 - if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { - meterId =checkStr.substring(16, 18)+checkStr.substring(14, 16)+ checkStr.substring(12, 14) + checkStr.substring(10, 12)// 表号 - + checkStr.substring(8, 10)+ checkStr.substring(6, 8) + checkStr.substring(4, 6); - meterId = String.format("%014d", Long.parseLong(meterId)); - StringBuilder stringBuilder = new StringBuilder(); - for (int i = 0; i < 4; i++) { - //String data1 = checkStr.substring(checkStr.length() - 2 * (i + 1), checkStr.length() - 2 * i); - String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); - stringBuilder.append(data1); - } - data = stringBuilder.toString(); - // 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 - data = String.format("%08d", Long.parseLong(data)); - data = data.substring(0, 6) + "." + data.substring(6, 8); - }else{ - log.info("水表报文检验失败: " + dataStr); - } - } else if(dataStr.length() == 18){ - String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 - byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); - int checkNum = CRC16.CRC16_MODBUS(strOrder); - String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); - checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); - String sValue=null; - if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { - meterId = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { - data=String.valueOf(Integer.parseInt(ExchangeStringUtil.hexToDec(checkStr.substring(6, 14)))/10); //读数 - } - }else { - log.info("水表报文检验失败: " + dataStr); - } - } - log.info("水表表号: " + meterId+",水表读数:" + data); - try { - DataResultEntity dataResultEntity = new DataResultEntity(); -// if (meterId.length()>8){ -// dataResultEntity.setDeviceAddr(meterId.substring(meterId.length()-8,meterId.length()));//通讯编号 -// }else{ - dataResultEntity.setDeviceAddr(meterId);//通讯编号 -// } - dataResultEntity.setDeviceType("水表"); - dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 - dataResultEntity.setCurDate(sdf1.parse(dateStr)); //当前日期 - dataResultEntity.setBuildingId(buildingId); - dataResultService.saveDataResult(dataResultEntity); - log.info("水表数据保存数据库成功!楼栋名称:"+buildingName); - } catch (Exception e) { - e.printStackTrace(); - log.error("水表数据保存数据库失败!楼栋名称:"+buildingName); - } - if (!data.equals("")){ - data=String.valueOf(Double.valueOf(data)); - } - return data; - } + // 水表 + public String analysisWtMeterOrder4852(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) { + Date date = new Date(); + String data = ""; + String meterId = ""; + if (dataStr.length() == 44 || dataStr.length() == 70) { + String checkStr = dataStr.substring(0, dataStr.length() - 4);//减去校验码 + String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 + if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { + meterId = checkStr.substring(16, 18) + checkStr.substring(14, 16) + checkStr.substring(12, 14) + checkStr.substring(10, 12)// 表号 + + checkStr.substring(8, 10) + checkStr.substring(6, 8) + checkStr.substring(4, 6); + meterId = String.format("%014d", Long.parseLong(meterId)); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < 4; i++) { + String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); + stringBuilder.append(data1); + } + data = stringBuilder.toString(); + // 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 + data = String.format("%08d", Long.parseLong(data)); + data = data.substring(0, 6) + "." + data.substring(6, 8); + } else { + log.info("水表报文检验失败: " + dataStr); + } + } else if (dataStr.length() == 18) { + String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { + meterId = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { + data = String.valueOf(Integer.parseInt(ExchangeStringUtil.hexToDec(checkStr.substring(6, 14))) / 10); //读数 + } + } else { + log.info("水表报文检验失败: " + dataStr); + } + } + log.info("水表表号: " + meterId + ",水表读数:" + data); + try { + DataResultEntity dataResultEntity = new DataResultEntity(); + dataResultEntity.setDeviceAddr(meterId);//通讯编号 + dataResultEntity.setDeviceType("水表"); + dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 + dataResultEntity.setCurDate(date); //当前日期 + dataResultEntity.setBuildingId(buildingId); + dataResultService.saveDataResult(dataResultEntity); + log.info("水表数据保存数据库成功!楼栋名称:" + buildingName); + } catch (Exception e) { + log.error("水表数据保存数据库失败!楼栋名称:" + buildingName, e); + } + if (!data.equals("")) { + data = String.valueOf(Double.valueOf(data)); + } + return data; + } - // 热泵 - public void analysisPumpOrder485(final String receiveData, final String registerAddr,final String brand,String buildingId, String buildingName) { + // 热泵 + public void analysisPumpOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { // if (!Constant.CONTROL_WEB_FLAG) { // threadPoolService.execute(() -> { -// SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); -// Date date = new Date(); - String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); - String checkStr = receiveData.substring(0, receiveData.length() - 4);//检验报文 - String checkWord=ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码 - String sValue=null; - String dataType=null; - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - String data = ""; -// String buildingName=buildingService.queryBuildingName(buildingId); //查询楼栋名称 - if (brand==null || brand.equals("") || brand.equals("美的")){ - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 - if (registerAddr.equalsIgnoreCase("0641")) { //运行状态 - dataType="runState"; - data = checkStr.substring(8, 10); - log.info("------------美的热泵状态值-----------"+data); - if(data.equalsIgnoreCase("08")){ - sValue="不运行"; //关机模式 - }else if(data.equalsIgnoreCase("01")){ - sValue="运行"; //制冷模式 - }else if(data.equalsIgnoreCase("02")){ - sValue="运行"; //制热模式 - }else if(data.equalsIgnoreCase("04")){ - sValue="运行"; //水泵模式 - }else if(data.equalsIgnoreCase("10")){ - sValue="运行"; //制热水模式 - } - //计算热泵运行时间,按分钟 - nowDataService.proPumpMinutes(buildingId,addr,sValue); - log.info("计算热泵运行时长,楼栋名称:"+buildingName+",热泵编号:"+addr+",状态:"+sValue); - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); + String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); + String checkStr = receiveData.substring(0, receiveData.length() - 4);//检验报文 + String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码 + String sValue = null; + String dataType = null; + if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + log.info("热泵报文检验失败: " + receiveData); + return; + } + String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + String data = ""; + if (brand == null || brand.equals("") || brand.equals("美的")) { + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 + if (registerAddr.equalsIgnoreCase("0641")) { //运行状态 + dataType = "runState"; + data = checkStr.substring(8, 10); + log.info("------------美的热泵状态值-----------" + data); + if (data.equalsIgnoreCase("08")) { + sValue = "不运行"; //关机模式 + } else if (data.equalsIgnoreCase("01")) { + sValue = "运行"; //制冷模式 + } else if (data.equalsIgnoreCase("02")) { + sValue = "运行"; //制热模式 + } else if (data.equalsIgnoreCase("04")) { + sValue = "运行"; //水泵模式 + } else if (data.equalsIgnoreCase("10")) { + sValue = "运行"; //制热水模式 + } + //计算热泵运行时间,按分钟 + nowDataService.proPumpMinutes(buildingId, addr, sValue); + log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); // String state=nowDataService.selectState(buildingId); //判断热泵状态,如果有一个以上热泵运行,楼栋公共信息补水运行 // NowPublicDataEntity publicData=new NowPublicDataEntity(); // publicData.setBuildingId(buildingId); // publicData.setUpWater(state); // nowPublicDataService.saveNowHistoryPublicData(publicData); - log.info("热泵ID:" + addr + ",数据: " + sValue+",保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")){ - //0642设定温度,0007水箱水温 - if (registerAddr.equalsIgnoreCase("0642")){ - dataType="tempSet"; - }else { - dataType="waterTemp"; - } - //读数 - sValue=ExchangeStringUtil.hexToDec(checkStr.substring(6, 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); - if(addr.equals(pumpId)){ //取ID最小的热泵为单箱温度 - publicData.setSingleTemp(sValue); - log.info("---------------单箱温度:"+sValue+"---------------"); - } - nowPublicDataService.saveNowHistoryPublicData(publicData); - log.info("楼栋名称:" + buildingName + ",热泵编号:"+addr); + log.info("热泵ID:" + addr + ",数据: " + sValue + ",保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) { + //0642设定温度,0007水箱水温 + if (registerAddr.equalsIgnoreCase("0642")) { + dataType = "tempSet"; + } else { + dataType = "waterTemp"; + } + //读数 + sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 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); + if (addr.equals(pumpId)) { //取ID最小的热泵为单箱温度 + publicData.setSingleTemp(sValue); + log.info("---------------单箱温度:" + sValue + "---------------"); + } + nowPublicDataService.saveNowHistoryPublicData(publicData); + log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr); // nowDataService.proWaterTemp(dateStr,buildingId,addr); //保存楼栋时间点温度变化 // log.info("=========保存楼栋时间点温度变化值!==========="); - }else if (dataType.equals("tempSet")){ - pumpSetService.updatePumpSetTemp(sValue,buildingId,addr); //更新设定温度 - } - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); - log.info("热泵ID:" + addr + ",数据:" + sValue+",保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("000B")){ //故障状态 - 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,"热泵"); - } - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); - log.info("热泵ID:" + addr + ",数据: " + sValue+",保存数据库成功!楼栋名称:"+buildingName); - } + } else if (dataType.equals("tempSet")) { + pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 + } + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("热泵ID:" + addr + ",数据:" + sValue + ",保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("000B")) { //故障状态 + 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, "热泵"); + } + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("热泵ID:" + addr + ",数据: " + sValue + ",保存数据库成功!楼栋名称:" + buildingName); + } // else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A") // || registerAddr.equalsIgnoreCase("065E")) { //定时设置值 // sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); // } - } else if (checkStr.substring(2, 4).equalsIgnoreCase("10") ) { - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! " ); - } - }else if( brand.equals("美的2")){ - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 - if (registerAddr.equalsIgnoreCase("0BBD")) { //运行状态 - dataType="runState"; - data=ExchangeStringUtil.hexString2binaryString(checkStr.substring(8,10)); - data=ExchangeStringUtil.addZeroForNum(data,8);//二进制数,补够8位 - data=data.substring(4,8); //截取后四位 - log.info("------------美的2热泵状态值-----------"+data); - if (data.equalsIgnoreCase("0000")){ //0 - sValue="不运行"; //关机 - }else if(data.equalsIgnoreCase("0001")){//1 - sValue="运行"; //水泵 - }else if(data.equalsIgnoreCase("0010")){//2 - sValue="运行"; //制冷 - }else if(data.equalsIgnoreCase("0011")){//3 - sValue="运行"; //制热 - }else if(data.equalsIgnoreCase("0100")){//4 - sValue="运行"; //热水 - }else if(data.equalsIgnoreCase("0101")){//5 - sValue="运行"; //采暖 - }else if(data.equalsIgnoreCase("0110")){//6 - sValue="运行"; //电热模式 - } - //计算热泵运行时间,按分钟 - nowDataService.proPumpMinutes(buildingId,addr,sValue); - log.info("计算热泵运行时长,楼栋名称:"+buildingName+",热泵编号:"+addr+",状态:"+sValue); - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); + } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); + } + } else if (brand.equals("美的2")) { + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 + if (registerAddr.equalsIgnoreCase("0BBD")) { //运行状态 + dataType = "runState"; + data = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); + data = ExchangeStringUtil.addZeroForNum(data, 8);//二进制数,补够8位 + data = data.substring(4, 8); //截取后四位 + log.info("------------美的2热泵状态值-----------" + data); + if (data.equalsIgnoreCase("0000")) { //0 + sValue = "不运行"; //关机 + } else if (data.equalsIgnoreCase("0001")) {//1 + sValue = "运行"; //水泵 + } else if (data.equalsIgnoreCase("0010")) {//2 + sValue = "运行"; //制冷 + } else if (data.equalsIgnoreCase("0011")) {//3 + sValue = "运行"; //制热 + } else if (data.equalsIgnoreCase("0100")) {//4 + sValue = "运行"; //热水 + } else if (data.equalsIgnoreCase("0101")) {//5 + sValue = "运行"; //采暖 + } else if (data.equalsIgnoreCase("0110")) {//6 + sValue = "运行"; //电热模式 + } + //计算热泵运行时间,按分钟 + nowDataService.proPumpMinutes(buildingId, addr, sValue); + log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); // String state=nowDataService.selectState(buildingId); //判断热泵状态,如果有一个以上热泵运行,楼栋公共信息补水运行 // NowPublicDataEntity publicData=new NowPublicDataEntity(); // publicData.setBuildingId(buildingId); // publicData.setUpWater(state); // nowPublicDataService.saveNowHistoryPublicData(publicData); - log.info("热泵ID: " + addr + ",数据: " + sValue+"保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")){ - //0003设定温度,0064水箱水温 - if (registerAddr.equalsIgnoreCase("0003")){ - dataType="tempSet"; - }else { - dataType="waterTemp"; - } - //读数 - sValue=ExchangeStringUtil.hexToDec(checkStr.substring(6, 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); - 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); //更新设定温度 - } - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); - log.info("热泵ID: " + addr + ",数据: " + sValue+",保存数据库成功!楼栋编号:"+buildingId); - }else if (registerAddr.equalsIgnoreCase("0BBB")){ //故障状态 - dataType="isFault"; - String sData=ExchangeStringUtil.hexString2binaryString(checkStr.substring(8,10)); - sData=ExchangeStringUtil.addZeroForNum(sData,8); - if (sData.substring(7,8).equalsIgnoreCase("0")){ - sValue="无故障"; - } else if (sData.substring(7,8).equalsIgnoreCase("1")){ - sValue="有故障"; - } - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue+"保存数据库成功!楼栋名称:"+buildingName); - } + log.info("热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) { + //0003设定温度,0064水箱水温 + if (registerAddr.equalsIgnoreCase("0003")) { + dataType = "tempSet"; + } else { + dataType = "waterTemp"; + } + //读数 + sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 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); + 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); //更新设定温度 + } + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("热泵ID: " + addr + ",数据: " + sValue + ",保存数据库成功!楼栋编号:" + buildingId); + } else if (registerAddr.equalsIgnoreCase("0BBB")) { //故障状态 + dataType = "isFault"; + String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); + sData = ExchangeStringUtil.addZeroForNum(sData, 8); + if (sData.substring(7, 8).equalsIgnoreCase("0")) { + sValue = "无故障"; + } else if (sData.substring(7, 8).equalsIgnoreCase("1")) { + sValue = "有故障"; + } + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } // else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A") // || registerAddr.equalsIgnoreCase("065E")) { //定时设置值 // sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); // } - } else if (checkStr.substring(2, 4).equalsIgnoreCase("06") ) { - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! " ); - } - } - nowDataService.proWaterTemp(dateStr,buildingId,addr); //保存楼栋时间点温度变化 - log.info("----------------保存楼栋时间点温度变化值!----------------"); - }else{ - log.info("热泵报文检验失败: " + receiveData); - } + } else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); + } + } + nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化 + log.info("----------------保存楼栋时间点温度变化值!----------------"); + // }); // } - } + } - public String analysisPumpOrder4852(final String receiveData, final String registerAddr,final String brand,String buildingId, final String buildingName) { - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - String rtData=""; - //检验报文 - String checkStr = receiveData.substring(0, receiveData.length() - 4); - String checkWord=ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码 - String sValue=null; - String dataType=null; - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - log.info("热泵报文检验成功: " + receiveData); - String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); - String data = ""; - if (brand==null || brand.equals("") || brand.equals("美的")){ - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 - if (registerAddr.equalsIgnoreCase("0641")) { //运行状态 - dataType="runState"; - data = checkStr.substring(8, 10); - if(data.equalsIgnoreCase("08")){ - sValue="不运行"; //关机模式 - }else if(data.equalsIgnoreCase("01")){ - sValue="运行"; //制冷模式 - }else if(data.equalsIgnoreCase("02")){ - sValue="运行"; //制热模式 - }else if(data.equalsIgnoreCase("04")){ - sValue="运行"; //水泵模式 - }else if(data.equalsIgnoreCase("10")){ - sValue="运行"; //制热水模式 - } - //计算热泵运行时间,按分钟 - nowDataService.proPumpMinutes(buildingId,addr,sValue); - log.info("计算热泵运行时长,楼栋名称:"+buildingName+",热泵编号:"+addr+",状态:"+sValue); - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); -// NowPublicDataEntity publicData=new NowPublicDataEntity(); -// publicData.setBuildingId(buildingId); -// publicData.setUpWater(sValue); -// nowPublicDataService.saveNowHistoryPublicData(publicData); - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue+"保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")){ - //0642设定温度,0007水箱水温 - if (registerAddr.equalsIgnoreCase("0642")){ - dataType="tempSet"; - }else { - dataType="waterTemp"; - } - //读数 - sValue=ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); - if (dataType.equals("waterTemp")){ - NowPublicDataEntity publicData=new NowPublicDataEntity(); - publicData.setBuildingId(buildingId); - publicData.setUseWaterTemp(sValue); - publicData.setBackWaterTemp(sValue); - nowPublicDataService.saveNowHistoryPublicData(publicData); - nowDataService.proWaterTemp(dateStr,buildingId,addr); //保存楼栋时间点温度变化 - }else if (dataType.equals("tempSet")){ - pumpSetService.updatePumpSetTemp(sValue,buildingId,addr); //更新设定温度 - } - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue+"保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("000B")){ //故障状态 - 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,"热泵"); - } - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue+"保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A") - || registerAddr.equalsIgnoreCase("065E")) { //读定时设置值 - String startTime=checkStr.substring(8,10)+checkStr.substring(12,14); - String closetTime=checkStr.substring(16,18)+checkStr.substring(20,22); - sValue =startTime+closetTime; - } - } else if (checkStr.substring(2, 4).equalsIgnoreCase("10") ) { - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! " ); - } - rtData=sValue; - }else if( brand.equals("美的2")){ - System.out.println("品牌:"+brand+","+"寄存器地址:"+registerAddr); - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 - if (registerAddr.equalsIgnoreCase("0BBD")) { //运行状态 - dataType="runState"; - data=ExchangeStringUtil.hexString2binaryString(checkStr.substring(8,10)); - data=ExchangeStringUtil.addZeroForNum(data,8);//二进制数,补够8位 - data=data.substring(4,8); //截取后四位 - if (data.equalsIgnoreCase("0000")){ //0 - sValue="不运行"; //关机 - }else if(data.equalsIgnoreCase("0001")){//1 - sValue="运行"; //水泵 - }else if(data.equalsIgnoreCase("0010")){//2 - sValue="运行"; //制冷 - }else if(data.equalsIgnoreCase("0011")){//3 - sValue="运行"; //制热 - }else if(data.equalsIgnoreCase("0100")){//4 - sValue="运行"; //热水 - }else if(data.equalsIgnoreCase("0101")){//5 - sValue="运行"; //采暖 - }else if(data.equalsIgnoreCase("0110")){//6 - sValue="运行"; //电热模式 - } - //计算热泵运行时间,按分钟 - nowDataService.proPumpMinutes(buildingId,addr,sValue); - log.info("计算热泵运行时长,楼栋名称:"+buildingName+",热泵编号:"+addr+",状态:"+sValue); - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); -// NowPublicDataEntity publicData=new NowPublicDataEntity(); -// publicData.setBuildingId(buildingId); -// publicData.setUpWater(sValue); -// nowPublicDataService.saveNowHistoryPublicData(publicData); - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue+"保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")){ - //0003设定温度,0064水箱水温 - if (registerAddr.equalsIgnoreCase("0003")){ - dataType="tempSet"; - }else { - dataType="waterTemp"; - } - //读数 - sValue=ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); - if (dataType.equals("waterTemp")){ - NowPublicDataEntity publicData=new NowPublicDataEntity(); - publicData.setBuildingId(buildingId); - publicData.setUseWaterTemp(sValue); - publicData.setBackWaterTemp(sValue); - nowPublicDataService.saveNowHistoryPublicData(publicData); - nowDataService.proWaterTemp(dateStr,buildingId,addr);//保存楼栋温度变化 - }else if (dataType.equals("tempSet")){ - pumpSetService.updatePumpSetTemp(sValue,buildingId,addr); //更新设定温度 - } - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue+"保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("0BBB")){ //故障状态 - dataType="isFault"; - String sData=ExchangeStringUtil.hexString2binaryString(checkStr.substring(8,10)); - sData=ExchangeStringUtil.addZeroForNum(sData,8); - if (sData.substring(7,8).equalsIgnoreCase("0")){ - sValue="无故障"; - } else if (sData.substring(7,8).equalsIgnoreCase("1")){ - sValue="有故障"; - } - nowDataService.saveNowHistoryData(addr,"热泵",sValue,dataType,buildingId); - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue+"保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A") - || registerAddr.equalsIgnoreCase("065E")) { //定时设置值 - String startTime=checkStr.substring(8,10)+checkStr.substring(12,14); - String closetTime=checkStr.substring(16,18)+checkStr.substring(20,22); - sValue =startTime+closetTime; - } - rtData=sValue; - } else if (checkStr.substring(2, 4).equalsIgnoreCase("06") ) { - log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! " ); - } - } - }else{ - log.info("热泵报文检验失败: " + receiveData); - } - return rtData; - } + public String analysisPumpOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, final String buildingName) { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + String dateStr = sdf1.format(date); + String rtData = ""; + //检验报文 + String checkStr = receiveData.substring(0, receiveData.length() - 4); + String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码 + String sValue = null; + String dataType = null; + if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + log.info("热泵报文检验成功: " + receiveData); + String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); + String data = ""; + if (StringUtils.isBlank(brand) || brand.equals("美的")) { + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 + if (registerAddr.equalsIgnoreCase("0641")) { //运行状态 + dataType = "runState"; + data = checkStr.substring(8, 10); + if (data.equalsIgnoreCase("08")) { + sValue = "不运行"; //关机模式 + } else if (data.equalsIgnoreCase("01")) { + sValue = "运行"; //制冷模式 + } else if (data.equalsIgnoreCase("02")) { + sValue = "运行"; //制热模式 + } else if (data.equalsIgnoreCase("04")) { + sValue = "运行"; //水泵模式 + } else if (data.equalsIgnoreCase("10")) { + sValue = "运行"; //制热水模式 + } + //计算热泵运行时间,按分钟 + nowDataService.proPumpMinutes(buildingId, addr, sValue); + log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) { + //0642设定温度,0007水箱水温 + if (registerAddr.equalsIgnoreCase("0642")) { + dataType = "tempSet"; + } else { + dataType = "waterTemp"; + } + //读数 + sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); + if (dataType.equals("waterTemp")) { + NowPublicDataEntity publicData = new NowPublicDataEntity(); + publicData.setBuildingId(buildingId); + publicData.setUseWaterTemp(sValue); + publicData.setBackWaterTemp(sValue); + nowPublicDataService.saveNowHistoryPublicData(publicData); + nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化 + } else if (dataType.equals("tempSet")) { + pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 + } + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("000B")) { //故障状态 + 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, "热泵"); + } + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0656") + || registerAddr.equalsIgnoreCase("065A") + || registerAddr.equalsIgnoreCase("065E")) { //读定时设置值 + String startTime = checkStr.substring(8, 10) + checkStr.substring(12, 14); + String closetTime = checkStr.substring(16, 18) + checkStr.substring(20, 22); + sValue = startTime + closetTime; + } + } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); + } + rtData = sValue; + } else if (brand.equals("美的2")) { + log.info("品牌:" + brand + "," + "寄存器地址:" + registerAddr); + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 + if (registerAddr.equalsIgnoreCase("0BBD")) { //运行状态 + dataType = "runState"; + data = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); + data = ExchangeStringUtil.addZeroForNum(data, 8);//二进制数,补够8位 + data = data.substring(4, 8); //截取后四位 + if (data.equalsIgnoreCase("0000")) { //0 + sValue = "不运行"; //关机 + } else if (data.equalsIgnoreCase("0001")) {//1 + sValue = "运行"; //水泵 + } else if (data.equalsIgnoreCase("0010")) {//2 + sValue = "运行"; //制冷 + } else if (data.equalsIgnoreCase("0011")) {//3 + sValue = "运行"; //制热 + } else if (data.equalsIgnoreCase("0100")) {//4 + sValue = "运行"; //热水 + } else if (data.equalsIgnoreCase("0101")) {//5 + sValue = "运行"; //采暖 + } else if (data.equalsIgnoreCase("0110")) {//6 + sValue = "运行"; //电热模式 + } + //计算热泵运行时间,按分钟 + nowDataService.proPumpMinutes(buildingId, addr, sValue); + log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) { + //0003设定温度,0064水箱水温 + if (registerAddr.equalsIgnoreCase("0003")) { + dataType = "tempSet"; + } else { + dataType = "waterTemp"; + } + //读数 + sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); + if (dataType.equals("waterTemp")) { + NowPublicDataEntity publicData = new NowPublicDataEntity(); + publicData.setBuildingId(buildingId); + publicData.setUseWaterTemp(sValue); + publicData.setBackWaterTemp(sValue); + nowPublicDataService.saveNowHistoryPublicData(publicData); + nowDataService.proWaterTemp(dateStr, buildingId, addr);//保存楼栋温度变化 + } else if (dataType.equals("tempSet")) { + pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 + } + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0BBB")) { //故障状态 + dataType = "isFault"; + String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); + sData = ExchangeStringUtil.addZeroForNum(sData, 8); + if (sData.substring(7, 8).equalsIgnoreCase("0")) { + sValue = "无故障"; + } else if (sData.substring(7, 8).equalsIgnoreCase("1")) { + sValue = "有故障"; + } + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0656") + || registerAddr.equalsIgnoreCase("065A") + || registerAddr.equalsIgnoreCase("065E")) { //定时设置值 + String startTime = checkStr.substring(8, 10) + checkStr.substring(12, 14); + String closetTime = checkStr.substring(16, 18) + checkStr.substring(20, 22); + sValue = startTime + closetTime; + } + rtData = sValue; + } else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); + } + } + } else { + log.info("热泵报文检验失败: " + receiveData); + } + return rtData; + } - // 温度变送器,长度42,读功能03 - public void analysisMulTempOrder485(final String receiveData, final String registerAddr,final String brand,final String buildingId, final String buildingName) { + // 温度变送器,长度42,读功能03 + public void analysisMulTempOrder485(final String receiveData, final String registerAddr, final String brand, final String buildingId, final String buildingName) { // threadPoolService.execute(() -> { - String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 - byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); - int checkNum = CRC16.CRC16_MODBUS(strOrder); - String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); - checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); - if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - log.info("温度变送器报文检验失败: " + receiveData); - } - //log.info("温度变送器报文检验成功: " + receiveData); - String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - //log.info("温度变送器:" + addr); - String data = ""; - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 - Map map= new HashMap<>(); - String L1=checkStr.substring(6, 10); //1路 - map.put("1",String.valueOf(ExchangeStringUtil.parseHex4(L1)/10)); - String L2=checkStr.substring(10, 14); //2路 - map.put("2",String.valueOf(ExchangeStringUtil.parseHex4(L2)/10)); - String L3=checkStr.substring(14, 18); //3路 - map.put("3",String.valueOf(ExchangeStringUtil.parseHex4(L3)/10)); - String L4=checkStr.substring(18, 22); //4路 - map.put("4",String.valueOf(ExchangeStringUtil.parseHex4(L4)/10)); - String L5=checkStr.substring(22, 26); //5路 - map.put("5",String.valueOf(ExchangeStringUtil.parseHex4(L5)/10)); - String L6=checkStr.substring(26, 30); //6路 - map.put("6",String.valueOf(ExchangeStringUtil.parseHex4(L6)/10)); - String L7=checkStr.substring(30, 34); //7路 - map.put("7",String.valueOf(ExchangeStringUtil.parseHex4(L7)/10)); - String L8=checkStr.substring(34, 38); //8路 - map.put("8",String.valueOf(ExchangeStringUtil.parseHex4(L8)/10)); + String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + log.info("温度变送器报文检验失败: " + receiveData); + } + //log.info("温度变送器报文检验成功: " + receiveData); + String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + //log.info("温度变送器:" + addr); + String data = ""; + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 + Map map = new HashMap<>(); + String L1 = checkStr.substring(6, 10); //1路 + map.put("1", String.valueOf(ExchangeStringUtil.parseHex4(L1) / 10)); + String L2 = checkStr.substring(10, 14); //2路 + map.put("2", String.valueOf(ExchangeStringUtil.parseHex4(L2) / 10)); + String L3 = checkStr.substring(14, 18); //3路 + map.put("3", String.valueOf(ExchangeStringUtil.parseHex4(L3) / 10)); + String L4 = checkStr.substring(18, 22); //4路 + map.put("4", String.valueOf(ExchangeStringUtil.parseHex4(L4) / 10)); + String L5 = checkStr.substring(22, 26); //5路 + map.put("5", String.valueOf(ExchangeStringUtil.parseHex4(L5) / 10)); + String L6 = checkStr.substring(26, 30); //6路 + map.put("6", String.valueOf(ExchangeStringUtil.parseHex4(L6) / 10)); + String L7 = checkStr.substring(30, 34); //7路 + map.put("7", String.valueOf(ExchangeStringUtil.parseHex4(L7) / 10)); + String L8 = checkStr.substring(34, 38); //8路 + map.put("8", String.valueOf(ExchangeStringUtil.parseHex4(L8) / 10)); - int count=buildingService.selectPumpCount(buildingId); //楼栋热泵数 - if (count>0){ - String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); - for (Map.Entry entry : map.entrySet()) { - addr=entry.getKey(); - data=entry.getValue(); - if(addr!=null && Integer.parseInt(addr)<=count){ - nowDataService.saveNowHistoryData3(addr,"温度变送器",data,"waterTemp",buildingId); - nowDataService.proWaterTemp(dateStr,buildingId,addr); //保存时间点温度 - } - } - log.info("温度变送器:" + addr+",保存数据库成功!楼栋名称:"+buildingName); - String avgTemp=nowDataService.selectAve(buildingId); - NowPublicDataEntity publicData=new NowPublicDataEntity(); - publicData.setBuildingId(buildingId); - publicData.setUseWaterTemp(avgTemp); - publicData.setBackWaterTemp(avgTemp); - nowPublicDataService.saveNowHistoryPublicData(publicData); - } - } + int count = buildingService.selectPumpCount(buildingId); //楼栋热泵数 + if (count > 0) { + String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); + for (Map.Entry entry : map.entrySet()) { + addr = entry.getKey(); + data = entry.getValue(); + if (addr != null && Integer.parseInt(addr) <= count) { + nowDataService.saveNowHistoryData3(addr, "温度变送器", data, "waterTemp", buildingId); + nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存时间点温度 + } + } + log.info("温度变送器:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); + String avgTemp = nowDataService.selectAve(buildingId); + NowPublicDataEntity publicData = new NowPublicDataEntity(); + publicData.setBuildingId(buildingId); + publicData.setUseWaterTemp(avgTemp); + publicData.setBackWaterTemp(avgTemp); + nowPublicDataService.saveNowHistoryPublicData(publicData); + } + } // }); - } + } - // 温度变送器,长度42,读功能03 - public String analysisMulTempOrder4852(final String receiveData, final String registerAddr,final String brand,String buildingId, String buildingName) { - String result="fail"; - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 - byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); - int checkNum = CRC16.CRC16_MODBUS(strOrder); - String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); - checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - //log.info("温度变送器报文检验成功: " + receiveData); - String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - String data = ""; - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 - Map map= new HashMap<>(); - String L1=checkStr.substring(6, 10); //1路 - map.put("1",String.valueOf(ExchangeStringUtil.parseHex4(L1)/10)); - String L2=checkStr.substring(10, 14); //2路 - map.put("2",String.valueOf(ExchangeStringUtil.parseHex4(L2)/10)); - String L3=checkStr.substring(14, 18); //3路 - map.put("3",String.valueOf(ExchangeStringUtil.parseHex4(L3)/10)); - String L4=checkStr.substring(18, 22); //4路 - map.put("4",String.valueOf(ExchangeStringUtil.parseHex4(L4)/10)); - String L5=checkStr.substring(22, 26); //5路 - map.put("5",String.valueOf(ExchangeStringUtil.parseHex4(L5)/10)); - String L6=checkStr.substring(26, 30); //6路 - map.put("6",String.valueOf(ExchangeStringUtil.parseHex4(L6)/10)); - String L7=checkStr.substring(30, 34); //7路 - map.put("7",String.valueOf(ExchangeStringUtil.parseHex4(L7)/10)); - String L8=checkStr.substring(34, 38); //8路 - map.put("8",String.valueOf(ExchangeStringUtil.parseHex4(L8)/10)); - int count=buildingService.selectPumpCount(buildingId); //楼栋热泵数 - if (count>0){ - for (Map.Entry entry : map.entrySet()) { - addr=entry.getKey(); - data=entry.getValue(); - if(addr!=null && Integer.valueOf(addr)<=count){ - nowDataService.saveNowHistoryData3(addr,"温度变送器",data,"waterTemp",buildingId); - nowDataService.proWaterTemp(dateStr,buildingId,addr);//保存时间点温度 - } - } - log.info("温度变送器:" + addr+",保存数据库成功!楼栋名称:"+buildingName); - String avgTemp=nowDataService.selectAve(buildingId); - NowPublicDataEntity publicData=new NowPublicDataEntity(); - publicData.setBuildingId(buildingId); - publicData.setUseWaterTemp(avgTemp); - publicData.setBackWaterTemp(avgTemp); - publicData.setSingleTemp(map.get("1"));//编号最小的热泵温度作为单箱温度 - nowPublicDataService.saveNowHistoryPublicData(publicData); - result = JSON.toJSONString(map); //map转json字符串 - } - } - }else{ - log.info("温度变送器报文检验失败: " + receiveData); - } - return result; - } + // 温度变送器,长度42,读功能03 + public String analysisMulTempOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { + String result = "fail"; + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + String dateStr = sdf1.format(date); + String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + //log.info("温度变送器报文检验成功: " + receiveData); + String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + String data = ""; + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 + Map map = new HashMap<>(); + String L1 = checkStr.substring(6, 10); //1路 + map.put("1", String.valueOf(ExchangeStringUtil.parseHex4(L1) / 10)); + String L2 = checkStr.substring(10, 14); //2路 + map.put("2", String.valueOf(ExchangeStringUtil.parseHex4(L2) / 10)); + String L3 = checkStr.substring(14, 18); //3路 + map.put("3", String.valueOf(ExchangeStringUtil.parseHex4(L3) / 10)); + String L4 = checkStr.substring(18, 22); //4路 + map.put("4", String.valueOf(ExchangeStringUtil.parseHex4(L4) / 10)); + String L5 = checkStr.substring(22, 26); //5路 + map.put("5", String.valueOf(ExchangeStringUtil.parseHex4(L5) / 10)); + String L6 = checkStr.substring(26, 30); //6路 + map.put("6", String.valueOf(ExchangeStringUtil.parseHex4(L6) / 10)); + String L7 = checkStr.substring(30, 34); //7路 + map.put("7", String.valueOf(ExchangeStringUtil.parseHex4(L7) / 10)); + String L8 = checkStr.substring(34, 38); //8路 + map.put("8", String.valueOf(ExchangeStringUtil.parseHex4(L8) / 10)); + int count = buildingService.selectPumpCount(buildingId); //楼栋热泵数 + if (count > 0) { + for (Map.Entry entry : map.entrySet()) { + addr = entry.getKey(); + data = entry.getValue(); + if (addr != null && Integer.valueOf(addr) <= count) { + nowDataService.saveNowHistoryData3(addr, "温度变送器", data, "waterTemp", buildingId); + nowDataService.proWaterTemp(dateStr, buildingId, addr);//保存时间点温度 + } + } + log.info("温度变送器:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); + String avgTemp = nowDataService.selectAve(buildingId); + NowPublicDataEntity publicData = new NowPublicDataEntity(); + publicData.setBuildingId(buildingId); + publicData.setUseWaterTemp(avgTemp); + publicData.setBackWaterTemp(avgTemp); + publicData.setSingleTemp(map.get("1"));//编号最小的热泵温度作为单箱温度 + nowPublicDataService.saveNowHistoryPublicData(publicData); + result = JSON.toJSONString(map); //map转json字符串 + } + } + } else { + log.info("温度变送器报文检验失败: " + receiveData); + } + return result; + } - // 温控,长度18,读功能03,用于检测水箱水温 - public void analysisTempOrder485(final String receiveData, final String registerAddr,final String brand,String buildingId, String buildingName) { + // 温控,长度18,读功能03,用于检测水箱水温 + public void analysisTempOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { // threadPoolService.execute(() -> { - // 检验报文 - String checkStr = receiveData.substring(0, receiveData.length() - 4); - byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); - int checkNum = CRC16.CRC16_MODBUS(strOrder); - String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); - checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); - if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - log.info("温控报文检验失败: " + receiveData); - } - String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - String data = ""; - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 - data=ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); - Double fdata=Double.parseDouble(data)/10; - if (fdata<=25){ - fdata=25.0; - }else if (fdata>=65){ - fdata=65.0; - } - nowDataService.saveNowHistoryData2(addr,"温控",String.valueOf(fdata),"waterTemp",buildingId); - String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); - nowDataService.proWaterTemp(dateStr,buildingId,"");//保存时间点温度 - String avgTemp=nowDataService.selectAve(buildingId); - NowPublicDataEntity publicData=new NowPublicDataEntity(); - publicData.setBuildingId(buildingId); - publicData.setUseWaterTemp(avgTemp); - publicData.setBackWaterTemp(avgTemp); - publicData.setSingleTemp(String.valueOf(fdata));//单箱温度 - nowPublicDataService.saveNowHistoryPublicData(publicData); - log.info("温控号:" + addr+",温度值:"+fdata+",保存数据库成功!楼栋名称:"+buildingName); - } + // 检验报文 + String checkStr = receiveData.substring(0, receiveData.length() - 4); + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + log.info("温控报文检验失败: " + receiveData); + return; + } + String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + String data = ""; + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 + data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); + Double fdata = Double.parseDouble(data) / 10; + if (fdata <= 25) { + fdata = 25.0; + } else if (fdata >= 65) { + fdata = 65.0; + } + nowDataService.saveNowHistoryData2(addr, "温控", String.valueOf(fdata), "waterTemp", buildingId); + String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); + nowDataService.proWaterTemp(dateStr, buildingId, "");//保存时间点温度 + String avgTemp = nowDataService.selectAve(buildingId); + NowPublicDataEntity publicData = new NowPublicDataEntity(); + publicData.setBuildingId(buildingId); + publicData.setUseWaterTemp(avgTemp); + publicData.setBackWaterTemp(avgTemp); + publicData.setSingleTemp(String.valueOf(fdata));//单箱温度 + nowPublicDataService.saveNowHistoryPublicData(publicData); + log.info("温控号:" + addr + ",温度值:" + fdata + ",保存数据库成功!楼栋名称:" + buildingName); + } // }); - } + } - // 压变,长度14,18读功能03 - public void analysisPressureOrder485(final String receiveData, final String registerAddr,final String brand,String buildingId, String buildingName) { -// if (!Constant.CONTROL_WEB_FLAG) { + // 压变,长度14,18读功能03 + public void analysisPressureOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { // threadPoolService.execute(() -> { - String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 - byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); - int checkNum = CRC16.CRC16_MODBUS(strOrder); - String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); - checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); - String sValue=null; - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - String data = ""; -// String buildingName=buildingService.queryBuildingName(buildingId); //查询楼栋名称 - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 - Double wtHeight=0.0; - if (brand==null || brand.equals("")){ - float fdata=ExchangeStringUtil.hexToSingle(checkStr.substring(6, 14));//十六进制转浮点型 - wtHeight=fdata*1.02; //通过压力求水高 - }else if (brand.equals("澳升") || brand.equals("汝翊")){ - data=ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));//十六进制转整形 - wtHeight=Double.parseDouble(data)/100*0.102; //通过压力求水高 - } - Double tankHeight=buildingService.queryTankHeight(buildingId);//水箱高,从数据库获取 - if (tankHeight==null){ - tankHeight=2.0; - } - Double wtLevel=wtHeight/tankHeight*100; //水箱水位 - log.info("------水箱水高:"+wtLevel+"------"); - if (wtLevel<=0){ - wtLevel=0.0; - }else if (wtLevel>=100){ - wtLevel=100.0; - } - DecimalFormat df = new DecimalFormat("0.0"); - String strWtLevel=df.format(wtLevel); - nowDataService.saveNowHistoryData2(addr,"压变",strWtLevel,"waterLevel",buildingId); - log.info("压变号:" + addr+",保存数据库成功!楼栋名称:"+buildingName); - nowDataService.proWaterLevel(dateStr,buildingId); //楼栋水位 - log.info("------保存每栋楼小时水位情况"+dateStr+"------"); - } - }else{ - log.info("压变报文检验失败: " + receiveData); - } + String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + log.info("压变报文检验失败: " + receiveData); + return; + } + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + String dateStr = sdf1.format(date); + String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + String data = ""; + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 + Double wtHeight = 0.0; + if (brand == null || brand.equals("")) { + float fdata = ExchangeStringUtil.hexToSingle(checkStr.substring(6, 14));//十六进制转浮点型 + wtHeight = fdata * 1.02; //通过压力求水高 + } else if (brand.equals("澳升") || brand.equals("汝翊")) { + data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));//十六进制转整形 + wtHeight = Double.parseDouble(data) / 100 * 0.102; //通过压力求水高 + } + Double tankHeight = buildingService.queryTankHeight(buildingId);//水箱高,从数据库获取 + if (tankHeight == null) { + tankHeight = 2.0; + } + Double wtLevel = wtHeight / tankHeight * 100; //水箱水位 + log.info("------水箱水高:" + wtLevel + "------"); + if (wtLevel <= 0) { + wtLevel = 0.0; + } else if (wtLevel >= 100) { + wtLevel = 100.0; + } + DecimalFormat df = new DecimalFormat("0.0"); + String strWtLevel = df.format(wtLevel); + nowDataService.saveNowHistoryData2(addr, "压变", strWtLevel, "waterLevel", buildingId); + log.info("压变号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); + nowDataService.proWaterLevel(dateStr, buildingId); //楼栋水位 + log.info("------保存每栋楼小时水位情况" + dateStr + "------"); + } // }); -// } - } + } - // 压变,长度14,18读功能03 - public String analysisPressureOrder4852(final String receiveData, final String registerAddr,final String brand,String buildingId, final String buildingName) { - String result="fail"; - String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 - byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); - int checkNum = CRC16.CRC16_MODBUS(strOrder); - String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); - checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); - String sValue=null; - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - String data = ""; - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 - Double wtHeight=0.0; - if (brand==null || brand.equals("")){ - float fdata=ExchangeStringUtil.hexToSingle(checkStr.substring(6, 14));//十六进制转浮点型 - wtHeight=fdata*1.02; //通过压力求水高 - }else if (brand.equals("澳升") || brand.equals("汝翊")){ - data=ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));//十六进制转整形 - wtHeight=Double.parseDouble(data)/100*0.102; //通过压力求水高 - } - Double tankHeight=buildingService.queryTankHeight(buildingId);//水箱高,从数据库获取 - if (tankHeight==null){ - tankHeight=2.0; - } - Double wtLevel=wtHeight/tankHeight*100; //水箱水位 - log.info("------水箱水高:"+wtLevel+"------"); - if (wtLevel<=0){ - wtLevel=0.0; - }else if (wtLevel>=100){ - wtLevel=100.0; - } - DecimalFormat df = new DecimalFormat("0.0"); - String strWtLevel=df.format(wtLevel); - result=strWtLevel; - nowDataService.saveNowHistoryData2(addr,"压变",strWtLevel,"waterLevel",buildingId); - log.info("压变号:" + addr+",保存数据库成功!楼栋名称:"+buildingName); - nowDataService.proWaterLevel(dateStr,buildingId); //楼栋水位 - log.info("------保存每栋楼小时水位情况------"+dateStr); - } - }else{ - log.info("压变报文检验失败: " + receiveData); - } - return result; - } + // 压变,长度14,18读功能03 + public String analysisPressureOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, final String buildingName) { + String result = "fail"; + String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + String dateStr = sdf1.format(date); + String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + String data = ""; + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 + Double wtHeight = 0.0; + if (StringUtils.isBlank(brand)) { + float fdata = ExchangeStringUtil.hexToSingle(checkStr.substring(6, 14));//十六进制转浮点型 + wtHeight = fdata * 1.02; //通过压力求水高 + } else if (brand.equals("澳升") || brand.equals("汝翊")) { + data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));//十六进制转整形 + wtHeight = Double.parseDouble(data) / 100 * 0.102; //通过压力求水高 + } + Double tankHeight = buildingService.queryTankHeight(buildingId);//水箱高,从数据库获取 + if (tankHeight == null) { + tankHeight = 2.0; + } + Double wtLevel = wtHeight / tankHeight * 100; //水箱水位 + log.info("------水箱水高:" + wtLevel + "------"); + if (wtLevel <= 0) { + wtLevel = 0.0; + } else if (wtLevel >= 100) { + wtLevel = 100.0; + } + DecimalFormat df = new DecimalFormat("0.0"); + String strWtLevel = df.format(wtLevel); + result = strWtLevel; + nowDataService.saveNowHistoryData2(addr, "压变", strWtLevel, "waterLevel", buildingId); + log.info("压变号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); + nowDataService.proWaterLevel(dateStr, buildingId); //楼栋水位 + log.info("------保存每栋楼小时水位情况------" + dateStr); + } + } else { + log.info("压变报文检验失败: " + receiveData); + } + return result; + } - // 水位开关,长度42,128 - public void analysisRelayOrder485(final String receiveData, final String registerAddr,final String brand,String buildingId, String buildingName) { + // 水位开关,长度42,128 + public void analysisRelayOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { // threadPoolService.execute(() -> { - String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); - String l1=""; - String l2=""; - String l3=""; - String l4=""; - String l5=""; - String l6=""; - String l7=""; - String l8=""; - String waterLevelSet=""; - String addr=""; - if (brand==null || brand.equals("") || brand.equals("中凯")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 - addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); - if (registerAddr!=null && !registerAddr.equals("")) { - if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 - l1 = checkStr.substring(4, 6); - l2 = checkStr.substring(20, 22); - l3 = checkStr.substring(36, 38); - l4 = checkStr.substring(52, 54); - l5 = checkStr.substring(68, 70); - l6 = checkStr.substring(84, 86); - l7 = checkStr.substring(100, 102); - l8 = checkStr.substring(116, 118); - } else if (registerAddr.equals("0012")) { - log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); - } - } - }else if (brand.equals("远向")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 - String checkWord=ExchangeStringUtil.getStrCRC16(checkStr); - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - if (checkStr.substring(2, 4).equals("03")) { - if (registerAddr!=null && !registerAddr.equals("")){ + String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); + String l1 = ""; + String l2 = ""; + String l3 = ""; + String l4 = ""; + String l5 = ""; + String l6 = ""; + String l7 = ""; + String l8 = ""; + String waterLevelSet = ""; + String addr = ""; + if (brand == null || brand.equals("") || brand.equals("中凯")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 + addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); + if (registerAddr != null && !registerAddr.equals("")) { + if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 + l1 = checkStr.substring(4, 6); + l2 = checkStr.substring(20, 22); + l3 = checkStr.substring(36, 38); + l4 = checkStr.substring(52, 54); + l5 = checkStr.substring(68, 70); + l6 = checkStr.substring(84, 86); + l7 = checkStr.substring(100, 102); + l8 = checkStr.substring(116, 118); + } else if (registerAddr.equals("0012")) { + log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); + } + } + } else if (brand.equals("远向")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 + String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); + if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + if (checkStr.substring(2, 4).equals("03")) { + if (registerAddr != null && !registerAddr.equals("")) { // if (registerAddr.equals("0018")){ - l1=checkStr.substring(6,10); - l2=checkStr.substring(10,14); - l3=checkStr.substring(14,18); - l4=checkStr.substring(18,22); - l5=checkStr.substring(22,26); - l6=checkStr.substring(26,30); - l7=checkStr.substring(30,34); - l8=checkStr.substring(34,38); + l1 = checkStr.substring(6, 10); + l2 = checkStr.substring(10, 14); + l3 = checkStr.substring(14, 18); + l4 = checkStr.substring(18, 22); + l5 = checkStr.substring(22, 26); + l6 = checkStr.substring(26, 30); + l7 = checkStr.substring(30, 34); + l8 = checkStr.substring(34, 38); // } - } - } else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) { - log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! " ); - } - }else{ - log.info("水位开关报文检验失败: " + receiveData); - } - }else if (brand.equals("顶威")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 - String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 - if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4,receiveData.length()-2))) { - //表号,12位 - String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) - + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); - meterId = String.format("%012d", Long.parseLong(meterId)); - if (registerAddr!=null && !registerAddr.equals("")){ - if (registerAddr.equals("0102")){ - String data=receiveData.substring(26,28); - data=ExchangeStringUtil.cutThree(data); - data=ExchangeStringUtil.addZeroForNum(data,2); - if (data.equalsIgnoreCase("00")){//全闭 - waterLevelSet="100"; //100% - }else if(data.equalsIgnoreCase("01")){ - waterLevelSet="90"; //90% - }else if(data.equalsIgnoreCase("03")){ - waterLevelSet="85"; - }else if(data.equalsIgnoreCase("07")){ - waterLevelSet="80"; - }else if(data.equalsIgnoreCase("0F")){ - waterLevelSet="75"; - }else if(data.equalsIgnoreCase("1F")){ - waterLevelSet="70"; - }else if(data.equalsIgnoreCase("3F")){ - waterLevelSet="65"; - }else if(data.equalsIgnoreCase("7F")){ - waterLevelSet="60"; - }else if(data.equalsIgnoreCase("FF")){ //全开 - waterLevelSet="50"; - }else if(data.equalsIgnoreCase("24")){ - waterLevelSet="自动"; - } - nowDataService.saveNowHistoryData2(meterId,"水位开关",waterLevelSet,"levelSet",buildingId); - log.info("水位开关号:" + meterId+",保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("0407")){ - log.info("时间: " + dateStr + ",继电器ID: " + meterId + ",操作成功! "); - } - } - }else{ - log.info("水位开关报文检验失败: " + receiveData); - } - } - if (registerAddr!=null && !registerAddr.equals("")){ - if (registerAddr.equals("0017") || registerAddr.equals("0018")){ - if (l1.equals("12") || l1.equals("0001")){ - waterLevelSet="90"; - }else if (l2.equals("12") || l2.equals("0001")){ - waterLevelSet="80"; - }else if (l3.equals("12") || l3.equals("0001")){ - waterLevelSet="70"; - }else if (l4.equals("12") || l4.equals("0001")){ - waterLevelSet="60"; - }else if (l5.equals("12") || l5.equals("0001")){ - waterLevelSet="50"; - }else if (l6.equals("12") || l6.equals("0001")){ - waterLevelSet="40"; - } - //全开或者全关 - if (l1.equals("12") && l2.equals("12") && l3.equals("12") && l4.equals("12") && l5.equals("12") && l6.equals("12")){ - waterLevelSet="40"; - }else if (l1.equals("11") && l2.equals("11") && l3.equals("11") && l4.equals("11") && l5.equals("11") && l6.equals("11")){ - waterLevelSet="100"; - }else if (l1.equals("0001") && l2.equals("0001") && l3.equals("0001") && l4.equals("0001") && l5.equals("0001") && l6.equals("0001")){ - waterLevelSet="40"; - }else if(l1.equals("0000") && l2.equals("0000") && l3.equals("0000") && l4.equals("0000") && l5.equals("0000") && l6.equals("0000")){ - waterLevelSet="100"; - } - nowDataService.saveNowHistoryData2(addr,"水位开关",waterLevelSet,"levelSet",buildingId); - log.info("水位开关保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equals("0010")){ - NowPublicDataEntity publicData=new NowPublicDataEntity(); - publicData.setBuildingId(buildingId); - if (l1.equals("0001")){ //l路,0000表示有输入,0001表示无输入 - publicData.setUseWater("运行"); //供水 - publicData.setBackWater("运行");//回水 - }else { - publicData.setUseWater("不运行"); - publicData.setBackWater("不运行"); - } - log.info("-----------------供水/回水状态:"+l1+"-----------------"); - if (l2.equals("0001")){ //2路 //补水 - publicData.setUpWater("运行"); - }else { - publicData.setUpWater("不运行"); - } - log.info("-----------------补水状态:"+l2+"-----------------"); - nowPublicDataService.saveNowHistoryPublicData(publicData); - log.info("-----------------状态保存数据库成功!楼栋名称:"+buildingName+"-----------------"); - } - } + } + } else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) { + log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); + } + } else { + log.info("水位开关报文检验失败: " + receiveData); + } + } else if (brand.equals("顶威")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 + String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 + if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { + //表号,12位 + String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) + + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); + meterId = String.format("%012d", Long.parseLong(meterId)); + if (registerAddr != null && !registerAddr.equals("")) { + if (registerAddr.equals("0102")) { + String data = receiveData.substring(26, 28); + data = ExchangeStringUtil.cutThree(data); + data = ExchangeStringUtil.addZeroForNum(data, 2); + if (data.equalsIgnoreCase("00")) {//全闭 + waterLevelSet = "100"; //100% + } else if (data.equalsIgnoreCase("01")) { + waterLevelSet = "90"; //90% + } else if (data.equalsIgnoreCase("03")) { + waterLevelSet = "85"; + } else if (data.equalsIgnoreCase("07")) { + waterLevelSet = "80"; + } else if (data.equalsIgnoreCase("0F")) { + waterLevelSet = "75"; + } else if (data.equalsIgnoreCase("1F")) { + waterLevelSet = "70"; + } else if (data.equalsIgnoreCase("3F")) { + waterLevelSet = "65"; + } else if (data.equalsIgnoreCase("7F")) { + waterLevelSet = "60"; + } else if (data.equalsIgnoreCase("FF")) { //全开 + waterLevelSet = "50"; + } else if (data.equalsIgnoreCase("24")) { + waterLevelSet = "自动"; + } + nowDataService.saveNowHistoryData2(meterId, "水位开关", waterLevelSet, "levelSet", buildingId); + log.info("水位开关号:" + meterId + ",保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0407")) { + log.info("时间: " + dateStr + ",继电器ID: " + meterId + ",操作成功! "); + } + } + } else { + log.info("水位开关报文检验失败: " + receiveData); + } + } + if (registerAddr != null && !registerAddr.equals("")) { + if (registerAddr.equals("0017") || registerAddr.equals("0018")) { + if (l1.equals("12") || l1.equals("0001")) { + waterLevelSet = "90"; + } else if (l2.equals("12") || l2.equals("0001")) { + waterLevelSet = "80"; + } else if (l3.equals("12") || l3.equals("0001")) { + waterLevelSet = "70"; + } else if (l4.equals("12") || l4.equals("0001")) { + waterLevelSet = "60"; + } else if (l5.equals("12") || l5.equals("0001")) { + waterLevelSet = "50"; + } else if (l6.equals("12") || l6.equals("0001")) { + waterLevelSet = "40"; + } + //全开或者全关 + if (l1.equals("12") && l2.equals("12") && l3.equals("12") && l4.equals("12") && l5.equals("12") && l6.equals("12")) { + waterLevelSet = "40"; + } else if (l1.equals("11") && l2.equals("11") && l3.equals("11") && l4.equals("11") && l5.equals("11") && l6.equals("11")) { + waterLevelSet = "100"; + } else if (l1.equals("0001") && l2.equals("0001") && l3.equals("0001") && l4.equals("0001") && l5.equals("0001") && l6.equals("0001")) { + waterLevelSet = "40"; + } else if (l1.equals("0000") && l2.equals("0000") && l3.equals("0000") && l4.equals("0000") && l5.equals("0000") && l6.equals("0000")) { + waterLevelSet = "100"; + } + nowDataService.saveNowHistoryData2(addr, "水位开关", waterLevelSet, "levelSet", buildingId); + log.info("水位开关保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equals("0010")) { + NowPublicDataEntity publicData = new NowPublicDataEntity(); + publicData.setBuildingId(buildingId); + if (l1.equals("0001")) { //l路,0000表示有输入,0001表示无输入 + publicData.setUseWater("运行"); //供水 + publicData.setBackWater("运行");//回水 + } else { + publicData.setUseWater("不运行"); + publicData.setBackWater("不运行"); + } + log.info("-----------------供水/回水状态:" + l1 + "-----------------"); + if (l2.equals("0001")) { //2路 //补水 + publicData.setUpWater("运行"); + } else { + publicData.setUpWater("不运行"); + } + log.info("-----------------补水状态:" + l2 + "-----------------"); + nowPublicDataService.saveNowHistoryPublicData(publicData); + log.info("-----------------状态保存数据库成功!楼栋名称:" + buildingName + "-----------------"); + } + } // }); - } + } - // 水位开关,长度42,128 - public String analysisRelayOrder4852(final String receiveData, final String registerAddr,final String brand,String buildingId, final String buildingName) { - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - String l1=""; - String l2=""; - String l3=""; - String l4=""; - String l5=""; - String l6=""; - String l7=""; - String l8=""; - String waterLevelSet=""; - String addr=""; - if (brand==null || brand.equals("") || brand.equals("中凯")){ - // 检验报文 - String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 - addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); //地址 - if (registerAddr!=null && !registerAddr.equals("")){ - if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 - l1 = checkStr.substring(4, 6); - l2 = checkStr.substring(20, 22); - l3 = checkStr.substring(36, 38); - l4 = checkStr.substring(52, 54); - l5 = checkStr.substring(68, 70); - l6 = checkStr.substring(84, 86); - l7 = checkStr.substring(100, 102); - l8 = checkStr.substring(116, 118); - } else if (registerAddr.equalsIgnoreCase("0012")) { - log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); - } - } - }else if (brand.equals("远向")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 - String checkWord=ExchangeStringUtil.getStrCRC16(checkStr); - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { - if (registerAddr!=null && !registerAddr.equals("")){ - if (registerAddr.equalsIgnoreCase("0018")){ - l1=checkStr.substring(6,10); - l2=checkStr.substring(10,14); - l3=checkStr.substring(14,18); - l4=checkStr.substring(18,22); - l5=checkStr.substring(22,26); - l6=checkStr.substring(26,30); - l7=checkStr.substring(30,34); - l8=checkStr.substring(34,38); - } - } - } else if (checkStr.substring(2, 4).equalsIgnoreCase("06") || checkStr.substring(2, 4).equalsIgnoreCase("04")) { - log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! " ); - } - }else{ - log.info("水位开关报文检验失败: " + receiveData); - } - }else if (brand.equals("顶威")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 - String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 - if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4,receiveData.length() -2))) { - //表号,12位 - String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) - + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); - meterId = String.format("%012d", Long.parseLong(meterId)); - if (registerAddr!=null && !registerAddr.equals("")){ - if (registerAddr.equalsIgnoreCase("0102")){ - String data=receiveData.substring(24,26); - data=ExchangeStringUtil.cutThree(data); - data=ExchangeStringUtil.addZeroForNum(data,2); - if (data.equalsIgnoreCase("00")){//全闭 - waterLevelSet="100"; //100% - }else if(data.equalsIgnoreCase("01")){ - waterLevelSet="90"; - }else if(data.equalsIgnoreCase("03")){ - waterLevelSet="85"; - }else if(data.equalsIgnoreCase("07")){ - waterLevelSet="80"; - }else if(data.equalsIgnoreCase("0F")){ - waterLevelSet="75"; - }else if(data.equalsIgnoreCase("1F")){ - waterLevelSet="70"; - }else if(data.equalsIgnoreCase("3F")){ - waterLevelSet="65"; - }else if(data.equalsIgnoreCase("7F")){ - waterLevelSet="60"; - }else if(data.equalsIgnoreCase("FF")){ //全开 - waterLevelSet="50"; - }else if(data.equalsIgnoreCase("24")){ - waterLevelSet="自动"; - } - nowDataService.saveNowHistoryData2(meterId,"水位开关",waterLevelSet,"levelSet",buildingId); - log.info("水位开关"+meterId+",保存数据库成功!楼栋名称:"+buildingName); - }else if (registerAddr.equalsIgnoreCase("0407")){ - log.info("时间:" + dateStr + ",继电器ID:" + meterId + ",操作成功! "); - } - } - }else{ - log.info("水位开关报文检验失败: " + receiveData); - } - } - if (registerAddr!=null && !registerAddr.equals("")){ - if (registerAddr.equals("0017") || registerAddr.equals("0018")){ - if (l1.equals("12") || l1.equals("0001")){ - waterLevelSet="90"; - }else if (l2.equals("12") || l2.equals("0001")){ - waterLevelSet="80"; - }else if (l3.equals("12") || l3.equals("0001")){ - waterLevelSet="70"; - }else if (l4.equals("12") || l4.equals("0001")){ - waterLevelSet="60"; - }else if (l5.equals("12") || l5.equals("0001")){ - waterLevelSet="50"; - }else if (l6.equals("12") || l6.equals("0001")){ - waterLevelSet="40"; - } - //全开或者全关 - if (l1.equals("12") && l2.equals("12") && l3.equals("12") && l4.equals("12") && l5.equals("12") && l6.equals("12")){ - waterLevelSet="40"; - }else if (l1.equals("11") && l2.equals("11") && l3.equals("11") && l4.equals("11") && l5.equals("11") && l6.equals("11")){ - waterLevelSet="100"; - }else if (l1.equals("0001") && l2.equals("0001") && l3.equals("0001") && l4.equals("0001") && l5.equals("0001") && l6.equals("0001")){ - waterLevelSet="40"; - }else if(l1.equals("0000") && l2.equals("0000") && l3.equals("0000") && l4.equals("0000") && l5.equals("0000") && l6.equals("0000")){ - waterLevelSet="100"; - } - nowDataService.saveNowHistoryData2(addr,"水位开关",waterLevelSet,"levelSet",buildingId); - log.info("水位开关保存数据库成功!楼栋名称:"+buildingName); - } - } - log.info("--------------水位:"+registerAddr+","+waterLevelSet); - return waterLevelSet; - } + // 水位开关,长度42,128 + public String analysisRelayOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, final String buildingName) { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss"); + Date date = new Date(); + String dateStr = sdf1.format(date); + String l1 = ""; + String l2 = ""; + String l3 = ""; + String l4 = ""; + String l5 = ""; + String l6 = ""; + String l7 = ""; + String l8 = ""; + String waterLevelSet = ""; + String addr = ""; + if (brand == null || brand.equals("") || brand.equals("中凯")) { + // 检验报文 + String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 + addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); //地址 + if (registerAddr != null && !registerAddr.equals("")) { + if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 + l1 = checkStr.substring(4, 6); + l2 = checkStr.substring(20, 22); + l3 = checkStr.substring(36, 38); + l4 = checkStr.substring(52, 54); + l5 = checkStr.substring(68, 70); + l6 = checkStr.substring(84, 86); + l7 = checkStr.substring(100, 102); + l8 = checkStr.substring(116, 118); + } else if (registerAddr.equalsIgnoreCase("0012")) { + log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); + } + } + } else if (brand.equals("远向")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 + String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); + if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { + if (registerAddr != null && !registerAddr.equals("")) { + if (registerAddr.equalsIgnoreCase("0018")) { + l1 = checkStr.substring(6, 10); + l2 = checkStr.substring(10, 14); + l3 = checkStr.substring(14, 18); + l4 = checkStr.substring(18, 22); + l5 = checkStr.substring(22, 26); + l6 = checkStr.substring(26, 30); + l7 = checkStr.substring(30, 34); + l8 = checkStr.substring(34, 38); + } + } + } else if (checkStr.substring(2, 4).equalsIgnoreCase("06") || checkStr.substring(2, 4).equalsIgnoreCase("04")) { + log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); + } + } else { + log.info("水位开关报文检验失败: " + receiveData); + } + } else if (brand.equals("顶威")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 + String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 + if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { + //表号,12位 + String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) + + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); + meterId = String.format("%012d", Long.parseLong(meterId)); + if (registerAddr != null && !registerAddr.equals("")) { + if (registerAddr.equalsIgnoreCase("0102")) { + String data = receiveData.substring(24, 26); + data = ExchangeStringUtil.cutThree(data); + data = ExchangeStringUtil.addZeroForNum(data, 2); + if (data.equalsIgnoreCase("00")) {//全闭 + waterLevelSet = "100"; //100% + } else if (data.equalsIgnoreCase("01")) { + waterLevelSet = "90"; + } else if (data.equalsIgnoreCase("03")) { + waterLevelSet = "85"; + } else if (data.equalsIgnoreCase("07")) { + waterLevelSet = "80"; + } else if (data.equalsIgnoreCase("0F")) { + waterLevelSet = "75"; + } else if (data.equalsIgnoreCase("1F")) { + waterLevelSet = "70"; + } else if (data.equalsIgnoreCase("3F")) { + waterLevelSet = "65"; + } else if (data.equalsIgnoreCase("7F")) { + waterLevelSet = "60"; + } else if (data.equalsIgnoreCase("FF")) { //全开 + waterLevelSet = "50"; + } else if (data.equalsIgnoreCase("24")) { + waterLevelSet = "自动"; + } + nowDataService.saveNowHistoryData2(meterId, "水位开关", waterLevelSet, "levelSet", buildingId); + log.info("水位开关" + meterId + ",保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0407")) { + log.info("时间:" + dateStr + ",继电器ID:" + meterId + ",操作成功! "); + } + } + } else { + log.info("水位开关报文检验失败: " + receiveData); + } + } + if (registerAddr != null && !registerAddr.equals("")) { + if (registerAddr.equals("0017") || registerAddr.equals("0018")) { + if (l1.equals("12") || l1.equals("0001")) { + waterLevelSet = "90"; + } else if (l2.equals("12") || l2.equals("0001")) { + waterLevelSet = "80"; + } else if (l3.equals("12") || l3.equals("0001")) { + waterLevelSet = "70"; + } else if (l4.equals("12") || l4.equals("0001")) { + waterLevelSet = "60"; + } else if (l5.equals("12") || l5.equals("0001")) { + waterLevelSet = "50"; + } else if (l6.equals("12") || l6.equals("0001")) { + waterLevelSet = "40"; + } + //全开或者全关 + if (l1.equals("12") && l2.equals("12") && l3.equals("12") && l4.equals("12") && l5.equals("12") && l6.equals("12")) { + waterLevelSet = "40"; + } else if (l1.equals("11") && l2.equals("11") && l3.equals("11") && l4.equals("11") && l5.equals("11") && l6.equals("11")) { + waterLevelSet = "100"; + } else if (l1.equals("0001") && l2.equals("0001") && l3.equals("0001") && l4.equals("0001") && l5.equals("0001") && l6.equals("0001")) { + waterLevelSet = "40"; + } else if (l1.equals("0000") && l2.equals("0000") && l3.equals("0000") && l4.equals("0000") && l5.equals("0000") && l6.equals("0000")) { + waterLevelSet = "100"; + } + nowDataService.saveNowHistoryData2(addr, "水位开关", waterLevelSet, "levelSet", buildingId); + log.info("水位开关保存数据库成功!楼栋名称:" + buildingName); + } + } + log.info("--------------水位:" + registerAddr + "," + waterLevelSet); + return waterLevelSet; + } - // 热泵状态处理(水位开关),长度42,128 - public void analysisPumpStateOrder(final String receiveData, final String registerAddr,final String brand,String buildingId, String buildingName) { + // 热泵状态处理(水位开关),长度42,128 + public void analysisPumpStateOrder(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { // threadPoolService.execute(() -> { - String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); - String l1=""; - String l2=""; - String l3=""; - String l4=""; - String l5=""; - String l6=""; - String l7=""; - String l8=""; - String runState=""; - String addr=""; - Map map=new HashMap(); - if (brand==null || brand.equals("") || brand.equals("顶威")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文减,去校验码 - String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 - if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { - //表号,12位 - addr = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) - + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); - addr = addr.replaceAll("^0*", ""); - String data = checkStr.substring(24, 26); //截取数值 - data = ExchangeStringUtil.cutThree(data); - String strStatus = ExchangeStringUtil.hexString2binaryString(data); - strStatus = String.format("%08d", Long.parseLong(strStatus)); - if (strStatus.substring(7, 8).equals("1")) { - l1 = "1"; - } else { - l1 = "0"; - } - if (strStatus.substring(6, 7).equals("1")) { - l2 = "1"; - } else { - l2 = "0"; - } - if (strStatus.substring(5, 6).equals("1")) { - l3 = "1"; - } else { - l3 = "0"; - } - if (strStatus.substring(4, 5).equals("1")) { - l4 = "1"; - } else { - l4 = "0"; - } - if (strStatus.substring(3, 4).equals("1")) { - l5 = "1"; - } else { - l5 = "0"; - } - if (strStatus.substring(2, 3).equals("1")) { - l6 = "1"; - } else { - l6 = "0"; - } - if (strStatus.substring(1, 2).equals("1")) { - l7 = "1"; - } else { - l7 = "0"; - } - if (strStatus.substring(0, 1).equals("1")) { - l8 = "1"; - } else { - l8 = "0"; - } - } - }else if (brand.equals("中凯")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码 - addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); - //if (registerAddr!=null && !registerAddr.equals("")) { - //if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 - l1 = checkStr.substring(4, 6); - l2 = checkStr.substring(20, 22); - l3 = checkStr.substring(36, 38); - l4 = checkStr.substring(52, 54); - l5 = checkStr.substring(68, 70); - l6 = checkStr.substring(84, 86); - l7 = checkStr.substring(100, 102); - l8 = checkStr.substring(116, 118); - //} else if (registerAddr.equals("0012")) { - //log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! "); - //} - //} - }else if (brand.equals("远向")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 - String checkWord=ExchangeStringUtil.getStrCRC16(checkStr); - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - //if (checkStr.substring(2, 4).equals("03")) { - //if (registerAddr!=null && !registerAddr.equals("")){ - l1=checkStr.substring(6,10); - l2=checkStr.substring(10,14); - l3=checkStr.substring(14,18); - l4=checkStr.substring(18,22); - l5=checkStr.substring(22,26); - l6=checkStr.substring(26,30); - l7=checkStr.substring(30,34); - l8=checkStr.substring(34,38); - //} - //} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) { - //log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " ); - //} - }else{ - log.info("热泵状态报文检验失败: " + receiveData); - } - } - //if (registerAddr!=null && !registerAddr.equals("")){ - //if (registerAddr.equals("0017") || registerAddr.equals("0010")){ - if (l1.equals("12") || l1.equals("0001")){ //正常是0001 + String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); + String l1 = ""; + String l2 = ""; + String l3 = ""; + String l4 = ""; + String l5 = ""; + String l6 = ""; + String l7 = ""; + String l8 = ""; + String runState = ""; + String addr = ""; + Map map = new HashMap(); + if (brand == null || brand.equals("") || brand.equals("顶威")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文减,去校验码 + String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 + if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { + //表号,12位 + addr = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) + + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); + addr = addr.replaceAll("^0*", ""); + String data = checkStr.substring(24, 26); //截取数值 + data = ExchangeStringUtil.cutThree(data); + String strStatus = ExchangeStringUtil.hexString2binaryString(data); + strStatus = String.format("%08d", Long.parseLong(strStatus)); + if (strStatus.substring(7, 8).equals("1")) { + l1 = "1"; + } else { + l1 = "0"; + } + if (strStatus.substring(6, 7).equals("1")) { + l2 = "1"; + } else { + l2 = "0"; + } + if (strStatus.substring(5, 6).equals("1")) { + l3 = "1"; + } else { + l3 = "0"; + } + if (strStatus.substring(4, 5).equals("1")) { + l4 = "1"; + } else { + l4 = "0"; + } + if (strStatus.substring(3, 4).equals("1")) { + l5 = "1"; + } else { + l5 = "0"; + } + if (strStatus.substring(2, 3).equals("1")) { + l6 = "1"; + } else { + l6 = "0"; + } + if (strStatus.substring(1, 2).equals("1")) { + l7 = "1"; + } else { + l7 = "0"; + } + if (strStatus.substring(0, 1).equals("1")) { + l8 = "1"; + } else { + l8 = "0"; + } + } + } else if (brand.equals("中凯")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码 + addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); + //if (registerAddr!=null && !registerAddr.equals("")) { + //if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 + l1 = checkStr.substring(4, 6); + l2 = checkStr.substring(20, 22); + l3 = checkStr.substring(36, 38); + l4 = checkStr.substring(52, 54); + l5 = checkStr.substring(68, 70); + l6 = checkStr.substring(84, 86); + l7 = checkStr.substring(100, 102); + l8 = checkStr.substring(116, 118); + //} else if (registerAddr.equals("0012")) { + //log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! "); + //} + //} + } else if (brand.equals("远向")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 + String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); + if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + //if (checkStr.substring(2, 4).equals("03")) { + //if (registerAddr!=null && !registerAddr.equals("")){ + l1 = checkStr.substring(6, 10); + l2 = checkStr.substring(10, 14); + l3 = checkStr.substring(14, 18); + l4 = checkStr.substring(18, 22); + l5 = checkStr.substring(22, 26); + l6 = checkStr.substring(26, 30); + l7 = checkStr.substring(30, 34); + l8 = checkStr.substring(34, 38); + //} + //} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) { + //log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " ); + //} + } else { + log.info("热泵状态报文检验失败: " + receiveData); + } + } + //if (registerAddr!=null && !registerAddr.equals("")){ + //if (registerAddr.equals("0017") || registerAddr.equals("0010")){ + if (l1.equals("12") || l1.equals("0001")) { //正常是0001 // if (l1.equals("12") || l1.equals("0000") || l1.equals("1")){ - map.put("1","运行"); - }else { - map.put("1", "不运行"); - } - if (l2.equals("12") || l2.equals("0001")){ + map.put("1", "运行"); + } else { + map.put("1", "不运行"); + } + if (l2.equals("12") || l2.equals("0001")) { // if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){ - map.put("2","运行"); - }else{ - map.put("2","不运行"); - } - if (l3.equals("12") || l3.equals("0001")) { + map.put("2", "运行"); + } else { + map.put("2", "不运行"); + } + if (l3.equals("12") || l3.equals("0001")) { // if (l3.equals("12") || l3.equals("0000") || l3.equals("1")) { - map.put("3", "运行"); - }else{ - map.put("3","不运行"); - } - if (l4.equals("12") || l4.equals("0001")){ + map.put("3", "运行"); + } else { + map.put("3", "不运行"); + } + if (l4.equals("12") || l4.equals("0001")) { // if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){ - map.put("4","运行"); - }else{ - map.put("4","不运行"); - } - if (l5.equals("12") || l5.equals("0001")){ + map.put("4", "运行"); + } else { + map.put("4", "不运行"); + } + if (l5.equals("12") || l5.equals("0001")) { // if (l5.equals("12") || l5.equals("0000") || l5.equals("1")){ - map.put("5","运行"); - }else{ - map.put("5","不运行"); - } - if (l6.equals("12") || l6.equals("0001")){ + map.put("5", "运行"); + } else { + map.put("5", "不运行"); + } + if (l6.equals("12") || l6.equals("0001")) { // if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){ - map.put("6","运行"); - }else{ - map.put("6","不运行"); - } - if (l7.equals("12") || l7.equals("0001")){ + map.put("6", "运行"); + } else { + map.put("6", "不运行"); + } + if (l7.equals("12") || l7.equals("0001")) { // if (l7.equals("12") || l7.equals("0000") || l7.equals("1")){ - map.put("7","运行"); - }else{ - map.put("7","不运行"); - } - if (l8.equals("12") || l8.equals("0001")){ + map.put("7", "运行"); + } else { + map.put("7", "不运行"); + } + if (l8.equals("12") || l8.equals("0001")) { // if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){ - map.put("8","运行"); - }else{ - map.put("8","不运行"); - } - int count=buildingService.selectPumpCount(buildingId); //楼栋热泵数 - if (count>0){ - for (Map.Entry entry : map.entrySet()) { - addr=entry.getKey(); //获取Key值作为热泵ID - runState=entry.getValue(); - if(addr!=null && Integer.valueOf(addr)<=count){ - nowDataService.saveNowHistoryData3(addr,"热泵状态",runState,"runState",buildingId); - nowDataService.proPumpMinutes(buildingId,addr,runState); //计算热泵运行时长 - nowDataService.proWaterTemp(dateStr,buildingId,addr); //保存时间点温度 - log.info("计算热泵运行时长,楼栋名称:"+buildingName+",热泵编号:"+addr+",状态:"+runState); - } - } - log.info("热泵状态号:"+addr+",保存数据库成功!楼栋名称:"+buildingName); - } - //} - //} + map.put("8", "运行"); + } else { + map.put("8", "不运行"); + } + int count = buildingService.selectPumpCount(buildingId); //楼栋热泵数 + if (count > 0) { + for (Map.Entry entry : map.entrySet()) { + addr = entry.getKey(); //获取Key值作为热泵ID + runState = entry.getValue(); + if (addr != null && Integer.valueOf(addr) <= count) { + nowDataService.saveNowHistoryData3(addr, "热泵状态", runState, "runState", buildingId); + nowDataService.proPumpMinutes(buildingId, addr, runState); //计算热泵运行时长 + nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存时间点温度 + log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + runState); + } + } + log.info("热泵状态号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); + } + //} + //} // }); - } + } - // 热泵状态处理(水位开关),长度42,128 - public String analysisPumpStateOrder2(final String receiveData, final String registerAddr,final String brand,String buildingId, String buildingName) { - String result="fail"; - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - String l1=""; - String l2=""; - String l3=""; - String l4=""; - String l5=""; - String l6=""; - String l7=""; - String l8=""; - String runState=""; - String addr=""; - Map map=new HashMap(); - if (brand==null || brand.equals("") || brand.equals("顶威")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文减,去校验码 - String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 - if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { - //表号,12位 - addr = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) - + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); - addr = addr.replaceAll("^0*", ""); - String data = checkStr.substring(24, 26); //截取数值 - data = ExchangeStringUtil.cutThree(data); - String strStatus = ExchangeStringUtil.hexString2binaryString(data); - strStatus = String.format("%08d", Long.parseLong(strStatus)); - if (strStatus.substring(7, 8).equals("1")) { - l1 = "1"; - } else { - l1 = "0"; - } - if (strStatus.substring(6, 7).equals("1")) { - l2 = "1"; - } else { - l2 = "0"; - } - if (strStatus.substring(5, 6).equals("1")) { - l3 = "1"; - } else { - l3 = "0"; - } - if (strStatus.substring(4, 5).equals("1")) { - l4 = "1"; - } else { - l4 = "0"; - } - if (strStatus.substring(3, 4).equals("1")) { - l5 = "1"; - } else { - l5 = "0"; - } - if (strStatus.substring(2, 3).equals("1")) { - l6 = "1"; - } else { - l6 = "0"; - } - if (strStatus.substring(1, 2).equals("1")) { - l7 = "1"; - } else { - l7 = "0"; - } - if (strStatus.substring(0, 1).equals("1")) { - l8 = "1"; - } else { - l8 = "0"; - } - } - }else if (brand.equals("中凯")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码 - addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); - //if (registerAddr!=null && !registerAddr.equals("")) { - //if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 - l1 = checkStr.substring(4, 6); - l2 = checkStr.substring(20, 22); - l3 = checkStr.substring(36, 38); - l4 = checkStr.substring(52, 54); - l5 = checkStr.substring(68, 70); - l6 = checkStr.substring(84, 86); - l7 = checkStr.substring(100, 102); - l8 = checkStr.substring(116, 118); - //} else if (registerAddr.equals("0012")) { - //log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! "); - //} - //} - }else if (brand.equals("远向")){ - String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 - String checkWord=ExchangeStringUtil.getStrCRC16(checkStr); - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 - //if (checkStr.substring(2, 4).equals("03")) { - //if (registerAddr!=null && !registerAddr.equals("")){ - l1=checkStr.substring(6,10); - l2=checkStr.substring(10,14); - l3=checkStr.substring(14,18); - l4=checkStr.substring(18,22); - l5=checkStr.substring(22,26); - l6=checkStr.substring(26,30); - l7=checkStr.substring(30,34); - l8=checkStr.substring(34,38); - //} - //} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) { - //log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " ); - //} - }else{ - log.info("热泵状态报文检验失败: " + receiveData); - } - } - //if (registerAddr!=null && !registerAddr.equals("")){ - //if (registerAddr.equals("0017") || registerAddr.equals("0010")){ - if (l1.equals("12") || l1.equals("0001")){ //正常是0001 + // 热泵状态处理(水位开关),长度42,128 + public String analysisPumpStateOrder2(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { + String result = "fail"; + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + String dateStr = sdf1.format(date); + String l1 = ""; + String l2 = ""; + String l3 = ""; + String l4 = ""; + String l5 = ""; + String l6 = ""; + String l7 = ""; + String l8 = ""; + String runState = ""; + String addr = ""; + Map map = new HashMap(); + if (brand == null || brand.equals("") || brand.equals("顶威")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文减,去校验码 + String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 + if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { + //表号,12位 + addr = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) + + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); + addr = addr.replaceAll("^0*", ""); + String data = checkStr.substring(24, 26); //截取数值 + data = ExchangeStringUtil.cutThree(data); + String strStatus = ExchangeStringUtil.hexString2binaryString(data); + strStatus = String.format("%08d", Long.parseLong(strStatus)); + if (strStatus.substring(7, 8).equals("1")) { + l1 = "1"; + } else { + l1 = "0"; + } + if (strStatus.substring(6, 7).equals("1")) { + l2 = "1"; + } else { + l2 = "0"; + } + if (strStatus.substring(5, 6).equals("1")) { + l3 = "1"; + } else { + l3 = "0"; + } + if (strStatus.substring(4, 5).equals("1")) { + l4 = "1"; + } else { + l4 = "0"; + } + if (strStatus.substring(3, 4).equals("1")) { + l5 = "1"; + } else { + l5 = "0"; + } + if (strStatus.substring(2, 3).equals("1")) { + l6 = "1"; + } else { + l6 = "0"; + } + if (strStatus.substring(1, 2).equals("1")) { + l7 = "1"; + } else { + l7 = "0"; + } + if (strStatus.substring(0, 1).equals("1")) { + l8 = "1"; + } else { + l8 = "0"; + } + } + } else if (brand.equals("中凯")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码 + addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); + //if (registerAddr!=null && !registerAddr.equals("")) { + //if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 + l1 = checkStr.substring(4, 6); + l2 = checkStr.substring(20, 22); + l3 = checkStr.substring(36, 38); + l4 = checkStr.substring(52, 54); + l5 = checkStr.substring(68, 70); + l6 = checkStr.substring(84, 86); + l7 = checkStr.substring(100, 102); + l8 = checkStr.substring(116, 118); + //} else if (registerAddr.equals("0012")) { + //log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! "); + //} + //} + } else if (brand.equals("远向")) { + String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 + String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); + if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + //if (checkStr.substring(2, 4).equals("03")) { + //if (registerAddr!=null && !registerAddr.equals("")){ + l1 = checkStr.substring(6, 10); + l2 = checkStr.substring(10, 14); + l3 = checkStr.substring(14, 18); + l4 = checkStr.substring(18, 22); + l5 = checkStr.substring(22, 26); + l6 = checkStr.substring(26, 30); + l7 = checkStr.substring(30, 34); + l8 = checkStr.substring(34, 38); + //} + //} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) { + //log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " ); + //} + } else { + log.info("热泵状态报文检验失败: " + receiveData); + } + } + //if (registerAddr!=null && !registerAddr.equals("")){ + //if (registerAddr.equals("0017") || registerAddr.equals("0010")){ + if (l1.equals("12") || l1.equals("0001")) { //正常是0001 // if (l1.equals("12") || l1.equals("0000") || l1.equals("1")){ - map.put("1","运行"); - }else { - map.put("1", "不运行"); - } - if (l2.equals("12") || l2.equals("0001")){ + map.put("1", "运行"); + } else { + map.put("1", "不运行"); + } + if (l2.equals("12") || l2.equals("0001")) { // if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){ - map.put("2","运行"); - }else{ - map.put("2","不运行"); - } - if (l3.equals("12") || l3.equals("0001")) { + map.put("2", "运行"); + } else { + map.put("2", "不运行"); + } + if (l3.equals("12") || l3.equals("0001")) { // if (l3.equals("12") || l3.equals("0000") || l3.equals("1")) { - map.put("3", "运行"); - }else{ - map.put("3","不运行"); - } - if (l4.equals("12") || l4.equals("0001")){ + map.put("3", "运行"); + } else { + map.put("3", "不运行"); + } + if (l4.equals("12") || l4.equals("0001")) { // if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){ - map.put("4","运行"); - }else{ - map.put("4","不运行"); - } - if (l5.equals("12") || l5.equals("0001")){ + map.put("4", "运行"); + } else { + map.put("4", "不运行"); + } + if (l5.equals("12") || l5.equals("0001")) { // if (l5.equals("12") || l5.equals("0000") || l5.equals("1")){ - map.put("5","运行"); - }else{ - map.put("5","不运行"); - } - if (l6.equals("12") || l6.equals("0001")){ + map.put("5", "运行"); + } else { + map.put("5", "不运行"); + } + if (l6.equals("12") || l6.equals("0001")) { // if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){ - map.put("6","运行"); - }else{ - map.put("6","不运行"); - } - if (l7.equals("12") || l7.equals("0001")){ + map.put("6", "运行"); + } else { + map.put("6", "不运行"); + } + if (l7.equals("12") || l7.equals("0001")) { // if (l7.equals("12") || l7.equals("0000") || l7.equals("1")){ - map.put("7","运行"); - }else{ - map.put("7","不运行"); - } - if (l8.equals("12") || l8.equals("0001")){ + map.put("7", "运行"); + } else { + map.put("7", "不运行"); + } + if (l8.equals("12") || l8.equals("0001")) { // if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){ - map.put("8","运行"); - }else{ - map.put("8","不运行"); - } - int count=buildingService.selectPumpCount(buildingId); //楼栋热泵数 - if (count>0) { - for (Map.Entry entry : map.entrySet()) { - addr = entry.getKey(); //获取Key值作为热泵ID - runState = entry.getValue(); - if (addr != null && Integer.valueOf(addr) <= count) { - nowDataService.saveNowHistoryData3(addr, "热泵状态", runState, "runState", buildingId); - nowDataService.proPumpMinutes(buildingId, addr, runState); //计算热泵运行时长 - log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + runState); - } - } - log.info("热泵状态号" + addr + ",保存数据库成功!楼栋名称:" + buildingName); - result = JSON.toJSONString(map); //map转json字符串 - } - //} - //} - return result; - } + map.put("8", "运行"); + } else { + map.put("8", "不运行"); + } + int count = buildingService.selectPumpCount(buildingId); //楼栋热泵数 + if (count > 0) { + for (Map.Entry entry : map.entrySet()) { + addr = entry.getKey(); //获取Key值作为热泵ID + runState = entry.getValue(); + if (addr != null && Integer.valueOf(addr) <= count) { + nowDataService.saveNowHistoryData3(addr, "热泵状态", runState, "runState", buildingId); + nowDataService.proPumpMinutes(buildingId, addr, runState); //计算热泵运行时长 + log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + runState); + } + } + log.info("热泵状态号" + addr + ",保存数据库成功!楼栋名称:" + buildingName); + result = JSON.toJSONString(map); //map转json字符串 + } + //} + //} + return result; + } //状态检测 - public void analysisStateOrder485(final String dataStr,final String registerAddr,final String brand,String buildingId, String buildingName) { -// threadPoolService.execute(() -> { - if (dataStr.length() == 30) { - //检验报文 - String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码 - String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 - //返回的校验码与重新生成的校验码进行校验 - if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { - //表号,12位 - String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) - + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); - meterId = meterId.replaceAll("^0*",""); - //数值 - String data = checkStr.substring(24, 26); - data = ExchangeStringUtil.cutThree(data); - String strStatus=ExchangeStringUtil.hexString2binaryString(data); - strStatus = String.format("%08d", Long.parseLong(strStatus)); - String backWater; - if (strStatus.substring(7,8).equals("1")){//回水 - backWater="运行"; - }else{ - backWater="不运行"; - } - String hotPump; - if (strStatus.substring(6,7).equals("1")){//热泵 - hotPump="运行"; - }else{ - hotPump="不运行"; - } - String upWater; - if (strStatus.substring(5,6).equals("1")){//上水或者补水 - upWater="运行"; - }else{ - upWater="不运行"; - } - String useWater; - if (strStatus.substring(4,5).equals("1")){//用水或者供水 - useWater="运行"; - }else{ - useWater="不运行"; - } - NowPublicDataEntity publicData=new NowPublicDataEntity(); - publicData.setUseWater(useWater); - publicData.setUpWater(upWater); - publicData.setBackWater(backWater); - publicData.setBuildingId(buildingId); - try { - //通过状态检测保存热泵状态 - nowDataService.saveNowHistoryData2(meterId,"状态检测",hotPump,"runState",buildingId); - nowPublicDataService.saveNowHistoryPublicData(publicData); - nowDataService.proPumpMinutes(buildingId,"1",hotPump); //如果只有一台热泵,pumpId为1 - log.info("状态ID:"+ meterId+",回水:"+backWater+",补水:"+upWater+",供水:"+useWater+",热泵:"+hotPump+",保存数据成功!楼栋:"+buildingName); - } catch (Exception e) { -// e.printStackTrace(); - } - }else{ - log.info("状态检测报文检验失败: " + dataStr); - } - } -// }); - } + public void analysisStateOrder485(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) { + if (dataStr.length() == 30) { + //检验报文 + String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码 + String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 + //返回的校验码与重新生成的校验码进行校验 + if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { + //表号,12位 + String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) + + checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); + meterId = meterId.replaceAll("^0*", ""); + //数值 + String data = checkStr.substring(24, 26); + data = ExchangeStringUtil.cutThree(data); + String strStatus = ExchangeStringUtil.hexString2binaryString(data); + strStatus = String.format("%08d", Long.parseLong(strStatus)); + String backWater; + if (strStatus.substring(7, 8).equals("1")) {//回水 + backWater = "运行"; + } else { + backWater = "不运行"; + } + String hotPump; + if (strStatus.substring(6, 7).equals("1")) {//热泵 + hotPump = "运行"; + } else { + hotPump = "不运行"; + } + String upWater; + if (strStatus.substring(5, 6).equals("1")) {//上水或者补水 + upWater = "运行"; + } else { + upWater = "不运行"; + } + String useWater; + if (strStatus.substring(4, 5).equals("1")) {//用水或者供水 + useWater = "运行"; + } else { + useWater = "不运行"; + } + NowPublicDataEntity publicData = new NowPublicDataEntity(); + publicData.setUseWater(useWater); + publicData.setUpWater(upWater); + publicData.setBackWater(backWater); + publicData.setBuildingId(buildingId); + try { + //通过状态检测保存热泵状态 + nowDataService.saveNowHistoryData2(meterId, "状态检测", hotPump, "runState", buildingId); + nowPublicDataService.saveNowHistoryPublicData(publicData); + nowDataService.proPumpMinutes(buildingId, "1", hotPump); //如果只有一台热泵,pumpId为1 + log.info("状态ID:" + meterId + ",回水:" + backWater + ",补水:" + upWater + ",供水:" + useWater + ",热泵:" + hotPump + ",保存数据成功!楼栋:" + buildingName); + } catch (Exception e) { + log.error("解析状态检测异常==>", e); + } + } else { + log.info("状态检测报文检验失败: " + dataStr); + } + } + } - //时间控制器,长度26、22 - public void analysisTimeSetOrder485(final String receiveData, final String registerAddr,final String brand,String buildingId, String buildingName) { + //时间控制器,长度26、22 + public void analysisTimeSetOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { // threadPoolService.execute(() -> { - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - // 检验报文 - String checkStr = receiveData.substring(0, receiveData.length() - 4); - byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); - int checkNum = CRC16.CRC16_MODBUS(strOrder); - String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); - checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + String dateStr = sdf1.format(date); + // 检验报文 + String checkStr = receiveData.substring(0, receiveData.length() - 4); + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); - String sValue=null; - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - log.info("时控报文检验成功: " + receiveData); - //地址 - String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); - log.info("时控号: " + addr); + String sValue = null; + if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + log.info("时控报文检验成功: " + receiveData); + //地址 + String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); + log.info("时控号: " + addr); // System.out.println("时控号: " + addr); - String data = ""; - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 - int rec=receiveData.length(); + String data = ""; + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 + int rec = receiveData.length(); - if (rec==26) { //读时间设置值 - data=checkStr.substring(6,rec-4); - String curTimeBegin1=data.substring(0,2)+":"+data.substring(2,4); - String curTimeEnd1=data.substring(4,6)+":"+data.substring(6,8); - String curTimeBegin2=data.substring(8,10)+":"+data.substring(10,12); - String curTimeEnd2=data.substring(12,14)+":"+data.substring(14,16); + if (rec == 26) { //读时间设置值 + data = checkStr.substring(6, rec - 4); + String curTimeBegin1 = data.substring(0, 2) + ":" + data.substring(2, 4); + String curTimeEnd1 = data.substring(4, 6) + ":" + data.substring(6, 8); + String curTimeBegin2 = data.substring(8, 10) + ":" + data.substring(10, 12); + String curTimeEnd2 = data.substring(12, 14) + ":" + data.substring(14, 16); - }else if (rec==22){ //读校对时间 - data=checkStr.substring(8,rec-4); - String strDate="20"+data.substring(0,2)+"-"+data.substring(2,4)+"-"+data.substring(4,6); //拼接日期 - String strTime=data.substring(6,8)+":"+data.substring(8,10); //拼接时间 - } - } else if (checkStr.substring(2, 4).equalsIgnoreCase("05") || checkStr.substring(2, 4).equalsIgnoreCase("10")) { - log.info("时间: " + dateStr + ",时控ID: " + addr + ",操作成功! " ); + } else if (rec == 22) { //读校对时间 + data = checkStr.substring(8, rec - 4); + String strDate = "20" + data.substring(0, 2) + "-" + data.substring(2, 4) + "-" + data.substring(4, 6); //拼接日期 + String strTime = data.substring(6, 8) + ":" + data.substring(8, 10); //拼接时间 + } + } else if (checkStr.substring(2, 4).equalsIgnoreCase("05") || checkStr.substring(2, 4).equalsIgnoreCase("10")) { + log.info("时间: " + dateStr + ",时控ID: " + addr + ",操作成功! "); // System.out.println("时间: " + dateStr + ",时控ID: " + addr + ",操作成功! "); - } - } + } + } // }); - } + } - //时间控制器,长度26、22 - public String analysisTimeSetOrder4852(final String receiveData, final String registerAddr,final String brand,String buildingId, final String buildingName) { - String result="fail"; - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String dateStr = sdf1.format(date); - // 去掉空格 + //时间控制器,长度26、22 + public String analysisTimeSetOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, final String buildingName) { + String result = "fail"; + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + String dateStr = sdf1.format(date); + // 去掉空格 // String receiveData = receiveData1.replace(" ", ""); - // 检验报文 - String checkStr = receiveData.substring(0, receiveData.length() - 4); - byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); - int checkNum = CRC16.CRC16_MODBUS(strOrder); - String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); - checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + // 检验报文 + String checkStr = receiveData.substring(0, receiveData.length() - 4); + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); - String sValue=null; - if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { - log.info("时控报文检验成功: " + receiveData); + String sValue = null; + if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { + log.info("时控报文检验成功: " + receiveData); // System.out.println("时控报文检验成功: " + receiveData); - //地址 - String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); - log.info("时控号:" + addr); + //地址 + String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); + log.info("时控号:" + addr); // System.out.println("时控号: " + addr); - String data = ""; - if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 - int rec=receiveData.length(); + String data = ""; + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 + int rec = receiveData.length(); - if (rec==26) { //读时间设置值 - data=checkStr.substring(6,rec-4); - String curTimeBegin1=data.substring(0,2)+":"+data.substring(2,4); - String curTimeEnd1=data.substring(4,6)+":"+data.substring(6,8); - String curTimeBegin2=data.substring(8,10)+":"+data.substring(10,12); - String curTimeEnd2=data.substring(12,14)+":"+data.substring(14,16); - }else if (rec==22){ //读校对时间 - data=checkStr.substring(8,rec-4); - String strDate="20"+data.substring(0,2)+"-"+data.substring(2,4)+"-"+data.substring(4,6); //拼接日期 - String strTime=data.substring(6,8)+":"+data.substring(8,10); //拼接时间 - } - result=data; - } else if (checkStr.substring(2, 4).equalsIgnoreCase("05") || checkStr.substring(2, 4).equalsIgnoreCase("10")) { - log.info("时间:" + dateStr + ",时控ID:" + addr + ",操作成功! " ); + if (rec == 26) { //读时间设置值 + data = checkStr.substring(6, rec - 4); + String curTimeBegin1 = data.substring(0, 2) + ":" + data.substring(2, 4); + String curTimeEnd1 = data.substring(4, 6) + ":" + data.substring(6, 8); + String curTimeBegin2 = data.substring(8, 10) + ":" + data.substring(10, 12); + String curTimeEnd2 = data.substring(12, 14) + ":" + data.substring(14, 16); + } else if (rec == 22) { //读校对时间 + data = checkStr.substring(8, rec - 4); + String strDate = "20" + data.substring(0, 2) + "-" + data.substring(2, 4) + "-" + data.substring(4, 6); //拼接日期 + String strTime = data.substring(6, 8) + ":" + data.substring(8, 10); //拼接时间 + } + result = data; + } else if (checkStr.substring(2, 4).equalsIgnoreCase("05") || checkStr.substring(2, 4).equalsIgnoreCase("10")) { + log.info("时间:" + dateStr + ",时控ID:" + addr + ",操作成功! "); // System.out.println("时间: " + dateStr + ",时控ID: " + addr + ",操作成功! "); - result="success"; - } - } - return result; - } + result = "success"; + } + } + return result; + } - public static int dValue(String lastDate) throws ParseException { - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date lastTime = format.parse(lastDate); - long min = lastTime.getTime(); - Calendar calendar = Calendar.getInstance(); - long min1 = calendar.getTimeInMillis(); - long subtract = min1 - min; + public static int dValue(String lastDate) throws ParseException { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date lastTime = format.parse(lastDate); + long min = lastTime.getTime(); + Calendar calendar = Calendar.getInstance(); + long min1 = calendar.getTimeInMillis(); + long subtract = min1 - min; // System.out.println("相减值:" + subtract/(1000*60)); - return (int) subtract / (1000 * 60); - } + return (int) subtract / (1000 * 60); + } - // 判断是否存在寄存器地址 - public Boolean queryRegisterAddr(List stringList, String registerAddr) { - boolean flag = false; - for (int i = 0; i < stringList.size(); i++) { - if (stringList.get(i).equalsIgnoreCase(registerAddr)) { - flag = true; - break; - } - } - return flag; - } + // 判断是否存在寄存器地址 + public Boolean queryRegisterAddr(List stringList, String registerAddr) { + boolean flag = false; + for (int i = 0; i < stringList.size(); i++) { + if (stringList.get(i).equalsIgnoreCase(registerAddr)) { + flag = true; + break; + } + } + return flag; + } } diff --git a/user-service/src/main/resources/application.yml b/user-service/src/main/resources/application.yml index 3d7808a..9f96606 100644 --- a/user-service/src/main/resources/application.yml +++ b/user-service/src/main/resources/application.yml @@ -1,3 +1,3 @@ spring: profiles: - active: dev + active: prod diff --git a/热水新增脚本.sql b/热水新增脚本.sql new file mode 100644 index 0000000..48cf469 --- /dev/null +++ b/热水新增脚本.sql @@ -0,0 +1,5 @@ +-- 2023-11-10 新增索引 +create index pump_set_pump_id_building_id on pump_set(pump_id, building_id); + +create index now_data_building_id on pump_set(building_id); +create index now_data_pump_id on pump_set(pump_id);