From 3adb86d86f1e68b013bfd5083fb4a9c450b24f3d Mon Sep 17 00:00:00 2001 From: mh Date: Thu, 14 Mar 2024 15:17:12 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=9B2=E3=80=81=E6=A5=BC=E6=A0=8B=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=83=AD=E6=B3=B5=E4=B8=AA=E6=95=B0=E5=8F=82?= =?UTF-8?q?=E6=95=B0=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mh/user/constants/Constant.java | 10 + .../user/controller/BuildingController.java | 8 + .../controller/DeviceOperateController.java | 4 +- .../com/mh/user/entity/BuildingEntity.java | 1 + .../com/mh/user/mapper/BuildingMapper.java | 6 +- .../serialport/SerialPortSendReceive2.java | 132 ++++++------ .../mh/user/serialport/SerialPortSingle2.java | 13 +- .../impl/DeviceControlServiceImpl.java | 8 +- .../user/service/impl/NowDataServiceImpl.java | 17 +- .../impl/NowPublicDataServiceImpl.java | 11 +- .../user/utils/AnalysisReceiveOrder485.java | 202 +++++++++--------- .../com/mh/user/utils/GetReadOrder485.java | 92 ++++---- .../com/mh/user/utils/SendOrderUtils.java | 151 ------------- .../test/java/com/mh/user/TestJwtUtils.java | 21 +- 14 files changed, 272 insertions(+), 404 deletions(-) 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 d3b992b..c564c6f 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 @@ -40,6 +40,16 @@ public class Constant { public static final String BRAND_MEI_DI_TWO = "美的2"; + public static final String BRAND_RUI_XING = "瑞星"; + public static final String BRAND_YUAN_XIANG = "远向"; + + public static final String BRAND_DING_WEI = "顶威"; + + public static final String BRAND_ZHONG_KAI = "中凯"; + + private static final String RUNNING = "运行"; + + private static final String NOT_RUNNING = "不运行"; } diff --git a/user-service/src/main/java/com/mh/user/controller/BuildingController.java b/user-service/src/main/java/com/mh/user/controller/BuildingController.java index 924e692..0e69abc 100644 --- a/user-service/src/main/java/com/mh/user/controller/BuildingController.java +++ b/user-service/src/main/java/com/mh/user/controller/BuildingController.java @@ -172,6 +172,12 @@ public class BuildingController { case 6 : rolName = "实际入住数"; break; + case 7 : + rolName = "水箱高度"; + break; + case 8 : + rolName = "热泵个数"; + break; } if ((rol >= 1)&&(rol <= 4)&&(sCell.equals(""))){ msg = rolName + "不能为空" ; @@ -189,6 +195,8 @@ public class BuildingController { uploadEntity.setHouseCount(Integer.parseInt(deviceList.get(3))); //每层宿舍数 uploadEntity.setBedCount(Integer.parseInt(deviceList.get(4))); //床位数 uploadEntity.setCheckInCount(Integer.parseInt(deviceList.get(5))); //实际入住数 + uploadEntity.setTankHeight(Double.parseDouble(deviceList.get(6))); //实际入住数 + uploadEntity.setPumpCount(Integer.parseInt(deviceList.get(7))); //实际入住数 deviceList.clear(); diff --git a/user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java b/user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java index 3bbaee6..a5bf6ee 100644 --- a/user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java +++ b/user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java @@ -49,7 +49,7 @@ public class DeviceOperateController { public HttpResult operateDevice(@RequestBody List params) { try { Constant.WEB_FLAG = true; //单抄,暂时停止采集 - Thread.sleep(800); + Thread.sleep(1000); String returnStr = deviceControlService.readOrWriteDevice(params, Constant.WRITE); if (!StringUtils.isBlank(returnStr) && "fail".equals(returnStr)) { return HttpResult.error(500, "fail"); @@ -71,7 +71,7 @@ public class DeviceOperateController { public HttpResult readData(@RequestBody List params) { try { Constant.WEB_FLAG = true; //单抄,暂时停止采集 - Thread.sleep(800); + Thread.sleep(1000); String rtData = deviceControlService.readOrWriteDevice(params, Constant.READ); if (ExchangeStringUtil.getJSONType(rtData)) { Map map = JSONObject.parseObject(rtData); diff --git a/user-service/src/main/java/com/mh/user/entity/BuildingEntity.java b/user-service/src/main/java/com/mh/user/entity/BuildingEntity.java index 0830aac..550b35d 100644 --- a/user-service/src/main/java/com/mh/user/entity/BuildingEntity.java +++ b/user-service/src/main/java/com/mh/user/entity/BuildingEntity.java @@ -16,5 +16,6 @@ public class BuildingEntity { private String areaId; private String remarks; private Double tankHeight; + private int pumpCount; } diff --git a/user-service/src/main/java/com/mh/user/mapper/BuildingMapper.java b/user-service/src/main/java/com/mh/user/mapper/BuildingMapper.java index 29c2bfe..c7d4006 100644 --- a/user-service/src/main/java/com/mh/user/mapper/BuildingMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/BuildingMapper.java @@ -15,8 +15,8 @@ public interface BuildingMapper { * 保存楼栋信息 * @param buildingEntity */ - @Insert("insert into building(building_name,levels_count,begin_level,house_count,bed_count,check_in_count,area_id,remarks,tankHeight) values (" + - "#{buildingName},#{levelsCount},#{beginLevel},#{houseCount},#{bedCount},#{checkInCount},#{areaId},#{remarks},#{tankHeight})") + @Insert("insert into building(building_name,levels_count,begin_level,house_count,bed_count,check_in_count,area_id,remarks,tankHeight,pump_count) values (" + + "#{buildingName},#{levelsCount},#{beginLevel},#{houseCount},#{bedCount},#{checkInCount},#{areaId},#{remarks},#{tankHeight}, #{pumpCount})") int saveBuilding(BuildingEntity buildingEntity); /** @@ -35,6 +35,7 @@ public interface BuildingMapper { " , area_id = #{areaId} " + " , remarks = #{remarks} " + " , tankHeight = #{tankHeight} " + + " , pump_count = #{pumpCount} " + " where id = #{id} " + "") int updateBuilding(BuildingEntity buildingEntity); @@ -55,6 +56,7 @@ public interface BuildingMapper { @Result(property ="bedCount",column ="bed_count"), @Result(property="checkInCount",column="check_in_count"), @Result(property="areaId",column="area_id"), + @Result(property="pumpCount",column="pump_count"), @Result(property="remarks",column="remarks") }) 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 f0f0410..1f189d5 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 @@ -26,16 +26,9 @@ import java.util.stream.Collectors; */ @Slf4j public class SerialPortSendReceive2 { - - private String receiveStr = null; - // public SerialPort serialPort = null; - private int size = 0; - private int baudrate = 9600; - private String parity = null; List deviceManageEntityList; // 调用service ApplicationContext context = SpringBeanUtil.getApplicationContext(); - DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class); DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class); NowDataService nowDataService = context.getBean(NowDataService.class); BuildingService buildingService = context.getBean(BuildingService.class); @@ -54,8 +47,8 @@ public class SerialPortSendReceive2 { .filter(value -> value.getThread().equals(thread)) .sorted(Comparator.comparing(DeviceCodeParamEntity::getDataCom)) .collect(Collectors.toList()); -// size = deviceManageEntityList.size(); - for (int i = 0; i < deviceManageEntityList.size(); i++) { + int size = deviceManageEntityList.size(); + for (int i = 0; i < size; i++) { //判断网页端是否有操作设备的 if (Constant.WEB_FLAG) { if (serialPort != null) { @@ -65,13 +58,12 @@ public class SerialPortSendReceive2 { break; } //获取设备实际波特率 - baudrate = deviceManageEntityList.get(i).getBaudrate(); + int baudrate = deviceManageEntityList.get(i).getBaudrate(); //获取设备实际校验位 - parity = deviceManageEntityList.get(i).getParity(); + String parity = deviceManageEntityList.get(i).getParity(); String comName = deviceManageEntityList.get(i).getDataCom(); if (StringUtils.isBlank(comName)) { - Constant.FLAG = false;//可以采集的状态 log.info("-------------串口:" + comName + "不存在!-------------"); continue; } @@ -83,27 +75,36 @@ public class SerialPortSendReceive2 { String buildingName = buildingService.queryBuildingName(buildingId); //查询楼栋名称 try { //传入对应的串口参数并打开串口 - if (parity == null || parity.equals("") || parity.equalsIgnoreCase("none")) { + if (StringUtils.isBlank(parity) || parity.equalsIgnoreCase("none")) { serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } else { serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN); } + if (null == serialPort) { + continue; + } //向串口发送指令 - if (serialPort != null) { -// log.info("---------波特率:"+baudrate+",校验位:"+parity+" -----------"); - String sendStr = SendOrderUtils.getSendStr(deviceManageEntityList.get(i)); - SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType); - if (deviceType.equals("热泵")) { - Thread.sleep(4000); - } else { - Thread.sleep(2000); + String sendStr = SendOrderUtils.getSendStr(deviceManageEntityList.get(i)); + SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType); + if (deviceType.equals("热泵")) { + for (int j = 0; j < 4; j++) { + Thread.sleep(1000); + // 判断网页端是否有操作设备的 + if (Constant.WEB_FLAG) { + SerialTool.closePort(serialPort); + log.info("有指令下发退出定时采集"); + break; + } } } else { - continue; + Thread.sleep(2000); } } catch (Exception e) { - Constant.FLAG = false;//可以采集的状态 - log.error("发送窗口数据异常==>", e); + if (null != serialPort) { + SerialTool.closePort(serialPort); + log.error("发送窗口数据异常==>", e); + } + continue; } //从串口读取数据 @@ -112,9 +113,8 @@ public class SerialPortSendReceive2 { String dateStr = DateUtil.dateToString(date1, "yyyy-MM-dd HH:mm:ss"); if (bytes == null) { SerialTool.closePort(serialPort); - log.info("串口" + serialPort + "没有数据返回!" + i); + log.info("串口" + serialPort.getName() + "没有数据返回!" + i); log.info("----------------" + deviceType + "离线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); - Constant.FLAG = false;//可以采集的状态 String time1 = deviceInstallService.selectLastDate(deviceType, deviceAddr, buildingId); if (time1 == null) { time1 = dateStr; @@ -130,9 +130,14 @@ public class SerialPortSendReceive2 { } // 处理返回来的数据报文 dealReceiveData(dateStr, serialPort, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, bytes); + try { + SerialTool.closePort(serialPort); + log.info("关闭串口==" + serialPort.getName()); + } catch (Exception e) { + log.error("关闭串口失败!", e); + } } } catch (Exception e) { - Constant.FLAG = false;//可以采集的状态 log.error("-------------串口采集异常!----------->>", e); } } @@ -159,45 +164,37 @@ public class SerialPortSendReceive2 { String registerAddr, String brand, String buildingId, - String buildingName, byte[] bytes) throws InterruptedException { - receiveStr = ""; - receiveStr = ExchangeStringUtil.parseByte2HexStr(bytes); - //去掉空格和null - receiveStr = receiveStr.replace("null", ""); - receiveStr = receiveStr.replace(" ", ""); - log.info("串口" + serialPort + "接受第" + i + "数据:" + receiveStr + ",大小: " + receiveStr.length()); + String buildingName, byte[] bytes) { try { - SerialTool.closePort(serialPort); - log.info("关闭" + serialPort); - } catch (Exception e) { - Constant.WEB_FLAG = false;//可以采集的状态 - log.error("关闭" + serialPort + "失败!", e); - } - //返回值全部变成大写 - String receiveData = receiveStr.toUpperCase(); - //截取去掉FE - String dataStr; - if (receiveData.length() > 8) { - String str1 = receiveData.substring(0, 8); - String str2 = receiveData.substring(8); - dataStr = str1.replace("FE", "") + str2; - } else { - dataStr = receiveData.replace("FE", ""); - } - deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线 - log.info("----------------" + deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); - if (deviceType.equals("热泵")) { - String strState = nowDataService.selectState(buildingId, deviceAddr); - if (strState != null && strState.equals("离线")) { //采集到数据 - nowDataService.updateRunState(buildingId, deviceAddr, "不运行", buildingName); //监控界面状态表热泵在线状态 + String receiveStr = ""; + receiveStr = ExchangeStringUtil.parseByte2HexStr(bytes); + //去掉空格和null + receiveStr = receiveStr.replace("null", ""); + receiveStr = receiveStr.replace(" ", ""); + log.info("串口" + serialPort + "接受第" + i + "数据:" + receiveStr + ",大小: " + receiveStr.length()); + //返回值全部变成大写 + String receiveData = receiveStr.toUpperCase(); + //截取去掉FE + String dataStr; + if (receiveData.length() > 8) { + String str1 = receiveData.substring(0, 8); + String str2 = receiveData.substring(8); + dataStr = str1.replace("FE", "") + str2; + } else { + dataStr = receiveData.replace("FE", ""); + } + deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线 + log.info("----------------" + deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); + if (deviceType.equals("热泵")) { + String strState = nowDataService.selectState(buildingId, deviceAddr); + if (strState != null && strState.equals("离线")) { //采集到数据 + nowDataService.updateRunState(buildingId, deviceAddr, "不运行", buildingName); //监控界面状态表热泵在线状态 + } } - } - try { // 解析返回来的数据 analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, dataStr, analysisReceiveOrder485, nowDataService, buildingName); } catch (Exception e) { - Constant.WEB_FLAG = false;//可以采集的状态 - log.error(deviceManageEntityList.get(i).getDeviceType() + "保存数据库失败!" + i,e); + log.error("楼栋:" + buildingName + "设备类型:" + deviceType + "保存数据库失败!" + i,e); } } @@ -224,7 +221,9 @@ public class SerialPortSendReceive2 { } else if (deviceType.equals("时控")) { analysisReceiveOrder485.analysisTimeSetOrder485(dateStr,dataStr, registerAddr, brand, buildingId, buildingName); } else if (deviceType.equals("水位开关") && (Constant.REG_ADDR_0018.equals(registerAddr) || Constant.REG_ADDR_0017.equals(registerAddr))) { - analysisReceiveOrder485.analysisRelayOrder485(dateStr ,dataStr, registerAddr, brand, buildingId, buildingName); + SysParamEntity sysParamEntity = sysParamService.selectSysParam(); + String customName = sysParamEntity.getCustomName(); + analysisReceiveOrder485.analysisRelayOrder485(dateStr ,dataStr, registerAddr, brand, buildingId, buildingName, customName); } else if (dataStr.length() == 30 && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统 analysisReceiveOrder485.analysisStateOrder485(dataStr, registerAddr, brand, buildingId, buildingName); } else if (deviceType.equals("水位开关") && Constant.REG_ADDR_0010.equals(registerAddr)) { @@ -240,10 +239,11 @@ public class SerialPortSendReceive2 { String buildingId, String buildingName, AnalysisReceiveOrder485 analysisReceiveOrder485) { log.info("进入水位开关,地址==>{}", registerAddr); SysParamEntity sysParamEntity = sysParamService.selectSysParam(); - if (null != sysParamEntity && !StringUtils.isBlank(sysParamEntity.getCustomName())) { - if (sysParamEntity.getCustomName().contains(Constant.CUSTOM_NAME_HUAXIA) - || sysParamEntity.getCustomName().contains(Constant.CUSTOM_NAME_GUANGSHANG)) { - analysisReceiveOrder485.analysisRelayOrder485(dateStr, dataStr,registerAddr,brand,buildingId, buildingName); + String customName = sysParamEntity.getCustomName(); + if (!StringUtils.isBlank(customName)) { + if (customName.contains(Constant.CUSTOM_NAME_HUAXIA) + || customName.contains(Constant.CUSTOM_NAME_GUANGSHANG)) { + analysisReceiveOrder485.analysisRelayOrder485(dateStr, dataStr,registerAddr,brand,buildingId, buildingName, customName); } else { analysisReceiveOrder485.analysisPumpStateOrder(dateStr, dataStr, registerAddr, brand, buildingId, buildingName); } 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 2eda6df..a03f20c 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 @@ -75,15 +75,6 @@ public class SerialPortSingle2 { log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口", e); return "fail"; } -// //对返回数据进行相关解析处理 -// byte[] bytes = SerialTool.readFromPort(serialPort); //读取串口数据 -// if (null == bytes) { -// SerialTool.closePort(serialPort); -// log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口"); -// return "fail"; -// } -// String receiveStr = null; -// receiveStr = ExchangeStringUtil.printHexString(bytes); String receiveStr; if (serialPort != null) { receiveStr = CacheTools.waitReceiveMsg(serialPort.getName()); @@ -99,9 +90,6 @@ public class SerialPortSingle2 { String deviceType = deviceCodeParamEntity.getDeviceType(); String deviceAddr = deviceCodeParamEntity.getDeviceAddr(); String dataStr = ""; -// if ("水表".equals(deviceType) || "电表".equals(deviceType)) { -// dataStr = receiveData.replace("FE", ""); -// } if (receiveData.length() > 8 && ("水表".equals(deviceType) || "电表".equals(deviceType))) { String str1 = receiveData.substring(0, 8); String str2 = receiveData.substring(8); @@ -160,6 +148,7 @@ public class SerialPortSingle2 { log.info("-----------------------------" + serialPort.getName() + "单抄结束!-----------------------------"); return rtData; } catch (Exception e) { + assert serialPort != null; log.info("单抄串口" + serialPort.getName() + "异常,没有数据返回!关闭串口", e); } finally { try { diff --git a/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java index 63eec64..70ca9af 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java @@ -62,7 +62,7 @@ public class DeviceControlServiceImpl implements DeviceControlService { deviceAddr = list.get(0).getDeviceAddr(); } if (deviceAddr == null || deviceAddr.length() == 0) { - return "fail"; + return Constant.FAIL; } DeviceInstallEntity deviceInstallEntity = @@ -102,7 +102,7 @@ public class DeviceControlServiceImpl implements DeviceControlService { rtData = handlePressureTransducer(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); break; case "水表": - rtData = handleWaterMeter(serialPortModel, deviceCodeParam, controlData, controlData, rtData, type, serialPortSingle); + rtData = handleWaterMeter(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); break; case "电表": rtData = handleElectricMeter(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); @@ -143,7 +143,7 @@ public class DeviceControlServiceImpl implements DeviceControlService { return rtData; } - private String handleWaterMeter(SerialPortModel serialPortModel, DeviceCodeParamEntity deviceCodeParam, ControlSetEntity controlData, ControlSetEntity controlData1, String rtData, String type, SerialPortSingle2 serialPortSingle) { + private String handleWaterMeter(SerialPortModel serialPortModel, DeviceCodeParamEntity deviceCodeParam, ControlSetEntity controlData, String rtData, String type, SerialPortSingle2 serialPortSingle) { rtData = serialPortSingle.serialPortSend(deviceCodeParam); // 要添加校准值 Double deviationValue = deviceInstallService.selectDeviceDeviation(deviceCodeParam.getDeviceAddr(),deviceCodeParam.getDeviceType(), deviceCodeParam.getBuildingId()); @@ -175,7 +175,6 @@ public class DeviceControlServiceImpl implements DeviceControlService { if (!serialPortModel.getDataValue().equals("100%")) { deviceCodeParam.setDataValue("100%"); serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 - Thread.sleep(1000); } break; case "顶威": @@ -186,7 +185,6 @@ public class DeviceControlServiceImpl implements DeviceControlService { if (!serialPortModel.getDataValue().equals("100%")) { deviceCodeParam.setDataValue("100%"); serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 - Thread.sleep(1000); } break; } 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 b54c88b..9478f31 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 @@ -19,6 +19,7 @@ import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.concurrent.locks.ReentrantLock; @Slf4j @Service @@ -42,6 +43,10 @@ public class NowDataServiceImpl implements NowDataService { @Autowired BuildingService buildingService; + ReentrantLock lockA = new ReentrantLock(); + + ReentrantLock lockB = new ReentrantLock(); + @Override public void saveNowData(NowDataEntity nowDataEntity) { nowDataMapper.saveNowData(nowDataEntity); @@ -439,7 +444,17 @@ public class NowDataServiceImpl implements NowDataService { //调用过程proWaterTemp @Override public void proWaterTemp(String curDate, String buildingID, String pumpID) { - nowDataMapper.proWaterTemp(curDate,buildingID,pumpID); + lockA.lock(); + try { + lockB.lock(); + try { + nowDataMapper.proWaterTemp(curDate,buildingID,pumpID); + } finally { + lockB.unlock(); + } + } finally { + lockA.unlock(); + } } @Override diff --git a/user-service/src/main/java/com/mh/user/service/impl/NowPublicDataServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/NowPublicDataServiceImpl.java index d33bf8a..be2166a 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/NowPublicDataServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/NowPublicDataServiceImpl.java @@ -1,20 +1,21 @@ package com.mh.user.service.impl; -import com.mh.user.entity.DeviceInstallEntity; -import com.mh.user.entity.NowDataEntity; import com.mh.user.entity.NowPublicDataEntity; import com.mh.user.mapper.BuildingMapper; import com.mh.user.mapper.DeviceInstallMapper; import com.mh.user.mapper.NowPublicDataMapper; import com.mh.user.model.TempModel; import com.mh.user.service.NowPublicDataService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +@Slf4j @Service public class NowPublicDataServiceImpl implements NowPublicDataService { @@ -27,6 +28,8 @@ public class NowPublicDataServiceImpl implements NowPublicDataService { @Autowired BuildingMapper buildingMapper; + private final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + @Override public void saveNowPublicData(NowPublicDataEntity nowPublicDataEntity) { nowPublicDataMapper.saveNowPublicData(nowPublicDataEntity); @@ -63,8 +66,8 @@ public class NowPublicDataServiceImpl implements NowPublicDataService { } @Override + @Transactional(rollbackFor = Exception.class) public void saveNowHistoryPublicData(NowPublicDataEntity nowPublicDataEntity ) { - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date=new Date(); String strDate=sdf1.format(date); strDate=strDate.substring(0,13)+":00:00"; @@ -91,7 +94,7 @@ public class NowPublicDataServiceImpl implements NowPublicDataService { nowPublicDataMapper.updateHistoryPublicData(nowPublicDataEntity); } }catch (Exception e){ - e.printStackTrace(); + log.error("保存历史公共数据失败",e); } } 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 6124117..ab645e2 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 @@ -264,8 +264,6 @@ public class AnalysisReceiveOrder485 { // 热泵 public void analysisPumpOrder485(final String dateStr,final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { -// if (!Constant.CONTROL_WEB_FLAG) { -// threadPoolService.execute(() -> { String checkStr = receiveData.substring(0, receiveData.length() - 4);//检验报文 String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码 String sValue = null; @@ -297,11 +295,6 @@ public class AnalysisReceiveOrder485 { 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水箱水温 @@ -325,8 +318,6 @@ public class AnalysisReceiveOrder485 { } nowPublicDataService.saveNowHistoryPublicData(publicData); log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr); -// nowDataService.proWaterTemp(dateStr,buildingId,addr); //保存楼栋时间点温度变化 -// log.info("=========保存楼栋时间点温度变化值!==========="); } else if (dataType.equals("tempSet")) { pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 } @@ -346,10 +337,6 @@ public class AnalysisReceiveOrder485 { 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 + ",操作成功! "); } @@ -380,11 +367,6 @@ public class AnalysisReceiveOrder485 { 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水箱水温 @@ -426,19 +408,82 @@ public class AnalysisReceiveOrder485 { 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 + ",操作成功! "); } + } else if (Constant.BRAND_RUI_XING.equals(brand)) { + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 + if (registerAddr.equalsIgnoreCase("0001")) { //运行状态 + dataType = "runState"; + data = checkStr.substring(8, 10); + if (data.equalsIgnoreCase("00")) { + sValue = "不运行"; //关机模式 + } else if (data.equalsIgnoreCase("01")) { + sValue = "运行"; //制热模式 + } + //计算热泵运行时间,按分钟 + nowDataService.proPumpMinutes(buildingId, addr, sValue); + log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); + nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); + log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("000A") || registerAddr.equalsIgnoreCase("0046")) { + //000A设定温度,0046水箱水温 + if (registerAddr.equalsIgnoreCase("000A")) { + dataType = "tempSet"; + } else { + dataType = "waterTemp"; + } + //读数 + sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); + if (dataType.equals("waterTemp")) { + sValue = String.valueOf(Double.parseDouble(sValue)/10); + 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("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); + } else if (registerAddr.equalsIgnoreCase("0050")) { //故障状态 + 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("0028") + || registerAddr.equalsIgnoreCase("002C") + || registerAddr.equalsIgnoreCase("0030")) { //读定时设置值 + // 01 03 08 0003 0000 0016 0000 4713 + String startTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)), 2) + + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(10, 14)), 2); + String closetTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(14, 18)), 2) + + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(18, 22)), 2); + sValue = startTime + closetTime; + } + } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { + 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) { @@ -910,7 +955,7 @@ public class AnalysisReceiveOrder485 { } // 水位开关,长度42,128 - public void analysisRelayOrder485(final String dateStr,final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { + public void analysisRelayOrder485(final String dateStr,final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName, String customName) { // threadPoolService.execute(() -> { String l1 = ""; String l2 = ""; @@ -1037,20 +1082,31 @@ public class AnalysisReceiveOrder485 { } 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("运行"); + if (customName.contains(Constant.CUSTOM_NAME_GUANGSHANG)) { + if (l8.equals("0001")) { //l8路,0000表示有输入,0001表示无输入 + publicData.setUseWater("运行"); //供水 + publicData.setBackWater("运行");//回水 + } else { + publicData.setUseWater("不运行"); + publicData.setBackWater("不运行"); + } + log.info("-----------------供水/回水状态:" + l8 + "-----------------"); } else { - publicData.setUpWater("不运行"); + 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 + "-----------------"); } - log.info("-----------------补水状态:" + l2 + "-----------------"); nowPublicDataService.saveNowHistoryPublicData(publicData); log.info("-----------------状态保存数据库成功!楼栋名称:" + buildingName + "-----------------"); } @@ -1194,7 +1250,6 @@ public class AnalysisReceiveOrder485 { // 热泵状态处理(水位开关),长度42,128 public void analysisPumpStateOrder(final String dateStr, final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { -// threadPoolService.execute(() -> { String l1 = ""; String l2 = ""; String l3 = ""; @@ -1206,7 +1261,7 @@ public class AnalysisReceiveOrder485 { String runState = ""; String addr = ""; Map map = new HashMap(); - if (brand == null || brand.equals("") || brand.equals("顶威")) { + if (StringUtils.isBlank(brand) || 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))) { @@ -1218,42 +1273,42 @@ public class AnalysisReceiveOrder485 { data = ExchangeStringUtil.cutThree(data); String strStatus = ExchangeStringUtil.hexString2binaryString(data); strStatus = String.format("%08d", Long.parseLong(strStatus)); - if (strStatus.substring(7, 8).equals("1")) { + if (strStatus.charAt(7) == '1') { l1 = "1"; } else { l1 = "0"; } - if (strStatus.substring(6, 7).equals("1")) { + if (strStatus.charAt(6) == '1') { l2 = "1"; } else { l2 = "0"; } - if (strStatus.substring(5, 6).equals("1")) { + if (strStatus.charAt(5) == '1') { l3 = "1"; } else { l3 = "0"; } - if (strStatus.substring(4, 5).equals("1")) { + if (strStatus.charAt(4) == '1') { l4 = "1"; } else { l4 = "0"; } - if (strStatus.substring(3, 4).equals("1")) { + if (strStatus.charAt(3) == '1') { l5 = "1"; } else { l5 = "0"; } - if (strStatus.substring(2, 3).equals("1")) { + if (strStatus.charAt(2) == '1') { l6 = "1"; } else { l6 = "0"; } - if (strStatus.substring(1, 2).equals("1")) { + if (strStatus.charAt(1) == '1') { l7 = "1"; } else { l7 = "0"; } - if (strStatus.substring(0, 1).equals("1")) { + if (strStatus.charAt(0) == '1') { l8 = "1"; } else { l8 = "0"; @@ -1262,8 +1317,6 @@ public class AnalysisReceiveOrder485 { } 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); @@ -1272,17 +1325,11 @@ public class AnalysisReceiveOrder485 { 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); @@ -1291,60 +1338,46 @@ public class AnalysisReceiveOrder485 { 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")) { -// if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){ 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")) { -// if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){ 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")) { -// if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){ 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")) { -// if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){ map.put("8", "运行"); } else { map.put("8", "不运行"); @@ -1363,9 +1396,6 @@ public class AnalysisReceiveOrder485 { } log.info("热泵状态号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); } - //} - //} -// }); } // 热泵状态处理(水位开关),长度42,128 @@ -1441,8 +1471,6 @@ public class AnalysisReceiveOrder485 { } 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); @@ -1451,17 +1479,11 @@ public class AnalysisReceiveOrder485 { 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); @@ -1470,60 +1492,46 @@ public class AnalysisReceiveOrder485 { 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")) { -// if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){ 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")) { -// if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){ 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")) { -// if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){ 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")) { -// if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){ map.put("8", "运行"); } else { map.put("8", "不运行"); @@ -1533,7 +1541,7 @@ public class AnalysisReceiveOrder485 { for (Map.Entry entry : map.entrySet()) { addr = entry.getKey(); //获取Key值作为热泵ID runState = entry.getValue(); - if (addr != null && Integer.valueOf(addr) <= count) { + if (addr != null && Integer.parseInt(addr) <= count) { nowDataService.saveNowHistoryData3(addr, "热泵状态", runState, "runState", buildingId); nowDataService.proPumpMinutes(buildingId, addr, runState); //计算热泵运行时长 log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + runState); @@ -1542,8 +1550,6 @@ public class AnalysisReceiveOrder485 { log.info("热泵状态号" + addr + ",保存数据库成功!楼栋名称:" + buildingName); result = JSON.toJSONString(map); //map转json字符串 } - //} - //} return result; } diff --git a/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java b/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java index a604c55..534a17f 100644 --- a/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java +++ b/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java @@ -1,5 +1,7 @@ package com.mh.user.utils; +import com.mh.common.utils.StringUtils; +import com.mh.user.constants.Constant; import com.mh.user.entity.*; import com.mh.user.service.DeviceCodeParamService; import com.mh.user.service.DeviceInstallService; @@ -58,7 +60,7 @@ public class GetReadOrder485 { String str = ""; if (deviceAddr != null && deviceAddr.length() > 0) { try { - if (brand == null || brand.equals("") || brand.equals("艾美柯")) { + if (StringUtils.isBlank(brand) || brand.equals("艾美柯")) { // 0 代表前面补充0,14 代表长度为14,d 代表参数为正数型 str = String.format("%014d", Long.parseLong(deviceAddr));//基表通讯号 // 转换位置 @@ -97,9 +99,9 @@ public class GetReadOrder485 { // 0代表前面补充0,2代表长度为2,d代表参数为正数型 str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.addZeroForNum(str, 2); - if (brand == null || brand.equals("") || brand.equals("美的")) { - if (funCode == null || funCode.equals("") || funCode.equals("03")) { - if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0641")) { // 运行状态 + if (StringUtils.isBlank(brand) || Constant.BRAND_MEI_DI.equals(brand)) { + if (StringUtils.isBlank(funCode) || funCode.equals("03")) { + if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0641")) { // 运行状态 str = str + "0306410001"; param = "运行状态"; } else if (registerAddr.equalsIgnoreCase("0007")) { // 水温 @@ -119,22 +121,21 @@ public class GetReadOrder485 { param = "时段2"; } } else {//10 - if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0642")) {//温度设定,写 + if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0642")) {//温度设定,写 str = str + "100642000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试 - } else if (registerAddr.equalsIgnoreCase("0656")) {//时段1 - if (dataValue.length() == 8) { - String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8); - str = str + "100656000408" + strData; //写 - } - } else if (registerAddr.equalsIgnoreCase("065A")) {//时段2 + } else { if (dataValue.length() == 8) { String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8); - str = str + "10065A000408" + strData; //写 + if (registerAddr.equalsIgnoreCase("0656")) {//时段1 + str = str + "100656000408" + strData; //写 + } else if (registerAddr.equalsIgnoreCase("065A")) {//时段2 + str = str + "10065A000408" + strData; //写 + } } } } - } else if (brand.equals("美的2")) { - if (funCode == null || funCode.equals("") || funCode.equals("03")) { + } else if (Constant.BRAND_MEI_DI_TWO.equals(brand)) { + if (StringUtils.isBlank(funCode) || funCode.equals("03")) { if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0BBD")) { // 运行状态 str = str + "030BBD0001"; param = "运行状态"; @@ -149,7 +150,7 @@ public class GetReadOrder485 { param = "设定温度"; } } else {//06 - if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0003")) {//温度设定,写 + if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0003")) {//温度设定,写 str = str + "060003" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试 } else if (registerAddr.equals("0000")) {//开关机 if (dataValue.equals("0000")) { @@ -159,9 +160,9 @@ public class GetReadOrder485 { } } } - } else if (brand.equals("瑞星")) { - if (funCode == null || funCode.equals("") || funCode.equals("03")) { - if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0001")) { // 运行状态 + } else if (Constant.BRAND_RUI_XING.equals(brand)) { + if (StringUtils.isBlank(funCode) || funCode.equals("03")) { + if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0001")) { // 运行状态 str = str + "0300010001"; param = "运行状态"; } else if (registerAddr.equalsIgnoreCase("0046")) { // 水温 @@ -188,7 +189,7 @@ public class GetReadOrder485 { param = "时段2"; } } else {//10 - if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("000A")) {//温度设定,写 + if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("000A")) {//温度设定,写 str = str + "10000A000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试 } else if (registerAddr.equalsIgnoreCase("0028") || registerAddr.equalsIgnoreCase("002C")) {//时段1 if (dataValue.length() == 8) { @@ -221,10 +222,10 @@ public class GetReadOrder485 { String str = ""; if (deviceAddr != null && deviceAddr.length() > 0) { try { - if (brand == null || brand.equals("") || brand.equals("中凯")) { + if (StringUtils.isBlank(brand) || Constant.BRAND_ZHONG_KAI.equals(brand)) { str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.addZeroForNum(str, 2); - if (funCode == null || funCode.equals("") || funCode.equals("17")) { //读 + if (StringUtils.isBlank(funCode) || funCode.equals("17")) { //读 str = "33" + str + "1700000000"; //旧版继电器 } else if (funCode.equals("12")) {//写 if (dataValue != null && !dataValue.equals("")) { @@ -255,17 +256,17 @@ public class GetReadOrder485 { String checkSum = ExchangeStringUtil.makeChecksum(str); str = str + checkSum; - } else if (brand.equals("远向")) { + } else if (Constant.BRAND_YUAN_XIANG.equals(brand)) { str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.addZeroForNum(str, 2); - if (funCode == null || funCode.equals("") || funCode.equals("03")) {//读 + if (StringUtils.isBlank(funCode) || funCode.equals("03")) {//读 if (registerAddr.equalsIgnoreCase("0018")) { //读全部位置 str = str + "0300180008"; } else if (registerAddr.equalsIgnoreCase("0010")) { //读全部DI str = str + "0300100008"; } } else if (funCode.equals("06")) { // 写 - if (dataValue != null && !dataValue.equals("")) { + if (!StringUtils.isBlank(dataValue)) { if (dataValue.equals("100%")) { registerAddr = "10001800081000000000000000000000000000000000"; //全开 } else if (dataValue.equals("90%")) { @@ -293,7 +294,7 @@ public class GetReadOrder485 { } String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 str = str + checkWord; - } else if (brand.equals("顶威")) { + } else if (Constant.BRAND_DING_WEI.equals(brand)) { str = String.format("%012d", Long.parseLong(deviceAddr)); //转换位置 str = ExchangeStringUtil.changePosition(str); //表号 @@ -336,20 +337,13 @@ public class GetReadOrder485 { str = "FEFEFE" + str + checkSum + "16"; } } catch (Exception e) { -// e.printStackTrace(); if (registerAddr.equals("0010")) { - log.error("生成热泵状态指令出错!" + str); + log.error("生成热泵状态指令出错!" + str, e); } else { - log.error("生成水位开关指令出错!" + str); + log.error("生成水位开关指令出错!" + str, e); } } } -// if(registerAddr.equals("0010")){ -// log.info("生成热泵状态采集指令>>>>" + str); -// }else{ -// log.info("生成水位开关采集指令>>>>" + str); -// } - return str.toUpperCase(); } @@ -362,33 +356,24 @@ public class GetReadOrder485 { String str = ""; if (deviceAddr != null && deviceAddr.length() > 0) { try { - if (brand == null || brand.equals("") || brand.equals("中凯")) { + if (StringUtils.isBlank(brand) || Constant.BRAND_ZHONG_KAI.equals(brand)) { str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.addZeroForNum(str, 2); - //if (funCode==null || funCode.equals("") || funCode.equals("17")){ //读 str = "33" + str + "1700000000"; //旧版继电器 - //} // 检验和 String checkSum = ExchangeStringUtil.makeChecksum(str); str = str + checkSum; - } else if (brand.equals("远向")) { + } else if (Constant.BRAND_YUAN_XIANG.equals(brand)) { str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.addZeroForNum(str, 2); - //if (funCode==null || funCode.equals("") || funCode.equals("03")){//读 - //if (registerAddr.equalsIgnoreCase("0018")){ //读全部DO - // str = str + "0300180008"; - // } else if (registerAddr.equalsIgnoreCase("0010")){ //读全部DI str = str + "0300100008"; - //} - //} String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 str = str + checkWord; - } else if (brand.equals("顶威")) { + } else if (Constant.BRAND_DING_WEI.equals(brand)) { str = String.format("%012d", Long.parseLong(deviceAddr)); //转换位置 str = ExchangeStringUtil.changePosition(str); //表号 String strData = ""; - // if (funCode.equals("0102")){ //读 str = "68" + str + "680102"; strData = "25C0"; //标志 // } @@ -399,7 +384,6 @@ public class GetReadOrder485 { str = "FEFEFE" + str + checkSum + "16"; } } catch (Exception e) { -// e.printStackTrace(); log.error("生成热泵状态指令出错!" + str, e); } } @@ -428,7 +412,6 @@ public class GetReadOrder485 { str = "FEFEFE" + str + checkSum + "16"; } catch (Exception e) { -// e.printStackTrace(); log.error("生成状态检测指令出错!" + str, e); } } @@ -444,12 +427,12 @@ public class GetReadOrder485 { try { str = ExchangeStringUtil.decToHex(deviceAddr); //十进制转为十六进制 str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位 - if (brand == null || brand.equals("")) { - str = str + "0300000002"; // 压力变送器(新的协议) - } else if (brand.equals("澳升")) { + if (Constant.BRAND_AU_SUN.equals(brand)) { str = str + "0300040001"; // 新款压力变送器 - } else if (brand.equals("汝翊")) { + } else if (Constant.BRAND_RU_YI.equals(brand)) { str = str + "0300040001"; + } else { + str = str + "0300000002"; // 压力变送器(新的协议) } String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 str = str + checkWord; @@ -478,7 +461,6 @@ public class GetReadOrder485 { String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 str = str + checkWord; } catch (Exception e) { -// e.printStackTrace(); log.error("生成温控指令出错!" + str, e); } } @@ -516,8 +498,7 @@ public class GetReadOrder485 { str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位 try { -// if (!brand.equals("")){ //品牌 - if (!funCode.equals("") && !registerAddr.equals("")) { + if (!StringUtils.isBlank(funCode)) { registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4); //寄存器地址 funCode = ExchangeStringUtil.addZeroForNum(funCode, 2); // 功能码 @@ -540,7 +521,6 @@ public class GetReadOrder485 { } String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 str = str + checkWord; -// } } catch (Exception e) { log.error("生成时控指令出错!" + str, e); } diff --git a/user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java b/user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java index 6700cdb..0736f4d 100644 --- a/user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java +++ b/user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java @@ -1,9 +1,6 @@ package com.mh.user.utils; import com.mh.user.entity.DeviceCodeParamEntity; -import com.mh.user.serialport.SerialPortListener; -import com.mh.user.serialport.SerialPortUtil; -import gnu.io.SerialPort; import lombok.extern.slf4j.Slf4j; /** @@ -16,147 +13,9 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class SendOrderUtils { -// /** -// * 发送采集冷水机组 -// * @param chillersEntity -// * @param ctx -// * @param num -// * @param size -// */ -// public static void sendChillersOrder(ChillersEntity chillersEntity, ChannelHandlerContext ctx, int num, int size) { -// // 继续发送下一个采集冷水机设备指令 -// GetReadOrder485 getReadOrder485 = new GetReadOrder485(); -// String sendStr = getReadOrder485.createChillersOrder(chillersEntity); -// ByteBuf buffer = getByteBuf(ctx, sendStr); -// // 2.发送数据 -// ctx.channel().writeAndFlush(buffer); -// log.info("客户端再次往服务端发送数据" + num + " 数据条数:" + size); -// } -// -// public static void sendMeterOrCloud(DeviceManageEntity deviceManageEntity, -// int num, -// String IP, -// String port, -// ChannelHandlerContext ctx) { -// if (deviceManageEntity.getParamId() == 1) { -// sendMeterOrder(deviceManageEntity, num, IP, port, ctx); -// } else if (deviceManageEntity.getParamId() == 3) { -// sendCloudOrder(deviceManageEntity, num, IP, port, ctx); -// } -// } -// /** -// * 发送采集电表 -// * @param deviceManageEntity -// * @param num -// * @param IP -// * @param port -// * @param ctx -// */ -// public static void sendMeterOrder(DeviceManageEntity deviceManageEntity, -// int num, -// String IP, -// String port, -// ChannelHandlerContext ctx) { -//// String collectionNum = deviceManageEntity.getCollectionNum(); -//// String sendStr = GetReadOrder485.createMeterOrder(); -// String sendStr=""; -// ByteBuf buffer = getByteBuf(ctx, sendStr); -// // 2.发送数据 -// ctx.channel().writeAndFlush(buffer); -// log.info("客户端再次往服务端发送数据" + num); -// } -// -// /** -// * 发送采集冷量计工具类 -// * @param deviceManageEntity -// * @param num -// * @param IP -// * @param port -// * @param ctx -// */ -// public static void sendCloudOrder(DeviceManageEntity deviceManageEntity, -// int num, -// String IP, -// String port, -// ChannelHandlerContext ctx) { -// // 1.创建将要写出的数据 -// String collectionNum = deviceManageEntity.getCollectionNum(); -// String sendStr = GetReadOrder485.createCloudOrder(IP, port, -// deviceManageEntity.getDataCom(), -// collectionNum, "34"); -//// String sendStr = "5803004900021914"; -// ByteBuf buffer = getByteBuf(ctx, sendStr); -// // 2.发送数据 -// ctx.channel().writeAndFlush(buffer); -// log.info("客户端再次往服务端发送数据" + sendStr); -// } - - //向串口发指令数据 - public static void sendSerialPort(DeviceCodeParamEntity deviceCodeParamEntity,SerialPort serialPort ) { - //创建将要写出的数据 -// OrderParamModel orderParamModel=new OrderParamModel(); -// orderParamModel.setDeviceAddr(deviceCodeParamEntity.getDeviceAddr());//通讯地址 -// orderParamModel.setDeviceType(deviceCodeParamEntity.getDeviceType());//设备类型 -// orderParamModel.setBaudrate(deviceCodeParamEntity.getBaudrate());//波特率 -// orderParamModel.setBrand(deviceCodeParamEntity.getBrand());//品牌 -// orderParamModel.setFunCode(deviceCodeParamEntity.getFunCode());//功能码 -// orderParamModel.setRegisterAddr(deviceCodeParamEntity.getRegisterAddr());//寄存器地址 -// orderParamModel.setComName(deviceCodeParamEntity.getDataCom()); //串口 -// orderParamModel.setDataValue(deviceCodeParamEntity.getDataValue());//传入数据 - - String deviceType=deviceCodeParamEntity.getDeviceType(); - String registerAddr=deviceCodeParamEntity.getRegisterAddr(); - String sendStr=null; - if (deviceType.equals("电表")){ - sendStr = GetReadOrder485.createMeterOrder(deviceCodeParamEntity); - }else if (deviceType.equals("水表")){ - sendStr = GetReadOrder485.createWtMeterOrder(deviceCodeParamEntity); - }else if (deviceType.equals("压变")){ - sendStr = GetReadOrder485.createPressureOrder(deviceCodeParamEntity); - }else if (deviceType.equals("热泵")){ - sendStr = GetReadOrder485.createPumpOrder(deviceCodeParamEntity); - }else if (deviceType.equals("温控")){ - sendStr = GetReadOrder485.createTempOrder(deviceCodeParamEntity); - }else if (deviceType.equals("时控")){ - sendStr = GetReadOrder485.createTimeSetOrder(deviceCodeParamEntity); - }else if (deviceType.equals("水位开关")){ - sendStr = GetReadOrder485.createRelayOrder(deviceCodeParamEntity); - }else if (deviceType.equals("状态检测")){ - sendStr = GetReadOrder485.createStateOrder(deviceCodeParamEntity); - }else if (deviceType.equals("温度变送器")){ - sendStr = GetReadOrder485.createMulTempOrder(deviceCodeParamEntity); - }else if (deviceType.equals("热泵状态")){ - sendStr = GetReadOrder485.createPumpStateOrder(deviceCodeParamEntity); - } - - String str=sendStr; - try{ - byte[] HEX = SerialPortListener.hexStr2Byte(str); - SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil(); - serialPortUtil.sendToPort(serialPort, HEX); - -// SerialTool serialPortUtil = SerialTool.getSerialPortUtil(); -// serialPortUtil.sendToPort(HEX,serialPort); - log.info(deviceType+"向串口"+serialPort+"发送数据>>>>" + str); - }catch (Exception e){ - e.printStackTrace(); - log.error("向串口"+serialPort+"发送数据异常!"); - } - } - //向串口发指令数据 public static String getSendStr(DeviceCodeParamEntity deviceCodeParamEntity) { //创建将要写出的数据 -// OrderParamModel orderParamModel=new OrderParamModel(); -// orderParamModel.setDeviceAddr(deviceCodeParamEntity.getDeviceAddr());//通讯地址 -// orderParamModel.setDeviceType(deviceCodeParamEntity.getDeviceType());//设备类型 -// orderParamModel.setBaudrate(deviceCodeParamEntity.getBaudrate());//波特率 -// orderParamModel.setBrand(deviceCodeParamEntity.getBrand());//品牌 -// orderParamModel.setFunCode(deviceCodeParamEntity.getFunCode());//功能码 -// orderParamModel.setRegisterAddr(deviceCodeParamEntity.getRegisterAddr());//寄存器地址 -// orderParamModel.setComName(deviceCodeParamEntity.getDataCom()); //串口 -// orderParamModel.setDataValue(deviceCodeParamEntity.getDataValue());//传入数据 - String deviceType=deviceCodeParamEntity.getDeviceType(); String sendStr=null; switch (deviceType) { @@ -194,14 +53,4 @@ public class SendOrderUtils { return sendStr; } - - - -// private static ByteBuf getByteBuf(ChannelHandlerContext ctx, String sendStr) { -// // 申请一个数据结构存储信息 -// ByteBuf buffer = ctx.alloc().buffer(); -// // 将信息放入数据结构中 -// buffer.writeBytes(ExchangeStringUtil.hexStrToBinaryStr(sendStr));//对接需要16进制 -// return buffer; -// } } diff --git a/user-service/src/test/java/com/mh/user/TestJwtUtils.java b/user-service/src/test/java/com/mh/user/TestJwtUtils.java index 4fcf6cc..0df1e50 100644 --- a/user-service/src/test/java/com/mh/user/TestJwtUtils.java +++ b/user-service/src/test/java/com/mh/user/TestJwtUtils.java @@ -15,9 +15,7 @@ import sun.security.provider.MD5; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ThreadPoolExecutor; @@ -147,10 +145,19 @@ public class TestJwtUtils { * * @param args */ - public static void main(String[] args) throws InterruptedException { - for (int i = 0; i < 5; i++) { - CacheUtil cacheUtil = CacheUtil.getInstance(); - cacheUtil.deleteCache(); + public static void main(String[] args) { + // 创建一个按照键的自然顺序排序的TreeMap + TreeMap sortedMap = new TreeMap<>(); + + // 添加元素到TreeMap + sortedMap.put("Apple", 1); + sortedMap.put("Banana", 2); + sortedMap.put("Cherry", 3); + sortedMap.put("Date", 4); + + // 输出有序的Map + for (Map.Entry entry : sortedMap.entrySet()) { + System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); } }