From 4a00010e3e768cad9db131febcddaf2d022fac6b Mon Sep 17 00:00:00 2001 From: "3067418132@qq.com" Date: Thu, 23 Apr 2026 16:50:33 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81netty=E6=B6=B2=E4=BD=8D=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=99=A8=E9=87=87=E9=9B=86=E8=A7=A3=E6=9E=90=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=EF=BC=9B=202=E3=80=81=E6=8E=A7=E5=88=B6=E6=B0=B4?= =?UTF-8?q?=E7=AE=B1=E6=96=B0=E5=A2=9E=E7=82=B9=E4=BD=8D=EF=BC=9B=203?= =?UTF-8?q?=E3=80=81=E5=AE=9A=E6=97=B6=E8=AE=A1=E7=AE=97=E6=B8=A9=E5=BA=A6?= =?UTF-8?q?=E3=80=81=E6=B6=B2=E4=BD=8Dsql=E4=BF=AE=E6=94=B9=EF=BC=9B=204?= =?UTF-8?q?=E3=80=81=E5=B9=BF=E5=B7=A5=E6=95=B0=E6=8D=AE=E5=A4=A9=E6=B0=94?= =?UTF-8?q?=E9=A2=84=E6=8A=A5=E5=AE=9A=E6=97=B6=E8=AE=A1=E7=AE=97=E7=84=93?= =?UTF-8?q?=E5=80=BC=E7=AD=89=E7=9B=B8=E5=85=B3=E5=8F=82=E6=95=B0=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/com/mh/MHApplicationTest.java | 9 ++ .../core/domain/dto/WeatherDataDTO.java | 63 +++++++++ .../core/domain/entity/WeatherData.java | 20 +++ .../core/domain/vo/HotWaterControlVO.java | 15 ++ .../common/utils/AnalysisReceiveOrder485.java | 51 +++++++ .../java/com/mh/common/utils/ModbusUtils.java | 28 ++++ .../mh/framework/netty/EchoServerHandler.java | 133 +++++++++++++----- .../mh/framework/netty/NettyServiceImpl.java | 20 ++- .../java/com/mh/quartz/task/GGDataTask.java | 72 ++++++++++ .../mh/system/mapper/WeatherDataMapper.java | 21 +++ .../device/CollectionParamsManageMapper.java | 2 + .../mapper/energy/WaterLevelMapper.java | 8 +- .../system/mapper/energy/WaterTempMapper.java | 8 +- .../system/service/IWeatherDataService.java | 5 + .../CollectionParamsManageServiceImpl.java | 39 ++++- .../service/impl/WeatherDataServiceImpl.java | 12 ++ 16 files changed, 450 insertions(+), 56 deletions(-) create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/dto/WeatherDataDTO.java create mode 100644 mh-quartz/src/main/java/com/mh/quartz/task/GGDataTask.java diff --git a/mh-admin/src/test/java/com/mh/MHApplicationTest.java b/mh-admin/src/test/java/com/mh/MHApplicationTest.java index 6cf9fcb..54a721c 100644 --- a/mh-admin/src/test/java/com/mh/MHApplicationTest.java +++ b/mh-admin/src/test/java/com/mh/MHApplicationTest.java @@ -9,6 +9,7 @@ import com.mh.common.core.domain.entity.WeatherData; import com.mh.common.utils.DateUtils; import com.mh.common.utils.StringUtils; import com.mh.quartz.task.DealDataTask; +import com.mh.quartz.task.GGDataTask; import com.mh.quartz.task.GetWeatherDataTask; import com.mh.system.mapper.device.DataProcessMapper; import com.mh.system.service.ISysParamsService; @@ -51,6 +52,14 @@ public class MHApplicationTest { @Autowired private DealDataTask dealDeviceData; + @Autowired + private GGDataTask gGDataTask; + + @Test + public void gGDataTask() { + gGDataTask.calcWeatherData(); + } + @Test public void dealDeviceData() { dealDeviceData.dealDeviceData(); diff --git a/mh-common/src/main/java/com/mh/common/core/domain/dto/WeatherDataDTO.java b/mh-common/src/main/java/com/mh/common/core/domain/dto/WeatherDataDTO.java new file mode 100644 index 0000000..589f442 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/dto/WeatherDataDTO.java @@ -0,0 +1,63 @@ +package com.mh.common.core.domain.dto; + +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 天气温度历史记录查询 + * @date 2025-06-16 11:21:48 + */ +@Data +public class WeatherDataDTO { + + /** + * 时间 + */ + private String weatherDate; + + /** + * 日期和星期 + */ + private String dateAndWeek; + + /** + * 最高温度 + */ + private String maxTemp; + + /** + * 最低温度 + */ + private String minTemp; + + /** + * 天气 + */ + private String weatherConditions; + + /** + * 风向 + */ + private String windDirection; + + /** + * 风速 + */ + private String windPower; + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("weatherDate", weatherDate) + .append("dateAndWeek", dateAndWeek) + .append("maxTemp", maxTemp) + .append("minTemp", minTemp) + .append("weatherConditions", weatherConditions) + .append("windDirection", windDirection) + .append("windPower", windPower) + .toString(); + } +} diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/WeatherData.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/WeatherData.java index 3c3300a..4e362ef 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/WeatherData.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/WeatherData.java @@ -77,6 +77,26 @@ public class WeatherData { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createdTime; + /** + * 含湿量: g/kg + */ + private Double humidityContent; + + /** + * 焓值:kJ/kg + */ + private Double enthalpy; + + /** + * 露点温度:摄氏度 + */ + private Double dewPointTemp; + + /** + * 湿球温度 + */ + private Double wetBulbTemp; + @Override public String toString() { return new ToStringBuilder(this) diff --git a/mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java b/mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java index d5267fb..0eaf89a 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java @@ -62,6 +62,21 @@ public class HotWaterControlVO { private BigDecimal waterLevelSet; private String waterLevelSetId; + // 水位设置 10 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0") + private BigDecimal waterLevelSet1; + private String waterLevelSetId1; + + // 水位误差设置 46 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0") + private BigDecimal waterLevelErrorSet; + private String waterLevelErrorSetId; + + // 水位误差设置 46 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0") + private BigDecimal waterLevelErrorSet1; + private String waterLevelErrorSetId1; + // 水位 11 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0") private BigDecimal waterLevel; diff --git a/mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java b/mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java index 36c2efc..0cac15b 100644 --- a/mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java +++ b/mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java @@ -391,4 +391,55 @@ public class AnalysisReceiveOrder485 { } return ""; } + + public String analysisLiquidControlOrder485(String receiveStr, CollectionParamsManage deviceCodeParam) { +// log.error("接收数据:{},{}", receiveStr,deviceCodeParam.toString()); + String dataStr = receiveStr.replace(" ", "").toUpperCase(); + // 检验报文 + 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))) { + // 表号 + String cloudId = ExchangeStringUtil.hexToDec(dataStr.substring(0, 2)); + // 读数 + String data = ""; + data = dataStr.substring(dataStr.length() - 12, dataStr.length() - 8); + // 保留小数位数 + String dot = ""; + dot = dataStr.substring(dataStr.length() - 8, dataStr.length() - 4); + + int dataType = deviceCodeParam.getDataType(); + try { + if (dataType == 2) { + data = ExchangeStringUtil.hexToDec(data); + dot = ExchangeStringUtil.hexToDec(dot); + BigDecimal bigDecimal = new BigDecimal(data); + bigDecimal = bigDecimal.divide(BigDecimal.valueOf(Math.pow(10, Integer.parseInt(dot)))).setScale(3, RoundingMode.HALF_UP); // 除以1000并保留整数 + data = bigDecimal.toString(); +// log.error("贵宾楼液位报文==>{},地址==>{},寄存器地址==>{},实时读数==>{}", receiveStr, cloudId, deviceCodeParam.getRegisterAddr(), data); + } + // 判断data大于99999999,就返回空 + if (new BigDecimal(data).intValue() > 10) { + return ""; + } + return data; + } catch (Exception e) { + log.error("保存液位数据失败!", e); + } + } else { + // log.info("液位===>{}", dataStr); + return ""; + } + return ""; + } + + public static void main(String[] args) { + CollectionParamsManage collectionParamsManage = new CollectionParamsManage(); + collectionParamsManage.setDataType(2); + new AnalysisReceiveOrder485().analysisLiquidControlOrder485("14 0304 03 E8 00 03 7E 83", collectionParamsManage); + } } diff --git a/mh-common/src/main/java/com/mh/common/utils/ModbusUtils.java b/mh-common/src/main/java/com/mh/common/utils/ModbusUtils.java index 981d996..a9208b3 100644 --- a/mh-common/src/main/java/com/mh/common/utils/ModbusUtils.java +++ b/mh-common/src/main/java/com/mh/common/utils/ModbusUtils.java @@ -5,6 +5,8 @@ import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; +import java.math.BigDecimal; + /** * @author LJF * @version 1.0 @@ -64,4 +66,30 @@ public class ModbusUtils { buffer.writeBytes(ExchangeStringUtil.hexStrToBinaryStr(sendStr));//对接需要16进制 return buffer; } + + public static String createTenControlCode(String mtCode, Integer type, String registerAddr, Integer digits, String param) { + // 14 10 01 08 00 02 04 07 08 00 03 7A 22 + // 14:地址:mtCode + // 10:功能码 + // 01 08:寄存器地址 registerAddr + // 寄存器大小: 00 02 + // 04:数据长度 + // 07 08:数据值 + // 00 03:小数位数 digits + // 7A 22:校验码 + String orderStr; + mtCode = ExchangeStringUtil.addZeroForNum(mtCode, 2); + registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4); + param = String.valueOf(new BigDecimal(param).multiply(BigDecimal.valueOf(Math.pow(10, digits))).intValue()); + param = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(param), 4); + String dot = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(digits)), 4); + orderStr = mtCode + "10" + registerAddr + "0002" + "04" + param + dot; + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(orderStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + // 发送的指令 + return orderStr+checkWord; + } + } diff --git a/mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java b/mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java index c0669ef..df4de61 100644 --- a/mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java +++ b/mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java @@ -123,14 +123,8 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter { public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { //心跳包报文: 24 00 60 95 receiveStr = receiveStr.toUpperCase();//返回值全部变成大写 - // log.info("channelReadComplete接收到的数据{}, 长度: ===> {}", receiveStr, receiveStr.length()); //心跳包处理 if ((receiveStr.length() == 8) && receiveStr.startsWith("24")) { - if ("24006002".equals(receiveStr)) { - log.error("接收到心跳包 {}", receiveStr); - } -// if ((receiveStr.length() == 8) && receiveStr.startsWith("C0A801FE")) { - // log.info("接收到心跳包 ===> {}", receiveStr); // 开始进行会话保存 dealSession(ctx); idleCount = 1; @@ -147,7 +141,6 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter { deviceCodeParamList = arrayCache.toList(CollectionParamsManage.class); } size = deviceCodeParamList.size(); -// // log.info("deviceCodeParam size ===> {}", size); // 清空receiveStr receiveStr = ""; num = 0; @@ -160,14 +153,36 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter { } else { ctx.channel().close(); } - } else { - // log.info("gateway not find deviceCodeParam!"); } } else if (receiveStr.length() == 18) { - // 水电表返回数据解析 + // 水电表返回数据解析或者液位传感器数据返回 idleCount = 1; - // log.info("水电表、热泵设置接收==>{},长度:{}", receiveStr, receiveStr.length()); - nextSendOrder(ctx); + if (redisCache.hasKey("order_send_read")) { + log.error("order_send_read存在,接收到指令是{}", receiveStr); + if (redisCache.hasKey("order_send_register")) { + Object orderSendRegister = redisCache.getCacheObject("order_send_register"); + String orderSendRegisterStr = String.valueOf(orderSendRegister); + // 根据_进行数据转换成数组 +// redisCache.setCacheObject("order_send_register", +// collectionParamsManage.getMtCode() + "_" +// + collectionParamsManage.getRegisterAddr() + "_" +// + collectionParamsManage.getRegisterSize() + "_" +// + collectionParamsManage.getParamType() + "_" +// + collectionParamsManage.getDataType() + "_" +// + collectionParamsManage.getOtherName() +// ); + String[] split = orderSendRegisterStr.split("_"); + CollectionParamsManage collectionParamsManage = new CollectionParamsManage(); + collectionParamsManage.setDataType(Integer.valueOf(split[4])); + collectionParamsManage.setParamType(split[3]); + collectionParamsManage.setOtherName(split[5]); + collectionParamsManage.setQuality("0"); + analysisReceiveData(receiveStr, collectionParamsManage); + redisCache.deleteObject("order_send_read"); + } + } else { + nextSendOrder(ctx); + } } else if (receiveStr.length() == 12 || receiveStr.length() == 14) { // 热泵返回数据解析 idleCount = 1; @@ -196,7 +211,15 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter { redisCache.deleteObject("order_send_read"); } } else { - nextSendOrder(ctx); + // 液位控制之类响应返回 + if (receiveStr.length() == 12 && "10".equals(receiveStr.substring(2,4))) { + // 液位控制返回数据解析 + idleCount = 1; + nextSendOrder(ctx); + controlOrder(ctx); + } else { + nextSendOrder(ctx); + } } } else if (receiveStr.length() == 16) { idleCount = 1; @@ -235,33 +258,34 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter { } else { orderSendRegisterStr = orderSendStr.substring(4, 8); } -// // 发送读取热泵设置温度 -// String controlCode = ModbusUtils.createReadOrder(orderSendStr.substring(0, 2), -// "03", -// "0003", -// "1"); -// SendOrderUtils.sendOrderToDTU(ctx, controlCode); + String readOrder = ""; if (receiveStr.contains(orderSendStr)) { - String readOrder = ModbusUtils.createReadOrder(orderSendStr.substring(0, 2), + // 发送读取热泵设置温度 + readOrder = ModbusUtils.createReadOrder(orderSendStr.substring(0, 2), "03", orderSendRegisterStr, "1"); - // 初始化发送指令 -// NettyTools.initReceiveMsg("order_wait_read"); - // 发送读取指令 - redisCache.setCacheObject("order_send_read", readOrder, 10, TimeUnit.SECONDS); - ctx.writeAndFlush(ModbusUtils.createByteBuf(readOrder)); - // 发送读取指令 - log.error("热泵设置读取指令发送:{},order_send_read键值:{}", readOrder, redisCache.hasKey("order_send_read")); - log.error("热泵设置指令返回:{}", receiveStr); - NettyTools.setReceiveMsg("order_wait", receiveStr); - redisCache.deleteObject("order_send"); - receiveStr = ""; - try { - Thread.sleep(500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } + + } else if (receiveStr.substring(0, 8).equals(orderSendStr.substring(0, 8))){ + // 发送读取液位设置值 + readOrder = ModbusUtils.createReadOrder(orderSendStr.substring(0, 2), + "03", + orderSendRegisterStr, + "2"); + } + // 发送读取指令 + redisCache.setCacheObject("order_send_read", readOrder, 10, TimeUnit.SECONDS); + ctx.writeAndFlush(ModbusUtils.createByteBuf(readOrder)); + // 发送读取指令 + log.error("热泵设置读取指令发送:{},order_send_read键值:{}", readOrder, redisCache.hasKey("order_send_read")); + log.error("热泵设置指令返回:{}", receiveStr); + NettyTools.setReceiveMsg("order_wait", receiveStr); + redisCache.deleteObject("order_send"); + receiveStr = ""; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + throw new RuntimeException(e); } } } @@ -374,15 +398,35 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter { case "48" -> // 热泵读取电流 analysisData = analysisReceiveOrder485.analysisHeatPumpOrder485(receiveStr, deviceCodeParamEntity); - case "11" -> - // 液位计 - analysisData = analysisReceiveOrder485.analysisLiquidOrder485(receiveStr, deviceCodeParamEntity); + case "11" -> { + // 液位设定值 + if (deviceCodeParamEntity.getMtType().equals("11")) { + analysisData = analysisReceiveOrder485.analysisLiquidControlOrder485(receiveStr, deviceCodeParamEntity); + } else { + // 液位计 + analysisData = analysisReceiveOrder485.analysisLiquidOrder485(receiveStr, deviceCodeParamEntity); + } + } case "13" -> // 压力 analysisData = analysisReceiveOrder485.analysisTempHumiditySensorOrder485(receiveStr, deviceCodeParamEntity); case "35" -> // 湿度 analysisData = analysisReceiveOrder485.analysisTempHumiditySensorOrder485(receiveStr, deviceCodeParamEntity); + case "10" -> { + // 液位设定值 + if (deviceCodeParamEntity.getMtType().equals("11")) { + // 液位设定值 + analysisData = analysisReceiveOrder485.analysisLiquidControlOrder485(receiveStr, deviceCodeParamEntity); + } + } + case "46" -> { + // 液位误差值设置 + if (deviceCodeParamEntity.getMtType().equals("11")) { + // 液位误差设定值 + analysisData = analysisReceiveOrder485.analysisLiquidControlOrder485(receiveStr, deviceCodeParamEntity); + } + } default -> { // log.info("设备类型错误"); return; @@ -404,6 +448,17 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter { advantechReceiver.setD(advantechDatas); // log.error("接收到的指令==》{},发送数据到MQTT==》{}", receiveStr, JSONObject.toJSONString(advantechReceiver)); sendMsgByTopic.sendToDeviceMQ(JSONObject.toJSONString(advantechReceiver)); + // 判断otherName的值 + if ("2".equals(deviceCodeParamEntity.getGatewayId()) && deviceCodeParamEntity.getOtherName().contains("实际温度")) { + datas = new AdvantechDatas(); + advantechDatas.clear(); + datas.setValue(new BigDecimal(analysisData)); + datas.setTag("贵宾楼水箱-温度"); + datas.setQuality(0); + advantechDatas.add(datas); + advantechReceiver.setD(advantechDatas); + sendMsgByTopic.sendToDeviceMQ(JSONObject.toJSONString(advantechReceiver)); + } } // 异常捕捉 diff --git a/mh-framework/src/main/java/com/mh/framework/netty/NettyServiceImpl.java b/mh-framework/src/main/java/com/mh/framework/netty/NettyServiceImpl.java index 1a0facd..a02278a 100644 --- a/mh-framework/src/main/java/com/mh/framework/netty/NettyServiceImpl.java +++ b/mh-framework/src/main/java/com/mh/framework/netty/NettyServiceImpl.java @@ -73,11 +73,21 @@ public class NettyServiceImpl implements INettyService { } if (flag) { ServerSession serverSession = map.get(keyVal); - // 目前只有DTU,modbus方式,只创建modbus先 - String controlCode = ModbusUtils.createControlCode(collectionParamsManage.getMtCode(), - changeValue.getType(), - collectionParamsManage.getRegisterAddr(), - changeValue.getParam()); + String controlCode = ""; + // 增加了液位控制仪 + if ("8".equals(collectionParamsManage.getMtType())) { + controlCode = ModbusUtils.createTenControlCode(collectionParamsManage.getMtCode(), + changeValue.getType(), + collectionParamsManage.getRegisterAddr(), + collectionParamsManage.getDigits(), + changeValue.getParam()); + } else { + // 目前只有DTU,modbus方式,只创建modbus先 + controlCode = ModbusUtils.createControlCode(collectionParamsManage.getMtCode(), + changeValue.getType(), + collectionParamsManage.getRegisterAddr(), + changeValue.getParam()); + } if (StringUtils.isEmpty(controlCode)) { log.error("创建控制码失败"); return false; diff --git a/mh-quartz/src/main/java/com/mh/quartz/task/GGDataTask.java b/mh-quartz/src/main/java/com/mh/quartz/task/GGDataTask.java new file mode 100644 index 0000000..11f5599 --- /dev/null +++ b/mh-quartz/src/main/java/com/mh/quartz/task/GGDataTask.java @@ -0,0 +1,72 @@ +package com.mh.quartz.task; + +import com.mh.common.core.domain.entity.WeatherData; +import com.mh.common.utils.WeatherUtil; +import com.mh.system.service.IWeatherDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 广工需要的数据计算 + * @date 2026-04-21 19:05:21 + */ +@Slf4j +@Component("ahuTask") +public class GGDataTask { + + @Autowired + private IWeatherDataService weatherDataService; + + public void calcWeatherData() { + // 从天气预报保存的表中获取没有焓值的数据 + WeatherUtil weatherUtil = new WeatherUtil(); + List weatherDataList = weatherDataService.selectByEnthalpyEtc(); + if (weatherDataList != null && !weatherDataList.isEmpty()) { + // 室外压力,采用标准大气压 101325 Pa + String pressure = "101.325"; + for (WeatherData weatherData : weatherDataList) { + + // 室外温度 + int temperature = weatherData.getTemperature(); + + // 室外湿度 + int humidity = weatherData.getHumidity(); + + // 室外含湿 + String wet = String.valueOf(new BigDecimal(humidity).divide(new BigDecimal("100")).setScale(1, RoundingMode.HALF_UP)); + BigDecimal humidityRatio = weatherUtil.returnMoistureContent(String.valueOf(temperature), + wet, + pressure); + weatherData.setHumidityContent(humidityRatio.setScale(1, RoundingMode.HALF_UP).doubleValue()); + + // 室外焓值 + BigDecimal enthalpy = weatherUtil.returnEnthalpy(String.valueOf(temperature), + wet, + pressure); + weatherData.setEnthalpy(enthalpy.setScale(1, RoundingMode.HALF_UP).doubleValue()); + + // 室外露点温度 + BigDecimal dewPointTemp = weatherUtil.calculateDewPoint(temperature, humidity); + weatherData.setDewPointTemp(dewPointTemp.setScale(1, RoundingMode.HALF_UP).doubleValue()); + + // 室外湿球温度 + BigDecimal wetBulbTemp = weatherUtil.returnComputePsi(temperature, (double) humidity / 100, Double.parseDouble(pressure) * 1000); + weatherData.setWetBulbTemp(wetBulbTemp.setScale(1, RoundingMode.HALF_UP).doubleValue()); + + try { + weatherDataService.updateDataById(weatherData); + } catch (Exception e) { + log.error("更新天气数据失败:{}", e.getMessage()); + } + } + } + } +} diff --git a/mh-system/src/main/java/com/mh/system/mapper/WeatherDataMapper.java b/mh-system/src/main/java/com/mh/system/mapper/WeatherDataMapper.java index be01174..934935c 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/WeatherDataMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/WeatherDataMapper.java @@ -1,10 +1,15 @@ package com.mh.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mh.common.core.domain.dto.WeatherDataDTO; import com.mh.common.core.domain.entity.WeatherData; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + /** * @author LJF * @version 1.0 @@ -17,4 +22,20 @@ public interface WeatherDataMapper extends BaseMapper { @Select("select * from weather_data where report_time::date = #{date}::date order by report_time desc limit 1") WeatherData selectWeatherDataByDate(@Param("date") String date); + + @Select("select " + + " * " + + "from " + + " vw_weather_daily_summary " + + "where " + + " weather_date between date(#{startTime}) and date(#{endTime}) " + + "order by " + + " weather_date ") + List getWeatherTemp(@Param("startTime") String startTime, @Param("endTime") String endTime); + + @Select("select * from weather_data where enthalpy is null order by report_time ") + List selectByEnthalpyEtc(); + + @Update("update weather_data set humidity_content = #{humidityContent}, enthalpy = #{enthalpy}, dew_point_temp = #{dewPointTemp}, wet_bulb_temp = #{wetBulbTemp} where id = #{id}") + void updateDataById(WeatherData weatherData); } diff --git a/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java b/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java index 686e64f..31490c7 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java @@ -355,9 +355,11 @@ public interface CollectionParamsManageMapper extends BaseMapper createOrderList(); } diff --git a/mh-system/src/main/java/com/mh/system/mapper/energy/WaterLevelMapper.java b/mh-system/src/main/java/com/mh/system/mapper/energy/WaterLevelMapper.java index 44c256d..102c51b 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/energy/WaterLevelMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/energy/WaterLevelMapper.java @@ -36,7 +36,7 @@ public interface WaterLevelMapper extends BaseMapper { " cpm.device_ledger_id = dl.id " + " where " + " dl.system_type = '1' " + - " and device_type = '16' " + + " and (device_type = '16' or device_type = '17') " + " and cpm.param_type = '11' " + " ) t1 " + "join cpm_space_relation csr on " + @@ -60,7 +60,7 @@ public interface WaterLevelMapper extends BaseMapper { @Select("select " + " wt.building_id, " + - " SUBSTRING(fi.floor_name FROM '(-?\\d+楼)') as building_name, " + + " fi.floor_name as building_name, " + " ROUND(avg(temp00::numeric(24, 1)),1) as temp00, " + " ROUND(avg(temp01::numeric(24, 1)),1) as temp01, " + " ROUND(avg(temp02::numeric(24, 1)),1) as temp02, " + @@ -92,10 +92,10 @@ public interface WaterLevelMapper extends BaseMapper { " date(wt.cur_date) = date(#{curDate}) " + "group by " + " wt.building_id, fi.floor_name " + - "order by SUBSTRING(fi.floor_name FROM '(-?\\d)') ") + "order by fi.floor_name ") List queryAvgWaterTemp(String curDate); - @Select("select wt.*, SUBSTRING(fi.floor_name FROM '(-?\\d+楼)') as building_name from water_level wt " + + @Select("select wt.*, fi.floor_name as building_name from water_level wt " + " join floor_info fi on wt.building_id = fi.id " + " where wt.building_id = #{buildingId} and date(wt.cur_date) = date(#{curDate}) order by wt.device_name ") List queryWaterTemp(String buildingId, String curDate); diff --git a/mh-system/src/main/java/com/mh/system/mapper/energy/WaterTempMapper.java b/mh-system/src/main/java/com/mh/system/mapper/energy/WaterTempMapper.java index d653f20..7adfbc6 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/energy/WaterTempMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/energy/WaterTempMapper.java @@ -37,7 +37,7 @@ public interface WaterTempMapper extends BaseMapper { " cpm.device_ledger_id = dl.id " + " where " + " dl.system_type = '1' " + - " and dl.device_type = '11' " + + " and (dl.device_type = '11' or dl.device_type = '17' or dl.device_type = '14') " + " and cpm.param_type = '12' " + " ) t1 " + "join cpm_space_relation csr on " + @@ -61,7 +61,7 @@ public interface WaterTempMapper extends BaseMapper { @Select("select " + " wt.building_id, " + - " SUBSTRING(fi.floor_name FROM '(-?\\d+楼)') as building_name, " + + " fi.floor_name as building_name, " + " ROUND(avg(temp00::numeric(24, 1)),1) as temp00, " + " ROUND(avg(temp01::numeric(24, 1)),1) as temp01, " + " ROUND(avg(temp02::numeric(24, 1)),1) as temp02, " + @@ -93,10 +93,10 @@ public interface WaterTempMapper extends BaseMapper { " date(wt.cur_date) = date(#{curDate}) " + "group by " + " wt.building_id, fi.floor_name " + - "order by SUBSTRING(fi.floor_name FROM '(-?\\d)') ") + "order by fi.floor_name ") List queryAvgWaterTemp(String curDate); - @Select("select wt.*, SUBSTRING(fi.floor_name FROM '(-?\\d+楼)') as building_name from water_temp wt " + + @Select("select wt.*, fi.floor_name as building_name from water_temp wt " + " join floor_info fi on wt.building_id = fi.id " + " where wt.building_id = #{buildingId} and date(wt.cur_date) = date(#{curDate}) order by wt.device_name ") List queryWaterTemp(String buildingId, String curDate); diff --git a/mh-system/src/main/java/com/mh/system/service/IWeatherDataService.java b/mh-system/src/main/java/com/mh/system/service/IWeatherDataService.java index 8ab61d8..d33ddf3 100644 --- a/mh-system/src/main/java/com/mh/system/service/IWeatherDataService.java +++ b/mh-system/src/main/java/com/mh/system/service/IWeatherDataService.java @@ -2,6 +2,8 @@ package com.mh.system.service; import com.mh.common.core.domain.entity.WeatherData; +import java.util.List; + /** * @author LJF * @version 1.0 @@ -13,4 +15,7 @@ public interface IWeatherDataService { int insertWeatherData(WeatherData weatherData); + List selectByEnthalpyEtc(); + + void updateDataById(WeatherData weatherData); } diff --git a/mh-system/src/main/java/com/mh/system/service/device/impl/CollectionParamsManageServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/device/impl/CollectionParamsManageServiceImpl.java index 55fd22c..b870e58 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/impl/CollectionParamsManageServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/device/impl/CollectionParamsManageServiceImpl.java @@ -671,8 +671,17 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag dto.setOrderNum(vo.getOrderNum()); switch (vo.getParamType()) { - case "2": // 运行状态 - dto.setRunState(vo.getCollectValue()); + case "48": // 运行状态:改成使用电流 + // 判断电流值大于0,设置运行状态为4,否则设置为0 + List list = hotPumps.stream() + .filter(v -> "48".equals(v.getParamType()) + && vo.getId().equals(v.getId()) + && (new BigDecimal(v.getCollectValue()).compareTo(new BigDecimal("1")) > 0)).toList(); + if (!list.isEmpty()) { + dto.setRunState("4"); + } else { + dto.setRunState("0"); + } break; case "5": // 故障状态 dto.setIsFault(vo.getCollectValue()); @@ -921,8 +930,17 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag vo.setCloseSwitchId(item.getCpmId()); break; case "10": - vo.setWaterLevelSet(BigDecimal.valueOf(item.getCurValue().doubleValue())); - vo.setWaterLevelSetId(item.getCpmId()); + // 增加判断otherName + if (item.getOtherName() != null && !item.getOtherName().isEmpty() && item.getOtherName().contains("1")) { + vo.setWaterLevelSet(BigDecimal.valueOf(item.getCurValue().doubleValue())); + vo.setWaterLevelSetId(item.getCpmId()); + } else if (item.getOtherName() != null && !item.getOtherName().isEmpty() && item.getOtherName().contains("2")) { + vo.setWaterLevelSet1(BigDecimal.valueOf(item.getCurValue().doubleValue())); + vo.setWaterLevelSetId1(item.getCpmId()); + } else { + vo.setWaterLevelSet(BigDecimal.valueOf(item.getCurValue().doubleValue())); + vo.setWaterLevelSetId(item.getCpmId()); + } break; case "11": vo.setWaterLevel(BigDecimal.valueOf(item.getCurValue().doubleValue())); @@ -984,6 +1002,19 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag vo.setExceptionReset(item.getCurValue().intValue()); vo.setExceptionResetId(item.getCpmId()); break; + case "46": + // 增加判断otherName + if (item.getOtherName() != null && !item.getOtherName().isEmpty() && item.getOtherName().contains("1")) { + vo.setWaterLevelErrorSet(BigDecimal.valueOf(item.getCurValue().doubleValue())); + vo.setWaterLevelErrorSetId(item.getCpmId()); + } else if (item.getOtherName() != null && !item.getOtherName().isEmpty() && item.getOtherName().contains("2")) { + vo.setWaterLevelErrorSet1(BigDecimal.valueOf(item.getCurValue().doubleValue())); + vo.setWaterLevelErrorSetId1(item.getCpmId()); + } else { + vo.setWaterLevelErrorSet(BigDecimal.valueOf(item.getCurValue().doubleValue())); + vo.setWaterLevelErrorSetId(item.getCpmId()); + } + break; default: // 处理未识别的paramType或忽略 break; diff --git a/mh-system/src/main/java/com/mh/system/service/impl/WeatherDataServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/impl/WeatherDataServiceImpl.java index b9f31a2..0243045 100644 --- a/mh-system/src/main/java/com/mh/system/service/impl/WeatherDataServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/impl/WeatherDataServiceImpl.java @@ -5,6 +5,8 @@ import com.mh.system.mapper.WeatherDataMapper; import com.mh.system.service.IWeatherDataService; import org.springframework.stereotype.Service; +import java.util.List; + /** * @author LJF * @version 1.0 @@ -25,4 +27,14 @@ public class WeatherDataServiceImpl implements IWeatherDataService { public int insertWeatherData(WeatherData weatherData) { return weatherDataMapper.insert(weatherData); } + + @Override + public List selectByEnthalpyEtc() { + return weatherDataMapper.selectByEnthalpyEtc(); + } + + @Override + public void updateDataById(WeatherData weatherData) { + weatherDataMapper.updateDataById(weatherData); + } }