Browse Source

1、netty液位控制器采集解析程序;

2、控制水箱新增点位;
3、定时计算温度、液位sql修改;
4、广工数据天气预报定时计算焓值等相关参数;
dev
3067418132@qq.com 3 days ago
parent
commit
4a00010e3e
  1. 9
      mh-admin/src/test/java/com/mh/MHApplicationTest.java
  2. 63
      mh-common/src/main/java/com/mh/common/core/domain/dto/WeatherDataDTO.java
  3. 20
      mh-common/src/main/java/com/mh/common/core/domain/entity/WeatherData.java
  4. 15
      mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java
  5. 51
      mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java
  6. 28
      mh-common/src/main/java/com/mh/common/utils/ModbusUtils.java
  7. 99
      mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java
  8. 12
      mh-framework/src/main/java/com/mh/framework/netty/NettyServiceImpl.java
  9. 72
      mh-quartz/src/main/java/com/mh/quartz/task/GGDataTask.java
  10. 21
      mh-system/src/main/java/com/mh/system/mapper/WeatherDataMapper.java
  11. 2
      mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java
  12. 8
      mh-system/src/main/java/com/mh/system/mapper/energy/WaterLevelMapper.java
  13. 8
      mh-system/src/main/java/com/mh/system/mapper/energy/WaterTempMapper.java
  14. 5
      mh-system/src/main/java/com/mh/system/service/IWeatherDataService.java
  15. 35
      mh-system/src/main/java/com/mh/system/service/device/impl/CollectionParamsManageServiceImpl.java
  16. 12
      mh-system/src/main/java/com/mh/system/service/impl/WeatherDataServiceImpl.java

9
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.DateUtils;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.quartz.task.DealDataTask; import com.mh.quartz.task.DealDataTask;
import com.mh.quartz.task.GGDataTask;
import com.mh.quartz.task.GetWeatherDataTask; import com.mh.quartz.task.GetWeatherDataTask;
import com.mh.system.mapper.device.DataProcessMapper; import com.mh.system.mapper.device.DataProcessMapper;
import com.mh.system.service.ISysParamsService; import com.mh.system.service.ISysParamsService;
@ -51,6 +52,14 @@ public class MHApplicationTest {
@Autowired @Autowired
private DealDataTask dealDeviceData; private DealDataTask dealDeviceData;
@Autowired
private GGDataTask gGDataTask;
@Test
public void gGDataTask() {
gGDataTask.calcWeatherData();
}
@Test @Test
public void dealDeviceData() { public void dealDeviceData() {
dealDeviceData.dealDeviceData(); dealDeviceData.dealDeviceData();

63
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();
}
}

20
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") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createdTime; private Date createdTime;
/**
* 含湿量 g/kg
*/
private Double humidityContent;
/**
* 焓值kJ/kg
*/
private Double enthalpy;
/**
* 露点温度摄氏度
*/
private Double dewPointTemp;
/**
* 湿球温度
*/
private Double wetBulbTemp;
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this) return new ToStringBuilder(this)

15
mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java

@ -62,6 +62,21 @@ public class HotWaterControlVO {
private BigDecimal waterLevelSet; private BigDecimal waterLevelSet;
private String waterLevelSetId; 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 // 水位 11
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0")
private BigDecimal waterLevel; private BigDecimal waterLevel;

51
mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java

@ -391,4 +391,55 @@ public class AnalysisReceiveOrder485 {
} }
return ""; 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);
}
} }

28
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 io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
/** /**
* @author LJF * @author LJF
* @version 1.0 * @version 1.0
@ -64,4 +66,30 @@ public class ModbusUtils {
buffer.writeBytes(ExchangeStringUtil.hexStrToBinaryStr(sendStr));//对接需要16进制 buffer.writeBytes(ExchangeStringUtil.hexStrToBinaryStr(sendStr));//对接需要16进制
return buffer; 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;
}
} }

99
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 { public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
//心跳包报文: 24 00 60 95 //心跳包报文: 24 00 60 95
receiveStr = receiveStr.toUpperCase();//返回值全部变成大写 receiveStr = receiveStr.toUpperCase();//返回值全部变成大写
// log.info("channelReadComplete接收到的数据{}, 长度: ===> {}", receiveStr, receiveStr.length());
//心跳包处理 //心跳包处理
if ((receiveStr.length() == 8) && receiveStr.startsWith("24")) { 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); dealSession(ctx);
idleCount = 1; idleCount = 1;
@ -147,7 +141,6 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter {
deviceCodeParamList = arrayCache.toList(CollectionParamsManage.class); deviceCodeParamList = arrayCache.toList(CollectionParamsManage.class);
} }
size = deviceCodeParamList.size(); size = deviceCodeParamList.size();
// // log.info("deviceCodeParam size ===> {}", size);
// 清空receiveStr // 清空receiveStr
receiveStr = ""; receiveStr = "";
num = 0; num = 0;
@ -160,14 +153,36 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter {
} else { } else {
ctx.channel().close(); ctx.channel().close();
} }
} else {
// log.info("gateway not find deviceCodeParam!");
} }
} else if (receiveStr.length() == 18) { } else if (receiveStr.length() == 18) {
// 水电表返回数据解析 // 水电表返回数据解析或者液位传感器数据返回
idleCount = 1; idleCount = 1;
// log.info("水电表、热泵设置接收==>{},长度:{}", receiveStr, receiveStr.length()); 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); nextSendOrder(ctx);
}
} else if (receiveStr.length() == 12 || receiveStr.length() == 14) { } else if (receiveStr.length() == 12 || receiveStr.length() == 14) {
// 热泵返回数据解析 // 热泵返回数据解析
idleCount = 1; idleCount = 1;
@ -196,7 +211,15 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter {
redisCache.deleteObject("order_send_read"); redisCache.deleteObject("order_send_read");
} }
} else { } else {
// 液位控制之类响应返回
if (receiveStr.length() == 12 && "10".equals(receiveStr.substring(2,4))) {
// 液位控制返回数据解析
idleCount = 1;
nextSendOrder(ctx); nextSendOrder(ctx);
controlOrder(ctx);
} else {
nextSendOrder(ctx);
}
} }
} else if (receiveStr.length() == 16) { } else if (receiveStr.length() == 16) {
idleCount = 1; idleCount = 1;
@ -235,19 +258,21 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter {
} else { } else {
orderSendRegisterStr = orderSendStr.substring(4, 8); orderSendRegisterStr = orderSendStr.substring(4, 8);
} }
// // 发送读取热泵设置温度 String readOrder = "";
// String controlCode = ModbusUtils.createReadOrder(orderSendStr.substring(0, 2),
// "03",
// "0003",
// "1");
// SendOrderUtils.sendOrderToDTU(ctx, controlCode);
if (receiveStr.contains(orderSendStr)) { if (receiveStr.contains(orderSendStr)) {
String readOrder = ModbusUtils.createReadOrder(orderSendStr.substring(0, 2), // 发送读取热泵设置温度
readOrder = ModbusUtils.createReadOrder(orderSendStr.substring(0, 2),
"03", "03",
orderSendRegisterStr, orderSendRegisterStr,
"1"); "1");
// 初始化发送指令
// NettyTools.initReceiveMsg("order_wait_read"); } 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); redisCache.setCacheObject("order_send_read", readOrder, 10, TimeUnit.SECONDS);
ctx.writeAndFlush(ModbusUtils.createByteBuf(readOrder)); ctx.writeAndFlush(ModbusUtils.createByteBuf(readOrder));
@ -264,7 +289,6 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter {
} }
} }
} }
}
private void dealSession(ChannelHandlerContext ctx) { private void dealSession(ChannelHandlerContext ctx) {
// 获取表号 // 获取表号
@ -374,15 +398,35 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter {
case "48" -> case "48" ->
// 热泵读取电流 // 热泵读取电流
analysisData = analysisReceiveOrder485.analysisHeatPumpOrder485(receiveStr, deviceCodeParamEntity); analysisData = analysisReceiveOrder485.analysisHeatPumpOrder485(receiveStr, deviceCodeParamEntity);
case "11" -> case "11" -> {
// 液位设定值
if (deviceCodeParamEntity.getMtType().equals("11")) {
analysisData = analysisReceiveOrder485.analysisLiquidControlOrder485(receiveStr, deviceCodeParamEntity);
} else {
// 液位计 // 液位计
analysisData = analysisReceiveOrder485.analysisLiquidOrder485(receiveStr, deviceCodeParamEntity); analysisData = analysisReceiveOrder485.analysisLiquidOrder485(receiveStr, deviceCodeParamEntity);
}
}
case "13" -> case "13" ->
// 压力 // 压力
analysisData = analysisReceiveOrder485.analysisTempHumiditySensorOrder485(receiveStr, deviceCodeParamEntity); analysisData = analysisReceiveOrder485.analysisTempHumiditySensorOrder485(receiveStr, deviceCodeParamEntity);
case "35" -> case "35" ->
// 湿度 // 湿度
analysisData = analysisReceiveOrder485.analysisTempHumiditySensorOrder485(receiveStr, deviceCodeParamEntity); 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 -> { default -> {
// log.info("设备类型错误"); // log.info("设备类型错误");
return; return;
@ -404,6 +448,17 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter {
advantechReceiver.setD(advantechDatas); advantechReceiver.setD(advantechDatas);
// log.error("接收到的指令==》{},发送数据到MQTT==》{}", receiveStr, JSONObject.toJSONString(advantechReceiver)); // log.error("接收到的指令==》{},发送数据到MQTT==》{}", receiveStr, JSONObject.toJSONString(advantechReceiver));
sendMsgByTopic.sendToDeviceMQ(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));
}
} }
// 异常捕捉 // 异常捕捉

12
mh-framework/src/main/java/com/mh/framework/netty/NettyServiceImpl.java

@ -73,11 +73,21 @@ public class NettyServiceImpl implements INettyService {
} }
if (flag) { if (flag) {
ServerSession serverSession = map.get(keyVal); ServerSession serverSession = map.get(keyVal);
String controlCode = "";
// 增加了液位控制仪
if ("8".equals(collectionParamsManage.getMtType())) {
controlCode = ModbusUtils.createTenControlCode(collectionParamsManage.getMtCode(),
changeValue.getType(),
collectionParamsManage.getRegisterAddr(),
collectionParamsManage.getDigits(),
changeValue.getParam());
} else {
// 目前只有DTU,modbus方式,只创建modbus先 // 目前只有DTU,modbus方式,只创建modbus先
String controlCode = ModbusUtils.createControlCode(collectionParamsManage.getMtCode(), controlCode = ModbusUtils.createControlCode(collectionParamsManage.getMtCode(),
changeValue.getType(), changeValue.getType(),
collectionParamsManage.getRegisterAddr(), collectionParamsManage.getRegisterAddr(),
changeValue.getParam()); changeValue.getParam());
}
if (StringUtils.isEmpty(controlCode)) { if (StringUtils.isEmpty(controlCode)) {
log.error("创建控制码失败"); log.error("创建控制码失败");
return false; return false;

72
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<WeatherData> 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());
}
}
}
}
}

21
mh-system/src/main/java/com/mh/system/mapper/WeatherDataMapper.java

@ -1,10 +1,15 @@
package com.mh.system.mapper; package com.mh.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mh.common.core.domain.dto.WeatherDataDTO;
import com.mh.common.core.domain.entity.WeatherData; import com.mh.common.core.domain.entity.WeatherData;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/** /**
* @author LJF * @author LJF
* @version 1.0 * @version 1.0
@ -17,4 +22,20 @@ public interface WeatherDataMapper extends BaseMapper<WeatherData> {
@Select("select * from weather_data where report_time::date = #{date}::date order by report_time desc limit 1") @Select("select * from weather_data where report_time::date = #{date}::date order by report_time desc limit 1")
WeatherData selectWeatherDataByDate(@Param("date") String date); 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<WeatherDataDTO> getWeatherTemp(@Param("startTime") String startTime, @Param("endTime") String endTime);
@Select("select * from weather_data where enthalpy is null order by report_time ")
List<WeatherData> 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);
} }

2
mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java

@ -355,9 +355,11 @@ public interface CollectionParamsManageMapper extends BaseMapper<CollectionParam
" or param_type='18' " + " or param_type='18' " +
" or param_type = '5' " + " or param_type = '5' " +
" or param_type = '2' " + " or param_type = '2' " +
" or param_type = '10' " +
" or param_type = '12' " + " or param_type = '12' " +
" or param_type = '14' " + " or param_type = '14' " +
" or param_type = '11' " + " or param_type = '11' " +
" or param_type = '46' " +
" or param_type = '48')") " or param_type = '48')")
List<CollectionParamsManage> createOrderList(); List<CollectionParamsManage> createOrderList();
} }

8
mh-system/src/main/java/com/mh/system/mapper/energy/WaterLevelMapper.java

@ -36,7 +36,7 @@ public interface WaterLevelMapper extends BaseMapper<WaterLevel> {
" cpm.device_ledger_id = dl.id " + " cpm.device_ledger_id = dl.id " +
" where " + " where " +
" dl.system_type = '1' " + " dl.system_type = '1' " +
" and device_type = '16' " + " and (device_type = '16' or device_type = '17') " +
" and cpm.param_type = '11' " + " and cpm.param_type = '11' " +
" ) t1 " + " ) t1 " +
"join cpm_space_relation csr on " + "join cpm_space_relation csr on " +
@ -60,7 +60,7 @@ public interface WaterLevelMapper extends BaseMapper<WaterLevel> {
@Select("select " + @Select("select " +
" wt.building_id, " + " 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(temp00::numeric(24, 1)),1) as temp00, " +
" ROUND(avg(temp01::numeric(24, 1)),1) as temp01, " + " ROUND(avg(temp01::numeric(24, 1)),1) as temp01, " +
" ROUND(avg(temp02::numeric(24, 1)),1) as temp02, " + " ROUND(avg(temp02::numeric(24, 1)),1) as temp02, " +
@ -92,10 +92,10 @@ public interface WaterLevelMapper extends BaseMapper<WaterLevel> {
" date(wt.cur_date) = date(#{curDate}) " + " date(wt.cur_date) = date(#{curDate}) " +
"group by " + "group by " +
" wt.building_id, fi.floor_name " + " wt.building_id, fi.floor_name " +
"order by SUBSTRING(fi.floor_name FROM '(-?\\d)') ") "order by fi.floor_name ")
List<WaterLevel> queryAvgWaterTemp(String curDate); List<WaterLevel> 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 " + " 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 ") " where wt.building_id = #{buildingId} and date(wt.cur_date) = date(#{curDate}) order by wt.device_name ")
List<WaterLevel> queryWaterTemp(String buildingId, String curDate); List<WaterLevel> queryWaterTemp(String buildingId, String curDate);

8
mh-system/src/main/java/com/mh/system/mapper/energy/WaterTempMapper.java

@ -37,7 +37,7 @@ public interface WaterTempMapper extends BaseMapper<WaterTemp> {
" cpm.device_ledger_id = dl.id " + " cpm.device_ledger_id = dl.id " +
" where " + " where " +
" dl.system_type = '1' " + " 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' " + " and cpm.param_type = '12' " +
" ) t1 " + " ) t1 " +
"join cpm_space_relation csr on " + "join cpm_space_relation csr on " +
@ -61,7 +61,7 @@ public interface WaterTempMapper extends BaseMapper<WaterTemp> {
@Select("select " + @Select("select " +
" wt.building_id, " + " 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(temp00::numeric(24, 1)),1) as temp00, " +
" ROUND(avg(temp01::numeric(24, 1)),1) as temp01, " + " ROUND(avg(temp01::numeric(24, 1)),1) as temp01, " +
" ROUND(avg(temp02::numeric(24, 1)),1) as temp02, " + " ROUND(avg(temp02::numeric(24, 1)),1) as temp02, " +
@ -93,10 +93,10 @@ public interface WaterTempMapper extends BaseMapper<WaterTemp> {
" date(wt.cur_date) = date(#{curDate}) " + " date(wt.cur_date) = date(#{curDate}) " +
"group by " + "group by " +
" wt.building_id, fi.floor_name " + " wt.building_id, fi.floor_name " +
"order by SUBSTRING(fi.floor_name FROM '(-?\\d)') ") "order by fi.floor_name ")
List<WaterTemp> queryAvgWaterTemp(String curDate); List<WaterTemp> 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 " + " 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 ") " where wt.building_id = #{buildingId} and date(wt.cur_date) = date(#{curDate}) order by wt.device_name ")
List<WaterTemp> queryWaterTemp(String buildingId, String curDate); List<WaterTemp> queryWaterTemp(String buildingId, String curDate);

5
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 com.mh.common.core.domain.entity.WeatherData;
import java.util.List;
/** /**
* @author LJF * @author LJF
* @version 1.0 * @version 1.0
@ -13,4 +15,7 @@ public interface IWeatherDataService {
int insertWeatherData(WeatherData weatherData); int insertWeatherData(WeatherData weatherData);
List<WeatherData> selectByEnthalpyEtc();
void updateDataById(WeatherData weatherData);
} }

35
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()); dto.setOrderNum(vo.getOrderNum());
switch (vo.getParamType()) { switch (vo.getParamType()) {
case "2": // 运行状态 case "48": // 运行状态:改成使用电流
dto.setRunState(vo.getCollectValue()); // 判断电流值大于0,设置运行状态为4,否则设置为0
List<DeviceMonitorVO> 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; break;
case "5": // 故障状态 case "5": // 故障状态
dto.setIsFault(vo.getCollectValue()); dto.setIsFault(vo.getCollectValue());
@ -921,8 +930,17 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag
vo.setCloseSwitchId(item.getCpmId()); vo.setCloseSwitchId(item.getCpmId());
break; break;
case "10": case "10":
// 增加判断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.setWaterLevelSet(BigDecimal.valueOf(item.getCurValue().doubleValue()));
vo.setWaterLevelSetId(item.getCpmId()); vo.setWaterLevelSetId(item.getCpmId());
}
break; break;
case "11": case "11":
vo.setWaterLevel(BigDecimal.valueOf(item.getCurValue().doubleValue())); vo.setWaterLevel(BigDecimal.valueOf(item.getCurValue().doubleValue()));
@ -984,6 +1002,19 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag
vo.setExceptionReset(item.getCurValue().intValue()); vo.setExceptionReset(item.getCurValue().intValue());
vo.setExceptionResetId(item.getCpmId()); vo.setExceptionResetId(item.getCpmId());
break; 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: default:
// 处理未识别的paramType或忽略 // 处理未识别的paramType或忽略
break; break;

12
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 com.mh.system.service.IWeatherDataService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* @author LJF * @author LJF
* @version 1.0 * @version 1.0
@ -25,4 +27,14 @@ public class WeatherDataServiceImpl implements IWeatherDataService {
public int insertWeatherData(WeatherData weatherData) { public int insertWeatherData(WeatherData weatherData) {
return weatherDataMapper.insert(weatherData); return weatherDataMapper.insert(weatherData);
} }
@Override
public List<WeatherData> selectByEnthalpyEtc() {
return weatherDataMapper.selectByEnthalpyEtc();
}
@Override
public void updateDataById(WeatherData weatherData) {
weatherDataMapper.updateDataById(weatherData);
}
} }

Loading…
Cancel
Save